auto-regenerate .pb.go files (#315)

This is an auto-generated regeneration of the .pb.go files by
cloud.google.com/go/internal/gapicgen. Once this PR is submitted, genmgr will
update the corresponding CL at gocloud to depend on the newer version of
go-genproto, and assign reviewers. Whilst this or any regen PR is open in
go-genproto, gapicgen will not create any more regeneration PRs or CLs. If all
regen PRs are closed, gapicgen will create a new set of regeneration PRs and
CLs once per night.

If you have been assigned to review this CL, please:

- Ensure that CI is passing. If it's failing, it requires your manual attention.
- Approve and submit this PR if you believe it's ready to ship. That will prompt
  genmgr to assign reviewers to the gocloud CL.

Corresponding gocloud CL: https://code-review.googlesource.com/c/gocloud/+/52830
diff --git a/googleapis/ads/googleads/v3/common/ad_asset.pb.go b/googleapis/ads/googleads/v3/common/ad_asset.pb.go
new file mode 100644
index 0000000..f880759
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/ad_asset.pb.go
@@ -0,0 +1,241 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/ad_asset.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A text asset used inside an ad.
+type AdTextAsset struct {
+	// Asset text.
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The pinned field of the asset. This restricts the asset to only serve
+	// within this field. Multiple assets can be pinned to the same field. An
+	// asset that is unpinned or pinned to a different field will not serve in a
+	// field where some other asset has been pinned.
+	PinnedField          enums.ServedAssetFieldTypeEnum_ServedAssetFieldType `protobuf:"varint,2,opt,name=pinned_field,json=pinnedField,proto3,enum=google.ads.googleads.v3.enums.ServedAssetFieldTypeEnum_ServedAssetFieldType" json:"pinned_field,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *AdTextAsset) Reset()         { *m = AdTextAsset{} }
+func (m *AdTextAsset) String() string { return proto.CompactTextString(m) }
+func (*AdTextAsset) ProtoMessage()    {}
+func (*AdTextAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0fa6efb5f889d94f, []int{0}
+}
+
+func (m *AdTextAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdTextAsset.Unmarshal(m, b)
+}
+func (m *AdTextAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdTextAsset.Marshal(b, m, deterministic)
+}
+func (m *AdTextAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdTextAsset.Merge(m, src)
+}
+func (m *AdTextAsset) XXX_Size() int {
+	return xxx_messageInfo_AdTextAsset.Size(m)
+}
+func (m *AdTextAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdTextAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdTextAsset proto.InternalMessageInfo
+
+func (m *AdTextAsset) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *AdTextAsset) GetPinnedField() enums.ServedAssetFieldTypeEnum_ServedAssetFieldType {
+	if m != nil {
+		return m.PinnedField
+	}
+	return enums.ServedAssetFieldTypeEnum_UNSPECIFIED
+}
+
+// An image asset used inside an ad.
+type AdImageAsset struct {
+	// The Asset resource name of this image.
+	Asset                *wrappers.StringValue `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdImageAsset) Reset()         { *m = AdImageAsset{} }
+func (m *AdImageAsset) String() string { return proto.CompactTextString(m) }
+func (*AdImageAsset) ProtoMessage()    {}
+func (*AdImageAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0fa6efb5f889d94f, []int{1}
+}
+
+func (m *AdImageAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdImageAsset.Unmarshal(m, b)
+}
+func (m *AdImageAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdImageAsset.Marshal(b, m, deterministic)
+}
+func (m *AdImageAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdImageAsset.Merge(m, src)
+}
+func (m *AdImageAsset) XXX_Size() int {
+	return xxx_messageInfo_AdImageAsset.Size(m)
+}
+func (m *AdImageAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdImageAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdImageAsset proto.InternalMessageInfo
+
+func (m *AdImageAsset) GetAsset() *wrappers.StringValue {
+	if m != nil {
+		return m.Asset
+	}
+	return nil
+}
+
+// A video asset used inside an ad.
+type AdVideoAsset struct {
+	// The Asset resource name of this video.
+	Asset                *wrappers.StringValue `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdVideoAsset) Reset()         { *m = AdVideoAsset{} }
+func (m *AdVideoAsset) String() string { return proto.CompactTextString(m) }
+func (*AdVideoAsset) ProtoMessage()    {}
+func (*AdVideoAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0fa6efb5f889d94f, []int{2}
+}
+
+func (m *AdVideoAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdVideoAsset.Unmarshal(m, b)
+}
+func (m *AdVideoAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdVideoAsset.Marshal(b, m, deterministic)
+}
+func (m *AdVideoAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdVideoAsset.Merge(m, src)
+}
+func (m *AdVideoAsset) XXX_Size() int {
+	return xxx_messageInfo_AdVideoAsset.Size(m)
+}
+func (m *AdVideoAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdVideoAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdVideoAsset proto.InternalMessageInfo
+
+func (m *AdVideoAsset) GetAsset() *wrappers.StringValue {
+	if m != nil {
+		return m.Asset
+	}
+	return nil
+}
+
+// A media bundle asset used inside an ad.
+type AdMediaBundleAsset struct {
+	// The Asset resource name of this media bundle.
+	Asset                *wrappers.StringValue `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdMediaBundleAsset) Reset()         { *m = AdMediaBundleAsset{} }
+func (m *AdMediaBundleAsset) String() string { return proto.CompactTextString(m) }
+func (*AdMediaBundleAsset) ProtoMessage()    {}
+func (*AdMediaBundleAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0fa6efb5f889d94f, []int{3}
+}
+
+func (m *AdMediaBundleAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdMediaBundleAsset.Unmarshal(m, b)
+}
+func (m *AdMediaBundleAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdMediaBundleAsset.Marshal(b, m, deterministic)
+}
+func (m *AdMediaBundleAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdMediaBundleAsset.Merge(m, src)
+}
+func (m *AdMediaBundleAsset) XXX_Size() int {
+	return xxx_messageInfo_AdMediaBundleAsset.Size(m)
+}
+func (m *AdMediaBundleAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdMediaBundleAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdMediaBundleAsset proto.InternalMessageInfo
+
+func (m *AdMediaBundleAsset) GetAsset() *wrappers.StringValue {
+	if m != nil {
+		return m.Asset
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdTextAsset)(nil), "google.ads.googleads.v3.common.AdTextAsset")
+	proto.RegisterType((*AdImageAsset)(nil), "google.ads.googleads.v3.common.AdImageAsset")
+	proto.RegisterType((*AdVideoAsset)(nil), "google.ads.googleads.v3.common.AdVideoAsset")
+	proto.RegisterType((*AdMediaBundleAsset)(nil), "google.ads.googleads.v3.common.AdMediaBundleAsset")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/ad_asset.proto", fileDescriptor_0fa6efb5f889d94f)
+}
+
+var fileDescriptor_0fa6efb5f889d94f = []byte{
+	// 400 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xcd, 0x6a, 0xdc, 0x30,
+	0x10, 0xc7, 0xf1, 0xf6, 0xe3, 0xa0, 0x5d, 0x7a, 0xf0, 0x29, 0x84, 0x10, 0x82, 0x4f, 0xb9, 0x54,
+	0x2a, 0xeb, 0x9b, 0x72, 0x92, 0xfb, 0x91, 0x16, 0x5a, 0x08, 0x49, 0xf0, 0xa1, 0x18, 0x16, 0x25,
+	0x9a, 0x08, 0x81, 0x2d, 0x09, 0x4b, 0xde, 0x26, 0xaf, 0xd3, 0x63, 0x4f, 0x7d, 0x8e, 0xbe, 0x48,
+	0xa1, 0x4f, 0x51, 0xac, 0xb1, 0xf7, 0xd4, 0x2d, 0x21, 0xa7, 0x9d, 0x95, 0x7e, 0xfe, 0xcd, 0x7f,
+	0xc4, 0x90, 0xd7, 0xda, 0x39, 0xdd, 0x02, 0x93, 0x2a, 0x30, 0x2c, 0xc7, 0x6a, 0x5b, 0xb2, 0x5b,
+	0xd7, 0x75, 0xce, 0x32, 0xa9, 0x36, 0x32, 0x04, 0x88, 0xd4, 0xf7, 0x2e, 0xba, 0xfc, 0x18, 0x19,
+	0x2a, 0x55, 0xa0, 0x3b, 0x9c, 0x6e, 0x4b, 0x8a, 0xf8, 0xe1, 0xd9, 0x3e, 0x1d, 0xd8, 0xa1, 0x0b,
+	0x2c, 0x40, 0xbf, 0x85, 0xc9, 0xb8, 0xb9, 0x33, 0xd0, 0xaa, 0x4d, 0x7c, 0xf0, 0x80, 0xf2, 0xc3,
+	0x49, 0xce, 0xd2, 0xbf, 0x9b, 0xe1, 0x8e, 0x7d, 0xeb, 0xa5, 0xf7, 0xd0, 0x87, 0xe9, 0xfe, 0x68,
+	0x96, 0x7b, 0xc3, 0xa4, 0xb5, 0x2e, 0xca, 0x68, 0x9c, 0x9d, 0x6e, 0x8b, 0x9f, 0x19, 0x59, 0x0a,
+	0x75, 0x0d, 0xf7, 0x51, 0x8c, 0xfa, 0xfc, 0x0d, 0x79, 0x1e, 0xe1, 0x3e, 0x1e, 0x64, 0x27, 0xd9,
+	0xe9, 0x72, 0x7d, 0x34, 0xc5, 0xa5, 0xb3, 0x9c, 0x5e, 0xc5, 0xde, 0x58, 0x5d, 0xcb, 0x76, 0x80,
+	0xcb, 0x44, 0xe6, 0x8e, 0xac, 0xbc, 0xb1, 0x16, 0x14, 0x46, 0x3b, 0x58, 0x9c, 0x64, 0xa7, 0xaf,
+	0xd6, 0x9f, 0xe9, 0xbe, 0x99, 0xd3, 0x4c, 0xf4, 0x2a, 0xcd, 0x94, 0x7a, 0x7e, 0x18, 0x3f, 0xbb,
+	0x7e, 0xf0, 0xf0, 0xde, 0x0e, 0xdd, 0x3f, 0x2f, 0x2e, 0x97, 0xd8, 0x21, 0x1d, 0x14, 0x15, 0x59,
+	0x09, 0xf5, 0xa9, 0x93, 0x1a, 0x30, 0xf2, 0x9a, 0xbc, 0x48, 0x4f, 0xf3, 0xa8, 0xcc, 0x88, 0xa2,
+	0xa3, 0x36, 0x0a, 0xdc, 0xd3, 0x1d, 0x1f, 0x49, 0x2e, 0xd4, 0x17, 0x50, 0x46, 0x56, 0x83, 0x55,
+	0xed, 0xd3, 0xd3, 0x54, 0xbf, 0x33, 0x52, 0xdc, 0xba, 0x8e, 0xfe, 0x7f, 0x4d, 0xaa, 0x95, 0xc0,
+	0x77, 0xb9, 0x18, 0x55, 0x17, 0xd9, 0xd7, 0x77, 0x13, 0xaf, 0x5d, 0x2b, 0xad, 0xa6, 0xae, 0xd7,
+	0x4c, 0x83, 0x4d, 0x8d, 0xe6, 0x35, 0xf2, 0x26, 0xec, 0x5b, 0xd2, 0x33, 0xfc, 0xf9, 0xbe, 0x78,
+	0x76, 0x2e, 0xc4, 0x8f, 0xc5, 0xf1, 0x39, 0xca, 0x84, 0x0a, 0x14, 0xcb, 0xb1, 0xaa, 0x4b, 0xfa,
+	0x36, 0x61, 0xbf, 0x66, 0xa0, 0x11, 0x2a, 0x34, 0x3b, 0xa0, 0xa9, 0xcb, 0x06, 0x81, 0x3f, 0x8b,
+	0x02, 0x4f, 0x39, 0x17, 0x2a, 0x70, 0xbe, 0x43, 0x38, 0xaf, 0x4b, 0xce, 0x11, 0xba, 0x79, 0x99,
+	0xd2, 0x95, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x61, 0x48, 0xbb, 0x41, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/ad_type_infos.pb.go b/googleapis/ads/googleads/v3/common/ad_type_infos.pb.go
new file mode 100644
index 0000000..55f3be7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/ad_type_infos.pb.go
@@ -0,0 +1,2393 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/ad_type_infos.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A text ad.
+type TextAdInfo struct {
+	// The headline of the ad.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// The first line of the ad's description.
+	Description1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second line of the ad's description.
+	Description2         *wrappers.StringValue `protobuf:"bytes,3,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TextAdInfo) Reset()         { *m = TextAdInfo{} }
+func (m *TextAdInfo) String() string { return proto.CompactTextString(m) }
+func (*TextAdInfo) ProtoMessage()    {}
+func (*TextAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{0}
+}
+
+func (m *TextAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TextAdInfo.Unmarshal(m, b)
+}
+func (m *TextAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TextAdInfo.Marshal(b, m, deterministic)
+}
+func (m *TextAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TextAdInfo.Merge(m, src)
+}
+func (m *TextAdInfo) XXX_Size() int {
+	return xxx_messageInfo_TextAdInfo.Size(m)
+}
+func (m *TextAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_TextAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TextAdInfo proto.InternalMessageInfo
+
+func (m *TextAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *TextAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *TextAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// An expanded text ad.
+type ExpandedTextAdInfo struct {
+	// The first part of the ad's headline.
+	HeadlinePart1 *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline_part1,json=headlinePart1,proto3" json:"headline_part1,omitempty"`
+	// The second part of the ad's headline.
+	HeadlinePart2 *wrappers.StringValue `protobuf:"bytes,2,opt,name=headline_part2,json=headlinePart2,proto3" json:"headline_part2,omitempty"`
+	// The third part of the ad's headline.
+	HeadlinePart3 *wrappers.StringValue `protobuf:"bytes,6,opt,name=headline_part3,json=headlinePart3,proto3" json:"headline_part3,omitempty"`
+	// The description of the ad.
+	Description *wrappers.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// The second description of the ad.
+	Description2 *wrappers.StringValue `protobuf:"bytes,7,opt,name=description2,proto3" json:"description2,omitempty"`
+	// The text that can appear alongside the ad's displayed URL.
+	Path1 *wrappers.StringValue `protobuf:"bytes,4,opt,name=path1,proto3" json:"path1,omitempty"`
+	// Additional text that can appear alongside the ad's displayed URL.
+	Path2                *wrappers.StringValue `protobuf:"bytes,5,opt,name=path2,proto3" json:"path2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ExpandedTextAdInfo) Reset()         { *m = ExpandedTextAdInfo{} }
+func (m *ExpandedTextAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ExpandedTextAdInfo) ProtoMessage()    {}
+func (*ExpandedTextAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{1}
+}
+
+func (m *ExpandedTextAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpandedTextAdInfo.Unmarshal(m, b)
+}
+func (m *ExpandedTextAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpandedTextAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ExpandedTextAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpandedTextAdInfo.Merge(m, src)
+}
+func (m *ExpandedTextAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ExpandedTextAdInfo.Size(m)
+}
+func (m *ExpandedTextAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpandedTextAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpandedTextAdInfo proto.InternalMessageInfo
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart1() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart1
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart2() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart2
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart3() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart3
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetPath1() *wrappers.StringValue {
+	if m != nil {
+		return m.Path1
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetPath2() *wrappers.StringValue {
+	if m != nil {
+		return m.Path2
+	}
+	return nil
+}
+
+// A call-only ad.
+type CallOnlyAdInfo struct {
+	// The country code in the ad.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// The phone number in the ad.
+	PhoneNumber *wrappers.StringValue `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	// The business name in the ad.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,3,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// First headline in the ad.
+	Headline1 *wrappers.StringValue `protobuf:"bytes,11,opt,name=headline1,proto3" json:"headline1,omitempty"`
+	// Second headline in the ad.
+	Headline2 *wrappers.StringValue `protobuf:"bytes,12,opt,name=headline2,proto3" json:"headline2,omitempty"`
+	// The first line of the ad's description.
+	Description1 *wrappers.StringValue `protobuf:"bytes,4,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second line of the ad's description.
+	Description2 *wrappers.StringValue `protobuf:"bytes,5,opt,name=description2,proto3" json:"description2,omitempty"`
+	// Whether to enable call tracking for the creative. Enabling call
+	// tracking also enables call conversions.
+	CallTracked *wrappers.BoolValue `protobuf:"bytes,6,opt,name=call_tracked,json=callTracked,proto3" json:"call_tracked,omitempty"`
+	// Whether to disable call conversion for the creative.
+	// If set to `true`, disables call conversions even when `call_tracked` is
+	// `true`.
+	// If `call_tracked` is `false`, this field is ignored.
+	DisableCallConversion *wrappers.BoolValue `protobuf:"bytes,7,opt,name=disable_call_conversion,json=disableCallConversion,proto3" json:"disable_call_conversion,omitempty"`
+	// The URL to be used for phone number verification.
+	PhoneNumberVerificationUrl *wrappers.StringValue `protobuf:"bytes,8,opt,name=phone_number_verification_url,json=phoneNumberVerificationUrl,proto3" json:"phone_number_verification_url,omitempty"`
+	// The conversion action to attribute a call conversion to. If not set a
+	// default conversion action is used. This field only has effect if
+	// call_tracked is set to true. Otherwise this field is ignored.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,9,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The call conversion behavior of this call only ad. It can use its own call
+	// conversion setting, inherit the account level setting, or be disabled.
+	ConversionReportingState enums.CallConversionReportingStateEnum_CallConversionReportingState `protobuf:"varint,10,opt,name=conversion_reporting_state,json=conversionReportingState,proto3,enum=google.ads.googleads.v3.enums.CallConversionReportingStateEnum_CallConversionReportingState" json:"conversion_reporting_state,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                                                            `json:"-"`
+	XXX_unrecognized         []byte                                                              `json:"-"`
+	XXX_sizecache            int32                                                               `json:"-"`
+}
+
+func (m *CallOnlyAdInfo) Reset()         { *m = CallOnlyAdInfo{} }
+func (m *CallOnlyAdInfo) String() string { return proto.CompactTextString(m) }
+func (*CallOnlyAdInfo) ProtoMessage()    {}
+func (*CallOnlyAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{2}
+}
+
+func (m *CallOnlyAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallOnlyAdInfo.Unmarshal(m, b)
+}
+func (m *CallOnlyAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallOnlyAdInfo.Marshal(b, m, deterministic)
+}
+func (m *CallOnlyAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallOnlyAdInfo.Merge(m, src)
+}
+func (m *CallOnlyAdInfo) XXX_Size() int {
+	return xxx_messageInfo_CallOnlyAdInfo.Size(m)
+}
+func (m *CallOnlyAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallOnlyAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallOnlyAdInfo proto.InternalMessageInfo
+
+func (m *CallOnlyAdInfo) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetHeadline1() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline1
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetHeadline2() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline2
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetCallTracked() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallTracked
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDisableCallConversion() *wrappers.BoolValue {
+	if m != nil {
+		return m.DisableCallConversion
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetPhoneNumberVerificationUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumberVerificationUrl
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetConversionReportingState() enums.CallConversionReportingStateEnum_CallConversionReportingState {
+	if m != nil {
+		return m.ConversionReportingState
+	}
+	return enums.CallConversionReportingStateEnum_UNSPECIFIED
+}
+
+// An expanded dynamic search ad.
+type ExpandedDynamicSearchAdInfo struct {
+	// The description of the ad.
+	Description *wrappers.StringValue `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
+	// The second description of the ad.
+	Description2         *wrappers.StringValue `protobuf:"bytes,2,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ExpandedDynamicSearchAdInfo) Reset()         { *m = ExpandedDynamicSearchAdInfo{} }
+func (m *ExpandedDynamicSearchAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ExpandedDynamicSearchAdInfo) ProtoMessage()    {}
+func (*ExpandedDynamicSearchAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{3}
+}
+
+func (m *ExpandedDynamicSearchAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Unmarshal(m, b)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpandedDynamicSearchAdInfo.Merge(m, src)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Size(m)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpandedDynamicSearchAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpandedDynamicSearchAdInfo proto.InternalMessageInfo
+
+func (m *ExpandedDynamicSearchAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *ExpandedDynamicSearchAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// A hotel ad.
+type HotelAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelAdInfo) Reset()         { *m = HotelAdInfo{} }
+func (m *HotelAdInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelAdInfo) ProtoMessage()    {}
+func (*HotelAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{4}
+}
+
+func (m *HotelAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelAdInfo.Unmarshal(m, b)
+}
+func (m *HotelAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelAdInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelAdInfo.Merge(m, src)
+}
+func (m *HotelAdInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelAdInfo.Size(m)
+}
+func (m *HotelAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelAdInfo proto.InternalMessageInfo
+
+// A Smart Shopping ad.
+type ShoppingSmartAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ShoppingSmartAdInfo) Reset()         { *m = ShoppingSmartAdInfo{} }
+func (m *ShoppingSmartAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ShoppingSmartAdInfo) ProtoMessage()    {}
+func (*ShoppingSmartAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{5}
+}
+
+func (m *ShoppingSmartAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Unmarshal(m, b)
+}
+func (m *ShoppingSmartAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ShoppingSmartAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingSmartAdInfo.Merge(m, src)
+}
+func (m *ShoppingSmartAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Size(m)
+}
+func (m *ShoppingSmartAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingSmartAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingSmartAdInfo proto.InternalMessageInfo
+
+// A standard Shopping ad.
+type ShoppingProductAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ShoppingProductAdInfo) Reset()         { *m = ShoppingProductAdInfo{} }
+func (m *ShoppingProductAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ShoppingProductAdInfo) ProtoMessage()    {}
+func (*ShoppingProductAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{6}
+}
+
+func (m *ShoppingProductAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingProductAdInfo.Unmarshal(m, b)
+}
+func (m *ShoppingProductAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingProductAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ShoppingProductAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingProductAdInfo.Merge(m, src)
+}
+func (m *ShoppingProductAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ShoppingProductAdInfo.Size(m)
+}
+func (m *ShoppingProductAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingProductAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingProductAdInfo proto.InternalMessageInfo
+
+// A Shopping Comparison Listing ad.
+type ShoppingComparisonListingAdInfo struct {
+	// Headline of the ad. This field is required. Allowed length is between 25
+	// and 45 characters.
+	Headline             *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ShoppingComparisonListingAdInfo) Reset()         { *m = ShoppingComparisonListingAdInfo{} }
+func (m *ShoppingComparisonListingAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ShoppingComparisonListingAdInfo) ProtoMessage()    {}
+func (*ShoppingComparisonListingAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{7}
+}
+
+func (m *ShoppingComparisonListingAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingComparisonListingAdInfo.Unmarshal(m, b)
+}
+func (m *ShoppingComparisonListingAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingComparisonListingAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ShoppingComparisonListingAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingComparisonListingAdInfo.Merge(m, src)
+}
+func (m *ShoppingComparisonListingAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ShoppingComparisonListingAdInfo.Size(m)
+}
+func (m *ShoppingComparisonListingAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingComparisonListingAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingComparisonListingAdInfo proto.InternalMessageInfo
+
+func (m *ShoppingComparisonListingAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+// A Gmail ad.
+type GmailAdInfo struct {
+	// The Gmail teaser.
+	Teaser *GmailTeaser `protobuf:"bytes,1,opt,name=teaser,proto3" json:"teaser,omitempty"`
+	// The MediaFile resource name of the header image. Valid image types are GIF,
+	// JPEG and PNG. The minimum size is 300x100 pixels and the aspect ratio must
+	// be between 3:1 and 5:1 (+-1%).
+	HeaderImage *wrappers.StringValue `protobuf:"bytes,2,opt,name=header_image,json=headerImage,proto3" json:"header_image,omitempty"`
+	// The MediaFile resource name of the marketing image. Valid image types are
+	// GIF, JPEG and PNG. The image must either be landscape with a minimum size
+	// of 600x314 pixels and aspect ratio of 600:314 (+-1%) or square with a
+	// minimum size of 300x300 pixels and aspect ratio of 1:1 (+-1%)
+	MarketingImage *wrappers.StringValue `protobuf:"bytes,3,opt,name=marketing_image,json=marketingImage,proto3" json:"marketing_image,omitempty"`
+	// Headline of the marketing image.
+	MarketingImageHeadline *wrappers.StringValue `protobuf:"bytes,4,opt,name=marketing_image_headline,json=marketingImageHeadline,proto3" json:"marketing_image_headline,omitempty"`
+	// Description of the marketing image.
+	MarketingImageDescription *wrappers.StringValue `protobuf:"bytes,5,opt,name=marketing_image_description,json=marketingImageDescription,proto3" json:"marketing_image_description,omitempty"`
+	// Display-call-to-action of the marketing image.
+	MarketingImageDisplayCallToAction *DisplayCallToAction `protobuf:"bytes,6,opt,name=marketing_image_display_call_to_action,json=marketingImageDisplayCallToAction,proto3" json:"marketing_image_display_call_to_action,omitempty"`
+	// Product images. Up to 15 images are supported.
+	ProductImages []*ProductImage `protobuf:"bytes,7,rep,name=product_images,json=productImages,proto3" json:"product_images,omitempty"`
+	// Product videos. Up to 7 videos are supported. At least one product video
+	// or a marketing image must be specified.
+	ProductVideos        []*ProductVideo `protobuf:"bytes,8,rep,name=product_videos,json=productVideos,proto3" json:"product_videos,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *GmailAdInfo) Reset()         { *m = GmailAdInfo{} }
+func (m *GmailAdInfo) String() string { return proto.CompactTextString(m) }
+func (*GmailAdInfo) ProtoMessage()    {}
+func (*GmailAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{8}
+}
+
+func (m *GmailAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GmailAdInfo.Unmarshal(m, b)
+}
+func (m *GmailAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GmailAdInfo.Marshal(b, m, deterministic)
+}
+func (m *GmailAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GmailAdInfo.Merge(m, src)
+}
+func (m *GmailAdInfo) XXX_Size() int {
+	return xxx_messageInfo_GmailAdInfo.Size(m)
+}
+func (m *GmailAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GmailAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GmailAdInfo proto.InternalMessageInfo
+
+func (m *GmailAdInfo) GetTeaser() *GmailTeaser {
+	if m != nil {
+		return m.Teaser
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetHeaderImage() *wrappers.StringValue {
+	if m != nil {
+		return m.HeaderImage
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImage
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImageHeadline
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImageDescription
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageDisplayCallToAction() *DisplayCallToAction {
+	if m != nil {
+		return m.MarketingImageDisplayCallToAction
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetProductImages() []*ProductImage {
+	if m != nil {
+		return m.ProductImages
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetProductVideos() []*ProductVideo {
+	if m != nil {
+		return m.ProductVideos
+	}
+	return nil
+}
+
+// Gmail teaser data. The teaser is a small header that acts as an invitation
+// to view the rest of the ad (the body).
+type GmailTeaser struct {
+	// Headline of the teaser.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// Description of the teaser.
+	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Business name of the advertiser.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,3,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// The MediaFile resource name of the logo image. Valid image types are GIF,
+	// JPEG and PNG. The minimum size is 144x144 pixels and the aspect ratio must
+	// be 1:1 (+-1%).
+	LogoImage            *wrappers.StringValue `protobuf:"bytes,4,opt,name=logo_image,json=logoImage,proto3" json:"logo_image,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *GmailTeaser) Reset()         { *m = GmailTeaser{} }
+func (m *GmailTeaser) String() string { return proto.CompactTextString(m) }
+func (*GmailTeaser) ProtoMessage()    {}
+func (*GmailTeaser) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{9}
+}
+
+func (m *GmailTeaser) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GmailTeaser.Unmarshal(m, b)
+}
+func (m *GmailTeaser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GmailTeaser.Marshal(b, m, deterministic)
+}
+func (m *GmailTeaser) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GmailTeaser.Merge(m, src)
+}
+func (m *GmailTeaser) XXX_Size() int {
+	return xxx_messageInfo_GmailTeaser.Size(m)
+}
+func (m *GmailTeaser) XXX_DiscardUnknown() {
+	xxx_messageInfo_GmailTeaser.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GmailTeaser proto.InternalMessageInfo
+
+func (m *GmailTeaser) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.LogoImage
+	}
+	return nil
+}
+
+// Data for display call to action. The call to action is a piece of the ad
+// that prompts the user to do something. Like clicking a link or making a phone
+// call.
+type DisplayCallToAction struct {
+	// Text for the display-call-to-action.
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// Text color for the display-call-to-action in hexadecimal, e.g. #ffffff for
+	// white.
+	TextColor *wrappers.StringValue `protobuf:"bytes,2,opt,name=text_color,json=textColor,proto3" json:"text_color,omitempty"`
+	// Identifies the url collection in the ad.url_collections field. If not set
+	// the url defaults to final_url.
+	UrlCollectionId      *wrappers.StringValue `protobuf:"bytes,3,opt,name=url_collection_id,json=urlCollectionId,proto3" json:"url_collection_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DisplayCallToAction) Reset()         { *m = DisplayCallToAction{} }
+func (m *DisplayCallToAction) String() string { return proto.CompactTextString(m) }
+func (*DisplayCallToAction) ProtoMessage()    {}
+func (*DisplayCallToAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{10}
+}
+
+func (m *DisplayCallToAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayCallToAction.Unmarshal(m, b)
+}
+func (m *DisplayCallToAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayCallToAction.Marshal(b, m, deterministic)
+}
+func (m *DisplayCallToAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayCallToAction.Merge(m, src)
+}
+func (m *DisplayCallToAction) XXX_Size() int {
+	return xxx_messageInfo_DisplayCallToAction.Size(m)
+}
+func (m *DisplayCallToAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayCallToAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayCallToAction proto.InternalMessageInfo
+
+func (m *DisplayCallToAction) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *DisplayCallToAction) GetTextColor() *wrappers.StringValue {
+	if m != nil {
+		return m.TextColor
+	}
+	return nil
+}
+
+func (m *DisplayCallToAction) GetUrlCollectionId() *wrappers.StringValue {
+	if m != nil {
+		return m.UrlCollectionId
+	}
+	return nil
+}
+
+// Product image specific data.
+type ProductImage struct {
+	// The MediaFile resource name of the product image. Valid image types are
+	// GIF, JPEG and PNG. The minimum size is 300x300 pixels and the aspect ratio
+	// must be 1:1 (+-1%).
+	ProductImage *wrappers.StringValue `protobuf:"bytes,1,opt,name=product_image,json=productImage,proto3" json:"product_image,omitempty"`
+	// Description of the product.
+	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Display-call-to-action of the product image.
+	DisplayCallToAction  *DisplayCallToAction `protobuf:"bytes,3,opt,name=display_call_to_action,json=displayCallToAction,proto3" json:"display_call_to_action,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ProductImage) Reset()         { *m = ProductImage{} }
+func (m *ProductImage) String() string { return proto.CompactTextString(m) }
+func (*ProductImage) ProtoMessage()    {}
+func (*ProductImage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{11}
+}
+
+func (m *ProductImage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductImage.Unmarshal(m, b)
+}
+func (m *ProductImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductImage.Marshal(b, m, deterministic)
+}
+func (m *ProductImage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductImage.Merge(m, src)
+}
+func (m *ProductImage) XXX_Size() int {
+	return xxx_messageInfo_ProductImage.Size(m)
+}
+func (m *ProductImage) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductImage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductImage proto.InternalMessageInfo
+
+func (m *ProductImage) GetProductImage() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductImage
+	}
+	return nil
+}
+
+func (m *ProductImage) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *ProductImage) GetDisplayCallToAction() *DisplayCallToAction {
+	if m != nil {
+		return m.DisplayCallToAction
+	}
+	return nil
+}
+
+// Product video specific data.
+type ProductVideo struct {
+	// The MediaFile resource name of a video which must be hosted on YouTube.
+	ProductVideo         *wrappers.StringValue `protobuf:"bytes,1,opt,name=product_video,json=productVideo,proto3" json:"product_video,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ProductVideo) Reset()         { *m = ProductVideo{} }
+func (m *ProductVideo) String() string { return proto.CompactTextString(m) }
+func (*ProductVideo) ProtoMessage()    {}
+func (*ProductVideo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{12}
+}
+
+func (m *ProductVideo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductVideo.Unmarshal(m, b)
+}
+func (m *ProductVideo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductVideo.Marshal(b, m, deterministic)
+}
+func (m *ProductVideo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductVideo.Merge(m, src)
+}
+func (m *ProductVideo) XXX_Size() int {
+	return xxx_messageInfo_ProductVideo.Size(m)
+}
+func (m *ProductVideo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductVideo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductVideo proto.InternalMessageInfo
+
+func (m *ProductVideo) GetProductVideo() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductVideo
+	}
+	return nil
+}
+
+// An image ad.
+type ImageAdInfo struct {
+	// Width in pixels of the full size image.
+	PixelWidth *wrappers.Int64Value `protobuf:"bytes,4,opt,name=pixel_width,json=pixelWidth,proto3" json:"pixel_width,omitempty"`
+	// Height in pixels of the full size image.
+	PixelHeight *wrappers.Int64Value `protobuf:"bytes,5,opt,name=pixel_height,json=pixelHeight,proto3" json:"pixel_height,omitempty"`
+	// URL of the full size image.
+	ImageUrl *wrappers.StringValue `protobuf:"bytes,6,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+	// Width in pixels of the preview size image.
+	PreviewPixelWidth *wrappers.Int64Value `protobuf:"bytes,7,opt,name=preview_pixel_width,json=previewPixelWidth,proto3" json:"preview_pixel_width,omitempty"`
+	// Height in pixels of the preview size image.
+	PreviewPixelHeight *wrappers.Int64Value `protobuf:"bytes,8,opt,name=preview_pixel_height,json=previewPixelHeight,proto3" json:"preview_pixel_height,omitempty"`
+	// URL of the preview size image.
+	PreviewImageUrl *wrappers.StringValue `protobuf:"bytes,9,opt,name=preview_image_url,json=previewImageUrl,proto3" json:"preview_image_url,omitempty"`
+	// The mime type of the image.
+	MimeType enums.MimeTypeEnum_MimeType `protobuf:"varint,10,opt,name=mime_type,json=mimeType,proto3,enum=google.ads.googleads.v3.enums.MimeTypeEnum_MimeType" json:"mime_type,omitempty"`
+	// The name of the image. If the image was created from a MediaFile, this is
+	// the MediaFile's name. If the image was created from bytes, this is empty.
+	Name *wrappers.StringValue `protobuf:"bytes,11,opt,name=name,proto3" json:"name,omitempty"`
+	// The image to create the ImageAd from. This can be specified in one of
+	// two ways.
+	// 1. An existing MediaFile resource.
+	// 2. The raw image data as bytes.
+	//
+	// Types that are valid to be assigned to Image:
+	//	*ImageAdInfo_MediaFile
+	//	*ImageAdInfo_Data
+	//	*ImageAdInfo_AdIdToCopyImageFrom
+	Image                isImageAdInfo_Image `protobuf_oneof:"image"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ImageAdInfo) Reset()         { *m = ImageAdInfo{} }
+func (m *ImageAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ImageAdInfo) ProtoMessage()    {}
+func (*ImageAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{13}
+}
+
+func (m *ImageAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageAdInfo.Unmarshal(m, b)
+}
+func (m *ImageAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ImageAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageAdInfo.Merge(m, src)
+}
+func (m *ImageAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ImageAdInfo.Size(m)
+}
+func (m *ImageAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageAdInfo proto.InternalMessageInfo
+
+func (m *ImageAdInfo) GetPixelWidth() *wrappers.Int64Value {
+	if m != nil {
+		return m.PixelWidth
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPixelHeight() *wrappers.Int64Value {
+	if m != nil {
+		return m.PixelHeight
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetImageUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.ImageUrl
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewPixelWidth() *wrappers.Int64Value {
+	if m != nil {
+		return m.PreviewPixelWidth
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewPixelHeight() *wrappers.Int64Value {
+	if m != nil {
+		return m.PreviewPixelHeight
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewImageUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PreviewImageUrl
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetMimeType() enums.MimeTypeEnum_MimeType {
+	if m != nil {
+		return m.MimeType
+	}
+	return enums.MimeTypeEnum_UNSPECIFIED
+}
+
+func (m *ImageAdInfo) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+type isImageAdInfo_Image interface {
+	isImageAdInfo_Image()
+}
+
+type ImageAdInfo_MediaFile struct {
+	MediaFile *wrappers.StringValue `protobuf:"bytes,1,opt,name=media_file,json=mediaFile,proto3,oneof"`
+}
+
+type ImageAdInfo_Data struct {
+	Data *wrappers.BytesValue `protobuf:"bytes,2,opt,name=data,proto3,oneof"`
+}
+
+type ImageAdInfo_AdIdToCopyImageFrom struct {
+	AdIdToCopyImageFrom *wrappers.Int64Value `protobuf:"bytes,3,opt,name=ad_id_to_copy_image_from,json=adIdToCopyImageFrom,proto3,oneof"`
+}
+
+func (*ImageAdInfo_MediaFile) isImageAdInfo_Image() {}
+
+func (*ImageAdInfo_Data) isImageAdInfo_Image() {}
+
+func (*ImageAdInfo_AdIdToCopyImageFrom) isImageAdInfo_Image() {}
+
+func (m *ImageAdInfo) GetImage() isImageAdInfo_Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetMediaFile() *wrappers.StringValue {
+	if x, ok := m.GetImage().(*ImageAdInfo_MediaFile); ok {
+		return x.MediaFile
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetData() *wrappers.BytesValue {
+	if x, ok := m.GetImage().(*ImageAdInfo_Data); ok {
+		return x.Data
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetAdIdToCopyImageFrom() *wrappers.Int64Value {
+	if x, ok := m.GetImage().(*ImageAdInfo_AdIdToCopyImageFrom); ok {
+		return x.AdIdToCopyImageFrom
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ImageAdInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ImageAdInfo_MediaFile)(nil),
+		(*ImageAdInfo_Data)(nil),
+		(*ImageAdInfo_AdIdToCopyImageFrom)(nil),
+	}
+}
+
+// Representation of video bumper in-stream ad format (very short in-stream
+// non-skippable video ad).
+type VideoBumperInStreamAdInfo struct {
+	// The MediaFile resource name of the companion banner used with the ad.
+	CompanionBanner      *wrappers.StringValue `protobuf:"bytes,1,opt,name=companion_banner,json=companionBanner,proto3" json:"companion_banner,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *VideoBumperInStreamAdInfo) Reset()         { *m = VideoBumperInStreamAdInfo{} }
+func (m *VideoBumperInStreamAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoBumperInStreamAdInfo) ProtoMessage()    {}
+func (*VideoBumperInStreamAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{14}
+}
+
+func (m *VideoBumperInStreamAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoBumperInStreamAdInfo.Unmarshal(m, b)
+}
+func (m *VideoBumperInStreamAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoBumperInStreamAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoBumperInStreamAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoBumperInStreamAdInfo.Merge(m, src)
+}
+func (m *VideoBumperInStreamAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoBumperInStreamAdInfo.Size(m)
+}
+func (m *VideoBumperInStreamAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoBumperInStreamAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoBumperInStreamAdInfo proto.InternalMessageInfo
+
+func (m *VideoBumperInStreamAdInfo) GetCompanionBanner() *wrappers.StringValue {
+	if m != nil {
+		return m.CompanionBanner
+	}
+	return nil
+}
+
+// Representation of video non-skippable in-stream ad format (15 second
+// in-stream non-skippable video ad).
+type VideoNonSkippableInStreamAdInfo struct {
+	// The MediaFile resource name of the companion banner used with the ad.
+	CompanionBanner      *wrappers.StringValue `protobuf:"bytes,1,opt,name=companion_banner,json=companionBanner,proto3" json:"companion_banner,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *VideoNonSkippableInStreamAdInfo) Reset()         { *m = VideoNonSkippableInStreamAdInfo{} }
+func (m *VideoNonSkippableInStreamAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoNonSkippableInStreamAdInfo) ProtoMessage()    {}
+func (*VideoNonSkippableInStreamAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{15}
+}
+
+func (m *VideoNonSkippableInStreamAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoNonSkippableInStreamAdInfo.Unmarshal(m, b)
+}
+func (m *VideoNonSkippableInStreamAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoNonSkippableInStreamAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoNonSkippableInStreamAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoNonSkippableInStreamAdInfo.Merge(m, src)
+}
+func (m *VideoNonSkippableInStreamAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoNonSkippableInStreamAdInfo.Size(m)
+}
+func (m *VideoNonSkippableInStreamAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoNonSkippableInStreamAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoNonSkippableInStreamAdInfo proto.InternalMessageInfo
+
+func (m *VideoNonSkippableInStreamAdInfo) GetCompanionBanner() *wrappers.StringValue {
+	if m != nil {
+		return m.CompanionBanner
+	}
+	return nil
+}
+
+// Representation of video TrueView in-stream ad format (ad shown during video
+// playback, often at beginning, which displays a skip button a few seconds into
+// the video).
+type VideoTrueViewInStreamAdInfo struct {
+	// Label on the CTA (call-to-action) button taking the user to the video ad's
+	// final URL.
+	// Required for TrueView for action campaigns, optional otherwise.
+	ActionButtonLabel *wrappers.StringValue `protobuf:"bytes,1,opt,name=action_button_label,json=actionButtonLabel,proto3" json:"action_button_label,omitempty"`
+	// Additional text displayed with the CTA (call-to-action) button to give
+	// context and encourage clicking on the button.
+	ActionHeadline *wrappers.StringValue `protobuf:"bytes,2,opt,name=action_headline,json=actionHeadline,proto3" json:"action_headline,omitempty"`
+	// The MediaFile resource name of the companion banner used with the ad.
+	CompanionBanner      *wrappers.StringValue `protobuf:"bytes,3,opt,name=companion_banner,json=companionBanner,proto3" json:"companion_banner,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *VideoTrueViewInStreamAdInfo) Reset()         { *m = VideoTrueViewInStreamAdInfo{} }
+func (m *VideoTrueViewInStreamAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoTrueViewInStreamAdInfo) ProtoMessage()    {}
+func (*VideoTrueViewInStreamAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{16}
+}
+
+func (m *VideoTrueViewInStreamAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoTrueViewInStreamAdInfo.Unmarshal(m, b)
+}
+func (m *VideoTrueViewInStreamAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoTrueViewInStreamAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoTrueViewInStreamAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoTrueViewInStreamAdInfo.Merge(m, src)
+}
+func (m *VideoTrueViewInStreamAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoTrueViewInStreamAdInfo.Size(m)
+}
+func (m *VideoTrueViewInStreamAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoTrueViewInStreamAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoTrueViewInStreamAdInfo proto.InternalMessageInfo
+
+func (m *VideoTrueViewInStreamAdInfo) GetActionButtonLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.ActionButtonLabel
+	}
+	return nil
+}
+
+func (m *VideoTrueViewInStreamAdInfo) GetActionHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.ActionHeadline
+	}
+	return nil
+}
+
+func (m *VideoTrueViewInStreamAdInfo) GetCompanionBanner() *wrappers.StringValue {
+	if m != nil {
+		return m.CompanionBanner
+	}
+	return nil
+}
+
+// Representation of video out-stream ad format (ad shown alongside a feed
+// with automatic playback, without sound).
+type VideoOutstreamAdInfo struct {
+	// The headline of the ad.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// The description line.
+	Description          *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *VideoOutstreamAdInfo) Reset()         { *m = VideoOutstreamAdInfo{} }
+func (m *VideoOutstreamAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoOutstreamAdInfo) ProtoMessage()    {}
+func (*VideoOutstreamAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{17}
+}
+
+func (m *VideoOutstreamAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoOutstreamAdInfo.Unmarshal(m, b)
+}
+func (m *VideoOutstreamAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoOutstreamAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoOutstreamAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoOutstreamAdInfo.Merge(m, src)
+}
+func (m *VideoOutstreamAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoOutstreamAdInfo.Size(m)
+}
+func (m *VideoOutstreamAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoOutstreamAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoOutstreamAdInfo proto.InternalMessageInfo
+
+func (m *VideoOutstreamAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *VideoOutstreamAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+// Representation of video TrueView discovery ad format.
+type VideoTrueViewDiscoveryAdInfo struct {
+	// The headline of the ad.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// First text line for a TrueView video discovery ad.
+	Description1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=description1,proto3" json:"description1,omitempty"`
+	// Second text line for a TrueView video discovery ad.
+	Description2         *wrappers.StringValue `protobuf:"bytes,3,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *VideoTrueViewDiscoveryAdInfo) Reset()         { *m = VideoTrueViewDiscoveryAdInfo{} }
+func (m *VideoTrueViewDiscoveryAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoTrueViewDiscoveryAdInfo) ProtoMessage()    {}
+func (*VideoTrueViewDiscoveryAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{18}
+}
+
+func (m *VideoTrueViewDiscoveryAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoTrueViewDiscoveryAdInfo.Unmarshal(m, b)
+}
+func (m *VideoTrueViewDiscoveryAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoTrueViewDiscoveryAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoTrueViewDiscoveryAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoTrueViewDiscoveryAdInfo.Merge(m, src)
+}
+func (m *VideoTrueViewDiscoveryAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoTrueViewDiscoveryAdInfo.Size(m)
+}
+func (m *VideoTrueViewDiscoveryAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoTrueViewDiscoveryAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoTrueViewDiscoveryAdInfo proto.InternalMessageInfo
+
+func (m *VideoTrueViewDiscoveryAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *VideoTrueViewDiscoveryAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *VideoTrueViewDiscoveryAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// A video ad.
+type VideoAdInfo struct {
+	// The MediaFile resource to use for the video.
+	MediaFile *wrappers.StringValue `protobuf:"bytes,1,opt,name=media_file,json=mediaFile,proto3" json:"media_file,omitempty"`
+	// Format-specific schema for the different video formats.
+	//
+	// Types that are valid to be assigned to Format:
+	//	*VideoAdInfo_InStream
+	//	*VideoAdInfo_Bumper
+	//	*VideoAdInfo_OutStream
+	//	*VideoAdInfo_NonSkippable
+	//	*VideoAdInfo_Discovery
+	Format               isVideoAdInfo_Format `protobuf_oneof:"format"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *VideoAdInfo) Reset()         { *m = VideoAdInfo{} }
+func (m *VideoAdInfo) String() string { return proto.CompactTextString(m) }
+func (*VideoAdInfo) ProtoMessage()    {}
+func (*VideoAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{19}
+}
+
+func (m *VideoAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VideoAdInfo.Unmarshal(m, b)
+}
+func (m *VideoAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VideoAdInfo.Marshal(b, m, deterministic)
+}
+func (m *VideoAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VideoAdInfo.Merge(m, src)
+}
+func (m *VideoAdInfo) XXX_Size() int {
+	return xxx_messageInfo_VideoAdInfo.Size(m)
+}
+func (m *VideoAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_VideoAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VideoAdInfo proto.InternalMessageInfo
+
+func (m *VideoAdInfo) GetMediaFile() *wrappers.StringValue {
+	if m != nil {
+		return m.MediaFile
+	}
+	return nil
+}
+
+type isVideoAdInfo_Format interface {
+	isVideoAdInfo_Format()
+}
+
+type VideoAdInfo_InStream struct {
+	InStream *VideoTrueViewInStreamAdInfo `protobuf:"bytes,2,opt,name=in_stream,json=inStream,proto3,oneof"`
+}
+
+type VideoAdInfo_Bumper struct {
+	Bumper *VideoBumperInStreamAdInfo `protobuf:"bytes,3,opt,name=bumper,proto3,oneof"`
+}
+
+type VideoAdInfo_OutStream struct {
+	OutStream *VideoOutstreamAdInfo `protobuf:"bytes,4,opt,name=out_stream,json=outStream,proto3,oneof"`
+}
+
+type VideoAdInfo_NonSkippable struct {
+	NonSkippable *VideoNonSkippableInStreamAdInfo `protobuf:"bytes,5,opt,name=non_skippable,json=nonSkippable,proto3,oneof"`
+}
+
+type VideoAdInfo_Discovery struct {
+	Discovery *VideoTrueViewDiscoveryAdInfo `protobuf:"bytes,6,opt,name=discovery,proto3,oneof"`
+}
+
+func (*VideoAdInfo_InStream) isVideoAdInfo_Format() {}
+
+func (*VideoAdInfo_Bumper) isVideoAdInfo_Format() {}
+
+func (*VideoAdInfo_OutStream) isVideoAdInfo_Format() {}
+
+func (*VideoAdInfo_NonSkippable) isVideoAdInfo_Format() {}
+
+func (*VideoAdInfo_Discovery) isVideoAdInfo_Format() {}
+
+func (m *VideoAdInfo) GetFormat() isVideoAdInfo_Format {
+	if m != nil {
+		return m.Format
+	}
+	return nil
+}
+
+func (m *VideoAdInfo) GetInStream() *VideoTrueViewInStreamAdInfo {
+	if x, ok := m.GetFormat().(*VideoAdInfo_InStream); ok {
+		return x.InStream
+	}
+	return nil
+}
+
+func (m *VideoAdInfo) GetBumper() *VideoBumperInStreamAdInfo {
+	if x, ok := m.GetFormat().(*VideoAdInfo_Bumper); ok {
+		return x.Bumper
+	}
+	return nil
+}
+
+func (m *VideoAdInfo) GetOutStream() *VideoOutstreamAdInfo {
+	if x, ok := m.GetFormat().(*VideoAdInfo_OutStream); ok {
+		return x.OutStream
+	}
+	return nil
+}
+
+func (m *VideoAdInfo) GetNonSkippable() *VideoNonSkippableInStreamAdInfo {
+	if x, ok := m.GetFormat().(*VideoAdInfo_NonSkippable); ok {
+		return x.NonSkippable
+	}
+	return nil
+}
+
+func (m *VideoAdInfo) GetDiscovery() *VideoTrueViewDiscoveryAdInfo {
+	if x, ok := m.GetFormat().(*VideoAdInfo_Discovery); ok {
+		return x.Discovery
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*VideoAdInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*VideoAdInfo_InStream)(nil),
+		(*VideoAdInfo_Bumper)(nil),
+		(*VideoAdInfo_OutStream)(nil),
+		(*VideoAdInfo_NonSkippable)(nil),
+		(*VideoAdInfo_Discovery)(nil),
+	}
+}
+
+// A responsive search ad.
+//
+// Responsive search ads let you create an ad that adapts to show more text, and
+// more relevant messages, to your customers. Enter multiple headlines and
+// descriptions when creating a responsive search ad, and over time, Google Ads
+// will automatically test different combinations and learn which combinations
+// perform best. By adapting your ad's content to more closely match potential
+// customers' search terms, responsive search ads may improve your campaign's
+// performance.
+//
+// More information at https://support.google.com/google-ads/answer/7684791
+type ResponsiveSearchAdInfo struct {
+	// List of text assets for headlines. When the ad serves the headlines will
+	// be selected from this list.
+	Headlines []*AdTextAsset `protobuf:"bytes,1,rep,name=headlines,proto3" json:"headlines,omitempty"`
+	// List of text assets for descriptions. When the ad serves the descriptions
+	// will be selected from this list.
+	Descriptions []*AdTextAsset `protobuf:"bytes,2,rep,name=descriptions,proto3" json:"descriptions,omitempty"`
+	// First part of text that may appear appended to the url displayed in the ad.
+	Path1 *wrappers.StringValue `protobuf:"bytes,3,opt,name=path1,proto3" json:"path1,omitempty"`
+	// Second part of text that may appear appended to the url displayed in the
+	// ad. This field can only be set when path1 is also set.
+	Path2                *wrappers.StringValue `protobuf:"bytes,4,opt,name=path2,proto3" json:"path2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ResponsiveSearchAdInfo) Reset()         { *m = ResponsiveSearchAdInfo{} }
+func (m *ResponsiveSearchAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ResponsiveSearchAdInfo) ProtoMessage()    {}
+func (*ResponsiveSearchAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{20}
+}
+
+func (m *ResponsiveSearchAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResponsiveSearchAdInfo.Unmarshal(m, b)
+}
+func (m *ResponsiveSearchAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResponsiveSearchAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ResponsiveSearchAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResponsiveSearchAdInfo.Merge(m, src)
+}
+func (m *ResponsiveSearchAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ResponsiveSearchAdInfo.Size(m)
+}
+func (m *ResponsiveSearchAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResponsiveSearchAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResponsiveSearchAdInfo proto.InternalMessageInfo
+
+func (m *ResponsiveSearchAdInfo) GetHeadlines() []*AdTextAsset {
+	if m != nil {
+		return m.Headlines
+	}
+	return nil
+}
+
+func (m *ResponsiveSearchAdInfo) GetDescriptions() []*AdTextAsset {
+	if m != nil {
+		return m.Descriptions
+	}
+	return nil
+}
+
+func (m *ResponsiveSearchAdInfo) GetPath1() *wrappers.StringValue {
+	if m != nil {
+		return m.Path1
+	}
+	return nil
+}
+
+func (m *ResponsiveSearchAdInfo) GetPath2() *wrappers.StringValue {
+	if m != nil {
+		return m.Path2
+	}
+	return nil
+}
+
+// A legacy responsive display ad. Ads of this type are labeled 'Responsive ads'
+// in the Google Ads UI.
+type LegacyResponsiveDisplayAdInfo struct {
+	// The short version of the ad's headline.
+	ShortHeadline *wrappers.StringValue `protobuf:"bytes,1,opt,name=short_headline,json=shortHeadline,proto3" json:"short_headline,omitempty"`
+	// The long version of the ad's headline.
+	LongHeadline *wrappers.StringValue `protobuf:"bytes,2,opt,name=long_headline,json=longHeadline,proto3" json:"long_headline,omitempty"`
+	// The description of the ad.
+	Description *wrappers.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// The business name in the ad.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,4,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// Advertiser's consent to allow flexible color. When true, the ad may be
+	// served with different color if necessary. When false, the ad will be served
+	// with the specified colors or a neutral color.
+	// The default value is true.
+	// Must be true if main_color and accent_color are not set.
+	AllowFlexibleColor *wrappers.BoolValue `protobuf:"bytes,5,opt,name=allow_flexible_color,json=allowFlexibleColor,proto3" json:"allow_flexible_color,omitempty"`
+	// The accent color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	AccentColor *wrappers.StringValue `protobuf:"bytes,6,opt,name=accent_color,json=accentColor,proto3" json:"accent_color,omitempty"`
+	// The main color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	MainColor *wrappers.StringValue `protobuf:"bytes,7,opt,name=main_color,json=mainColor,proto3" json:"main_color,omitempty"`
+	// The call-to-action text for the ad.
+	CallToActionText *wrappers.StringValue `protobuf:"bytes,8,opt,name=call_to_action_text,json=callToActionText,proto3" json:"call_to_action_text,omitempty"`
+	// The MediaFile resource name of the logo image used in the ad.
+	LogoImage *wrappers.StringValue `protobuf:"bytes,9,opt,name=logo_image,json=logoImage,proto3" json:"logo_image,omitempty"`
+	// The MediaFile resource name of the square logo image used in the ad.
+	SquareLogoImage *wrappers.StringValue `protobuf:"bytes,10,opt,name=square_logo_image,json=squareLogoImage,proto3" json:"square_logo_image,omitempty"`
+	// The MediaFile resource name of the marketing image used in the ad.
+	MarketingImage *wrappers.StringValue `protobuf:"bytes,11,opt,name=marketing_image,json=marketingImage,proto3" json:"marketing_image,omitempty"`
+	// The MediaFile resource name of the square marketing image used in the ad.
+	SquareMarketingImage *wrappers.StringValue `protobuf:"bytes,12,opt,name=square_marketing_image,json=squareMarketingImage,proto3" json:"square_marketing_image,omitempty"`
+	// Specifies which format the ad will be served in. Default is ALL_FORMATS.
+	FormatSetting enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting `protobuf:"varint,13,opt,name=format_setting,json=formatSetting,proto3,enum=google.ads.googleads.v3.enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting" json:"format_setting,omitempty"`
+	// Prefix before price. E.g. 'as low as'.
+	PricePrefix *wrappers.StringValue `protobuf:"bytes,14,opt,name=price_prefix,json=pricePrefix,proto3" json:"price_prefix,omitempty"`
+	// Promotion text used for dyanmic formats of responsive ads. For example
+	// 'Free two-day shipping'.
+	PromoText            *wrappers.StringValue `protobuf:"bytes,15,opt,name=promo_text,json=promoText,proto3" json:"promo_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) Reset()         { *m = LegacyResponsiveDisplayAdInfo{} }
+func (m *LegacyResponsiveDisplayAdInfo) String() string { return proto.CompactTextString(m) }
+func (*LegacyResponsiveDisplayAdInfo) ProtoMessage()    {}
+func (*LegacyResponsiveDisplayAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{21}
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LegacyResponsiveDisplayAdInfo.Unmarshal(m, b)
+}
+func (m *LegacyResponsiveDisplayAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LegacyResponsiveDisplayAdInfo.Marshal(b, m, deterministic)
+}
+func (m *LegacyResponsiveDisplayAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LegacyResponsiveDisplayAdInfo.Merge(m, src)
+}
+func (m *LegacyResponsiveDisplayAdInfo) XXX_Size() int {
+	return xxx_messageInfo_LegacyResponsiveDisplayAdInfo.Size(m)
+}
+func (m *LegacyResponsiveDisplayAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LegacyResponsiveDisplayAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LegacyResponsiveDisplayAdInfo proto.InternalMessageInfo
+
+func (m *LegacyResponsiveDisplayAdInfo) GetShortHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.ShortHeadline
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetLongHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.LongHeadline
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetAllowFlexibleColor() *wrappers.BoolValue {
+	if m != nil {
+		return m.AllowFlexibleColor
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetAccentColor() *wrappers.StringValue {
+	if m != nil {
+		return m.AccentColor
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetMainColor() *wrappers.StringValue {
+	if m != nil {
+		return m.MainColor
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetCallToActionText() *wrappers.StringValue {
+	if m != nil {
+		return m.CallToActionText
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.LogoImage
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetSquareLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.SquareLogoImage
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImage
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetSquareMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.SquareMarketingImage
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetFormatSetting() enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting {
+	if m != nil {
+		return m.FormatSetting
+	}
+	return enums.DisplayAdFormatSettingEnum_UNSPECIFIED
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetPricePrefix() *wrappers.StringValue {
+	if m != nil {
+		return m.PricePrefix
+	}
+	return nil
+}
+
+func (m *LegacyResponsiveDisplayAdInfo) GetPromoText() *wrappers.StringValue {
+	if m != nil {
+		return m.PromoText
+	}
+	return nil
+}
+
+// An app ad.
+type AppAdInfo struct {
+	// An optional text asset that, if specified, must always be displayed when
+	// the ad is served.
+	MandatoryAdText *AdTextAsset `protobuf:"bytes,1,opt,name=mandatory_ad_text,json=mandatoryAdText,proto3" json:"mandatory_ad_text,omitempty"`
+	// List of text assets for headlines. When the ad serves the headlines will
+	// be selected from this list.
+	Headlines []*AdTextAsset `protobuf:"bytes,2,rep,name=headlines,proto3" json:"headlines,omitempty"`
+	// List of text assets for descriptions. When the ad serves the descriptions
+	// will be selected from this list.
+	Descriptions []*AdTextAsset `protobuf:"bytes,3,rep,name=descriptions,proto3" json:"descriptions,omitempty"`
+	// List of image assets that may be displayed with the ad.
+	Images []*AdImageAsset `protobuf:"bytes,4,rep,name=images,proto3" json:"images,omitempty"`
+	// List of YouTube video assets that may be displayed with the ad.
+	YoutubeVideos []*AdVideoAsset `protobuf:"bytes,5,rep,name=youtube_videos,json=youtubeVideos,proto3" json:"youtube_videos,omitempty"`
+	// List of media bundle assets that may be used with the ad.
+	Html5MediaBundles    []*AdMediaBundleAsset `protobuf:"bytes,6,rep,name=html5_media_bundles,json=html5MediaBundles,proto3" json:"html5_media_bundles,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AppAdInfo) Reset()         { *m = AppAdInfo{} }
+func (m *AppAdInfo) String() string { return proto.CompactTextString(m) }
+func (*AppAdInfo) ProtoMessage()    {}
+func (*AppAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{22}
+}
+
+func (m *AppAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppAdInfo.Unmarshal(m, b)
+}
+func (m *AppAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppAdInfo.Marshal(b, m, deterministic)
+}
+func (m *AppAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppAdInfo.Merge(m, src)
+}
+func (m *AppAdInfo) XXX_Size() int {
+	return xxx_messageInfo_AppAdInfo.Size(m)
+}
+func (m *AppAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppAdInfo proto.InternalMessageInfo
+
+func (m *AppAdInfo) GetMandatoryAdText() *AdTextAsset {
+	if m != nil {
+		return m.MandatoryAdText
+	}
+	return nil
+}
+
+func (m *AppAdInfo) GetHeadlines() []*AdTextAsset {
+	if m != nil {
+		return m.Headlines
+	}
+	return nil
+}
+
+func (m *AppAdInfo) GetDescriptions() []*AdTextAsset {
+	if m != nil {
+		return m.Descriptions
+	}
+	return nil
+}
+
+func (m *AppAdInfo) GetImages() []*AdImageAsset {
+	if m != nil {
+		return m.Images
+	}
+	return nil
+}
+
+func (m *AppAdInfo) GetYoutubeVideos() []*AdVideoAsset {
+	if m != nil {
+		return m.YoutubeVideos
+	}
+	return nil
+}
+
+func (m *AppAdInfo) GetHtml5MediaBundles() []*AdMediaBundleAsset {
+	if m != nil {
+		return m.Html5MediaBundles
+	}
+	return nil
+}
+
+// App engagement ads allow you to write text encouraging a specific action in
+// the app, like checking in, making a purchase, or booking a flight.
+// They allow you to send users to a specific part of your app where they can
+// find what they're looking for easier and faster.
+type AppEngagementAdInfo struct {
+	// List of text assets for headlines. When the ad serves the headlines will
+	// be selected from this list.
+	Headlines []*AdTextAsset `protobuf:"bytes,1,rep,name=headlines,proto3" json:"headlines,omitempty"`
+	// List of text assets for descriptions. When the ad serves the descriptions
+	// will be selected from this list.
+	Descriptions []*AdTextAsset `protobuf:"bytes,2,rep,name=descriptions,proto3" json:"descriptions,omitempty"`
+	// List of image assets that may be displayed with the ad.
+	Images []*AdImageAsset `protobuf:"bytes,3,rep,name=images,proto3" json:"images,omitempty"`
+	// List of video assets that may be displayed with the ad.
+	Videos               []*AdVideoAsset `protobuf:"bytes,4,rep,name=videos,proto3" json:"videos,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *AppEngagementAdInfo) Reset()         { *m = AppEngagementAdInfo{} }
+func (m *AppEngagementAdInfo) String() string { return proto.CompactTextString(m) }
+func (*AppEngagementAdInfo) ProtoMessage()    {}
+func (*AppEngagementAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{23}
+}
+
+func (m *AppEngagementAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppEngagementAdInfo.Unmarshal(m, b)
+}
+func (m *AppEngagementAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppEngagementAdInfo.Marshal(b, m, deterministic)
+}
+func (m *AppEngagementAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppEngagementAdInfo.Merge(m, src)
+}
+func (m *AppEngagementAdInfo) XXX_Size() int {
+	return xxx_messageInfo_AppEngagementAdInfo.Size(m)
+}
+func (m *AppEngagementAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppEngagementAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppEngagementAdInfo proto.InternalMessageInfo
+
+func (m *AppEngagementAdInfo) GetHeadlines() []*AdTextAsset {
+	if m != nil {
+		return m.Headlines
+	}
+	return nil
+}
+
+func (m *AppEngagementAdInfo) GetDescriptions() []*AdTextAsset {
+	if m != nil {
+		return m.Descriptions
+	}
+	return nil
+}
+
+func (m *AppEngagementAdInfo) GetImages() []*AdImageAsset {
+	if m != nil {
+		return m.Images
+	}
+	return nil
+}
+
+func (m *AppEngagementAdInfo) GetVideos() []*AdVideoAsset {
+	if m != nil {
+		return m.Videos
+	}
+	return nil
+}
+
+// A legacy app install ad that only can be used by a few select customers.
+type LegacyAppInstallAdInfo struct {
+	// The id of the mobile app.
+	AppId *wrappers.StringValue `protobuf:"bytes,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// The app store the mobile app is available in.
+	AppStore enums.LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore `protobuf:"varint,2,opt,name=app_store,json=appStore,proto3,enum=google.ads.googleads.v3.enums.LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore" json:"app_store,omitempty"`
+	// The headline of the ad.
+	Headline *wrappers.StringValue `protobuf:"bytes,3,opt,name=headline,proto3" json:"headline,omitempty"`
+	// The first description line of the ad.
+	Description1 *wrappers.StringValue `protobuf:"bytes,4,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second description line of the ad.
+	Description2         *wrappers.StringValue `protobuf:"bytes,5,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LegacyAppInstallAdInfo) Reset()         { *m = LegacyAppInstallAdInfo{} }
+func (m *LegacyAppInstallAdInfo) String() string { return proto.CompactTextString(m) }
+func (*LegacyAppInstallAdInfo) ProtoMessage()    {}
+func (*LegacyAppInstallAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{24}
+}
+
+func (m *LegacyAppInstallAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LegacyAppInstallAdInfo.Unmarshal(m, b)
+}
+func (m *LegacyAppInstallAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LegacyAppInstallAdInfo.Marshal(b, m, deterministic)
+}
+func (m *LegacyAppInstallAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LegacyAppInstallAdInfo.Merge(m, src)
+}
+func (m *LegacyAppInstallAdInfo) XXX_Size() int {
+	return xxx_messageInfo_LegacyAppInstallAdInfo.Size(m)
+}
+func (m *LegacyAppInstallAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LegacyAppInstallAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LegacyAppInstallAdInfo proto.InternalMessageInfo
+
+func (m *LegacyAppInstallAdInfo) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *LegacyAppInstallAdInfo) GetAppStore() enums.LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore {
+	if m != nil {
+		return m.AppStore
+	}
+	return enums.LegacyAppInstallAdAppStoreEnum_UNSPECIFIED
+}
+
+func (m *LegacyAppInstallAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *LegacyAppInstallAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *LegacyAppInstallAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// A responsive display ad.
+type ResponsiveDisplayAdInfo struct {
+	// Marketing images to be used in the ad. Valid image types are GIF,
+	// JPEG, and PNG. The minimum size is 600x314 and the aspect ratio must
+	// be 1.91:1 (+-1%). At least one marketing_image is required. Combined with
+	// square_marketing_images the maximum is 15.
+	MarketingImages []*AdImageAsset `protobuf:"bytes,1,rep,name=marketing_images,json=marketingImages,proto3" json:"marketing_images,omitempty"`
+	// Square marketing images to be used in the ad. Valid image types are GIF,
+	// JPEG, and PNG. The minimum size is 300x300 and the aspect ratio must
+	// be 1:1 (+-1%). At least one square marketing_image is required. Combined
+	// with marketing_images the maximum is 15.
+	SquareMarketingImages []*AdImageAsset `protobuf:"bytes,2,rep,name=square_marketing_images,json=squareMarketingImages,proto3" json:"square_marketing_images,omitempty"`
+	// Logo images to be used in the ad. Valid image types are GIF,
+	// JPEG, and PNG. The minimum size is 512x128 and the aspect ratio must
+	// be 4:1 (+-1%). Combined with square_logo_images the maximum is 5.
+	LogoImages []*AdImageAsset `protobuf:"bytes,3,rep,name=logo_images,json=logoImages,proto3" json:"logo_images,omitempty"`
+	// Square logo images to be used in the ad. Valid image types are GIF,
+	// JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must
+	// be 1:1 (+-1%). Combined with square_logo_images the maximum is 5.
+	SquareLogoImages []*AdImageAsset `protobuf:"bytes,4,rep,name=square_logo_images,json=squareLogoImages,proto3" json:"square_logo_images,omitempty"`
+	// Short format headlines for the ad. The maximum length is 30 characters.
+	// At least 1 and max 5 headlines can be specified.
+	Headlines []*AdTextAsset `protobuf:"bytes,5,rep,name=headlines,proto3" json:"headlines,omitempty"`
+	// A required long format headline. The maximum length is 90 characters.
+	LongHeadline *AdTextAsset `protobuf:"bytes,6,opt,name=long_headline,json=longHeadline,proto3" json:"long_headline,omitempty"`
+	// Descriptive texts for the ad. The maximum length is 90 characters. At
+	// least 1 and max 5 headlines can be specified.
+	Descriptions []*AdTextAsset `protobuf:"bytes,7,rep,name=descriptions,proto3" json:"descriptions,omitempty"`
+	// Optional YouTube videos for the ad. A maximum of 5 videos can be specified.
+	YoutubeVideos []*AdVideoAsset `protobuf:"bytes,8,rep,name=youtube_videos,json=youtubeVideos,proto3" json:"youtube_videos,omitempty"`
+	// The advertiser/brand name. Maximum display width is 25.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,9,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// The main color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	MainColor *wrappers.StringValue `protobuf:"bytes,10,opt,name=main_color,json=mainColor,proto3" json:"main_color,omitempty"`
+	// The accent color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	AccentColor *wrappers.StringValue `protobuf:"bytes,11,opt,name=accent_color,json=accentColor,proto3" json:"accent_color,omitempty"`
+	// Advertiser's consent to allow flexible color. When true, the ad may be
+	// served with different color if necessary. When false, the ad will be served
+	// with the specified colors or a neutral color.
+	// The default value is true.
+	// Must be true if main_color and accent_color are not set.
+	AllowFlexibleColor *wrappers.BoolValue `protobuf:"bytes,12,opt,name=allow_flexible_color,json=allowFlexibleColor,proto3" json:"allow_flexible_color,omitempty"`
+	// The call-to-action text for the ad. Maximum display width is 30.
+	CallToActionText *wrappers.StringValue `protobuf:"bytes,13,opt,name=call_to_action_text,json=callToActionText,proto3" json:"call_to_action_text,omitempty"`
+	// Prefix before price. E.g. 'as low as'.
+	PricePrefix *wrappers.StringValue `protobuf:"bytes,14,opt,name=price_prefix,json=pricePrefix,proto3" json:"price_prefix,omitempty"`
+	// Promotion text used for dyanmic formats of responsive ads. For example
+	// 'Free two-day shipping'.
+	PromoText *wrappers.StringValue `protobuf:"bytes,15,opt,name=promo_text,json=promoText,proto3" json:"promo_text,omitempty"`
+	// Specifies which format the ad will be served in. Default is ALL_FORMATS.
+	FormatSetting        enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting `protobuf:"varint,16,opt,name=format_setting,json=formatSetting,proto3,enum=google.ads.googleads.v3.enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting" json:"format_setting,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *ResponsiveDisplayAdInfo) Reset()         { *m = ResponsiveDisplayAdInfo{} }
+func (m *ResponsiveDisplayAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ResponsiveDisplayAdInfo) ProtoMessage()    {}
+func (*ResponsiveDisplayAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{25}
+}
+
+func (m *ResponsiveDisplayAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Unmarshal(m, b)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Marshal(b, m, deterministic)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResponsiveDisplayAdInfo.Merge(m, src)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Size(m)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResponsiveDisplayAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResponsiveDisplayAdInfo proto.InternalMessageInfo
+
+func (m *ResponsiveDisplayAdInfo) GetMarketingImages() []*AdImageAsset {
+	if m != nil {
+		return m.MarketingImages
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetSquareMarketingImages() []*AdImageAsset {
+	if m != nil {
+		return m.SquareMarketingImages
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetLogoImages() []*AdImageAsset {
+	if m != nil {
+		return m.LogoImages
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetSquareLogoImages() []*AdImageAsset {
+	if m != nil {
+		return m.SquareLogoImages
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetHeadlines() []*AdTextAsset {
+	if m != nil {
+		return m.Headlines
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetLongHeadline() *AdTextAsset {
+	if m != nil {
+		return m.LongHeadline
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetDescriptions() []*AdTextAsset {
+	if m != nil {
+		return m.Descriptions
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetYoutubeVideos() []*AdVideoAsset {
+	if m != nil {
+		return m.YoutubeVideos
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetMainColor() *wrappers.StringValue {
+	if m != nil {
+		return m.MainColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetAccentColor() *wrappers.StringValue {
+	if m != nil {
+		return m.AccentColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetAllowFlexibleColor() *wrappers.BoolValue {
+	if m != nil {
+		return m.AllowFlexibleColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetCallToActionText() *wrappers.StringValue {
+	if m != nil {
+		return m.CallToActionText
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetPricePrefix() *wrappers.StringValue {
+	if m != nil {
+		return m.PricePrefix
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetPromoText() *wrappers.StringValue {
+	if m != nil {
+		return m.PromoText
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetFormatSetting() enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting {
+	if m != nil {
+		return m.FormatSetting
+	}
+	return enums.DisplayAdFormatSettingEnum_UNSPECIFIED
+}
+
+// A generic type of display ad. The exact ad format is controlled by the
+// display_upload_product_type field, which determines what kinds of data
+// need to be included with the ad.
+type DisplayUploadAdInfo struct {
+	// The product type of this ad. See comments on the enum for details.
+	DisplayUploadProductType enums.DisplayUploadProductTypeEnum_DisplayUploadProductType `protobuf:"varint,1,opt,name=display_upload_product_type,json=displayUploadProductType,proto3,enum=google.ads.googleads.v3.enums.DisplayUploadProductTypeEnum_DisplayUploadProductType" json:"display_upload_product_type,omitempty"`
+	// The asset data that makes up the ad.
+	//
+	// Types that are valid to be assigned to MediaAsset:
+	//	*DisplayUploadAdInfo_MediaBundle
+	MediaAsset           isDisplayUploadAdInfo_MediaAsset `protobuf_oneof:"media_asset"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *DisplayUploadAdInfo) Reset()         { *m = DisplayUploadAdInfo{} }
+func (m *DisplayUploadAdInfo) String() string { return proto.CompactTextString(m) }
+func (*DisplayUploadAdInfo) ProtoMessage()    {}
+func (*DisplayUploadAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b3dd1fef8feae128, []int{26}
+}
+
+func (m *DisplayUploadAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayUploadAdInfo.Unmarshal(m, b)
+}
+func (m *DisplayUploadAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayUploadAdInfo.Marshal(b, m, deterministic)
+}
+func (m *DisplayUploadAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayUploadAdInfo.Merge(m, src)
+}
+func (m *DisplayUploadAdInfo) XXX_Size() int {
+	return xxx_messageInfo_DisplayUploadAdInfo.Size(m)
+}
+func (m *DisplayUploadAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayUploadAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayUploadAdInfo proto.InternalMessageInfo
+
+func (m *DisplayUploadAdInfo) GetDisplayUploadProductType() enums.DisplayUploadProductTypeEnum_DisplayUploadProductType {
+	if m != nil {
+		return m.DisplayUploadProductType
+	}
+	return enums.DisplayUploadProductTypeEnum_UNSPECIFIED
+}
+
+type isDisplayUploadAdInfo_MediaAsset interface {
+	isDisplayUploadAdInfo_MediaAsset()
+}
+
+type DisplayUploadAdInfo_MediaBundle struct {
+	MediaBundle *AdMediaBundleAsset `protobuf:"bytes,2,opt,name=media_bundle,json=mediaBundle,proto3,oneof"`
+}
+
+func (*DisplayUploadAdInfo_MediaBundle) isDisplayUploadAdInfo_MediaAsset() {}
+
+func (m *DisplayUploadAdInfo) GetMediaAsset() isDisplayUploadAdInfo_MediaAsset {
+	if m != nil {
+		return m.MediaAsset
+	}
+	return nil
+}
+
+func (m *DisplayUploadAdInfo) GetMediaBundle() *AdMediaBundleAsset {
+	if x, ok := m.GetMediaAsset().(*DisplayUploadAdInfo_MediaBundle); ok {
+		return x.MediaBundle
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*DisplayUploadAdInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*DisplayUploadAdInfo_MediaBundle)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*TextAdInfo)(nil), "google.ads.googleads.v3.common.TextAdInfo")
+	proto.RegisterType((*ExpandedTextAdInfo)(nil), "google.ads.googleads.v3.common.ExpandedTextAdInfo")
+	proto.RegisterType((*CallOnlyAdInfo)(nil), "google.ads.googleads.v3.common.CallOnlyAdInfo")
+	proto.RegisterType((*ExpandedDynamicSearchAdInfo)(nil), "google.ads.googleads.v3.common.ExpandedDynamicSearchAdInfo")
+	proto.RegisterType((*HotelAdInfo)(nil), "google.ads.googleads.v3.common.HotelAdInfo")
+	proto.RegisterType((*ShoppingSmartAdInfo)(nil), "google.ads.googleads.v3.common.ShoppingSmartAdInfo")
+	proto.RegisterType((*ShoppingProductAdInfo)(nil), "google.ads.googleads.v3.common.ShoppingProductAdInfo")
+	proto.RegisterType((*ShoppingComparisonListingAdInfo)(nil), "google.ads.googleads.v3.common.ShoppingComparisonListingAdInfo")
+	proto.RegisterType((*GmailAdInfo)(nil), "google.ads.googleads.v3.common.GmailAdInfo")
+	proto.RegisterType((*GmailTeaser)(nil), "google.ads.googleads.v3.common.GmailTeaser")
+	proto.RegisterType((*DisplayCallToAction)(nil), "google.ads.googleads.v3.common.DisplayCallToAction")
+	proto.RegisterType((*ProductImage)(nil), "google.ads.googleads.v3.common.ProductImage")
+	proto.RegisterType((*ProductVideo)(nil), "google.ads.googleads.v3.common.ProductVideo")
+	proto.RegisterType((*ImageAdInfo)(nil), "google.ads.googleads.v3.common.ImageAdInfo")
+	proto.RegisterType((*VideoBumperInStreamAdInfo)(nil), "google.ads.googleads.v3.common.VideoBumperInStreamAdInfo")
+	proto.RegisterType((*VideoNonSkippableInStreamAdInfo)(nil), "google.ads.googleads.v3.common.VideoNonSkippableInStreamAdInfo")
+	proto.RegisterType((*VideoTrueViewInStreamAdInfo)(nil), "google.ads.googleads.v3.common.VideoTrueViewInStreamAdInfo")
+	proto.RegisterType((*VideoOutstreamAdInfo)(nil), "google.ads.googleads.v3.common.VideoOutstreamAdInfo")
+	proto.RegisterType((*VideoTrueViewDiscoveryAdInfo)(nil), "google.ads.googleads.v3.common.VideoTrueViewDiscoveryAdInfo")
+	proto.RegisterType((*VideoAdInfo)(nil), "google.ads.googleads.v3.common.VideoAdInfo")
+	proto.RegisterType((*ResponsiveSearchAdInfo)(nil), "google.ads.googleads.v3.common.ResponsiveSearchAdInfo")
+	proto.RegisterType((*LegacyResponsiveDisplayAdInfo)(nil), "google.ads.googleads.v3.common.LegacyResponsiveDisplayAdInfo")
+	proto.RegisterType((*AppAdInfo)(nil), "google.ads.googleads.v3.common.AppAdInfo")
+	proto.RegisterType((*AppEngagementAdInfo)(nil), "google.ads.googleads.v3.common.AppEngagementAdInfo")
+	proto.RegisterType((*LegacyAppInstallAdInfo)(nil), "google.ads.googleads.v3.common.LegacyAppInstallAdInfo")
+	proto.RegisterType((*ResponsiveDisplayAdInfo)(nil), "google.ads.googleads.v3.common.ResponsiveDisplayAdInfo")
+	proto.RegisterType((*DisplayUploadAdInfo)(nil), "google.ads.googleads.v3.common.DisplayUploadAdInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/ad_type_infos.proto", fileDescriptor_b3dd1fef8feae128)
+}
+
+var fileDescriptor_b3dd1fef8feae128 = []byte{
+	// 2433 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xdd, 0x6e, 0xdb, 0xc8,
+	0x15, 0xb6, 0x24, 0xff, 0x48, 0x47, 0x92, 0x7f, 0xe8, 0xfc, 0x68, 0x9d, 0xec, 0x6e, 0xca, 0x8b,
+	0x22, 0x40, 0xbb, 0x72, 0x23, 0xa7, 0x45, 0xd7, 0xd9, 0x6c, 0x2a, 0xdb, 0x49, 0x64, 0xac, 0x93,
+	0x78, 0x65, 0xc7, 0x29, 0x52, 0x03, 0xc4, 0x48, 0x1c, 0xcb, 0x6c, 0xc8, 0x19, 0x96, 0x43, 0x3a,
+	0xd6, 0xed, 0x5e, 0xb4, 0xb7, 0x05, 0xf6, 0xaa, 0x45, 0x81, 0x02, 0x7b, 0x59, 0xa0, 0x8f, 0xd0,
+	0xab, 0xde, 0x2d, 0xd0, 0x3e, 0xc1, 0x3e, 0x41, 0xfb, 0x08, 0x7b, 0xd1, 0x62, 0x7e, 0x48, 0x51,
+	0x92, 0x65, 0x8d, 0xac, 0x6d, 0x83, 0xf6, 0x4a, 0x12, 0x79, 0xbe, 0x8f, 0x73, 0x66, 0xce, 0x7c,
+	0xe7, 0xcc, 0xa1, 0xa0, 0xd6, 0xa1, 0xb4, 0xe3, 0xe2, 0x75, 0x64, 0xb3, 0x75, 0xf9, 0x95, 0x7f,
+	0x3b, 0xdb, 0x58, 0x6f, 0x53, 0xcf, 0xa3, 0x64, 0x1d, 0xd9, 0x56, 0xd8, 0xf5, 0xb1, 0xe5, 0x90,
+	0x13, 0xca, 0xaa, 0x7e, 0x40, 0x43, 0x6a, 0x7c, 0x20, 0x0d, 0xab, 0xc8, 0x66, 0xd5, 0x04, 0x53,
+	0x3d, 0xdb, 0xa8, 0x4a, 0xcc, 0xda, 0x47, 0xe3, 0x39, 0x11, 0x63, 0x38, 0x94, 0x74, 0x6b, 0xdb,
+	0xa3, 0xcc, 0x31, 0x89, 0x3c, 0xb6, 0xde, 0x46, 0xae, 0x6b, 0xb5, 0x29, 0x39, 0xc3, 0x01, 0x73,
+	0x28, 0xb1, 0x02, 0xec, 0xd3, 0x20, 0x74, 0x48, 0xc7, 0x62, 0x21, 0x0a, 0xb1, 0x22, 0x79, 0x78,
+	0x39, 0x89, 0xed, 0x30, 0xdf, 0x45, 0x5d, 0x0b, 0xd9, 0xd6, 0x09, 0x0d, 0x3c, 0x14, 0x5a, 0x0c,
+	0x87, 0x9c, 0x44, 0xc1, 0x1f, 0xe9, 0xc1, 0x23, 0xdf, 0xa5, 0xc8, 0xb6, 0xfc, 0x80, 0xda, 0x51,
+	0x3b, 0x14, 0x33, 0xa3, 0xe7, 0x84, 0x8b, 0x3b, 0xa8, 0xdd, 0xb5, 0x90, 0xef, 0x5b, 0x0e, 0x61,
+	0x21, 0x77, 0x89, 0xcf, 0x82, 0xef, 0x5b, 0x2c, 0xa4, 0x41, 0x4c, 0xf2, 0xd1, 0xe5, 0x24, 0x9e,
+	0xe3, 0xe1, 0xf4, 0x33, 0xd5, 0x3a, 0xac, 0x8b, 0x5f, 0xad, 0xe8, 0x64, 0xfd, 0x6d, 0x80, 0x7c,
+	0x1f, 0x07, 0x6a, 0x9d, 0xd6, 0x6e, 0xc7, 0x74, 0xbe, 0xb3, 0x8e, 0x08, 0xa1, 0x21, 0x0a, 0x1d,
+	0x4a, 0xd4, 0x5d, 0xf3, 0xeb, 0x0c, 0xc0, 0x21, 0x3e, 0x0f, 0xeb, 0xf6, 0x2e, 0x39, 0xa1, 0xc6,
+	0x4f, 0x21, 0x7f, 0x8a, 0x91, 0xed, 0x3a, 0x04, 0x57, 0x32, 0x77, 0x32, 0x77, 0x8b, 0xb5, 0xdb,
+	0x6a, 0x71, 0xab, 0x31, 0x7f, 0xf5, 0x20, 0x0c, 0x1c, 0xd2, 0x39, 0x42, 0x6e, 0x84, 0x9b, 0x89,
+	0xb5, 0xf1, 0x33, 0x28, 0xd9, 0x98, 0xb5, 0x03, 0xc7, 0xe7, 0xf4, 0xf7, 0x2a, 0x59, 0x0d, 0x74,
+	0x1f, 0x62, 0x80, 0xa1, 0x56, 0xc9, 0x4d, 0xc8, 0x50, 0x33, 0xff, 0x96, 0x03, 0xe3, 0xf1, 0xb9,
+	0x8f, 0x88, 0x8d, 0xed, 0x94, 0x53, 0xdb, 0xb0, 0x18, 0x0f, 0xd3, 0xf2, 0x51, 0x10, 0xde, 0xd3,
+	0x72, 0xad, 0x1c, 0x63, 0xf6, 0x39, 0x64, 0x88, 0xa4, 0xa6, 0xe5, 0x61, 0x1f, 0x49, 0x6d, 0x88,
+	0x64, 0xa3, 0x32, 0x3f, 0x29, 0xc9, 0x86, 0xf1, 0x29, 0x14, 0x53, 0x5e, 0x6b, 0x4d, 0x53, 0x1a,
+	0x30, 0x34, 0xcf, 0x0b, 0x93, 0xce, 0xb3, 0x51, 0x83, 0x39, 0x1f, 0x85, 0xa7, 0xf7, 0x2a, 0xb3,
+	0x1a, 0x50, 0x69, 0x1a, 0x63, 0x6a, 0x95, 0x39, 0x5d, 0x4c, 0xcd, 0xfc, 0xf3, 0x02, 0x2c, 0x6e,
+	0x23, 0xd7, 0x7d, 0x41, 0xdc, 0xae, 0x5a, 0xcb, 0x47, 0x50, 0x6a, 0xd3, 0x88, 0x84, 0x41, 0xd7,
+	0x6a, 0x53, 0x5b, 0x2f, 0x48, 0x8b, 0x0a, 0xb1, 0x4d, 0x6d, 0xcc, 0x09, 0xfc, 0x53, 0x4a, 0xb0,
+	0x45, 0x22, 0xaf, 0x85, 0x03, 0xad, 0x55, 0x2c, 0x0a, 0xc4, 0x73, 0x01, 0x30, 0xea, 0x50, 0x6e,
+	0x45, 0xcc, 0x21, 0x98, 0x31, 0x8b, 0x20, 0x0f, 0xeb, 0xc5, 0x69, 0x0c, 0x79, 0x8e, 0x3c, 0x6c,
+	0x6c, 0x42, 0x21, 0x5e, 0xd2, 0x7b, 0x95, 0xa2, 0x06, 0xbc, 0x67, 0x9e, 0xc6, 0xd6, 0x2a, 0xa5,
+	0x49, 0xb0, 0xb5, 0xa1, 0x3d, 0x3a, 0x3b, 0xf5, 0x1e, 0x9d, 0x9b, 0x38, 0x76, 0x1e, 0x42, 0x49,
+	0x68, 0x79, 0x18, 0xa0, 0xf6, 0x1b, 0x6c, 0xab, 0x0d, 0xb0, 0x36, 0xc4, 0xb0, 0x45, 0xa9, 0x1b,
+	0x2f, 0x1f, 0x72, 0xdd, 0x43, 0x69, 0x6e, 0x34, 0xe1, 0xa6, 0xed, 0x30, 0xd4, 0x72, 0xb1, 0x35,
+	0x90, 0x12, 0x54, 0x1c, 0x5f, 0xc6, 0x74, 0x5d, 0x41, 0x79, 0x4c, 0x6d, 0x27, 0x40, 0xc3, 0x82,
+	0xf7, 0xd3, 0x21, 0x61, 0x9d, 0xe1, 0xc0, 0x39, 0x71, 0xda, 0x42, 0x27, 0xad, 0x28, 0x70, 0x2b,
+	0x79, 0x0d, 0x2f, 0xd7, 0x52, 0x31, 0x72, 0x94, 0x22, 0x78, 0x19, 0xb8, 0xc6, 0x2e, 0xac, 0xa4,
+	0x52, 0x17, 0x6a, 0x8b, 0x7d, 0x5b, 0xd0, 0x20, 0x5d, 0xee, 0xc1, 0xea, 0x02, 0x65, 0xfc, 0x3e,
+	0x03, 0x6b, 0xa3, 0xd3, 0x60, 0x05, 0xee, 0x64, 0xee, 0x2e, 0xd6, 0x8e, 0xab, 0xa3, 0x72, 0xb3,
+	0x48, 0x21, 0xd5, 0x7e, 0xff, 0x9b, 0x31, 0xc7, 0x01, 0xa7, 0x78, 0x4c, 0x22, 0xef, 0x52, 0x83,
+	0x66, 0xa5, 0x3d, 0xe2, 0x8e, 0xf9, 0xc7, 0x0c, 0xdc, 0x8a, 0xf5, 0x77, 0xa7, 0x4b, 0x90, 0xe7,
+	0xb4, 0x0f, 0x30, 0x0a, 0xda, 0xa7, 0x6a, 0xf3, 0x0e, 0x28, 0x57, 0x66, 0x5a, 0xe5, 0xca, 0x4e,
+	0x9c, 0x21, 0xca, 0x50, 0x6c, 0xd0, 0x10, 0xbb, 0x72, 0x40, 0xe6, 0x75, 0x58, 0x3d, 0x38, 0xa5,
+	0xbe, 0xcf, 0x3d, 0xf0, 0x50, 0xa0, 0x12, 0x86, 0x79, 0x13, 0xae, 0xc7, 0x97, 0xf7, 0x65, 0x92,
+	0x57, 0x37, 0x7e, 0x01, 0x1f, 0xc6, 0x37, 0xb6, 0xa9, 0xe7, 0xa3, 0xc0, 0x61, 0x94, 0xec, 0x39,
+	0x8c, 0x4f, 0xc1, 0xb4, 0x19, 0xd4, 0xfc, 0xeb, 0x1c, 0x14, 0x9f, 0x7a, 0xc8, 0x71, 0x93, 0xb4,
+	0x35, 0x1f, 0x62, 0xc4, 0x70, 0xa0, 0x78, 0x7e, 0x50, 0xbd, 0xbc, 0xe2, 0xaa, 0x0a, 0xf0, 0xa1,
+	0x80, 0x34, 0x15, 0x94, 0xcb, 0x1d, 0x7f, 0x00, 0x0e, 0x2c, 0xc7, 0x43, 0x1d, 0xac, 0x27, 0x77,
+	0x12, 0xb1, 0xcb, 0x01, 0xc6, 0x63, 0x58, 0xf2, 0x50, 0xf0, 0x06, 0x8b, 0x20, 0x93, 0x1c, 0x3a,
+	0x82, 0xb7, 0x98, 0x80, 0x24, 0xcd, 0x11, 0x54, 0x06, 0x68, 0xac, 0x64, 0x9a, 0x74, 0x64, 0xe8,
+	0x46, 0x3f, 0x5f, 0x23, 0x2e, 0x3b, 0x8e, 0xe1, 0xd6, 0x20, 0x6f, 0x3a, 0xc4, 0x74, 0xf4, 0xe9,
+	0xbd, 0x7e, 0xea, 0x9d, 0x54, 0xc0, 0xfd, 0x3a, 0x03, 0xdf, 0x1f, 0xa2, 0x57, 0x55, 0xa0, 0x54,
+	0x31, 0x1a, 0x6f, 0x67, 0xa9, 0x63, 0x1b, 0xe3, 0xd6, 0x68, 0x47, 0xa2, 0xf9, 0x06, 0x3b, 0xa4,
+	0x72, 0x4f, 0x37, 0xbf, 0x37, 0x30, 0x80, 0x61, 0x13, 0xe3, 0x00, 0x16, 0xe3, 0x72, 0x53, 0x8c,
+	0x82, 0x55, 0x16, 0xee, 0xe4, 0xee, 0x16, 0x6b, 0x3f, 0x1c, 0xf7, 0x3c, 0x15, 0xbf, 0x82, 0xb8,
+	0x59, 0xf6, 0x53, 0xbf, 0x58, 0x9a, 0xf4, 0xcc, 0xb1, 0x31, 0x65, 0x95, 0xfc, 0x44, 0xa4, 0x47,
+	0x1c, 0x94, 0x90, 0x8a, 0x5f, 0xcc, 0xfc, 0x4d, 0x56, 0x45, 0xb1, 0x0c, 0xc4, 0x29, 0x2a, 0xca,
+	0x01, 0xb5, 0xc8, 0x4e, 0xaa, 0x16, 0xdf, 0x41, 0xa2, 0x7e, 0x00, 0xe0, 0xd2, 0x0e, 0x55, 0x71,
+	0xaf, 0x13, 0xa7, 0x05, 0x6e, 0x2f, 0xe6, 0xd7, 0xfc, 0x7b, 0x06, 0x56, 0x2f, 0x5a, 0xcb, 0x1f,
+	0xc1, 0x6c, 0x88, 0xcf, 0x43, 0xad, 0xd9, 0x10, 0x96, 0x7c, 0x18, 0xfc, 0xd3, 0x6a, 0x53, 0x97,
+	0xea, 0x55, 0x2c, 0x05, 0x6e, 0xbf, 0xcd, 0xcd, 0x8d, 0x06, 0xac, 0x44, 0x01, 0x4f, 0x94, 0xae,
+	0x8b, 0xc5, 0x00, 0x2c, 0xc7, 0xd6, 0x9a, 0x8a, 0xa5, 0x28, 0x70, 0xb7, 0x13, 0xd4, 0xae, 0x6d,
+	0x7e, 0x9b, 0x81, 0x52, 0x3a, 0x9e, 0xf8, 0x0c, 0xf7, 0x45, 0xa5, 0x96, 0x4b, 0xa5, 0x74, 0x10,
+	0x4e, 0xbd, 0xc8, 0xa7, 0x70, 0x63, 0xc4, 0x86, 0xcc, 0x5d, 0x7d, 0x43, 0xae, 0xda, 0xc3, 0x17,
+	0xcd, 0xcf, 0x13, 0xe7, 0x45, 0xa4, 0xa7, 0x9d, 0x17, 0xbb, 0x67, 0x22, 0xe7, 0x05, 0x85, 0xf9,
+	0xc5, 0x3c, 0x14, 0xc5, 0x34, 0x28, 0xc5, 0xff, 0x04, 0x8a, 0xbe, 0x73, 0x8e, 0x5d, 0xeb, 0xad,
+	0x63, 0x87, 0xa7, 0x2a, 0xde, 0x6e, 0x0d, 0x11, 0xee, 0x92, 0xf0, 0x27, 0xf7, 0x25, 0x1f, 0x08,
+	0xfb, 0x57, 0xdc, 0xdc, 0xf8, 0x14, 0x4a, 0x12, 0x7d, 0x8a, 0x9d, 0xce, 0x69, 0xa8, 0xb4, 0xef,
+	0x52, 0xb8, 0x7c, 0x5c, 0x43, 0xd8, 0x1b, 0x1f, 0x43, 0x41, 0x2a, 0x1c, 0x2f, 0x79, 0x74, 0xce,
+	0x25, 0x79, 0x61, 0xce, 0x0b, 0x9c, 0xcf, 0x60, 0xd5, 0x0f, 0xf0, 0x99, 0x83, 0xdf, 0x5a, 0x69,
+	0x07, 0x16, 0xc6, 0x8f, 0x60, 0x45, 0xe1, 0xf6, 0x7b, 0x7e, 0x3c, 0x83, 0x6b, 0xfd, 0x64, 0xca,
+	0x9f, 0xfc, 0x78, 0x36, 0x23, 0xcd, 0xa6, 0xdc, 0x6a, 0x40, 0xfc, 0x0c, 0xab, 0xe7, 0x9e, 0x4e,
+	0xf1, 0xb5, 0xa4, 0x60, 0xbb, 0xb1, 0x97, 0x9f, 0x43, 0x21, 0x39, 0x7c, 0xab, 0x4a, 0xeb, 0xfe,
+	0x98, 0x4a, 0xeb, 0x99, 0xe3, 0xe1, 0xc3, 0xae, 0x2f, 0xab, 0xaa, 0xf8, 0x47, 0x33, 0xef, 0xa9,
+	0x6f, 0x5c, 0x0b, 0x84, 0x34, 0xe9, 0x1c, 0x02, 0x84, 0xa5, 0xf1, 0x10, 0xc0, 0xc3, 0xb6, 0x83,
+	0xac, 0x13, 0xc7, 0xd5, 0xda, 0x70, 0x8d, 0x99, 0x66, 0x41, 0x20, 0x9e, 0x38, 0x2e, 0x36, 0xee,
+	0xc1, 0xac, 0x8d, 0x42, 0xa4, 0x36, 0xda, 0xf0, 0x64, 0x6e, 0x75, 0x43, 0xcc, 0x62, 0x9c, 0x30,
+	0x35, 0x0e, 0xa1, 0x82, 0x6c, 0xcb, 0xb1, 0xf9, 0xde, 0x6a, 0x53, 0xbf, 0xab, 0xa6, 0xf1, 0x24,
+	0xa0, 0x9e, 0xda, 0x64, 0x97, 0xad, 0x49, 0x63, 0xa6, 0xb9, 0x8a, 0xec, 0x5d, 0xfb, 0x90, 0x6e,
+	0x53, 0xbf, 0x2b, 0xe6, 0xf2, 0x49, 0x40, 0xbd, 0xad, 0x05, 0x98, 0x13, 0x3c, 0xa6, 0x0d, 0xef,
+	0x89, 0xdd, 0xb0, 0x15, 0x79, 0x3e, 0x0e, 0x76, 0xc9, 0x41, 0x18, 0x60, 0xe4, 0xa9, 0x1d, 0xf1,
+	0x14, 0x96, 0xdb, 0xbc, 0xd0, 0x22, 0x5c, 0xb7, 0x5a, 0x88, 0x90, 0xa4, 0x1a, 0x1a, 0xb3, 0x76,
+	0x09, 0x6a, 0x4b, 0x80, 0xcc, 0x5f, 0xc2, 0x87, 0xe2, 0x29, 0xcf, 0x29, 0x39, 0x78, 0xe3, 0xf8,
+	0x3e, 0x3f, 0x06, 0xfc, 0xa7, 0x9e, 0xf5, 0x6d, 0x06, 0x6e, 0x89, 0x87, 0x1d, 0x06, 0x11, 0x3e,
+	0xe2, 0x11, 0xd4, 0xff, 0xa0, 0x3d, 0x58, 0x95, 0x1a, 0x65, 0xb5, 0xa2, 0x30, 0xa4, 0xc4, 0x72,
+	0x51, 0x0b, 0xbb, 0x5a, 0xcf, 0x5a, 0x91, 0xc0, 0x2d, 0x81, 0xdb, 0xe3, 0x30, 0x5e, 0xa0, 0x29,
+	0xb6, 0x24, 0xcf, 0xea, 0xa8, 0xe8, 0xa2, 0x04, 0x25, 0x85, 0xd4, 0x45, 0xde, 0xe7, 0xae, 0xe2,
+	0xfd, 0x6f, 0x33, 0x70, 0x4d, 0x78, 0xff, 0x22, 0x0a, 0x59, 0xda, 0xed, 0x77, 0x56, 0x09, 0x98,
+	0xdf, 0x64, 0xe0, 0x76, 0xdf, 0x82, 0xec, 0x38, 0xac, 0x4d, 0xcf, 0x70, 0xd0, 0xfd, 0xbf, 0x68,
+	0x7b, 0x7d, 0x35, 0x0b, 0x45, 0xe1, 0x9e, 0xf2, 0xe6, 0xc1, 0xa4, 0x12, 0x91, 0x16, 0x88, 0xd7,
+	0x50, 0x70, 0x88, 0x25, 0x17, 0x4e, 0x79, 0xf3, 0x60, 0x5c, 0x0e, 0xbd, 0x24, 0xd8, 0x1b, 0x33,
+	0xcd, 0xbc, 0xa3, 0xae, 0x18, 0x07, 0x30, 0xdf, 0x12, 0xbb, 0x5c, 0x39, 0xf9, 0xb1, 0x16, 0xf1,
+	0x45, 0xc2, 0xd0, 0x98, 0x69, 0x2a, 0x2a, 0xe3, 0x25, 0x00, 0x8d, 0xc2, 0x78, 0xc4, 0x32, 0x67,
+	0xde, 0xd7, 0x22, 0x1e, 0x08, 0x50, 0x2e, 0x94, 0x34, 0x0a, 0xd5, 0x58, 0x4f, 0xa0, 0x4c, 0x28,
+	0xb1, 0x58, 0x2c, 0x16, 0x2a, 0x9d, 0x3e, 0xd2, 0x62, 0x1e, 0xad, 0x32, 0x8d, 0x99, 0x66, 0x89,
+	0xa4, 0xee, 0x1a, 0xc7, 0x50, 0xb0, 0xe3, 0x68, 0x54, 0x59, 0xf7, 0x93, 0x89, 0xe6, 0x7b, 0x20,
+	0x96, 0xb9, 0x17, 0x09, 0xe1, 0x56, 0x1e, 0xe6, 0x65, 0xa7, 0xdb, 0xfc, 0x43, 0x16, 0x6e, 0x34,
+	0x31, 0xf3, 0x29, 0x61, 0xce, 0x19, 0xee, 0x3b, 0x96, 0xef, 0xf6, 0x5a, 0x4a, 0xac, 0x92, 0x11,
+	0x47, 0x80, 0xb1, 0x67, 0xcd, 0xba, 0x6c, 0xb0, 0x32, 0x86, 0xc3, 0x5e, 0x87, 0x89, 0x19, 0x2f,
+	0xfa, 0x82, 0x99, 0x55, 0xb2, 0x93, 0xb3, 0xf5, 0x11, 0xf4, 0x5a, 0x8d, 0xb9, 0x2b, 0xb4, 0x1a,
+	0x67, 0xf5, 0x5b, 0x8d, 0xdf, 0xe4, 0xe1, 0xfd, 0x3d, 0xd1, 0x9e, 0xef, 0x4d, 0x92, 0x2a, 0x0d,
+	0x7b, 0x5d, 0x64, 0x76, 0x4a, 0x83, 0xd0, 0x9a, 0x48, 0x29, 0xca, 0x02, 0x93, 0xa8, 0x6c, 0x1d,
+	0xca, 0x2e, 0x25, 0x9d, 0xc9, 0xa4, 0xba, 0xc4, 0x21, 0x8d, 0x11, 0x62, 0x98, 0x9b, 0xfa, 0x58,
+	0x34, 0x3b, 0xf1, 0xb1, 0x68, 0x0f, 0xae, 0x21, 0xd7, 0xa5, 0x6f, 0xad, 0x13, 0x17, 0x9f, 0x3b,
+	0xa2, 0x17, 0x27, 0x4e, 0x26, 0x73, 0x63, 0x3b, 0x70, 0x86, 0xc0, 0x3d, 0x51, 0x30, 0x79, 0x40,
+	0x79, 0x04, 0x25, 0xd4, 0x6e, 0x63, 0x12, 0x9f, 0x6f, 0x74, 0x4a, 0xcf, 0xa2, 0x44, 0x48, 0x02,
+	0xae, 0x77, 0xc8, 0x21, 0x0a, 0xbe, 0xa0, 0xa5, 0x77, 0xc8, 0x21, 0x12, 0xfc, 0x19, 0xac, 0xf6,
+	0x1f, 0x1c, 0x2c, 0x71, 0x38, 0xcb, 0x6b, 0x75, 0xe7, 0x52, 0xe7, 0x83, 0x43, 0x75, 0x50, 0x4b,
+	0x9d, 0x17, 0x0b, 0x13, 0x9d, 0x17, 0x79, 0xa1, 0xca, 0x7e, 0x15, 0xa1, 0x00, 0x5b, 0x29, 0x0e,
+	0xd0, 0x49, 0xc1, 0x12, 0xb6, 0x97, 0x30, 0x5d, 0xd0, 0xb3, 0x29, 0x5e, 0xa1, 0x67, 0xd3, 0x84,
+	0x1b, 0x6a, 0x40, 0x83, 0x6c, 0x3a, 0x7d, 0xe7, 0x6b, 0x12, 0xfb, 0xac, 0x9f, 0xf3, 0x2d, 0x2c,
+	0xf6, 0xbf, 0x7a, 0xab, 0x94, 0x45, 0x21, 0xbd, 0x3f, 0xa6, 0x90, 0x4e, 0xf6, 0xe2, 0x13, 0x81,
+	0x3e, 0x90, 0x60, 0x51, 0x56, 0x5f, 0x7c, 0xab, 0x59, 0x3e, 0x49, 0xff, 0x14, 0x7d, 0xff, 0xc0,
+	0x69, 0x63, 0xcb, 0x0f, 0xf0, 0x89, 0x73, 0x5e, 0x59, 0xd4, 0xea, 0xfb, 0x73, 0xc4, 0xbe, 0x00,
+	0xf0, 0xb5, 0xf5, 0x03, 0xea, 0x51, 0x19, 0x1f, 0x4b, 0x3a, 0x6b, 0x2b, 0xec, 0x79, 0x60, 0x98,
+	0xff, 0xca, 0x41, 0xa1, 0xee, 0xfb, 0x4a, 0x4a, 0x5e, 0xc1, 0x8a, 0x87, 0x88, 0x8d, 0x42, 0x1a,
+	0x88, 0x97, 0x91, 0xa9, 0x76, 0xc0, 0x44, 0x52, 0xb9, 0x94, 0xb0, 0xc8, 0xab, 0xfd, 0x4a, 0x9e,
+	0xfd, 0x4e, 0x95, 0x3c, 0x37, 0xad, 0x92, 0xef, 0xc0, 0xbc, 0x6a, 0x5d, 0xcd, 0xea, 0x75, 0x99,
+	0xea, 0xb6, 0x3c, 0x1b, 0x0b, 0x2e, 0x85, 0x35, 0x0e, 0x60, 0xb1, 0x4b, 0xa3, 0x30, 0x6a, 0xe1,
+	0xb8, 0x67, 0x35, 0xa7, 0xcb, 0x26, 0x4b, 0x24, 0xc1, 0x56, 0x56, 0x1c, 0xb2, 0x67, 0x65, 0xb4,
+	0x60, 0xf5, 0x34, 0xf4, 0xdc, 0x1f, 0x5b, 0xb2, 0x6c, 0x6a, 0x45, 0xc4, 0x76, 0x31, 0xab, 0xcc,
+	0x0b, 0xe6, 0xda, 0x78, 0xe6, 0x67, 0x1c, 0xb6, 0x25, 0x50, 0x92, 0x7f, 0x45, 0xd0, 0xa5, 0x2e,
+	0x33, 0xf3, 0x2f, 0x59, 0x58, 0xad, 0xfb, 0xfe, 0x63, 0xd2, 0x41, 0x1d, 0xec, 0x61, 0x12, 0xfe,
+	0x0f, 0x24, 0xdf, 0xde, 0x92, 0xe5, 0xa6, 0x58, 0xb2, 0x1d, 0x98, 0x57, 0x4b, 0x35, 0x7b, 0x85,
+	0xa5, 0x52, 0x58, 0xf3, 0x8b, 0x1c, 0xdc, 0x90, 0x09, 0xba, 0xee, 0xfb, 0xbb, 0xf2, 0xed, 0xb9,
+	0x9a, 0xc2, 0x0d, 0x98, 0x17, 0xaf, 0xd4, 0x6d, 0xad, 0x8c, 0x3c, 0x87, 0x7c, 0x7f, 0xd7, 0x36,
+	0x22, 0x28, 0x24, 0x2f, 0xde, 0x45, 0x16, 0x5e, 0xac, 0xfd, 0x7c, 0x8c, 0x06, 0x0d, 0x3f, 0xbe,
+	0xee, 0xfb, 0x07, 0x9c, 0x40, 0xe8, 0xd0, 0xe8, 0xdb, 0xcd, 0x3c, 0x52, 0xdf, 0xfa, 0x4e, 0x1a,
+	0xb9, 0xa9, 0x4e, 0x1a, 0xef, 0xe0, 0xe5, 0x9d, 0xf9, 0x3b, 0x80, 0x9b, 0xa3, 0xea, 0xa3, 0x57,
+	0xb0, 0x3c, 0x90, 0x26, 0xe2, 0x78, 0x9e, 0x2c, 0x6c, 0x96, 0xfa, 0xb3, 0x10, 0x33, 0x6c, 0xb8,
+	0x79, 0x71, 0x1a, 0x8a, 0x23, 0x7c, 0x32, 0xfe, 0xeb, 0x17, 0xe5, 0x25, 0x66, 0x3c, 0x83, 0x62,
+	0x2f, 0xed, 0x5e, 0x2d, 0xe0, 0x21, 0xc9, 0xe5, 0xcc, 0x78, 0x0d, 0xc6, 0x50, 0x32, 0xbf, 0x9a,
+	0xf2, 0x2d, 0x0f, 0x64, 0x77, 0xd6, 0x2f, 0x19, 0x73, 0x53, 0x49, 0xc6, 0xfe, 0x60, 0x3d, 0x3a,
+	0x3f, 0x79, 0x16, 0xea, 0x2f, 0x4f, 0x07, 0x45, 0x68, 0x61, 0x5a, 0x11, 0x1a, 0x56, 0xfc, 0xfc,
+	0xf4, 0x8a, 0x3f, 0x54, 0x04, 0x17, 0xae, 0xf2, 0x6e, 0x20, 0x55, 0x75, 0xc2, 0x64, 0x55, 0xe7,
+	0x60, 0xcd, 0x5b, 0x9c, 0xb4, 0xe6, 0x1d, 0x55, 0x82, 0x97, 0xae, 0x54, 0x82, 0x8f, 0x28, 0x82,
+	0xcb, 0x57, 0x2a, 0x82, 0xdf, 0x69, 0xa5, 0x75, 0x41, 0x81, 0xb9, 0xfc, 0x5f, 0x29, 0x30, 0xcd,
+	0x2f, 0xb3, 0xc9, 0xeb, 0x9e, 0x97, 0xe2, 0x0f, 0x62, 0x4a, 0x17, 0xbf, 0xcc, 0xc0, 0xad, 0x4b,
+	0xfe, 0x39, 0x26, 0x72, 0xd6, 0x62, 0xed, 0x50, 0x6f, 0x78, 0x92, 0x59, 0xbd, 0x87, 0x48, 0x1a,
+	0xcb, 0xa3, 0x6e, 0x36, 0x2b, 0xf6, 0x88, 0x3b, 0xc6, 0x2b, 0x28, 0xa5, 0x8b, 0x1d, 0x75, 0x0e,
+	0xbd, 0x42, 0xad, 0xd3, 0x98, 0x69, 0x16, 0xbd, 0xde, 0xb5, 0xad, 0x32, 0xc8, 0x9f, 0xf2, 0xcf,
+	0x7d, 0x5b, 0xff, 0xcc, 0x80, 0xd9, 0xa6, 0xde, 0x18, 0xde, 0xad, 0xe5, 0xba, 0xcd, 0x87, 0xc5,
+	0x27, 0x8c, 0xed, 0xf3, 0x15, 0xde, 0xcf, 0xbc, 0xde, 0x51, 0x98, 0x0e, 0x75, 0x11, 0xe9, 0x54,
+	0x69, 0xd0, 0x59, 0xef, 0x60, 0x22, 0xd6, 0x3f, 0xfe, 0x5f, 0x9c, 0xef, 0xb0, 0x51, 0xff, 0x2f,
+	0x7c, 0x20, 0x3f, 0xbe, 0xca, 0xe6, 0x9e, 0xd6, 0xeb, 0x7f, 0xca, 0x7e, 0xf0, 0x54, 0x92, 0xd5,
+	0x6d, 0x56, 0x95, 0x5f, 0xf9, 0xb7, 0xa3, 0x8d, 0xea, 0xb6, 0x30, 0xfb, 0x3a, 0x36, 0x38, 0xae,
+	0xdb, 0xec, 0x38, 0x31, 0x38, 0x3e, 0xda, 0x38, 0x96, 0x06, 0xff, 0xc8, 0x9a, 0xf2, 0xea, 0xe6,
+	0x66, 0xdd, 0x66, 0x9b, 0x9b, 0x89, 0xc9, 0xe6, 0xe6, 0xd1, 0xc6, 0xe6, 0xa6, 0x34, 0x6a, 0xcd,
+	0x8b, 0xd1, 0x6d, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x9b, 0x33, 0x5b, 0x50, 0x29, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/asset_types.pb.go b/googleapis/ads/googleads/v3/common/asset_types.pb.go
new file mode 100644
index 0000000..3eebfe9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/asset_types.pb.go
@@ -0,0 +1,329 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/asset_types.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A YouTube asset.
+type YoutubeVideoAsset struct {
+	// YouTube video id. This is the 11 character string value used in the
+	// YouTube video URL.
+	YoutubeVideoId       *wrappers.StringValue `protobuf:"bytes,1,opt,name=youtube_video_id,json=youtubeVideoId,proto3" json:"youtube_video_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *YoutubeVideoAsset) Reset()         { *m = YoutubeVideoAsset{} }
+func (m *YoutubeVideoAsset) String() string { return proto.CompactTextString(m) }
+func (*YoutubeVideoAsset) ProtoMessage()    {}
+func (*YoutubeVideoAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_07f28a97711f0ef9, []int{0}
+}
+
+func (m *YoutubeVideoAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YoutubeVideoAsset.Unmarshal(m, b)
+}
+func (m *YoutubeVideoAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YoutubeVideoAsset.Marshal(b, m, deterministic)
+}
+func (m *YoutubeVideoAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YoutubeVideoAsset.Merge(m, src)
+}
+func (m *YoutubeVideoAsset) XXX_Size() int {
+	return xxx_messageInfo_YoutubeVideoAsset.Size(m)
+}
+func (m *YoutubeVideoAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_YoutubeVideoAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YoutubeVideoAsset proto.InternalMessageInfo
+
+func (m *YoutubeVideoAsset) GetYoutubeVideoId() *wrappers.StringValue {
+	if m != nil {
+		return m.YoutubeVideoId
+	}
+	return nil
+}
+
+// A MediaBundle asset.
+type MediaBundleAsset struct {
+	// Media bundle (ZIP file) asset data. The format of the uploaded ZIP file
+	// depends on the ad field where it will be used. For more information on the
+	// format, see the documentation of the ad field where you plan on using the
+	// MediaBundleAsset. This field is mutate only.
+	Data                 *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaBundleAsset) Reset()         { *m = MediaBundleAsset{} }
+func (m *MediaBundleAsset) String() string { return proto.CompactTextString(m) }
+func (*MediaBundleAsset) ProtoMessage()    {}
+func (*MediaBundleAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_07f28a97711f0ef9, []int{1}
+}
+
+func (m *MediaBundleAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaBundleAsset.Unmarshal(m, b)
+}
+func (m *MediaBundleAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaBundleAsset.Marshal(b, m, deterministic)
+}
+func (m *MediaBundleAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaBundleAsset.Merge(m, src)
+}
+func (m *MediaBundleAsset) XXX_Size() int {
+	return xxx_messageInfo_MediaBundleAsset.Size(m)
+}
+func (m *MediaBundleAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaBundleAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaBundleAsset proto.InternalMessageInfo
+
+func (m *MediaBundleAsset) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// An Image asset.
+type ImageAsset struct {
+	// The raw bytes data of an image. This field is mutate only.
+	Data *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	// File size of the image asset in bytes.
+	FileSize *wrappers.Int64Value `protobuf:"bytes,2,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
+	// MIME type of the image asset.
+	MimeType enums.MimeTypeEnum_MimeType `protobuf:"varint,3,opt,name=mime_type,json=mimeType,proto3,enum=google.ads.googleads.v3.enums.MimeTypeEnum_MimeType" json:"mime_type,omitempty"`
+	// Metadata for this image at its original size.
+	FullSize             *ImageDimension `protobuf:"bytes,4,opt,name=full_size,json=fullSize,proto3" json:"full_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *ImageAsset) Reset()         { *m = ImageAsset{} }
+func (m *ImageAsset) String() string { return proto.CompactTextString(m) }
+func (*ImageAsset) ProtoMessage()    {}
+func (*ImageAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_07f28a97711f0ef9, []int{2}
+}
+
+func (m *ImageAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageAsset.Unmarshal(m, b)
+}
+func (m *ImageAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageAsset.Marshal(b, m, deterministic)
+}
+func (m *ImageAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageAsset.Merge(m, src)
+}
+func (m *ImageAsset) XXX_Size() int {
+	return xxx_messageInfo_ImageAsset.Size(m)
+}
+func (m *ImageAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageAsset proto.InternalMessageInfo
+
+func (m *ImageAsset) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *ImageAsset) GetFileSize() *wrappers.Int64Value {
+	if m != nil {
+		return m.FileSize
+	}
+	return nil
+}
+
+func (m *ImageAsset) GetMimeType() enums.MimeTypeEnum_MimeType {
+	if m != nil {
+		return m.MimeType
+	}
+	return enums.MimeTypeEnum_UNSPECIFIED
+}
+
+func (m *ImageAsset) GetFullSize() *ImageDimension {
+	if m != nil {
+		return m.FullSize
+	}
+	return nil
+}
+
+// Metadata for an image at a certain size, either original or resized.
+type ImageDimension struct {
+	// Height of the image.
+	HeightPixels *wrappers.Int64Value `protobuf:"bytes,1,opt,name=height_pixels,json=heightPixels,proto3" json:"height_pixels,omitempty"`
+	// Width of the image.
+	WidthPixels *wrappers.Int64Value `protobuf:"bytes,2,opt,name=width_pixels,json=widthPixels,proto3" json:"width_pixels,omitempty"`
+	// A URL that returns the image with this height and width.
+	Url                  *wrappers.StringValue `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ImageDimension) Reset()         { *m = ImageDimension{} }
+func (m *ImageDimension) String() string { return proto.CompactTextString(m) }
+func (*ImageDimension) ProtoMessage()    {}
+func (*ImageDimension) Descriptor() ([]byte, []int) {
+	return fileDescriptor_07f28a97711f0ef9, []int{3}
+}
+
+func (m *ImageDimension) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageDimension.Unmarshal(m, b)
+}
+func (m *ImageDimension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageDimension.Marshal(b, m, deterministic)
+}
+func (m *ImageDimension) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageDimension.Merge(m, src)
+}
+func (m *ImageDimension) XXX_Size() int {
+	return xxx_messageInfo_ImageDimension.Size(m)
+}
+func (m *ImageDimension) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageDimension.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageDimension proto.InternalMessageInfo
+
+func (m *ImageDimension) GetHeightPixels() *wrappers.Int64Value {
+	if m != nil {
+		return m.HeightPixels
+	}
+	return nil
+}
+
+func (m *ImageDimension) GetWidthPixels() *wrappers.Int64Value {
+	if m != nil {
+		return m.WidthPixels
+	}
+	return nil
+}
+
+func (m *ImageDimension) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+// A Text asset.
+type TextAsset struct {
+	// Text content of the text asset.
+	Text                 *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TextAsset) Reset()         { *m = TextAsset{} }
+func (m *TextAsset) String() string { return proto.CompactTextString(m) }
+func (*TextAsset) ProtoMessage()    {}
+func (*TextAsset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_07f28a97711f0ef9, []int{4}
+}
+
+func (m *TextAsset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TextAsset.Unmarshal(m, b)
+}
+func (m *TextAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TextAsset.Marshal(b, m, deterministic)
+}
+func (m *TextAsset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TextAsset.Merge(m, src)
+}
+func (m *TextAsset) XXX_Size() int {
+	return xxx_messageInfo_TextAsset.Size(m)
+}
+func (m *TextAsset) XXX_DiscardUnknown() {
+	xxx_messageInfo_TextAsset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TextAsset proto.InternalMessageInfo
+
+func (m *TextAsset) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*YoutubeVideoAsset)(nil), "google.ads.googleads.v3.common.YoutubeVideoAsset")
+	proto.RegisterType((*MediaBundleAsset)(nil), "google.ads.googleads.v3.common.MediaBundleAsset")
+	proto.RegisterType((*ImageAsset)(nil), "google.ads.googleads.v3.common.ImageAsset")
+	proto.RegisterType((*ImageDimension)(nil), "google.ads.googleads.v3.common.ImageDimension")
+	proto.RegisterType((*TextAsset)(nil), "google.ads.googleads.v3.common.TextAsset")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/asset_types.proto", fileDescriptor_07f28a97711f0ef9)
+}
+
+var fileDescriptor_07f28a97711f0ef9 = []byte{
+	// 537 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x6b, 0xdb, 0x30,
+	0x14, 0xc7, 0x71, 0x12, 0x46, 0xa2, 0x76, 0x59, 0xe7, 0x53, 0xc8, 0x4a, 0x29, 0x3e, 0xf5, 0x32,
+	0xb9, 0xd4, 0x65, 0x0c, 0x8f, 0x8d, 0x39, 0xed, 0x56, 0xc2, 0x28, 0x64, 0x69, 0x09, 0x6c, 0x0b,
+	0x04, 0xa5, 0x7a, 0x71, 0x04, 0x96, 0x64, 0x2c, 0x39, 0x4d, 0xfa, 0x45, 0x76, 0xdf, 0x71, 0x1f,
+	0x63, 0xc7, 0x7d, 0x94, 0x7e, 0x8a, 0x61, 0xc9, 0x09, 0x1d, 0xc3, 0x6b, 0xe9, 0xc9, 0xcf, 0xd2,
+	0xff, 0xff, 0xd3, 0xd3, 0x7b, 0x4f, 0xe8, 0x30, 0x96, 0x32, 0x4e, 0xc0, 0x27, 0x54, 0xf9, 0x36,
+	0x2c, 0xa2, 0x45, 0xe0, 0x5f, 0x49, 0xce, 0xa5, 0xf0, 0x89, 0x52, 0xa0, 0x27, 0x7a, 0x95, 0x82,
+	0xc2, 0x69, 0x26, 0xb5, 0x74, 0xf7, 0xac, 0x0c, 0x13, 0xaa, 0xf0, 0xc6, 0x81, 0x17, 0x01, 0xb6,
+	0x8e, 0xee, 0xcb, 0x2a, 0x22, 0x88, 0x9c, 0x2b, 0x9f, 0x33, 0x0e, 0x86, 0x67, 0x71, 0xdd, 0x12,
+	0xe7, 0x9b, 0xbf, 0x69, 0x3e, 0xf3, 0xaf, 0x33, 0x92, 0xa6, 0x90, 0x95, 0xc7, 0x75, 0x77, 0xd7,
+	0xb8, 0x94, 0xf9, 0x44, 0x08, 0xa9, 0x89, 0x66, 0x52, 0x94, 0xbb, 0xde, 0x37, 0xf4, 0xfc, 0x8b,
+	0xcc, 0x75, 0x3e, 0x85, 0x11, 0xa3, 0x20, 0xa3, 0x22, 0x5b, 0xf7, 0x23, 0xda, 0x59, 0xd9, 0xc5,
+	0xc9, 0xa2, 0x58, 0x9d, 0x30, 0xda, 0x71, 0xf6, 0x9d, 0x83, 0xad, 0xa3, 0xdd, 0x32, 0x63, 0xbc,
+	0x3e, 0x0d, 0x5f, 0xe8, 0x8c, 0x89, 0x78, 0x44, 0x92, 0x1c, 0x86, 0xed, 0xd5, 0x1d, 0x54, 0x9f,
+	0x7a, 0x27, 0x68, 0xe7, 0x1c, 0x28, 0x23, 0xbd, 0x5c, 0xd0, 0x04, 0x2c, 0xdb, 0x47, 0x0d, 0x4a,
+	0x34, 0x29, 0x79, 0x2f, 0xfe, 0xe1, 0xf5, 0x56, 0x1a, 0x94, 0xc5, 0x19, 0xa1, 0xf7, 0xbd, 0x86,
+	0x50, 0x9f, 0x93, 0xf8, 0x91, 0x7e, 0xf7, 0x35, 0x6a, 0xcd, 0x58, 0x02, 0x13, 0xc5, 0x6e, 0xa0,
+	0x53, 0xab, 0x70, 0xf5, 0x85, 0x7e, 0x75, 0x6c, 0x5d, 0xcd, 0x42, 0x7d, 0xc1, 0x6e, 0xc0, 0xfd,
+	0x8c, 0x5a, 0x9b, 0x62, 0x77, 0xea, 0xfb, 0xce, 0x41, 0xfb, 0xe8, 0x18, 0x57, 0x35, 0xcf, 0x34,
+	0x07, 0x9f, 0x33, 0x0e, 0x97, 0xab, 0x14, 0x3e, 0x88, 0x9c, 0x6f, 0x7e, 0x86, 0x4d, 0x5e, 0x46,
+	0xee, 0x27, 0xd4, 0x9a, 0xe5, 0x49, 0x62, 0x93, 0x69, 0x98, 0x64, 0x30, 0xfe, 0xff, 0x3c, 0x60,
+	0x73, 0xf9, 0x53, 0xc6, 0x41, 0x28, 0x26, 0xc5, 0xb0, 0x59, 0x00, 0x8a, 0xfc, 0xbc, 0x5f, 0x0e,
+	0x6a, 0xff, 0xbd, 0xe9, 0xbe, 0x47, 0x4f, 0xe7, 0xc0, 0xe2, 0xb9, 0x9e, 0xa4, 0x6c, 0x09, 0x89,
+	0xaa, 0x2c, 0xd3, 0x9d, 0x0b, 0x6f, 0x5b, 0xc7, 0xc0, 0x18, 0xdc, 0x77, 0x68, 0xfb, 0x9a, 0x51,
+	0x3d, 0x5f, 0x03, 0x1e, 0x50, 0xb1, 0x2d, 0x63, 0x28, 0xfd, 0x18, 0xd5, 0xf3, 0x2c, 0x31, 0xe5,
+	0xba, 0x6f, 0x5c, 0x0a, 0xa1, 0xf7, 0x16, 0xb5, 0x2e, 0x61, 0xa9, 0x6d, 0x73, 0x0f, 0x51, 0x43,
+	0xc3, 0x52, 0x3f, 0x68, 0xd8, 0x8c, 0xb2, 0x77, 0xeb, 0x20, 0xef, 0x4a, 0xf2, 0x7b, 0x6a, 0xd8,
+	0x7b, 0x66, 0xf8, 0x45, 0x0b, 0xd4, 0xa0, 0x80, 0x0d, 0x9c, 0xaf, 0xa7, 0xa5, 0x25, 0x96, 0x09,
+	0x11, 0x31, 0x96, 0x59, 0xec, 0xc7, 0x20, 0xcc, 0x51, 0xeb, 0x67, 0x97, 0x32, 0x55, 0xf5, 0xae,
+	0xdf, 0xd8, 0xcf, 0x8f, 0x5a, 0xfd, 0x2c, 0x8a, 0x7e, 0xd6, 0xf6, 0xce, 0x2c, 0x2c, 0xa2, 0x0a,
+	0xdb, 0xb0, 0x88, 0x46, 0x01, 0x3e, 0x31, 0xb2, 0xdf, 0x6b, 0xc1, 0x38, 0xa2, 0x6a, 0xbc, 0x11,
+	0x8c, 0x47, 0xc1, 0xd8, 0x0a, 0x6e, 0x6b, 0x9e, 0x5d, 0x0d, 0xc3, 0x88, 0xaa, 0x30, 0xdc, 0x48,
+	0xc2, 0x70, 0x14, 0x84, 0xa1, 0x15, 0x4d, 0x9f, 0x98, 0xec, 0x82, 0x3f, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0xe2, 0xdf, 0xa9, 0x26, 0x74, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/bidding.pb.go b/googleapis/ads/googleads/v3/common/bidding.pb.go
new file mode 100644
index 0000000..d27185b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/bidding.pb.go
@@ -0,0 +1,691 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/bidding.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Commission is an automatic bidding strategy in which the advertiser pays a
+// certain portion of the conversion value.
+type Commission struct {
+	// Commission rate defines the portion of the conversion value that the
+	// advertiser will be billed. A commission rate of x should be passed into
+	// this field as (x * 1,000,000). For example, 106,000 represents a commission
+	// rate of 0.106 (10.6%).
+	CommissionRateMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=commission_rate_micros,json=commissionRateMicros,proto3" json:"commission_rate_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Commission) Reset()         { *m = Commission{} }
+func (m *Commission) String() string { return proto.CompactTextString(m) }
+func (*Commission) ProtoMessage()    {}
+func (*Commission) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{0}
+}
+
+func (m *Commission) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Commission.Unmarshal(m, b)
+}
+func (m *Commission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Commission.Marshal(b, m, deterministic)
+}
+func (m *Commission) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Commission.Merge(m, src)
+}
+func (m *Commission) XXX_Size() int {
+	return xxx_messageInfo_Commission.Size(m)
+}
+func (m *Commission) XXX_DiscardUnknown() {
+	xxx_messageInfo_Commission.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Commission proto.InternalMessageInfo
+
+func (m *Commission) GetCommissionRateMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CommissionRateMicros
+	}
+	return nil
+}
+
+// An automated bidding strategy that raises bids for clicks
+// that seem more likely to lead to a conversion and lowers
+// them for clicks where they seem less likely.
+type EnhancedCpc struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnhancedCpc) Reset()         { *m = EnhancedCpc{} }
+func (m *EnhancedCpc) String() string { return proto.CompactTextString(m) }
+func (*EnhancedCpc) ProtoMessage()    {}
+func (*EnhancedCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{1}
+}
+
+func (m *EnhancedCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnhancedCpc.Unmarshal(m, b)
+}
+func (m *EnhancedCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnhancedCpc.Marshal(b, m, deterministic)
+}
+func (m *EnhancedCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnhancedCpc.Merge(m, src)
+}
+func (m *EnhancedCpc) XXX_Size() int {
+	return xxx_messageInfo_EnhancedCpc.Size(m)
+}
+func (m *EnhancedCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnhancedCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnhancedCpc proto.InternalMessageInfo
+
+// Manual click-based bidding where user pays per click.
+type ManualCpc struct {
+	// Whether bids are to be enhanced based on conversion optimizer data.
+	EnhancedCpcEnabled   *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enhanced_cpc_enabled,json=enhancedCpcEnabled,proto3" json:"enhanced_cpc_enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ManualCpc) Reset()         { *m = ManualCpc{} }
+func (m *ManualCpc) String() string { return proto.CompactTextString(m) }
+func (*ManualCpc) ProtoMessage()    {}
+func (*ManualCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{2}
+}
+
+func (m *ManualCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpc.Unmarshal(m, b)
+}
+func (m *ManualCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpc.Marshal(b, m, deterministic)
+}
+func (m *ManualCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpc.Merge(m, src)
+}
+func (m *ManualCpc) XXX_Size() int {
+	return xxx_messageInfo_ManualCpc.Size(m)
+}
+func (m *ManualCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpc proto.InternalMessageInfo
+
+func (m *ManualCpc) GetEnhancedCpcEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnhancedCpcEnabled
+	}
+	return nil
+}
+
+// Manual impression-based bidding where user pays per thousand impressions.
+type ManualCpm struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManualCpm) Reset()         { *m = ManualCpm{} }
+func (m *ManualCpm) String() string { return proto.CompactTextString(m) }
+func (*ManualCpm) ProtoMessage()    {}
+func (*ManualCpm) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{3}
+}
+
+func (m *ManualCpm) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpm.Unmarshal(m, b)
+}
+func (m *ManualCpm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpm.Marshal(b, m, deterministic)
+}
+func (m *ManualCpm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpm.Merge(m, src)
+}
+func (m *ManualCpm) XXX_Size() int {
+	return xxx_messageInfo_ManualCpm.Size(m)
+}
+func (m *ManualCpm) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpm.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpm proto.InternalMessageInfo
+
+// View based bidding where user pays per video view.
+type ManualCpv struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManualCpv) Reset()         { *m = ManualCpv{} }
+func (m *ManualCpv) String() string { return proto.CompactTextString(m) }
+func (*ManualCpv) ProtoMessage()    {}
+func (*ManualCpv) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{4}
+}
+
+func (m *ManualCpv) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpv.Unmarshal(m, b)
+}
+func (m *ManualCpv) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpv.Marshal(b, m, deterministic)
+}
+func (m *ManualCpv) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpv.Merge(m, src)
+}
+func (m *ManualCpv) XXX_Size() int {
+	return xxx_messageInfo_ManualCpv.Size(m)
+}
+func (m *ManualCpv) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpv.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpv proto.InternalMessageInfo
+
+// An automated bidding strategy that sets bids to help get the most conversions
+// for your campaign while spending your budget.
+type MaximizeConversions struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MaximizeConversions) Reset()         { *m = MaximizeConversions{} }
+func (m *MaximizeConversions) String() string { return proto.CompactTextString(m) }
+func (*MaximizeConversions) ProtoMessage()    {}
+func (*MaximizeConversions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{5}
+}
+
+func (m *MaximizeConversions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaximizeConversions.Unmarshal(m, b)
+}
+func (m *MaximizeConversions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaximizeConversions.Marshal(b, m, deterministic)
+}
+func (m *MaximizeConversions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaximizeConversions.Merge(m, src)
+}
+func (m *MaximizeConversions) XXX_Size() int {
+	return xxx_messageInfo_MaximizeConversions.Size(m)
+}
+func (m *MaximizeConversions) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaximizeConversions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaximizeConversions proto.InternalMessageInfo
+
+// An automated bidding strategy which tries to maximize conversion value
+// given a daily budget.
+type MaximizeConversionValue struct {
+	// The target return on ad spend (ROAS) option. If set, the bid strategy will
+	// maximize revenue while averaging the target return on ad spend. If the
+	// target ROAS is high, the bid strategy may not be able to spend the full
+	// budget. If the target ROAS is not set, the bid strategy will aim to
+	// achieve the highest possible ROAS for the budget.
+	TargetRoas           *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=target_roas,json=targetRoas,proto3" json:"target_roas,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MaximizeConversionValue) Reset()         { *m = MaximizeConversionValue{} }
+func (m *MaximizeConversionValue) String() string { return proto.CompactTextString(m) }
+func (*MaximizeConversionValue) ProtoMessage()    {}
+func (*MaximizeConversionValue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{6}
+}
+
+func (m *MaximizeConversionValue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaximizeConversionValue.Unmarshal(m, b)
+}
+func (m *MaximizeConversionValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaximizeConversionValue.Marshal(b, m, deterministic)
+}
+func (m *MaximizeConversionValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaximizeConversionValue.Merge(m, src)
+}
+func (m *MaximizeConversionValue) XXX_Size() int {
+	return xxx_messageInfo_MaximizeConversionValue.Size(m)
+}
+func (m *MaximizeConversionValue) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaximizeConversionValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaximizeConversionValue proto.InternalMessageInfo
+
+func (m *MaximizeConversionValue) GetTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoas
+	}
+	return nil
+}
+
+// An automated bid strategy that sets bids to help get as many conversions as
+// possible at the target cost-per-acquisition (CPA) you set.
+type TargetCpa struct {
+	// Average CPA target.
+	// This target should be greater than or equal to minimum billable unit based
+	// on the currency for the account.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Minimum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidFloorMicros    *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_floor_micros,json=cpcBidFloorMicros,proto3" json:"cpc_bid_floor_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetCpa) Reset()         { *m = TargetCpa{} }
+func (m *TargetCpa) String() string { return proto.CompactTextString(m) }
+func (*TargetCpa) ProtoMessage()    {}
+func (*TargetCpa) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{7}
+}
+
+func (m *TargetCpa) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpa.Unmarshal(m, b)
+}
+func (m *TargetCpa) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpa.Marshal(b, m, deterministic)
+}
+func (m *TargetCpa) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpa.Merge(m, src)
+}
+func (m *TargetCpa) XXX_Size() int {
+	return xxx_messageInfo_TargetCpa.Size(m)
+}
+func (m *TargetCpa) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpa.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpa proto.InternalMessageInfo
+
+func (m *TargetCpa) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *TargetCpa) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *TargetCpa) GetCpcBidFloorMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidFloorMicros
+	}
+	return nil
+}
+
+// Target CPM (cost per thousand impressions) is an automated bidding strategy
+// that sets bids to optimize performance given the target CPM you set.
+type TargetCpm struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetCpm) Reset()         { *m = TargetCpm{} }
+func (m *TargetCpm) String() string { return proto.CompactTextString(m) }
+func (*TargetCpm) ProtoMessage()    {}
+func (*TargetCpm) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{8}
+}
+
+func (m *TargetCpm) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpm.Unmarshal(m, b)
+}
+func (m *TargetCpm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpm.Marshal(b, m, deterministic)
+}
+func (m *TargetCpm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpm.Merge(m, src)
+}
+func (m *TargetCpm) XXX_Size() int {
+	return xxx_messageInfo_TargetCpm.Size(m)
+}
+func (m *TargetCpm) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpm.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpm proto.InternalMessageInfo
+
+// An automated bidding strategy that sets bids so that a certain percentage of
+// search ads are shown at the top of the first page (or other targeted
+// location).
+// Next Id = 4
+type TargetImpressionShare struct {
+	// The targeted location on the search results page.
+	Location enums.TargetImpressionShareLocationEnum_TargetImpressionShareLocation `protobuf:"varint,1,opt,name=location,proto3,enum=google.ads.googleads.v3.enums.TargetImpressionShareLocationEnum_TargetImpressionShareLocation" json:"location,omitempty"`
+	// The desired fraction of ads to be shown in the targeted location in micros.
+	// E.g. 1% equals 10,000.
+	LocationFractionMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=location_fraction_micros,json=locationFractionMicros,proto3" json:"location_fraction_micros,omitempty"`
+	// The highest CPC bid the automated bidding system is permitted to specify.
+	// This is a required field entered by the advertiser that sets the ceiling
+	// and specified in local micros.
+	CpcBidCeilingMicros  *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetImpressionShare) Reset()         { *m = TargetImpressionShare{} }
+func (m *TargetImpressionShare) String() string { return proto.CompactTextString(m) }
+func (*TargetImpressionShare) ProtoMessage()    {}
+func (*TargetImpressionShare) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{9}
+}
+
+func (m *TargetImpressionShare) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetImpressionShare.Unmarshal(m, b)
+}
+func (m *TargetImpressionShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetImpressionShare.Marshal(b, m, deterministic)
+}
+func (m *TargetImpressionShare) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetImpressionShare.Merge(m, src)
+}
+func (m *TargetImpressionShare) XXX_Size() int {
+	return xxx_messageInfo_TargetImpressionShare.Size(m)
+}
+func (m *TargetImpressionShare) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetImpressionShare.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetImpressionShare proto.InternalMessageInfo
+
+func (m *TargetImpressionShare) GetLocation() enums.TargetImpressionShareLocationEnum_TargetImpressionShareLocation {
+	if m != nil {
+		return m.Location
+	}
+	return enums.TargetImpressionShareLocationEnum_UNSPECIFIED
+}
+
+func (m *TargetImpressionShare) GetLocationFractionMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.LocationFractionMicros
+	}
+	return nil
+}
+
+func (m *TargetImpressionShare) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+// An automated bidding strategy that helps you maximize revenue while
+// averaging a specific target return on ad spend (ROAS).
+type TargetRoas struct {
+	// Required. The desired revenue (based on conversion data) per unit of spend.
+	// Value must be between 0.01 and 1000.0, inclusive.
+	TargetRoas *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=target_roas,json=targetRoas,proto3" json:"target_roas,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Minimum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidFloorMicros    *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_floor_micros,json=cpcBidFloorMicros,proto3" json:"cpc_bid_floor_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetRoas) Reset()         { *m = TargetRoas{} }
+func (m *TargetRoas) String() string { return proto.CompactTextString(m) }
+func (*TargetRoas) ProtoMessage()    {}
+func (*TargetRoas) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{10}
+}
+
+func (m *TargetRoas) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetRoas.Unmarshal(m, b)
+}
+func (m *TargetRoas) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetRoas.Marshal(b, m, deterministic)
+}
+func (m *TargetRoas) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetRoas.Merge(m, src)
+}
+func (m *TargetRoas) XXX_Size() int {
+	return xxx_messageInfo_TargetRoas.Size(m)
+}
+func (m *TargetRoas) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetRoas.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetRoas proto.InternalMessageInfo
+
+func (m *TargetRoas) GetTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoas
+	}
+	return nil
+}
+
+func (m *TargetRoas) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *TargetRoas) GetCpcBidFloorMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidFloorMicros
+	}
+	return nil
+}
+
+// An automated bid strategy that sets your bids to help get as many clicks
+// as possible within your budget.
+type TargetSpend struct {
+	// The spend target under which to maximize clicks.
+	// A TargetSpend bidder will attempt to spend the smaller of this value
+	// or the natural throttling spend amount.
+	// If not specified, the budget is used as the spend target.
+	TargetSpendMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_spend_micros,json=targetSpendMicros,proto3" json:"target_spend_micros,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros  *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetSpend) Reset()         { *m = TargetSpend{} }
+func (m *TargetSpend) String() string { return proto.CompactTextString(m) }
+func (*TargetSpend) ProtoMessage()    {}
+func (*TargetSpend) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{11}
+}
+
+func (m *TargetSpend) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetSpend.Unmarshal(m, b)
+}
+func (m *TargetSpend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetSpend.Marshal(b, m, deterministic)
+}
+func (m *TargetSpend) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetSpend.Merge(m, src)
+}
+func (m *TargetSpend) XXX_Size() int {
+	return xxx_messageInfo_TargetSpend.Size(m)
+}
+func (m *TargetSpend) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetSpend.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetSpend proto.InternalMessageInfo
+
+func (m *TargetSpend) GetTargetSpendMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetSpendMicros
+	}
+	return nil
+}
+
+func (m *TargetSpend) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+// A bidding strategy where bids are a fraction of the advertised price for
+// some good or service.
+type PercentCpc struct {
+	// Maximum bid limit that can be set by the bid strategy. This is
+	// an optional field entered by the advertiser and specified in local micros.
+	// Note: A zero value is interpreted in the same way as having bid_ceiling
+	// undefined.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Adjusts the bid for each auction upward or downward, depending on the
+	// likelihood of a conversion. Individual bids may exceed
+	// cpc_bid_ceiling_micros, but the average bid amount for a campaign should
+	// not.
+	EnhancedCpcEnabled   *wrappers.BoolValue `protobuf:"bytes,2,opt,name=enhanced_cpc_enabled,json=enhancedCpcEnabled,proto3" json:"enhanced_cpc_enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *PercentCpc) Reset()         { *m = PercentCpc{} }
+func (m *PercentCpc) String() string { return proto.CompactTextString(m) }
+func (*PercentCpc) ProtoMessage()    {}
+func (*PercentCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c8dc66e731ec0522, []int{12}
+}
+
+func (m *PercentCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PercentCpc.Unmarshal(m, b)
+}
+func (m *PercentCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PercentCpc.Marshal(b, m, deterministic)
+}
+func (m *PercentCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PercentCpc.Merge(m, src)
+}
+func (m *PercentCpc) XXX_Size() int {
+	return xxx_messageInfo_PercentCpc.Size(m)
+}
+func (m *PercentCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_PercentCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PercentCpc proto.InternalMessageInfo
+
+func (m *PercentCpc) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *PercentCpc) GetEnhancedCpcEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnhancedCpcEnabled
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Commission)(nil), "google.ads.googleads.v3.common.Commission")
+	proto.RegisterType((*EnhancedCpc)(nil), "google.ads.googleads.v3.common.EnhancedCpc")
+	proto.RegisterType((*ManualCpc)(nil), "google.ads.googleads.v3.common.ManualCpc")
+	proto.RegisterType((*ManualCpm)(nil), "google.ads.googleads.v3.common.ManualCpm")
+	proto.RegisterType((*ManualCpv)(nil), "google.ads.googleads.v3.common.ManualCpv")
+	proto.RegisterType((*MaximizeConversions)(nil), "google.ads.googleads.v3.common.MaximizeConversions")
+	proto.RegisterType((*MaximizeConversionValue)(nil), "google.ads.googleads.v3.common.MaximizeConversionValue")
+	proto.RegisterType((*TargetCpa)(nil), "google.ads.googleads.v3.common.TargetCpa")
+	proto.RegisterType((*TargetCpm)(nil), "google.ads.googleads.v3.common.TargetCpm")
+	proto.RegisterType((*TargetImpressionShare)(nil), "google.ads.googleads.v3.common.TargetImpressionShare")
+	proto.RegisterType((*TargetRoas)(nil), "google.ads.googleads.v3.common.TargetRoas")
+	proto.RegisterType((*TargetSpend)(nil), "google.ads.googleads.v3.common.TargetSpend")
+	proto.RegisterType((*PercentCpc)(nil), "google.ads.googleads.v3.common.PercentCpc")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/bidding.proto", fileDescriptor_c8dc66e731ec0522)
+}
+
+var fileDescriptor_c8dc66e731ec0522 = []byte{
+	// 667 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0xdd, 0x6a, 0xd4, 0x4e,
+	0x14, 0x27, 0x5b, 0xf8, 0xf3, 0xef, 0xac, 0x1f, 0x34, 0xfd, 0xb0, 0xd4, 0x52, 0x24, 0x57, 0x5e,
+	0xc8, 0x04, 0xba, 0xe2, 0x45, 0xc4, 0x8b, 0xdd, 0xf4, 0x83, 0x62, 0x0b, 0xeb, 0xb6, 0x2e, 0x2a,
+	0x8b, 0x61, 0x76, 0x32, 0x4d, 0x07, 0x92, 0x99, 0x61, 0x26, 0x59, 0xa5, 0x8f, 0xe3, 0xa5, 0xf8,
+	0x08, 0x3e, 0x81, 0x2f, 0x22, 0xe8, 0xad, 0x0f, 0x20, 0x99, 0x8f, 0xac, 0xd0, 0x6e, 0x6b, 0x57,
+	0x04, 0xaf, 0x72, 0x4e, 0xe6, 0x77, 0x7e, 0xbf, 0x99, 0x33, 0xe7, 0xcc, 0x01, 0x8f, 0x32, 0xce,
+	0xb3, 0x9c, 0x84, 0x28, 0x55, 0xa1, 0x31, 0x6b, 0x6b, 0xd2, 0x09, 0x31, 0x2f, 0x0a, 0xce, 0xc2,
+	0x31, 0x4d, 0x53, 0xca, 0x32, 0x28, 0x24, 0x2f, 0xb9, 0xbf, 0x65, 0x20, 0x10, 0xa5, 0x0a, 0x36,
+	0x68, 0x38, 0xe9, 0x40, 0x83, 0xde, 0xd8, 0x99, 0xc5, 0x46, 0x58, 0x55, 0xa8, 0xb0, 0x44, 0x32,
+	0x23, 0x65, 0x42, 0x0b, 0x21, 0x89, 0x52, 0x94, 0xb3, 0x44, 0x9d, 0x21, 0x49, 0x92, 0x9c, 0x63,
+	0x54, 0x52, 0xce, 0x8c, 0xca, 0x86, 0x55, 0x09, 0xb5, 0x37, 0xae, 0x4e, 0xc3, 0x77, 0x12, 0x09,
+	0x41, 0xa4, 0xb2, 0xeb, 0x9b, 0x4e, 0x45, 0xd0, 0x10, 0x31, 0xc6, 0x4b, 0x1d, 0x6c, 0x57, 0x83,
+	0x04, 0x80, 0x98, 0x17, 0x05, 0xd5, 0x02, 0xfe, 0x0b, 0xb0, 0x86, 0x1b, 0x2f, 0x91, 0xa8, 0x24,
+	0x49, 0x41, 0xb1, 0xe4, 0x6a, 0xdd, 0x7b, 0xe0, 0x3d, 0x6c, 0x6f, 0xdf, 0xb7, 0xe7, 0x80, 0x4e,
+	0x0c, 0x1e, 0xb0, 0xf2, 0xc9, 0xe3, 0x21, 0xca, 0x2b, 0x32, 0x58, 0x99, 0x86, 0x0e, 0x50, 0x49,
+	0x8e, 0x74, 0x60, 0x70, 0x1b, 0xb4, 0x77, 0xd9, 0x19, 0x62, 0x98, 0xa4, 0xb1, 0xc0, 0xc1, 0x6b,
+	0xb0, 0x78, 0x84, 0x58, 0x85, 0xf2, 0x58, 0x60, 0xff, 0x10, 0xac, 0x10, 0xbb, 0x96, 0x60, 0x81,
+	0x13, 0xc2, 0xd0, 0x38, 0x27, 0xa9, 0x15, 0xdb, 0xb8, 0x20, 0xd6, 0xe3, 0x3c, 0x37, 0x5a, 0x3e,
+	0x99, 0x72, 0xee, 0x9a, 0xa8, 0xa0, 0x3d, 0xa5, 0x2e, 0x7e, 0x75, 0x26, 0xc1, 0x2a, 0x58, 0x3e,
+	0x42, 0xef, 0x69, 0x41, 0xcf, 0x49, 0xcc, 0xd9, 0x84, 0xc8, 0x7a, 0x8f, 0x2a, 0x78, 0x05, 0xee,
+	0x5d, 0xfc, 0xad, 0xf9, 0xfd, 0x67, 0xa0, 0x6d, 0xd3, 0x2f, 0x39, 0x72, 0xa7, 0xdf, 0xbc, 0xb0,
+	0xa1, 0x1d, 0x5e, 0x8d, 0x73, 0x62, 0xb6, 0x04, 0x4c, 0xc0, 0x80, 0x23, 0x15, 0xfc, 0xf0, 0xc0,
+	0xe2, 0x89, 0x76, 0x63, 0x81, 0xfc, 0x7d, 0xb0, 0x64, 0xc9, 0xb0, 0x40, 0x37, 0x48, 0xe8, 0xdd,
+	0xd2, 0x51, 0x98, 0x5c, 0xfa, 0x7d, 0xb0, 0x56, 0xa7, 0x69, 0x4c, 0xd3, 0x04, 0x13, 0x9a, 0x53,
+	0x96, 0x39, 0xb6, 0xd6, 0xf5, 0x6c, 0xcb, 0x58, 0xe0, 0x1e, 0x4d, 0x63, 0x13, 0x68, 0x19, 0x0f,
+	0xc1, 0x8a, 0x63, 0x3c, 0xcd, 0x39, 0x97, 0x8e, 0x6f, 0xe1, 0x7a, 0xbe, 0x25, 0xc3, 0xb7, 0x57,
+	0x87, 0xd9, 0xbb, 0x6e, 0x4f, 0x4f, 0x5d, 0x04, 0x9f, 0x5b, 0x60, 0xd5, 0x78, 0x07, 0x4d, 0x05,
+	0x1f, 0xd7, 0x05, 0xec, 0x9f, 0x83, 0xff, 0x5d, 0x0d, 0xeb, 0x34, 0xdc, 0xd9, 0x7e, 0x0b, 0x67,
+	0xb5, 0x8a, 0x6e, 0x05, 0x78, 0x29, 0xcf, 0xa1, 0xe5, 0xd8, 0x65, 0x55, 0x71, 0x35, 0x62, 0xd0,
+	0xe8, 0xf9, 0x2f, 0xc1, 0xba, 0xb3, 0x93, 0x53, 0x89, 0xb0, 0x36, 0x7e, 0x3f, 0x89, 0x6b, 0x2e,
+	0x78, 0xcf, 0xc6, 0x5e, 0x7b, 0x33, 0x0b, 0xf3, 0xdd, 0x4c, 0xf0, 0xdd, 0x03, 0xe0, 0xa4, 0xa9,
+	0xa8, 0x3f, 0x2c, 0xc8, 0x7f, 0xbe, 0x72, 0x3e, 0x79, 0xa0, 0x6d, 0x4e, 0x7b, 0x2c, 0x08, 0x4b,
+	0xfd, 0xe7, 0x60, 0xd9, 0x1e, 0x57, 0xd5, 0xfe, 0x0d, 0x9a, 0xc6, 0xb6, 0x9a, 0xa6, 0xf9, 0x5b,
+	0x6d, 0x53, 0x6f, 0x17, 0xf4, 0x89, 0xc4, 0x84, 0x95, 0xf5, 0x3b, 0x36, 0x5b, 0xc0, 0x9b, 0x3f,
+	0xbb, 0x97, 0xbe, 0x8c, 0xad, 0x79, 0x5e, 0xc6, 0xde, 0x57, 0x0f, 0x04, 0x98, 0x17, 0xf0, 0xea,
+	0x79, 0xd4, 0xbb, 0xd5, 0x33, 0xe3, 0xab, 0x5f, 0xb3, 0xf6, 0xbd, 0x37, 0x76, 0x3e, 0xc1, 0x8c,
+	0xe7, 0x88, 0x65, 0x90, 0xcb, 0x2c, 0xcc, 0x08, 0xd3, 0x9a, 0x6e, 0x5e, 0x09, 0xaa, 0x66, 0x0d,
+	0xc3, 0xa7, 0xe6, 0xf3, 0xa1, 0xb5, 0xb0, 0xdf, 0xed, 0x7e, 0x6c, 0x6d, 0xed, 0x1b, 0xb2, 0x6e,
+	0xaa, 0xa0, 0x31, 0x6b, 0x6b, 0xd8, 0x81, 0xb1, 0x86, 0x7d, 0x71, 0x80, 0x51, 0x37, 0x55, 0xa3,
+	0x06, 0x30, 0x1a, 0x76, 0x46, 0x06, 0xf0, 0xad, 0x15, 0x98, 0xbf, 0x51, 0xd4, 0x4d, 0x55, 0x14,
+	0x35, 0x90, 0x28, 0x1a, 0x76, 0xa2, 0xc8, 0x80, 0xc6, 0xff, 0xe9, 0xdd, 0x75, 0x7e, 0x06, 0x00,
+	0x00, 0xff, 0xff, 0xa4, 0x8e, 0xbe, 0xfa, 0xa9, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/click_location.pb.go b/googleapis/ads/googleads/v3/common/click_location.pb.go
new file mode 100644
index 0000000..a99e8c2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/click_location.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/click_location.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Location criteria associated with a click.
+type ClickLocation struct {
+	// The city location criterion associated with the impression.
+	City *wrappers.StringValue `protobuf:"bytes,1,opt,name=city,proto3" json:"city,omitempty"`
+	// The country location criterion associated with the impression.
+	Country *wrappers.StringValue `protobuf:"bytes,2,opt,name=country,proto3" json:"country,omitempty"`
+	// The metro location criterion associated with the impression.
+	Metro *wrappers.StringValue `protobuf:"bytes,3,opt,name=metro,proto3" json:"metro,omitempty"`
+	// The most specific location criterion associated with the impression.
+	MostSpecific *wrappers.StringValue `protobuf:"bytes,4,opt,name=most_specific,json=mostSpecific,proto3" json:"most_specific,omitempty"`
+	// The region location criterion associated with the impression.
+	Region               *wrappers.StringValue `protobuf:"bytes,5,opt,name=region,proto3" json:"region,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ClickLocation) Reset()         { *m = ClickLocation{} }
+func (m *ClickLocation) String() string { return proto.CompactTextString(m) }
+func (*ClickLocation) ProtoMessage()    {}
+func (*ClickLocation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_24c993db9da99d67, []int{0}
+}
+
+func (m *ClickLocation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClickLocation.Unmarshal(m, b)
+}
+func (m *ClickLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClickLocation.Marshal(b, m, deterministic)
+}
+func (m *ClickLocation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClickLocation.Merge(m, src)
+}
+func (m *ClickLocation) XXX_Size() int {
+	return xxx_messageInfo_ClickLocation.Size(m)
+}
+func (m *ClickLocation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClickLocation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClickLocation proto.InternalMessageInfo
+
+func (m *ClickLocation) GetCity() *wrappers.StringValue {
+	if m != nil {
+		return m.City
+	}
+	return nil
+}
+
+func (m *ClickLocation) GetCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.Country
+	}
+	return nil
+}
+
+func (m *ClickLocation) GetMetro() *wrappers.StringValue {
+	if m != nil {
+		return m.Metro
+	}
+	return nil
+}
+
+func (m *ClickLocation) GetMostSpecific() *wrappers.StringValue {
+	if m != nil {
+		return m.MostSpecific
+	}
+	return nil
+}
+
+func (m *ClickLocation) GetRegion() *wrappers.StringValue {
+	if m != nil {
+		return m.Region
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ClickLocation)(nil), "google.ads.googleads.v3.common.ClickLocation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/click_location.proto", fileDescriptor_24c993db9da99d67)
+}
+
+var fileDescriptor_24c993db9da99d67 = []byte{
+	// 352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xbd, 0x6a, 0xf3, 0x30,
+	0x14, 0x86, 0xb1, 0xf3, 0xf3, 0x81, 0xbe, 0x66, 0xf1, 0x64, 0x42, 0x08, 0x25, 0x53, 0x27, 0xa9,
+	0xc4, 0xa5, 0x83, 0x3a, 0x39, 0x29, 0x64, 0xe9, 0x10, 0x1a, 0xf0, 0x50, 0x0c, 0xc1, 0x91, 0x1d,
+	0x21, 0x6a, 0xeb, 0x18, 0x49, 0x49, 0xc9, 0xed, 0x74, 0xe8, 0xd0, 0x4b, 0xe9, 0xa5, 0x14, 0x7a,
+	0x0f, 0xc5, 0x96, 0x1d, 0xe8, 0xd0, 0xe2, 0xc9, 0x07, 0xeb, 0x79, 0xde, 0xd7, 0x58, 0x07, 0x05,
+	0x1c, 0x80, 0xe7, 0x19, 0x49, 0x52, 0x4d, 0xec, 0x58, 0x4d, 0xc7, 0x80, 0x30, 0x28, 0x0a, 0x90,
+	0x84, 0xe5, 0x82, 0x3d, 0x6f, 0x73, 0x60, 0x89, 0x11, 0x20, 0x71, 0xa9, 0xc0, 0x80, 0x37, 0xb5,
+	0x24, 0x4e, 0x52, 0x8d, 0xcf, 0x12, 0x3e, 0x06, 0xd8, 0x4a, 0xe3, 0xe6, 0x9c, 0xd4, 0xf4, 0xee,
+	0xb0, 0x27, 0x2f, 0x2a, 0x29, 0xcb, 0x4c, 0x69, 0xeb, 0x8f, 0x27, 0x6d, 0x69, 0x29, 0x48, 0x22,
+	0x25, 0x98, 0x3a, 0xbc, 0x39, 0x9d, 0xbd, 0xb9, 0x68, 0xb4, 0xac, 0x6a, 0x1f, 0x9a, 0x56, 0xef,
+	0x1a, 0xf5, 0x99, 0x30, 0x27, 0xdf, 0xb9, 0x74, 0xae, 0xfe, 0xcf, 0x27, 0x4d, 0x27, 0x6e, 0xe3,
+	0xf1, 0xc6, 0x28, 0x21, 0x79, 0x94, 0xe4, 0x87, 0xec, 0xb1, 0x26, 0xbd, 0x5b, 0xf4, 0x8f, 0xc1,
+	0x41, 0x1a, 0x75, 0xf2, 0xdd, 0x0e, 0x52, 0x0b, 0x7b, 0x73, 0x34, 0x28, 0x32, 0xa3, 0xc0, 0xef,
+	0x75, 0xb0, 0x2c, 0xea, 0x85, 0x68, 0x54, 0x80, 0x36, 0x5b, 0x5d, 0x66, 0x4c, 0xec, 0x05, 0xf3,
+	0xfb, 0x1d, 0xdc, 0x8b, 0x4a, 0xd9, 0x34, 0x86, 0x77, 0x83, 0x86, 0x2a, 0xe3, 0x02, 0xa4, 0x3f,
+	0xe8, 0xe0, 0x36, 0xec, 0xe2, 0xcb, 0x41, 0x33, 0x06, 0x05, 0xfe, 0xfb, 0x36, 0x16, 0xde, 0x8f,
+	0x9f, 0xb9, 0xae, 0x12, 0xd7, 0xce, 0xd3, 0x7d, 0x63, 0x71, 0xc8, 0x13, 0xc9, 0x31, 0x28, 0x4e,
+	0x78, 0x26, 0xeb, 0xbe, 0x76, 0x11, 0x4a, 0xa1, 0x7f, 0xdb, 0x8b, 0x3b, 0xfb, 0x78, 0x75, 0x7b,
+	0xab, 0x30, 0x7c, 0x77, 0xa7, 0x2b, 0x1b, 0x16, 0xa6, 0x1a, 0xdb, 0xb1, 0x9a, 0xa2, 0x00, 0x2f,
+	0x6b, 0xec, 0xa3, 0x05, 0xe2, 0x30, 0xd5, 0xf1, 0x19, 0x88, 0xa3, 0x20, 0xb6, 0xc0, 0xa7, 0x3b,
+	0xb3, 0x6f, 0x29, 0x0d, 0x53, 0x4d, 0xe9, 0x19, 0xa1, 0x34, 0x0a, 0x28, 0xb5, 0xd0, 0x6e, 0x58,
+	0x7f, 0x5d, 0xf0, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xd9, 0xfd, 0x93, 0xb4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/criteria.pb.go b/googleapis/ads/googleads/v3/common/criteria.pb.go
new file mode 100644
index 0000000..8ff25ae
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/criteria.pb.go
@@ -0,0 +1,3050 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/criteria.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A keyword criterion.
+type KeywordInfo struct {
+	// The text of the keyword (at most 80 characters and 10 words).
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The match type of the keyword.
+	MatchType            enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *KeywordInfo) Reset()         { *m = KeywordInfo{} }
+func (m *KeywordInfo) String() string { return proto.CompactTextString(m) }
+func (*KeywordInfo) ProtoMessage()    {}
+func (*KeywordInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{0}
+}
+
+func (m *KeywordInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordInfo.Unmarshal(m, b)
+}
+func (m *KeywordInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordInfo.Marshal(b, m, deterministic)
+}
+func (m *KeywordInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordInfo.Merge(m, src)
+}
+func (m *KeywordInfo) XXX_Size() int {
+	return xxx_messageInfo_KeywordInfo.Size(m)
+}
+func (m *KeywordInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordInfo proto.InternalMessageInfo
+
+func (m *KeywordInfo) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordInfo) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+// A placement criterion. This can be used to modify bids for sites when
+// targeting the content network.
+type PlacementInfo struct {
+	// URL of the placement.
+	//
+	// For example, "http://www.domain.com".
+	Url                  *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PlacementInfo) Reset()         { *m = PlacementInfo{} }
+func (m *PlacementInfo) String() string { return proto.CompactTextString(m) }
+func (*PlacementInfo) ProtoMessage()    {}
+func (*PlacementInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{1}
+}
+
+func (m *PlacementInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlacementInfo.Unmarshal(m, b)
+}
+func (m *PlacementInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlacementInfo.Marshal(b, m, deterministic)
+}
+func (m *PlacementInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlacementInfo.Merge(m, src)
+}
+func (m *PlacementInfo) XXX_Size() int {
+	return xxx_messageInfo_PlacementInfo.Size(m)
+}
+func (m *PlacementInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlacementInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlacementInfo proto.InternalMessageInfo
+
+func (m *PlacementInfo) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+// A mobile app category criterion.
+type MobileAppCategoryInfo struct {
+	// The mobile app category constant resource name.
+	MobileAppCategoryConstant *wrappers.StringValue `protobuf:"bytes,1,opt,name=mobile_app_category_constant,json=mobileAppCategoryConstant,proto3" json:"mobile_app_category_constant,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{}              `json:"-"`
+	XXX_unrecognized          []byte                `json:"-"`
+	XXX_sizecache             int32                 `json:"-"`
+}
+
+func (m *MobileAppCategoryInfo) Reset()         { *m = MobileAppCategoryInfo{} }
+func (m *MobileAppCategoryInfo) String() string { return proto.CompactTextString(m) }
+func (*MobileAppCategoryInfo) ProtoMessage()    {}
+func (*MobileAppCategoryInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{2}
+}
+
+func (m *MobileAppCategoryInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileAppCategoryInfo.Unmarshal(m, b)
+}
+func (m *MobileAppCategoryInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileAppCategoryInfo.Marshal(b, m, deterministic)
+}
+func (m *MobileAppCategoryInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileAppCategoryInfo.Merge(m, src)
+}
+func (m *MobileAppCategoryInfo) XXX_Size() int {
+	return xxx_messageInfo_MobileAppCategoryInfo.Size(m)
+}
+func (m *MobileAppCategoryInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileAppCategoryInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileAppCategoryInfo proto.InternalMessageInfo
+
+func (m *MobileAppCategoryInfo) GetMobileAppCategoryConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.MobileAppCategoryConstant
+	}
+	return nil
+}
+
+// A mobile application criterion.
+type MobileApplicationInfo struct {
+	// A string that uniquely identifies a mobile application to Google Ads API.
+	// The format of this string is "{platform}-{platform_native_id}", where
+	// platform is "1" for iOS apps and "2" for Android apps, and where
+	// platform_native_id is the mobile application identifier native to the
+	// corresponding platform.
+	// For iOS, this native identifier is the 9 digit string that appears at the
+	// end of an App Store URL (e.g., "476943146" for "Flood-It! 2" whose App
+	// Store link is "http://itunes.apple.com/us/app/flood-it!-2/id476943146").
+	// For Android, this native identifier is the application's package name
+	// (e.g., "com.labpixies.colordrips" for "Color Drips" given Google Play link
+	// "https://play.google.com/store/apps/details?id=com.labpixies.colordrips").
+	// A well formed app id for Google Ads API would thus be "1-476943146" for iOS
+	// and "2-com.labpixies.colordrips" for Android.
+	// This field is required and must be set in CREATE operations.
+	AppId *wrappers.StringValue `protobuf:"bytes,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// Name of this mobile application.
+	Name                 *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MobileApplicationInfo) Reset()         { *m = MobileApplicationInfo{} }
+func (m *MobileApplicationInfo) String() string { return proto.CompactTextString(m) }
+func (*MobileApplicationInfo) ProtoMessage()    {}
+func (*MobileApplicationInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{3}
+}
+
+func (m *MobileApplicationInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileApplicationInfo.Unmarshal(m, b)
+}
+func (m *MobileApplicationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileApplicationInfo.Marshal(b, m, deterministic)
+}
+func (m *MobileApplicationInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileApplicationInfo.Merge(m, src)
+}
+func (m *MobileApplicationInfo) XXX_Size() int {
+	return xxx_messageInfo_MobileApplicationInfo.Size(m)
+}
+func (m *MobileApplicationInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileApplicationInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileApplicationInfo proto.InternalMessageInfo
+
+func (m *MobileApplicationInfo) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *MobileApplicationInfo) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+// A location criterion.
+type LocationInfo struct {
+	// The geo target constant resource name.
+	GeoTargetConstant    *wrappers.StringValue `protobuf:"bytes,1,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LocationInfo) Reset()         { *m = LocationInfo{} }
+func (m *LocationInfo) String() string { return proto.CompactTextString(m) }
+func (*LocationInfo) ProtoMessage()    {}
+func (*LocationInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{4}
+}
+
+func (m *LocationInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationInfo.Unmarshal(m, b)
+}
+func (m *LocationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationInfo.Marshal(b, m, deterministic)
+}
+func (m *LocationInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationInfo.Merge(m, src)
+}
+func (m *LocationInfo) XXX_Size() int {
+	return xxx_messageInfo_LocationInfo.Size(m)
+}
+func (m *LocationInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationInfo proto.InternalMessageInfo
+
+func (m *LocationInfo) GetGeoTargetConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+// A device criterion.
+type DeviceInfo struct {
+	// Type of the device.
+	Type                 enums.DeviceEnum_Device `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.DeviceEnum_Device" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *DeviceInfo) Reset()         { *m = DeviceInfo{} }
+func (m *DeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*DeviceInfo) ProtoMessage()    {}
+func (*DeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{5}
+}
+
+func (m *DeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceInfo.Unmarshal(m, b)
+}
+func (m *DeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceInfo.Marshal(b, m, deterministic)
+}
+func (m *DeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceInfo.Merge(m, src)
+}
+func (m *DeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_DeviceInfo.Size(m)
+}
+func (m *DeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceInfo proto.InternalMessageInfo
+
+func (m *DeviceInfo) GetType() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.Type
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+// A preferred content criterion.
+type PreferredContentInfo struct {
+	// Type of the preferred content.
+	Type                 enums.PreferredContentTypeEnum_PreferredContentType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.PreferredContentTypeEnum_PreferredContentType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *PreferredContentInfo) Reset()         { *m = PreferredContentInfo{} }
+func (m *PreferredContentInfo) String() string { return proto.CompactTextString(m) }
+func (*PreferredContentInfo) ProtoMessage()    {}
+func (*PreferredContentInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{6}
+}
+
+func (m *PreferredContentInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PreferredContentInfo.Unmarshal(m, b)
+}
+func (m *PreferredContentInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PreferredContentInfo.Marshal(b, m, deterministic)
+}
+func (m *PreferredContentInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PreferredContentInfo.Merge(m, src)
+}
+func (m *PreferredContentInfo) XXX_Size() int {
+	return xxx_messageInfo_PreferredContentInfo.Size(m)
+}
+func (m *PreferredContentInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PreferredContentInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PreferredContentInfo proto.InternalMessageInfo
+
+func (m *PreferredContentInfo) GetType() enums.PreferredContentTypeEnum_PreferredContentType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.PreferredContentTypeEnum_UNSPECIFIED
+}
+
+// A listing group criterion.
+type ListingGroupInfo struct {
+	// Type of the listing group.
+	Type enums.ListingGroupTypeEnum_ListingGroupType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.ListingGroupTypeEnum_ListingGroupType" json:"type,omitempty"`
+	// Dimension value with which this listing group is refining its parent.
+	// Undefined for the root group.
+	CaseValue *ListingDimensionInfo `protobuf:"bytes,2,opt,name=case_value,json=caseValue,proto3" json:"case_value,omitempty"`
+	// Resource name of ad group criterion which is the parent listing group
+	// subdivision. Null for the root group.
+	ParentAdGroupCriterion *wrappers.StringValue `protobuf:"bytes,3,opt,name=parent_ad_group_criterion,json=parentAdGroupCriterion,proto3" json:"parent_ad_group_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}              `json:"-"`
+	XXX_unrecognized       []byte                `json:"-"`
+	XXX_sizecache          int32                 `json:"-"`
+}
+
+func (m *ListingGroupInfo) Reset()         { *m = ListingGroupInfo{} }
+func (m *ListingGroupInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingGroupInfo) ProtoMessage()    {}
+func (*ListingGroupInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{7}
+}
+
+func (m *ListingGroupInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingGroupInfo.Unmarshal(m, b)
+}
+func (m *ListingGroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingGroupInfo.Marshal(b, m, deterministic)
+}
+func (m *ListingGroupInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingGroupInfo.Merge(m, src)
+}
+func (m *ListingGroupInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingGroupInfo.Size(m)
+}
+func (m *ListingGroupInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingGroupInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingGroupInfo proto.InternalMessageInfo
+
+func (m *ListingGroupInfo) GetType() enums.ListingGroupTypeEnum_ListingGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ListingGroupTypeEnum_UNSPECIFIED
+}
+
+func (m *ListingGroupInfo) GetCaseValue() *ListingDimensionInfo {
+	if m != nil {
+		return m.CaseValue
+	}
+	return nil
+}
+
+func (m *ListingGroupInfo) GetParentAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.ParentAdGroupCriterion
+	}
+	return nil
+}
+
+// A listing scope criterion.
+type ListingScopeInfo struct {
+	// Scope of the campaign criterion.
+	Dimensions           []*ListingDimensionInfo `protobuf:"bytes,2,rep,name=dimensions,proto3" json:"dimensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *ListingScopeInfo) Reset()         { *m = ListingScopeInfo{} }
+func (m *ListingScopeInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingScopeInfo) ProtoMessage()    {}
+func (*ListingScopeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{8}
+}
+
+func (m *ListingScopeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingScopeInfo.Unmarshal(m, b)
+}
+func (m *ListingScopeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingScopeInfo.Marshal(b, m, deterministic)
+}
+func (m *ListingScopeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingScopeInfo.Merge(m, src)
+}
+func (m *ListingScopeInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingScopeInfo.Size(m)
+}
+func (m *ListingScopeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingScopeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingScopeInfo proto.InternalMessageInfo
+
+func (m *ListingScopeInfo) GetDimensions() []*ListingDimensionInfo {
+	if m != nil {
+		return m.Dimensions
+	}
+	return nil
+}
+
+// Listing dimensions for listing group criterion.
+type ListingDimensionInfo struct {
+	// Dimension of one of the types below is always present.
+	//
+	// Types that are valid to be assigned to Dimension:
+	//	*ListingDimensionInfo_HotelId
+	//	*ListingDimensionInfo_HotelClass
+	//	*ListingDimensionInfo_HotelCountryRegion
+	//	*ListingDimensionInfo_HotelState
+	//	*ListingDimensionInfo_HotelCity
+	//	*ListingDimensionInfo_ProductBiddingCategory
+	//	*ListingDimensionInfo_ProductBrand
+	//	*ListingDimensionInfo_ProductChannel
+	//	*ListingDimensionInfo_ProductChannelExclusivity
+	//	*ListingDimensionInfo_ProductCondition
+	//	*ListingDimensionInfo_ProductCustomAttribute
+	//	*ListingDimensionInfo_ProductItemId
+	//	*ListingDimensionInfo_ProductType
+	//	*ListingDimensionInfo_UnknownListingDimension
+	Dimension            isListingDimensionInfo_Dimension `protobuf_oneof:"dimension"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *ListingDimensionInfo) Reset()         { *m = ListingDimensionInfo{} }
+func (m *ListingDimensionInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingDimensionInfo) ProtoMessage()    {}
+func (*ListingDimensionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{9}
+}
+
+func (m *ListingDimensionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingDimensionInfo.Unmarshal(m, b)
+}
+func (m *ListingDimensionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingDimensionInfo.Marshal(b, m, deterministic)
+}
+func (m *ListingDimensionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingDimensionInfo.Merge(m, src)
+}
+func (m *ListingDimensionInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingDimensionInfo.Size(m)
+}
+func (m *ListingDimensionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingDimensionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingDimensionInfo proto.InternalMessageInfo
+
+type isListingDimensionInfo_Dimension interface {
+	isListingDimensionInfo_Dimension()
+}
+
+type ListingDimensionInfo_HotelId struct {
+	HotelId *HotelIdInfo `protobuf:"bytes,2,opt,name=hotel_id,json=hotelId,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelClass struct {
+	HotelClass *HotelClassInfo `protobuf:"bytes,3,opt,name=hotel_class,json=hotelClass,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelCountryRegion struct {
+	HotelCountryRegion *HotelCountryRegionInfo `protobuf:"bytes,4,opt,name=hotel_country_region,json=hotelCountryRegion,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelState struct {
+	HotelState *HotelStateInfo `protobuf:"bytes,5,opt,name=hotel_state,json=hotelState,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelCity struct {
+	HotelCity *HotelCityInfo `protobuf:"bytes,6,opt,name=hotel_city,json=hotelCity,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductBiddingCategory struct {
+	ProductBiddingCategory *ProductBiddingCategoryInfo `protobuf:"bytes,13,opt,name=product_bidding_category,json=productBiddingCategory,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductBrand struct {
+	ProductBrand *ProductBrandInfo `protobuf:"bytes,15,opt,name=product_brand,json=productBrand,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductChannel struct {
+	ProductChannel *ProductChannelInfo `protobuf:"bytes,8,opt,name=product_channel,json=productChannel,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductChannelExclusivity struct {
+	ProductChannelExclusivity *ProductChannelExclusivityInfo `protobuf:"bytes,9,opt,name=product_channel_exclusivity,json=productChannelExclusivity,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductCondition struct {
+	ProductCondition *ProductConditionInfo `protobuf:"bytes,10,opt,name=product_condition,json=productCondition,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductCustomAttribute struct {
+	ProductCustomAttribute *ProductCustomAttributeInfo `protobuf:"bytes,16,opt,name=product_custom_attribute,json=productCustomAttribute,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductItemId struct {
+	ProductItemId *ProductItemIdInfo `protobuf:"bytes,11,opt,name=product_item_id,json=productItemId,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductType struct {
+	ProductType *ProductTypeInfo `protobuf:"bytes,12,opt,name=product_type,json=productType,proto3,oneof"`
+}
+
+type ListingDimensionInfo_UnknownListingDimension struct {
+	UnknownListingDimension *UnknownListingDimensionInfo `protobuf:"bytes,14,opt,name=unknown_listing_dimension,json=unknownListingDimension,proto3,oneof"`
+}
+
+func (*ListingDimensionInfo_HotelId) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelClass) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelCountryRegion) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelState) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelCity) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductBiddingCategory) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductBrand) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductChannel) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductChannelExclusivity) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductCondition) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductCustomAttribute) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductItemId) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductType) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_UnknownListingDimension) isListingDimensionInfo_Dimension() {}
+
+func (m *ListingDimensionInfo) GetDimension() isListingDimensionInfo_Dimension {
+	if m != nil {
+		return m.Dimension
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelId() *HotelIdInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelId); ok {
+		return x.HotelId
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelClass() *HotelClassInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelClass); ok {
+		return x.HotelClass
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelCountryRegion() *HotelCountryRegionInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelCountryRegion); ok {
+		return x.HotelCountryRegion
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelState() *HotelStateInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelState); ok {
+		return x.HotelState
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelCity() *HotelCityInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelCity); ok {
+		return x.HotelCity
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductBiddingCategory() *ProductBiddingCategoryInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductBiddingCategory); ok {
+		return x.ProductBiddingCategory
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductBrand() *ProductBrandInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductBrand); ok {
+		return x.ProductBrand
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductChannel() *ProductChannelInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductChannel); ok {
+		return x.ProductChannel
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductChannelExclusivity() *ProductChannelExclusivityInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductChannelExclusivity); ok {
+		return x.ProductChannelExclusivity
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductCondition() *ProductConditionInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductCondition); ok {
+		return x.ProductCondition
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductCustomAttribute() *ProductCustomAttributeInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductCustomAttribute); ok {
+		return x.ProductCustomAttribute
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductItemId() *ProductItemIdInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductItemId); ok {
+		return x.ProductItemId
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductType() *ProductTypeInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductType); ok {
+		return x.ProductType
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetUnknownListingDimension() *UnknownListingDimensionInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_UnknownListingDimension); ok {
+		return x.UnknownListingDimension
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ListingDimensionInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ListingDimensionInfo_HotelId)(nil),
+		(*ListingDimensionInfo_HotelClass)(nil),
+		(*ListingDimensionInfo_HotelCountryRegion)(nil),
+		(*ListingDimensionInfo_HotelState)(nil),
+		(*ListingDimensionInfo_HotelCity)(nil),
+		(*ListingDimensionInfo_ProductBiddingCategory)(nil),
+		(*ListingDimensionInfo_ProductBrand)(nil),
+		(*ListingDimensionInfo_ProductChannel)(nil),
+		(*ListingDimensionInfo_ProductChannelExclusivity)(nil),
+		(*ListingDimensionInfo_ProductCondition)(nil),
+		(*ListingDimensionInfo_ProductCustomAttribute)(nil),
+		(*ListingDimensionInfo_ProductItemId)(nil),
+		(*ListingDimensionInfo_ProductType)(nil),
+		(*ListingDimensionInfo_UnknownListingDimension)(nil),
+	}
+}
+
+// Advertiser-specific hotel ID.
+type HotelIdInfo struct {
+	// String value of the hotel ID.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelIdInfo) Reset()         { *m = HotelIdInfo{} }
+func (m *HotelIdInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelIdInfo) ProtoMessage()    {}
+func (*HotelIdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{10}
+}
+
+func (m *HotelIdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelIdInfo.Unmarshal(m, b)
+}
+func (m *HotelIdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelIdInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelIdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelIdInfo.Merge(m, src)
+}
+func (m *HotelIdInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelIdInfo.Size(m)
+}
+func (m *HotelIdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelIdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelIdInfo proto.InternalMessageInfo
+
+func (m *HotelIdInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Class of the hotel as a number of stars 1 to 5.
+type HotelClassInfo struct {
+	// Long value of the hotel class.
+	Value                *wrappers.Int64Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelClassInfo) Reset()         { *m = HotelClassInfo{} }
+func (m *HotelClassInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelClassInfo) ProtoMessage()    {}
+func (*HotelClassInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{11}
+}
+
+func (m *HotelClassInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelClassInfo.Unmarshal(m, b)
+}
+func (m *HotelClassInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelClassInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelClassInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelClassInfo.Merge(m, src)
+}
+func (m *HotelClassInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelClassInfo.Size(m)
+}
+func (m *HotelClassInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelClassInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelClassInfo proto.InternalMessageInfo
+
+func (m *HotelClassInfo) GetValue() *wrappers.Int64Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Country or Region the hotel is located in.
+type HotelCountryRegionInfo struct {
+	// The Geo Target Constant resource name.
+	CountryRegionCriterion *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_region_criterion,json=countryRegionCriterion,proto3" json:"country_region_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}              `json:"-"`
+	XXX_unrecognized       []byte                `json:"-"`
+	XXX_sizecache          int32                 `json:"-"`
+}
+
+func (m *HotelCountryRegionInfo) Reset()         { *m = HotelCountryRegionInfo{} }
+func (m *HotelCountryRegionInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCountryRegionInfo) ProtoMessage()    {}
+func (*HotelCountryRegionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{12}
+}
+
+func (m *HotelCountryRegionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCountryRegionInfo.Unmarshal(m, b)
+}
+func (m *HotelCountryRegionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCountryRegionInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelCountryRegionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCountryRegionInfo.Merge(m, src)
+}
+func (m *HotelCountryRegionInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCountryRegionInfo.Size(m)
+}
+func (m *HotelCountryRegionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCountryRegionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCountryRegionInfo proto.InternalMessageInfo
+
+func (m *HotelCountryRegionInfo) GetCountryRegionCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryRegionCriterion
+	}
+	return nil
+}
+
+// State the hotel is located in.
+type HotelStateInfo struct {
+	// The Geo Target Constant resource name.
+	StateCriterion       *wrappers.StringValue `protobuf:"bytes,1,opt,name=state_criterion,json=stateCriterion,proto3" json:"state_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelStateInfo) Reset()         { *m = HotelStateInfo{} }
+func (m *HotelStateInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelStateInfo) ProtoMessage()    {}
+func (*HotelStateInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{13}
+}
+
+func (m *HotelStateInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelStateInfo.Unmarshal(m, b)
+}
+func (m *HotelStateInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelStateInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelStateInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelStateInfo.Merge(m, src)
+}
+func (m *HotelStateInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelStateInfo.Size(m)
+}
+func (m *HotelStateInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelStateInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelStateInfo proto.InternalMessageInfo
+
+func (m *HotelStateInfo) GetStateCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.StateCriterion
+	}
+	return nil
+}
+
+// City the hotel is located in.
+type HotelCityInfo struct {
+	// The Geo Target Constant resource name.
+	CityCriterion        *wrappers.StringValue `protobuf:"bytes,1,opt,name=city_criterion,json=cityCriterion,proto3" json:"city_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelCityInfo) Reset()         { *m = HotelCityInfo{} }
+func (m *HotelCityInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCityInfo) ProtoMessage()    {}
+func (*HotelCityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{14}
+}
+
+func (m *HotelCityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCityInfo.Unmarshal(m, b)
+}
+func (m *HotelCityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCityInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelCityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCityInfo.Merge(m, src)
+}
+func (m *HotelCityInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCityInfo.Size(m)
+}
+func (m *HotelCityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCityInfo proto.InternalMessageInfo
+
+func (m *HotelCityInfo) GetCityCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CityCriterion
+	}
+	return nil
+}
+
+// Bidding category of a product offer.
+type ProductBiddingCategoryInfo struct {
+	// ID of the product bidding category.
+	//
+	// This ID is equivalent to the google_product_category ID as described in
+	// this article: https://support.google.com/merchants/answer/6324436
+	Id *wrappers.Int64Value `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Two-letter upper-case country code of the product bidding category. It must
+	// match the campaign.shopping_setting.sales_country field.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Level of the product bidding category.
+	Level                enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel `protobuf:"varint,3,opt,name=level,proto3,enum=google.ads.googleads.v3.enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel" json:"level,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *ProductBiddingCategoryInfo) Reset()         { *m = ProductBiddingCategoryInfo{} }
+func (m *ProductBiddingCategoryInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductBiddingCategoryInfo) ProtoMessage()    {}
+func (*ProductBiddingCategoryInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{15}
+}
+
+func (m *ProductBiddingCategoryInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductBiddingCategoryInfo.Unmarshal(m, b)
+}
+func (m *ProductBiddingCategoryInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductBiddingCategoryInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductBiddingCategoryInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductBiddingCategoryInfo.Merge(m, src)
+}
+func (m *ProductBiddingCategoryInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductBiddingCategoryInfo.Size(m)
+}
+func (m *ProductBiddingCategoryInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductBiddingCategoryInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductBiddingCategoryInfo proto.InternalMessageInfo
+
+func (m *ProductBiddingCategoryInfo) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryInfo) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryInfo) GetLevel() enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.ProductBiddingCategoryLevelEnum_UNSPECIFIED
+}
+
+// Brand of the product.
+type ProductBrandInfo struct {
+	// String value of the product brand.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ProductBrandInfo) Reset()         { *m = ProductBrandInfo{} }
+func (m *ProductBrandInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductBrandInfo) ProtoMessage()    {}
+func (*ProductBrandInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{16}
+}
+
+func (m *ProductBrandInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductBrandInfo.Unmarshal(m, b)
+}
+func (m *ProductBrandInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductBrandInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductBrandInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductBrandInfo.Merge(m, src)
+}
+func (m *ProductBrandInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductBrandInfo.Size(m)
+}
+func (m *ProductBrandInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductBrandInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductBrandInfo proto.InternalMessageInfo
+
+func (m *ProductBrandInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Locality of a product offer.
+type ProductChannelInfo struct {
+	// Value of the locality.
+	Channel              enums.ProductChannelEnum_ProductChannel `protobuf:"varint,1,opt,name=channel,proto3,enum=google.ads.googleads.v3.enums.ProductChannelEnum_ProductChannel" json:"channel,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *ProductChannelInfo) Reset()         { *m = ProductChannelInfo{} }
+func (m *ProductChannelInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelInfo) ProtoMessage()    {}
+func (*ProductChannelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{17}
+}
+
+func (m *ProductChannelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelInfo.Unmarshal(m, b)
+}
+func (m *ProductChannelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductChannelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelInfo.Merge(m, src)
+}
+func (m *ProductChannelInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelInfo.Size(m)
+}
+func (m *ProductChannelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelInfo proto.InternalMessageInfo
+
+func (m *ProductChannelInfo) GetChannel() enums.ProductChannelEnum_ProductChannel {
+	if m != nil {
+		return m.Channel
+	}
+	return enums.ProductChannelEnum_UNSPECIFIED
+}
+
+// Availability of a product offer.
+type ProductChannelExclusivityInfo struct {
+	// Value of the availability.
+	ChannelExclusivity   enums.ProductChannelExclusivityEnum_ProductChannelExclusivity `protobuf:"varint,1,opt,name=channel_exclusivity,json=channelExclusivity,proto3,enum=google.ads.googleads.v3.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity" json:"channel_exclusivity,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *ProductChannelExclusivityInfo) Reset()         { *m = ProductChannelExclusivityInfo{} }
+func (m *ProductChannelExclusivityInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelExclusivityInfo) ProtoMessage()    {}
+func (*ProductChannelExclusivityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{18}
+}
+
+func (m *ProductChannelExclusivityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Unmarshal(m, b)
+}
+func (m *ProductChannelExclusivityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductChannelExclusivityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelExclusivityInfo.Merge(m, src)
+}
+func (m *ProductChannelExclusivityInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Size(m)
+}
+func (m *ProductChannelExclusivityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelExclusivityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelExclusivityInfo proto.InternalMessageInfo
+
+func (m *ProductChannelExclusivityInfo) GetChannelExclusivity() enums.ProductChannelExclusivityEnum_ProductChannelExclusivity {
+	if m != nil {
+		return m.ChannelExclusivity
+	}
+	return enums.ProductChannelExclusivityEnum_UNSPECIFIED
+}
+
+// Condition of a product offer.
+type ProductConditionInfo struct {
+	// Value of the condition.
+	Condition            enums.ProductConditionEnum_ProductCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=google.ads.googleads.v3.enums.ProductConditionEnum_ProductCondition" json:"condition,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ProductConditionInfo) Reset()         { *m = ProductConditionInfo{} }
+func (m *ProductConditionInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductConditionInfo) ProtoMessage()    {}
+func (*ProductConditionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{19}
+}
+
+func (m *ProductConditionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductConditionInfo.Unmarshal(m, b)
+}
+func (m *ProductConditionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductConditionInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductConditionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductConditionInfo.Merge(m, src)
+}
+func (m *ProductConditionInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductConditionInfo.Size(m)
+}
+func (m *ProductConditionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductConditionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductConditionInfo proto.InternalMessageInfo
+
+func (m *ProductConditionInfo) GetCondition() enums.ProductConditionEnum_ProductCondition {
+	if m != nil {
+		return m.Condition
+	}
+	return enums.ProductConditionEnum_UNSPECIFIED
+}
+
+// Custom attribute of a product offer.
+type ProductCustomAttributeInfo struct {
+	// String value of the product custom attribute.
+	Value *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	// Indicates the index of the custom attribute.
+	Index                enums.ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex `protobuf:"varint,2,opt,name=index,proto3,enum=google.ads.googleads.v3.enums.ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex" json:"index,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *ProductCustomAttributeInfo) Reset()         { *m = ProductCustomAttributeInfo{} }
+func (m *ProductCustomAttributeInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductCustomAttributeInfo) ProtoMessage()    {}
+func (*ProductCustomAttributeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{20}
+}
+
+func (m *ProductCustomAttributeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductCustomAttributeInfo.Unmarshal(m, b)
+}
+func (m *ProductCustomAttributeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductCustomAttributeInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductCustomAttributeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductCustomAttributeInfo.Merge(m, src)
+}
+func (m *ProductCustomAttributeInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductCustomAttributeInfo.Size(m)
+}
+func (m *ProductCustomAttributeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductCustomAttributeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductCustomAttributeInfo proto.InternalMessageInfo
+
+func (m *ProductCustomAttributeInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *ProductCustomAttributeInfo) GetIndex() enums.ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex {
+	if m != nil {
+		return m.Index
+	}
+	return enums.ProductCustomAttributeIndexEnum_UNSPECIFIED
+}
+
+// Item id of a product offer.
+type ProductItemIdInfo struct {
+	// Value of the id.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ProductItemIdInfo) Reset()         { *m = ProductItemIdInfo{} }
+func (m *ProductItemIdInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductItemIdInfo) ProtoMessage()    {}
+func (*ProductItemIdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{21}
+}
+
+func (m *ProductItemIdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductItemIdInfo.Unmarshal(m, b)
+}
+func (m *ProductItemIdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductItemIdInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductItemIdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductItemIdInfo.Merge(m, src)
+}
+func (m *ProductItemIdInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductItemIdInfo.Size(m)
+}
+func (m *ProductItemIdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductItemIdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductItemIdInfo proto.InternalMessageInfo
+
+func (m *ProductItemIdInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Type of a product offer.
+type ProductTypeInfo struct {
+	// Value of the type.
+	Value *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	// Level of the type.
+	Level                enums.ProductTypeLevelEnum_ProductTypeLevel `protobuf:"varint,2,opt,name=level,proto3,enum=google.ads.googleads.v3.enums.ProductTypeLevelEnum_ProductTypeLevel" json:"level,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ProductTypeInfo) Reset()         { *m = ProductTypeInfo{} }
+func (m *ProductTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductTypeInfo) ProtoMessage()    {}
+func (*ProductTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{22}
+}
+
+func (m *ProductTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductTypeInfo.Unmarshal(m, b)
+}
+func (m *ProductTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductTypeInfo.Marshal(b, m, deterministic)
+}
+func (m *ProductTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductTypeInfo.Merge(m, src)
+}
+func (m *ProductTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductTypeInfo.Size(m)
+}
+func (m *ProductTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductTypeInfo proto.InternalMessageInfo
+
+func (m *ProductTypeInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *ProductTypeInfo) GetLevel() enums.ProductTypeLevelEnum_ProductTypeLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.ProductTypeLevelEnum_UNSPECIFIED
+}
+
+// Unknown listing dimension.
+type UnknownListingDimensionInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UnknownListingDimensionInfo) Reset()         { *m = UnknownListingDimensionInfo{} }
+func (m *UnknownListingDimensionInfo) String() string { return proto.CompactTextString(m) }
+func (*UnknownListingDimensionInfo) ProtoMessage()    {}
+func (*UnknownListingDimensionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{23}
+}
+
+func (m *UnknownListingDimensionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UnknownListingDimensionInfo.Unmarshal(m, b)
+}
+func (m *UnknownListingDimensionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UnknownListingDimensionInfo.Marshal(b, m, deterministic)
+}
+func (m *UnknownListingDimensionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UnknownListingDimensionInfo.Merge(m, src)
+}
+func (m *UnknownListingDimensionInfo) XXX_Size() int {
+	return xxx_messageInfo_UnknownListingDimensionInfo.Size(m)
+}
+func (m *UnknownListingDimensionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UnknownListingDimensionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UnknownListingDimensionInfo proto.InternalMessageInfo
+
+// Criterion for hotel date selection (default dates vs. user selected).
+type HotelDateSelectionTypeInfo struct {
+	// Type of the hotel date selection
+	Type                 enums.HotelDateSelectionTypeEnum_HotelDateSelectionType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *HotelDateSelectionTypeInfo) Reset()         { *m = HotelDateSelectionTypeInfo{} }
+func (m *HotelDateSelectionTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelDateSelectionTypeInfo) ProtoMessage()    {}
+func (*HotelDateSelectionTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{24}
+}
+
+func (m *HotelDateSelectionTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Unmarshal(m, b)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelDateSelectionTypeInfo.Merge(m, src)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Size(m)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelDateSelectionTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelDateSelectionTypeInfo proto.InternalMessageInfo
+
+func (m *HotelDateSelectionTypeInfo) GetType() enums.HotelDateSelectionTypeEnum_HotelDateSelectionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.HotelDateSelectionTypeEnum_UNSPECIFIED
+}
+
+// Criterion for number of days prior to the stay the booking is being made.
+type HotelAdvanceBookingWindowInfo struct {
+	// Low end of the number of days prior to the stay.
+	MinDays *wrappers.Int64Value `protobuf:"bytes,1,opt,name=min_days,json=minDays,proto3" json:"min_days,omitempty"`
+	// High end of the number of days prior to the stay.
+	MaxDays              *wrappers.Int64Value `protobuf:"bytes,2,opt,name=max_days,json=maxDays,proto3" json:"max_days,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelAdvanceBookingWindowInfo) Reset()         { *m = HotelAdvanceBookingWindowInfo{} }
+func (m *HotelAdvanceBookingWindowInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelAdvanceBookingWindowInfo) ProtoMessage()    {}
+func (*HotelAdvanceBookingWindowInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{25}
+}
+
+func (m *HotelAdvanceBookingWindowInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Unmarshal(m, b)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelAdvanceBookingWindowInfo.Merge(m, src)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Size(m)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelAdvanceBookingWindowInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelAdvanceBookingWindowInfo proto.InternalMessageInfo
+
+func (m *HotelAdvanceBookingWindowInfo) GetMinDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.MinDays
+	}
+	return nil
+}
+
+func (m *HotelAdvanceBookingWindowInfo) GetMaxDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.MaxDays
+	}
+	return nil
+}
+
+// Criterion for length of hotel stay in nights.
+type HotelLengthOfStayInfo struct {
+	// Low end of the number of nights in the stay.
+	MinNights *wrappers.Int64Value `protobuf:"bytes,1,opt,name=min_nights,json=minNights,proto3" json:"min_nights,omitempty"`
+	// High end of the number of nights in the stay.
+	MaxNights            *wrappers.Int64Value `protobuf:"bytes,2,opt,name=max_nights,json=maxNights,proto3" json:"max_nights,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelLengthOfStayInfo) Reset()         { *m = HotelLengthOfStayInfo{} }
+func (m *HotelLengthOfStayInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelLengthOfStayInfo) ProtoMessage()    {}
+func (*HotelLengthOfStayInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{26}
+}
+
+func (m *HotelLengthOfStayInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Unmarshal(m, b)
+}
+func (m *HotelLengthOfStayInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelLengthOfStayInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelLengthOfStayInfo.Merge(m, src)
+}
+func (m *HotelLengthOfStayInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Size(m)
+}
+func (m *HotelLengthOfStayInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelLengthOfStayInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelLengthOfStayInfo proto.InternalMessageInfo
+
+func (m *HotelLengthOfStayInfo) GetMinNights() *wrappers.Int64Value {
+	if m != nil {
+		return m.MinNights
+	}
+	return nil
+}
+
+func (m *HotelLengthOfStayInfo) GetMaxNights() *wrappers.Int64Value {
+	if m != nil {
+		return m.MaxNights
+	}
+	return nil
+}
+
+// Criterion for day of the week the booking is for.
+type HotelCheckInDayInfo struct {
+	// The day of the week.
+	DayOfWeek            enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,1,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *HotelCheckInDayInfo) Reset()         { *m = HotelCheckInDayInfo{} }
+func (m *HotelCheckInDayInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCheckInDayInfo) ProtoMessage()    {}
+func (*HotelCheckInDayInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{27}
+}
+
+func (m *HotelCheckInDayInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCheckInDayInfo.Unmarshal(m, b)
+}
+func (m *HotelCheckInDayInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCheckInDayInfo.Marshal(b, m, deterministic)
+}
+func (m *HotelCheckInDayInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCheckInDayInfo.Merge(m, src)
+}
+func (m *HotelCheckInDayInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCheckInDayInfo.Size(m)
+}
+func (m *HotelCheckInDayInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCheckInDayInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCheckInDayInfo proto.InternalMessageInfo
+
+func (m *HotelCheckInDayInfo) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+// Criterion for Interaction Type.
+type InteractionTypeInfo struct {
+	// The interaction type.
+	Type                 enums.InteractionTypeEnum_InteractionType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.InteractionTypeEnum_InteractionType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *InteractionTypeInfo) Reset()         { *m = InteractionTypeInfo{} }
+func (m *InteractionTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*InteractionTypeInfo) ProtoMessage()    {}
+func (*InteractionTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{28}
+}
+
+func (m *InteractionTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InteractionTypeInfo.Unmarshal(m, b)
+}
+func (m *InteractionTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InteractionTypeInfo.Marshal(b, m, deterministic)
+}
+func (m *InteractionTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InteractionTypeInfo.Merge(m, src)
+}
+func (m *InteractionTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_InteractionTypeInfo.Size(m)
+}
+func (m *InteractionTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_InteractionTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InteractionTypeInfo proto.InternalMessageInfo
+
+func (m *InteractionTypeInfo) GetType() enums.InteractionTypeEnum_InteractionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.InteractionTypeEnum_UNSPECIFIED
+}
+
+// Represents an AdSchedule criterion.
+//
+// AdSchedule is specified as the day of the week and a time interval
+// within which ads will be shown.
+//
+// No more than six AdSchedules can be added for the same day.
+type AdScheduleInfo struct {
+	// Minutes after the start hour at which this schedule starts.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	StartMinute enums.MinuteOfHourEnum_MinuteOfHour `protobuf:"varint,1,opt,name=start_minute,json=startMinute,proto3,enum=google.ads.googleads.v3.enums.MinuteOfHourEnum_MinuteOfHour" json:"start_minute,omitempty"`
+	// Minutes after the end hour at which this schedule ends. The schedule is
+	// exclusive of the end minute.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	EndMinute enums.MinuteOfHourEnum_MinuteOfHour `protobuf:"varint,2,opt,name=end_minute,json=endMinute,proto3,enum=google.ads.googleads.v3.enums.MinuteOfHourEnum_MinuteOfHour" json:"end_minute,omitempty"`
+	// Starting hour in 24 hour time.
+	// This field must be between 0 and 23, inclusive.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	StartHour *wrappers.Int32Value `protobuf:"bytes,3,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
+	// Ending hour in 24 hour time; 24 signifies end of the day.
+	// This field must be between 0 and 24, inclusive.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	EndHour *wrappers.Int32Value `protobuf:"bytes,4,opt,name=end_hour,json=endHour,proto3" json:"end_hour,omitempty"`
+	// Day of the week the schedule applies to.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	DayOfWeek            enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,5,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *AdScheduleInfo) Reset()         { *m = AdScheduleInfo{} }
+func (m *AdScheduleInfo) String() string { return proto.CompactTextString(m) }
+func (*AdScheduleInfo) ProtoMessage()    {}
+func (*AdScheduleInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{29}
+}
+
+func (m *AdScheduleInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdScheduleInfo.Unmarshal(m, b)
+}
+func (m *AdScheduleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdScheduleInfo.Marshal(b, m, deterministic)
+}
+func (m *AdScheduleInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdScheduleInfo.Merge(m, src)
+}
+func (m *AdScheduleInfo) XXX_Size() int {
+	return xxx_messageInfo_AdScheduleInfo.Size(m)
+}
+func (m *AdScheduleInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdScheduleInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdScheduleInfo proto.InternalMessageInfo
+
+func (m *AdScheduleInfo) GetStartMinute() enums.MinuteOfHourEnum_MinuteOfHour {
+	if m != nil {
+		return m.StartMinute
+	}
+	return enums.MinuteOfHourEnum_UNSPECIFIED
+}
+
+func (m *AdScheduleInfo) GetEndMinute() enums.MinuteOfHourEnum_MinuteOfHour {
+	if m != nil {
+		return m.EndMinute
+	}
+	return enums.MinuteOfHourEnum_UNSPECIFIED
+}
+
+func (m *AdScheduleInfo) GetStartHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.StartHour
+	}
+	return nil
+}
+
+func (m *AdScheduleInfo) GetEndHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.EndHour
+	}
+	return nil
+}
+
+func (m *AdScheduleInfo) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+// An age range criterion.
+type AgeRangeInfo struct {
+	// Type of the age range.
+	Type                 enums.AgeRangeTypeEnum_AgeRangeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.AgeRangeTypeEnum_AgeRangeType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *AgeRangeInfo) Reset()         { *m = AgeRangeInfo{} }
+func (m *AgeRangeInfo) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeInfo) ProtoMessage()    {}
+func (*AgeRangeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{30}
+}
+
+func (m *AgeRangeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeInfo.Unmarshal(m, b)
+}
+func (m *AgeRangeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeInfo.Marshal(b, m, deterministic)
+}
+func (m *AgeRangeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeInfo.Merge(m, src)
+}
+func (m *AgeRangeInfo) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeInfo.Size(m)
+}
+func (m *AgeRangeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeInfo proto.InternalMessageInfo
+
+func (m *AgeRangeInfo) GetType() enums.AgeRangeTypeEnum_AgeRangeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AgeRangeTypeEnum_UNSPECIFIED
+}
+
+// A gender criterion.
+type GenderInfo struct {
+	// Type of the gender.
+	Type                 enums.GenderTypeEnum_GenderType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.GenderTypeEnum_GenderType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *GenderInfo) Reset()         { *m = GenderInfo{} }
+func (m *GenderInfo) String() string { return proto.CompactTextString(m) }
+func (*GenderInfo) ProtoMessage()    {}
+func (*GenderInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{31}
+}
+
+func (m *GenderInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderInfo.Unmarshal(m, b)
+}
+func (m *GenderInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderInfo.Marshal(b, m, deterministic)
+}
+func (m *GenderInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderInfo.Merge(m, src)
+}
+func (m *GenderInfo) XXX_Size() int {
+	return xxx_messageInfo_GenderInfo.Size(m)
+}
+func (m *GenderInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderInfo proto.InternalMessageInfo
+
+func (m *GenderInfo) GetType() enums.GenderTypeEnum_GenderType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.GenderTypeEnum_UNSPECIFIED
+}
+
+// An income range criterion.
+type IncomeRangeInfo struct {
+	// Type of the income range.
+	Type                 enums.IncomeRangeTypeEnum_IncomeRangeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.IncomeRangeTypeEnum_IncomeRangeType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *IncomeRangeInfo) Reset()         { *m = IncomeRangeInfo{} }
+func (m *IncomeRangeInfo) String() string { return proto.CompactTextString(m) }
+func (*IncomeRangeInfo) ProtoMessage()    {}
+func (*IncomeRangeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{32}
+}
+
+func (m *IncomeRangeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IncomeRangeInfo.Unmarshal(m, b)
+}
+func (m *IncomeRangeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IncomeRangeInfo.Marshal(b, m, deterministic)
+}
+func (m *IncomeRangeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IncomeRangeInfo.Merge(m, src)
+}
+func (m *IncomeRangeInfo) XXX_Size() int {
+	return xxx_messageInfo_IncomeRangeInfo.Size(m)
+}
+func (m *IncomeRangeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_IncomeRangeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IncomeRangeInfo proto.InternalMessageInfo
+
+func (m *IncomeRangeInfo) GetType() enums.IncomeRangeTypeEnum_IncomeRangeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.IncomeRangeTypeEnum_UNSPECIFIED
+}
+
+// A parental status criterion.
+type ParentalStatusInfo struct {
+	// Type of the parental status.
+	Type                 enums.ParentalStatusTypeEnum_ParentalStatusType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.ParentalStatusTypeEnum_ParentalStatusType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *ParentalStatusInfo) Reset()         { *m = ParentalStatusInfo{} }
+func (m *ParentalStatusInfo) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusInfo) ProtoMessage()    {}
+func (*ParentalStatusInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{33}
+}
+
+func (m *ParentalStatusInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusInfo.Unmarshal(m, b)
+}
+func (m *ParentalStatusInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusInfo.Marshal(b, m, deterministic)
+}
+func (m *ParentalStatusInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusInfo.Merge(m, src)
+}
+func (m *ParentalStatusInfo) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusInfo.Size(m)
+}
+func (m *ParentalStatusInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusInfo proto.InternalMessageInfo
+
+func (m *ParentalStatusInfo) GetType() enums.ParentalStatusTypeEnum_ParentalStatusType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ParentalStatusTypeEnum_UNSPECIFIED
+}
+
+// A YouTube Video criterion.
+type YouTubeVideoInfo struct {
+	// YouTube video id as it appears on the YouTube watch page.
+	VideoId              *wrappers.StringValue `protobuf:"bytes,1,opt,name=video_id,json=videoId,proto3" json:"video_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *YouTubeVideoInfo) Reset()         { *m = YouTubeVideoInfo{} }
+func (m *YouTubeVideoInfo) String() string { return proto.CompactTextString(m) }
+func (*YouTubeVideoInfo) ProtoMessage()    {}
+func (*YouTubeVideoInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{34}
+}
+
+func (m *YouTubeVideoInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YouTubeVideoInfo.Unmarshal(m, b)
+}
+func (m *YouTubeVideoInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YouTubeVideoInfo.Marshal(b, m, deterministic)
+}
+func (m *YouTubeVideoInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YouTubeVideoInfo.Merge(m, src)
+}
+func (m *YouTubeVideoInfo) XXX_Size() int {
+	return xxx_messageInfo_YouTubeVideoInfo.Size(m)
+}
+func (m *YouTubeVideoInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_YouTubeVideoInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YouTubeVideoInfo proto.InternalMessageInfo
+
+func (m *YouTubeVideoInfo) GetVideoId() *wrappers.StringValue {
+	if m != nil {
+		return m.VideoId
+	}
+	return nil
+}
+
+// A YouTube Channel criterion.
+type YouTubeChannelInfo struct {
+	// The YouTube uploader channel id or the channel code of a YouTube channel.
+	ChannelId            *wrappers.StringValue `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *YouTubeChannelInfo) Reset()         { *m = YouTubeChannelInfo{} }
+func (m *YouTubeChannelInfo) String() string { return proto.CompactTextString(m) }
+func (*YouTubeChannelInfo) ProtoMessage()    {}
+func (*YouTubeChannelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{35}
+}
+
+func (m *YouTubeChannelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YouTubeChannelInfo.Unmarshal(m, b)
+}
+func (m *YouTubeChannelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YouTubeChannelInfo.Marshal(b, m, deterministic)
+}
+func (m *YouTubeChannelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YouTubeChannelInfo.Merge(m, src)
+}
+func (m *YouTubeChannelInfo) XXX_Size() int {
+	return xxx_messageInfo_YouTubeChannelInfo.Size(m)
+}
+func (m *YouTubeChannelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_YouTubeChannelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YouTubeChannelInfo proto.InternalMessageInfo
+
+func (m *YouTubeChannelInfo) GetChannelId() *wrappers.StringValue {
+	if m != nil {
+		return m.ChannelId
+	}
+	return nil
+}
+
+// A User List criterion. Represents a user list that is defined by the
+// advertiser to be targeted.
+type UserListInfo struct {
+	// The User List resource name.
+	UserList             *wrappers.StringValue `protobuf:"bytes,1,opt,name=user_list,json=userList,proto3" json:"user_list,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserListInfo) Reset()         { *m = UserListInfo{} }
+func (m *UserListInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListInfo) ProtoMessage()    {}
+func (*UserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{36}
+}
+
+func (m *UserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListInfo.Unmarshal(m, b)
+}
+func (m *UserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListInfo.Merge(m, src)
+}
+func (m *UserListInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListInfo.Size(m)
+}
+func (m *UserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListInfo proto.InternalMessageInfo
+
+func (m *UserListInfo) GetUserList() *wrappers.StringValue {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+// A Proximity criterion. The geo point and radius determine what geographical
+// area is included. The address is a description of the geo point that does
+// not affect ad serving.
+//
+// There are two ways to create a proximity. First, by setting an address
+// and radius. The geo point will be automatically computed. Second, by
+// setting a geo point and radius. The address is an optional label that won't
+// be validated.
+type ProximityInfo struct {
+	// Latitude and longitude.
+	GeoPoint *GeoPointInfo `protobuf:"bytes,1,opt,name=geo_point,json=geoPoint,proto3" json:"geo_point,omitempty"`
+	// The radius of the proximity.
+	Radius *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=radius,proto3" json:"radius,omitempty"`
+	// The unit of measurement of the radius. Default is KILOMETERS.
+	RadiusUnits enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits `protobuf:"varint,3,opt,name=radius_units,json=radiusUnits,proto3,enum=google.ads.googleads.v3.enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits" json:"radius_units,omitempty"`
+	// Full address.
+	Address              *AddressInfo `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *ProximityInfo) Reset()         { *m = ProximityInfo{} }
+func (m *ProximityInfo) String() string { return proto.CompactTextString(m) }
+func (*ProximityInfo) ProtoMessage()    {}
+func (*ProximityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{37}
+}
+
+func (m *ProximityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProximityInfo.Unmarshal(m, b)
+}
+func (m *ProximityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProximityInfo.Marshal(b, m, deterministic)
+}
+func (m *ProximityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProximityInfo.Merge(m, src)
+}
+func (m *ProximityInfo) XXX_Size() int {
+	return xxx_messageInfo_ProximityInfo.Size(m)
+}
+func (m *ProximityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProximityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProximityInfo proto.InternalMessageInfo
+
+func (m *ProximityInfo) GetGeoPoint() *GeoPointInfo {
+	if m != nil {
+		return m.GeoPoint
+	}
+	return nil
+}
+
+func (m *ProximityInfo) GetRadius() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Radius
+	}
+	return nil
+}
+
+func (m *ProximityInfo) GetRadiusUnits() enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits {
+	if m != nil {
+		return m.RadiusUnits
+	}
+	return enums.ProximityRadiusUnitsEnum_UNSPECIFIED
+}
+
+func (m *ProximityInfo) GetAddress() *AddressInfo {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+// Geo point for proximity criterion.
+type GeoPointInfo struct {
+	// Micro degrees for the longitude.
+	LongitudeInMicroDegrees *wrappers.Int32Value `protobuf:"bytes,1,opt,name=longitude_in_micro_degrees,json=longitudeInMicroDegrees,proto3" json:"longitude_in_micro_degrees,omitempty"`
+	// Micro degrees for the latitude.
+	LatitudeInMicroDegrees *wrappers.Int32Value `protobuf:"bytes,2,opt,name=latitude_in_micro_degrees,json=latitudeInMicroDegrees,proto3" json:"latitude_in_micro_degrees,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
+	XXX_unrecognized       []byte               `json:"-"`
+	XXX_sizecache          int32                `json:"-"`
+}
+
+func (m *GeoPointInfo) Reset()         { *m = GeoPointInfo{} }
+func (m *GeoPointInfo) String() string { return proto.CompactTextString(m) }
+func (*GeoPointInfo) ProtoMessage()    {}
+func (*GeoPointInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{38}
+}
+
+func (m *GeoPointInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoPointInfo.Unmarshal(m, b)
+}
+func (m *GeoPointInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoPointInfo.Marshal(b, m, deterministic)
+}
+func (m *GeoPointInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoPointInfo.Merge(m, src)
+}
+func (m *GeoPointInfo) XXX_Size() int {
+	return xxx_messageInfo_GeoPointInfo.Size(m)
+}
+func (m *GeoPointInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoPointInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoPointInfo proto.InternalMessageInfo
+
+func (m *GeoPointInfo) GetLongitudeInMicroDegrees() *wrappers.Int32Value {
+	if m != nil {
+		return m.LongitudeInMicroDegrees
+	}
+	return nil
+}
+
+func (m *GeoPointInfo) GetLatitudeInMicroDegrees() *wrappers.Int32Value {
+	if m != nil {
+		return m.LatitudeInMicroDegrees
+	}
+	return nil
+}
+
+// Address for proximity criterion.
+type AddressInfo struct {
+	// Postal code.
+	PostalCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	// Province or state code.
+	ProvinceCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=province_code,json=provinceCode,proto3" json:"province_code,omitempty"`
+	// Country code.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Province or state name.
+	ProvinceName *wrappers.StringValue `protobuf:"bytes,4,opt,name=province_name,json=provinceName,proto3" json:"province_name,omitempty"`
+	// Street address line 1.
+	StreetAddress *wrappers.StringValue `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
+	// Street address line 2. This field is write-only. It is only used for
+	// calculating the longitude and latitude of an address when geo_point is
+	// empty.
+	StreetAddress2 *wrappers.StringValue `protobuf:"bytes,6,opt,name=street_address2,json=streetAddress2,proto3" json:"street_address2,omitempty"`
+	// Name of the city.
+	CityName             *wrappers.StringValue `protobuf:"bytes,7,opt,name=city_name,json=cityName,proto3" json:"city_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AddressInfo) Reset()         { *m = AddressInfo{} }
+func (m *AddressInfo) String() string { return proto.CompactTextString(m) }
+func (*AddressInfo) ProtoMessage()    {}
+func (*AddressInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{39}
+}
+
+func (m *AddressInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddressInfo.Unmarshal(m, b)
+}
+func (m *AddressInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddressInfo.Marshal(b, m, deterministic)
+}
+func (m *AddressInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddressInfo.Merge(m, src)
+}
+func (m *AddressInfo) XXX_Size() int {
+	return xxx_messageInfo_AddressInfo.Size(m)
+}
+func (m *AddressInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddressInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddressInfo proto.InternalMessageInfo
+
+func (m *AddressInfo) GetPostalCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PostalCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetProvinceCode() *wrappers.StringValue {
+	if m != nil {
+		return m.ProvinceCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetProvinceName() *wrappers.StringValue {
+	if m != nil {
+		return m.ProvinceName
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetStreetAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.StreetAddress
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetStreetAddress2() *wrappers.StringValue {
+	if m != nil {
+		return m.StreetAddress2
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetCityName() *wrappers.StringValue {
+	if m != nil {
+		return m.CityName
+	}
+	return nil
+}
+
+// A topic criterion. Use topics to target or exclude placements in the
+// Google Display Network based on the category into which the placement falls
+// (for example, "Pets & Animals/Pets/Dogs").
+type TopicInfo struct {
+	// The Topic Constant resource name.
+	TopicConstant *wrappers.StringValue `protobuf:"bytes,1,opt,name=topic_constant,json=topicConstant,proto3" json:"topic_constant,omitempty"`
+	// The category to target or exclude. Each subsequent element in the array
+	// describes a more specific sub-category. For example,
+	// "Pets & Animals", "Pets", "Dogs" represents the "Pets & Animals/Pets/Dogs"
+	// category.
+	Path                 []*wrappers.StringValue `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *TopicInfo) Reset()         { *m = TopicInfo{} }
+func (m *TopicInfo) String() string { return proto.CompactTextString(m) }
+func (*TopicInfo) ProtoMessage()    {}
+func (*TopicInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{40}
+}
+
+func (m *TopicInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicInfo.Unmarshal(m, b)
+}
+func (m *TopicInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicInfo.Marshal(b, m, deterministic)
+}
+func (m *TopicInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicInfo.Merge(m, src)
+}
+func (m *TopicInfo) XXX_Size() int {
+	return xxx_messageInfo_TopicInfo.Size(m)
+}
+func (m *TopicInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicInfo proto.InternalMessageInfo
+
+func (m *TopicInfo) GetTopicConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.TopicConstant
+	}
+	return nil
+}
+
+func (m *TopicInfo) GetPath() []*wrappers.StringValue {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+// A language criterion.
+type LanguageInfo struct {
+	// The language constant resource name.
+	LanguageConstant     *wrappers.StringValue `protobuf:"bytes,1,opt,name=language_constant,json=languageConstant,proto3" json:"language_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LanguageInfo) Reset()         { *m = LanguageInfo{} }
+func (m *LanguageInfo) String() string { return proto.CompactTextString(m) }
+func (*LanguageInfo) ProtoMessage()    {}
+func (*LanguageInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{41}
+}
+
+func (m *LanguageInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LanguageInfo.Unmarshal(m, b)
+}
+func (m *LanguageInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LanguageInfo.Marshal(b, m, deterministic)
+}
+func (m *LanguageInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LanguageInfo.Merge(m, src)
+}
+func (m *LanguageInfo) XXX_Size() int {
+	return xxx_messageInfo_LanguageInfo.Size(m)
+}
+func (m *LanguageInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LanguageInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LanguageInfo proto.InternalMessageInfo
+
+func (m *LanguageInfo) GetLanguageConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageConstant
+	}
+	return nil
+}
+
+// An IpBlock criterion used for IP exclusions. We allow:
+//  - IPv4 and IPv6 addresses
+//  - individual addresses (192.168.0.1)
+//  - masks for individual addresses (192.168.0.1/32)
+//  - masks for Class C networks (192.168.0.1/24)
+type IpBlockInfo struct {
+	// The IP address of this IP block.
+	IpAddress            *wrappers.StringValue `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *IpBlockInfo) Reset()         { *m = IpBlockInfo{} }
+func (m *IpBlockInfo) String() string { return proto.CompactTextString(m) }
+func (*IpBlockInfo) ProtoMessage()    {}
+func (*IpBlockInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{42}
+}
+
+func (m *IpBlockInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IpBlockInfo.Unmarshal(m, b)
+}
+func (m *IpBlockInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IpBlockInfo.Marshal(b, m, deterministic)
+}
+func (m *IpBlockInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IpBlockInfo.Merge(m, src)
+}
+func (m *IpBlockInfo) XXX_Size() int {
+	return xxx_messageInfo_IpBlockInfo.Size(m)
+}
+func (m *IpBlockInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_IpBlockInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IpBlockInfo proto.InternalMessageInfo
+
+func (m *IpBlockInfo) GetIpAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.IpAddress
+	}
+	return nil
+}
+
+// Content Label for category exclusion.
+type ContentLabelInfo struct {
+	// Content label type, required for CREATE operations.
+	Type                 enums.ContentLabelTypeEnum_ContentLabelType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.ContentLabelTypeEnum_ContentLabelType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ContentLabelInfo) Reset()         { *m = ContentLabelInfo{} }
+func (m *ContentLabelInfo) String() string { return proto.CompactTextString(m) }
+func (*ContentLabelInfo) ProtoMessage()    {}
+func (*ContentLabelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{43}
+}
+
+func (m *ContentLabelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContentLabelInfo.Unmarshal(m, b)
+}
+func (m *ContentLabelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContentLabelInfo.Marshal(b, m, deterministic)
+}
+func (m *ContentLabelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContentLabelInfo.Merge(m, src)
+}
+func (m *ContentLabelInfo) XXX_Size() int {
+	return xxx_messageInfo_ContentLabelInfo.Size(m)
+}
+func (m *ContentLabelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContentLabelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContentLabelInfo proto.InternalMessageInfo
+
+func (m *ContentLabelInfo) GetType() enums.ContentLabelTypeEnum_ContentLabelType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ContentLabelTypeEnum_UNSPECIFIED
+}
+
+// Represents a Carrier Criterion.
+type CarrierInfo struct {
+	// The Carrier constant resource name.
+	CarrierConstant      *wrappers.StringValue `protobuf:"bytes,1,opt,name=carrier_constant,json=carrierConstant,proto3" json:"carrier_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CarrierInfo) Reset()         { *m = CarrierInfo{} }
+func (m *CarrierInfo) String() string { return proto.CompactTextString(m) }
+func (*CarrierInfo) ProtoMessage()    {}
+func (*CarrierInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{44}
+}
+
+func (m *CarrierInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CarrierInfo.Unmarshal(m, b)
+}
+func (m *CarrierInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CarrierInfo.Marshal(b, m, deterministic)
+}
+func (m *CarrierInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CarrierInfo.Merge(m, src)
+}
+func (m *CarrierInfo) XXX_Size() int {
+	return xxx_messageInfo_CarrierInfo.Size(m)
+}
+func (m *CarrierInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CarrierInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CarrierInfo proto.InternalMessageInfo
+
+func (m *CarrierInfo) GetCarrierConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.CarrierConstant
+	}
+	return nil
+}
+
+// Represents a particular interest-based topic to be targeted.
+type UserInterestInfo struct {
+	// The UserInterest resource name.
+	UserInterestCategory *wrappers.StringValue `protobuf:"bytes,1,opt,name=user_interest_category,json=userInterestCategory,proto3" json:"user_interest_category,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserInterestInfo) Reset()         { *m = UserInterestInfo{} }
+func (m *UserInterestInfo) String() string { return proto.CompactTextString(m) }
+func (*UserInterestInfo) ProtoMessage()    {}
+func (*UserInterestInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{45}
+}
+
+func (m *UserInterestInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterestInfo.Unmarshal(m, b)
+}
+func (m *UserInterestInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterestInfo.Marshal(b, m, deterministic)
+}
+func (m *UserInterestInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterestInfo.Merge(m, src)
+}
+func (m *UserInterestInfo) XXX_Size() int {
+	return xxx_messageInfo_UserInterestInfo.Size(m)
+}
+func (m *UserInterestInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterestInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterestInfo proto.InternalMessageInfo
+
+func (m *UserInterestInfo) GetUserInterestCategory() *wrappers.StringValue {
+	if m != nil {
+		return m.UserInterestCategory
+	}
+	return nil
+}
+
+// Represents a criterion for targeting webpages of an advertiser's website.
+type WebpageInfo struct {
+	// The name of the criterion that is defined by this parameter. The name value
+	// will be used for identifying, sorting and filtering criteria with this type
+	// of parameters.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	CriterionName *wrappers.StringValue `protobuf:"bytes,1,opt,name=criterion_name,json=criterionName,proto3" json:"criterion_name,omitempty"`
+	// Conditions, or logical expressions, for webpage targeting. The list of
+	// webpage targeting conditions are and-ed together when evaluated
+	// for targeting.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	Conditions           []*WebpageConditionInfo `protobuf:"bytes,2,rep,name=conditions,proto3" json:"conditions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *WebpageInfo) Reset()         { *m = WebpageInfo{} }
+func (m *WebpageInfo) String() string { return proto.CompactTextString(m) }
+func (*WebpageInfo) ProtoMessage()    {}
+func (*WebpageInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{46}
+}
+
+func (m *WebpageInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WebpageInfo.Unmarshal(m, b)
+}
+func (m *WebpageInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WebpageInfo.Marshal(b, m, deterministic)
+}
+func (m *WebpageInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WebpageInfo.Merge(m, src)
+}
+func (m *WebpageInfo) XXX_Size() int {
+	return xxx_messageInfo_WebpageInfo.Size(m)
+}
+func (m *WebpageInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_WebpageInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WebpageInfo proto.InternalMessageInfo
+
+func (m *WebpageInfo) GetCriterionName() *wrappers.StringValue {
+	if m != nil {
+		return m.CriterionName
+	}
+	return nil
+}
+
+func (m *WebpageInfo) GetConditions() []*WebpageConditionInfo {
+	if m != nil {
+		return m.Conditions
+	}
+	return nil
+}
+
+// Logical expression for targeting webpages of an advertiser's website.
+type WebpageConditionInfo struct {
+	// Operand of webpage targeting condition.
+	Operand enums.WebpageConditionOperandEnum_WebpageConditionOperand `protobuf:"varint,1,opt,name=operand,proto3,enum=google.ads.googleads.v3.enums.WebpageConditionOperandEnum_WebpageConditionOperand" json:"operand,omitempty"`
+	// Operator of webpage targeting condition.
+	Operator enums.WebpageConditionOperatorEnum_WebpageConditionOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.WebpageConditionOperatorEnum_WebpageConditionOperator" json:"operator,omitempty"`
+	// Argument of webpage targeting condition.
+	Argument             *wrappers.StringValue `protobuf:"bytes,3,opt,name=argument,proto3" json:"argument,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *WebpageConditionInfo) Reset()         { *m = WebpageConditionInfo{} }
+func (m *WebpageConditionInfo) String() string { return proto.CompactTextString(m) }
+func (*WebpageConditionInfo) ProtoMessage()    {}
+func (*WebpageConditionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{47}
+}
+
+func (m *WebpageConditionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WebpageConditionInfo.Unmarshal(m, b)
+}
+func (m *WebpageConditionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WebpageConditionInfo.Marshal(b, m, deterministic)
+}
+func (m *WebpageConditionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WebpageConditionInfo.Merge(m, src)
+}
+func (m *WebpageConditionInfo) XXX_Size() int {
+	return xxx_messageInfo_WebpageConditionInfo.Size(m)
+}
+func (m *WebpageConditionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_WebpageConditionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WebpageConditionInfo proto.InternalMessageInfo
+
+func (m *WebpageConditionInfo) GetOperand() enums.WebpageConditionOperandEnum_WebpageConditionOperand {
+	if m != nil {
+		return m.Operand
+	}
+	return enums.WebpageConditionOperandEnum_UNSPECIFIED
+}
+
+func (m *WebpageConditionInfo) GetOperator() enums.WebpageConditionOperatorEnum_WebpageConditionOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.WebpageConditionOperatorEnum_UNSPECIFIED
+}
+
+func (m *WebpageConditionInfo) GetArgument() *wrappers.StringValue {
+	if m != nil {
+		return m.Argument
+	}
+	return nil
+}
+
+// Represents an operating system version to be targeted.
+type OperatingSystemVersionInfo struct {
+	// The operating system version constant resource name.
+	OperatingSystemVersionConstant *wrappers.StringValue `protobuf:"bytes,1,opt,name=operating_system_version_constant,json=operatingSystemVersionConstant,proto3" json:"operating_system_version_constant,omitempty"`
+	XXX_NoUnkeyedLiteral           struct{}              `json:"-"`
+	XXX_unrecognized               []byte                `json:"-"`
+	XXX_sizecache                  int32                 `json:"-"`
+}
+
+func (m *OperatingSystemVersionInfo) Reset()         { *m = OperatingSystemVersionInfo{} }
+func (m *OperatingSystemVersionInfo) String() string { return proto.CompactTextString(m) }
+func (*OperatingSystemVersionInfo) ProtoMessage()    {}
+func (*OperatingSystemVersionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{48}
+}
+
+func (m *OperatingSystemVersionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperatingSystemVersionInfo.Unmarshal(m, b)
+}
+func (m *OperatingSystemVersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperatingSystemVersionInfo.Marshal(b, m, deterministic)
+}
+func (m *OperatingSystemVersionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperatingSystemVersionInfo.Merge(m, src)
+}
+func (m *OperatingSystemVersionInfo) XXX_Size() int {
+	return xxx_messageInfo_OperatingSystemVersionInfo.Size(m)
+}
+func (m *OperatingSystemVersionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperatingSystemVersionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperatingSystemVersionInfo proto.InternalMessageInfo
+
+func (m *OperatingSystemVersionInfo) GetOperatingSystemVersionConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.OperatingSystemVersionConstant
+	}
+	return nil
+}
+
+// An app payment model criterion.
+type AppPaymentModelInfo struct {
+	// Type of the app payment model.
+	Type                 enums.AppPaymentModelTypeEnum_AppPaymentModelType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.AppPaymentModelTypeEnum_AppPaymentModelType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                          `json:"-"`
+	XXX_unrecognized     []byte                                            `json:"-"`
+	XXX_sizecache        int32                                             `json:"-"`
+}
+
+func (m *AppPaymentModelInfo) Reset()         { *m = AppPaymentModelInfo{} }
+func (m *AppPaymentModelInfo) String() string { return proto.CompactTextString(m) }
+func (*AppPaymentModelInfo) ProtoMessage()    {}
+func (*AppPaymentModelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{49}
+}
+
+func (m *AppPaymentModelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppPaymentModelInfo.Unmarshal(m, b)
+}
+func (m *AppPaymentModelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppPaymentModelInfo.Marshal(b, m, deterministic)
+}
+func (m *AppPaymentModelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppPaymentModelInfo.Merge(m, src)
+}
+func (m *AppPaymentModelInfo) XXX_Size() int {
+	return xxx_messageInfo_AppPaymentModelInfo.Size(m)
+}
+func (m *AppPaymentModelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppPaymentModelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppPaymentModelInfo proto.InternalMessageInfo
+
+func (m *AppPaymentModelInfo) GetType() enums.AppPaymentModelTypeEnum_AppPaymentModelType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AppPaymentModelTypeEnum_UNSPECIFIED
+}
+
+// A mobile device criterion.
+type MobileDeviceInfo struct {
+	// The mobile device constant resource name.
+	MobileDeviceConstant *wrappers.StringValue `protobuf:"bytes,1,opt,name=mobile_device_constant,json=mobileDeviceConstant,proto3" json:"mobile_device_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MobileDeviceInfo) Reset()         { *m = MobileDeviceInfo{} }
+func (m *MobileDeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*MobileDeviceInfo) ProtoMessage()    {}
+func (*MobileDeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{50}
+}
+
+func (m *MobileDeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileDeviceInfo.Unmarshal(m, b)
+}
+func (m *MobileDeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileDeviceInfo.Marshal(b, m, deterministic)
+}
+func (m *MobileDeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileDeviceInfo.Merge(m, src)
+}
+func (m *MobileDeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_MobileDeviceInfo.Size(m)
+}
+func (m *MobileDeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileDeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileDeviceInfo proto.InternalMessageInfo
+
+func (m *MobileDeviceInfo) GetMobileDeviceConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.MobileDeviceConstant
+	}
+	return nil
+}
+
+// A custom affinity criterion.
+// A criterion of this type is only targetable.
+type CustomAffinityInfo struct {
+	// The CustomInterest resource name.
+	CustomAffinity       *wrappers.StringValue `protobuf:"bytes,1,opt,name=custom_affinity,json=customAffinity,proto3" json:"custom_affinity,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomAffinityInfo) Reset()         { *m = CustomAffinityInfo{} }
+func (m *CustomAffinityInfo) String() string { return proto.CompactTextString(m) }
+func (*CustomAffinityInfo) ProtoMessage()    {}
+func (*CustomAffinityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{51}
+}
+
+func (m *CustomAffinityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomAffinityInfo.Unmarshal(m, b)
+}
+func (m *CustomAffinityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomAffinityInfo.Marshal(b, m, deterministic)
+}
+func (m *CustomAffinityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomAffinityInfo.Merge(m, src)
+}
+func (m *CustomAffinityInfo) XXX_Size() int {
+	return xxx_messageInfo_CustomAffinityInfo.Size(m)
+}
+func (m *CustomAffinityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomAffinityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomAffinityInfo proto.InternalMessageInfo
+
+func (m *CustomAffinityInfo) GetCustomAffinity() *wrappers.StringValue {
+	if m != nil {
+		return m.CustomAffinity
+	}
+	return nil
+}
+
+// A custom intent criterion.
+// A criterion of this type is only targetable.
+type CustomIntentInfo struct {
+	// The CustomInterest resource name.
+	CustomIntent         *wrappers.StringValue `protobuf:"bytes,1,opt,name=custom_intent,json=customIntent,proto3" json:"custom_intent,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomIntentInfo) Reset()         { *m = CustomIntentInfo{} }
+func (m *CustomIntentInfo) String() string { return proto.CompactTextString(m) }
+func (*CustomIntentInfo) ProtoMessage()    {}
+func (*CustomIntentInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{52}
+}
+
+func (m *CustomIntentInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomIntentInfo.Unmarshal(m, b)
+}
+func (m *CustomIntentInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomIntentInfo.Marshal(b, m, deterministic)
+}
+func (m *CustomIntentInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomIntentInfo.Merge(m, src)
+}
+func (m *CustomIntentInfo) XXX_Size() int {
+	return xxx_messageInfo_CustomIntentInfo.Size(m)
+}
+func (m *CustomIntentInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomIntentInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomIntentInfo proto.InternalMessageInfo
+
+func (m *CustomIntentInfo) GetCustomIntent() *wrappers.StringValue {
+	if m != nil {
+		return m.CustomIntent
+	}
+	return nil
+}
+
+// A radius around a list of locations specified via a feed.
+type LocationGroupInfo struct {
+	// Feed specifying locations for targeting.
+	// This is required and must be set in CREATE operations.
+	Feed *wrappers.StringValue `protobuf:"bytes,1,opt,name=feed,proto3" json:"feed,omitempty"`
+	// Geo target constant(s) restricting the scope of the geographic area within
+	// the feed. Currently only one geo target constant is allowed.
+	GeoTargetConstants []*wrappers.StringValue `protobuf:"bytes,2,rep,name=geo_target_constants,json=geoTargetConstants,proto3" json:"geo_target_constants,omitempty"`
+	// Distance in units specifying the radius around targeted locations.
+	// This is required and must be set in CREATE operations.
+	Radius *wrappers.Int64Value `protobuf:"bytes,3,opt,name=radius,proto3" json:"radius,omitempty"`
+	// Unit of the radius, miles and meters supported currently.
+	// This is required and must be set in CREATE operations.
+	RadiusUnits          enums.LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits `protobuf:"varint,4,opt,name=radius_units,json=radiusUnits,proto3,enum=google.ads.googleads.v3.enums.LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits" json:"radius_units,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                    `json:"-"`
+	XXX_unrecognized     []byte                                                      `json:"-"`
+	XXX_sizecache        int32                                                       `json:"-"`
+}
+
+func (m *LocationGroupInfo) Reset()         { *m = LocationGroupInfo{} }
+func (m *LocationGroupInfo) String() string { return proto.CompactTextString(m) }
+func (*LocationGroupInfo) ProtoMessage()    {}
+func (*LocationGroupInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1e7892fe3678dd0, []int{53}
+}
+
+func (m *LocationGroupInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationGroupInfo.Unmarshal(m, b)
+}
+func (m *LocationGroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationGroupInfo.Marshal(b, m, deterministic)
+}
+func (m *LocationGroupInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationGroupInfo.Merge(m, src)
+}
+func (m *LocationGroupInfo) XXX_Size() int {
+	return xxx_messageInfo_LocationGroupInfo.Size(m)
+}
+func (m *LocationGroupInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationGroupInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationGroupInfo proto.InternalMessageInfo
+
+func (m *LocationGroupInfo) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *LocationGroupInfo) GetGeoTargetConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstants
+	}
+	return nil
+}
+
+func (m *LocationGroupInfo) GetRadius() *wrappers.Int64Value {
+	if m != nil {
+		return m.Radius
+	}
+	return nil
+}
+
+func (m *LocationGroupInfo) GetRadiusUnits() enums.LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits {
+	if m != nil {
+		return m.RadiusUnits
+	}
+	return enums.LocationGroupRadiusUnitsEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*KeywordInfo)(nil), "google.ads.googleads.v3.common.KeywordInfo")
+	proto.RegisterType((*PlacementInfo)(nil), "google.ads.googleads.v3.common.PlacementInfo")
+	proto.RegisterType((*MobileAppCategoryInfo)(nil), "google.ads.googleads.v3.common.MobileAppCategoryInfo")
+	proto.RegisterType((*MobileApplicationInfo)(nil), "google.ads.googleads.v3.common.MobileApplicationInfo")
+	proto.RegisterType((*LocationInfo)(nil), "google.ads.googleads.v3.common.LocationInfo")
+	proto.RegisterType((*DeviceInfo)(nil), "google.ads.googleads.v3.common.DeviceInfo")
+	proto.RegisterType((*PreferredContentInfo)(nil), "google.ads.googleads.v3.common.PreferredContentInfo")
+	proto.RegisterType((*ListingGroupInfo)(nil), "google.ads.googleads.v3.common.ListingGroupInfo")
+	proto.RegisterType((*ListingScopeInfo)(nil), "google.ads.googleads.v3.common.ListingScopeInfo")
+	proto.RegisterType((*ListingDimensionInfo)(nil), "google.ads.googleads.v3.common.ListingDimensionInfo")
+	proto.RegisterType((*HotelIdInfo)(nil), "google.ads.googleads.v3.common.HotelIdInfo")
+	proto.RegisterType((*HotelClassInfo)(nil), "google.ads.googleads.v3.common.HotelClassInfo")
+	proto.RegisterType((*HotelCountryRegionInfo)(nil), "google.ads.googleads.v3.common.HotelCountryRegionInfo")
+	proto.RegisterType((*HotelStateInfo)(nil), "google.ads.googleads.v3.common.HotelStateInfo")
+	proto.RegisterType((*HotelCityInfo)(nil), "google.ads.googleads.v3.common.HotelCityInfo")
+	proto.RegisterType((*ProductBiddingCategoryInfo)(nil), "google.ads.googleads.v3.common.ProductBiddingCategoryInfo")
+	proto.RegisterType((*ProductBrandInfo)(nil), "google.ads.googleads.v3.common.ProductBrandInfo")
+	proto.RegisterType((*ProductChannelInfo)(nil), "google.ads.googleads.v3.common.ProductChannelInfo")
+	proto.RegisterType((*ProductChannelExclusivityInfo)(nil), "google.ads.googleads.v3.common.ProductChannelExclusivityInfo")
+	proto.RegisterType((*ProductConditionInfo)(nil), "google.ads.googleads.v3.common.ProductConditionInfo")
+	proto.RegisterType((*ProductCustomAttributeInfo)(nil), "google.ads.googleads.v3.common.ProductCustomAttributeInfo")
+	proto.RegisterType((*ProductItemIdInfo)(nil), "google.ads.googleads.v3.common.ProductItemIdInfo")
+	proto.RegisterType((*ProductTypeInfo)(nil), "google.ads.googleads.v3.common.ProductTypeInfo")
+	proto.RegisterType((*UnknownListingDimensionInfo)(nil), "google.ads.googleads.v3.common.UnknownListingDimensionInfo")
+	proto.RegisterType((*HotelDateSelectionTypeInfo)(nil), "google.ads.googleads.v3.common.HotelDateSelectionTypeInfo")
+	proto.RegisterType((*HotelAdvanceBookingWindowInfo)(nil), "google.ads.googleads.v3.common.HotelAdvanceBookingWindowInfo")
+	proto.RegisterType((*HotelLengthOfStayInfo)(nil), "google.ads.googleads.v3.common.HotelLengthOfStayInfo")
+	proto.RegisterType((*HotelCheckInDayInfo)(nil), "google.ads.googleads.v3.common.HotelCheckInDayInfo")
+	proto.RegisterType((*InteractionTypeInfo)(nil), "google.ads.googleads.v3.common.InteractionTypeInfo")
+	proto.RegisterType((*AdScheduleInfo)(nil), "google.ads.googleads.v3.common.AdScheduleInfo")
+	proto.RegisterType((*AgeRangeInfo)(nil), "google.ads.googleads.v3.common.AgeRangeInfo")
+	proto.RegisterType((*GenderInfo)(nil), "google.ads.googleads.v3.common.GenderInfo")
+	proto.RegisterType((*IncomeRangeInfo)(nil), "google.ads.googleads.v3.common.IncomeRangeInfo")
+	proto.RegisterType((*ParentalStatusInfo)(nil), "google.ads.googleads.v3.common.ParentalStatusInfo")
+	proto.RegisterType((*YouTubeVideoInfo)(nil), "google.ads.googleads.v3.common.YouTubeVideoInfo")
+	proto.RegisterType((*YouTubeChannelInfo)(nil), "google.ads.googleads.v3.common.YouTubeChannelInfo")
+	proto.RegisterType((*UserListInfo)(nil), "google.ads.googleads.v3.common.UserListInfo")
+	proto.RegisterType((*ProximityInfo)(nil), "google.ads.googleads.v3.common.ProximityInfo")
+	proto.RegisterType((*GeoPointInfo)(nil), "google.ads.googleads.v3.common.GeoPointInfo")
+	proto.RegisterType((*AddressInfo)(nil), "google.ads.googleads.v3.common.AddressInfo")
+	proto.RegisterType((*TopicInfo)(nil), "google.ads.googleads.v3.common.TopicInfo")
+	proto.RegisterType((*LanguageInfo)(nil), "google.ads.googleads.v3.common.LanguageInfo")
+	proto.RegisterType((*IpBlockInfo)(nil), "google.ads.googleads.v3.common.IpBlockInfo")
+	proto.RegisterType((*ContentLabelInfo)(nil), "google.ads.googleads.v3.common.ContentLabelInfo")
+	proto.RegisterType((*CarrierInfo)(nil), "google.ads.googleads.v3.common.CarrierInfo")
+	proto.RegisterType((*UserInterestInfo)(nil), "google.ads.googleads.v3.common.UserInterestInfo")
+	proto.RegisterType((*WebpageInfo)(nil), "google.ads.googleads.v3.common.WebpageInfo")
+	proto.RegisterType((*WebpageConditionInfo)(nil), "google.ads.googleads.v3.common.WebpageConditionInfo")
+	proto.RegisterType((*OperatingSystemVersionInfo)(nil), "google.ads.googleads.v3.common.OperatingSystemVersionInfo")
+	proto.RegisterType((*AppPaymentModelInfo)(nil), "google.ads.googleads.v3.common.AppPaymentModelInfo")
+	proto.RegisterType((*MobileDeviceInfo)(nil), "google.ads.googleads.v3.common.MobileDeviceInfo")
+	proto.RegisterType((*CustomAffinityInfo)(nil), "google.ads.googleads.v3.common.CustomAffinityInfo")
+	proto.RegisterType((*CustomIntentInfo)(nil), "google.ads.googleads.v3.common.CustomIntentInfo")
+	proto.RegisterType((*LocationGroupInfo)(nil), "google.ads.googleads.v3.common.LocationGroupInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/criteria.proto", fileDescriptor_f1e7892fe3678dd0)
+}
+
+var fileDescriptor_f1e7892fe3678dd0 = []byte{
+	// 2777 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x73, 0xdc, 0xc6,
+	0xd1, 0xf6, 0x2e, 0x29, 0x91, 0xdb, 0xbb, 0xfc, 0x10, 0x44, 0xd3, 0x2b, 0xf9, 0xa3, 0xfc, 0xe2,
+	0xe4, 0x7a, 0xfd, 0x7a, 0x29, 0x93, 0x7a, 0x15, 0x87, 0x8e, 0xa3, 0x2c, 0x49, 0x85, 0x5c, 0x9b,
+	0x92, 0x68, 0x90, 0xa2, 0x6c, 0x59, 0x0e, 0x3c, 0x04, 0x86, 0xd8, 0x89, 0x16, 0x33, 0x28, 0x60,
+	0x40, 0x72, 0x73, 0x48, 0xaa, 0x52, 0x95, 0xca, 0x21, 0x87, 0xdc, 0x73, 0x4b, 0x2a, 0x87, 0x24,
+	0xa7, 0xfc, 0x84, 0x54, 0x72, 0x49, 0xe5, 0x27, 0xe4, 0x17, 0xa4, 0xf2, 0x1b, 0x72, 0x48, 0xcd,
+	0x17, 0x16, 0xfb, 0x41, 0x02, 0xcb, 0xf2, 0x89, 0x8b, 0x99, 0x7e, 0x9e, 0xee, 0x99, 0xe9, 0xe9,
+	0xee, 0x99, 0x21, 0x7c, 0x10, 0x30, 0x16, 0xf4, 0xf0, 0x1a, 0xf2, 0x93, 0x35, 0xf5, 0x53, 0xfc,
+	0x3a, 0xdb, 0x58, 0xf3, 0x58, 0x18, 0x32, 0xba, 0xe6, 0xc5, 0x84, 0xe3, 0x98, 0xa0, 0x56, 0x14,
+	0x33, 0xce, 0xac, 0x77, 0x94, 0x4c, 0x0b, 0xf9, 0x49, 0x2b, 0x13, 0x6f, 0x9d, 0x6d, 0xb4, 0x94,
+	0xf8, 0xdd, 0xf5, 0xcb, 0xe8, 0x30, 0x4d, 0xc3, 0x64, 0x0d, 0x05, 0xd8, 0x8d, 0x11, 0x0d, 0xb0,
+	0xcb, 0xfb, 0x11, 0x56, 0x9c, 0x77, 0x37, 0x0b, 0x30, 0x51, 0xe4, 0x46, 0xa8, 0x1f, 0x62, 0xca,
+	0xdd, 0x90, 0xf9, 0xb8, 0x97, 0xc7, 0x3e, 0xb8, 0x1a, 0xeb, 0x31, 0xca, 0x05, 0xae, 0x87, 0x4e,
+	0x86, 0x71, 0x6b, 0x57, 0xe3, 0x7c, 0xd4, 0x77, 0xd9, 0xa9, 0x7b, 0x8e, 0xf1, 0x2b, 0x0d, 0xf8,
+	0xdf, 0x02, 0x00, 0x3e, 0x23, 0x5e, 0x49, 0xf2, 0x00, 0x53, 0x1f, 0xc7, 0x79, 0x6b, 0x3e, 0xb9,
+	0x1a, 0xd0, 0x65, 0x1c, 0xf7, 0x5c, 0x1f, 0x71, 0xec, 0x26, 0xb8, 0x87, 0x3d, 0x4e, 0x18, 0xcd,
+	0xc3, 0xff, 0xff, 0x6a, 0x38, 0xa1, 0x1e, 0x0b, 0x27, 0xcc, 0xfb, 0xfd, 0x22, 0x18, 0xc7, 0x31,
+	0x1a, 0x53, 0x56, 0x30, 0xe3, 0xaf, 0x70, 0xff, 0x9c, 0xc5, 0xbe, 0x1b, 0x22, 0xee, 0x75, 0xa7,
+	0xc0, 0xf5, 0x48, 0xc2, 0x09, 0x0d, 0xdc, 0x20, 0x66, 0x69, 0x94, 0xc7, 0x3d, 0x2c, 0xc0, 0x31,
+	0x0f, 0x49, 0x13, 0x15, 0x30, 0x46, 0x3e, 0x49, 0x13, 0x37, 0xa5, 0x84, 0x27, 0x9a, 0xa0, 0xc0,
+	0x25, 0x43, 0x42, 0x53, 0x8e, 0xc5, 0x6a, 0x77, 0x59, 0x1a, 0x6b, 0xcc, 0x47, 0x57, 0x63, 0x22,
+	0x14, 0x63, 0xca, 0x51, 0xcf, 0x4d, 0x38, 0xe2, 0x69, 0x32, 0x85, 0x33, 0x47, 0x31, 0x3e, 0xc5,
+	0x71, 0x8c, 0x7d, 0xd7, 0xb8, 0x66, 0x0e, 0xbb, 0x55, 0x84, 0x65, 0x7e, 0xea, 0x71, 0xf7, 0x84,
+	0xf8, 0xbe, 0x98, 0x2a, 0x0f, 0x71, 0x1c, 0xb0, 0xb8, 0xef, 0xf6, 0xf0, 0x19, 0xee, 0x69, 0x8e,
+	0x8d, 0x72, 0x1c, 0x5e, 0x17, 0x51, 0x9a, 0x81, 0x1e, 0x4e, 0x05, 0x72, 0xf1, 0x85, 0xd7, 0x4b,
+	0x13, 0x72, 0x46, 0x78, 0xbf, 0x9c, 0x07, 0x66, 0x04, 0x8c, 0xfa, 0x44, 0xac, 0xd6, 0x74, 0x03,
+	0xf6, 0xd2, 0x84, 0xb3, 0xd0, 0x45, 0x9c, 0xc7, 0xe4, 0x44, 0x2c, 0x16, 0xa1, 0x3e, 0xbe, 0x28,
+	0xe7, 0x57, 0x86, 0x43, 0x4c, 0xf3, 0xd0, 0x44, 0x15, 0x2e, 0x14, 0xbb, 0x20, 0x21, 0xe1, 0xfd,
+	0x49, 0x2e, 0x55, 0xb0, 0x5f, 0xcf, 0xf1, 0x49, 0x24, 0x22, 0x5d, 0x36, 0x5c, 0x97, 0x45, 0x38,
+	0x46, 0xd4, 0xd7, 0xf0, 0xef, 0x5f, 0x0b, 0xce, 0x99, 0xf1, 0x4e, 0x1d, 0x84, 0xd7, 0xe4, 0xd7,
+	0x49, 0x7a, 0xba, 0x76, 0x1e, 0xa3, 0x28, 0xc2, 0xb1, 0x31, 0xef, 0x2d, 0xc3, 0x1f, 0x91, 0x35,
+	0x44, 0x29, 0xe3, 0x72, 0x87, 0xe8, 0x5e, 0xfb, 0xf7, 0x15, 0xa8, 0x7f, 0xa6, 0x76, 0x69, 0x87,
+	0x9e, 0x32, 0xeb, 0x1e, 0xcc, 0x72, 0x7c, 0xc1, 0x9b, 0x95, 0x77, 0x2b, 0xef, 0xd5, 0xd7, 0xdf,
+	0xd2, 0x61, 0xbd, 0x65, 0xc8, 0x5b, 0x87, 0x3c, 0x26, 0x34, 0x38, 0x46, 0xbd, 0x14, 0x3b, 0x52,
+	0xd2, 0xf2, 0x00, 0x06, 0xdb, 0xbb, 0x59, 0x7d, 0xb7, 0xf2, 0xde, 0xe2, 0xfa, 0x4e, 0xeb, 0xb2,
+	0xcc, 0x20, 0x07, 0xd5, 0xd2, 0x1a, 0x1f, 0x0b, 0xdc, 0x51, 0x3f, 0xc2, 0x8f, 0x68, 0x1a, 0x8e,
+	0x35, 0x3a, 0xb5, 0xd0, 0xfc, 0xb4, 0x1f, 0xc2, 0xc2, 0x41, 0x0f, 0x79, 0x58, 0xc4, 0x7d, 0x69,
+	0x67, 0x0b, 0x66, 0xd2, 0xb8, 0x57, 0xca, 0x4c, 0x21, 0x68, 0x9f, 0xc1, 0xeb, 0x8f, 0xd9, 0x09,
+	0xe9, 0xe1, 0x76, 0x14, 0x6d, 0xeb, 0xad, 0x22, 0x89, 0xbe, 0x86, 0xb7, 0x42, 0xd9, 0xe1, 0x8a,
+	0xd4, 0x92, 0xed, 0x22, 0x8f, 0xd1, 0x84, 0x23, 0x5a, 0x6e, 0x22, 0xee, 0x84, 0xa3, 0xd4, 0xdb,
+	0x1a, 0x6e, 0xff, 0x34, 0xa7, 0xb7, 0x47, 0x54, 0x74, 0x92, 0x7a, 0x37, 0xe0, 0xa6, 0x50, 0x48,
+	0x7c, 0x39, 0x65, 0x45, 0x1a, 0x6e, 0xa0, 0x28, 0xea, 0xf8, 0x62, 0x75, 0x28, 0x0a, 0x71, 0x73,
+	0xa6, 0xcc, 0xea, 0x08, 0x49, 0xfb, 0x25, 0x34, 0xf6, 0x59, 0x4e, 0xed, 0x3e, 0xdc, 0x0e, 0x30,
+	0x73, 0x39, 0x8a, 0x03, 0xcc, 0xa7, 0x1b, 0xe5, 0xad, 0x00, 0xb3, 0x23, 0x89, 0xcb, 0x46, 0xe7,
+	0x00, 0xec, 0xc8, 0x5c, 0x27, 0xb9, 0x77, 0x60, 0x56, 0xfa, 0x40, 0x45, 0xfa, 0xc0, 0xbd, 0x02,
+	0x1f, 0x50, 0x40, 0xb9, 0xf2, 0xea, 0xa7, 0x23, 0xd1, 0xf6, 0x05, 0xac, 0x1c, 0x98, 0xb8, 0xb8,
+	0xad, 0xc2, 0xa2, 0x64, 0xff, 0x46, 0xb3, 0x2b, 0x0f, 0xdb, 0x2f, 0x60, 0x1f, 0xa5, 0xc8, 0xbc,
+	0x6c, 0x52, 0x87, 0xd6, 0xfc, 0x9b, 0x2a, 0x2c, 0xef, 0xab, 0xcc, 0xb3, 0x2b, 0xf2, 0x87, 0x54,
+	0xfb, 0xc5, 0xd0, 0xa0, 0x8a, 0x1c, 0x3b, 0x0f, 0xcf, 0x54, 0x8e, 0x36, 0x2a, 0x75, 0xd6, 0x21,
+	0x80, 0x87, 0x12, 0xec, 0x9e, 0x89, 0xd9, 0xd5, 0x5e, 0x70, 0xbf, 0x75, 0x75, 0x49, 0x65, 0xb8,
+	0x76, 0x48, 0x88, 0x69, 0xa2, 0x17, 0xd5, 0xa9, 0x09, 0x1e, 0xb9, 0x48, 0xd6, 0x73, 0xb8, 0xa3,
+	0xf2, 0x91, 0x8b, 0x7c, 0x9d, 0x05, 0x75, 0xd1, 0xc6, 0x68, 0x29, 0xb7, 0x59, 0x55, 0xf0, 0xb6,
+	0x2f, 0xcd, 0xdd, 0x36, 0x58, 0xbb, 0x9b, 0xcd, 0xcd, 0xa1, 0xc7, 0x22, 0xb5, 0xe0, 0x47, 0x00,
+	0xbe, 0x31, 0x24, 0x69, 0x56, 0xdf, 0x9d, 0xb9, 0xf6, 0x08, 0x72, 0x3c, 0xf6, 0xaf, 0xea, 0xb0,
+	0x32, 0x49, 0xc8, 0xda, 0x83, 0x79, 0x55, 0xfc, 0x64, 0x9b, 0xe6, 0xfd, 0x22, 0x65, 0x7b, 0x42,
+	0xbe, 0x23, 0x43, 0xdb, 0xde, 0x6b, 0xce, 0x5c, 0x57, 0x7d, 0x5a, 0x9f, 0x43, 0x5d, 0x31, 0x79,
+	0x3d, 0x94, 0x24, 0x7a, 0x5e, 0x5a, 0xa5, 0xc8, 0xb6, 0x05, 0x42, 0xf3, 0x41, 0x37, 0x6b, 0xb1,
+	0x7e, 0x0c, 0x2b, 0x9a, 0x92, 0xa5, 0x94, 0xc7, 0x7d, 0x37, 0xc6, 0x81, 0x98, 0xf3, 0x59, 0xc9,
+	0xfd, 0xa0, 0x1c, 0xb7, 0x82, 0x3a, 0x12, 0xa9, 0x75, 0x58, 0xdd, 0xb1, 0x9e, 0x81, 0xf9, 0xa2,
+	0xe2, 0xc0, 0xcd, 0x1b, 0x53, 0x98, 0x7f, 0x28, 0x10, 0x43, 0xe6, 0xcb, 0x16, 0xeb, 0x09, 0x80,
+	0x36, 0x9f, 0xf0, 0x7e, 0xf3, 0xa6, 0x64, 0xfc, 0xa0, 0x9c, 0xd1, 0x84, 0xf7, 0x35, 0x61, 0xad,
+	0x6b, 0x1a, 0xac, 0x33, 0x68, 0x5e, 0x56, 0xa1, 0x34, 0x17, 0x24, 0xfb, 0x66, 0x11, 0xfb, 0x81,
+	0xc2, 0x6f, 0x29, 0x78, 0x3e, 0x68, 0xef, 0xbd, 0xe6, 0xac, 0x46, 0x13, 0x7b, 0xad, 0xe7, 0xb0,
+	0x90, 0xe9, 0x15, 0x49, 0xb6, 0xb9, 0x24, 0x95, 0xdd, 0x2b, 0xab, 0x4c, 0x60, 0xb4, 0x8a, 0x46,
+	0x94, 0x6b, 0xb3, 0xbe, 0x86, 0xa5, 0x91, 0xca, 0xa7, 0x39, 0x2f, 0xa9, 0xd7, 0x4b, 0x52, 0x6f,
+	0x2b, 0x94, 0x26, 0x5f, 0x8c, 0x86, 0x5a, 0xad, 0x9f, 0xc1, 0x9b, 0x57, 0x14, 0x56, 0xcd, 0x9a,
+	0x54, 0xf5, 0xc9, 0x74, 0xaa, 0x1e, 0x0d, 0x08, 0xb4, 0xd6, 0x3b, 0xd1, 0x65, 0x02, 0x96, 0x07,
+	0xb7, 0xc6, 0x0a, 0xb3, 0x26, 0x94, 0x0b, 0x4a, 0x46, 0xad, 0xc1, 0x69, 0x6d, 0xcb, 0xd1, 0x48,
+	0x7b, 0xde, 0x2b, 0x46, 0xcb, 0xb8, 0xe6, 0xf2, 0x54, 0x5e, 0xb1, 0x2d, 0xe1, 0x6d, 0x83, 0x1e,
+	0xf1, 0x8a, 0x91, 0x5e, 0xeb, 0xab, 0xc1, 0xe2, 0x11, 0x8e, 0x43, 0x11, 0x40, 0xea, 0x52, 0xdd,
+	0x87, 0x25, 0xd5, 0x75, 0x38, 0x0e, 0xb3, 0x30, 0x62, 0x3c, 0x4c, 0x35, 0x5a, 0x47, 0xd0, 0xc8,
+	0xd7, 0x95, 0xcd, 0x86, 0x64, 0x5e, 0x2b, 0xc9, 0x2c, 0x12, 0x82, 0xe6, 0xad, 0x47, 0x83, 0x26,
+	0xab, 0x0f, 0x77, 0x52, 0xfa, 0x8a, 0xb2, 0x73, 0xea, 0x9a, 0xd3, 0x50, 0x16, 0x23, 0x9b, 0x8b,
+	0x52, 0xc5, 0xc7, 0x45, 0x2a, 0x9e, 0x29, 0x82, 0x49, 0xc1, 0x74, 0xef, 0x35, 0xe7, 0x8d, 0x74,
+	0x72, 0xf7, 0x56, 0x1d, 0x6a, 0x99, 0x2a, 0xbb, 0x0d, 0xf5, 0x5c, 0x10, 0xb5, 0xd6, 0xe1, 0x86,
+	0xca, 0x57, 0x65, 0x2a, 0x06, 0x25, 0x6a, 0x6f, 0xc3, 0xe2, 0x70, 0xe8, 0xb4, 0x3e, 0x1c, 0x66,
+	0x79, 0x73, 0x8c, 0xa5, 0x43, 0xf9, 0x83, 0xfb, 0x43, 0x24, 0x11, 0xac, 0x4e, 0x8e, 0x91, 0xd6,
+	0x31, 0x34, 0x87, 0x63, 0x6e, 0x2e, 0xe3, 0x95, 0xb1, 0x72, 0xd5, 0xcb, 0x53, 0x0e, 0x32, 0xde,
+	0x73, 0x6d, 0x76, 0x16, 0x32, 0xad, 0x47, 0xb0, 0x24, 0x23, 0xee, 0x94, 0x0a, 0x16, 0x25, 0x68,
+	0x40, 0x7c, 0x04, 0x0b, 0x43, 0x91, 0xd3, 0xda, 0x86, 0x45, 0x11, 0x76, 0xa7, 0xa4, 0x5d, 0x10,
+	0x98, 0x01, 0xeb, 0x7f, 0x2a, 0x70, 0xf7, 0xf2, 0x90, 0x69, 0xbd, 0x0f, 0x55, 0xe2, 0x97, 0x99,
+	0xef, 0x2a, 0xf1, 0xad, 0x87, 0xd0, 0x30, 0x53, 0xea, 0x31, 0x1f, 0x97, 0x2a, 0x51, 0xeb, 0x1a,
+	0xb1, 0xcd, 0x7c, 0x6c, 0x45, 0x70, 0x43, 0x1e, 0xaf, 0x64, 0x6a, 0x5d, 0x5c, 0x7f, 0x51, 0x58,
+	0xad, 0x4d, 0xb2, 0x7b, 0x5f, 0x30, 0xe8, 0xa2, 0xed, 0xd2, 0x7e, 0x47, 0x29, 0xb2, 0x7f, 0x08,
+	0xcb, 0xa3, 0x31, 0xfc, 0x5a, 0xce, 0x1a, 0x81, 0x35, 0x1e, 0xb0, 0xad, 0x17, 0x30, 0x67, 0xa2,
+	0xbe, 0x2a, 0x04, 0x7f, 0x50, 0x6e, 0x44, 0x26, 0xd0, 0xe6, 0x06, 0xa1, 0x9b, 0x1c, 0x43, 0x68,
+	0xff, 0xb1, 0x02, 0x6f, 0x5f, 0x19, 0xb8, 0xad, 0x5f, 0x56, 0xe0, 0xf6, 0xa4, 0xac, 0xa0, 0x4c,
+	0x39, 0x9e, 0xce, 0x94, 0x01, 0x7e, 0x82, 0x55, 0xb9, 0x5e, 0xc7, 0xf2, 0xc6, 0xda, 0xec, 0x9f,
+	0x88, 0xe2, 0x7c, 0x3c, 0xd8, 0x5b, 0x27, 0x50, 0x1b, 0x64, 0x8d, 0x72, 0xa5, 0xf2, 0x28, 0xcf,
+	0x90, 0x35, 0xa6, 0xd1, 0x19, 0xd0, 0xda, 0x7f, 0x1d, 0x38, 0xf8, 0x84, 0xe8, 0x7f, 0x9d, 0xc5,
+	0x16, 0x6e, 0x2a, 0x6f, 0x0f, 0xf4, 0xa1, 0xa2, 0xa4, 0x9b, 0x8e, 0x69, 0xf7, 0xf1, 0xc5, 0x90,
+	0xf5, 0x13, 0xfa, 0x1d, 0xa5, 0xc8, 0xde, 0x85, 0x5b, 0x63, 0x29, 0xe5, 0x5a, 0x7e, 0xfa, 0xdb,
+	0x0a, 0x2c, 0x8d, 0xa4, 0x90, 0x6b, 0x4d, 0xc1, 0x0b, 0xb3, 0x53, 0xab, 0xd3, 0xac, 0x9a, 0x50,
+	0x39, 0xb6, 0x3d, 0xb3, 0x46, 0xb3, 0x27, 0xdf, 0x86, 0x37, 0xaf, 0x48, 0x41, 0xf6, 0xcf, 0x2b,
+	0x70, 0x57, 0x06, 0xc2, 0x1d, 0xc4, 0xf1, 0xa1, 0xb9, 0xcb, 0xcc, 0x46, 0xe3, 0x0f, 0x9d, 0xbc,
+	0x0e, 0x0a, 0x0c, 0x9b, 0x4c, 0x24, 0xcd, 0x9b, 0xdc, 0xa5, 0x0f, 0x7d, 0xbf, 0xae, 0xc0, 0xdb,
+	0x52, 0xa0, 0xed, 0x9f, 0x21, 0xea, 0xe1, 0x2d, 0xc6, 0x5e, 0x11, 0x1a, 0x3c, 0x27, 0xd4, 0x67,
+	0xe7, 0xd2, 0x8e, 0x07, 0x30, 0x1f, 0x12, 0xea, 0xfa, 0xa8, 0x9f, 0x94, 0x89, 0x9f, 0x73, 0x21,
+	0xa1, 0x3b, 0xa8, 0x9f, 0x48, 0x1c, 0xba, 0x50, 0xb8, 0x6a, 0x19, 0x1c, 0xba, 0x10, 0x38, 0x61,
+	0xd1, 0xeb, 0xd2, 0xa2, 0x7d, 0x4c, 0x03, 0xde, 0x7d, 0x7a, 0x7a, 0xc8, 0x91, 0x8a, 0x03, 0x9b,
+	0x00, 0xc2, 0x12, 0x4a, 0x82, 0x2e, 0x2f, 0x65, 0x4b, 0x2d, 0x24, 0xf4, 0x89, 0x94, 0x96, 0x58,
+	0x74, 0x61, 0xb0, 0xd5, 0x32, 0x58, 0x74, 0xa1, 0xb0, 0x76, 0x08, 0xb7, 0x55, 0xc2, 0xea, 0x62,
+	0xef, 0x55, 0x47, 0x8c, 0x4e, 0x27, 0xde, 0x7a, 0xee, 0x6a, 0x5c, 0xaf, 0xd3, 0x83, 0xa2, 0x63,
+	0x3f, 0xea, 0x3f, 0x3d, 0x7d, 0x8e, 0xf1, 0x2b, 0x75, 0xf2, 0x37, 0x5f, 0x4e, 0xcd, 0x37, 0x3f,
+	0x85, 0xba, 0xce, 0xe0, 0xba, 0x39, 0xf3, 0x87, 0xe3, 0x21, 0x7f, 0xd8, 0x2a, 0xd0, 0x33, 0xc2,
+	0x20, 0xb5, 0x8d, 0xb4, 0x99, 0x63, 0xff, 0x0c, 0x2c, 0xb6, 0xfd, 0x43, 0xaf, 0x8b, 0xfd, 0xb4,
+	0xa7, 0x54, 0xb9, 0xd0, 0x48, 0x38, 0x8a, 0xb9, 0xab, 0xee, 0x83, 0xb5, 0xca, 0xef, 0x15, 0xa8,
+	0x7c, 0x2c, 0x85, 0x9f, 0x9e, 0xee, 0xb1, 0x34, 0x96, 0xfa, 0xf2, 0x0d, 0x4e, 0x5d, 0x32, 0xaa,
+	0x26, 0xeb, 0x2b, 0x00, 0x4c, 0x7d, 0x43, 0x5f, 0xfd, 0x16, 0xe8, 0x6b, 0x98, 0xfa, 0x9a, 0x7c,
+	0x13, 0x40, 0x59, 0xdf, 0x65, 0x69, 0xac, 0x0f, 0xb7, 0x13, 0x97, 0x7a, 0x63, 0x5d, 0x2f, 0xb5,
+	0x14, 0x17, 0x34, 0xc2, 0x69, 0x85, 0x61, 0x12, 0x39, 0x5b, 0x8c, 0x9c, 0xc3, 0xd4, 0x97, 0xb8,
+	0x11, 0x5f, 0xb8, 0xf1, 0x6d, 0xf9, 0xc2, 0x37, 0xd0, 0x68, 0x07, 0xd8, 0x41, 0x34, 0x50, 0x2b,
+	0x73, 0x30, 0xe4, 0x04, 0x45, 0x53, 0x66, 0xa0, 0x99, 0x07, 0xe4, 0x1b, 0xf4, 0xf2, 0xbf, 0x00,
+	0xd8, 0x95, 0x6f, 0x30, 0xfa, 0x7e, 0x2c, 0xcf, 0xff, 0x51, 0x01, 0xbf, 0x02, 0x66, 0xec, 0x83,
+	0x4f, 0xcd, 0x4d, 0x60, 0xa9, 0x23, 0xdf, 0x5b, 0x06, 0x03, 0x98, 0xd6, 0x8b, 0x33, 0x74, 0xce,
+	0x8b, 0x87, 0xda, 0xb4, 0xaa, 0x18, 0xac, 0x03, 0xfd, 0x10, 0x71, 0x28, 0xdf, 0x21, 0xa4, 0xb6,
+	0x97, 0x43, 0xda, 0xf6, 0x8a, 0x82, 0xfb, 0x10, 0xc1, 0xe0, 0xca, 0x6c, 0xac, 0x59, 0xeb, 0xfc,
+	0x0c, 0x96, 0xbf, 0x64, 0xe9, 0x51, 0x7a, 0x82, 0x8f, 0x89, 0x8f, 0x99, 0xd4, 0xf8, 0x1d, 0x98,
+	0x3f, 0x13, 0x1f, 0x6e, 0x56, 0x6d, 0x5e, 0x9d, 0x86, 0xe6, 0xa4, 0x74, 0xc7, 0xb7, 0x3f, 0x07,
+	0x4b, 0x93, 0xe5, 0x0b, 0xaf, 0x8f, 0x01, 0x4c, 0xe5, 0x53, 0x92, 0xb0, 0xa6, 0xe5, 0x3b, 0xbe,
+	0xdd, 0x81, 0xc6, 0xb3, 0x04, 0xc7, 0x22, 0xf9, 0x48, 0xb2, 0xef, 0x42, 0x2d, 0x4d, 0x70, 0x2c,
+	0x0f, 0x54, 0xa5, 0xb8, 0xe6, 0x53, 0x0d, 0xb7, 0xff, 0x5e, 0x85, 0x85, 0x03, 0xf3, 0x0a, 0x20,
+	0xc9, 0x3a, 0x50, 0x0b, 0x30, 0x73, 0x23, 0x46, 0xb2, 0xfb, 0xd3, 0xff, 0x2b, 0x3a, 0x90, 0xed,
+	0x62, 0x76, 0x20, 0xe4, 0xe5, 0x9d, 0xd7, 0x7c, 0xa0, 0xbf, 0xac, 0xfb, 0x70, 0x53, 0xbd, 0x2b,
+	0x5c, 0x5a, 0x68, 0xef, 0xb0, 0xf4, 0xa4, 0xa7, 0xae, 0xf8, 0x1c, 0x2d, 0x6b, 0x31, 0x68, 0xe4,
+	0x5f, 0x23, 0x74, 0xa9, 0x5d, 0x7c, 0x31, 0xaa, 0x07, 0xe1, 0x48, 0xec, 0x33, 0x01, 0x35, 0x49,
+	0x7c, 0xac, 0xc3, 0xa9, 0xc7, 0x83, 0x0f, 0xeb, 0x11, 0xcc, 0x21, 0xdf, 0x8f, 0x71, 0x92, 0xe8,
+	0xd0, 0x50, 0x78, 0xfd, 0xd6, 0x56, 0xe2, 0x72, 0xb8, 0x06, 0x6b, 0xff, 0xa5, 0x02, 0x8d, 0xfc,
+	0x44, 0x58, 0x5f, 0xc0, 0xdd, 0x1e, 0xa3, 0x01, 0xe1, 0xa9, 0x8f, 0x5d, 0x42, 0xdd, 0x90, 0x78,
+	0x31, 0x73, 0x7d, 0x1c, 0xc4, 0x18, 0x5f, 0x99, 0xe6, 0x4c, 0x14, 0x7a, 0x23, 0x83, 0x77, 0xe8,
+	0x63, 0x01, 0xde, 0x51, 0x58, 0xeb, 0x18, 0xee, 0xf4, 0x10, 0xbf, 0x84, 0xb8, 0x5a, 0x4c, 0xbc,
+	0x6a, 0xd0, 0xc3, 0xbc, 0xf6, 0x3f, 0x67, 0xa0, 0x9e, 0x1b, 0x9b, 0xf5, 0x09, 0xd4, 0x23, 0x96,
+	0x70, 0xd4, 0x53, 0xc7, 0xa5, 0x32, 0xae, 0x05, 0x0a, 0x20, 0x4f, 0x4b, 0x6d, 0x79, 0x69, 0x75,
+	0x46, 0xa8, 0x87, 0xcb, 0x9f, 0xb7, 0x1a, 0x06, 0x22, 0x29, 0x46, 0x4f, 0x6c, 0x33, 0xd3, 0x9e,
+	0xd8, 0xf2, 0x36, 0xc8, 0x37, 0x86, 0xd9, 0x69, 0x6c, 0x78, 0x82, 0x42, 0x2c, 0x8e, 0xb1, 0x09,
+	0x8f, 0x31, 0xe6, 0xae, 0x71, 0x93, 0x1b, 0x65, 0x8e, 0xb1, 0x0a, 0xa3, 0xa7, 0x53, 0x9d, 0xb1,
+	0xf3, 0x24, 0xeb, 0xfa, 0x36, 0xb2, 0xf0, 0x8c, 0x9d, 0x63, 0x59, 0x17, 0x5b, 0x5d, 0x1e, 0xa9,
+	0xe5, 0x50, 0xe6, 0xca, 0x6c, 0x75, 0x21, 0x2e, 0x86, 0x21, 0xca, 0xd2, 0xda, 0x11, 0x8b, 0x88,
+	0x67, 0xce, 0xe6, 0x5c, 0x7c, 0x4c, 0xf7, 0x56, 0xb2, 0x20, 0x31, 0xe6, 0x9d, 0xc4, 0xba, 0x07,
+	0xb3, 0x11, 0xe2, 0x5d, 0x7d, 0x45, 0x5e, 0xf0, 0x6e, 0x23, 0x24, 0xed, 0x2f, 0xa1, 0xb1, 0x8f,
+	0x68, 0x90, 0x22, 0x9d, 0x36, 0x3a, 0x70, 0xab, 0xa7, 0xbf, 0xa7, 0xb3, 0x64, 0xd9, 0xc0, 0xb2,
+	0x47, 0x9b, 0x4f, 0xa1, 0xde, 0x89, 0xb6, 0x7a, 0x4c, 0x94, 0x72, 0x2a, 0xc2, 0x92, 0x28, 0x5b,
+	0xb1, 0x52, 0x11, 0x96, 0x44, 0x7a, 0x9e, 0xed, 0x1e, 0x2c, 0xeb, 0x77, 0x94, 0x7d, 0x74, 0xa2,
+	0x43, 0xf6, 0x74, 0x2f, 0x26, 0x79, 0x78, 0x96, 0x71, 0x46, 0x1b, 0x75, 0xbe, 0x39, 0x86, 0xfa,
+	0x36, 0x8a, 0x63, 0xa2, 0x73, 0xf5, 0x2e, 0x2c, 0x7b, 0xea, 0x73, 0xba, 0x29, 0x59, 0xd2, 0xa8,
+	0x6c, 0x46, 0x4e, 0x61, 0x59, 0xe4, 0x09, 0x59, 0x1e, 0x62, 0x9d, 0x2b, 0x1c, 0x58, 0x95, 0xb9,
+	0x82, 0xe8, 0xc6, 0xc1, 0xf5, 0x75, 0x19, 0x15, 0x2b, 0x69, 0x8e, 0xcf, 0xdc, 0x57, 0xd8, 0x7f,
+	0xa8, 0x40, 0xfd, 0xb9, 0x7a, 0xcf, 0xcd, 0xee, 0x7d, 0xcc, 0xfd, 0x8d, 0xf2, 0xd4, 0x72, 0xf7,
+	0x3e, 0x06, 0x23, 0x77, 0xdd, 0x11, 0x40, 0x76, 0x46, 0x2e, 0xfd, 0x08, 0xa3, 0xad, 0x18, 0x3a,
+	0xc4, 0x3b, 0x39, 0x1e, 0xfb, 0xcf, 0x55, 0x58, 0x99, 0x24, 0x64, 0xf5, 0x60, 0x4e, 0xbf, 0x5f,
+	0xeb, 0x05, 0x76, 0x0a, 0x16, 0x78, 0x94, 0xe5, 0xa9, 0x42, 0xcb, 0x75, 0xbe, 0xa4, 0xcf, 0x31,
+	0x2a, 0xac, 0x08, 0xe6, 0xcd, 0x73, 0xb7, 0xae, 0x92, 0x8f, 0xae, 0xa3, 0x8e, 0xb3, 0xf8, 0x72,
+	0x7d, 0x9c, 0xc5, 0x4e, 0xa6, 0xc5, 0xfa, 0x08, 0xe6, 0x51, 0x1c, 0xa4, 0x21, 0xa6, 0xbc, 0x54,
+	0x10, 0xcd, 0xa4, 0xed, 0x5f, 0x54, 0xe0, 0xae, 0x22, 0x24, 0x34, 0x38, 0xec, 0x27, 0x1c, 0x87,
+	0xc7, 0x38, 0xce, 0x5e, 0xaf, 0x02, 0xf8, 0x1f, 0x66, 0x7a, 0xdd, 0x44, 0x76, 0xbb, 0x67, 0xaa,
+	0x7f, 0x3a, 0xf7, 0x7d, 0x87, 0x4d, 0x54, 0x92, 0x79, 0x73, 0x0a, 0xb7, 0xdb, 0x51, 0x74, 0xa0,
+	0xfe, 0x49, 0xea, 0x31, 0xf3, 0xf5, 0xb6, 0xfc, 0xd1, 0xd0, 0xb6, 0xfc, 0xb4, 0xa8, 0x72, 0x1e,
+	0x66, 0x18, 0x14, 0xd0, 0xe3, 0xed, 0x7a, 0x73, 0x9e, 0xc2, 0xb2, 0x7a, 0xe9, 0xce, 0xbd, 0x08,
+	0x3b, 0xb0, 0xaa, 0x1f, 0xd7, 0xd5, 0xbf, 0x44, 0x4d, 0x37, 0xd0, 0x95, 0x30, 0xc7, 0x97, 0x0d,
+	0xef, 0x2b, 0xb0, 0xf4, 0x05, 0xcb, 0xe9, 0x29, 0xa1, 0xa6, 0x1a, 0x7b, 0x04, 0x4b, 0xe6, 0x45,
+	0x41, 0x37, 0x97, 0xbb, 0x9a, 0xf5, 0x86, 0xa8, 0xec, 0x67, 0xb0, 0xac, 0xc8, 0x3b, 0x83, 0x87,
+	0xe7, 0x36, 0x2c, 0x68, 0x6a, 0x22, 0x1b, 0x4b, 0x11, 0x37, 0xbc, 0x1c, 0x8d, 0xfd, 0xb7, 0x2a,
+	0xdc, 0x32, 0xcf, 0xf0, 0x83, 0xa7, 0xe5, 0x7b, 0x30, 0x7b, 0x8a, 0x71, 0xb9, 0xaa, 0x56, 0x4a,
+	0x5a, 0x4f, 0x60, 0x65, 0xc2, 0xeb, 0x7d, 0x52, 0x2a, 0xaf, 0x58, 0x63, 0xcf, 0xf7, 0x89, 0xb5,
+	0x91, 0x15, 0x9e, 0x33, 0xc5, 0x17, 0x02, 0xa6, 0xee, 0x3c, 0x1f, 0xa9, 0x3b, 0x67, 0x4b, 0xed,
+	0xcb, 0xa1, 0xe1, 0x8f, 0xd6, 0x9e, 0x97, 0x75, 0x0e, 0xd5, 0x9f, 0x5b, 0xff, 0xaa, 0x80, 0xed,
+	0xb1, 0xb0, 0x20, 0xb6, 0x6d, 0x2d, 0xe8, 0x3b, 0x71, 0x74, 0x20, 0x06, 0x71, 0x50, 0x79, 0xb1,
+	0xa3, 0x01, 0x01, 0x13, 0xb9, 0xb0, 0xc5, 0xe2, 0x60, 0x2d, 0xc0, 0x54, 0x0e, 0xd1, 0xfc, 0xc7,
+	0x4d, 0x44, 0x92, 0xcb, 0xfe, 0xe9, 0xf1, 0x63, 0xf5, 0xe7, 0x77, 0xd5, 0x99, 0xdd, 0x76, 0xfb,
+	0x4f, 0xd5, 0x77, 0x76, 0x15, 0x59, 0xdb, 0x4f, 0x5a, 0xea, 0xa7, 0xf8, 0x75, 0xbc, 0xd1, 0xda,
+	0x96, 0x62, 0xff, 0x30, 0x02, 0x2f, 0xdb, 0x7e, 0xf2, 0x32, 0x13, 0x78, 0x79, 0xbc, 0xf1, 0x52,
+	0x09, 0xfc, 0xbb, 0x6a, 0xab, 0xd6, 0xcd, 0xcd, 0xb6, 0x9f, 0x6c, 0x6e, 0x66, 0x22, 0x9b, 0x9b,
+	0xc7, 0x1b, 0x9b, 0x9b, 0x4a, 0xe8, 0xe4, 0xa6, 0xb4, 0x6e, 0xe3, 0xbf, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0xd8, 0x7b, 0xbf, 0x87, 0x91, 0x29, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/criterion_category_availability.pb.go b/googleapis/ads/googleads/v3/common/criterion_category_availability.pb.go
new file mode 100644
index 0000000..6ebdf45
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/criterion_category_availability.pb.go
@@ -0,0 +1,266 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/criterion_category_availability.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Information of category availability, per advertising channel.
+type CriterionCategoryAvailability struct {
+	// Channel types and subtypes that are available to the category.
+	Channel *CriterionCategoryChannelAvailability `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"`
+	// Locales that are available to the category for the channel.
+	Locale               []*CriterionCategoryLocaleAvailability `protobuf:"bytes,2,rep,name=locale,proto3" json:"locale,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CriterionCategoryAvailability) Reset()         { *m = CriterionCategoryAvailability{} }
+func (m *CriterionCategoryAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryAvailability) ProtoMessage()    {}
+func (*CriterionCategoryAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bcf6cc5448fcd127, []int{0}
+}
+
+func (m *CriterionCategoryAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryAvailability.Marshal(b, m, deterministic)
+}
+func (m *CriterionCategoryAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryAvailability.Merge(m, src)
+}
+func (m *CriterionCategoryAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryAvailability.Size(m)
+}
+func (m *CriterionCategoryAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryAvailability) GetChannel() *CriterionCategoryChannelAvailability {
+	if m != nil {
+		return m.Channel
+	}
+	return nil
+}
+
+func (m *CriterionCategoryAvailability) GetLocale() []*CriterionCategoryLocaleAvailability {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+// Information of advertising channel type and subtypes a category is available
+// in.
+type CriterionCategoryChannelAvailability struct {
+	// Format of the channel availability. Can be ALL_CHANNELS (the rest of the
+	// fields will not be set), CHANNEL_TYPE (only advertising_channel_type type
+	// will be set, the category is available to all sub types under it) or
+	// CHANNEL_TYPE_AND_SUBTYPES (advertising_channel_type,
+	// advertising_channel_sub_type, and include_default_channel_sub_type will all
+	// be set).
+	AvailabilityMode enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode `protobuf:"varint,1,opt,name=availability_mode,json=availabilityMode,proto3,enum=google.ads.googleads.v3.enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode" json:"availability_mode,omitempty"`
+	// Channel type the category is available to.
+	AdvertisingChannelType enums.AdvertisingChannelTypeEnum_AdvertisingChannelType `protobuf:"varint,2,opt,name=advertising_channel_type,json=advertisingChannelType,proto3,enum=google.ads.googleads.v3.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType" json:"advertising_channel_type,omitempty"`
+	// Channel subtypes under the channel type the category is available to.
+	AdvertisingChannelSubType []enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType `protobuf:"varint,3,rep,packed,name=advertising_channel_sub_type,json=advertisingChannelSubType,proto3,enum=google.ads.googleads.v3.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType" json:"advertising_channel_sub_type,omitempty"`
+	// Whether default channel sub type is included. For example,
+	// advertising_channel_type being DISPLAY and include_default_channel_sub_type
+	// being false means that the default display campaign where channel sub type
+	// is not set is not included in this availability configuration.
+	IncludeDefaultChannelSubType *wrappers.BoolValue `protobuf:"bytes,4,opt,name=include_default_channel_sub_type,json=includeDefaultChannelSubType,proto3" json:"include_default_channel_sub_type,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}            `json:"-"`
+	XXX_unrecognized             []byte              `json:"-"`
+	XXX_sizecache                int32               `json:"-"`
+}
+
+func (m *CriterionCategoryChannelAvailability) Reset()         { *m = CriterionCategoryChannelAvailability{} }
+func (m *CriterionCategoryChannelAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryChannelAvailability) ProtoMessage()    {}
+func (*CriterionCategoryChannelAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bcf6cc5448fcd127, []int{1}
+}
+
+func (m *CriterionCategoryChannelAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Marshal(b, m, deterministic)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryChannelAvailability.Merge(m, src)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Size(m)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryChannelAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryChannelAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryChannelAvailability) GetAvailabilityMode() enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode {
+	if m != nil {
+		return m.AvailabilityMode
+	}
+	return enums.CriterionCategoryChannelAvailabilityModeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryChannelAvailability) GetAdvertisingChannelType() enums.AdvertisingChannelTypeEnum_AdvertisingChannelType {
+	if m != nil {
+		return m.AdvertisingChannelType
+	}
+	return enums.AdvertisingChannelTypeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryChannelAvailability) GetAdvertisingChannelSubType() []enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType {
+	if m != nil {
+		return m.AdvertisingChannelSubType
+	}
+	return nil
+}
+
+func (m *CriterionCategoryChannelAvailability) GetIncludeDefaultChannelSubType() *wrappers.BoolValue {
+	if m != nil {
+		return m.IncludeDefaultChannelSubType
+	}
+	return nil
+}
+
+// Information about which locales a category is available in.
+type CriterionCategoryLocaleAvailability struct {
+	// Format of the locale availability. Can be LAUNCHED_TO_ALL (both country and
+	// language will be empty), COUNTRY (only country will be set), LANGUAGE (only
+	// language wil be set), COUNTRY_AND_LANGUAGE (both country and language will
+	// be set).
+	AvailabilityMode enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode `protobuf:"varint,1,opt,name=availability_mode,json=availabilityMode,proto3,enum=google.ads.googleads.v3.enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode" json:"availability_mode,omitempty"`
+	// Code of the country.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Code of the language.
+	LanguageCode         *wrappers.StringValue `protobuf:"bytes,3,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CriterionCategoryLocaleAvailability) Reset()         { *m = CriterionCategoryLocaleAvailability{} }
+func (m *CriterionCategoryLocaleAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryLocaleAvailability) ProtoMessage()    {}
+func (*CriterionCategoryLocaleAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bcf6cc5448fcd127, []int{2}
+}
+
+func (m *CriterionCategoryLocaleAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Marshal(b, m, deterministic)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryLocaleAvailability.Merge(m, src)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Size(m)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryLocaleAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryLocaleAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryLocaleAvailability) GetAvailabilityMode() enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode {
+	if m != nil {
+		return m.AvailabilityMode
+	}
+	return enums.CriterionCategoryLocaleAvailabilityModeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryLocaleAvailability) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *CriterionCategoryLocaleAvailability) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CriterionCategoryAvailability)(nil), "google.ads.googleads.v3.common.CriterionCategoryAvailability")
+	proto.RegisterType((*CriterionCategoryChannelAvailability)(nil), "google.ads.googleads.v3.common.CriterionCategoryChannelAvailability")
+	proto.RegisterType((*CriterionCategoryLocaleAvailability)(nil), "google.ads.googleads.v3.common.CriterionCategoryLocaleAvailability")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/criterion_category_availability.proto", fileDescriptor_bcf6cc5448fcd127)
+}
+
+var fileDescriptor_bcf6cc5448fcd127 = []byte{
+	// 608 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0x41, 0x8e, 0xd3, 0x30,
+	0x14, 0x86, 0x95, 0x74, 0x34, 0x48, 0x9e, 0x61, 0x04, 0x59, 0xa0, 0x52, 0x95, 0x51, 0x15, 0x58,
+	0x74, 0xe5, 0x48, 0xcd, 0x2e, 0x20, 0x41, 0x9a, 0xa2, 0xd9, 0x80, 0xa8, 0x3a, 0xa8, 0x0b, 0xa8,
+	0x88, 0x9c, 0xc4, 0x13, 0x2c, 0x39, 0x76, 0x94, 0x38, 0x45, 0xbd, 0x02, 0x17, 0x60, 0x89, 0x60,
+	0xc9, 0x51, 0x60, 0xcd, 0x8e, 0x13, 0x70, 0x07, 0x24, 0x94, 0xd8, 0x29, 0x1d, 0xda, 0x64, 0xda,
+	0x55, 0xdd, 0xf8, 0xbd, 0xef, 0xff, 0xdf, 0xcb, 0xb3, 0x03, 0x26, 0x31, 0xe7, 0x31, 0xc5, 0x16,
+	0x8a, 0x72, 0x4b, 0x2e, 0xcb, 0xd5, 0xd2, 0xb6, 0x42, 0x9e, 0x24, 0x9c, 0x59, 0x61, 0x46, 0x04,
+	0xce, 0x08, 0x67, 0x7e, 0x88, 0x04, 0x8e, 0x79, 0xb6, 0xf2, 0xd1, 0x12, 0x11, 0x8a, 0x02, 0x42,
+	0x89, 0x58, 0xc1, 0x34, 0xe3, 0x82, 0x1b, 0xe7, 0x32, 0x15, 0xa2, 0x28, 0x87, 0x6b, 0x0a, 0x5c,
+	0xda, 0x50, 0x52, 0x7a, 0xcf, 0x9a, 0x54, 0x30, 0x2b, 0x92, 0xdc, 0x42, 0xd1, 0x12, 0x67, 0x82,
+	0xe4, 0x84, 0xc5, 0x7e, 0xf8, 0x1e, 0x31, 0x86, 0xa9, 0x9f, 0x17, 0x81, 0x2f, 0x56, 0x29, 0x96,
+	0x0a, 0xbd, 0x27, 0x87, 0x13, 0x36, 0xb2, 0xa7, 0xed, 0xd9, 0x3b, 0x8a, 0xac, 0x21, 0x9b, 0xc5,
+	0xfa, 0x09, 0x8f, 0x6a, 0xe2, 0xab, 0x83, 0x89, 0x94, 0x87, 0x88, 0xe2, 0x46, 0xa0, 0x6a, 0xa1,
+	0x55, 0xfd, 0x0b, 0x8a, 0x2b, 0xeb, 0x43, 0x86, 0xd2, 0x14, 0x67, 0xb9, 0xda, 0xef, 0xd7, 0x82,
+	0x29, 0xb1, 0x10, 0x63, 0x5c, 0x20, 0x41, 0x38, 0x53, 0xbb, 0xe6, 0x2f, 0x0d, 0x3c, 0xf0, 0x6a,
+	0x4d, 0x4f, 0x49, 0xba, 0x1b, 0x52, 0xc6, 0x3b, 0x70, 0x4b, 0xd5, 0xd4, 0xd5, 0x06, 0xda, 0xf0,
+	0x64, 0x34, 0x81, 0xed, 0x2f, 0x0d, 0x6e, 0xf1, 0x3c, 0x99, 0xbf, 0x89, 0x9d, 0xd5, 0x50, 0xe3,
+	0x2d, 0x38, 0x96, 0x15, 0x76, 0xf5, 0x41, 0x67, 0x78, 0x32, 0xf2, 0x0e, 0xc6, 0xbf, 0xa8, 0xd2,
+	0xaf, 0xd1, 0x15, 0xd2, 0xfc, 0x79, 0x04, 0x1e, 0xed, 0x63, 0xc7, 0xf8, 0xa2, 0x81, 0xbb, 0x5b,
+	0x1d, 0xae, 0x0a, 0x3e, 0x1b, 0x89, 0x46, 0x47, 0xd5, 0x3b, 0xdb, 0xab, 0xde, 0x97, 0x3c, 0xc2,
+	0xcf, 0x59, 0x91, 0xec, 0x1d, 0x3c, 0xbb, 0x83, 0xfe, 0x7b, 0x62, 0x7c, 0xd4, 0x40, 0xb7, 0x69,
+	0x5e, 0xbb, 0x7a, 0x65, 0x75, 0x7a, 0x83, 0x55, 0xf7, 0x5f, 0xba, 0xd2, 0x7d, 0xbd, 0x4a, 0xa5,
+	0xb1, 0xdd, 0x5b, 0xb3, 0x7b, 0x68, 0xe7, 0x73, 0xe3, 0x93, 0x06, 0xfa, 0x6d, 0xc7, 0xaf, 0xdb,
+	0x19, 0x74, 0x86, 0x67, 0xa3, 0xf9, 0xc1, 0x86, 0x2e, 0x8b, 0xa0, 0xc5, 0x93, 0xda, 0x9d, 0xdd,
+	0x47, 0x4d, 0x5b, 0x46, 0x00, 0x06, 0x84, 0x85, 0xb4, 0x88, 0xb0, 0x1f, 0xe1, 0x2b, 0x54, 0x50,
+	0xb1, 0x6d, 0xee, 0xa8, 0x9a, 0xe4, 0x5e, 0x6d, 0xae, 0x3e, 0x3b, 0x70, 0xcc, 0x39, 0x9d, 0x23,
+	0x5a, 0xe0, 0x59, 0x5f, 0x31, 0x26, 0x12, 0x71, 0x5d, 0xc3, 0xfc, 0xa1, 0x83, 0x87, 0x7b, 0xcc,
+	0xa1, 0xf1, 0xb9, 0x65, 0xac, 0xb2, 0x43, 0xc7, 0x6a, 0x9b, 0xdf, 0x3c, 0x55, 0xbb, 0x63, 0x77,
+	0x0c, 0xd5, 0x53, 0x70, 0x1a, 0xf2, 0x82, 0x89, 0xf2, 0xea, 0x2a, 0xbd, 0xe9, 0x55, 0x67, 0xfa,
+	0x5b, 0x9d, 0xb9, 0x14, 0x19, 0x61, 0xb1, 0xec, 0xcd, 0x89, 0xca, 0xf0, 0x4a, 0x80, 0x0b, 0x6e,
+	0x53, 0xc4, 0xe2, 0x02, 0xc5, 0x58, 0x12, 0x3a, 0x7b, 0x10, 0x4e, 0xeb, 0x94, 0x12, 0x31, 0xfe,
+	0xa3, 0x01, 0x33, 0xe4, 0xc9, 0x0d, 0x07, 0x7f, 0x6c, 0xb6, 0x5e, 0x54, 0xd3, 0x52, 0x67, 0xaa,
+	0xbd, 0x51, 0x1f, 0x26, 0x18, 0xf3, 0x52, 0x03, 0xf2, 0x2c, 0xb6, 0x62, 0xcc, 0x2a, 0x17, 0xf5,
+	0x85, 0x9b, 0x92, 0xbc, 0xe9, 0xbb, 0xf5, 0x58, 0xfe, 0x7c, 0xd5, 0x3b, 0x17, 0xae, 0xfb, 0x4d,
+	0x3f, 0xbf, 0x90, 0x30, 0x37, 0xca, 0xa1, 0x5c, 0x96, 0xab, 0xb9, 0x0d, 0xbd, 0x2a, 0xec, 0x7b,
+	0x1d, 0xb0, 0x70, 0xa3, 0x7c, 0xb1, 0x0e, 0x58, 0xcc, 0xed, 0x85, 0x0c, 0xf8, 0xad, 0x9b, 0xf2,
+	0xa9, 0xe3, 0xb8, 0x51, 0xee, 0x38, 0xeb, 0x10, 0xc7, 0x99, 0xdb, 0x8e, 0x23, 0x83, 0x82, 0xe3,
+	0xca, 0x9d, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x38, 0xfc, 0xef, 0xb7, 0x54, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/custom_parameter.pb.go b/googleapis/ads/googleads/v3/common/custom_parameter.pb.go
new file mode 100644
index 0000000..9ca0dbb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/custom_parameter.pb.go
@@ -0,0 +1,106 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/custom_parameter.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A mapping that can be used by custom parameter tags in a
+// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+type CustomParameter struct {
+	// The key matching the parameter tag name.
+	Key *wrappers.StringValue `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// The value to be substituted.
+	Value                *wrappers.StringValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomParameter) Reset()         { *m = CustomParameter{} }
+func (m *CustomParameter) String() string { return proto.CompactTextString(m) }
+func (*CustomParameter) ProtoMessage()    {}
+func (*CustomParameter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cab50381e27619f9, []int{0}
+}
+
+func (m *CustomParameter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomParameter.Unmarshal(m, b)
+}
+func (m *CustomParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomParameter.Marshal(b, m, deterministic)
+}
+func (m *CustomParameter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomParameter.Merge(m, src)
+}
+func (m *CustomParameter) XXX_Size() int {
+	return xxx_messageInfo_CustomParameter.Size(m)
+}
+func (m *CustomParameter) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomParameter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomParameter proto.InternalMessageInfo
+
+func (m *CustomParameter) GetKey() *wrappers.StringValue {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *CustomParameter) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomParameter)(nil), "google.ads.googleads.v3.common.CustomParameter")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/custom_parameter.proto", fileDescriptor_cab50381e27619f9)
+}
+
+var fileDescriptor_cab50381e27619f9 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xc4, 0x30,
+	0x10, 0x86, 0x69, 0x17, 0x3d, 0xd4, 0x83, 0xb0, 0x78, 0x58, 0x96, 0x65, 0x91, 0x3d, 0x79, 0x9a,
+	0xc0, 0x06, 0x2f, 0xf1, 0xd4, 0x5d, 0x61, 0xaf, 0x45, 0xa1, 0x07, 0x29, 0x48, 0xb6, 0x8d, 0xa1,
+	0xd8, 0x66, 0x42, 0x92, 0x56, 0x7c, 0x1d, 0x8f, 0x3e, 0x8a, 0x8f, 0xe2, 0xc5, 0x57, 0x90, 0x36,
+	0x6d, 0x0f, 0x82, 0xe2, 0x29, 0x7f, 0x32, 0xdf, 0x3f, 0xff, 0x64, 0xa2, 0x6b, 0x89, 0x28, 0x2b,
+	0x41, 0x78, 0x61, 0x89, 0x97, 0x9d, 0x6a, 0x29, 0xc9, 0xb1, 0xae, 0x51, 0x91, 0xbc, 0xb1, 0x0e,
+	0xeb, 0x47, 0xcd, 0x0d, 0xaf, 0x85, 0x13, 0x06, 0xb4, 0x41, 0x87, 0xf3, 0xb5, 0x67, 0x81, 0x17,
+	0x16, 0x26, 0x1b, 0xb4, 0x14, 0xbc, 0x6d, 0x39, 0xd4, 0x49, 0x4f, 0x1f, 0x9b, 0x27, 0xf2, 0x62,
+	0xb8, 0xd6, 0xc2, 0x58, 0xef, 0x5f, 0xae, 0xc6, 0x58, 0x5d, 0x12, 0xae, 0x14, 0x3a, 0xee, 0x4a,
+	0x54, 0x43, 0x75, 0xd3, 0x44, 0xe7, 0xfb, 0x3e, 0x37, 0x19, 0x63, 0xe7, 0x10, 0xcd, 0x9e, 0xc5,
+	0xeb, 0x22, 0xb8, 0x0c, 0xae, 0xce, 0xb6, 0xab, 0x21, 0x13, 0xc6, 0xf6, 0x70, 0xef, 0x4c, 0xa9,
+	0x64, 0xca, 0xab, 0x46, 0xdc, 0x75, 0xe0, 0x7c, 0x1b, 0x9d, 0xb4, 0xdd, 0x6d, 0x11, 0xfe, 0xc3,
+	0xe1, 0xd1, 0xdd, 0x57, 0x10, 0x6d, 0x72, 0xac, 0xe1, 0xef, 0xbf, 0xed, 0x2e, 0x7e, 0xcc, 0x96,
+	0x74, 0x2d, 0x93, 0xe0, 0xe1, 0x76, 0xf0, 0x49, 0xac, 0xb8, 0x92, 0x80, 0x46, 0x12, 0x29, 0x54,
+	0x1f, 0x38, 0xae, 0x56, 0x97, 0xf6, 0xb7, 0x4d, 0xdf, 0xf8, 0xe3, 0x2d, 0x9c, 0x1d, 0xe2, 0xf8,
+	0x3d, 0x5c, 0x1f, 0x7c, 0xb3, 0xb8, 0xb0, 0xe0, 0x65, 0xa7, 0x52, 0x0a, 0xfb, 0x1e, 0xfb, 0x18,
+	0x81, 0x2c, 0x2e, 0x6c, 0x36, 0x01, 0x59, 0x4a, 0x33, 0x0f, 0x7c, 0x86, 0x1b, 0xff, 0xca, 0x58,
+	0x5c, 0x58, 0xc6, 0x26, 0x84, 0xb1, 0x94, 0x32, 0xe6, 0xa1, 0xe3, 0x69, 0x3f, 0x1d, 0xfd, 0x0e,
+	0x00, 0x00, 0xff, 0xff, 0x1c, 0xe6, 0xc6, 0xe8, 0x06, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/dates.pb.go b/googleapis/ads/googleads/v3/common/dates.pb.go
new file mode 100644
index 0000000..cd2aec9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/dates.pb.go
@@ -0,0 +1,105 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/dates.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A date range.
+type DateRange struct {
+	// The start date, in yyyy-mm-dd format. This date is inclusive.
+	StartDate *wrappers.StringValue `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// The end date, in yyyy-mm-dd format. This date is inclusive.
+	EndDate              *wrappers.StringValue `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DateRange) Reset()         { *m = DateRange{} }
+func (m *DateRange) String() string { return proto.CompactTextString(m) }
+func (*DateRange) ProtoMessage()    {}
+func (*DateRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3aa948608f84b748, []int{0}
+}
+
+func (m *DateRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateRange.Unmarshal(m, b)
+}
+func (m *DateRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateRange.Marshal(b, m, deterministic)
+}
+func (m *DateRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateRange.Merge(m, src)
+}
+func (m *DateRange) XXX_Size() int {
+	return xxx_messageInfo_DateRange.Size(m)
+}
+func (m *DateRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateRange proto.InternalMessageInfo
+
+func (m *DateRange) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *DateRange) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*DateRange)(nil), "google.ads.googleads.v3.common.DateRange")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/dates.proto", fileDescriptor_3aa948608f84b748)
+}
+
+var fileDescriptor_3aa948608f84b748 = []byte{
+	// 302 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xb1, 0x6a, 0xf3, 0x30,
+	0x14, 0x85, 0xb1, 0x7f, 0xf8, 0xdb, 0xa8, 0x5b, 0xa6, 0x12, 0x42, 0x28, 0x9e, 0x4a, 0x07, 0x09,
+	0xaa, 0xa1, 0xa0, 0x4c, 0x4e, 0x03, 0x59, 0x43, 0x0a, 0x1e, 0x8a, 0xa1, 0xdc, 0x44, 0xaa, 0x30,
+	0xd8, 0xba, 0x46, 0x52, 0xd2, 0xb9, 0xaf, 0xd2, 0xb1, 0x8f, 0xd2, 0xf7, 0xe8, 0xd2, 0xa7, 0x28,
+	0xb2, 0x6c, 0x6f, 0x2d, 0x9d, 0x7c, 0xf0, 0xfd, 0xce, 0x39, 0x57, 0x97, 0xdc, 0x68, 0x44, 0x5d,
+	0x2b, 0x06, 0xd2, 0xb1, 0x28, 0x83, 0x3a, 0x71, 0x76, 0xc0, 0xa6, 0x41, 0xc3, 0x24, 0x78, 0xe5,
+	0x68, 0x6b, 0xd1, 0xe3, 0x74, 0x11, 0x01, 0x0a, 0xd2, 0xd1, 0x91, 0xa5, 0x27, 0x4e, 0x23, 0x3b,
+	0xeb, 0xe7, 0xac, 0xa3, 0xf7, 0xc7, 0x67, 0xf6, 0x62, 0xa1, 0x6d, 0x95, 0xed, 0xfd, 0xb3, 0xf9,
+	0xd0, 0xd5, 0x56, 0x0c, 0x8c, 0x41, 0x0f, 0xbe, 0x42, 0xd3, 0x4f, 0xb3, 0xd7, 0x84, 0x4c, 0xd6,
+	0xe0, 0xd5, 0x0e, 0x8c, 0x56, 0xd3, 0x25, 0x21, 0xce, 0x83, 0xf5, 0x4f, 0x61, 0x81, 0xcb, 0xe4,
+	0x2a, 0xb9, 0xbe, 0xb8, 0x9d, 0xf7, 0xad, 0x74, 0x28, 0xa0, 0x0f, 0xde, 0x56, 0x46, 0x17, 0x50,
+	0x1f, 0xd5, 0x6e, 0xd2, 0xf1, 0x21, 0x61, 0x7a, 0x47, 0xce, 0x95, 0x91, 0xd1, 0x9a, 0xfe, 0xc1,
+	0x7a, 0xa6, 0x8c, 0x0c, 0xc6, 0xd5, 0x67, 0x42, 0xb2, 0x03, 0x36, 0xf4, 0xf7, 0x87, 0xae, 0x48,
+	0x80, 0xdd, 0x36, 0x44, 0x6d, 0x93, 0xc7, 0x75, 0x4f, 0x6b, 0xac, 0xc1, 0x68, 0x8a, 0x56, 0x33,
+	0xad, 0x4c, 0x57, 0x34, 0x9c, 0xb4, 0xad, 0xdc, 0x4f, 0x17, 0x5e, 0xc6, 0xcf, 0x5b, 0xfa, 0x6f,
+	0x93, 0xe7, 0xef, 0xe9, 0x62, 0x13, 0xc3, 0x72, 0xe9, 0x68, 0x94, 0x41, 0x15, 0x9c, 0xde, 0x77,
+	0xd8, 0xc7, 0x00, 0x94, 0xb9, 0x74, 0xe5, 0x08, 0x94, 0x05, 0x2f, 0x23, 0xf0, 0x95, 0x66, 0xf1,
+	0xaf, 0x10, 0xb9, 0x74, 0x42, 0x8c, 0x88, 0x10, 0x05, 0x17, 0x22, 0x42, 0xfb, 0xff, 0xdd, 0x76,
+	0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x30, 0x9a, 0x13, 0xbc, 0xfe, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/explorer_auto_optimizer_setting.pb.go b/googleapis/ads/googleads/v3/common/explorer_auto_optimizer_setting.pb.go
new file mode 100644
index 0000000..1eab953
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/explorer_auto_optimizer_setting.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/explorer_auto_optimizer_setting.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Settings for the Display Campaign Optimizer, initially named "Explorer".
+// Learn more about
+// [automatic targeting](https://support.google.com/google-ads/answer/190596).
+type ExplorerAutoOptimizerSetting struct {
+	// Indicates whether the optimizer is turned on.
+	OptIn                *wrappers.BoolValue `protobuf:"bytes,1,opt,name=opt_in,json=optIn,proto3" json:"opt_in,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ExplorerAutoOptimizerSetting) Reset()         { *m = ExplorerAutoOptimizerSetting{} }
+func (m *ExplorerAutoOptimizerSetting) String() string { return proto.CompactTextString(m) }
+func (*ExplorerAutoOptimizerSetting) ProtoMessage()    {}
+func (*ExplorerAutoOptimizerSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6617ac5cefce7126, []int{0}
+}
+
+func (m *ExplorerAutoOptimizerSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Unmarshal(m, b)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Marshal(b, m, deterministic)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExplorerAutoOptimizerSetting.Merge(m, src)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Size() int {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Size(m)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExplorerAutoOptimizerSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExplorerAutoOptimizerSetting proto.InternalMessageInfo
+
+func (m *ExplorerAutoOptimizerSetting) GetOptIn() *wrappers.BoolValue {
+	if m != nil {
+		return m.OptIn
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ExplorerAutoOptimizerSetting)(nil), "google.ads.googleads.v3.common.ExplorerAutoOptimizerSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/explorer_auto_optimizer_setting.proto", fileDescriptor_6617ac5cefce7126)
+}
+
+var fileDescriptor_6617ac5cefce7126 = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4e, 0xc3, 0x30,
+	0x10, 0x86, 0x95, 0x22, 0x3a, 0x84, 0xad, 0x13, 0xaa, 0xaa, 0x0a, 0x3a, 0x31, 0x9d, 0x05, 0xde,
+	0xcc, 0xe4, 0x02, 0xaa, 0x98, 0x28, 0x20, 0x65, 0x40, 0x91, 0x22, 0xb7, 0x31, 0x96, 0xa5, 0xc4,
+	0x67, 0xd9, 0x4e, 0x41, 0x3c, 0x0e, 0x23, 0x8f, 0xc2, 0xa3, 0xf0, 0x0c, 0x0c, 0xa8, 0x71, 0x92,
+	0x8d, 0x4e, 0xf9, 0x15, 0x7f, 0xf7, 0xdf, 0xa7, 0x4b, 0x6f, 0x15, 0xa2, 0xaa, 0x24, 0x11, 0xa5,
+	0x27, 0x31, 0xee, 0xd3, 0x8e, 0x92, 0x2d, 0xd6, 0x35, 0x1a, 0x22, 0xdf, 0x6d, 0x85, 0x4e, 0xba,
+	0x42, 0x34, 0x01, 0x0b, 0xb4, 0x41, 0xd7, 0xfa, 0x43, 0xba, 0xc2, 0xcb, 0x10, 0xb4, 0x51, 0x60,
+	0x1d, 0x06, 0x9c, 0xcc, 0xe3, 0x28, 0x88, 0xd2, 0xc3, 0xd0, 0x02, 0x3b, 0x0a, 0xb1, 0x65, 0xda,
+	0xbd, 0x93, 0x96, 0xde, 0x34, 0xaf, 0xe4, 0xcd, 0x09, 0x6b, 0xa5, 0xf3, 0x71, 0x7e, 0x3a, 0xeb,
+	0x2d, 0xac, 0x26, 0xc2, 0x18, 0x0c, 0x22, 0x68, 0x34, 0xdd, 0xeb, 0xe2, 0x31, 0x9d, 0xdd, 0x75,
+	0x1a, 0xbc, 0x09, 0xf8, 0xd0, 0x4b, 0x3c, 0x47, 0x87, 0xc9, 0x65, 0x3a, 0x46, 0x1b, 0x0a, 0x6d,
+	0x4e, 0x93, 0xb3, 0xe4, 0xe2, 0xe4, 0x6a, 0xda, 0x39, 0x40, 0xbf, 0x0e, 0x96, 0x88, 0x55, 0x26,
+	0xaa, 0x46, 0x3e, 0x1d, 0xa3, 0x0d, 0xf7, 0x66, 0xf9, 0x9b, 0xa4, 0x8b, 0x2d, 0xd6, 0x70, 0xd8,
+	0x7b, 0x79, 0x7e, 0x68, 0xef, 0x7a, 0xdf, 0xbe, 0x4e, 0x5e, 0xba, 0x13, 0x82, 0xc2, 0x4a, 0x18,
+	0x05, 0xe8, 0x14, 0x51, 0xd2, 0xb4, 0xbb, 0xfb, 0x93, 0x5a, 0xed, 0xff, 0xbb, 0xf0, 0x75, 0xfc,
+	0x7c, 0x8e, 0x8e, 0x56, 0x9c, 0x7f, 0x8d, 0xe6, 0xab, 0x58, 0xc6, 0x4b, 0x0f, 0x31, 0xee, 0x53,
+	0x46, 0xe1, 0xa6, 0xc5, 0xbe, 0x7b, 0x20, 0xe7, 0xa5, 0xcf, 0x07, 0x20, 0xcf, 0x68, 0x1e, 0x81,
+	0x9f, 0xd1, 0x22, 0xfe, 0x65, 0x8c, 0x97, 0x9e, 0xb1, 0x01, 0x61, 0x2c, 0xa3, 0x8c, 0x45, 0x68,
+	0x33, 0x6e, 0xed, 0xe8, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x57, 0x3e, 0xe1, 0xfe, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/extensions.pb.go b/googleapis/ads/googleads/v3/common/extensions.pb.go
new file mode 100644
index 0000000..97da100
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/extensions.pb.go
@@ -0,0 +1,1325 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/extensions.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents an App extension.
+type AppFeedItem struct {
+	// The visible text displayed when the link is rendered in an ad.
+	// This string must not be empty, and the length of this string should
+	// be between 1 and 25, inclusive.
+	LinkText *wrappers.StringValue `protobuf:"bytes,1,opt,name=link_text,json=linkText,proto3" json:"link_text,omitempty"`
+	// The store-specific ID for the target application.
+	// This string must not be empty.
+	AppId *wrappers.StringValue `protobuf:"bytes,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// The application store that the target application belongs to.
+	// This field is required.
+	AppStore enums.AppStoreEnum_AppStore `protobuf:"varint,3,opt,name=app_store,json=appStore,proto3,enum=google.ads.googleads.v3.enums.AppStoreEnum_AppStore" json:"app_store,omitempty"`
+	// A list of possible final URLs after all cross domain redirects.
+	// This list must not be empty.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,4,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of possible final mobile URLs after all cross domain redirects.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,5,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// URL template for constructing a tracking URL. Default value is "{lpurl}".
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,6,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// A list of mappings to be used for substituting URL custom parameter tags in
+	// the tracking_url_template, final_urls, and/or final_mobile_urls.
+	UrlCustomParameters []*CustomParameter `protobuf:"bytes,7,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// URL template for appending params to landing page URLs served with parallel
+	// tracking.
+	FinalUrlSuffix       *wrappers.StringValue `protobuf:"bytes,8,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AppFeedItem) Reset()         { *m = AppFeedItem{} }
+func (m *AppFeedItem) String() string { return proto.CompactTextString(m) }
+func (*AppFeedItem) ProtoMessage()    {}
+func (*AppFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{0}
+}
+
+func (m *AppFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppFeedItem.Unmarshal(m, b)
+}
+func (m *AppFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppFeedItem.Marshal(b, m, deterministic)
+}
+func (m *AppFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppFeedItem.Merge(m, src)
+}
+func (m *AppFeedItem) XXX_Size() int {
+	return xxx_messageInfo_AppFeedItem.Size(m)
+}
+func (m *AppFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppFeedItem proto.InternalMessageInfo
+
+func (m *AppFeedItem) GetLinkText() *wrappers.StringValue {
+	if m != nil {
+		return m.LinkText
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetAppStore() enums.AppStoreEnum_AppStore {
+	if m != nil {
+		return m.AppStore
+	}
+	return enums.AppStoreEnum_UNSPECIFIED
+}
+
+func (m *AppFeedItem) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetUrlCustomParameters() []*CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *AppFeedItem) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+// Represents a Call extension.
+type CallFeedItem struct {
+	// The advertiser's phone number to append to the ad.
+	// This string must not be empty.
+	PhoneNumber *wrappers.StringValue `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	// Uppercase two-letter country code of the advertiser's phone number.
+	// This string must not be empty.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Indicates whether call tracking is enabled. By default, call tracking is
+	// not enabled.
+	CallTrackingEnabled *wrappers.BoolValue `protobuf:"bytes,3,opt,name=call_tracking_enabled,json=callTrackingEnabled,proto3" json:"call_tracking_enabled,omitempty"`
+	// The conversion action to attribute a call conversion to. If not set a
+	// default conversion action is used. This field only has effect if
+	// call_tracking_enabled is set to true. Otherwise this field is ignored.
+	CallConversionAction *wrappers.StringValue `protobuf:"bytes,4,opt,name=call_conversion_action,json=callConversionAction,proto3" json:"call_conversion_action,omitempty"`
+	// If true, disable call conversion tracking. call_conversion_action should
+	// not be set if this is true. Optional.
+	CallConversionTrackingDisabled *wrappers.BoolValue `protobuf:"bytes,5,opt,name=call_conversion_tracking_disabled,json=callConversionTrackingDisabled,proto3" json:"call_conversion_tracking_disabled,omitempty"`
+	// Enum value that indicates whether this call extension uses its own call
+	// conversion setting (or just have call conversion disabled), or following
+	// the account level setting.
+	CallConversionReportingState enums.CallConversionReportingStateEnum_CallConversionReportingState `protobuf:"varint,6,opt,name=call_conversion_reporting_state,json=callConversionReportingState,proto3,enum=google.ads.googleads.v3.enums.CallConversionReportingStateEnum_CallConversionReportingState" json:"call_conversion_reporting_state,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}                                                            `json:"-"`
+	XXX_unrecognized             []byte                                                              `json:"-"`
+	XXX_sizecache                int32                                                               `json:"-"`
+}
+
+func (m *CallFeedItem) Reset()         { *m = CallFeedItem{} }
+func (m *CallFeedItem) String() string { return proto.CompactTextString(m) }
+func (*CallFeedItem) ProtoMessage()    {}
+func (*CallFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{1}
+}
+
+func (m *CallFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallFeedItem.Unmarshal(m, b)
+}
+func (m *CallFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallFeedItem.Marshal(b, m, deterministic)
+}
+func (m *CallFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallFeedItem.Merge(m, src)
+}
+func (m *CallFeedItem) XXX_Size() int {
+	return xxx_messageInfo_CallFeedItem.Size(m)
+}
+func (m *CallFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallFeedItem proto.InternalMessageInfo
+
+func (m *CallFeedItem) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+func (m *CallFeedItem) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *CallFeedItem) GetCallTrackingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallTrackingEnabled
+	}
+	return nil
+}
+
+func (m *CallFeedItem) GetCallConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.CallConversionAction
+	}
+	return nil
+}
+
+func (m *CallFeedItem) GetCallConversionTrackingDisabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallConversionTrackingDisabled
+	}
+	return nil
+}
+
+func (m *CallFeedItem) GetCallConversionReportingState() enums.CallConversionReportingStateEnum_CallConversionReportingState {
+	if m != nil {
+		return m.CallConversionReportingState
+	}
+	return enums.CallConversionReportingStateEnum_UNSPECIFIED
+}
+
+// Represents a callout extension.
+type CalloutFeedItem struct {
+	// The callout text.
+	// The length of this string should be between 1 and 25, inclusive.
+	CalloutText          *wrappers.StringValue `protobuf:"bytes,1,opt,name=callout_text,json=calloutText,proto3" json:"callout_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CalloutFeedItem) Reset()         { *m = CalloutFeedItem{} }
+func (m *CalloutFeedItem) String() string { return proto.CompactTextString(m) }
+func (*CalloutFeedItem) ProtoMessage()    {}
+func (*CalloutFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{2}
+}
+
+func (m *CalloutFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CalloutFeedItem.Unmarshal(m, b)
+}
+func (m *CalloutFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CalloutFeedItem.Marshal(b, m, deterministic)
+}
+func (m *CalloutFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CalloutFeedItem.Merge(m, src)
+}
+func (m *CalloutFeedItem) XXX_Size() int {
+	return xxx_messageInfo_CalloutFeedItem.Size(m)
+}
+func (m *CalloutFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_CalloutFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CalloutFeedItem proto.InternalMessageInfo
+
+func (m *CalloutFeedItem) GetCalloutText() *wrappers.StringValue {
+	if m != nil {
+		return m.CalloutText
+	}
+	return nil
+}
+
+// Represents a location extension.
+type LocationFeedItem struct {
+	// The name of the business.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,1,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// Line 1 of the business address.
+	AddressLine_1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=address_line_1,json=addressLine1,proto3" json:"address_line_1,omitempty"`
+	// Line 2 of the business address.
+	AddressLine_2 *wrappers.StringValue `protobuf:"bytes,3,opt,name=address_line_2,json=addressLine2,proto3" json:"address_line_2,omitempty"`
+	// City of the business address.
+	City *wrappers.StringValue `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`
+	// Province of the business address.
+	Province *wrappers.StringValue `protobuf:"bytes,5,opt,name=province,proto3" json:"province,omitempty"`
+	// Postal code of the business address.
+	PostalCode *wrappers.StringValue `protobuf:"bytes,6,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	// Country code of the business address.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,7,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Phone number of the business.
+	PhoneNumber          *wrappers.StringValue `protobuf:"bytes,8,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LocationFeedItem) Reset()         { *m = LocationFeedItem{} }
+func (m *LocationFeedItem) String() string { return proto.CompactTextString(m) }
+func (*LocationFeedItem) ProtoMessage()    {}
+func (*LocationFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{3}
+}
+
+func (m *LocationFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationFeedItem.Unmarshal(m, b)
+}
+func (m *LocationFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationFeedItem.Marshal(b, m, deterministic)
+}
+func (m *LocationFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationFeedItem.Merge(m, src)
+}
+func (m *LocationFeedItem) XXX_Size() int {
+	return xxx_messageInfo_LocationFeedItem.Size(m)
+}
+func (m *LocationFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationFeedItem proto.InternalMessageInfo
+
+func (m *LocationFeedItem) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetAddressLine_1() *wrappers.StringValue {
+	if m != nil {
+		return m.AddressLine_1
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetAddressLine_2() *wrappers.StringValue {
+	if m != nil {
+		return m.AddressLine_2
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetCity() *wrappers.StringValue {
+	if m != nil {
+		return m.City
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetProvince() *wrappers.StringValue {
+	if m != nil {
+		return m.Province
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetPostalCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PostalCode
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *LocationFeedItem) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+// Represents an affiliate location extension.
+type AffiliateLocationFeedItem struct {
+	// The name of the business.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,1,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// Line 1 of the business address.
+	AddressLine_1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=address_line_1,json=addressLine1,proto3" json:"address_line_1,omitempty"`
+	// Line 2 of the business address.
+	AddressLine_2 *wrappers.StringValue `protobuf:"bytes,3,opt,name=address_line_2,json=addressLine2,proto3" json:"address_line_2,omitempty"`
+	// City of the business address.
+	City *wrappers.StringValue `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`
+	// Province of the business address.
+	Province *wrappers.StringValue `protobuf:"bytes,5,opt,name=province,proto3" json:"province,omitempty"`
+	// Postal code of the business address.
+	PostalCode *wrappers.StringValue `protobuf:"bytes,6,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	// Country code of the business address.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,7,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Phone number of the business.
+	PhoneNumber *wrappers.StringValue `protobuf:"bytes,8,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	// Id of the retail chain that is advertised as a seller of your product.
+	ChainId *wrappers.Int64Value `protobuf:"bytes,9,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
+	// Name of chain.
+	ChainName            *wrappers.StringValue `protobuf:"bytes,10,opt,name=chain_name,json=chainName,proto3" json:"chain_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AffiliateLocationFeedItem) Reset()         { *m = AffiliateLocationFeedItem{} }
+func (m *AffiliateLocationFeedItem) String() string { return proto.CompactTextString(m) }
+func (*AffiliateLocationFeedItem) ProtoMessage()    {}
+func (*AffiliateLocationFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{4}
+}
+
+func (m *AffiliateLocationFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AffiliateLocationFeedItem.Unmarshal(m, b)
+}
+func (m *AffiliateLocationFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AffiliateLocationFeedItem.Marshal(b, m, deterministic)
+}
+func (m *AffiliateLocationFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AffiliateLocationFeedItem.Merge(m, src)
+}
+func (m *AffiliateLocationFeedItem) XXX_Size() int {
+	return xxx_messageInfo_AffiliateLocationFeedItem.Size(m)
+}
+func (m *AffiliateLocationFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_AffiliateLocationFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AffiliateLocationFeedItem proto.InternalMessageInfo
+
+func (m *AffiliateLocationFeedItem) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetAddressLine_1() *wrappers.StringValue {
+	if m != nil {
+		return m.AddressLine_1
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetAddressLine_2() *wrappers.StringValue {
+	if m != nil {
+		return m.AddressLine_2
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetCity() *wrappers.StringValue {
+	if m != nil {
+		return m.City
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetProvince() *wrappers.StringValue {
+	if m != nil {
+		return m.Province
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetPostalCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PostalCode
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetChainId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ChainId
+	}
+	return nil
+}
+
+func (m *AffiliateLocationFeedItem) GetChainName() *wrappers.StringValue {
+	if m != nil {
+		return m.ChainName
+	}
+	return nil
+}
+
+// An extension that users can click on to send a text message to the
+// advertiser.
+type TextMessageFeedItem struct {
+	// The business name to prepend to the message text.
+	// This field is required.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,1,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// Uppercase two-letter country code of the advertiser's phone number.
+	// This field is required.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// The advertiser's phone number the message will be sent to. Required.
+	PhoneNumber *wrappers.StringValue `protobuf:"bytes,3,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	// The text to show in the ad.
+	// This field is required.
+	Text *wrappers.StringValue `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The message text populated in the messaging app.
+	ExtensionText        *wrappers.StringValue `protobuf:"bytes,5,opt,name=extension_text,json=extensionText,proto3" json:"extension_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TextMessageFeedItem) Reset()         { *m = TextMessageFeedItem{} }
+func (m *TextMessageFeedItem) String() string { return proto.CompactTextString(m) }
+func (*TextMessageFeedItem) ProtoMessage()    {}
+func (*TextMessageFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{5}
+}
+
+func (m *TextMessageFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TextMessageFeedItem.Unmarshal(m, b)
+}
+func (m *TextMessageFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TextMessageFeedItem.Marshal(b, m, deterministic)
+}
+func (m *TextMessageFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TextMessageFeedItem.Merge(m, src)
+}
+func (m *TextMessageFeedItem) XXX_Size() int {
+	return xxx_messageInfo_TextMessageFeedItem.Size(m)
+}
+func (m *TextMessageFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_TextMessageFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TextMessageFeedItem proto.InternalMessageInfo
+
+func (m *TextMessageFeedItem) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *TextMessageFeedItem) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *TextMessageFeedItem) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+func (m *TextMessageFeedItem) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *TextMessageFeedItem) GetExtensionText() *wrappers.StringValue {
+	if m != nil {
+		return m.ExtensionText
+	}
+	return nil
+}
+
+// Represents a Price extension.
+type PriceFeedItem struct {
+	// Price extension type of this extension.
+	Type enums.PriceExtensionTypeEnum_PriceExtensionType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.PriceExtensionTypeEnum_PriceExtensionType" json:"type,omitempty"`
+	// Price qualifier for all offers of this price extension.
+	PriceQualifier enums.PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier `protobuf:"varint,2,opt,name=price_qualifier,json=priceQualifier,proto3,enum=google.ads.googleads.v3.enums.PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier" json:"price_qualifier,omitempty"`
+	// Tracking URL template for all offers of this price extension.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,3,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The code of the language used for this price extension.
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,4,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// The price offerings in this price extension.
+	PriceOfferings []*PriceOffer `protobuf:"bytes,5,rep,name=price_offerings,json=priceOfferings,proto3" json:"price_offerings,omitempty"`
+	// URL template for appending params to landing page URLs served with parallel
+	// tracking.
+	FinalUrlSuffix       *wrappers.StringValue `protobuf:"bytes,6,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PriceFeedItem) Reset()         { *m = PriceFeedItem{} }
+func (m *PriceFeedItem) String() string { return proto.CompactTextString(m) }
+func (*PriceFeedItem) ProtoMessage()    {}
+func (*PriceFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{6}
+}
+
+func (m *PriceFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PriceFeedItem.Unmarshal(m, b)
+}
+func (m *PriceFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PriceFeedItem.Marshal(b, m, deterministic)
+}
+func (m *PriceFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PriceFeedItem.Merge(m, src)
+}
+func (m *PriceFeedItem) XXX_Size() int {
+	return xxx_messageInfo_PriceFeedItem.Size(m)
+}
+func (m *PriceFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_PriceFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PriceFeedItem proto.InternalMessageInfo
+
+func (m *PriceFeedItem) GetType() enums.PriceExtensionTypeEnum_PriceExtensionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.PriceExtensionTypeEnum_UNSPECIFIED
+}
+
+func (m *PriceFeedItem) GetPriceQualifier() enums.PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier {
+	if m != nil {
+		return m.PriceQualifier
+	}
+	return enums.PriceExtensionPriceQualifierEnum_UNSPECIFIED
+}
+
+func (m *PriceFeedItem) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *PriceFeedItem) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func (m *PriceFeedItem) GetPriceOfferings() []*PriceOffer {
+	if m != nil {
+		return m.PriceOfferings
+	}
+	return nil
+}
+
+func (m *PriceFeedItem) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+// Represents one price offer in a price extension.
+type PriceOffer struct {
+	// Header text of this offer.
+	Header *wrappers.StringValue `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+	// Description text of this offer.
+	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Price value of this offer.
+	Price *Money `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
+	// Price unit for this offer.
+	Unit enums.PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit `protobuf:"varint,4,opt,name=unit,proto3,enum=google.ads.googleads.v3.enums.PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit" json:"unit,omitempty"`
+	// A list of possible final URLs after all cross domain redirects.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,5,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of possible final mobile URLs after all cross domain redirects.
+	FinalMobileUrls      []*wrappers.StringValue `protobuf:"bytes,6,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PriceOffer) Reset()         { *m = PriceOffer{} }
+func (m *PriceOffer) String() string { return proto.CompactTextString(m) }
+func (*PriceOffer) ProtoMessage()    {}
+func (*PriceOffer) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{7}
+}
+
+func (m *PriceOffer) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PriceOffer.Unmarshal(m, b)
+}
+func (m *PriceOffer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PriceOffer.Marshal(b, m, deterministic)
+}
+func (m *PriceOffer) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PriceOffer.Merge(m, src)
+}
+func (m *PriceOffer) XXX_Size() int {
+	return xxx_messageInfo_PriceOffer.Size(m)
+}
+func (m *PriceOffer) XXX_DiscardUnknown() {
+	xxx_messageInfo_PriceOffer.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PriceOffer proto.InternalMessageInfo
+
+func (m *PriceOffer) GetHeader() *wrappers.StringValue {
+	if m != nil {
+		return m.Header
+	}
+	return nil
+}
+
+func (m *PriceOffer) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *PriceOffer) GetPrice() *Money {
+	if m != nil {
+		return m.Price
+	}
+	return nil
+}
+
+func (m *PriceOffer) GetUnit() enums.PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit {
+	if m != nil {
+		return m.Unit
+	}
+	return enums.PriceExtensionPriceUnitEnum_UNSPECIFIED
+}
+
+func (m *PriceOffer) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *PriceOffer) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+// Represents a Promotion extension.
+type PromotionFeedItem struct {
+	// A freeform description of what the promotion is targeting.
+	// This field is required.
+	PromotionTarget *wrappers.StringValue `protobuf:"bytes,1,opt,name=promotion_target,json=promotionTarget,proto3" json:"promotion_target,omitempty"`
+	// Enum that modifies the qualification of the discount.
+	DiscountModifier enums.PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier `protobuf:"varint,2,opt,name=discount_modifier,json=discountModifier,proto3,enum=google.ads.googleads.v3.enums.PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier" json:"discount_modifier,omitempty"`
+	// Start date of when the promotion is eligible to be redeemed.
+	PromotionStartDate *wrappers.StringValue `protobuf:"bytes,7,opt,name=promotion_start_date,json=promotionStartDate,proto3" json:"promotion_start_date,omitempty"`
+	// End date of when the promotion is eligible to be redeemed.
+	PromotionEndDate *wrappers.StringValue `protobuf:"bytes,8,opt,name=promotion_end_date,json=promotionEndDate,proto3" json:"promotion_end_date,omitempty"`
+	// The occasion the promotion was intended for.
+	// If an occasion is set, the redemption window will need to fall within
+	// the date range associated with the occasion.
+	Occasion enums.PromotionExtensionOccasionEnum_PromotionExtensionOccasion `protobuf:"varint,9,opt,name=occasion,proto3,enum=google.ads.googleads.v3.enums.PromotionExtensionOccasionEnum_PromotionExtensionOccasion" json:"occasion,omitempty"`
+	// A list of possible final URLs after all cross domain redirects.
+	// This field is required.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,10,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of possible final mobile URLs after all cross domain redirects.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,11,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,12,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// A list of mappings to be used for substituting URL custom parameter tags in
+	// the tracking_url_template, final_urls, and/or final_mobile_urls.
+	UrlCustomParameters []*CustomParameter `protobuf:"bytes,13,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// URL template for appending params to landing page URLs served with parallel
+	// tracking.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,14,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// The language of the promotion.
+	// Represented as BCP 47 language tag.
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,15,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// Discount type, can be percentage off or amount off.
+	//
+	// Types that are valid to be assigned to DiscountType:
+	//	*PromotionFeedItem_PercentOff
+	//	*PromotionFeedItem_MoneyAmountOff
+	DiscountType isPromotionFeedItem_DiscountType `protobuf_oneof:"discount_type"`
+	// Promotion trigger. Can be by promotion code or promo by eligible order
+	// amount.
+	//
+	// Types that are valid to be assigned to PromotionTrigger:
+	//	*PromotionFeedItem_PromotionCode
+	//	*PromotionFeedItem_OrdersOverAmount
+	PromotionTrigger     isPromotionFeedItem_PromotionTrigger `protobuf_oneof:"promotion_trigger"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *PromotionFeedItem) Reset()         { *m = PromotionFeedItem{} }
+func (m *PromotionFeedItem) String() string { return proto.CompactTextString(m) }
+func (*PromotionFeedItem) ProtoMessage()    {}
+func (*PromotionFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{8}
+}
+
+func (m *PromotionFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromotionFeedItem.Unmarshal(m, b)
+}
+func (m *PromotionFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromotionFeedItem.Marshal(b, m, deterministic)
+}
+func (m *PromotionFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromotionFeedItem.Merge(m, src)
+}
+func (m *PromotionFeedItem) XXX_Size() int {
+	return xxx_messageInfo_PromotionFeedItem.Size(m)
+}
+func (m *PromotionFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromotionFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromotionFeedItem proto.InternalMessageInfo
+
+func (m *PromotionFeedItem) GetPromotionTarget() *wrappers.StringValue {
+	if m != nil {
+		return m.PromotionTarget
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetDiscountModifier() enums.PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier {
+	if m != nil {
+		return m.DiscountModifier
+	}
+	return enums.PromotionExtensionDiscountModifierEnum_UNSPECIFIED
+}
+
+func (m *PromotionFeedItem) GetPromotionStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.PromotionStartDate
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetPromotionEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.PromotionEndDate
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetOccasion() enums.PromotionExtensionOccasionEnum_PromotionExtensionOccasion {
+	if m != nil {
+		return m.Occasion
+	}
+	return enums.PromotionExtensionOccasionEnum_UNSPECIFIED
+}
+
+func (m *PromotionFeedItem) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetUrlCustomParameters() []*CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+type isPromotionFeedItem_DiscountType interface {
+	isPromotionFeedItem_DiscountType()
+}
+
+type PromotionFeedItem_PercentOff struct {
+	PercentOff *wrappers.Int64Value `protobuf:"bytes,3,opt,name=percent_off,json=percentOff,proto3,oneof"`
+}
+
+type PromotionFeedItem_MoneyAmountOff struct {
+	MoneyAmountOff *Money `protobuf:"bytes,4,opt,name=money_amount_off,json=moneyAmountOff,proto3,oneof"`
+}
+
+func (*PromotionFeedItem_PercentOff) isPromotionFeedItem_DiscountType() {}
+
+func (*PromotionFeedItem_MoneyAmountOff) isPromotionFeedItem_DiscountType() {}
+
+func (m *PromotionFeedItem) GetDiscountType() isPromotionFeedItem_DiscountType {
+	if m != nil {
+		return m.DiscountType
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetPercentOff() *wrappers.Int64Value {
+	if x, ok := m.GetDiscountType().(*PromotionFeedItem_PercentOff); ok {
+		return x.PercentOff
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetMoneyAmountOff() *Money {
+	if x, ok := m.GetDiscountType().(*PromotionFeedItem_MoneyAmountOff); ok {
+		return x.MoneyAmountOff
+	}
+	return nil
+}
+
+type isPromotionFeedItem_PromotionTrigger interface {
+	isPromotionFeedItem_PromotionTrigger()
+}
+
+type PromotionFeedItem_PromotionCode struct {
+	PromotionCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=promotion_code,json=promotionCode,proto3,oneof"`
+}
+
+type PromotionFeedItem_OrdersOverAmount struct {
+	OrdersOverAmount *Money `protobuf:"bytes,6,opt,name=orders_over_amount,json=ordersOverAmount,proto3,oneof"`
+}
+
+func (*PromotionFeedItem_PromotionCode) isPromotionFeedItem_PromotionTrigger() {}
+
+func (*PromotionFeedItem_OrdersOverAmount) isPromotionFeedItem_PromotionTrigger() {}
+
+func (m *PromotionFeedItem) GetPromotionTrigger() isPromotionFeedItem_PromotionTrigger {
+	if m != nil {
+		return m.PromotionTrigger
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetPromotionCode() *wrappers.StringValue {
+	if x, ok := m.GetPromotionTrigger().(*PromotionFeedItem_PromotionCode); ok {
+		return x.PromotionCode
+	}
+	return nil
+}
+
+func (m *PromotionFeedItem) GetOrdersOverAmount() *Money {
+	if x, ok := m.GetPromotionTrigger().(*PromotionFeedItem_OrdersOverAmount); ok {
+		return x.OrdersOverAmount
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PromotionFeedItem) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*PromotionFeedItem_PercentOff)(nil),
+		(*PromotionFeedItem_MoneyAmountOff)(nil),
+		(*PromotionFeedItem_PromotionCode)(nil),
+		(*PromotionFeedItem_OrdersOverAmount)(nil),
+	}
+}
+
+// Represents a structured snippet extension.
+type StructuredSnippetFeedItem struct {
+	// The header of the snippet.
+	// This string must not be empty.
+	Header *wrappers.StringValue `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+	// The values in the snippet.
+	// The maximum size of this collection is 10.
+	Values               []*wrappers.StringValue `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *StructuredSnippetFeedItem) Reset()         { *m = StructuredSnippetFeedItem{} }
+func (m *StructuredSnippetFeedItem) String() string { return proto.CompactTextString(m) }
+func (*StructuredSnippetFeedItem) ProtoMessage()    {}
+func (*StructuredSnippetFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{9}
+}
+
+func (m *StructuredSnippetFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StructuredSnippetFeedItem.Unmarshal(m, b)
+}
+func (m *StructuredSnippetFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StructuredSnippetFeedItem.Marshal(b, m, deterministic)
+}
+func (m *StructuredSnippetFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StructuredSnippetFeedItem.Merge(m, src)
+}
+func (m *StructuredSnippetFeedItem) XXX_Size() int {
+	return xxx_messageInfo_StructuredSnippetFeedItem.Size(m)
+}
+func (m *StructuredSnippetFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_StructuredSnippetFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StructuredSnippetFeedItem proto.InternalMessageInfo
+
+func (m *StructuredSnippetFeedItem) GetHeader() *wrappers.StringValue {
+	if m != nil {
+		return m.Header
+	}
+	return nil
+}
+
+func (m *StructuredSnippetFeedItem) GetValues() []*wrappers.StringValue {
+	if m != nil {
+		return m.Values
+	}
+	return nil
+}
+
+// Represents a sitelink extension.
+type SitelinkFeedItem struct {
+	// URL display text for the sitelink.
+	// The length of this string should be between 1 and 25, inclusive.
+	LinkText *wrappers.StringValue `protobuf:"bytes,1,opt,name=link_text,json=linkText,proto3" json:"link_text,omitempty"`
+	// First line of the description for the sitelink.
+	// If this value is set, line2 must also be set.
+	// The length of this string should be between 0 and 35, inclusive.
+	Line1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=line1,proto3" json:"line1,omitempty"`
+	// Second line of the description for the sitelink.
+	// If this value is set, line1 must also be set.
+	// The length of this string should be between 0 and 35, inclusive.
+	Line2 *wrappers.StringValue `protobuf:"bytes,3,opt,name=line2,proto3" json:"line2,omitempty"`
+	// A list of possible final URLs after all cross domain redirects.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,4,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of possible final mobile URLs after all cross domain redirects.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,5,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,6,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// A list of mappings to be used for substituting URL custom parameter tags in
+	// the tracking_url_template, final_urls, and/or final_mobile_urls.
+	UrlCustomParameters []*CustomParameter `protobuf:"bytes,7,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// Final URL suffix to be appended to landing page URLs served with
+	// parallel tracking.
+	FinalUrlSuffix       *wrappers.StringValue `protobuf:"bytes,8,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *SitelinkFeedItem) Reset()         { *m = SitelinkFeedItem{} }
+func (m *SitelinkFeedItem) String() string { return proto.CompactTextString(m) }
+func (*SitelinkFeedItem) ProtoMessage()    {}
+func (*SitelinkFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{10}
+}
+
+func (m *SitelinkFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SitelinkFeedItem.Unmarshal(m, b)
+}
+func (m *SitelinkFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SitelinkFeedItem.Marshal(b, m, deterministic)
+}
+func (m *SitelinkFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SitelinkFeedItem.Merge(m, src)
+}
+func (m *SitelinkFeedItem) XXX_Size() int {
+	return xxx_messageInfo_SitelinkFeedItem.Size(m)
+}
+func (m *SitelinkFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_SitelinkFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SitelinkFeedItem proto.InternalMessageInfo
+
+func (m *SitelinkFeedItem) GetLinkText() *wrappers.StringValue {
+	if m != nil {
+		return m.LinkText
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetLine1() *wrappers.StringValue {
+	if m != nil {
+		return m.Line1
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetLine2() *wrappers.StringValue {
+	if m != nil {
+		return m.Line2
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetUrlCustomParameters() []*CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *SitelinkFeedItem) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+// Represents a hotel callout extension.
+type HotelCalloutFeedItem struct {
+	// The callout text.
+	// The length of this string should be between 1 and 25, inclusive.
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The language of the hotel callout text.
+	// IETF BCP 47 compliant language code.
+	LanguageCode         *wrappers.StringValue `protobuf:"bytes,2,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelCalloutFeedItem) Reset()         { *m = HotelCalloutFeedItem{} }
+func (m *HotelCalloutFeedItem) String() string { return proto.CompactTextString(m) }
+func (*HotelCalloutFeedItem) ProtoMessage()    {}
+func (*HotelCalloutFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee3820afd9e47aba, []int{11}
+}
+
+func (m *HotelCalloutFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCalloutFeedItem.Unmarshal(m, b)
+}
+func (m *HotelCalloutFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCalloutFeedItem.Marshal(b, m, deterministic)
+}
+func (m *HotelCalloutFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCalloutFeedItem.Merge(m, src)
+}
+func (m *HotelCalloutFeedItem) XXX_Size() int {
+	return xxx_messageInfo_HotelCalloutFeedItem.Size(m)
+}
+func (m *HotelCalloutFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCalloutFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCalloutFeedItem proto.InternalMessageInfo
+
+func (m *HotelCalloutFeedItem) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *HotelCalloutFeedItem) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AppFeedItem)(nil), "google.ads.googleads.v3.common.AppFeedItem")
+	proto.RegisterType((*CallFeedItem)(nil), "google.ads.googleads.v3.common.CallFeedItem")
+	proto.RegisterType((*CalloutFeedItem)(nil), "google.ads.googleads.v3.common.CalloutFeedItem")
+	proto.RegisterType((*LocationFeedItem)(nil), "google.ads.googleads.v3.common.LocationFeedItem")
+	proto.RegisterType((*AffiliateLocationFeedItem)(nil), "google.ads.googleads.v3.common.AffiliateLocationFeedItem")
+	proto.RegisterType((*TextMessageFeedItem)(nil), "google.ads.googleads.v3.common.TextMessageFeedItem")
+	proto.RegisterType((*PriceFeedItem)(nil), "google.ads.googleads.v3.common.PriceFeedItem")
+	proto.RegisterType((*PriceOffer)(nil), "google.ads.googleads.v3.common.PriceOffer")
+	proto.RegisterType((*PromotionFeedItem)(nil), "google.ads.googleads.v3.common.PromotionFeedItem")
+	proto.RegisterType((*StructuredSnippetFeedItem)(nil), "google.ads.googleads.v3.common.StructuredSnippetFeedItem")
+	proto.RegisterType((*SitelinkFeedItem)(nil), "google.ads.googleads.v3.common.SitelinkFeedItem")
+	proto.RegisterType((*HotelCalloutFeedItem)(nil), "google.ads.googleads.v3.common.HotelCalloutFeedItem")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/extensions.proto", fileDescriptor_ee3820afd9e47aba)
+}
+
+var fileDescriptor_ee3820afd9e47aba = []byte{
+	// 1599 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xdf, 0x4e, 0x1b, 0xc7,
+	0x1a, 0x8f, 0xc1, 0x10, 0xf8, 0x0c, 0x06, 0x96, 0xe4, 0xc8, 0xe1, 0x44, 0x39, 0x39, 0x96, 0x8e,
+	0x14, 0x1d, 0xe9, 0xd8, 0x89, 0xe1, 0x44, 0xa9, 0xa3, 0xa6, 0x35, 0x86, 0x04, 0xaa, 0xf0, 0x27,
+	0x6b, 0x40, 0x55, 0x85, 0xb4, 0x1a, 0x76, 0xc7, 0x66, 0x94, 0xdd, 0x99, 0xed, 0xcc, 0x2c, 0x85,
+	0x07, 0xa8, 0x5a, 0xb5, 0xd7, 0x7d, 0x81, 0x56, 0x6a, 0xa5, 0x5e, 0xf4, 0x05, 0x7a, 0xd5, 0xdb,
+	0xde, 0xf5, 0xa6, 0x0f, 0x91, 0xa7, 0xa8, 0x66, 0x76, 0x76, 0x0d, 0x26, 0xb0, 0x6b, 0x4a, 0xa5,
+	0x5e, 0xe4, 0x8a, 0xdd, 0xf5, 0xf7, 0xfb, 0xcd, 0xcc, 0xb7, 0xbf, 0xef, 0xdf, 0x02, 0xf5, 0x1e,
+	0x63, 0x3d, 0x1f, 0xd7, 0x91, 0x27, 0xcc, 0xa5, 0xba, 0x3a, 0x5a, 0xac, 0xbb, 0x2c, 0x08, 0x18,
+	0xad, 0xe3, 0x63, 0x89, 0xa9, 0x20, 0x8c, 0x8a, 0x5a, 0xc8, 0x99, 0x64, 0xd6, 0xbd, 0xd8, 0xaa,
+	0x86, 0x3c, 0x51, 0x4b, 0x01, 0xb5, 0xa3, 0xc5, 0x5a, 0x0c, 0x58, 0xf8, 0x7f, 0x06, 0xa1, 0x1b,
+	0x09, 0xc9, 0x02, 0x27, 0x44, 0x1c, 0x05, 0x58, 0x62, 0x1e, 0xd3, 0x2e, 0x3c, 0xcc, 0x80, 0x75,
+	0x31, 0xf6, 0x9c, 0xf8, 0xda, 0x20, 0xfe, 0x77, 0x11, 0x02, 0xd3, 0x28, 0x10, 0x75, 0x14, 0x86,
+	0x8e, 0x90, 0x8c, 0x63, 0x63, 0xde, 0xbe, 0xdc, 0xdc, 0x45, 0xbe, 0xef, 0xb8, 0x8c, 0x1e, 0x61,
+	0xae, 0x4e, 0xeb, 0x70, 0x1c, 0x32, 0x2e, 0x09, 0xed, 0x39, 0x42, 0x22, 0x99, 0x93, 0x24, 0xe4,
+	0xc4, 0xc5, 0x4e, 0xea, 0x32, 0x27, 0xbe, 0xff, 0x34, 0x42, 0x3e, 0xe9, 0x92, 0xf4, 0xa8, 0xcf,
+	0xae, 0x42, 0x12, 0x51, 0x22, 0x0d, 0xfe, 0xc9, 0x70, 0x78, 0x79, 0x12, 0x26, 0xdb, 0x5f, 0xcf,
+	0x42, 0xb2, 0x80, 0x49, 0x85, 0xe9, 0xa3, 0x3d, 0x22, 0x5c, 0x16, 0x51, 0xe9, 0x04, 0xcc, 0x3b,
+	0x7d, 0x88, 0x0f, 0x87, 0xa7, 0x62, 0xae, 0x8b, 0xd4, 0x85, 0x61, 0x30, 0x42, 0xaa, 0xeb, 0xbb,
+	0x83, 0xa8, 0x5b, 0xff, 0x8c, 0xa3, 0x30, 0xc4, 0xdc, 0x08, 0x6d, 0xe1, 0x6e, 0xb2, 0x42, 0x48,
+	0xea, 0x88, 0x52, 0x26, 0x91, 0xec, 0xcb, 0xb0, 0xfa, 0x7b, 0x11, 0x4a, 0xad, 0x30, 0x7c, 0x8e,
+	0xb1, 0xb7, 0x2e, 0x71, 0x60, 0xbd, 0x07, 0x93, 0x3e, 0xa1, 0xaf, 0x1d, 0x89, 0x8f, 0x65, 0xa5,
+	0x70, 0xbf, 0xf0, 0xa0, 0xd4, 0xb8, 0x6b, 0xf4, 0x59, 0x4b, 0x56, 0xa8, 0x75, 0x24, 0x27, 0xb4,
+	0xb7, 0x87, 0xfc, 0x08, 0xdb, 0x13, 0xca, 0x7c, 0x07, 0x1f, 0x4b, 0x6b, 0x11, 0xc6, 0x95, 0x58,
+	0x88, 0x57, 0x19, 0xc9, 0x81, 0x1b, 0x43, 0x61, 0xb8, 0xee, 0x59, 0xaf, 0x60, 0x32, 0x55, 0x58,
+	0x65, 0xf4, 0x7e, 0xe1, 0x41, 0xb9, 0xb1, 0x54, 0xbb, 0x28, 0x34, 0xb4, 0x4f, 0x6a, 0xad, 0x30,
+	0xec, 0x28, 0xf3, 0x55, 0x1a, 0x05, 0xe9, 0x8d, 0x3d, 0x81, 0xcc, 0x95, 0xf5, 0x14, 0xa0, 0x4b,
+	0x28, 0xf2, 0x9d, 0x88, 0xfb, 0xa2, 0x52, 0xbc, 0x3f, 0x9a, 0xb9, 0x97, 0x49, 0x6d, 0xbf, 0xcb,
+	0x7d, 0x61, 0xad, 0xc1, 0x5c, 0x0c, 0x0e, 0xd8, 0x01, 0xf1, 0x71, 0xcc, 0x31, 0x96, 0x83, 0x63,
+	0x46, 0xc3, 0x36, 0x34, 0x4a, 0x33, 0x6d, 0xc3, 0x6d, 0xc9, 0x91, 0xfb, 0x5a, 0x69, 0x3f, 0xe2,
+	0xbe, 0x23, 0x71, 0x10, 0xfa, 0x48, 0xe2, 0xca, 0x78, 0x0e, 0xef, 0xcc, 0x27, 0xd0, 0x5d, 0xee,
+	0xef, 0x18, 0xa0, 0xe5, 0xc2, 0x6d, 0x45, 0x34, 0x18, 0xf9, 0xa2, 0x72, 0x53, 0xef, 0xaf, 0x5e,
+	0xbb, 0x3c, 0xa5, 0xd4, 0xda, 0x1a, 0xb8, 0x9d, 0xe0, 0xec, 0xf9, 0x88, 0xfb, 0x03, 0xcf, 0x84,
+	0xf5, 0x1c, 0x66, 0x53, 0xef, 0x39, 0x22, 0xea, 0x76, 0xc9, 0x71, 0x65, 0x22, 0xc7, 0x8e, 0xcb,
+	0x89, 0x0f, 0x3b, 0x1a, 0x53, 0xfd, 0xa5, 0x08, 0x53, 0x6d, 0xe4, 0xfb, 0xa9, 0xb2, 0x3e, 0x80,
+	0xa9, 0xf0, 0x90, 0x51, 0xec, 0xd0, 0x28, 0x38, 0xc0, 0x3c, 0x97, 0xb8, 0x4a, 0x1a, 0xb1, 0xa9,
+	0x01, 0x8a, 0x40, 0x87, 0x10, 0x3f, 0x71, 0x5c, 0xe6, 0xe1, 0x5c, 0x2a, 0x2b, 0x19, 0x44, 0x9b,
+	0x79, 0xd8, 0xda, 0x84, 0xdb, 0x3a, 0x3d, 0xa5, 0xaf, 0x05, 0x53, 0x74, 0xe0, 0x63, 0x4f, 0xeb,
+	0xae, 0xd4, 0x58, 0x38, 0xc7, 0xb4, 0xcc, 0x98, 0x6f, 0xde, 0x87, 0x02, 0xee, 0x18, 0xdc, 0x6a,
+	0x0c, 0xb3, 0x6c, 0xf8, 0xc7, 0x60, 0xba, 0x43, 0xae, 0x0a, 0xae, 0x4a, 0x31, 0xc7, 0xd6, 0x6e,
+	0x29, 0x6c, 0x3b, 0x85, 0xb6, 0x34, 0xd2, 0xc2, 0xf0, 0xef, 0x41, 0xce, 0x74, 0xbb, 0x1e, 0x11,
+	0xf1, 0x7e, 0xc7, 0x32, 0xf7, 0x7b, 0xef, 0x2c, 0x79, 0xb2, 0xf3, 0x15, 0xc3, 0x60, 0x7d, 0x57,
+	0x80, 0x7f, 0x65, 0xa4, 0x6a, 0xad, 0xd3, 0x72, 0x63, 0x3f, 0x23, 0x1a, 0xdb, 0x67, 0x16, 0xb2,
+	0x13, 0x8e, 0x8e, 0xa2, 0xd0, 0x11, 0x7a, 0x99, 0x81, 0x7d, 0xd7, 0xbd, 0xe4, 0xd7, 0xaa, 0x0d,
+	0x33, 0x0a, 0xcd, 0x22, 0x79, 0x5a, 0x45, 0x6e, 0xfc, 0x28, 0x7f, 0x8a, 0x2a, 0x19, 0x84, 0xca,
+	0x52, 0xd5, 0xaf, 0x8a, 0x30, 0xfb, 0x92, 0xb9, 0x3a, 0x09, 0xa6, 0xac, 0x2d, 0x98, 0x3e, 0x88,
+	0x04, 0xa1, 0x58, 0x08, 0x87, 0xa2, 0x00, 0xe7, 0xa2, 0x9d, 0x4a, 0x20, 0x9b, 0x28, 0xc0, 0xd6,
+	0x32, 0x94, 0x91, 0xe7, 0x71, 0xc5, 0xe0, 0x13, 0x8a, 0x9d, 0x47, 0xb9, 0xf4, 0x39, 0x65, 0x30,
+	0x2f, 0x09, 0xc5, 0x8f, 0xce, 0x71, 0x34, 0x8c, 0x32, 0xf3, 0x73, 0x34, 0xac, 0x87, 0x50, 0x74,
+	0x89, 0x3c, 0xc9, 0x25, 0x41, 0x6d, 0x69, 0x3d, 0x81, 0x89, 0x90, 0xb3, 0x23, 0x42, 0x5d, 0x6c,
+	0x94, 0x95, 0x91, 0xf1, 0x13, 0x6b, 0xeb, 0x7d, 0x28, 0x85, 0x4c, 0x48, 0xe4, 0xc7, 0x01, 0x99,
+	0x27, 0xb1, 0x41, 0x0c, 0xd0, 0xf1, 0x38, 0x18, 0xd0, 0x37, 0x87, 0x0d, 0xe8, 0xc1, 0x94, 0x32,
+	0x31, 0x64, 0x4a, 0xa9, 0x7e, 0x39, 0x06, 0x77, 0x5a, 0xdd, 0x2e, 0xf1, 0x09, 0x92, 0xf8, 0x9d,
+	0x2a, 0xde, 0xa9, 0x42, 0x17, 0x9a, 0xc7, 0x30, 0xe1, 0x1e, 0x22, 0x42, 0x55, 0x2b, 0x33, 0xa9,
+	0xc1, 0xff, 0x3c, 0x07, 0x5e, 0xa7, 0xf2, 0xf1, 0x52, 0x8c, 0xbd, 0xa9, 0x8d, 0xd7, 0x3d, 0xd5,
+	0x78, 0xc4, 0x38, 0x2d, 0x16, 0xc8, 0xb1, 0xec, 0xa4, 0xb6, 0x57, 0x4a, 0xa9, 0xfe, 0x36, 0x02,
+	0xf3, 0x2a, 0x41, 0x6d, 0x60, 0x21, 0x50, 0x0f, 0x5f, 0xa7, 0x08, 0xff, 0x74, 0xe1, 0x1c, 0xf4,
+	0xe8, 0xe8, 0xb0, 0x1e, 0x7d, 0x08, 0x45, 0x9d, 0xad, 0x73, 0xc9, 0x4f, 0x59, 0x5a, 0x6d, 0x28,
+	0x9f, 0x6a, 0xbd, 0x15, 0x36, 0x8f, 0x08, 0xa7, 0x53, 0x8c, 0xce, 0xf5, 0x3f, 0x14, 0x61, 0x7a,
+	0x5b, 0xb5, 0xf1, 0xa9, 0x37, 0xf7, 0xa1, 0xa8, 0xfa, 0x78, 0xed, 0xc4, 0x72, 0x63, 0x2d, 0xa3,
+	0xb6, 0x69, 0xec, 0x6a, 0x4a, 0x79, 0x12, 0xc6, 0x15, 0xed, 0xfc, 0x63, 0x5b, 0xb3, 0x5a, 0x9f,
+	0x17, 0x60, 0x66, 0x60, 0x56, 0xd1, 0xce, 0xce, 0xae, 0xa2, 0x67, 0x29, 0xf5, 0xdd, 0xab, 0x84,
+	0xe2, 0x2d, 0x6b, 0x9e, 0x35, 0xb0, 0xcb, 0xe1, 0x99, 0xfb, 0x8b, 0x5b, 0xcf, 0xd1, 0xab, 0xb6,
+	0x9e, 0x2d, 0x98, 0xf6, 0x11, 0xed, 0x45, 0xa8, 0x87, 0x63, 0x0d, 0xe5, 0x79, 0x93, 0x53, 0x09,
+	0x44, 0x8b, 0xa8, 0x93, 0xf8, 0x86, 0x75, 0xbb, 0x58, 0x19, 0x25, 0x7d, 0xf5, 0x7f, 0xb3, 0xfa,
+	0x56, 0x7d, 0xda, 0x2d, 0x85, 0x32, 0x27, 0xdd, 0x4a, 0x18, 0xde, 0xda, 0xad, 0x8e, 0x5f, 0xa1,
+	0x5b, 0xfd, 0x69, 0x14, 0xa0, 0xbf, 0x8c, 0xb5, 0x04, 0xe3, 0x87, 0x18, 0x79, 0x39, 0xbb, 0x54,
+	0x63, 0x6b, 0x3d, 0x83, 0x92, 0x87, 0x85, 0xcb, 0x49, 0xa8, 0x9b, 0xc0, 0x5c, 0x61, 0x76, 0x0a,
+	0x60, 0x3d, 0x85, 0x31, 0x7d, 0x3c, 0xf3, 0x9a, 0xfe, 0x93, 0xe5, 0x97, 0x0d, 0x46, 0xf1, 0x89,
+	0x1d, 0x63, 0xac, 0x2e, 0x14, 0xd5, 0x6c, 0xab, 0x5f, 0x4c, 0xb9, 0x61, 0x0f, 0xaf, 0xb7, 0x5d,
+	0x4a, 0xe4, 0x45, 0x52, 0x53, 0xbf, 0xd9, 0x9a, 0x7f, 0x60, 0xba, 0x1a, 0xbb, 0x86, 0xe9, 0x6a,
+	0xfc, 0x0a, 0xd3, 0x55, 0xf5, 0x7b, 0x80, 0xb9, 0xed, 0x64, 0x38, 0x4e, 0xc3, 0xfb, 0x05, 0xcc,
+	0xf6, 0x27, 0x66, 0x89, 0x78, 0x0f, 0xe7, 0xeb, 0x10, 0x67, 0x52, 0xd4, 0x8e, 0x06, 0x59, 0xdf,
+	0x14, 0x60, 0xee, 0xdc, 0xc8, 0x6e, 0x62, 0xf9, 0x30, 0xd3, 0xb7, 0x86, 0x2b, 0xf5, 0xe1, 0x8a,
+	0x61, 0xda, 0x30, 0x44, 0xc6, 0xcd, 0x59, 0x66, 0xf6, 0xac, 0x37, 0xf0, 0xc4, 0xda, 0x84, 0x5b,
+	0xfd, 0x03, 0x0a, 0x89, 0xb8, 0x74, 0x3c, 0x15, 0xd8, 0x79, 0x8a, 0xa4, 0x95, 0x22, 0x3b, 0x0a,
+	0xb8, 0xa2, 0xe2, 0xfa, 0x23, 0xb0, 0x4e, 0x7d, 0x62, 0xa0, 0x5e, 0xcc, 0x96, 0xa7, 0x62, 0xf6,
+	0x1d, 0xbd, 0x4a, 0x3d, 0xcd, 0x25, 0x61, 0x22, 0xf9, 0x34, 0xa1, 0xcb, 0x66, 0xb9, 0xf1, 0xf1,
+	0xd0, 0x9e, 0xda, 0x32, 0x04, 0x17, 0x78, 0x28, 0xf9, 0xd9, 0x4e, 0x57, 0x1a, 0xd0, 0x23, 0x5c,
+	0x83, 0x1e, 0x4b, 0xd7, 0x3a, 0xed, 0x4f, 0x5d, 0xfb, 0xb4, 0x3f, 0xfd, 0x17, 0x4f, 0xfb, 0xe5,
+	0xe1, 0xf3, 0xe7, 0xf9, 0xfa, 0x30, 0x33, 0x74, 0x7d, 0x78, 0x06, 0xa5, 0x10, 0x73, 0x17, 0x53,
+	0xa9, 0x2a, 0x84, 0xc9, 0x81, 0x97, 0x35, 0x5e, 0x6b, 0x37, 0x6c, 0x30, 0x88, 0xad, 0x6e, 0xd7,
+	0x7a, 0x05, 0xb3, 0x81, 0x4a, 0x88, 0x0e, 0x0a, 0x74, 0xd4, 0x2a, 0x92, 0xe2, 0x10, 0x89, 0x74,
+	0xed, 0x86, 0x5d, 0xd6, 0x04, 0x2d, 0x8d, 0x57, 0x94, 0xab, 0x50, 0xee, 0x47, 0x87, 0x3e, 0x56,
+	0x8e, 0x26, 0x64, 0xad, 0x60, 0x4f, 0xa7, 0x28, 0x7d, 0xb2, 0x5d, 0xb0, 0x18, 0xf7, 0x30, 0x17,
+	0x0e, 0x3b, 0xc2, 0xdc, 0xec, 0xcf, 0x94, 0xa9, 0x9c, 0x7b, 0x2b, 0xd8, 0xb3, 0x31, 0xc5, 0xd6,
+	0x11, 0xe6, 0xf1, 0x06, 0x97, 0x67, 0x60, 0x3a, 0x4d, 0x51, 0xaa, 0xfd, 0x58, 0x9e, 0x87, 0xb9,
+	0x53, 0xd9, 0x8f, 0x93, 0x5e, 0x0f, 0xf3, 0xea, 0x17, 0x05, 0xb8, 0xd3, 0x91, 0x3c, 0x72, 0x65,
+	0xc4, 0xb1, 0xd7, 0xa1, 0x24, 0x0c, 0x71, 0x7f, 0x9c, 0xbe, 0x5a, 0xa1, 0x5b, 0x82, 0xf1, 0x23,
+	0xf5, 0x40, 0x54, 0x46, 0x72, 0xc4, 0x8a, 0xb1, 0xad, 0xfe, 0x5c, 0x84, 0xd9, 0x0e, 0x91, 0xd8,
+	0x27, 0xf4, 0xf5, 0x75, 0x7c, 0x6f, 0x6c, 0xc0, 0x98, 0x9a, 0x87, 0xf2, 0x8d, 0x54, 0xb1, 0x69,
+	0x82, 0xc9, 0x37, 0x42, 0xc5, 0xa6, 0xef, 0xbe, 0x27, 0xfe, 0x2d, 0xbe, 0x27, 0x7e, 0x5d, 0x80,
+	0x5b, 0x6b, 0x4c, 0x62, 0x7f, 0xf0, 0x8b, 0x50, 0x32, 0x5b, 0x14, 0x72, 0xcf, 0x16, 0xe7, 0x92,
+	0xd5, 0xc8, 0xb0, 0xc9, 0x6a, 0xf9, 0x4d, 0x01, 0xaa, 0x2e, 0x0b, 0x32, 0x3c, 0xb4, 0x3c, 0x93,
+	0x56, 0x2e, 0xb1, 0xad, 0x48, 0xb7, 0x0b, 0x9f, 0xac, 0x18, 0x48, 0x8f, 0x29, 0xc2, 0x1a, 0xe3,
+	0xbd, 0x7a, 0x0f, 0x53, 0xbd, 0x64, 0xf2, 0x0f, 0x80, 0x90, 0x88, 0x8b, 0xfe, 0x7f, 0xf3, 0x34,
+	0xfe, 0xf3, 0xed, 0xc8, 0xe8, 0x8b, 0x56, 0xeb, 0xc7, 0x91, 0x7b, 0x2f, 0x62, 0xb2, 0x96, 0x27,
+	0x6a, 0xf1, 0xa5, 0xba, 0xda, 0x5b, 0xac, 0xb5, 0xb5, 0xd9, 0xaf, 0x89, 0xc1, 0x7e, 0xcb, 0x13,
+	0xfb, 0xa9, 0xc1, 0xfe, 0xde, 0xe2, 0x7e, 0x6c, 0xf0, 0x66, 0xa4, 0x1a, 0x3f, 0x6d, 0x36, 0x5b,
+	0x9e, 0x68, 0x36, 0x53, 0x93, 0x66, 0x73, 0x6f, 0xb1, 0xd9, 0x8c, 0x8d, 0x0e, 0xc6, 0xf5, 0xee,
+	0x16, 0xff, 0x08, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x64, 0x95, 0xad, 0xe4, 0x1a, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/feed_common.pb.go b/googleapis/ads/googleads/v3/common/feed_common.pb.go
new file mode 100644
index 0000000..2184377
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/feed_common.pb.go
@@ -0,0 +1,107 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/feed_common.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents a price in a particular currency.
+type Money struct {
+	// Three-character ISO 4217 currency code.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// Amount in micros. One million is equivalent to one unit.
+	AmountMicros         *wrappers.Int64Value `protobuf:"bytes,2,opt,name=amount_micros,json=amountMicros,proto3" json:"amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Money) Reset()         { *m = Money{} }
+func (m *Money) String() string { return proto.CompactTextString(m) }
+func (*Money) ProtoMessage()    {}
+func (*Money) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a474332def9e8093, []int{0}
+}
+
+func (m *Money) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Money.Unmarshal(m, b)
+}
+func (m *Money) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Money.Marshal(b, m, deterministic)
+}
+func (m *Money) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Money.Merge(m, src)
+}
+func (m *Money) XXX_Size() int {
+	return xxx_messageInfo_Money.Size(m)
+}
+func (m *Money) XXX_DiscardUnknown() {
+	xxx_messageInfo_Money.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Money proto.InternalMessageInfo
+
+func (m *Money) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *Money) GetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Money)(nil), "google.ads.googleads.v3.common.Money")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/feed_common.proto", fileDescriptor_a474332def9e8093)
+}
+
+var fileDescriptor_a474332def9e8093 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4a, 0xc3, 0x40,
+	0x14, 0x86, 0x49, 0x44, 0x17, 0xd1, 0x22, 0x74, 0x55, 0x6a, 0x29, 0xd2, 0x95, 0xab, 0x19, 0x31,
+	0xe2, 0x62, 0xdc, 0x98, 0x56, 0x2c, 0x2e, 0x0a, 0x45, 0x21, 0x0b, 0x09, 0x94, 0x69, 0xe6, 0x75,
+	0x08, 0x34, 0xf3, 0xc2, 0x4c, 0x52, 0xe9, 0x1d, 0x3c, 0x85, 0x4b, 0x8f, 0xe2, 0x51, 0x7a, 0x0a,
+	0x69, 0x5e, 0xd2, 0x8d, 0xe8, 0x6a, 0x7e, 0xe6, 0x7d, 0xff, 0xff, 0xcf, 0xbc, 0xe0, 0x5a, 0x23,
+	0xea, 0x35, 0x70, 0xa9, 0x1c, 0x27, 0xb9, 0x57, 0x9b, 0x90, 0xa7, 0x98, 0xe7, 0x68, 0xf8, 0x0a,
+	0x40, 0x2d, 0x48, 0xb3, 0xc2, 0x62, 0x89, 0xdd, 0x21, 0x61, 0x4c, 0x2a, 0xc7, 0x0e, 0x0e, 0xb6,
+	0x09, 0x19, 0x51, 0xfd, 0x66, 0xce, 0x6b, 0x7a, 0x59, 0xad, 0xf8, 0xbb, 0x95, 0x45, 0x01, 0xd6,
+	0x91, 0xbf, 0x3f, 0x68, 0x1b, 0x8b, 0x8c, 0x4b, 0x63, 0xb0, 0x94, 0x65, 0x86, 0xa6, 0x99, 0x8e,
+	0x3e, 0xbc, 0xe0, 0x78, 0x86, 0x06, 0xb6, 0xdd, 0x28, 0xe8, 0xa4, 0x95, 0xb5, 0x60, 0xd2, 0xed,
+	0x22, 0x45, 0x05, 0x3d, 0xef, 0xd2, 0xbb, 0x3a, 0xbd, 0x19, 0x34, 0xa5, 0xac, 0xcd, 0x67, 0xaf,
+	0xa5, 0xcd, 0x8c, 0x8e, 0xe5, 0xba, 0x82, 0x97, 0xb3, 0xd6, 0x32, 0x41, 0x05, 0xdd, 0x87, 0xa0,
+	0x23, 0x73, 0xac, 0x4c, 0xb9, 0xc8, 0xb3, 0xd4, 0xa2, 0xeb, 0xf9, 0x75, 0xc4, 0xc5, 0xaf, 0x88,
+	0x67, 0x53, 0xde, 0xdd, 0x36, 0x09, 0xe4, 0x98, 0xd5, 0x86, 0xf1, 0xce, 0x0b, 0x46, 0x29, 0xe6,
+	0xec, 0xff, 0x3f, 0x8f, 0xcf, 0x9f, 0x00, 0xd4, 0xa4, 0xd6, 0xf3, 0x7d, 0xe6, 0xdc, 0x7b, 0x7b,
+	0x6c, 0x2c, 0x1a, 0xd7, 0xd2, 0x68, 0x86, 0x56, 0x73, 0x0d, 0xa6, 0x6e, 0x6c, 0x17, 0x5d, 0x64,
+	0xee, 0xaf, 0xbd, 0xdf, 0xd3, 0xf1, 0xe9, 0x1f, 0x4d, 0xa3, 0xe8, 0xcb, 0x1f, 0x4e, 0x29, 0x2c,
+	0x52, 0x8e, 0x91, 0xdc, 0xab, 0x38, 0x64, 0xd4, 0xf9, 0xdd, 0x02, 0x49, 0xa4, 0x5c, 0x72, 0x00,
+	0x92, 0x38, 0x4c, 0x08, 0xd8, 0xf9, 0x23, 0xba, 0x15, 0x22, 0x52, 0x4e, 0x88, 0x03, 0x22, 0x44,
+	0x1c, 0x0a, 0x41, 0xd0, 0xf2, 0xa4, 0x7e, 0x5d, 0xf8, 0x13, 0x00, 0x00, 0xff, 0xff, 0x1a, 0x8a,
+	0x12, 0xa4, 0x14, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/final_app_url.pb.go b/googleapis/ads/googleads/v3/common/final_app_url.pb.go
new file mode 100644
index 0000000..337976c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/final_app_url.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/final_app_url.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A URL for deep linking into an app for the given operating system.
+type FinalAppUrl struct {
+	// The operating system targeted by this URL. Required.
+	OsType enums.AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType `protobuf:"varint,1,opt,name=os_type,json=osType,proto3,enum=google.ads.googleads.v3.enums.AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType" json:"os_type,omitempty"`
+	// The app deep link URL. Deep links specify a location in an app that
+	// corresponds to the content you'd like to show, and should be of the form
+	// {scheme}://{host_path}
+	// The scheme identifies which app to open. For your app, you can use a custom
+	// scheme that starts with the app's name. The host and path specify the
+	// unique location in the app where your content exists.
+	// Example: "exampleapp://productid_1234". Required.
+	Url                  *wrappers.StringValue `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *FinalAppUrl) Reset()         { *m = FinalAppUrl{} }
+func (m *FinalAppUrl) String() string { return proto.CompactTextString(m) }
+func (*FinalAppUrl) ProtoMessage()    {}
+func (*FinalAppUrl) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5a155cdeb995ff55, []int{0}
+}
+
+func (m *FinalAppUrl) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FinalAppUrl.Unmarshal(m, b)
+}
+func (m *FinalAppUrl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FinalAppUrl.Marshal(b, m, deterministic)
+}
+func (m *FinalAppUrl) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FinalAppUrl.Merge(m, src)
+}
+func (m *FinalAppUrl) XXX_Size() int {
+	return xxx_messageInfo_FinalAppUrl.Size(m)
+}
+func (m *FinalAppUrl) XXX_DiscardUnknown() {
+	xxx_messageInfo_FinalAppUrl.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FinalAppUrl proto.InternalMessageInfo
+
+func (m *FinalAppUrl) GetOsType() enums.AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType {
+	if m != nil {
+		return m.OsType
+	}
+	return enums.AppUrlOperatingSystemTypeEnum_UNSPECIFIED
+}
+
+func (m *FinalAppUrl) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*FinalAppUrl)(nil), "google.ads.googleads.v3.common.FinalAppUrl")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/final_app_url.proto", fileDescriptor_5a155cdeb995ff55)
+}
+
+var fileDescriptor_5a155cdeb995ff55 = []byte{
+	// 355 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xbf, 0x6a, 0xc3, 0x30,
+	0x10, 0xc6, 0xb1, 0x03, 0x29, 0x38, 0x50, 0x4a, 0xa6, 0x10, 0x42, 0x08, 0x99, 0x32, 0x49, 0x10,
+	0x6f, 0xea, 0xe4, 0xf4, 0x4f, 0xc6, 0x86, 0xa4, 0xf5, 0x50, 0x0c, 0x46, 0x89, 0x15, 0x61, 0xb0,
+	0x75, 0x42, 0x92, 0x53, 0xf2, 0x3a, 0x1d, 0x3b, 0xf4, 0x41, 0xfa, 0x28, 0xed, 0x4b, 0x14, 0x4b,
+	0x76, 0xe8, 0xe2, 0x4e, 0x3a, 0xfb, 0x7e, 0xf7, 0x7d, 0xdf, 0x49, 0xc1, 0x92, 0x03, 0xf0, 0x82,
+	0x61, 0x9a, 0x69, 0xec, 0xca, 0xba, 0x3a, 0x85, 0xf8, 0x00, 0x65, 0x09, 0x02, 0x1f, 0x73, 0x41,
+	0x8b, 0x94, 0x4a, 0x99, 0x56, 0xaa, 0x40, 0x52, 0x81, 0x81, 0xe1, 0xd4, 0x81, 0x88, 0x66, 0x1a,
+	0x5d, 0x66, 0xd0, 0x29, 0x44, 0x6e, 0x66, 0x1c, 0x75, 0x69, 0x32, 0x51, 0x95, 0x1a, 0x37, 0x62,
+	0x29, 0x48, 0xa6, 0xa8, 0xc9, 0x05, 0x4f, 0xf5, 0x59, 0x1b, 0x56, 0xa6, 0xe6, 0x2c, 0x99, 0xb3,
+	0x18, 0x37, 0x16, 0xd8, 0x7e, 0xed, 0xab, 0x23, 0x7e, 0x53, 0x54, 0x4a, 0xa6, 0x74, 0xd3, 0x9f,
+	0xb4, 0x16, 0x32, 0xc7, 0x54, 0x08, 0x30, 0xd4, 0xe4, 0x20, 0x9a, 0xee, 0xfc, 0xd3, 0x0b, 0x06,
+	0x8f, 0x75, 0xf0, 0x48, 0xca, 0x17, 0x55, 0x0c, 0x21, 0xb8, 0x02, 0x6d, 0xe5, 0x47, 0xde, 0xcc,
+	0x5b, 0x5c, 0x2f, 0x63, 0xd4, 0xb5, 0x82, 0x8d, 0x88, 0xdc, 0xdc, 0x53, 0x1b, 0x70, 0x67, 0xf3,
+	0x3d, 0x9f, 0x25, 0x7b, 0x10, 0x55, 0xd9, 0xdd, 0xdd, 0xf6, 0x41, 0xd7, 0xe7, 0x10, 0x05, 0xbd,
+	0x4a, 0x15, 0x23, 0x7f, 0xe6, 0x2d, 0x06, 0xcb, 0x49, 0x6b, 0xd6, 0x2e, 0x83, 0x76, 0x46, 0xe5,
+	0x82, 0xc7, 0xb4, 0xa8, 0xd8, 0xb6, 0x06, 0x57, 0x3f, 0x5e, 0x30, 0x3f, 0x40, 0x89, 0xfe, 0xbf,
+	0xd8, 0xd5, 0xcd, 0x9f, 0xa5, 0x36, 0xb5, 0xd8, 0xc6, 0x7b, 0xbd, 0x6f, 0x66, 0x38, 0x14, 0x54,
+	0x70, 0x04, 0x8a, 0x63, 0xce, 0x84, 0xb5, 0x6a, 0x2f, 0x5f, 0xe6, 0xba, 0xeb, 0x7d, 0x6f, 0xdd,
+	0xf1, 0xee, 0xf7, 0xd6, 0x51, 0xf4, 0xe1, 0x4f, 0xd7, 0x4e, 0x2c, 0xca, 0x34, 0x72, 0x65, 0x5d,
+	0xc5, 0x21, 0xba, 0xb3, 0xd8, 0x57, 0x0b, 0x24, 0x51, 0xa6, 0x93, 0x0b, 0x90, 0xc4, 0x61, 0xe2,
+	0x80, 0x6f, 0x7f, 0xee, 0xfe, 0x12, 0x12, 0x65, 0x9a, 0x90, 0x0b, 0x42, 0x48, 0x1c, 0x12, 0xe2,
+	0xa0, 0x7d, 0xdf, 0xa6, 0x0b, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x93, 0x6b, 0x2a, 0xe5, 0x7c,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/frequency_cap.pb.go b/googleapis/ads/googleads/v3/common/frequency_cap.pb.go
new file mode 100644
index 0000000..49b94dc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/frequency_cap.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/frequency_cap.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A rule specifying the maximum number of times an ad (or some set of ads) can
+// be shown to a user over a particular time period.
+type FrequencyCapEntry struct {
+	// The key of a particular frequency cap. There can be no more
+	// than one frequency cap with the same key.
+	Key *FrequencyCapKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// Maximum number of events allowed during the time range by this cap.
+	Cap                  *wrappers.Int32Value `protobuf:"bytes,2,opt,name=cap,proto3" json:"cap,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FrequencyCapEntry) Reset()         { *m = FrequencyCapEntry{} }
+func (m *FrequencyCapEntry) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapEntry) ProtoMessage()    {}
+func (*FrequencyCapEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9d5d792890a02906, []int{0}
+}
+
+func (m *FrequencyCapEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapEntry.Unmarshal(m, b)
+}
+func (m *FrequencyCapEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapEntry.Marshal(b, m, deterministic)
+}
+func (m *FrequencyCapEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapEntry.Merge(m, src)
+}
+func (m *FrequencyCapEntry) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapEntry.Size(m)
+}
+func (m *FrequencyCapEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapEntry proto.InternalMessageInfo
+
+func (m *FrequencyCapEntry) GetKey() *FrequencyCapKey {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *FrequencyCapEntry) GetCap() *wrappers.Int32Value {
+	if m != nil {
+		return m.Cap
+	}
+	return nil
+}
+
+// A group of fields used as keys for a frequency cap.
+// There can be no more than one frequency cap with the same key.
+type FrequencyCapKey struct {
+	// The level on which the cap is to be applied (e.g. ad group ad, ad group).
+	// The cap is applied to all the entities of this level.
+	Level enums.FrequencyCapLevelEnum_FrequencyCapLevel `protobuf:"varint,1,opt,name=level,proto3,enum=google.ads.googleads.v3.enums.FrequencyCapLevelEnum_FrequencyCapLevel" json:"level,omitempty"`
+	// The type of event that the cap applies to (e.g. impression).
+	EventType enums.FrequencyCapEventTypeEnum_FrequencyCapEventType `protobuf:"varint,3,opt,name=event_type,json=eventType,proto3,enum=google.ads.googleads.v3.enums.FrequencyCapEventTypeEnum_FrequencyCapEventType" json:"event_type,omitempty"`
+	// Unit of time the cap is defined at (e.g. day, week).
+	TimeUnit enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit `protobuf:"varint,2,opt,name=time_unit,json=timeUnit,proto3,enum=google.ads.googleads.v3.enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit" json:"time_unit,omitempty"`
+	// Number of time units the cap lasts.
+	TimeLength           *wrappers.Int32Value `protobuf:"bytes,4,opt,name=time_length,json=timeLength,proto3" json:"time_length,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FrequencyCapKey) Reset()         { *m = FrequencyCapKey{} }
+func (m *FrequencyCapKey) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapKey) ProtoMessage()    {}
+func (*FrequencyCapKey) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9d5d792890a02906, []int{1}
+}
+
+func (m *FrequencyCapKey) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapKey.Unmarshal(m, b)
+}
+func (m *FrequencyCapKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapKey.Marshal(b, m, deterministic)
+}
+func (m *FrequencyCapKey) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapKey.Merge(m, src)
+}
+func (m *FrequencyCapKey) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapKey.Size(m)
+}
+func (m *FrequencyCapKey) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapKey.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapKey proto.InternalMessageInfo
+
+func (m *FrequencyCapKey) GetLevel() enums.FrequencyCapLevelEnum_FrequencyCapLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.FrequencyCapLevelEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetEventType() enums.FrequencyCapEventTypeEnum_FrequencyCapEventType {
+	if m != nil {
+		return m.EventType
+	}
+	return enums.FrequencyCapEventTypeEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetTimeUnit() enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit {
+	if m != nil {
+		return m.TimeUnit
+	}
+	return enums.FrequencyCapTimeUnitEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetTimeLength() *wrappers.Int32Value {
+	if m != nil {
+		return m.TimeLength
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*FrequencyCapEntry)(nil), "google.ads.googleads.v3.common.FrequencyCapEntry")
+	proto.RegisterType((*FrequencyCapKey)(nil), "google.ads.googleads.v3.common.FrequencyCapKey")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/frequency_cap.proto", fileDescriptor_9d5d792890a02906)
+}
+
+var fileDescriptor_9d5d792890a02906 = []byte{
+	// 466 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xcf, 0x6a, 0xd4, 0x40,
+	0x18, 0x27, 0x1b, 0x15, 0x3b, 0x85, 0x8a, 0x39, 0x2d, 0x55, 0x8a, 0xec, 0xc9, 0x8b, 0x33, 0x90,
+	0x1c, 0x84, 0xb4, 0x97, 0xb4, 0x6e, 0x8b, 0xb8, 0x48, 0x09, 0x75, 0x0f, 0x12, 0x58, 0xa6, 0xc9,
+	0xd7, 0x18, 0x4c, 0x66, 0xc6, 0x64, 0xb2, 0x92, 0x07, 0x10, 0xdf, 0xc3, 0xa3, 0x8f, 0xe2, 0xa3,
+	0x88, 0x0f, 0x21, 0x33, 0x93, 0x89, 0xae, 0xcb, 0xba, 0xe4, 0x94, 0x5f, 0xe6, 0xfb, 0xfd, 0xf9,
+	0xf2, 0x7d, 0x13, 0xe4, 0xe7, 0x9c, 0xe7, 0x25, 0x10, 0x9a, 0x35, 0xc4, 0x40, 0x85, 0xd6, 0x01,
+	0x49, 0x79, 0x55, 0x71, 0x46, 0xee, 0x6a, 0xf8, 0xd4, 0x02, 0x4b, 0xbb, 0x55, 0x4a, 0x05, 0x16,
+	0x35, 0x97, 0xdc, 0x3b, 0x31, 0x44, 0x4c, 0xb3, 0x06, 0x0f, 0x1a, 0xbc, 0x0e, 0xb0, 0xd1, 0x1c,
+	0x9f, 0xed, 0xf2, 0x04, 0xd6, 0x56, 0xcd, 0xa6, 0xe5, 0x0a, 0xd6, 0xc0, 0xe4, 0x4a, 0x76, 0x02,
+	0x8c, 0xfb, 0xf1, 0xcb, 0x31, 0xea, 0x12, 0xd6, 0x50, 0xf6, 0xc2, 0xd3, 0x31, 0x42, 0x59, 0x54,
+	0xb0, 0x6a, 0x59, 0x21, 0x7b, 0x71, 0xff, 0x4d, 0x44, 0xbf, 0xdd, 0xb6, 0x77, 0xe4, 0x73, 0x4d,
+	0x85, 0x80, 0xba, 0xe9, 0xeb, 0x4f, 0xad, 0xb9, 0x28, 0x08, 0x65, 0x8c, 0x4b, 0x2a, 0x0b, 0xce,
+	0xfa, 0xea, 0xec, 0x8b, 0x83, 0x1e, 0x5f, 0x5a, 0xff, 0x0b, 0x2a, 0xe6, 0x4c, 0xd6, 0x9d, 0x17,
+	0x21, 0xf7, 0x23, 0x74, 0x53, 0xe7, 0x99, 0xf3, 0xfc, 0xd0, 0x27, 0xf8, 0xff, 0x53, 0xc3, 0x7f,
+	0xeb, 0xdf, 0x40, 0x17, 0x2b, 0xad, 0xf7, 0x02, 0xb9, 0x29, 0x15, 0xd3, 0x89, 0xb6, 0x78, 0x62,
+	0x2d, 0x6c, 0x93, 0xf8, 0x35, 0x93, 0x81, 0xbf, 0xa4, 0x65, 0x0b, 0xb1, 0xe2, 0xcd, 0xbe, 0xba,
+	0xe8, 0xd1, 0x3f, 0x3e, 0x5e, 0x82, 0xee, 0xeb, 0x29, 0xe9, 0x3e, 0x8e, 0xfc, 0xcb, 0x9d, 0x7d,
+	0xe8, 0x31, 0x6d, 0xb4, 0xb1, 0x50, 0xba, 0x39, 0x6b, 0xab, 0xed, 0xd3, 0xd8, 0x98, 0x7a, 0x15,
+	0x42, 0x7f, 0x36, 0x38, 0x75, 0x75, 0xc4, 0xdb, 0x11, 0x11, 0x73, 0x25, 0xbe, 0xe9, 0x04, 0x6c,
+	0xc5, 0x0c, 0x95, 0xf8, 0x00, 0x2c, 0xf4, 0x0a, 0x74, 0x30, 0x6c, 0x4e, 0x4f, 0xe5, 0xc8, 0x5f,
+	0x8c, 0x48, 0xbb, 0x29, 0x2a, 0x78, 0xc7, 0x0a, 0xb9, 0x15, 0x66, 0x0b, 0xf1, 0x43, 0xd9, 0x23,
+	0xef, 0x0c, 0x1d, 0xea, 0xa8, 0x12, 0x58, 0x2e, 0x3f, 0x4c, 0xef, 0xed, 0x5f, 0x01, 0x52, 0xfc,
+	0x85, 0xa6, 0x9f, 0xff, 0x72, 0xd0, 0x2c, 0xe5, 0xd5, 0x9e, 0xa5, 0x9f, 0x6f, 0xdc, 0x9a, 0x6b,
+	0xe5, 0x79, 0xed, 0xbc, 0x7f, 0xd5, 0x8b, 0x72, 0x5e, 0x52, 0x96, 0x63, 0x5e, 0xe7, 0x24, 0x07,
+	0xa6, 0x13, 0xed, 0xc5, 0x16, 0x45, 0xb3, 0xeb, 0x97, 0x3d, 0x35, 0x8f, 0x6f, 0x13, 0xf7, 0x2a,
+	0x8a, 0xbe, 0x4f, 0x4e, 0xae, 0x8c, 0x59, 0x94, 0x35, 0xd8, 0x40, 0x85, 0x96, 0x01, 0xbe, 0xd0,
+	0xb4, 0x1f, 0x96, 0x90, 0x44, 0x59, 0x93, 0x0c, 0x84, 0x64, 0x19, 0x24, 0x86, 0xf0, 0x73, 0x32,
+	0x33, 0xa7, 0x61, 0x18, 0x65, 0x4d, 0x18, 0x0e, 0x94, 0x30, 0x5c, 0x06, 0x61, 0x68, 0x48, 0xb7,
+	0x0f, 0x74, 0x77, 0xc1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x8d, 0xaf, 0xa2, 0x4f, 0x04,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/keyword_plan_common.pb.go b/googleapis/ads/googleads/v3/common/keyword_plan_common.pb.go
new file mode 100644
index 0000000..e600e39
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/keyword_plan_common.pb.go
@@ -0,0 +1,112 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/keyword_plan_common.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Historical metrics.
+type KeywordPlanHistoricalMetrics struct {
+	// Average monthly searches for the past 12 months.
+	AvgMonthlySearches *wrappers.Int64Value `protobuf:"bytes,1,opt,name=avg_monthly_searches,json=avgMonthlySearches,proto3" json:"avg_monthly_searches,omitempty"`
+	// The competition level for the query.
+	Competition          enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel `protobuf:"varint,2,opt,name=competition,proto3,enum=google.ads.googleads.v3.enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel" json:"competition,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *KeywordPlanHistoricalMetrics) Reset()         { *m = KeywordPlanHistoricalMetrics{} }
+func (m *KeywordPlanHistoricalMetrics) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanHistoricalMetrics) ProtoMessage()    {}
+func (*KeywordPlanHistoricalMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f1a30a3ce87da9fb, []int{0}
+}
+
+func (m *KeywordPlanHistoricalMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Unmarshal(m, b)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanHistoricalMetrics.Merge(m, src)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Size(m)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanHistoricalMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanHistoricalMetrics proto.InternalMessageInfo
+
+func (m *KeywordPlanHistoricalMetrics) GetAvgMonthlySearches() *wrappers.Int64Value {
+	if m != nil {
+		return m.AvgMonthlySearches
+	}
+	return nil
+}
+
+func (m *KeywordPlanHistoricalMetrics) GetCompetition() enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel {
+	if m != nil {
+		return m.Competition
+	}
+	return enums.KeywordPlanCompetitionLevelEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanHistoricalMetrics)(nil), "google.ads.googleads.v3.common.KeywordPlanHistoricalMetrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/keyword_plan_common.proto", fileDescriptor_f1a30a3ce87da9fb)
+}
+
+var fileDescriptor_f1a30a3ce87da9fb = []byte{
+	// 387 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x6a, 0xe3, 0x30,
+	0x14, 0xc6, 0x1e, 0x98, 0x85, 0x03, 0xb3, 0x30, 0xc3, 0x10, 0x32, 0x21, 0x84, 0xac, 0xb2, 0x92,
+	0x20, 0x1e, 0x86, 0x41, 0xb3, 0x72, 0xda, 0x92, 0x96, 0x36, 0x10, 0x52, 0xf0, 0x22, 0x18, 0x8c,
+	0x62, 0xab, 0x8a, 0xa9, 0x2c, 0x19, 0x49, 0x76, 0x08, 0xf4, 0x34, 0x5d, 0xf6, 0x28, 0x3d, 0x4a,
+	0xbb, 0xea, 0x0d, 0x8a, 0x2d, 0x3b, 0x4d, 0x29, 0xc9, 0xca, 0xcf, 0x7a, 0xdf, 0x8f, 0xbe, 0xf7,
+	0xe4, 0xfc, 0xa3, 0x42, 0x50, 0x46, 0x20, 0x4e, 0x14, 0x34, 0x65, 0x55, 0x95, 0x1e, 0x8c, 0x45,
+	0x96, 0x09, 0x0e, 0xef, 0xc9, 0x6e, 0x2b, 0x64, 0x12, 0xe5, 0x0c, 0xf3, 0xc8, 0x9c, 0x81, 0x5c,
+	0x0a, 0x2d, 0xdc, 0x81, 0x81, 0x03, 0x9c, 0x28, 0xb0, 0x67, 0x82, 0xd2, 0x03, 0x06, 0xd5, 0x9b,
+	0x1e, 0x53, 0x26, 0xbc, 0xc8, 0xd4, 0x17, 0xe1, 0x9c, 0xe8, 0x54, 0xa7, 0x82, 0x47, 0x8c, 0x94,
+	0x84, 0x19, 0x8f, 0x5e, 0xe3, 0x01, 0xeb, 0xbf, 0x75, 0x71, 0x07, 0xb7, 0x12, 0xe7, 0x39, 0x91,
+	0xaa, 0xe9, 0xf7, 0x5b, 0x8f, 0x3c, 0x85, 0x98, 0x73, 0xa1, 0x71, 0x25, 0xd1, 0x74, 0x47, 0xaf,
+	0x96, 0xd3, 0xbf, 0x36, 0x36, 0x0b, 0x86, 0xf9, 0x65, 0xaa, 0xb4, 0x90, 0x69, 0x8c, 0xd9, 0x9c,
+	0x68, 0x99, 0xc6, 0xca, 0x9d, 0x3b, 0x3f, 0x71, 0x49, 0xa3, 0x4c, 0x70, 0xbd, 0x61, 0xbb, 0x48,
+	0x11, 0x2c, 0xe3, 0x0d, 0x51, 0x5d, 0x6b, 0x68, 0x8d, 0x3b, 0x93, 0xdf, 0x4d, 0x2c, 0xd0, 0xba,
+	0x83, 0x2b, 0xae, 0xff, 0xfe, 0x09, 0x30, 0x2b, 0xc8, 0xd2, 0xc5, 0x25, 0x9d, 0x1b, 0xde, 0x6d,
+	0x43, 0x73, 0x1f, 0x9c, 0xce, 0x41, 0x90, 0xae, 0x3d, 0xb4, 0xc6, 0x3f, 0x26, 0x2b, 0x70, 0x6c,
+	0x4e, 0xf5, 0x1c, 0xc0, 0xc1, 0x05, 0xcf, 0x3e, 0xc8, 0x37, 0xd5, 0x10, 0x2e, 0x78, 0x91, 0x9d,
+	0xea, 0x2f, 0x0f, 0xed, 0xa6, 0x6f, 0x96, 0x33, 0x8a, 0x45, 0x06, 0x4e, 0xaf, 0x65, 0xfa, 0xeb,
+	0xb3, 0x60, 0x26, 0xf8, 0xa2, 0x8a, 0xb7, 0xb0, 0x56, 0xe7, 0x0d, 0x93, 0x0a, 0x86, 0x39, 0x05,
+	0x42, 0x52, 0x48, 0x09, 0xaf, 0xc3, 0xb7, 0x0b, 0xcc, 0x53, 0x75, 0xec, 0xa5, 0xfc, 0x37, 0x9f,
+	0x47, 0xfb, 0xdb, 0xcc, 0xf7, 0x9f, 0xec, 0xc1, 0xcc, 0x88, 0xf9, 0x89, 0x02, 0xa6, 0xac, 0xaa,
+	0xc0, 0x03, 0xc6, 0xf3, 0xb9, 0x05, 0x84, 0x7e, 0xa2, 0xc2, 0x3d, 0x20, 0x0c, 0xbc, 0xd0, 0x00,
+	0x5e, 0xec, 0x91, 0x39, 0x45, 0xc8, 0x4f, 0x14, 0x42, 0x7b, 0x08, 0x42, 0x81, 0x87, 0x90, 0x01,
+	0xad, 0xbf, 0xd7, 0xb7, 0xf3, 0xde, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x88, 0x0d, 0x87, 0xc6,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/matching_function.pb.go b/googleapis/ads/googleads/v3/common/matching_function.pb.go
new file mode 100644
index 0000000..0596bc9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/matching_function.pb.go
@@ -0,0 +1,536 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/matching_function.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Matching function associated with a
+// CustomerFeed, CampaignFeed, or AdGroupFeed. The matching function is used
+// to filter the set of feed items selected.
+type MatchingFunction struct {
+	// String representation of the Function.
+	//
+	// Examples:
+	//
+	// 1. IDENTITY(true) or IDENTITY(false). All or no feed items served.
+	// 2. EQUALS(CONTEXT.DEVICE,"Mobile")
+	// 3. IN(FEED_ITEM_ID,{1000001,1000002,1000003})
+	// 4. CONTAINS_ANY(FeedAttribute[12345678,0],{"Mars cruise","Venus cruise"})
+	// 5. AND(IN(FEED_ITEM_ID,{10001,10002}),EQUALS(CONTEXT.DEVICE,"Mobile"))
+	//
+	// For more details, visit
+	// https://developers.google.com/adwords/api/docs/guides/feed-matching-functions
+	//
+	// Note that because multiple strings may represent the same underlying
+	// function (whitespace and single versus double quotation marks, for
+	// example), the value returned may not be identical to the string sent in a
+	// mutate request.
+	FunctionString *wrappers.StringValue `protobuf:"bytes,1,opt,name=function_string,json=functionString,proto3" json:"function_string,omitempty"`
+	// Operator for a function.
+	Operator enums.MatchingFunctionOperatorEnum_MatchingFunctionOperator `protobuf:"varint,4,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.MatchingFunctionOperatorEnum_MatchingFunctionOperator" json:"operator,omitempty"`
+	// The operands on the left hand side of the equation. This is also the
+	// operand to be used for single operand expressions such as NOT.
+	LeftOperands []*Operand `protobuf:"bytes,2,rep,name=left_operands,json=leftOperands,proto3" json:"left_operands,omitempty"`
+	// The operands on the right hand side of the equation.
+	RightOperands        []*Operand `protobuf:"bytes,3,rep,name=right_operands,json=rightOperands,proto3" json:"right_operands,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *MatchingFunction) Reset()         { *m = MatchingFunction{} }
+func (m *MatchingFunction) String() string { return proto.CompactTextString(m) }
+func (*MatchingFunction) ProtoMessage()    {}
+func (*MatchingFunction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{0}
+}
+
+func (m *MatchingFunction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MatchingFunction.Unmarshal(m, b)
+}
+func (m *MatchingFunction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MatchingFunction.Marshal(b, m, deterministic)
+}
+func (m *MatchingFunction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MatchingFunction.Merge(m, src)
+}
+func (m *MatchingFunction) XXX_Size() int {
+	return xxx_messageInfo_MatchingFunction.Size(m)
+}
+func (m *MatchingFunction) XXX_DiscardUnknown() {
+	xxx_messageInfo_MatchingFunction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MatchingFunction proto.InternalMessageInfo
+
+func (m *MatchingFunction) GetFunctionString() *wrappers.StringValue {
+	if m != nil {
+		return m.FunctionString
+	}
+	return nil
+}
+
+func (m *MatchingFunction) GetOperator() enums.MatchingFunctionOperatorEnum_MatchingFunctionOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.MatchingFunctionOperatorEnum_UNSPECIFIED
+}
+
+func (m *MatchingFunction) GetLeftOperands() []*Operand {
+	if m != nil {
+		return m.LeftOperands
+	}
+	return nil
+}
+
+func (m *MatchingFunction) GetRightOperands() []*Operand {
+	if m != nil {
+		return m.RightOperands
+	}
+	return nil
+}
+
+// An operand in a matching function.
+type Operand struct {
+	// Different operands that can be used in a matching function. Required.
+	//
+	// Types that are valid to be assigned to FunctionArgumentOperand:
+	//	*Operand_ConstantOperand_
+	//	*Operand_FeedAttributeOperand_
+	//	*Operand_FunctionOperand_
+	//	*Operand_RequestContextOperand_
+	FunctionArgumentOperand isOperand_FunctionArgumentOperand `protobuf_oneof:"function_argument_operand"`
+	XXX_NoUnkeyedLiteral    struct{}                          `json:"-"`
+	XXX_unrecognized        []byte                            `json:"-"`
+	XXX_sizecache           int32                             `json:"-"`
+}
+
+func (m *Operand) Reset()         { *m = Operand{} }
+func (m *Operand) String() string { return proto.CompactTextString(m) }
+func (*Operand) ProtoMessage()    {}
+func (*Operand) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{1}
+}
+
+func (m *Operand) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Operand.Unmarshal(m, b)
+}
+func (m *Operand) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Operand.Marshal(b, m, deterministic)
+}
+func (m *Operand) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Operand.Merge(m, src)
+}
+func (m *Operand) XXX_Size() int {
+	return xxx_messageInfo_Operand.Size(m)
+}
+func (m *Operand) XXX_DiscardUnknown() {
+	xxx_messageInfo_Operand.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Operand proto.InternalMessageInfo
+
+type isOperand_FunctionArgumentOperand interface {
+	isOperand_FunctionArgumentOperand()
+}
+
+type Operand_ConstantOperand_ struct {
+	ConstantOperand *Operand_ConstantOperand `protobuf:"bytes,1,opt,name=constant_operand,json=constantOperand,proto3,oneof"`
+}
+
+type Operand_FeedAttributeOperand_ struct {
+	FeedAttributeOperand *Operand_FeedAttributeOperand `protobuf:"bytes,2,opt,name=feed_attribute_operand,json=feedAttributeOperand,proto3,oneof"`
+}
+
+type Operand_FunctionOperand_ struct {
+	FunctionOperand *Operand_FunctionOperand `protobuf:"bytes,3,opt,name=function_operand,json=functionOperand,proto3,oneof"`
+}
+
+type Operand_RequestContextOperand_ struct {
+	RequestContextOperand *Operand_RequestContextOperand `protobuf:"bytes,4,opt,name=request_context_operand,json=requestContextOperand,proto3,oneof"`
+}
+
+func (*Operand_ConstantOperand_) isOperand_FunctionArgumentOperand() {}
+
+func (*Operand_FeedAttributeOperand_) isOperand_FunctionArgumentOperand() {}
+
+func (*Operand_FunctionOperand_) isOperand_FunctionArgumentOperand() {}
+
+func (*Operand_RequestContextOperand_) isOperand_FunctionArgumentOperand() {}
+
+func (m *Operand) GetFunctionArgumentOperand() isOperand_FunctionArgumentOperand {
+	if m != nil {
+		return m.FunctionArgumentOperand
+	}
+	return nil
+}
+
+func (m *Operand) GetConstantOperand() *Operand_ConstantOperand {
+	if x, ok := m.GetFunctionArgumentOperand().(*Operand_ConstantOperand_); ok {
+		return x.ConstantOperand
+	}
+	return nil
+}
+
+func (m *Operand) GetFeedAttributeOperand() *Operand_FeedAttributeOperand {
+	if x, ok := m.GetFunctionArgumentOperand().(*Operand_FeedAttributeOperand_); ok {
+		return x.FeedAttributeOperand
+	}
+	return nil
+}
+
+func (m *Operand) GetFunctionOperand() *Operand_FunctionOperand {
+	if x, ok := m.GetFunctionArgumentOperand().(*Operand_FunctionOperand_); ok {
+		return x.FunctionOperand
+	}
+	return nil
+}
+
+func (m *Operand) GetRequestContextOperand() *Operand_RequestContextOperand {
+	if x, ok := m.GetFunctionArgumentOperand().(*Operand_RequestContextOperand_); ok {
+		return x.RequestContextOperand
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Operand) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Operand_ConstantOperand_)(nil),
+		(*Operand_FeedAttributeOperand_)(nil),
+		(*Operand_FunctionOperand_)(nil),
+		(*Operand_RequestContextOperand_)(nil),
+	}
+}
+
+// A constant operand in a matching function.
+type Operand_ConstantOperand struct {
+	// Constant operand values. Required.
+	//
+	// Types that are valid to be assigned to ConstantOperandValue:
+	//	*Operand_ConstantOperand_StringValue
+	//	*Operand_ConstantOperand_LongValue
+	//	*Operand_ConstantOperand_BooleanValue
+	//	*Operand_ConstantOperand_DoubleValue
+	ConstantOperandValue isOperand_ConstantOperand_ConstantOperandValue `protobuf_oneof:"constant_operand_value"`
+	XXX_NoUnkeyedLiteral struct{}                                       `json:"-"`
+	XXX_unrecognized     []byte                                         `json:"-"`
+	XXX_sizecache        int32                                          `json:"-"`
+}
+
+func (m *Operand_ConstantOperand) Reset()         { *m = Operand_ConstantOperand{} }
+func (m *Operand_ConstantOperand) String() string { return proto.CompactTextString(m) }
+func (*Operand_ConstantOperand) ProtoMessage()    {}
+func (*Operand_ConstantOperand) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{1, 0}
+}
+
+func (m *Operand_ConstantOperand) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Operand_ConstantOperand.Unmarshal(m, b)
+}
+func (m *Operand_ConstantOperand) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Operand_ConstantOperand.Marshal(b, m, deterministic)
+}
+func (m *Operand_ConstantOperand) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Operand_ConstantOperand.Merge(m, src)
+}
+func (m *Operand_ConstantOperand) XXX_Size() int {
+	return xxx_messageInfo_Operand_ConstantOperand.Size(m)
+}
+func (m *Operand_ConstantOperand) XXX_DiscardUnknown() {
+	xxx_messageInfo_Operand_ConstantOperand.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Operand_ConstantOperand proto.InternalMessageInfo
+
+type isOperand_ConstantOperand_ConstantOperandValue interface {
+	isOperand_ConstantOperand_ConstantOperandValue()
+}
+
+type Operand_ConstantOperand_StringValue struct {
+	StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3,oneof"`
+}
+
+type Operand_ConstantOperand_LongValue struct {
+	LongValue *wrappers.Int64Value `protobuf:"bytes,2,opt,name=long_value,json=longValue,proto3,oneof"`
+}
+
+type Operand_ConstantOperand_BooleanValue struct {
+	BooleanValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=boolean_value,json=booleanValue,proto3,oneof"`
+}
+
+type Operand_ConstantOperand_DoubleValue struct {
+	DoubleValue *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=double_value,json=doubleValue,proto3,oneof"`
+}
+
+func (*Operand_ConstantOperand_StringValue) isOperand_ConstantOperand_ConstantOperandValue() {}
+
+func (*Operand_ConstantOperand_LongValue) isOperand_ConstantOperand_ConstantOperandValue() {}
+
+func (*Operand_ConstantOperand_BooleanValue) isOperand_ConstantOperand_ConstantOperandValue() {}
+
+func (*Operand_ConstantOperand_DoubleValue) isOperand_ConstantOperand_ConstantOperandValue() {}
+
+func (m *Operand_ConstantOperand) GetConstantOperandValue() isOperand_ConstantOperand_ConstantOperandValue {
+	if m != nil {
+		return m.ConstantOperandValue
+	}
+	return nil
+}
+
+func (m *Operand_ConstantOperand) GetStringValue() *wrappers.StringValue {
+	if x, ok := m.GetConstantOperandValue().(*Operand_ConstantOperand_StringValue); ok {
+		return x.StringValue
+	}
+	return nil
+}
+
+func (m *Operand_ConstantOperand) GetLongValue() *wrappers.Int64Value {
+	if x, ok := m.GetConstantOperandValue().(*Operand_ConstantOperand_LongValue); ok {
+		return x.LongValue
+	}
+	return nil
+}
+
+func (m *Operand_ConstantOperand) GetBooleanValue() *wrappers.BoolValue {
+	if x, ok := m.GetConstantOperandValue().(*Operand_ConstantOperand_BooleanValue); ok {
+		return x.BooleanValue
+	}
+	return nil
+}
+
+func (m *Operand_ConstantOperand) GetDoubleValue() *wrappers.DoubleValue {
+	if x, ok := m.GetConstantOperandValue().(*Operand_ConstantOperand_DoubleValue); ok {
+		return x.DoubleValue
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Operand_ConstantOperand) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Operand_ConstantOperand_StringValue)(nil),
+		(*Operand_ConstantOperand_LongValue)(nil),
+		(*Operand_ConstantOperand_BooleanValue)(nil),
+		(*Operand_ConstantOperand_DoubleValue)(nil),
+	}
+}
+
+// A feed attribute operand in a matching function.
+// Used to represent a feed attribute in feed.
+type Operand_FeedAttributeOperand struct {
+	// The associated feed. Required.
+	FeedId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_id,json=feedId,proto3" json:"feed_id,omitempty"`
+	// Id of the referenced feed attribute. Required.
+	FeedAttributeId      *wrappers.Int64Value `protobuf:"bytes,2,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Operand_FeedAttributeOperand) Reset()         { *m = Operand_FeedAttributeOperand{} }
+func (m *Operand_FeedAttributeOperand) String() string { return proto.CompactTextString(m) }
+func (*Operand_FeedAttributeOperand) ProtoMessage()    {}
+func (*Operand_FeedAttributeOperand) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{1, 1}
+}
+
+func (m *Operand_FeedAttributeOperand) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Operand_FeedAttributeOperand.Unmarshal(m, b)
+}
+func (m *Operand_FeedAttributeOperand) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Operand_FeedAttributeOperand.Marshal(b, m, deterministic)
+}
+func (m *Operand_FeedAttributeOperand) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Operand_FeedAttributeOperand.Merge(m, src)
+}
+func (m *Operand_FeedAttributeOperand) XXX_Size() int {
+	return xxx_messageInfo_Operand_FeedAttributeOperand.Size(m)
+}
+func (m *Operand_FeedAttributeOperand) XXX_DiscardUnknown() {
+	xxx_messageInfo_Operand_FeedAttributeOperand.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Operand_FeedAttributeOperand proto.InternalMessageInfo
+
+func (m *Operand_FeedAttributeOperand) GetFeedId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedId
+	}
+	return nil
+}
+
+func (m *Operand_FeedAttributeOperand) GetFeedAttributeId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeId
+	}
+	return nil
+}
+
+// A function operand in a matching function.
+// Used to represent nested functions.
+type Operand_FunctionOperand struct {
+	// The matching function held in this operand.
+	MatchingFunction     *MatchingFunction `protobuf:"bytes,1,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Operand_FunctionOperand) Reset()         { *m = Operand_FunctionOperand{} }
+func (m *Operand_FunctionOperand) String() string { return proto.CompactTextString(m) }
+func (*Operand_FunctionOperand) ProtoMessage()    {}
+func (*Operand_FunctionOperand) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{1, 2}
+}
+
+func (m *Operand_FunctionOperand) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Operand_FunctionOperand.Unmarshal(m, b)
+}
+func (m *Operand_FunctionOperand) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Operand_FunctionOperand.Marshal(b, m, deterministic)
+}
+func (m *Operand_FunctionOperand) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Operand_FunctionOperand.Merge(m, src)
+}
+func (m *Operand_FunctionOperand) XXX_Size() int {
+	return xxx_messageInfo_Operand_FunctionOperand.Size(m)
+}
+func (m *Operand_FunctionOperand) XXX_DiscardUnknown() {
+	xxx_messageInfo_Operand_FunctionOperand.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Operand_FunctionOperand proto.InternalMessageInfo
+
+func (m *Operand_FunctionOperand) GetMatchingFunction() *MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+// An operand in a function referring to a value in the request context.
+type Operand_RequestContextOperand struct {
+	// Type of value to be referred in the request context.
+	ContextType          enums.MatchingFunctionContextTypeEnum_MatchingFunctionContextType `protobuf:"varint,1,opt,name=context_type,json=contextType,proto3,enum=google.ads.googleads.v3.enums.MatchingFunctionContextTypeEnum_MatchingFunctionContextType" json:"context_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *Operand_RequestContextOperand) Reset()         { *m = Operand_RequestContextOperand{} }
+func (m *Operand_RequestContextOperand) String() string { return proto.CompactTextString(m) }
+func (*Operand_RequestContextOperand) ProtoMessage()    {}
+func (*Operand_RequestContextOperand) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73413c68281034a, []int{1, 3}
+}
+
+func (m *Operand_RequestContextOperand) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Operand_RequestContextOperand.Unmarshal(m, b)
+}
+func (m *Operand_RequestContextOperand) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Operand_RequestContextOperand.Marshal(b, m, deterministic)
+}
+func (m *Operand_RequestContextOperand) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Operand_RequestContextOperand.Merge(m, src)
+}
+func (m *Operand_RequestContextOperand) XXX_Size() int {
+	return xxx_messageInfo_Operand_RequestContextOperand.Size(m)
+}
+func (m *Operand_RequestContextOperand) XXX_DiscardUnknown() {
+	xxx_messageInfo_Operand_RequestContextOperand.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Operand_RequestContextOperand proto.InternalMessageInfo
+
+func (m *Operand_RequestContextOperand) GetContextType() enums.MatchingFunctionContextTypeEnum_MatchingFunctionContextType {
+	if m != nil {
+		return m.ContextType
+	}
+	return enums.MatchingFunctionContextTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*MatchingFunction)(nil), "google.ads.googleads.v3.common.MatchingFunction")
+	proto.RegisterType((*Operand)(nil), "google.ads.googleads.v3.common.Operand")
+	proto.RegisterType((*Operand_ConstantOperand)(nil), "google.ads.googleads.v3.common.Operand.ConstantOperand")
+	proto.RegisterType((*Operand_FeedAttributeOperand)(nil), "google.ads.googleads.v3.common.Operand.FeedAttributeOperand")
+	proto.RegisterType((*Operand_FunctionOperand)(nil), "google.ads.googleads.v3.common.Operand.FunctionOperand")
+	proto.RegisterType((*Operand_RequestContextOperand)(nil), "google.ads.googleads.v3.common.Operand.RequestContextOperand")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/matching_function.proto", fileDescriptor_a73413c68281034a)
+}
+
+var fileDescriptor_a73413c68281034a = []byte{
+	// 749 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xcd, 0x4e, 0xdb, 0x4a,
+	0x14, 0x26, 0x09, 0x82, 0xcb, 0x24, 0x24, 0x60, 0x01, 0x37, 0x37, 0x20, 0x84, 0xb2, 0xb9, 0xac,
+	0xc6, 0x55, 0x82, 0xa8, 0xe4, 0xd2, 0x4a, 0x0e, 0xff, 0x52, 0x5b, 0x90, 0x8b, 0xb2, 0x40, 0xa9,
+	0x22, 0xc7, 0x33, 0x31, 0x96, 0xec, 0x19, 0xd7, 0x33, 0x86, 0xb2, 0xe8, 0x63, 0xb4, 0x0f, 0xd0,
+	0x65, 0x97, 0xdd, 0xf5, 0x15, 0xfa, 0x26, 0xed, 0xaa, 0x8f, 0x50, 0xd9, 0x33, 0x76, 0x88, 0x93,
+	0x40, 0xb2, 0xf2, 0x9c, 0x39, 0xe7, 0xfb, 0xbe, 0x39, 0x3f, 0x33, 0x06, 0xfb, 0x36, 0xa5, 0xb6,
+	0x8b, 0x55, 0x13, 0x31, 0x55, 0x2c, 0xa3, 0xd5, 0x6d, 0x53, 0xb5, 0xa8, 0xe7, 0x51, 0xa2, 0x7a,
+	0x26, 0xb7, 0x6e, 0x1c, 0x62, 0x77, 0xfb, 0x21, 0xb1, 0xb8, 0x43, 0x09, 0xf4, 0x03, 0xca, 0xa9,
+	0xb2, 0x2d, 0x82, 0xa1, 0x89, 0x18, 0x4c, 0x71, 0xf0, 0xb6, 0x09, 0x05, 0xae, 0xd6, 0x9a, 0xc4,
+	0x8b, 0x49, 0xe8, 0xb1, 0x51, 0xda, 0xae, 0x45, 0x09, 0xc7, 0x1f, 0x79, 0x97, 0xdf, 0xfb, 0x58,
+	0x68, 0xd4, 0x5e, 0xcd, 0xca, 0x41, 0x7d, 0x1c, 0x98, 0x9c, 0x06, 0x12, 0x2f, 0xcf, 0xa8, 0xc6,
+	0x56, 0x2f, 0xec, 0xab, 0x77, 0x81, 0xe9, 0xfb, 0x38, 0x60, 0xd2, 0xbf, 0x95, 0xf0, 0xfb, 0x8e,
+	0x6a, 0x12, 0x42, 0xb9, 0x19, 0xb1, 0x48, 0x6f, 0xfd, 0x57, 0x1e, 0xac, 0xbc, 0x91, 0x12, 0x27,
+	0x52, 0x41, 0x39, 0x06, 0x95, 0x54, 0x8d, 0xf1, 0xc0, 0x21, 0x76, 0x35, 0xb7, 0x93, 0xdb, 0x2d,
+	0x36, 0xb6, 0x64, 0x15, 0x60, 0x22, 0x06, 0xdf, 0xc5, 0xee, 0xb6, 0xe9, 0x86, 0xd8, 0x28, 0x27,
+	0x20, 0xb1, 0xa9, 0xf8, 0xe0, 0x9f, 0xe4, 0xac, 0xd5, 0xf9, 0x9d, 0xdc, 0x6e, 0xb9, 0x71, 0x05,
+	0x27, 0x15, 0x34, 0x4e, 0x16, 0x66, 0x4f, 0x72, 0x21, 0xe1, 0xc7, 0x24, 0xf4, 0x26, 0x3a, 0x8d,
+	0x54, 0x45, 0x79, 0x0d, 0x96, 0x5d, 0xdc, 0xe7, 0xa2, 0x44, 0x04, 0xb1, 0x6a, 0x7e, 0xa7, 0xb0,
+	0x5b, 0x6c, 0xfc, 0x0f, 0x1f, 0xef, 0x23, 0xbc, 0x10, 0xf1, 0x46, 0x29, 0x42, 0x4b, 0x83, 0x29,
+	0x6f, 0x41, 0x39, 0x70, 0xec, 0x9b, 0x07, 0x74, 0x85, 0xd9, 0xe8, 0x96, 0x63, 0x78, 0xc2, 0x57,
+	0xff, 0xb1, 0x04, 0x16, 0xa5, 0xa1, 0x20, 0xb0, 0x62, 0x51, 0xc2, 0xb8, 0x49, 0x52, 0x7a, 0x59,
+	0xe3, 0xe7, 0x53, 0xb2, 0xc3, 0x43, 0x89, 0x97, 0xf6, 0xd9, 0x9c, 0x51, 0xb1, 0x86, 0xb7, 0x14,
+	0x0e, 0x36, 0xfa, 0x18, 0xa3, 0xae, 0xc9, 0x79, 0xe0, 0xf4, 0x42, 0x8e, 0x53, 0xad, 0x7c, 0xac,
+	0x75, 0x30, 0xad, 0xd6, 0x09, 0xc6, 0x48, 0x4f, 0x48, 0x06, 0x82, 0x6b, 0xfd, 0x31, 0xfb, 0x51,
+	0x6e, 0xc3, 0xc3, 0x4a, 0x50, 0xb5, 0x30, 0x5b, 0x6e, 0x43, 0x3d, 0x16, 0xb9, 0xf5, 0x87, 0xb7,
+	0x94, 0x3b, 0xf0, 0x6f, 0x80, 0x3f, 0x84, 0x98, 0xf1, 0xf4, 0x56, 0x25, 0x62, 0xf3, 0xb1, 0xd8,
+	0xcb, 0x69, 0xc5, 0x0c, 0x41, 0x73, 0x28, 0x58, 0x06, 0x92, 0xeb, 0xc1, 0x38, 0x47, 0xed, 0x7b,
+	0x1e, 0x54, 0x32, 0xb5, 0x57, 0x74, 0x50, 0x12, 0x17, 0xa5, 0x7b, 0x1b, 0x5d, 0x85, 0x69, 0xae,
+	0xcb, 0xd9, 0x9c, 0x51, 0x64, 0x03, 0x53, 0x39, 0x00, 0xc0, 0xa5, 0x29, 0x81, 0xe8, 0xcf, 0xe6,
+	0x08, 0xc1, 0x39, 0xe1, 0xfb, 0x7b, 0x09, 0x7e, 0x29, 0x02, 0x08, 0xb4, 0x0e, 0x96, 0x7b, 0x94,
+	0xba, 0xd8, 0x24, 0x92, 0x40, 0x14, 0xbc, 0x36, 0x42, 0xd0, 0xa2, 0xd4, 0x4d, 0xf0, 0x25, 0x09,
+	0x49, 0x28, 0x4a, 0x88, 0x86, 0x3d, 0x17, 0x4b, 0x86, 0xf9, 0x09, 0x39, 0x1c, 0xc5, 0x41, 0x69,
+	0x0e, 0x68, 0x60, 0xb6, 0xaa, 0x60, 0x23, 0x3b, 0xd5, 0x82, 0xac, 0xf6, 0x39, 0x07, 0xd6, 0xc6,
+	0x0d, 0x91, 0xb2, 0x07, 0x16, 0xe3, 0x11, 0x75, 0x92, 0xf9, 0x7f, 0x2c, 0x67, 0x63, 0x21, 0x8a,
+	0x3d, 0x47, 0xca, 0x29, 0x58, 0xcd, 0x0c, 0xb6, 0x83, 0xa6, 0xa8, 0x99, 0x51, 0x19, 0x1a, 0xd8,
+	0x73, 0x54, 0xf3, 0x41, 0x25, 0x33, 0x6b, 0xca, 0x7b, 0xb0, 0x3a, 0xf2, 0xe8, 0xca, 0xb3, 0x3d,
+	0x7b, 0x6a, 0xa4, 0xb2, 0x6f, 0x94, 0xb1, 0xe2, 0x65, 0x76, 0x6a, 0x5f, 0x72, 0x60, 0x7d, 0xec,
+	0xc4, 0x29, 0x9f, 0x40, 0xe9, 0xe1, 0xff, 0x21, 0xd6, 0x2c, 0x37, 0xae, 0x67, 0x7c, 0x33, 0x25,
+	0xe9, 0xd5, 0xbd, 0x8f, 0xc7, 0x3e, 0x9b, 0x0f, 0xfc, 0x46, 0xd1, 0x1a, 0x18, 0xad, 0x4d, 0xf0,
+	0x5f, 0x7a, 0x6d, 0xcd, 0xc0, 0x0e, 0x3d, 0x3c, 0xe8, 0x62, 0xeb, 0x4f, 0x0e, 0xd4, 0x2d, 0xea,
+	0x3d, 0x91, 0x7f, 0x6b, 0x3d, 0xab, 0x76, 0x19, 0x35, 0xe1, 0x32, 0x77, 0x7d, 0x24, 0x81, 0x36,
+	0x75, 0x4d, 0x62, 0x43, 0x1a, 0xd8, 0xaa, 0x8d, 0x49, 0xdc, 0xa2, 0xe4, 0xaf, 0xe7, 0x3b, 0x6c,
+	0xd2, 0x0f, 0xfa, 0x85, 0xf8, 0x7c, 0xcd, 0x17, 0x4e, 0x75, 0xfd, 0x5b, 0x7e, 0xfb, 0x54, 0x90,
+	0xe9, 0x88, 0x41, 0xb1, 0x8c, 0x56, 0xed, 0x26, 0x3c, 0x8c, 0xc3, 0x7e, 0x26, 0x01, 0x1d, 0x1d,
+	0xb1, 0x4e, 0x1a, 0xd0, 0x69, 0x37, 0x3b, 0x22, 0xe0, 0x77, 0xbe, 0x2e, 0x76, 0x35, 0x4d, 0x47,
+	0x4c, 0xd3, 0xd2, 0x10, 0x4d, 0x6b, 0x37, 0x35, 0x4d, 0x04, 0xf5, 0x16, 0xe2, 0xd3, 0x35, 0xff,
+	0x06, 0x00, 0x00, 0xff, 0xff, 0x29, 0xdc, 0x21, 0x0f, 0x3d, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/metrics.pb.go b/googleapis/ads/googleads/v3/common/metrics.pb.go
new file mode 100644
index 0000000..c8bac59
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/metrics.pb.go
@@ -0,0 +1,1394 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/metrics.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Metrics data.
+type Metrics struct {
+	// The percent of your ad impressions that are shown as the very first ad
+	// above the organic search results.
+	AbsoluteTopImpressionPercentage *wrappers.DoubleValue `protobuf:"bytes,95,opt,name=absolute_top_impression_percentage,json=absoluteTopImpressionPercentage,proto3" json:"absolute_top_impression_percentage,omitempty"`
+	// Average cost of viewable impressions (`active_view_impressions`).
+	ActiveViewCpm *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=active_view_cpm,json=activeViewCpm,proto3" json:"active_view_cpm,omitempty"`
+	// Active view measurable clicks divided by active view viewable impressions.
+	// This metric is reported only for display network.
+	ActiveViewCtr *wrappers.DoubleValue `protobuf:"bytes,79,opt,name=active_view_ctr,json=activeViewCtr,proto3" json:"active_view_ctr,omitempty"`
+	// A measurement of how often your ad has become viewable on a Display
+	// Network site.
+	ActiveViewImpressions *wrappers.Int64Value `protobuf:"bytes,2,opt,name=active_view_impressions,json=activeViewImpressions,proto3" json:"active_view_impressions,omitempty"`
+	// The ratio of impressions that could be measured by Active View over the
+	// number of served impressions.
+	ActiveViewMeasurability *wrappers.DoubleValue `protobuf:"bytes,96,opt,name=active_view_measurability,json=activeViewMeasurability,proto3" json:"active_view_measurability,omitempty"`
+	// The cost of the impressions you received that were measurable by Active
+	// View.
+	ActiveViewMeasurableCostMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=active_view_measurable_cost_micros,json=activeViewMeasurableCostMicros,proto3" json:"active_view_measurable_cost_micros,omitempty"`
+	// The number of times your ads are appearing on placements in positions
+	// where they can be seen.
+	ActiveViewMeasurableImpressions *wrappers.Int64Value `protobuf:"bytes,4,opt,name=active_view_measurable_impressions,json=activeViewMeasurableImpressions,proto3" json:"active_view_measurable_impressions,omitempty"`
+	// The percentage of time when your ad appeared on an Active View enabled site
+	// (measurable impressions) and was viewable (viewable impressions).
+	ActiveViewViewability *wrappers.DoubleValue `protobuf:"bytes,97,opt,name=active_view_viewability,json=activeViewViewability,proto3" json:"active_view_viewability,omitempty"`
+	// All conversions from interactions (as oppose to view through conversions)
+	// divided by the number of ad interactions.
+	AllConversionsFromInteractionsRate *wrappers.DoubleValue `protobuf:"bytes,65,opt,name=all_conversions_from_interactions_rate,json=allConversionsFromInteractionsRate,proto3" json:"all_conversions_from_interactions_rate,omitempty"`
+	// The total value of all conversions.
+	AllConversionsValue *wrappers.DoubleValue `protobuf:"bytes,66,opt,name=all_conversions_value,json=allConversionsValue,proto3" json:"all_conversions_value,omitempty"`
+	// The total number of conversions. This only includes conversion actions
+	// which include_in_conversions_metric attribute is set to true.
+	AllConversions *wrappers.DoubleValue `protobuf:"bytes,7,opt,name=all_conversions,json=allConversions,proto3" json:"all_conversions,omitempty"`
+	// The value of all conversions divided by the total cost of ad interactions
+	// (such as clicks for text ads or views for video ads).
+	AllConversionsValuePerCost *wrappers.DoubleValue `protobuf:"bytes,62,opt,name=all_conversions_value_per_cost,json=allConversionsValuePerCost,proto3" json:"all_conversions_value_per_cost,omitempty"`
+	// The number of times people clicked the "Call" button to call a store during
+	// or after clicking an ad. This number doesn't include whether or not calls
+	// were connected, or the duration of any calls.
+	// This metric applies to feed items only.
+	AllConversionsFromClickToCall *wrappers.DoubleValue `protobuf:"bytes,118,opt,name=all_conversions_from_click_to_call,json=allConversionsFromClickToCall,proto3" json:"all_conversions_from_click_to_call,omitempty"`
+	// The number of times people clicked a "Get directions" button to navigate to
+	// a store after clicking an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromDirections *wrappers.DoubleValue `protobuf:"bytes,119,opt,name=all_conversions_from_directions,json=allConversionsFromDirections,proto3" json:"all_conversions_from_directions,omitempty"`
+	// The value of all conversions from interactions divided by the total number
+	// of interactions.
+	AllConversionsFromInteractionsValuePerInteraction *wrappers.DoubleValue `protobuf:"bytes,67,opt,name=all_conversions_from_interactions_value_per_interaction,json=allConversionsFromInteractionsValuePerInteraction,proto3" json:"all_conversions_from_interactions_value_per_interaction,omitempty"`
+	// The number of times people clicked a link to view a store's menu after
+	// clicking an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromMenu *wrappers.DoubleValue `protobuf:"bytes,120,opt,name=all_conversions_from_menu,json=allConversionsFromMenu,proto3" json:"all_conversions_from_menu,omitempty"`
+	// The number of times people placed an order at a store after clicking an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromOrder *wrappers.DoubleValue `protobuf:"bytes,121,opt,name=all_conversions_from_order,json=allConversionsFromOrder,proto3" json:"all_conversions_from_order,omitempty"`
+	// The number of other conversions (for example, posting a review or saving a
+	// location for a store) that occurred after people clicked an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromOtherEngagement *wrappers.DoubleValue `protobuf:"bytes,122,opt,name=all_conversions_from_other_engagement,json=allConversionsFromOtherEngagement,proto3" json:"all_conversions_from_other_engagement,omitempty"`
+	// Estimated number of times people visited a store after clicking an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromStoreVisit *wrappers.DoubleValue `protobuf:"bytes,123,opt,name=all_conversions_from_store_visit,json=allConversionsFromStoreVisit,proto3" json:"all_conversions_from_store_visit,omitempty"`
+	// The number of times that people were taken to a store's URL after clicking
+	// an ad.
+	// This metric applies to feed items only.
+	AllConversionsFromStoreWebsite *wrappers.DoubleValue `protobuf:"bytes,124,opt,name=all_conversions_from_store_website,json=allConversionsFromStoreWebsite,proto3" json:"all_conversions_from_store_website,omitempty"`
+	// The average amount you pay per interaction. This amount is the total cost
+	// of your ads divided by the total number of interactions.
+	AverageCost *wrappers.DoubleValue `protobuf:"bytes,8,opt,name=average_cost,json=averageCost,proto3" json:"average_cost,omitempty"`
+	// The total cost of all clicks divided by the total number of clicks
+	// received.
+	AverageCpc *wrappers.DoubleValue `protobuf:"bytes,9,opt,name=average_cpc,json=averageCpc,proto3" json:"average_cpc,omitempty"`
+	// The average amount that you've been charged for an ad engagement. This
+	// amount is the total cost of all ad engagements divided by the total number
+	// of ad engagements.
+	AverageCpe *wrappers.DoubleValue `protobuf:"bytes,98,opt,name=average_cpe,json=averageCpe,proto3" json:"average_cpe,omitempty"`
+	// Average cost-per-thousand impressions (CPM).
+	AverageCpm *wrappers.DoubleValue `protobuf:"bytes,10,opt,name=average_cpm,json=averageCpm,proto3" json:"average_cpm,omitempty"`
+	// The average amount you pay each time someone views your ad.
+	// The average CPV is defined by the total cost of all ad views divided by
+	// the number of views.
+	AverageCpv *wrappers.DoubleValue `protobuf:"bytes,11,opt,name=average_cpv,json=averageCpv,proto3" json:"average_cpv,omitempty"`
+	// Average number of pages viewed per session.
+	AveragePageViews *wrappers.DoubleValue `protobuf:"bytes,99,opt,name=average_page_views,json=averagePageViews,proto3" json:"average_page_views,omitempty"`
+	// Total duration of all sessions (in seconds) / number of sessions. Imported
+	// from Google Analytics.
+	AverageTimeOnSite *wrappers.DoubleValue `protobuf:"bytes,84,opt,name=average_time_on_site,json=averageTimeOnSite,proto3" json:"average_time_on_site,omitempty"`
+	// An indication of how other advertisers are bidding on similar products.
+	BenchmarkAverageMaxCpc *wrappers.DoubleValue `protobuf:"bytes,14,opt,name=benchmark_average_max_cpc,json=benchmarkAverageMaxCpc,proto3" json:"benchmark_average_max_cpc,omitempty"`
+	// An indication on how other advertisers' Shopping ads for similar products
+	// are performing based on how often people who see their ad click on it.
+	BenchmarkCtr *wrappers.DoubleValue `protobuf:"bytes,77,opt,name=benchmark_ctr,json=benchmarkCtr,proto3" json:"benchmark_ctr,omitempty"`
+	// Percentage of clicks where the user only visited a single page on your
+	// site. Imported from Google Analytics.
+	BounceRate *wrappers.DoubleValue `protobuf:"bytes,15,opt,name=bounce_rate,json=bounceRate,proto3" json:"bounce_rate,omitempty"`
+	// The number of clicks.
+	Clicks *wrappers.Int64Value `protobuf:"bytes,19,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// The number of times your ad or your site's listing in the unpaid
+	// results was clicked. See the help page at
+	// https://support.google.com/google-ads/answer/3097241 for details.
+	CombinedClicks *wrappers.Int64Value `protobuf:"bytes,115,opt,name=combined_clicks,json=combinedClicks,proto3" json:"combined_clicks,omitempty"`
+	// The number of times your ad or your site's listing in the unpaid
+	// results was clicked (combined_clicks) divided by combined_queries. See the
+	// help page at https://support.google.com/google-ads/answer/3097241 for
+	// details.
+	CombinedClicksPerQuery *wrappers.DoubleValue `protobuf:"bytes,116,opt,name=combined_clicks_per_query,json=combinedClicksPerQuery,proto3" json:"combined_clicks_per_query,omitempty"`
+	// The number of searches that returned pages from your site in the unpaid
+	// results or showed one of your text ads. See the help page at
+	// https://support.google.com/google-ads/answer/3097241 for details.
+	CombinedQueries *wrappers.Int64Value `protobuf:"bytes,117,opt,name=combined_queries,json=combinedQueries,proto3" json:"combined_queries,omitempty"`
+	// The estimated percent of times that your ad was eligible to show
+	// on the Display Network but didn't because your budget was too low.
+	// Note: Content budget lost impression share is reported in the range of 0
+	// to 0.9. Any value above 0.9 is reported as 0.9001.
+	ContentBudgetLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,20,opt,name=content_budget_lost_impression_share,json=contentBudgetLostImpressionShare,proto3" json:"content_budget_lost_impression_share,omitempty"`
+	// The impressions you've received on the Display Network divided
+	// by the estimated number of impressions you were eligible to receive.
+	// Note: Content impression share is reported in the range of 0.1 to 1. Any
+	// value below 0.1 is reported as 0.0999.
+	ContentImpressionShare *wrappers.DoubleValue `protobuf:"bytes,21,opt,name=content_impression_share,json=contentImpressionShare,proto3" json:"content_impression_share,omitempty"`
+	// The last date/time a conversion tag for this conversion action successfully
+	// fired and was seen by Google Ads. This firing event may not have been the
+	// result of an attributable conversion (e.g. because the tag was fired from a
+	// browser that did not previously click an ad from an appropriate
+	// advertiser). The date/time is in the customer's time zone.
+	ConversionLastReceivedRequestDateTime *wrappers.StringValue `protobuf:"bytes,73,opt,name=conversion_last_received_request_date_time,json=conversionLastReceivedRequestDateTime,proto3" json:"conversion_last_received_request_date_time,omitempty"`
+	// The date of the most recent conversion for this conversion action. The date
+	// is in the customer's time zone.
+	ConversionLastConversionDate *wrappers.StringValue `protobuf:"bytes,74,opt,name=conversion_last_conversion_date,json=conversionLastConversionDate,proto3" json:"conversion_last_conversion_date,omitempty"`
+	// The estimated percentage of impressions on the Display Network
+	// that your ads didn't receive due to poor Ad Rank.
+	// Note: Content rank lost impression share is reported in the range of 0
+	// to 0.9. Any value above 0.9 is reported as 0.9001.
+	ContentRankLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,22,opt,name=content_rank_lost_impression_share,json=contentRankLostImpressionShare,proto3" json:"content_rank_lost_impression_share,omitempty"`
+	// Conversions from interactions divided by the number of ad interactions
+	// (such as clicks for text ads or views for video ads). This only includes
+	// conversion actions which include_in_conversions_metric attribute is set to
+	// true.
+	ConversionsFromInteractionsRate *wrappers.DoubleValue `protobuf:"bytes,69,opt,name=conversions_from_interactions_rate,json=conversionsFromInteractionsRate,proto3" json:"conversions_from_interactions_rate,omitempty"`
+	// The total value of conversions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	ConversionsValue *wrappers.DoubleValue `protobuf:"bytes,70,opt,name=conversions_value,json=conversionsValue,proto3" json:"conversions_value,omitempty"`
+	// The value of conversions divided by the cost of ad interactions. This only
+	// includes conversion actions which include_in_conversions_metric attribute
+	// is set to true.
+	ConversionsValuePerCost *wrappers.DoubleValue `protobuf:"bytes,71,opt,name=conversions_value_per_cost,json=conversionsValuePerCost,proto3" json:"conversions_value_per_cost,omitempty"`
+	// The value of conversions from interactions divided by the number of ad
+	// interactions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	ConversionsFromInteractionsValuePerInteraction *wrappers.DoubleValue `protobuf:"bytes,72,opt,name=conversions_from_interactions_value_per_interaction,json=conversionsFromInteractionsValuePerInteraction,proto3" json:"conversions_from_interactions_value_per_interaction,omitempty"`
+	// The number of conversions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	Conversions *wrappers.DoubleValue `protobuf:"bytes,25,opt,name=conversions,proto3" json:"conversions,omitempty"`
+	// The sum of your cost-per-click (CPC) and cost-per-thousand impressions
+	// (CPM) costs during this period.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,26,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// The cost of ad interactions divided by all conversions.
+	CostPerAllConversions *wrappers.DoubleValue `protobuf:"bytes,68,opt,name=cost_per_all_conversions,json=costPerAllConversions,proto3" json:"cost_per_all_conversions,omitempty"`
+	// The cost of ad interactions divided by conversions. This only includes
+	// conversion actions which include_in_conversions_metric attribute is set to
+	// true.
+	CostPerConversion *wrappers.DoubleValue `protobuf:"bytes,28,opt,name=cost_per_conversion,json=costPerConversion,proto3" json:"cost_per_conversion,omitempty"`
+	// The cost of ad interactions divided by current model attributed
+	// conversions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	CostPerCurrentModelAttributedConversion *wrappers.DoubleValue `protobuf:"bytes,106,opt,name=cost_per_current_model_attributed_conversion,json=costPerCurrentModelAttributedConversion,proto3" json:"cost_per_current_model_attributed_conversion,omitempty"`
+	// Conversions from when a customer clicks on a Google Ads ad on one device,
+	// then converts on a different device or browser.
+	// Cross-device conversions are already included in all_conversions.
+	CrossDeviceConversions *wrappers.DoubleValue `protobuf:"bytes,29,opt,name=cross_device_conversions,json=crossDeviceConversions,proto3" json:"cross_device_conversions,omitempty"`
+	// The number of clicks your ad receives (Clicks) divided by the number
+	// of times your ad is shown (Impressions).
+	Ctr *wrappers.DoubleValue `protobuf:"bytes,30,opt,name=ctr,proto3" json:"ctr,omitempty"`
+	// Shows how your historic conversions data would look under the attribution
+	// model you've currently selected. This only includes conversion actions
+	// which include_in_conversions_metric attribute is set to true.
+	CurrentModelAttributedConversions *wrappers.DoubleValue `protobuf:"bytes,101,opt,name=current_model_attributed_conversions,json=currentModelAttributedConversions,proto3" json:"current_model_attributed_conversions,omitempty"`
+	// Current model attributed conversions from interactions divided by the
+	// number of ad interactions (such as clicks for text ads or views for video
+	// ads). This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	CurrentModelAttributedConversionsFromInteractionsRate *wrappers.DoubleValue `protobuf:"bytes,102,opt,name=current_model_attributed_conversions_from_interactions_rate,json=currentModelAttributedConversionsFromInteractionsRate,proto3" json:"current_model_attributed_conversions_from_interactions_rate,omitempty"`
+	// The value of current model attributed conversions from interactions divided
+	// by the number of ad interactions. This only includes conversion actions
+	// which include_in_conversions_metric attribute is set to true.
+	CurrentModelAttributedConversionsFromInteractionsValuePerInteraction *wrappers.DoubleValue `protobuf:"bytes,103,opt,name=current_model_attributed_conversions_from_interactions_value_per_interaction,json=currentModelAttributedConversionsFromInteractionsValuePerInteraction,proto3" json:"current_model_attributed_conversions_from_interactions_value_per_interaction,omitempty"`
+	// The total value of current model attributed conversions. This only includes
+	// conversion actions which include_in_conversions_metric attribute is set to
+	// true.
+	CurrentModelAttributedConversionsValue *wrappers.DoubleValue `protobuf:"bytes,104,opt,name=current_model_attributed_conversions_value,json=currentModelAttributedConversionsValue,proto3" json:"current_model_attributed_conversions_value,omitempty"`
+	// The value of current model attributed conversions divided by the cost of ad
+	// interactions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	CurrentModelAttributedConversionsValuePerCost *wrappers.DoubleValue `protobuf:"bytes,105,opt,name=current_model_attributed_conversions_value_per_cost,json=currentModelAttributedConversionsValuePerCost,proto3" json:"current_model_attributed_conversions_value_per_cost,omitempty"`
+	// How often people engage with your ad after it's shown to them. This is the
+	// number of ad expansions divided by the number of times your ad is shown.
+	EngagementRate *wrappers.DoubleValue `protobuf:"bytes,31,opt,name=engagement_rate,json=engagementRate,proto3" json:"engagement_rate,omitempty"`
+	// The number of engagements.
+	// An engagement occurs when a viewer expands your Lightbox ad. Also, in the
+	// future, other ad types may support engagement metrics.
+	Engagements *wrappers.Int64Value `protobuf:"bytes,32,opt,name=engagements,proto3" json:"engagements,omitempty"`
+	// Average lead value of hotel.
+	HotelAverageLeadValueMicros *wrappers.DoubleValue `protobuf:"bytes,75,opt,name=hotel_average_lead_value_micros,json=hotelAverageLeadValueMicros,proto3" json:"hotel_average_lead_value_micros,omitempty"`
+	// The average price difference between the price offered by reporting hotel
+	// advertiser and the cheapest price offered by the competing advertiser.
+	HotelPriceDifferencePercentage *wrappers.DoubleValue `protobuf:"bytes,129,opt,name=hotel_price_difference_percentage,json=hotelPriceDifferencePercentage,proto3" json:"hotel_price_difference_percentage,omitempty"`
+	// The creative historical quality score.
+	HistoricalCreativeQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,80,opt,name=historical_creative_quality_score,json=historicalCreativeQualityScore,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"historical_creative_quality_score,omitempty"`
+	// The quality of historical landing page experience.
+	HistoricalLandingPageQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,81,opt,name=historical_landing_page_quality_score,json=historicalLandingPageQualityScore,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"historical_landing_page_quality_score,omitempty"`
+	// The historical quality score.
+	HistoricalQualityScore *wrappers.Int64Value `protobuf:"bytes,82,opt,name=historical_quality_score,json=historicalQualityScore,proto3" json:"historical_quality_score,omitempty"`
+	// The historical search predicted click through rate (CTR).
+	HistoricalSearchPredictedCtr enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,83,opt,name=historical_search_predicted_ctr,json=historicalSearchPredictedCtr,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"historical_search_predicted_ctr,omitempty"`
+	// The number of times the ad was forwarded to someone else as a message.
+	GmailForwards *wrappers.Int64Value `protobuf:"bytes,85,opt,name=gmail_forwards,json=gmailForwards,proto3" json:"gmail_forwards,omitempty"`
+	// The number of times someone has saved your Gmail ad to their inbox as a
+	// message.
+	GmailSaves *wrappers.Int64Value `protobuf:"bytes,86,opt,name=gmail_saves,json=gmailSaves,proto3" json:"gmail_saves,omitempty"`
+	// The number of clicks to the landing page on the expanded state of Gmail
+	// ads.
+	GmailSecondaryClicks *wrappers.Int64Value `protobuf:"bytes,87,opt,name=gmail_secondary_clicks,json=gmailSecondaryClicks,proto3" json:"gmail_secondary_clicks,omitempty"`
+	// The number of times a store's location-based ad was shown.
+	// This metric applies to feed items only.
+	ImpressionsFromStoreReach *wrappers.Int64Value `protobuf:"bytes,125,opt,name=impressions_from_store_reach,json=impressionsFromStoreReach,proto3" json:"impressions_from_store_reach,omitempty"`
+	// Count of how often your ad has appeared on a search results page or
+	// website on the Google Network.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,37,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// How often people interact with your ad after it is shown to them.
+	// This is the number of interactions divided by the number of times your ad
+	// is shown.
+	InteractionRate *wrappers.DoubleValue `protobuf:"bytes,38,opt,name=interaction_rate,json=interactionRate,proto3" json:"interaction_rate,omitempty"`
+	// The number of interactions.
+	// An interaction is the main user action associated with an ad format-clicks
+	// for text and shopping ads, views for video ads, and so on.
+	Interactions *wrappers.Int64Value `protobuf:"bytes,39,opt,name=interactions,proto3" json:"interactions,omitempty"`
+	// The types of payable and free interactions.
+	InteractionEventTypes []enums.InteractionEventTypeEnum_InteractionEventType `protobuf:"varint,100,rep,packed,name=interaction_event_types,json=interactionEventTypes,proto3,enum=google.ads.googleads.v3.enums.InteractionEventTypeEnum_InteractionEventType" json:"interaction_event_types,omitempty"`
+	// The percentage of clicks filtered out of your total number of clicks
+	// (filtered + non-filtered clicks) during the reporting period.
+	InvalidClickRate *wrappers.DoubleValue `protobuf:"bytes,40,opt,name=invalid_click_rate,json=invalidClickRate,proto3" json:"invalid_click_rate,omitempty"`
+	// Number of clicks Google considers illegitimate and doesn't charge you for.
+	InvalidClicks *wrappers.Int64Value `protobuf:"bytes,41,opt,name=invalid_clicks,json=invalidClicks,proto3" json:"invalid_clicks,omitempty"`
+	// Number of message chats initiated for Click To Message impressions that
+	// were message tracking eligible.
+	MessageChats *wrappers.Int64Value `protobuf:"bytes,126,opt,name=message_chats,json=messageChats,proto3" json:"message_chats,omitempty"`
+	// Number of Click To Message impressions that were message tracking eligible.
+	MessageImpressions *wrappers.Int64Value `protobuf:"bytes,127,opt,name=message_impressions,json=messageImpressions,proto3" json:"message_impressions,omitempty"`
+	// Number of message chats initiated (message_chats) divided by the number
+	// of message impressions (message_impressions).
+	// Rate at which a user initiates a message chat from an ad impression with
+	// a messaging option and message tracking enabled.
+	// Note that this rate can be more than 1.0 for a given message impression.
+	MessageChatRate *wrappers.DoubleValue `protobuf:"bytes,128,opt,name=message_chat_rate,json=messageChatRate,proto3" json:"message_chat_rate,omitempty"`
+	// The percentage of mobile clicks that go to a mobile-friendly page.
+	MobileFriendlyClicksPercentage *wrappers.DoubleValue `protobuf:"bytes,109,opt,name=mobile_friendly_clicks_percentage,json=mobileFriendlyClicksPercentage,proto3" json:"mobile_friendly_clicks_percentage,omitempty"`
+	// The number of times someone clicked your site's listing in the unpaid
+	// results for a particular query. See the help page at
+	// https://support.google.com/google-ads/answer/3097241 for details.
+	OrganicClicks *wrappers.Int64Value `protobuf:"bytes,110,opt,name=organic_clicks,json=organicClicks,proto3" json:"organic_clicks,omitempty"`
+	// The number of times someone clicked your site's listing in the unpaid
+	// results (organic_clicks) divided by the total number of searches that
+	// returned pages from your site (organic_queries). See the help page at
+	// https://support.google.com/google-ads/answer/3097241 for details.
+	OrganicClicksPerQuery *wrappers.DoubleValue `protobuf:"bytes,111,opt,name=organic_clicks_per_query,json=organicClicksPerQuery,proto3" json:"organic_clicks_per_query,omitempty"`
+	// The number of listings for your site in the unpaid search results. See the
+	// help page at https://support.google.com/google-ads/answer/3097241 for
+	// details.
+	OrganicImpressions *wrappers.Int64Value `protobuf:"bytes,112,opt,name=organic_impressions,json=organicImpressions,proto3" json:"organic_impressions,omitempty"`
+	// The number of times a page from your site was listed in the unpaid search
+	// results (organic_impressions) divided by the number of searches returning
+	// your site's listing in the unpaid results (organic_queries). See the help
+	// page at https://support.google.com/google-ads/answer/3097241 for details.
+	OrganicImpressionsPerQuery *wrappers.DoubleValue `protobuf:"bytes,113,opt,name=organic_impressions_per_query,json=organicImpressionsPerQuery,proto3" json:"organic_impressions_per_query,omitempty"`
+	// The total number of searches that returned your site's listing in the
+	// unpaid results. See the help page at
+	// https://support.google.com/google-ads/answer/3097241 for details.
+	OrganicQueries *wrappers.Int64Value `protobuf:"bytes,114,opt,name=organic_queries,json=organicQueries,proto3" json:"organic_queries,omitempty"`
+	// Percentage of first-time sessions (from people who had never visited your
+	// site before). Imported from Google Analytics.
+	PercentNewVisitors *wrappers.DoubleValue `protobuf:"bytes,42,opt,name=percent_new_visitors,json=percentNewVisitors,proto3" json:"percent_new_visitors,omitempty"`
+	// Number of offline phone calls.
+	PhoneCalls *wrappers.Int64Value `protobuf:"bytes,43,opt,name=phone_calls,json=phoneCalls,proto3" json:"phone_calls,omitempty"`
+	// Number of offline phone impressions.
+	PhoneImpressions *wrappers.Int64Value `protobuf:"bytes,44,opt,name=phone_impressions,json=phoneImpressions,proto3" json:"phone_impressions,omitempty"`
+	// Number of phone calls received (phone_calls) divided by the number of
+	// times your phone number is shown (phone_impressions).
+	PhoneThroughRate *wrappers.DoubleValue `protobuf:"bytes,45,opt,name=phone_through_rate,json=phoneThroughRate,proto3" json:"phone_through_rate,omitempty"`
+	// Your clickthrough rate (Ctr) divided by the average clickthrough rate of
+	// all advertisers on the websites that show your ads. Measures how your ads
+	// perform on Display Network sites compared to other ads on the same sites.
+	RelativeCtr *wrappers.DoubleValue `protobuf:"bytes,46,opt,name=relative_ctr,json=relativeCtr,proto3" json:"relative_ctr,omitempty"`
+	// The percentage of the customer's Shopping or Search ad impressions that are
+	// shown in the most prominent Shopping position. See
+	// https://support.google.com/google-ads/answer/7501826
+	// for details. Any value below 0.1 is reported as 0.0999.
+	SearchAbsoluteTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,78,opt,name=search_absolute_top_impression_share,json=searchAbsoluteTopImpressionShare,proto3" json:"search_absolute_top_impression_share,omitempty"`
+	// The number estimating how often your ad wasn't the very first ad above the
+	// organic search results due to a low budget. Note: Search
+	// budget lost absolute top impression share is reported in the range of 0 to
+	// 0.9. Any value above 0.9 is reported as 0.9001.
+	SearchBudgetLostAbsoluteTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,88,opt,name=search_budget_lost_absolute_top_impression_share,json=searchBudgetLostAbsoluteTopImpressionShare,proto3" json:"search_budget_lost_absolute_top_impression_share,omitempty"`
+	// The estimated percent of times that your ad was eligible to show on the
+	// Search Network but didn't because your budget was too low. Note: Search
+	// budget lost impression share is reported in the range of 0 to 0.9. Any
+	// value above 0.9 is reported as 0.9001.
+	SearchBudgetLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,47,opt,name=search_budget_lost_impression_share,json=searchBudgetLostImpressionShare,proto3" json:"search_budget_lost_impression_share,omitempty"`
+	// The number estimating how often your ad didn't show anywhere above the
+	// organic search results due to a low budget. Note: Search
+	// budget lost top impression share is reported in the range of 0 to 0.9. Any
+	// value above 0.9 is reported as 0.9001.
+	SearchBudgetLostTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,89,opt,name=search_budget_lost_top_impression_share,json=searchBudgetLostTopImpressionShare,proto3" json:"search_budget_lost_top_impression_share,omitempty"`
+	// The number of clicks you've received on the Search Network
+	// divided by the estimated number of clicks you were eligible to receive.
+	// Note: Search click share is reported in the range of 0.1 to 1. Any value
+	// below 0.1 is reported as 0.0999.
+	SearchClickShare *wrappers.DoubleValue `protobuf:"bytes,48,opt,name=search_click_share,json=searchClickShare,proto3" json:"search_click_share,omitempty"`
+	// The impressions you've received divided by the estimated number of
+	// impressions you were eligible to receive on the Search Network for search
+	// terms that matched your keywords exactly (or were close variants of your
+	// keyword), regardless of your keyword match types. Note: Search exact match
+	// impression share is reported in the range of 0.1 to 1. Any value below 0.1
+	// is reported as 0.0999.
+	SearchExactMatchImpressionShare *wrappers.DoubleValue `protobuf:"bytes,49,opt,name=search_exact_match_impression_share,json=searchExactMatchImpressionShare,proto3" json:"search_exact_match_impression_share,omitempty"`
+	// The impressions you've received on the Search Network divided
+	// by the estimated number of impressions you were eligible to receive.
+	// Note: Search impression share is reported in the range of 0.1 to 1. Any
+	// value below 0.1 is reported as 0.0999.
+	SearchImpressionShare *wrappers.DoubleValue `protobuf:"bytes,50,opt,name=search_impression_share,json=searchImpressionShare,proto3" json:"search_impression_share,omitempty"`
+	// The number estimating how often your ad wasn't the very first ad above the
+	// organic search results due to poor Ad Rank.
+	// Note: Search rank lost absolute top impression share is reported in the
+	// range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
+	SearchRankLostAbsoluteTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,90,opt,name=search_rank_lost_absolute_top_impression_share,json=searchRankLostAbsoluteTopImpressionShare,proto3" json:"search_rank_lost_absolute_top_impression_share,omitempty"`
+	// The estimated percentage of impressions on the Search Network
+	// that your ads didn't receive due to poor Ad Rank.
+	// Note: Search rank lost impression share is reported in the range of 0 to
+	// 0.9. Any value above 0.9 is reported as 0.9001.
+	SearchRankLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,51,opt,name=search_rank_lost_impression_share,json=searchRankLostImpressionShare,proto3" json:"search_rank_lost_impression_share,omitempty"`
+	// The number estimating how often your ad didn't show anywhere above the
+	// organic search results due to poor Ad Rank.
+	// Note: Search rank lost top impression share is reported in the range of 0
+	// to 0.9. Any value above 0.9 is reported as 0.9001.
+	SearchRankLostTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,91,opt,name=search_rank_lost_top_impression_share,json=searchRankLostTopImpressionShare,proto3" json:"search_rank_lost_top_impression_share,omitempty"`
+	// The impressions you've received in the top location (anywhere above the
+	// organic search results) compared to the estimated number of impressions you
+	// were eligible to receive in the top location.
+	// Note: Search top impression share is reported in the range of 0.1 to 1. Any
+	// value below 0.1 is reported as 0.0999.
+	SearchTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,92,opt,name=search_top_impression_share,json=searchTopImpressionShare,proto3" json:"search_top_impression_share,omitempty"`
+	// A measure of how quickly your page loads after clicks on your mobile ads.
+	// The score is a range from 1 to 10, 10 being the fastest.
+	SpeedScore *wrappers.Int64Value `protobuf:"bytes,107,opt,name=speed_score,json=speedScore,proto3" json:"speed_score,omitempty"`
+	// The percent of your ad impressions that are shown anywhere above the
+	// organic search results.
+	TopImpressionPercentage *wrappers.DoubleValue `protobuf:"bytes,93,opt,name=top_impression_percentage,json=topImpressionPercentage,proto3" json:"top_impression_percentage,omitempty"`
+	// The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
+	// that reach a valid AMP page.
+	ValidAcceleratedMobilePagesClicksPercentage *wrappers.DoubleValue `protobuf:"bytes,108,opt,name=valid_accelerated_mobile_pages_clicks_percentage,json=validAcceleratedMobilePagesClicksPercentage,proto3" json:"valid_accelerated_mobile_pages_clicks_percentage,omitempty"`
+	// The value of all conversions divided by the number of all conversions.
+	ValuePerAllConversions *wrappers.DoubleValue `protobuf:"bytes,52,opt,name=value_per_all_conversions,json=valuePerAllConversions,proto3" json:"value_per_all_conversions,omitempty"`
+	// The value of conversions divided by the number of conversions. This only
+	// includes conversion actions which include_in_conversions_metric attribute
+	// is set to true.
+	ValuePerConversion *wrappers.DoubleValue `protobuf:"bytes,53,opt,name=value_per_conversion,json=valuePerConversion,proto3" json:"value_per_conversion,omitempty"`
+	// The value of current model attributed conversions divided by the number of
+	// the conversions. This only includes conversion actions which
+	// include_in_conversions_metric attribute is set to true.
+	ValuePerCurrentModelAttributedConversion *wrappers.DoubleValue `protobuf:"bytes,94,opt,name=value_per_current_model_attributed_conversion,json=valuePerCurrentModelAttributedConversion,proto3" json:"value_per_current_model_attributed_conversion,omitempty"`
+	// Percentage of impressions where the viewer watched all of your video.
+	VideoQuartile_100Rate *wrappers.DoubleValue `protobuf:"bytes,54,opt,name=video_quartile_100_rate,json=videoQuartile100Rate,proto3" json:"video_quartile_100_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 25% of your video.
+	VideoQuartile_25Rate *wrappers.DoubleValue `protobuf:"bytes,55,opt,name=video_quartile_25_rate,json=videoQuartile25Rate,proto3" json:"video_quartile_25_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 50% of your video.
+	VideoQuartile_50Rate *wrappers.DoubleValue `protobuf:"bytes,56,opt,name=video_quartile_50_rate,json=videoQuartile50Rate,proto3" json:"video_quartile_50_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 75% of your video.
+	VideoQuartile_75Rate *wrappers.DoubleValue `protobuf:"bytes,57,opt,name=video_quartile_75_rate,json=videoQuartile75Rate,proto3" json:"video_quartile_75_rate,omitempty"`
+	// The number of views your TrueView video ad receives divided by its number
+	// of impressions, including thumbnail impressions for TrueView in-display
+	// ads.
+	VideoViewRate *wrappers.DoubleValue `protobuf:"bytes,58,opt,name=video_view_rate,json=videoViewRate,proto3" json:"video_view_rate,omitempty"`
+	// The number of times your video ads were viewed.
+	VideoViews *wrappers.Int64Value `protobuf:"bytes,59,opt,name=video_views,json=videoViews,proto3" json:"video_views,omitempty"`
+	// The total number of view-through conversions.
+	// These happen when a customer sees an image or rich media ad, then later
+	// completes a conversion on your site without interacting with (e.g.,
+	// clicking on) another ad.
+	ViewThroughConversions *wrappers.Int64Value `protobuf:"bytes,60,opt,name=view_through_conversions,json=viewThroughConversions,proto3" json:"view_through_conversions,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
+	XXX_unrecognized       []byte               `json:"-"`
+	XXX_sizecache          int32                `json:"-"`
+}
+
+func (m *Metrics) Reset()         { *m = Metrics{} }
+func (m *Metrics) String() string { return proto.CompactTextString(m) }
+func (*Metrics) ProtoMessage()    {}
+func (*Metrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f3faaf084afc72bb, []int{0}
+}
+
+func (m *Metrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Metrics.Unmarshal(m, b)
+}
+func (m *Metrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Metrics.Marshal(b, m, deterministic)
+}
+func (m *Metrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Metrics.Merge(m, src)
+}
+func (m *Metrics) XXX_Size() int {
+	return xxx_messageInfo_Metrics.Size(m)
+}
+func (m *Metrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_Metrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Metrics proto.InternalMessageInfo
+
+func (m *Metrics) GetAbsoluteTopImpressionPercentage() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AbsoluteTopImpressionPercentage
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewCpm() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ActiveViewCpm
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ActiveViewCtr
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ActiveViewImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewMeasurability() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ActiveViewMeasurability
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewMeasurableCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.ActiveViewMeasurableCostMicros
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewMeasurableImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ActiveViewMeasurableImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetActiveViewViewability() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ActiveViewViewability
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromInteractionsRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromInteractionsRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsValue
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsValuePerCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsValuePerCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromClickToCall() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromClickToCall
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromDirections() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromDirections
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromInteractionsValuePerInteraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromInteractionsValuePerInteraction
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromMenu() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromMenu
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromOrder() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromOrder
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromOtherEngagement() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromOtherEngagement
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromStoreVisit() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromStoreVisit
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromStoreWebsite() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromStoreWebsite
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpc() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpc
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpe() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpe
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpm() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpm
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpv() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpv
+	}
+	return nil
+}
+
+func (m *Metrics) GetAveragePageViews() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AveragePageViews
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageTimeOnSite() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageTimeOnSite
+	}
+	return nil
+}
+
+func (m *Metrics) GetBenchmarkAverageMaxCpc() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BenchmarkAverageMaxCpc
+	}
+	return nil
+}
+
+func (m *Metrics) GetBenchmarkCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BenchmarkCtr
+	}
+	return nil
+}
+
+func (m *Metrics) GetBounceRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BounceRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetCombinedClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.CombinedClicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetCombinedClicksPerQuery() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CombinedClicksPerQuery
+	}
+	return nil
+}
+
+func (m *Metrics) GetCombinedQueries() *wrappers.Int64Value {
+	if m != nil {
+		return m.CombinedQueries
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentBudgetLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentBudgetLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionLastReceivedRequestDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionLastReceivedRequestDateTime
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionLastConversionDate() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionLastConversionDate
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentRankLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentRankLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsFromInteractionsRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsFromInteractionsRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsValue
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsValuePerCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsValuePerCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsFromInteractionsValuePerInteraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsFromInteractionsValuePerInteraction
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostPerAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CostPerAllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostPerConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CostPerConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostPerCurrentModelAttributedConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CostPerCurrentModelAttributedConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetCrossDeviceConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CrossDeviceConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Ctr
+	}
+	return nil
+}
+
+func (m *Metrics) GetCurrentModelAttributedConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CurrentModelAttributedConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCurrentModelAttributedConversionsFromInteractionsRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CurrentModelAttributedConversionsFromInteractionsRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CurrentModelAttributedConversionsFromInteractionsValuePerInteraction
+	}
+	return nil
+}
+
+func (m *Metrics) GetCurrentModelAttributedConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CurrentModelAttributedConversionsValue
+	}
+	return nil
+}
+
+func (m *Metrics) GetCurrentModelAttributedConversionsValuePerCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CurrentModelAttributedConversionsValuePerCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetEngagementRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.EngagementRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetEngagements() *wrappers.Int64Value {
+	if m != nil {
+		return m.Engagements
+	}
+	return nil
+}
+
+func (m *Metrics) GetHotelAverageLeadValueMicros() *wrappers.DoubleValue {
+	if m != nil {
+		return m.HotelAverageLeadValueMicros
+	}
+	return nil
+}
+
+func (m *Metrics) GetHotelPriceDifferencePercentage() *wrappers.DoubleValue {
+	if m != nil {
+		return m.HotelPriceDifferencePercentage
+	}
+	return nil
+}
+
+func (m *Metrics) GetHistoricalCreativeQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.HistoricalCreativeQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *Metrics) GetHistoricalLandingPageQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.HistoricalLandingPageQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *Metrics) GetHistoricalQualityScore() *wrappers.Int64Value {
+	if m != nil {
+		return m.HistoricalQualityScore
+	}
+	return nil
+}
+
+func (m *Metrics) GetHistoricalSearchPredictedCtr() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.HistoricalSearchPredictedCtr
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *Metrics) GetGmailForwards() *wrappers.Int64Value {
+	if m != nil {
+		return m.GmailForwards
+	}
+	return nil
+}
+
+func (m *Metrics) GetGmailSaves() *wrappers.Int64Value {
+	if m != nil {
+		return m.GmailSaves
+	}
+	return nil
+}
+
+func (m *Metrics) GetGmailSecondaryClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.GmailSecondaryClicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetImpressionsFromStoreReach() *wrappers.Int64Value {
+	if m != nil {
+		return m.ImpressionsFromStoreReach
+	}
+	return nil
+}
+
+func (m *Metrics) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetInteractionRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.InteractionRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetInteractions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Interactions
+	}
+	return nil
+}
+
+func (m *Metrics) GetInteractionEventTypes() []enums.InteractionEventTypeEnum_InteractionEventType {
+	if m != nil {
+		return m.InteractionEventTypes
+	}
+	return nil
+}
+
+func (m *Metrics) GetInvalidClickRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.InvalidClickRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetInvalidClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.InvalidClicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetMessageChats() *wrappers.Int64Value {
+	if m != nil {
+		return m.MessageChats
+	}
+	return nil
+}
+
+func (m *Metrics) GetMessageImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.MessageImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetMessageChatRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.MessageChatRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetMobileFriendlyClicksPercentage() *wrappers.DoubleValue {
+	if m != nil {
+		return m.MobileFriendlyClicksPercentage
+	}
+	return nil
+}
+
+func (m *Metrics) GetOrganicClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.OrganicClicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetOrganicClicksPerQuery() *wrappers.DoubleValue {
+	if m != nil {
+		return m.OrganicClicksPerQuery
+	}
+	return nil
+}
+
+func (m *Metrics) GetOrganicImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.OrganicImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetOrganicImpressionsPerQuery() *wrappers.DoubleValue {
+	if m != nil {
+		return m.OrganicImpressionsPerQuery
+	}
+	return nil
+}
+
+func (m *Metrics) GetOrganicQueries() *wrappers.Int64Value {
+	if m != nil {
+		return m.OrganicQueries
+	}
+	return nil
+}
+
+func (m *Metrics) GetPercentNewVisitors() *wrappers.DoubleValue {
+	if m != nil {
+		return m.PercentNewVisitors
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneCalls() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneCalls
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneThroughRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.PhoneThroughRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetRelativeCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.RelativeCtr
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchAbsoluteTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchAbsoluteTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchBudgetLostAbsoluteTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchBudgetLostAbsoluteTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchBudgetLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchBudgetLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchBudgetLostTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchBudgetLostTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchClickShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchClickShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchExactMatchImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchExactMatchImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchRankLostAbsoluteTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchRankLostAbsoluteTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchRankLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchRankLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchRankLostTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchRankLostTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSpeedScore() *wrappers.Int64Value {
+	if m != nil {
+		return m.SpeedScore
+	}
+	return nil
+}
+
+func (m *Metrics) GetTopImpressionPercentage() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TopImpressionPercentage
+	}
+	return nil
+}
+
+func (m *Metrics) GetValidAcceleratedMobilePagesClicksPercentage() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValidAcceleratedMobilePagesClicksPercentage
+	}
+	return nil
+}
+
+func (m *Metrics) GetValuePerAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValuePerAllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetValuePerConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValuePerConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetValuePerCurrentModelAttributedConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValuePerCurrentModelAttributedConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_100Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_100Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_25Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_25Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_50Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_50Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_75Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_75Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoViewRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoViewRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoViews() *wrappers.Int64Value {
+	if m != nil {
+		return m.VideoViews
+	}
+	return nil
+}
+
+func (m *Metrics) GetViewThroughConversions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ViewThroughConversions
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Metrics)(nil), "google.ads.googleads.v3.common.Metrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/metrics.proto", fileDescriptor_f3faaf084afc72bb)
+}
+
+var fileDescriptor_f3faaf084afc72bb = []byte{
+	// 2592 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x9a, 0x5b, 0x73, 0x14, 0xc7,
+	0xd9, 0xc7, 0x6b, 0xe1, 0x2d, 0xfb, 0xcd, 0x23, 0x90, 0x60, 0x10, 0xd0, 0x92, 0x65, 0x49, 0x28,
+	0xc6, 0x10, 0x0c, 0x2b, 0x21, 0x59, 0xc6, 0x11, 0x60, 0x67, 0x75, 0x00, 0x44, 0x24, 0xd0, 0x09,
+	0x09, 0x6c, 0x25, 0xe3, 0xde, 0x99, 0xd6, 0xee, 0x58, 0x73, 0x58, 0xba, 0x7b, 0x57, 0x28, 0x8e,
+	0x9d, 0xe3, 0x45, 0x72, 0x95, 0x54, 0xe5, 0x26, 0x95, 0xcb, 0x5c, 0xe6, 0x13, 0xe4, 0x0b, 0xe4,
+	0x26, 0x5f, 0x24, 0x55, 0xf9, 0x14, 0xa9, 0x3e, 0xcc, 0x4c, 0xef, 0xee, 0xac, 0xb6, 0x45, 0xf9,
+	0x06, 0x96, 0xa1, 0xff, 0xbf, 0xff, 0x33, 0xdd, 0x3d, 0x4f, 0x77, 0x3f, 0x33, 0x70, 0xbb, 0x96,
+	0x24, 0xb5, 0x90, 0x4c, 0x63, 0x9f, 0x4d, 0xab, 0x9f, 0xe2, 0x57, 0x6b, 0x6e, 0xda, 0x4b, 0xa2,
+	0x28, 0x89, 0xa7, 0x23, 0xc2, 0x69, 0xe0, 0xb1, 0x72, 0x83, 0x26, 0x3c, 0x71, 0xc6, 0x55, 0x93,
+	0x32, 0xf6, 0x59, 0x39, 0x6b, 0x5d, 0x6e, 0xcd, 0x95, 0x55, 0xeb, 0xd1, 0x85, 0x5e, 0x34, 0x12,
+	0x37, 0x23, 0x36, 0x1d, 0xc4, 0x9c, 0x50, 0xec, 0xf1, 0x20, 0x89, 0x5d, 0xd2, 0x22, 0x31, 0x77,
+	0xf9, 0x71, 0x83, 0x28, 0xf6, 0xe8, 0xa7, 0x27, 0x6b, 0x5f, 0x37, 0x71, 0x18, 0xf0, 0x63, 0x97,
+	0x79, 0x09, 0x25, 0x6e, 0xb5, 0xe9, 0x1d, 0x12, 0xae, 0x95, 0x3a, 0xaa, 0x69, 0xf9, 0xaf, 0x6a,
+	0xf3, 0x60, 0xfa, 0x88, 0xe2, 0x46, 0x83, 0x50, 0x1d, 0xf5, 0xe8, 0x58, 0x4a, 0x6e, 0x04, 0xd3,
+	0x38, 0x8e, 0x13, 0x8e, 0x45, 0x04, 0xfa, 0x7f, 0xa7, 0xfe, 0xf5, 0x1c, 0xde, 0x5d, 0x57, 0x77,
+	0xe9, 0x04, 0x30, 0x85, 0xab, 0x2c, 0x09, 0x9b, 0x9c, 0xb8, 0x3c, 0x69, 0xb8, 0x41, 0xd4, 0xa0,
+	0x84, 0x31, 0x11, 0x6f, 0x83, 0x50, 0x8f, 0xc4, 0x1c, 0xd7, 0x08, 0x72, 0x27, 0x4b, 0x37, 0x07,
+	0x66, 0xc7, 0x74, 0x0f, 0x94, 0x53, 0xdb, 0xf2, 0x72, 0xd2, 0xac, 0x86, 0x64, 0x17, 0x87, 0x4d,
+	0xb2, 0x35, 0x91, 0x72, 0x76, 0x92, 0xc6, 0x6a, 0x46, 0xd9, 0xc8, 0x20, 0xce, 0x32, 0x0c, 0x89,
+	0x9e, 0x68, 0x11, 0xb7, 0x15, 0x90, 0x23, 0xd7, 0x6b, 0x44, 0xa8, 0x64, 0xc1, 0x3d, 0xaf, 0x44,
+	0xbb, 0x01, 0x39, 0x5a, 0x6a, 0x44, 0x5d, 0x14, 0x4e, 0xd1, 0xf3, 0x53, 0x52, 0x38, 0x75, 0xb6,
+	0xe1, 0xaa, 0x49, 0xc9, 0xef, 0x9a, 0xa1, 0x33, 0x92, 0xf6, 0x5e, 0x17, 0x6d, 0x35, 0xe6, 0x9f,
+	0x7c, 0xac, 0x60, 0x97, 0x73, 0x58, 0x7e, 0xa7, 0xcc, 0x79, 0x09, 0x23, 0x26, 0x34, 0x22, 0x98,
+	0x35, 0x29, 0xae, 0x06, 0x62, 0x14, 0xd1, 0x57, 0x16, 0x41, 0x5e, 0xcd, 0xb9, 0xeb, 0xa6, 0xd8,
+	0xa9, 0xc1, 0x54, 0x11, 0x39, 0x24, 0xae, 0x97, 0x30, 0xee, 0x46, 0x81, 0x47, 0x13, 0x86, 0xce,
+	0xf6, 0x8f, 0x7c, 0xbc, 0xdb, 0x21, 0x24, 0x4b, 0x09, 0xe3, 0xeb, 0x12, 0xe1, 0xd4, 0x7b, 0x1a,
+	0x99, 0x5d, 0xf4, 0x7f, 0xfd, 0x8d, 0x26, 0x8a, 0x8c, 0xcc, 0xce, 0xda, 0x69, 0x1f, 0x01, 0xf1,
+	0x47, 0xda, 0x55, 0xd8, 0xa2, 0xab, 0x8c, 0x21, 0xd8, 0xcd, 0xa5, 0x4e, 0x03, 0x3e, 0xc4, 0x61,
+	0xe8, 0x7a, 0x49, 0xdc, 0x22, 0x54, 0x1a, 0xb9, 0x07, 0x34, 0x89, 0x5c, 0xe3, 0x39, 0x64, 0x2e,
+	0xc5, 0x9c, 0xa0, 0x8a, 0x85, 0xc9, 0x14, 0x0e, 0xc3, 0xa5, 0x1c, 0xf5, 0x88, 0x26, 0xd1, 0xaa,
+	0x01, 0xda, 0xc2, 0x9c, 0x38, 0x1b, 0x70, 0xb9, 0xd3, 0xb1, 0x25, 0xc4, 0x68, 0xd1, 0xc2, 0xe0,
+	0x52, 0xbb, 0x81, 0xbc, 0xe8, 0xac, 0xc0, 0x50, 0x07, 0x11, 0xbd, 0x6b, 0xc1, 0x1a, 0x6c, 0x67,
+	0x39, 0x5f, 0xc1, 0x78, 0x61, 0x60, 0xe2, 0xb9, 0x96, 0xd3, 0x06, 0x7d, 0x66, 0x41, 0x1d, 0x2d,
+	0x88, 0x70, 0x83, 0x50, 0x31, 0x65, 0xe4, 0xac, 0x2c, 0xea, 0x6c, 0x2f, 0x0c, 0xbc, 0x43, 0x97,
+	0x27, 0xae, 0x87, 0xc3, 0x10, 0xb5, 0x2c, 0x5c, 0xde, 0xef, 0xee, 0xe8, 0x25, 0x01, 0xd9, 0x49,
+	0x96, 0x70, 0x18, 0x3a, 0x1e, 0x4c, 0x14, 0x1a, 0xf9, 0x01, 0x25, 0x6a, 0x28, 0xd0, 0x91, 0x85,
+	0xcb, 0x58, 0xb7, 0xcb, 0x72, 0x46, 0x70, 0xfe, 0x5c, 0x82, 0x7b, 0xfd, 0xe7, 0x4e, 0xde, 0x85,
+	0xc6, 0x65, 0xb4, 0x64, 0xe1, 0x7e, 0xf7, 0xe4, 0xc9, 0x94, 0xf6, 0xac, 0x71, 0xcd, 0xd9, 0x83,
+	0x91, 0xc2, 0x88, 0x22, 0x12, 0x37, 0xd1, 0x1b, 0x0b, 0xcf, 0x2b, 0xdd, 0x9e, 0xeb, 0x24, 0x6e,
+	0x3a, 0xaf, 0x60, 0xb4, 0x10, 0x9c, 0x50, 0x9f, 0x50, 0x74, 0x6c, 0x95, 0xaa, 0xba, 0xc8, 0xcf,
+	0x85, 0xd8, 0x89, 0xe1, 0x7a, 0x31, 0x9a, 0xd7, 0x09, 0x75, 0x49, 0x5c, 0xc3, 0x35, 0x12, 0x91,
+	0x98, 0xa3, 0x5f, 0x58, 0xb8, 0x5c, 0x2b, 0x70, 0x11, 0x9c, 0x95, 0x0c, 0xe3, 0xf8, 0x30, 0x59,
+	0xe8, 0xc7, 0xb8, 0x58, 0x35, 0x5b, 0x01, 0x0b, 0x38, 0xfa, 0xe6, 0xed, 0x26, 0xc7, 0xb6, 0x40,
+	0xec, 0x0a, 0x82, 0xcc, 0x8b, 0xbd, 0x5d, 0x8e, 0x48, 0x95, 0x05, 0x9c, 0xa0, 0x5f, 0x5a, 0xf8,
+	0x8c, 0xf7, 0xf0, 0xd9, 0x53, 0x0c, 0xe7, 0x73, 0x38, 0x87, 0x5b, 0x84, 0xe2, 0x9a, 0xca, 0xed,
+	0xe8, 0xff, 0x2d, 0x98, 0x03, 0x5a, 0x21, 0x9f, 0xca, 0x87, 0x30, 0x90, 0x01, 0x1a, 0x1e, 0xfa,
+	0x81, 0x85, 0x1e, 0x52, 0x7d, 0xc3, 0x6b, 0x97, 0x13, 0x54, 0x3d, 0x95, 0x9c, 0xb4, 0xcb, 0x23,
+	0x04, 0xa7, 0x92, 0x47, 0xed, 0xf2, 0x16, 0x1a, 0x38, 0x95, 0xbc, 0xe5, 0x3c, 0x05, 0x27, 0x95,
+	0x37, 0xc4, 0x1f, 0x62, 0x55, 0x61, 0xc8, 0xb3, 0xa0, 0x5c, 0xd0, 0xba, 0x0d, 0x5c, 0x93, 0x8b,
+	0x0a, 0x73, 0xd6, 0x61, 0x38, 0x65, 0xf1, 0x20, 0x22, 0x6e, 0x12, 0xbb, 0x72, 0x90, 0x77, 0x2c,
+	0x68, 0x17, 0xb5, 0x72, 0x27, 0x88, 0xc8, 0xf3, 0x78, 0x5b, 0x8c, 0xeb, 0x1e, 0x8c, 0x54, 0x49,
+	0xec, 0xd5, 0x23, 0x4c, 0x0f, 0xdd, 0x14, 0x1c, 0xe1, 0x37, 0x72, 0x90, 0x06, 0x6d, 0x9e, 0xe5,
+	0x4c, 0x5e, 0x51, 0xea, 0x75, 0xfc, 0x46, 0x0c, 0x58, 0x05, 0xce, 0xe7, 0x60, 0xb1, 0x1d, 0x5a,
+	0xb7, 0x80, 0x9d, 0xcb, 0x24, 0x62, 0x37, 0xf4, 0x10, 0x06, 0xaa, 0x49, 0x33, 0xf6, 0x88, 0x5a,
+	0x1a, 0x87, 0x6c, 0x7a, 0x5d, 0x09, 0xe4, 0x12, 0x38, 0x07, 0xef, 0xc8, 0x94, 0xcf, 0xd0, 0xa5,
+	0xfe, 0x1b, 0x03, 0xdd, 0x54, 0xec, 0xe3, 0xbc, 0x24, 0xaa, 0x06, 0x31, 0xf1, 0x5d, 0xad, 0x66,
+	0xfd, 0xd5, 0x83, 0xa9, 0x66, 0x49, 0x51, 0xf6, 0x60, 0xa4, 0x83, 0x22, 0x73, 0xf3, 0xeb, 0x26,
+	0xa1, 0xc7, 0x88, 0xdb, 0xf4, 0x6a, 0x3b, 0x70, 0x83, 0xd0, 0x4d, 0xa1, 0x75, 0x1e, 0xc1, 0x85,
+	0x0c, 0x2c, 0x68, 0x01, 0x61, 0xa8, 0xd9, 0x3f, 0xbe, 0xec, 0x9e, 0x36, 0x95, 0xc6, 0x09, 0xe1,
+	0x03, 0x2f, 0x89, 0xb9, 0xd8, 0xf9, 0x57, 0x9b, 0x7e, 0x8d, 0x70, 0x37, 0x14, 0x3b, 0x36, 0x63,
+	0x9b, 0xcd, 0xea, 0x98, 0x12, 0x34, 0x6c, 0x11, 0xeb, 0xa4, 0x26, 0x2d, 0x4a, 0xd0, 0x5a, 0xc2,
+	0x78, 0xbe, 0xa1, 0xda, 0x16, 0x14, 0x67, 0x17, 0x50, 0xea, 0xd6, 0xe5, 0x70, 0xd9, 0xae, 0x37,
+	0xa4, 0xba, 0x93, 0x7b, 0x04, 0xb7, 0xf2, 0xd4, 0xe7, 0x86, 0x98, 0x71, 0x97, 0x12, 0x8f, 0x04,
+	0x2d, 0xe2, 0xbb, 0x94, 0xbc, 0x6e, 0x12, 0xc6, 0x5d, 0x1f, 0x73, 0xf5, 0xa4, 0xa0, 0xd5, 0x1e,
+	0x4e, 0xdb, 0x9c, 0x06, 0x71, 0x4d, 0x39, 0x5d, 0xcf, 0x79, 0x6b, 0x98, 0xf1, 0x2d, 0x4d, 0xdb,
+	0x52, 0xb0, 0x65, 0xcc, 0xe5, 0xb3, 0x23, 0x56, 0xfe, 0x4e, 0x63, 0xe3, 0xdf, 0xc2, 0x12, 0x3d,
+	0xb5, 0x70, 0x1b, 0x6b, 0x77, 0xcb, 0xf3, 0xaf, 0x30, 0x12, 0xc9, 0x3d, 0xed, 0x35, 0x8a, 0xe3,
+	0xc3, 0x1e, 0x23, 0x74, 0xc5, 0x26, 0xb9, 0x6b, 0xce, 0x16, 0x8e, 0x0f, 0x8b, 0xc6, 0x27, 0x90,
+	0x4e, 0xfd, 0xb6, 0xa6, 0x2b, 0x36, 0xa7, 0x2d, 0xaf, 0xcf, 0xbe, 0x74, 0x15, 0x2e, 0x76, 0xef,
+	0x49, 0x1f, 0xd9, 0x64, 0x42, 0xaf, 0x73, 0x43, 0xfa, 0x0a, 0x46, 0x4f, 0xd8, 0x45, 0x3e, 0xb6,
+	0xd9, 0x2d, 0x78, 0x3d, 0xb6, 0x90, 0x7f, 0x2c, 0xc1, 0xdc, 0xdb, 0x6c, 0xb8, 0x9e, 0x58, 0x98,
+	0x96, 0xbd, 0xd3, 0xed, 0xb6, 0x3e, 0x83, 0x01, 0x73, 0xcf, 0x3d, 0x62, 0xb3, 0xf0, 0x1a, 0x02,
+	0xe7, 0x81, 0xd0, 0xe7, 0xa7, 0xb1, 0xd1, 0xfe, 0xd9, 0x02, 0xbc, 0xfc, 0xe4, 0xf5, 0x42, 0x3c,
+	0xba, 0x8c, 0xcb, 0x3b, 0xed, 0xdc, 0xfe, 0x2f, 0xdb, 0x1c, 0x88, 0x84, 0x7a, 0x83, 0xd0, 0x4a,
+	0xfb, 0x29, 0x60, 0x0d, 0x2e, 0x65, 0xd8, 0x1c, 0x89, 0xc6, 0x6c, 0x16, 0x31, 0x4d, 0xcc, 0x71,
+	0xce, 0x37, 0x70, 0x3b, 0xa7, 0x35, 0x29, 0x15, 0x8f, 0x4c, 0x94, 0xf8, 0x24, 0x74, 0x31, 0xe7,
+	0x34, 0xa8, 0x36, 0xb9, 0xc8, 0xc3, 0xb9, 0xcd, 0xd7, 0x16, 0x36, 0x37, 0x52, 0x1b, 0xc5, 0x5b,
+	0x17, 0xb8, 0x4a, 0x46, 0x33, 0xcc, 0x45, 0x72, 0xa3, 0x09, 0x63, 0xae, 0x4f, 0x5a, 0x81, 0x47,
+	0xda, 0x7a, 0xe8, 0x7d, 0xab, 0xe4, 0x26, 0xd4, 0xcb, 0x52, 0x6c, 0x76, 0x51, 0x19, 0xce, 0x8a,
+	0x65, 0x73, 0xdc, 0x02, 0x21, 0x1a, 0x3a, 0x11, 0x7c, 0x60, 0x71, 0xef, 0x0c, 0x11, 0x9b, 0x0d,
+	0xae, 0xd7, 0xe7, 0xae, 0x99, 0xf3, 0xd7, 0x12, 0xdc, 0xb7, 0xf1, 0xeb, 0x95, 0x4d, 0x0e, 0x2c,
+	0xc2, 0x98, 0xef, 0x1b, 0x46, 0x61, 0x8e, 0xf9, 0x67, 0x09, 0xd6, 0xde, 0x32, 0xb4, 0xe2, 0xc7,
+	0xba, 0x66, 0x11, 0xeb, 0xf2, 0xa9, 0x63, 0x2d, 0x7a, 0xd8, 0xdf, 0xc0, 0x2d, 0xab, 0xc8, 0x55,
+	0xde, 0xac, 0x5b, 0xc4, 0xf5, 0x61, 0xdf, 0xb8, 0x54, 0x36, 0xfd, 0x83, 0x48, 0x79, 0xd6, 0xd6,
+	0x79, 0x9e, 0x0d, 0x2c, 0x62, 0xb8, 0x63, 0x17, 0x43, 0x9a, 0x7d, 0x57, 0x60, 0x28, 0x3f, 0x90,
+	0xa9, 0xd9, 0x32, 0x61, 0x53, 0x69, 0xc8, 0x45, 0x72, 0x1a, 0x3c, 0x84, 0x81, 0xfc, 0x0a, 0x43,
+	0x93, 0xfd, 0x13, 0x9f, 0xd9, 0xde, 0xa9, 0xc2, 0x44, 0x3d, 0xe1, 0xa2, 0x1f, 0xf4, 0xae, 0x38,
+	0x24, 0xd8, 0xd7, 0x77, 0xaf, 0x73, 0xe9, 0x4f, 0x2d, 0xa2, 0x7a, 0x4f, 0x42, 0xf4, 0xde, 0x78,
+	0x8d, 0x60, 0x5f, 0x5e, 0xce, 0xea, 0x5a, 0xd7, 0x94, 0x47, 0x83, 0x8a, 0xd4, 0xe1, 0x07, 0x07,
+	0x07, 0x84, 0x12, 0xb1, 0xe3, 0x35, 0xaa, 0x9c, 0xbf, 0xb1, 0x29, 0x47, 0x8e, 0x4b, 0xce, 0x86,
+	0xc0, 0x2c, 0x67, 0x14, 0xa3, 0xca, 0xf9, 0x97, 0x12, 0x5c, 0xab, 0x07, 0xe2, 0x5c, 0x18, 0x78,
+	0x38, 0x74, 0x3d, 0x4a, 0xb0, 0xac, 0x72, 0xb5, 0x55, 0x73, 0xd1, 0xc6, 0x64, 0xe9, 0xe6, 0xe0,
+	0xec, 0x93, 0x72, 0xaf, 0xea, 0xb2, 0xac, 0x00, 0x97, 0x37, 0x95, 0x66, 0x5b, 0x48, 0x16, 0x65,
+	0xfd, 0x77, 0x25, 0x6e, 0x46, 0x05, 0x97, 0xb7, 0xc6, 0x73, 0xcb, 0x25, 0xed, 0x68, 0xb6, 0x72,
+	0xfe, 0x56, 0x82, 0xeb, 0x46, 0x54, 0x21, 0x8e, 0xfd, 0x20, 0xae, 0xa9, 0x43, 0x52, 0x7b, 0x64,
+	0x9b, 0xdf, 0x73, 0x64, 0x46, 0x67, 0xac, 0x29, 0x57, 0x71, 0xc4, 0x6a, 0x0b, 0xee, 0x05, 0x20,
+	0x23, 0xb6, 0xf6, 0x70, 0xb6, 0xfa, 0x4f, 0xa6, 0x2b, 0xb9, 0xb8, 0x0d, 0xfb, 0xa7, 0x12, 0x4c,
+	0x18, 0x5c, 0x46, 0x30, 0xf5, 0xea, 0x6e, 0x83, 0x12, 0x3f, 0xf0, 0xe4, 0xb3, 0xc6, 0x29, 0xda,
+	0xfe, 0x9e, 0xef, 0x76, 0x2c, 0x37, 0xdc, 0x96, 0x7e, 0x1b, 0xa9, 0x9d, 0x38, 0x67, 0x2d, 0xc2,
+	0x60, 0x2d, 0xc2, 0x41, 0xe8, 0x1e, 0x24, 0xf4, 0x08, 0x53, 0x9f, 0xa1, 0x17, 0xfd, 0x6f, 0xef,
+	0xbc, 0x94, 0x3c, 0xd2, 0x0a, 0xb1, 0xcb, 0x50, 0x0c, 0x86, 0x5b, 0x84, 0xa1, 0x5d, 0x8b, 0x5d,
+	0x86, 0x6c, 0xbf, 0x2d, 0x9a, 0x3b, 0x9b, 0x70, 0x45, 0xab, 0x89, 0x97, 0xc4, 0x3e, 0xa6, 0xc7,
+	0xe9, 0xe1, 0x6b, 0xaf, 0x3f, 0x68, 0x58, 0x81, 0x52, 0xa5, 0x3e, 0x82, 0xed, 0xc3, 0x98, 0x51,
+	0x1b, 0x36, 0xcb, 0x22, 0x94, 0x60, 0xaf, 0x8e, 0xbe, 0xed, 0x0f, 0x1e, 0x31, 0x00, 0x59, 0x41,
+	0x64, 0x4b, 0xa8, 0x45, 0x6e, 0x31, 0x2b, 0xcf, 0xd7, 0x2d, 0x72, 0x8b, 0xd1, 0xde, 0x79, 0x0c,
+	0x17, 0xcc, 0x57, 0x30, 0x32, 0xc5, 0x7d, 0x68, 0xf1, 0x94, 0x0f, 0x19, 0x2a, 0x99, 0xe3, 0x3e,
+	0x87, 0x73, 0xe6, 0xfa, 0x85, 0x6e, 0xf4, 0x0f, 0xa4, 0x4d, 0xe0, 0xfc, 0xbe, 0x04, 0x57, 0x8b,
+	0xdf, 0x06, 0x31, 0xe4, 0x4f, 0x9e, 0xbd, 0x39, 0x38, 0xbb, 0xd6, 0x67, 0x16, 0x1a, 0xcb, 0xd7,
+	0x8a, 0x10, 0xef, 0x1c, 0x37, 0x88, 0x9c, 0x87, 0x45, 0xff, 0xb1, 0x75, 0x39, 0x28, 0xb8, 0xca,
+	0x9c, 0xa7, 0xe0, 0x04, 0x71, 0x0b, 0x87, 0x81, 0x3e, 0x2f, 0xab, 0x2e, 0xb9, 0x69, 0x73, 0x2e,
+	0xd0, 0x3a, 0x39, 0xec, 0xb2, 0x4f, 0x16, 0x61, 0xb0, 0x8d, 0xc5, 0xd0, 0x8f, 0x2c, 0xa6, 0xb3,
+	0x89, 0x61, 0xce, 0x4f, 0xe0, 0x7c, 0x44, 0x18, 0x93, 0x05, 0x9f, 0x3a, 0xe6, 0x0c, 0x7d, 0x67,
+	0xd1, 0xb1, 0x5a, 0xb1, 0x24, 0x04, 0x62, 0x87, 0x9b, 0x12, 0xcc, 0x99, 0xf2, 0xab, 0xfe, 0x1c,
+	0x47, 0xeb, 0xcc, 0xd7, 0x12, 0xab, 0x70, 0xd1, 0x8c, 0x47, 0x75, 0xcf, 0xaf, 0x6d, 0x16, 0x86,
+	0x21, 0x23, 0x2a, 0xd9, 0x3d, 0x35, 0xb8, 0x16, 0x25, 0xd5, 0x20, 0x24, 0xee, 0x01, 0x0d, 0x48,
+	0xec, 0x87, 0xc7, 0x46, 0x89, 0x22, 0x5d, 0x73, 0x22, 0x9b, 0x25, 0x47, 0x61, 0x1e, 0x69, 0x4a,
+	0x56, 0xa9, 0x48, 0x97, 0x9c, 0x45, 0x18, 0x4c, 0x68, 0x0d, 0xc7, 0x81, 0x97, 0x8e, 0x43, 0x6c,
+	0x31, 0x0e, 0x5a, 0xa2, 0xc7, 0xe1, 0x05, 0xa0, 0x76, 0x86, 0x51, 0x47, 0x49, 0x6c, 0x8e, 0x1f,
+	0x6d, 0xb8, 0xac, 0x8c, 0xb2, 0x06, 0x97, 0x52, 0xac, 0x39, 0x38, 0x0d, 0x8b, 0xc1, 0xd1, 0x3a,
+	0x73, 0x70, 0x5c, 0x78, 0xbf, 0x80, 0x66, 0x44, 0xfa, 0xda, 0xe6, 0x8d, 0x46, 0x37, 0x38, 0x0b,
+	0x77, 0x19, 0x86, 0x52, 0x83, 0xb4, 0xe8, 0x43, 0x2d, 0x8a, 0x52, 0x5a, 0x93, 0xd6, 0x7c, 0x9e,
+	0xc1, 0xb0, 0x1e, 0x61, 0x37, 0x96, 0xaf, 0xb6, 0x58, 0xc0, 0x13, 0xca, 0xd0, 0x2d, 0x8b, 0xe8,
+	0x1c, 0xad, 0x7c, 0x46, 0x8e, 0x76, 0xb5, 0x4e, 0xa4, 0xfc, 0x46, 0x3d, 0x89, 0x89, 0x7c, 0x9f,
+	0xc2, 0xd0, 0x47, 0x16, 0x29, 0x5f, 0xb6, 0x5f, 0x12, 0xcd, 0x9d, 0x27, 0x70, 0x51, 0xa9, 0xcd,
+	0x01, 0xb8, 0xdd, 0x9f, 0x71, 0x41, 0xaa, 0xcc, 0xee, 0x7f, 0x0a, 0x8e, 0x22, 0xf1, 0x3a, 0x4d,
+	0x9a, 0xb5, 0xba, 0x7a, 0x38, 0xee, 0xd8, 0xe4, 0x0e, 0xa9, 0xdb, 0x51, 0xb2, 0x34, 0x9f, 0x52,
+	0x12, 0xaa, 0xad, 0x91, 0x58, 0x88, 0xcb, 0x36, 0xa7, 0xed, 0x54, 0x21, 0xd6, 0xd2, 0x10, 0x3e,
+	0xd0, 0x2b, 0x7a, 0xaf, 0xf7, 0xd7, 0xaa, 0x6c, 0xf3, 0xcc, 0xa6, 0xb0, 0xa6, 0x48, 0x95, 0xa2,
+	0x17, 0xd8, 0xaa, 0x70, 0xf3, 0xdb, 0x12, 0xcc, 0x68, 0x3b, 0xb3, 0x8c, 0x77, 0xb2, 0xf5, 0x4b,
+	0x0b, 0xeb, 0x5b, 0x8a, 0x9a, 0x97, 0xf4, 0x4e, 0x08, 0xe2, 0x6b, 0xf8, 0x61, 0x41, 0x0c, 0x5d,
+	0xb6, 0xd3, 0x36, 0xe5, 0xa3, 0x4e, 0xdb, 0x4e, 0xaf, 0xd7, 0x70, 0xa3, 0xc0, 0xab, 0xf0, 0x36,
+	0x5f, 0xd9, 0xbc, 0x49, 0xed, 0xf4, 0x2b, 0xb8, 0xbd, 0xa7, 0xe0, 0x68, 0x4b, 0xb5, 0x32, 0x29,
+	0xfa, 0x8c, 0xcd, 0xf4, 0x52, 0x3a, 0x99, 0x7b, 0x3a, 0xbb, 0x8a, 0xbc, 0xc1, 0x1e, 0x77, 0x23,
+	0xcc, 0xbd, 0x7a, 0x77, 0xe8, 0x77, 0xed, 0xbb, 0x6a, 0x45, 0x70, 0xd6, 0x05, 0xa6, 0x33, 0xee,
+	0x1d, 0xb8, 0xaa, 0xbd, 0xba, 0xf8, 0xb3, 0x36, 0x99, 0x53, 0x89, 0x3b, 0xa9, 0xdf, 0x41, 0x59,
+	0x53, 0xf3, 0x9a, 0xe4, 0xc9, 0xd3, 0xed, 0x0b, 0x0b, 0xb3, 0x9b, 0x8a, 0x99, 0xd6, 0x27, 0x4f,
+	0x98, 0x6c, 0x07, 0x70, 0xad, 0xcb, 0xbf, 0xcb, 0x72, 0xce, 0xe6, 0xdd, 0x6e, 0xbb, 0x65, 0xa7,
+	0x4f, 0x04, 0xd7, 0xbb, 0x7c, 0x0a, 0x6f, 0xef, 0x4b, 0xfb, 0x07, 0x39, 0xf5, 0x2a, 0xb8, 0xad,
+	0x2f, 0xe1, 0x3d, 0x6d, 0x57, 0x68, 0xb2, 0x6f, 0x61, 0x82, 0x14, 0xa0, 0x00, 0xfe, 0x00, 0x06,
+	0x58, 0x83, 0x10, 0x5f, 0x9f, 0x5d, 0x0e, 0x2d, 0x12, 0xb5, 0x6c, 0xaf, 0xce, 0x2b, 0x2f, 0x61,
+	0xa4, 0xf7, 0x17, 0x38, 0x3f, 0xb3, 0xa9, 0xb2, 0xf2, 0x1e, 0x5f, 0xde, 0xfc, 0xae, 0x04, 0x33,
+	0x6a, 0x9f, 0x86, 0x3d, 0x8f, 0x84, 0x44, 0xe4, 0x6d, 0xdf, 0xd5, 0x9b, 0x13, 0x71, 0x06, 0x64,
+	0x05, 0x3b, 0x93, 0xd0, 0xc2, 0xf1, 0x23, 0x49, 0xad, 0xe4, 0xd0, 0x75, 0xc9, 0x14, 0x27, 0x3c,
+	0xd6, 0xb5, 0x4d, 0xd9, 0x83, 0x91, 0xbc, 0xa4, 0xd1, 0x59, 0xe2, 0xfc, 0xd8, 0xa6, 0x80, 0xd7,
+	0xd2, 0xc5, 0x8b, 0x8e, 0x1a, 0xe7, 0x33, 0x18, 0x36, 0x6b, 0x25, 0x59, 0xf5, 0x71, 0xde, 0x66,
+	0xbd, 0x6d, 0x65, 0x05, 0x91, 0xac, 0xd0, 0xf8, 0x2d, 0xdc, 0x31, 0x78, 0x16, 0x65, 0xce, 0x9f,
+	0xdb, 0x3c, 0x79, 0x99, 0x51, 0xbf, 0x3a, 0xe7, 0x36, 0x5c, 0x6d, 0x05, 0x3e, 0x49, 0xc4, 0x49,
+	0x98, 0x72, 0x31, 0x44, 0x77, 0x67, 0x66, 0xd4, 0x5a, 0xfb, 0x89, 0x85, 0xd1, 0xb0, 0x14, 0x6f,
+	0x6a, 0xed, 0xdd, 0x99, 0x19, 0xb9, 0xde, 0x6e, 0xc2, 0x95, 0x0e, 0xe8, 0xec, 0xbc, 0x62, 0xde,
+	0xb3, 0xf9, 0x4e, 0xa5, 0x8d, 0x39, 0x3b, 0xdf, 0x03, 0x39, 0xaf, 0xc3, 0xfc, 0xf4, 0xd4, 0xc8,
+	0xf9, 0x5e, 0x51, 0xde, 0xd3, 0x51, 0xfe, 0xf8, 0xd4, 0xc8, 0x7b, 0x2a, 0xca, 0x65, 0x18, 0x52,
+	0x48, 0xf9, 0x99, 0x91, 0x64, 0x2d, 0xd8, 0x7c, 0x2f, 0x26, 0x45, 0xbb, 0x01, 0x39, 0x92, 0x94,
+	0x07, 0x30, 0x90, 0x53, 0x18, 0xba, 0x6f, 0xf1, 0x64, 0x67, 0x00, 0xb9, 0xb9, 0x96, 0xee, 0xe9,
+	0xbe, 0xc9, 0x9c, 0xf8, 0x0f, 0x2c, 0x0a, 0x1c, 0x42, 0xac, 0x37, 0x4f, 0xc6, 0xbc, 0x5f, 0xfc,
+	0x4f, 0x09, 0xa6, 0xbc, 0x24, 0x2a, 0x9f, 0xfc, 0x89, 0xe2, 0xe2, 0x39, 0xfd, 0xad, 0xdf, 0x86,
+	0x40, 0x6f, 0x94, 0xbe, 0x58, 0xd6, 0xed, 0x6b, 0x49, 0x88, 0xe3, 0x5a, 0x39, 0xa1, 0xb5, 0xe9,
+	0x1a, 0x89, 0xa5, 0x71, 0xfa, 0x19, 0x62, 0x23, 0x60, 0xbd, 0xbe, 0x8f, 0xbc, 0xaf, 0xfe, 0xfa,
+	0xfb, 0x99, 0xb3, 0x8f, 0x2b, 0x95, 0x7f, 0x9c, 0x19, 0x7f, 0xac, 0x60, 0x15, 0x9f, 0x95, 0xd5,
+	0x4f, 0xf1, 0x6b, 0x77, 0xae, 0xbc, 0x24, 0x9b, 0xfd, 0x3b, 0x6d, 0xb0, 0x5f, 0xf1, 0xd9, 0x7e,
+	0xd6, 0x60, 0x7f, 0x77, 0x6e, 0x5f, 0x35, 0xf8, 0xef, 0x99, 0x29, 0x75, 0x75, 0x61, 0xa1, 0xe2,
+	0xb3, 0x85, 0x85, 0xac, 0xc9, 0xc2, 0xc2, 0xee, 0xdc, 0xc2, 0x82, 0x6a, 0x54, 0x7d, 0x47, 0x46,
+	0x37, 0xf7, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xf0, 0x3b, 0xe1, 0xbc, 0x29, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/policy.pb.go b/googleapis/ads/googleads/v3/common/policy.pb.go
new file mode 100644
index 0000000..911f063
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/policy.pb.go
@@ -0,0 +1,1007 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/policy.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Key of the violation. The key is used for referring to a violation
+// when filing an exemption request.
+type PolicyViolationKey struct {
+	// Unique ID of the violated policy.
+	PolicyName *wrappers.StringValue `protobuf:"bytes,1,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
+	// The text that violates the policy if specified.
+	// Otherwise, refers to the policy in general
+	// (e.g., when requesting to be exempt from the whole policy).
+	// If not specified for criterion exemptions, the whole policy is implied.
+	// Must be specified for ad exemptions.
+	ViolatingText        *wrappers.StringValue `protobuf:"bytes,2,opt,name=violating_text,json=violatingText,proto3" json:"violating_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PolicyViolationKey) Reset()         { *m = PolicyViolationKey{} }
+func (m *PolicyViolationKey) String() string { return proto.CompactTextString(m) }
+func (*PolicyViolationKey) ProtoMessage()    {}
+func (*PolicyViolationKey) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{0}
+}
+
+func (m *PolicyViolationKey) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyViolationKey.Unmarshal(m, b)
+}
+func (m *PolicyViolationKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyViolationKey.Marshal(b, m, deterministic)
+}
+func (m *PolicyViolationKey) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyViolationKey.Merge(m, src)
+}
+func (m *PolicyViolationKey) XXX_Size() int {
+	return xxx_messageInfo_PolicyViolationKey.Size(m)
+}
+func (m *PolicyViolationKey) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyViolationKey.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyViolationKey proto.InternalMessageInfo
+
+func (m *PolicyViolationKey) GetPolicyName() *wrappers.StringValue {
+	if m != nil {
+		return m.PolicyName
+	}
+	return nil
+}
+
+func (m *PolicyViolationKey) GetViolatingText() *wrappers.StringValue {
+	if m != nil {
+		return m.ViolatingText
+	}
+	return nil
+}
+
+// Parameter for controlling how policy exemption is done. Ignorable policy
+// topics are only usable with expanded text ads and responsive search ads. All
+// other ad types must use policy violation keys.
+type PolicyValidationParameter struct {
+	// The list of policy topics that should not cause a PolicyFindingError to
+	// be reported. This field is currently only compatible with Enhanced Text Ad.
+	// It corresponds to the PolicyTopicEntry.topic field.
+	//
+	// Resources violating these policies will be saved, but will not be eligible
+	// to serve. They may begin serving at a later time due to a change in
+	// policies, re-review of the resource, or a change in advertiser
+	// certificates.
+	IgnorablePolicyTopics []*wrappers.StringValue `protobuf:"bytes,1,rep,name=ignorable_policy_topics,json=ignorablePolicyTopics,proto3" json:"ignorable_policy_topics,omitempty"`
+	// The list of policy violation keys that should not cause a
+	// PolicyViolationError to be reported. Not all policy violations are
+	// exemptable, please refer to the is_exemptible field in the returned
+	// PolicyViolationError.
+	//
+	// Resources violating these polices will be saved, but will not be eligible
+	// to serve. They may begin serving at a later time due to a change in
+	// policies, re-review of the resource, or a change in advertiser
+	// certificates.
+	ExemptPolicyViolationKeys []*PolicyViolationKey `protobuf:"bytes,2,rep,name=exempt_policy_violation_keys,json=exemptPolicyViolationKeys,proto3" json:"exempt_policy_violation_keys,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{}              `json:"-"`
+	XXX_unrecognized          []byte                `json:"-"`
+	XXX_sizecache             int32                 `json:"-"`
+}
+
+func (m *PolicyValidationParameter) Reset()         { *m = PolicyValidationParameter{} }
+func (m *PolicyValidationParameter) String() string { return proto.CompactTextString(m) }
+func (*PolicyValidationParameter) ProtoMessage()    {}
+func (*PolicyValidationParameter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{1}
+}
+
+func (m *PolicyValidationParameter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyValidationParameter.Unmarshal(m, b)
+}
+func (m *PolicyValidationParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyValidationParameter.Marshal(b, m, deterministic)
+}
+func (m *PolicyValidationParameter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyValidationParameter.Merge(m, src)
+}
+func (m *PolicyValidationParameter) XXX_Size() int {
+	return xxx_messageInfo_PolicyValidationParameter.Size(m)
+}
+func (m *PolicyValidationParameter) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyValidationParameter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyValidationParameter proto.InternalMessageInfo
+
+func (m *PolicyValidationParameter) GetIgnorablePolicyTopics() []*wrappers.StringValue {
+	if m != nil {
+		return m.IgnorablePolicyTopics
+	}
+	return nil
+}
+
+func (m *PolicyValidationParameter) GetExemptPolicyViolationKeys() []*PolicyViolationKey {
+	if m != nil {
+		return m.ExemptPolicyViolationKeys
+	}
+	return nil
+}
+
+// Policy finding attached to a resource (e.g. alcohol policy associated with
+// a site that sells alcohol).
+//
+// Each PolicyTopicEntry has a topic that indicates the specific ads policy
+// the entry is about and a type to indicate the effect that the entry will have
+// on serving. It may optionally have one or more evidences that indicate the
+// reason for the finding. It may also optionally have one or more constraints
+// that provide details about how serving may be restricted.
+type PolicyTopicEntry struct {
+	// Policy topic this finding refers to. For example, "ALCOHOL",
+	// "TRADEMARKS_IN_AD_TEXT", or "DESTINATION_NOT_WORKING". The set of possible
+	// policy topics is not fixed for a particular API version and may change
+	// at any time.
+	Topic *wrappers.StringValue `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
+	// Describes the negative or positive effect this policy will have on serving.
+	Type enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType" json:"type,omitempty"`
+	// Additional information that explains policy finding
+	// (e.g. the brand name for a trademark finding).
+	Evidences []*PolicyTopicEvidence `protobuf:"bytes,3,rep,name=evidences,proto3" json:"evidences,omitempty"`
+	// Indicates how serving of this resource may be affected (e.g. not serving
+	// in a country).
+	Constraints          []*PolicyTopicConstraint `protobuf:"bytes,4,rep,name=constraints,proto3" json:"constraints,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *PolicyTopicEntry) Reset()         { *m = PolicyTopicEntry{} }
+func (m *PolicyTopicEntry) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEntry) ProtoMessage()    {}
+func (*PolicyTopicEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{2}
+}
+
+func (m *PolicyTopicEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEntry.Unmarshal(m, b)
+}
+func (m *PolicyTopicEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEntry.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEntry.Merge(m, src)
+}
+func (m *PolicyTopicEntry) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEntry.Size(m)
+}
+func (m *PolicyTopicEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEntry proto.InternalMessageInfo
+
+func (m *PolicyTopicEntry) GetTopic() *wrappers.StringValue {
+	if m != nil {
+		return m.Topic
+	}
+	return nil
+}
+
+func (m *PolicyTopicEntry) GetType() enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.PolicyTopicEntryTypeEnum_UNSPECIFIED
+}
+
+func (m *PolicyTopicEntry) GetEvidences() []*PolicyTopicEvidence {
+	if m != nil {
+		return m.Evidences
+	}
+	return nil
+}
+
+func (m *PolicyTopicEntry) GetConstraints() []*PolicyTopicConstraint {
+	if m != nil {
+		return m.Constraints
+	}
+	return nil
+}
+
+// Additional information that explains a policy finding.
+type PolicyTopicEvidence struct {
+	// Specific evidence information depending on the evidence type.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*PolicyTopicEvidence_WebsiteList_
+	//	*PolicyTopicEvidence_TextList_
+	//	*PolicyTopicEvidence_LanguageCode
+	//	*PolicyTopicEvidence_DestinationTextList_
+	//	*PolicyTopicEvidence_DestinationMismatch_
+	//	*PolicyTopicEvidence_DestinationNotWorking_
+	Value                isPolicyTopicEvidence_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *PolicyTopicEvidence) Reset()         { *m = PolicyTopicEvidence{} }
+func (m *PolicyTopicEvidence) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence) ProtoMessage()    {}
+func (*PolicyTopicEvidence) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3}
+}
+
+func (m *PolicyTopicEvidence) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence.Merge(m, src)
+}
+func (m *PolicyTopicEvidence) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence.Size(m)
+}
+func (m *PolicyTopicEvidence) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence proto.InternalMessageInfo
+
+type isPolicyTopicEvidence_Value interface {
+	isPolicyTopicEvidence_Value()
+}
+
+type PolicyTopicEvidence_WebsiteList_ struct {
+	WebsiteList *PolicyTopicEvidence_WebsiteList `protobuf:"bytes,3,opt,name=website_list,json=websiteList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_TextList_ struct {
+	TextList *PolicyTopicEvidence_TextList `protobuf:"bytes,4,opt,name=text_list,json=textList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_LanguageCode struct {
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=language_code,json=languageCode,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationTextList_ struct {
+	DestinationTextList *PolicyTopicEvidence_DestinationTextList `protobuf:"bytes,6,opt,name=destination_text_list,json=destinationTextList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationMismatch_ struct {
+	DestinationMismatch *PolicyTopicEvidence_DestinationMismatch `protobuf:"bytes,7,opt,name=destination_mismatch,json=destinationMismatch,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationNotWorking_ struct {
+	DestinationNotWorking *PolicyTopicEvidence_DestinationNotWorking `protobuf:"bytes,8,opt,name=destination_not_working,json=destinationNotWorking,proto3,oneof"`
+}
+
+func (*PolicyTopicEvidence_WebsiteList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_TextList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_LanguageCode) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_DestinationTextList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_DestinationMismatch_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_DestinationNotWorking_) isPolicyTopicEvidence_Value() {}
+
+func (m *PolicyTopicEvidence) GetValue() isPolicyTopicEvidence_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetWebsiteList() *PolicyTopicEvidence_WebsiteList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_WebsiteList_); ok {
+		return x.WebsiteList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetTextList() *PolicyTopicEvidence_TextList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_TextList_); ok {
+		return x.TextList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetLanguageCode() *wrappers.StringValue {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_LanguageCode); ok {
+		return x.LanguageCode
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetDestinationTextList() *PolicyTopicEvidence_DestinationTextList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_DestinationTextList_); ok {
+		return x.DestinationTextList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetDestinationMismatch() *PolicyTopicEvidence_DestinationMismatch {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_DestinationMismatch_); ok {
+		return x.DestinationMismatch
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetDestinationNotWorking() *PolicyTopicEvidence_DestinationNotWorking {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_DestinationNotWorking_); ok {
+		return x.DestinationNotWorking
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PolicyTopicEvidence) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*PolicyTopicEvidence_WebsiteList_)(nil),
+		(*PolicyTopicEvidence_TextList_)(nil),
+		(*PolicyTopicEvidence_LanguageCode)(nil),
+		(*PolicyTopicEvidence_DestinationTextList_)(nil),
+		(*PolicyTopicEvidence_DestinationMismatch_)(nil),
+		(*PolicyTopicEvidence_DestinationNotWorking_)(nil),
+	}
+}
+
+// A list of fragments of text that violated a policy.
+type PolicyTopicEvidence_TextList struct {
+	// The fragments of text from the resource that caused the policy finding.
+	Texts                []*wrappers.StringValue `protobuf:"bytes,1,rep,name=texts,proto3" json:"texts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_TextList) Reset()         { *m = PolicyTopicEvidence_TextList{} }
+func (m *PolicyTopicEvidence_TextList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_TextList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_TextList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3, 0}
+}
+
+func (m *PolicyTopicEvidence_TextList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_TextList.Merge(m, src)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Size(m)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_TextList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_TextList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_TextList) GetTexts() []*wrappers.StringValue {
+	if m != nil {
+		return m.Texts
+	}
+	return nil
+}
+
+// A list of websites that caused a policy finding. Used for
+// ONE_WEBSITE_PER_AD_GROUP policy topic, for example. In case there are more
+// than five websites, only the top five (those that appear in resources the
+// most) will be listed here.
+type PolicyTopicEvidence_WebsiteList struct {
+	// Websites that caused the policy finding.
+	Websites             []*wrappers.StringValue `protobuf:"bytes,1,rep,name=websites,proto3" json:"websites,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_WebsiteList) Reset()         { *m = PolicyTopicEvidence_WebsiteList{} }
+func (m *PolicyTopicEvidence_WebsiteList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_WebsiteList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_WebsiteList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3, 1}
+}
+
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Merge(m, src)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Size(m)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_WebsiteList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_WebsiteList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_WebsiteList) GetWebsites() []*wrappers.StringValue {
+	if m != nil {
+		return m.Websites
+	}
+	return nil
+}
+
+// A list of strings found in a destination page that caused a policy
+// finding.
+type PolicyTopicEvidence_DestinationTextList struct {
+	// List of text found in the resource's destination page.
+	DestinationTexts     []*wrappers.StringValue `protobuf:"bytes,1,rep,name=destination_texts,json=destinationTexts,proto3" json:"destination_texts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_DestinationTextList) Reset() {
+	*m = PolicyTopicEvidence_DestinationTextList{}
+}
+func (m *PolicyTopicEvidence_DestinationTextList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_DestinationTextList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_DestinationTextList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3, 2}
+}
+
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Merge(m, src)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Size(m)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_DestinationTextList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_DestinationTextList) GetDestinationTexts() []*wrappers.StringValue {
+	if m != nil {
+		return m.DestinationTexts
+	}
+	return nil
+}
+
+// Evidence of mismatches between the URLs of a resource.
+type PolicyTopicEvidence_DestinationMismatch struct {
+	// The set of URLs that did not match each other.
+	UrlTypes             []enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType `protobuf:"varint,1,rep,packed,name=url_types,json=urlTypes,proto3,enum=google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType" json:"url_types,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                                                `json:"-"`
+	XXX_unrecognized     []byte                                                                                                  `json:"-"`
+	XXX_sizecache        int32                                                                                                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_DestinationMismatch) Reset() {
+	*m = PolicyTopicEvidence_DestinationMismatch{}
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_DestinationMismatch) ProtoMessage()    {}
+func (*PolicyTopicEvidence_DestinationMismatch) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3, 3}
+}
+
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Merge(m, src)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Size(m)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_DestinationMismatch) GetUrlTypes() []enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType {
+	if m != nil {
+		return m.UrlTypes
+	}
+	return nil
+}
+
+// Evidence details when the destination is returning an HTTP error
+// code or isn't functional in all locations for commonly used devices.
+type PolicyTopicEvidence_DestinationNotWorking struct {
+	// The full URL that didn't work.
+	ExpandedUrl *wrappers.StringValue `protobuf:"bytes,3,opt,name=expanded_url,json=expandedUrl,proto3" json:"expanded_url,omitempty"`
+	// The type of device that failed to load the URL.
+	Device enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice `protobuf:"varint,4,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice" json:"device,omitempty"`
+	// The time the URL was last checked.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	LastCheckedDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=last_checked_date_time,json=lastCheckedDateTime,proto3" json:"last_checked_date_time,omitempty"`
+	// Indicates the reason of the DESTINATION_NOT_WORKING policy finding.
+	//
+	// Types that are valid to be assigned to Reason:
+	//	*PolicyTopicEvidence_DestinationNotWorking_DnsErrorType
+	//	*PolicyTopicEvidence_DestinationNotWorking_HttpErrorCode
+	Reason               isPolicyTopicEvidence_DestinationNotWorking_Reason `protobuf_oneof:"reason"`
+	XXX_NoUnkeyedLiteral struct{}                                           `json:"-"`
+	XXX_unrecognized     []byte                                             `json:"-"`
+	XXX_sizecache        int32                                              `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) Reset() {
+	*m = PolicyTopicEvidence_DestinationNotWorking{}
+}
+func (m *PolicyTopicEvidence_DestinationNotWorking) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_DestinationNotWorking) ProtoMessage()    {}
+func (*PolicyTopicEvidence_DestinationNotWorking) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{3, 4}
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_DestinationNotWorking) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidence_DestinationNotWorking) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking.Merge(m, src)
+}
+func (m *PolicyTopicEvidence_DestinationNotWorking) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking.Size(m)
+}
+func (m *PolicyTopicEvidence_DestinationNotWorking) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_DestinationNotWorking proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetExpandedUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.ExpandedUrl
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetDevice() enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice {
+	if m != nil {
+		return m.Device
+	}
+	return enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_UNSPECIFIED
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetLastCheckedDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.LastCheckedDateTime
+	}
+	return nil
+}
+
+type isPolicyTopicEvidence_DestinationNotWorking_Reason interface {
+	isPolicyTopicEvidence_DestinationNotWorking_Reason()
+}
+
+type PolicyTopicEvidence_DestinationNotWorking_DnsErrorType struct {
+	DnsErrorType enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType `protobuf:"varint,1,opt,name=dns_error_type,json=dnsErrorType,proto3,enum=google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationNotWorking_HttpErrorCode struct {
+	HttpErrorCode *wrappers.Int64Value `protobuf:"bytes,2,opt,name=http_error_code,json=httpErrorCode,proto3,oneof"`
+}
+
+func (*PolicyTopicEvidence_DestinationNotWorking_DnsErrorType) isPolicyTopicEvidence_DestinationNotWorking_Reason() {
+}
+
+func (*PolicyTopicEvidence_DestinationNotWorking_HttpErrorCode) isPolicyTopicEvidence_DestinationNotWorking_Reason() {
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetReason() isPolicyTopicEvidence_DestinationNotWorking_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetDnsErrorType() enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType {
+	if x, ok := m.GetReason().(*PolicyTopicEvidence_DestinationNotWorking_DnsErrorType); ok {
+		return x.DnsErrorType
+	}
+	return enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_UNSPECIFIED
+}
+
+func (m *PolicyTopicEvidence_DestinationNotWorking) GetHttpErrorCode() *wrappers.Int64Value {
+	if x, ok := m.GetReason().(*PolicyTopicEvidence_DestinationNotWorking_HttpErrorCode); ok {
+		return x.HttpErrorCode
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PolicyTopicEvidence_DestinationNotWorking) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*PolicyTopicEvidence_DestinationNotWorking_DnsErrorType)(nil),
+		(*PolicyTopicEvidence_DestinationNotWorking_HttpErrorCode)(nil),
+	}
+}
+
+// Describes the effect on serving that a policy topic entry will have.
+type PolicyTopicConstraint struct {
+	// Specific information about the constraint.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*PolicyTopicConstraint_CountryConstraintList_
+	//	*PolicyTopicConstraint_ResellerConstraint_
+	//	*PolicyTopicConstraint_CertificateMissingInCountryList
+	//	*PolicyTopicConstraint_CertificateDomainMismatchInCountryList
+	Value                isPolicyTopicConstraint_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *PolicyTopicConstraint) Reset()         { *m = PolicyTopicConstraint{} }
+func (m *PolicyTopicConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{4}
+}
+
+func (m *PolicyTopicConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint.Merge(m, src)
+}
+func (m *PolicyTopicConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint proto.InternalMessageInfo
+
+type isPolicyTopicConstraint_Value interface {
+	isPolicyTopicConstraint_Value()
+}
+
+type PolicyTopicConstraint_CountryConstraintList_ struct {
+	CountryConstraintList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,1,opt,name=country_constraint_list,json=countryConstraintList,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_ResellerConstraint_ struct {
+	ResellerConstraint *PolicyTopicConstraint_ResellerConstraint `protobuf:"bytes,2,opt,name=reseller_constraint,json=resellerConstraint,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_CertificateMissingInCountryList struct {
+	CertificateMissingInCountryList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,3,opt,name=certificate_missing_in_country_list,json=certificateMissingInCountryList,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_CertificateDomainMismatchInCountryList struct {
+	CertificateDomainMismatchInCountryList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,4,opt,name=certificate_domain_mismatch_in_country_list,json=certificateDomainMismatchInCountryList,proto3,oneof"`
+}
+
+func (*PolicyTopicConstraint_CountryConstraintList_) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_ResellerConstraint_) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_CertificateMissingInCountryList) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_CertificateDomainMismatchInCountryList) isPolicyTopicConstraint_Value() {}
+
+func (m *PolicyTopicConstraint) GetValue() isPolicyTopicConstraint_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCountryConstraintList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CountryConstraintList_); ok {
+		return x.CountryConstraintList
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetResellerConstraint() *PolicyTopicConstraint_ResellerConstraint {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_ResellerConstraint_); ok {
+		return x.ResellerConstraint
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCertificateMissingInCountryList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CertificateMissingInCountryList); ok {
+		return x.CertificateMissingInCountryList
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCertificateDomainMismatchInCountryList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CertificateDomainMismatchInCountryList); ok {
+		return x.CertificateDomainMismatchInCountryList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PolicyTopicConstraint) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*PolicyTopicConstraint_CountryConstraintList_)(nil),
+		(*PolicyTopicConstraint_ResellerConstraint_)(nil),
+		(*PolicyTopicConstraint_CertificateMissingInCountryList)(nil),
+		(*PolicyTopicConstraint_CertificateDomainMismatchInCountryList)(nil),
+	}
+}
+
+// A list of countries where a resource's serving is constrained.
+type PolicyTopicConstraint_CountryConstraintList struct {
+	// Total number of countries targeted by the resource.
+	TotalTargetedCountries *wrappers.Int32Value `protobuf:"bytes,1,opt,name=total_targeted_countries,json=totalTargetedCountries,proto3" json:"total_targeted_countries,omitempty"`
+	// Countries in which serving is restricted.
+	Countries            []*PolicyTopicConstraint_CountryConstraint `protobuf:"bytes,2,rep,name=countries,proto3" json:"countries,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
+	XXX_unrecognized     []byte                                     `json:"-"`
+	XXX_sizecache        int32                                      `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_CountryConstraintList) Reset() {
+	*m = PolicyTopicConstraint_CountryConstraintList{}
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicConstraint_CountryConstraintList) ProtoMessage() {}
+func (*PolicyTopicConstraint_CountryConstraintList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{4, 0}
+}
+
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Merge(m, src)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Size(m)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList proto.InternalMessageInfo
+
+func (m *PolicyTopicConstraint_CountryConstraintList) GetTotalTargetedCountries() *wrappers.Int32Value {
+	if m != nil {
+		return m.TotalTargetedCountries
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint_CountryConstraintList) GetCountries() []*PolicyTopicConstraint_CountryConstraint {
+	if m != nil {
+		return m.Countries
+	}
+	return nil
+}
+
+// Indicates that a policy topic was constrained due to disapproval of the
+// website for reseller purposes.
+type PolicyTopicConstraint_ResellerConstraint struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_ResellerConstraint) Reset() {
+	*m = PolicyTopicConstraint_ResellerConstraint{}
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint_ResellerConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint_ResellerConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{4, 1}
+}
+
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Merge(m, src)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint proto.InternalMessageInfo
+
+// Indicates that a resource's ability to serve in a particular country is
+// constrained.
+type PolicyTopicConstraint_CountryConstraint struct {
+	// Geo target constant resource name of the country in which serving is
+	// constrained.
+	CountryCriterion     *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_criterion,json=countryCriterion,proto3" json:"country_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_CountryConstraint) Reset() {
+	*m = PolicyTopicConstraint_CountryConstraint{}
+}
+func (m *PolicyTopicConstraint_CountryConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint_CountryConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint_CountryConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f2474dd6f17cdcd0, []int{4, 2}
+}
+
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Merge(m, src)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_CountryConstraint proto.InternalMessageInfo
+
+func (m *PolicyTopicConstraint_CountryConstraint) GetCountryCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCriterion
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PolicyViolationKey)(nil), "google.ads.googleads.v3.common.PolicyViolationKey")
+	proto.RegisterType((*PolicyValidationParameter)(nil), "google.ads.googleads.v3.common.PolicyValidationParameter")
+	proto.RegisterType((*PolicyTopicEntry)(nil), "google.ads.googleads.v3.common.PolicyTopicEntry")
+	proto.RegisterType((*PolicyTopicEvidence)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence")
+	proto.RegisterType((*PolicyTopicEvidence_TextList)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence.TextList")
+	proto.RegisterType((*PolicyTopicEvidence_WebsiteList)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence.WebsiteList")
+	proto.RegisterType((*PolicyTopicEvidence_DestinationTextList)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence.DestinationTextList")
+	proto.RegisterType((*PolicyTopicEvidence_DestinationMismatch)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence.DestinationMismatch")
+	proto.RegisterType((*PolicyTopicEvidence_DestinationNotWorking)(nil), "google.ads.googleads.v3.common.PolicyTopicEvidence.DestinationNotWorking")
+	proto.RegisterType((*PolicyTopicConstraint)(nil), "google.ads.googleads.v3.common.PolicyTopicConstraint")
+	proto.RegisterType((*PolicyTopicConstraint_CountryConstraintList)(nil), "google.ads.googleads.v3.common.PolicyTopicConstraint.CountryConstraintList")
+	proto.RegisterType((*PolicyTopicConstraint_ResellerConstraint)(nil), "google.ads.googleads.v3.common.PolicyTopicConstraint.ResellerConstraint")
+	proto.RegisterType((*PolicyTopicConstraint_CountryConstraint)(nil), "google.ads.googleads.v3.common.PolicyTopicConstraint.CountryConstraint")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/policy.proto", fileDescriptor_f2474dd6f17cdcd0)
+}
+
+var fileDescriptor_f2474dd6f17cdcd0 = []byte{
+	// 1229 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x5d, 0x6f, 0x1b, 0x45,
+	0x17, 0xce, 0x3a, 0x69, 0xea, 0x8c, 0x1b, 0xbf, 0xed, 0xa4, 0x6e, 0x5d, 0xbf, 0x55, 0xa9, 0x8c,
+	0x84, 0x90, 0x2a, 0xad, 0x25, 0x1b, 0x10, 0x72, 0x81, 0x2a, 0x71, 0xa2, 0x24, 0xea, 0x87, 0xd2,
+	0xc5, 0x49, 0x10, 0x44, 0x6c, 0x26, 0xbb, 0xd3, 0xcd, 0x28, 0xbb, 0x33, 0xab, 0x99, 0xb1, 0x13,
+	0x8b, 0x0f, 0x21, 0x21, 0xee, 0xf8, 0x01, 0x20, 0xc4, 0x0d, 0x97, 0xbd, 0x45, 0xdc, 0xf2, 0x03,
+	0xb8, 0xe2, 0x02, 0xfe, 0x42, 0x2f, 0xf8, 0x15, 0x68, 0x67, 0x66, 0xed, 0x8d, 0xed, 0x34, 0xce,
+	0x07, 0x57, 0x1e, 0xcf, 0x9c, 0xe7, 0x39, 0xcf, 0x9c, 0x39, 0x73, 0xe6, 0x2c, 0x78, 0x10, 0x30,
+	0x16, 0x84, 0xb8, 0x86, 0x7c, 0x51, 0xd3, 0xc3, 0x64, 0xd4, 0x6d, 0xd4, 0x3c, 0x16, 0x45, 0x8c,
+	0xd6, 0x62, 0x16, 0x12, 0xaf, 0x67, 0xc7, 0x9c, 0x49, 0x06, 0xef, 0x69, 0x0b, 0x1b, 0xf9, 0xc2,
+	0xee, 0x1b, 0xdb, 0xdd, 0x86, 0xad, 0x8d, 0x2b, 0x0f, 0x4f, 0x22, 0xc3, 0xb4, 0x13, 0x09, 0xc3,
+	0xe5, 0x4a, 0x16, 0x13, 0xcf, 0xc5, 0x54, 0xf2, 0x9e, 0x2b, 0x7b, 0x31, 0xd6, 0xe4, 0x95, 0xed,
+	0xb3, 0x80, 0xbb, 0xc4, 0xc7, 0xd4, 0xc3, 0xae, 0x8f, 0x85, 0x24, 0x14, 0x49, 0xc2, 0xa8, 0x1b,
+	0x11, 0x11, 0x21, 0xe9, 0xed, 0xbb, 0x1d, 0x1e, 0x66, 0x89, 0x3f, 0xb9, 0x28, 0x31, 0x65, 0xd2,
+	0x3d, 0x64, 0xfc, 0x80, 0xd0, 0xc0, 0xf5, 0x71, 0x97, 0x78, 0x29, 0xf3, 0xee, 0xa5, 0x32, 0x53,
+	0xe1, 0x62, 0xce, 0x19, 0xcf, 0x6a, 0x37, 0x11, 0xaf, 0xa9, 0x7f, 0x7b, 0x9d, 0x17, 0xb5, 0x43,
+	0x8e, 0xe2, 0x18, 0x73, 0x61, 0xd6, 0xef, 0xa6, 0x0a, 0x62, 0x52, 0x43, 0x94, 0x32, 0xa9, 0x78,
+	0xcd, 0x6a, 0xf5, 0x07, 0x0b, 0xc0, 0x0d, 0x25, 0x62, 0x8b, 0xb0, 0x50, 0x2d, 0x3d, 0xc6, 0x3d,
+	0xf8, 0x21, 0x28, 0x18, 0x69, 0x14, 0x45, 0xb8, 0x6c, 0xdd, 0xb7, 0xde, 0x2e, 0xd4, 0xef, 0x9a,
+	0x13, 0xb5, 0x53, 0x57, 0xf6, 0xc7, 0x92, 0x13, 0x1a, 0x6c, 0xa1, 0xb0, 0x83, 0x1d, 0xa0, 0x01,
+	0xcf, 0x50, 0x84, 0x61, 0x0b, 0x14, 0xbb, 0x9a, 0x8e, 0x06, 0xae, 0xc4, 0x47, 0xb2, 0x9c, 0x9b,
+	0x80, 0x61, 0xbe, 0x8f, 0x69, 0xe3, 0x23, 0x59, 0x7d, 0x65, 0x81, 0x3b, 0x46, 0x1a, 0x0a, 0x89,
+	0xaf, 0xb4, 0x6d, 0x20, 0x8e, 0x22, 0x2c, 0x31, 0x87, 0x6d, 0x70, 0x9b, 0x04, 0x94, 0x71, 0xb4,
+	0x17, 0x62, 0x37, 0x1b, 0x46, 0x51, 0xb6, 0xee, 0x4f, 0x9f, 0xea, 0xab, 0xd4, 0x07, 0x6b, 0x17,
+	0x6d, 0x05, 0x85, 0x02, 0xdc, 0xc5, 0x47, 0x38, 0x8a, 0x65, 0x4a, 0xd9, 0x4d, 0xa3, 0xe2, 0x1e,
+	0xe0, 0x9e, 0x28, 0xe7, 0x14, 0x75, 0xdd, 0x7e, 0x7d, 0x96, 0xdb, 0xa3, 0x11, 0x75, 0xee, 0x68,
+	0xde, 0xd1, 0x15, 0x51, 0xfd, 0x2b, 0x07, 0xae, 0x67, 0x54, 0xac, 0x24, 0x69, 0x0f, 0xeb, 0xe0,
+	0x8a, 0xda, 0xce, 0x44, 0xb1, 0xd7, 0xa6, 0x70, 0x17, 0xcc, 0x24, 0x89, 0xa1, 0x82, 0x5d, 0xac,
+	0x3f, 0x39, 0x51, 0xa5, 0xca, 0x3d, 0x7b, 0xd8, 0x65, 0xbb, 0x17, 0xe3, 0x15, 0xda, 0x89, 0xc6,
+	0x2e, 0x38, 0x8a, 0x19, 0x3e, 0x07, 0x73, 0x69, 0x96, 0x8a, 0xf2, 0xb4, 0x0a, 0x46, 0x63, 0xb2,
+	0x60, 0x68, 0x3a, 0x83, 0x75, 0x06, 0x2c, 0x70, 0x1b, 0x14, 0x3c, 0x46, 0x85, 0xe4, 0x88, 0x50,
+	0x29, 0xca, 0x33, 0x8a, 0xf4, 0xdd, 0x33, 0x90, 0xb6, 0xfa, 0x68, 0x27, 0xcb, 0x54, 0xfd, 0x79,
+	0x1e, 0x2c, 0x8c, 0xf1, 0x0d, 0x7d, 0x70, 0xed, 0x10, 0xef, 0x09, 0x22, 0xb1, 0x1b, 0x12, 0x21,
+	0xcb, 0xd3, 0x2a, 0xc0, 0x8f, 0xce, 0xb1, 0x0d, 0x7b, 0x5b, 0xf3, 0x3c, 0x21, 0x42, 0xae, 0x4d,
+	0x39, 0x85, 0xc3, 0xc1, 0x5f, 0xf8, 0x19, 0x98, 0x4b, 0x12, 0x5f, 0xbb, 0x98, 0x51, 0x2e, 0x3e,
+	0x38, 0x8f, 0x8b, 0xe4, 0x2a, 0x18, 0xfe, 0xbc, 0x34, 0x63, 0xd8, 0x02, 0xf3, 0x21, 0xa2, 0x41,
+	0x07, 0x05, 0xd8, 0xf5, 0x98, 0x8f, 0xcb, 0x57, 0x4e, 0x4f, 0x92, 0xb5, 0x29, 0xe7, 0x5a, 0x0a,
+	0x6a, 0x31, 0x1f, 0xc3, 0xaf, 0x40, 0x29, 0x5b, 0x68, 0x06, 0x6a, 0x67, 0x15, 0xd9, 0xea, 0x79,
+	0xd4, 0x2e, 0x0f, 0x08, 0x33, 0xc2, 0x17, 0xfc, 0xd1, 0x69, 0xf8, 0x25, 0xb8, 0x39, 0xae, 0x34,
+	0x97, 0xaf, 0x5e, 0x8a, 0xf7, 0xa7, 0x86, 0x6e, 0xc8, 0x7b, 0x3a, 0x0d, 0xbf, 0xb5, 0xc0, 0xed,
+	0x13, 0xca, 0x6c, 0x39, 0xaf, 0x14, 0xac, 0x5f, 0x50, 0xc1, 0x33, 0x26, 0xb7, 0x35, 0xe1, 0xda,
+	0x94, 0x93, 0x8d, 0xf4, 0x60, 0xa1, 0xf2, 0x11, 0xc8, 0xf7, 0xe3, 0x91, 0x5c, 0x78, 0x7c, 0x24,
+	0x27, 0x2b, 0x5f, 0xda, 0xb4, 0xb2, 0x0a, 0x0a, 0x99, 0x14, 0x84, 0xef, 0x83, 0xbc, 0x49, 0xc1,
+	0xc9, 0x58, 0xfa, 0xd6, 0x95, 0x5d, 0xb0, 0x30, 0xe6, 0xe8, 0xe0, 0x3a, 0xb8, 0x31, 0x9c, 0x22,
+	0x93, 0x31, 0x5f, 0x1f, 0x3a, 0x71, 0x51, 0xf9, 0xd5, 0x3a, 0xe6, 0xa2, 0x7f, 0x10, 0x3f, 0x59,
+	0x60, 0x2e, 0x7d, 0x8d, 0x35, 0x77, 0xb1, 0xfe, 0xf5, 0x19, 0x2a, 0x97, 0x89, 0xfc, 0x18, 0xea,
+	0x4d, 0x1e, 0x8e, 0x2d, 0x69, 0xa7, 0x22, 0x9c, 0x7c, 0x47, 0x0f, 0x44, 0xe5, 0xcf, 0x19, 0x50,
+	0x1a, 0x7b, 0xa6, 0xf0, 0x11, 0xb8, 0x86, 0x8f, 0x62, 0x44, 0x7d, 0xec, 0x27, 0xdd, 0x84, 0xa9,
+	0x22, 0xaf, 0x8f, 0x4a, 0x21, 0x45, 0x6c, 0xf2, 0x10, 0xfe, 0x68, 0x81, 0x59, 0xdd, 0x2a, 0xa8,
+	0xf2, 0x50, 0xac, 0x7f, 0x63, 0x5d, 0x68, 0xdb, 0x03, 0x6d, 0xcb, 0x8a, 0x75, 0x82, 0x7d, 0x0f,
+	0x43, 0x1c, 0x23, 0x08, 0x3e, 0x07, 0xb7, 0x42, 0x24, 0xa4, 0xeb, 0xed, 0x63, 0xef, 0x00, 0xfb,
+	0xae, 0x8f, 0x24, 0x76, 0x25, 0x89, 0x26, 0x2a, 0x34, 0xce, 0x42, 0x82, 0x6d, 0x69, 0xe8, 0x32,
+	0x92, 0xb8, 0x4d, 0x22, 0x0c, 0x7f, 0xb3, 0x40, 0xf1, 0x78, 0xff, 0xa2, 0x5e, 0xb6, 0x62, 0xfd,
+	0xfb, 0x4b, 0xdb, 0x36, 0x15, 0x2b, 0x09, 0xf9, 0x84, 0x87, 0x3e, 0x1e, 0x98, 0x54, 0x49, 0x3f,
+	0xf3, 0x1f, 0xae, 0x80, 0xff, 0xed, 0x4b, 0x19, 0x1b, 0xdd, 0xaa, 0xd8, 0xea, 0x5e, 0xe6, 0xff,
+	0x23, 0x31, 0x58, 0xa7, 0xf2, 0xbd, 0x77, 0xd2, 0x5a, 0x3b, 0x9f, 0xa0, 0x14, 0x4d, 0x52, 0x6c,
+	0x97, 0xf2, 0x60, 0x96, 0x63, 0x24, 0x18, 0x5d, 0xba, 0x0a, 0xae, 0x74, 0x13, 0x9b, 0xea, 0xef,
+	0x57, 0x41, 0x69, 0xec, 0x33, 0x06, 0xbf, 0xb3, 0xc0, 0x6d, 0x8f, 0x75, 0x54, 0xfb, 0x3b, 0x78,
+	0xd1, 0x74, 0x71, 0xd6, 0xed, 0xc0, 0xe3, 0x73, 0xbd, 0x8f, 0x76, 0x4b, 0x93, 0x0e, 0x66, 0x4c,
+	0x81, 0x2e, 0x79, 0xe3, 0x16, 0xe0, 0x17, 0x60, 0x81, 0x63, 0x81, 0xc3, 0x10, 0xf3, 0x8c, 0x0e,
+	0xb3, 0xff, 0xb5, 0xf3, 0x49, 0x70, 0x0c, 0xe1, 0x60, 0x6a, 0x6d, 0xca, 0x81, 0x7c, 0x64, 0x36,
+	0x29, 0x0c, 0x6f, 0x7a, 0x98, 0x4b, 0xf2, 0x82, 0x78, 0x49, 0xfa, 0x45, 0x44, 0x88, 0xa4, 0x9d,
+	0x24, 0xd4, 0x4d, 0x63, 0x93, 0x79, 0xbe, 0x2f, 0x39, 0x20, 0x6f, 0x64, 0x3c, 0x3f, 0xd5, 0x8e,
+	0xd7, 0xa9, 0x31, 0x56, 0xa1, 0x79, 0x69, 0x81, 0x07, 0x59, 0x75, 0x3e, 0x8b, 0x10, 0xc9, 0x7c,
+	0x60, 0x0c, 0xab, 0x9c, 0xf9, 0x2f, 0x54, 0xbe, 0x95, 0x51, 0xb0, 0xac, 0x04, 0xa4, 0x95, 0xec,
+	0x98, 0xd8, 0xca, 0xdf, 0x16, 0x28, 0x8d, 0xe5, 0x80, 0x9b, 0xa0, 0x2c, 0x99, 0x44, 0xa1, 0x2b,
+	0x11, 0x0f, 0xb0, 0xc4, 0xbe, 0x51, 0x4d, 0x54, 0x2d, 0x3e, 0x31, 0xcd, 0x1b, 0x75, 0x7d, 0xd3,
+	0x6f, 0x29, 0x70, 0xdb, 0x60, 0x5b, 0x29, 0x14, 0x62, 0x30, 0x37, 0xe0, 0xd1, 0x3d, 0xf3, 0xea,
+	0x25, 0x6d, 0xdd, 0x19, 0x30, 0x57, 0x6e, 0x02, 0x38, 0x9a, 0x4e, 0x95, 0xcf, 0xc1, 0x8d, 0x11,
+	0x54, 0xf2, 0x92, 0xf5, 0x6f, 0x14, 0x27, 0x12, 0x73, 0xc2, 0xe8, 0x44, 0xad, 0xf5, 0xf5, 0xf4,
+	0x6a, 0xa4, 0xa8, 0xfe, 0x05, 0x5e, 0x7a, 0x65, 0x81, 0xaa, 0xc7, 0xa2, 0x53, 0x36, 0xb6, 0x54,
+	0xd0, 0x3b, 0xdb, 0x48, 0xd8, 0x37, 0xac, 0x4f, 0x97, 0x8d, 0x79, 0xc0, 0x92, 0x6e, 0xcc, 0x66,
+	0x3c, 0xa8, 0x05, 0x98, 0x2a, 0xdf, 0xe9, 0x17, 0x62, 0x4c, 0xc4, 0x49, 0x5f, 0xdb, 0x0f, 0xf5,
+	0xcf, 0x2f, 0xb9, 0xe9, 0xd5, 0xc5, 0xc5, 0x97, 0xb9, 0x7b, 0xab, 0x9a, 0x6c, 0xd1, 0x17, 0xb6,
+	0x1e, 0x26, 0xa3, 0xad, 0x86, 0xdd, 0x52, 0x66, 0x7f, 0xa4, 0x06, 0x3b, 0x8b, 0xbe, 0xd8, 0xe9,
+	0x1b, 0xec, 0x6c, 0x35, 0x76, 0xb4, 0xc1, 0x3f, 0xb9, 0xaa, 0x9e, 0x6d, 0x36, 0x17, 0x7d, 0xd1,
+	0x6c, 0xf6, 0x4d, 0x9a, 0xcd, 0xad, 0x46, 0xb3, 0xa9, 0x8d, 0xf6, 0x66, 0x95, 0xba, 0xc6, 0xbf,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0xbd, 0xe6, 0xe1, 0x9d, 0x0a, 0x10, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/real_time_bidding_setting.pb.go b/googleapis/ads/googleads/v3/common/real_time_bidding_setting.pb.go
new file mode 100644
index 0000000..bee5a39
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/real_time_bidding_setting.pb.go
@@ -0,0 +1,97 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/real_time_bidding_setting.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Settings for Real-Time Bidding, a feature only available for campaigns
+// targeting the Ad Exchange network.
+type RealTimeBiddingSetting struct {
+	// Whether the campaign is opted in to real-time bidding.
+	OptIn                *wrappers.BoolValue `protobuf:"bytes,1,opt,name=opt_in,json=optIn,proto3" json:"opt_in,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *RealTimeBiddingSetting) Reset()         { *m = RealTimeBiddingSetting{} }
+func (m *RealTimeBiddingSetting) String() string { return proto.CompactTextString(m) }
+func (*RealTimeBiddingSetting) ProtoMessage()    {}
+func (*RealTimeBiddingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_575472eed6650645, []int{0}
+}
+
+func (m *RealTimeBiddingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RealTimeBiddingSetting.Unmarshal(m, b)
+}
+func (m *RealTimeBiddingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RealTimeBiddingSetting.Marshal(b, m, deterministic)
+}
+func (m *RealTimeBiddingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RealTimeBiddingSetting.Merge(m, src)
+}
+func (m *RealTimeBiddingSetting) XXX_Size() int {
+	return xxx_messageInfo_RealTimeBiddingSetting.Size(m)
+}
+func (m *RealTimeBiddingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_RealTimeBiddingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RealTimeBiddingSetting proto.InternalMessageInfo
+
+func (m *RealTimeBiddingSetting) GetOptIn() *wrappers.BoolValue {
+	if m != nil {
+		return m.OptIn
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*RealTimeBiddingSetting)(nil), "google.ads.googleads.v3.common.RealTimeBiddingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/real_time_bidding_setting.proto", fileDescriptor_575472eed6650645)
+}
+
+var fileDescriptor_575472eed6650645 = []byte{
+	// 303 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xec, 0x30,
+	0x14, 0x86, 0xe9, 0x5c, 0xee, 0x2c, 0xea, 0x6e, 0x16, 0x22, 0xa3, 0x0c, 0x32, 0x2b, 0x57, 0x09,
+	0x9a, 0x5d, 0x04, 0xa1, 0x55, 0x18, 0xc4, 0xcd, 0x30, 0x4a, 0x17, 0x52, 0x28, 0x99, 0x49, 0x0c,
+	0x81, 0x34, 0x27, 0x34, 0x99, 0xf1, 0x7d, 0x5c, 0xfa, 0x28, 0x3e, 0x8a, 0x0f, 0xe0, 0x5a, 0xda,
+	0xd3, 0x76, 0xa5, 0xae, 0xfa, 0xd3, 0x7c, 0xff, 0xf9, 0x0e, 0x27, 0xbd, 0xd1, 0x00, 0xda, 0x2a,
+	0x2a, 0x64, 0xa0, 0x18, 0xdb, 0x74, 0x60, 0x74, 0x07, 0x75, 0x0d, 0x8e, 0x36, 0x4a, 0xd8, 0x2a,
+	0x9a, 0x5a, 0x55, 0x5b, 0x23, 0xa5, 0x71, 0xba, 0x0a, 0x2a, 0x46, 0xe3, 0x34, 0xf1, 0x0d, 0x44,
+	0x98, 0x2d, 0xb0, 0x44, 0x84, 0x0c, 0x64, 0xec, 0x93, 0x03, 0x23, 0xd8, 0x9f, 0xf7, 0xef, 0xb4,
+	0xa3, 0xb7, 0xfb, 0x17, 0xfa, 0xda, 0x08, 0xef, 0x55, 0x13, 0xb0, 0x3f, 0x3f, 0x1b, 0xfc, 0xde,
+	0x50, 0xe1, 0x1c, 0x44, 0x11, 0x0d, 0xb8, 0xfe, 0x75, 0xf9, 0x90, 0x1e, 0x6f, 0x94, 0xb0, 0x4f,
+	0xa6, 0x56, 0x39, 0xea, 0x1f, 0xd1, 0x3e, 0xbb, 0x4c, 0xa7, 0xe0, 0x63, 0x65, 0xdc, 0x49, 0x72,
+	0x9e, 0x5c, 0x1c, 0x5d, 0xcd, 0x7b, 0x3b, 0x19, 0x44, 0x24, 0x07, 0xb0, 0x85, 0xb0, 0x7b, 0xb5,
+	0xf9, 0x0f, 0x3e, 0xde, 0xbb, 0xfc, 0x2b, 0x49, 0x97, 0x3b, 0xa8, 0xc9, 0xdf, 0x1b, 0xe7, 0xa7,
+	0x3f, 0x1b, 0xd7, 0xed, 0xdc, 0x75, 0xf2, 0x7c, 0xd7, 0xd7, 0x35, 0x58, 0xe1, 0x34, 0x81, 0x46,
+	0x53, 0xad, 0x5c, 0x67, 0x1d, 0x0e, 0xe8, 0x4d, 0xf8, 0xed, 0x9e, 0xd7, 0xf8, 0x79, 0x9b, 0xfc,
+	0x5b, 0x65, 0xd9, 0xfb, 0x64, 0xb1, 0xc2, 0x61, 0x99, 0x0c, 0x04, 0x63, 0x9b, 0x0a, 0x46, 0x6e,
+	0x3b, 0xec, 0x63, 0x00, 0xca, 0x4c, 0x86, 0x72, 0x04, 0xca, 0x82, 0x95, 0x08, 0x7c, 0x4e, 0x96,
+	0xf8, 0x97, 0xf3, 0x4c, 0x06, 0xce, 0x47, 0x84, 0xf3, 0x82, 0x71, 0x8e, 0xd0, 0x76, 0xda, 0x6d,
+	0xc7, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x5c, 0xb0, 0x50, 0xec, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/segments.pb.go b/googleapis/ads/googleads/v3/common/segments.pb.go
new file mode 100644
index 0000000..5e12ccc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/segments.pb.go
@@ -0,0 +1,972 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/segments.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Segment only fields.
+type Segments struct {
+	// Ad network type.
+	AdNetworkType enums.AdNetworkTypeEnum_AdNetworkType `protobuf:"varint,3,opt,name=ad_network_type,json=adNetworkType,proto3,enum=google.ads.googleads.v3.enums.AdNetworkTypeEnum_AdNetworkType" json:"ad_network_type,omitempty"`
+	// Click type.
+	ClickType enums.ClickTypeEnum_ClickType `protobuf:"varint,26,opt,name=click_type,json=clickType,proto3,enum=google.ads.googleads.v3.enums.ClickTypeEnum_ClickType" json:"click_type,omitempty"`
+	// Resource name of the conversion action.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,52,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// Conversion action category.
+	ConversionActionCategory enums.ConversionActionCategoryEnum_ConversionActionCategory `protobuf:"varint,53,opt,name=conversion_action_category,json=conversionActionCategory,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCategoryEnum_ConversionActionCategory" json:"conversion_action_category,omitempty"`
+	// Conversion action name.
+	ConversionActionName *wrappers.StringValue `protobuf:"bytes,54,opt,name=conversion_action_name,json=conversionActionName,proto3" json:"conversion_action_name,omitempty"`
+	// This segments your conversion columns by the original conversion and
+	// conversion value vs. the delta if conversions were adjusted. False row has
+	// the data as originally stated; While true row has the delta between data
+	// now and the data as originally stated. Summing the two together results
+	// post-adjustment data.
+	ConversionAdjustment *wrappers.BoolValue `protobuf:"bytes,27,opt,name=conversion_adjustment,json=conversionAdjustment,proto3" json:"conversion_adjustment,omitempty"`
+	// Conversion attribution event type.
+	ConversionAttributionEventType enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType `protobuf:"varint,2,opt,name=conversion_attribution_event_type,json=conversionAttributionEventType,proto3,enum=google.ads.googleads.v3.enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType" json:"conversion_attribution_event_type,omitempty"`
+	// An enum value representing the number of days between the impression and
+	// the conversion.
+	ConversionLagBucket enums.ConversionLagBucketEnum_ConversionLagBucket `protobuf:"varint,50,opt,name=conversion_lag_bucket,json=conversionLagBucket,proto3,enum=google.ads.googleads.v3.enums.ConversionLagBucketEnum_ConversionLagBucket" json:"conversion_lag_bucket,omitempty"`
+	// An enum value representing the number of days between the impression and
+	// the conversion or between the impression and adjustments to the conversion.
+	ConversionOrAdjustmentLagBucket enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket `protobuf:"varint,51,opt,name=conversion_or_adjustment_lag_bucket,json=conversionOrAdjustmentLagBucket,proto3,enum=google.ads.googleads.v3.enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket" json:"conversion_or_adjustment_lag_bucket,omitempty"`
+	// Date to which metrics apply.
+	// yyyy-MM-dd format, e.g., 2018-04-17.
+	Date *wrappers.StringValue `protobuf:"bytes,4,opt,name=date,proto3" json:"date,omitempty"`
+	// Day of the week, e.g., MONDAY.
+	DayOfWeek enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,5,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	// Device to which metrics apply.
+	Device enums.DeviceEnum_Device `protobuf:"varint,1,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.DeviceEnum_Device" json:"device,omitempty"`
+	// External conversion source.
+	ExternalConversionSource enums.ExternalConversionSourceEnum_ExternalConversionSource `protobuf:"varint,55,opt,name=external_conversion_source,json=externalConversionSource,proto3,enum=google.ads.googleads.v3.enums.ExternalConversionSourceEnum_ExternalConversionSource" json:"external_conversion_source,omitempty"`
+	// Resource name of the geo target constant that represents an airport.
+	GeoTargetAirport *wrappers.StringValue `protobuf:"bytes,65,opt,name=geo_target_airport,json=geoTargetAirport,proto3" json:"geo_target_airport,omitempty"`
+	// Resource name of the geo target constant that represents a canton.
+	GeoTargetCanton *wrappers.StringValue `protobuf:"bytes,76,opt,name=geo_target_canton,json=geoTargetCanton,proto3" json:"geo_target_canton,omitempty"`
+	// Resource name of the geo target constant that represents a city.
+	GeoTargetCity *wrappers.StringValue `protobuf:"bytes,62,opt,name=geo_target_city,json=geoTargetCity,proto3" json:"geo_target_city,omitempty"`
+	// Resource name of the geo target constant that represents a country.
+	GeoTargetCountry *wrappers.StringValue `protobuf:"bytes,77,opt,name=geo_target_country,json=geoTargetCountry,proto3" json:"geo_target_country,omitempty"`
+	// Resource name of the geo target constant that represents a county.
+	GeoTargetCounty *wrappers.StringValue `protobuf:"bytes,68,opt,name=geo_target_county,json=geoTargetCounty,proto3" json:"geo_target_county,omitempty"`
+	// Resource name of the geo target constant that represents a district.
+	GeoTargetDistrict *wrappers.StringValue `protobuf:"bytes,69,opt,name=geo_target_district,json=geoTargetDistrict,proto3" json:"geo_target_district,omitempty"`
+	// Resource name of the geo target constant that represents a metro.
+	GeoTargetMetro *wrappers.StringValue `protobuf:"bytes,63,opt,name=geo_target_metro,json=geoTargetMetro,proto3" json:"geo_target_metro,omitempty"`
+	// Resource name of the geo target constant that represents the most
+	// specific location.
+	GeoTargetMostSpecificLocation *wrappers.StringValue `protobuf:"bytes,72,opt,name=geo_target_most_specific_location,json=geoTargetMostSpecificLocation,proto3" json:"geo_target_most_specific_location,omitempty"`
+	// Resource name of the geo target constant that represents a postal code.
+	GeoTargetPostalCode *wrappers.StringValue `protobuf:"bytes,71,opt,name=geo_target_postal_code,json=geoTargetPostalCode,proto3" json:"geo_target_postal_code,omitempty"`
+	// Resource name of the geo target constant that represents a province.
+	GeoTargetProvince *wrappers.StringValue `protobuf:"bytes,75,opt,name=geo_target_province,json=geoTargetProvince,proto3" json:"geo_target_province,omitempty"`
+	// Resource name of the geo target constant that represents a region.
+	GeoTargetRegion *wrappers.StringValue `protobuf:"bytes,64,opt,name=geo_target_region,json=geoTargetRegion,proto3" json:"geo_target_region,omitempty"`
+	// Resource name of the geo target constant that represents a state.
+	GeoTargetState *wrappers.StringValue `protobuf:"bytes,67,opt,name=geo_target_state,json=geoTargetState,proto3" json:"geo_target_state,omitempty"`
+	// Hotel booking window in days.
+	HotelBookingWindowDays *wrappers.Int64Value `protobuf:"bytes,6,opt,name=hotel_booking_window_days,json=hotelBookingWindowDays,proto3" json:"hotel_booking_window_days,omitempty"`
+	// Hotel center ID.
+	HotelCenterId *wrappers.Int64Value `protobuf:"bytes,7,opt,name=hotel_center_id,json=hotelCenterId,proto3" json:"hotel_center_id,omitempty"`
+	// Hotel check-in date. Formatted as yyyy-MM-dd.
+	HotelCheckInDate *wrappers.StringValue `protobuf:"bytes,8,opt,name=hotel_check_in_date,json=hotelCheckInDate,proto3" json:"hotel_check_in_date,omitempty"`
+	// Hotel check-in day of week.
+	HotelCheckInDayOfWeek enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,9,opt,name=hotel_check_in_day_of_week,json=hotelCheckInDayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"hotel_check_in_day_of_week,omitempty"`
+	// Hotel city.
+	HotelCity *wrappers.StringValue `protobuf:"bytes,10,opt,name=hotel_city,json=hotelCity,proto3" json:"hotel_city,omitempty"`
+	// Hotel class.
+	HotelClass *wrappers.Int32Value `protobuf:"bytes,11,opt,name=hotel_class,json=hotelClass,proto3" json:"hotel_class,omitempty"`
+	// Hotel country.
+	HotelCountry *wrappers.StringValue `protobuf:"bytes,12,opt,name=hotel_country,json=hotelCountry,proto3" json:"hotel_country,omitempty"`
+	// Hotel date selection type.
+	HotelDateSelectionType enums.HotelDateSelectionTypeEnum_HotelDateSelectionType `protobuf:"varint,13,opt,name=hotel_date_selection_type,json=hotelDateSelectionType,proto3,enum=google.ads.googleads.v3.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType" json:"hotel_date_selection_type,omitempty"`
+	// Hotel length of stay.
+	HotelLengthOfStay *wrappers.Int32Value `protobuf:"bytes,14,opt,name=hotel_length_of_stay,json=hotelLengthOfStay,proto3" json:"hotel_length_of_stay,omitempty"`
+	// Hotel rate rule ID.
+	HotelRateRuleId *wrappers.StringValue `protobuf:"bytes,73,opt,name=hotel_rate_rule_id,json=hotelRateRuleId,proto3" json:"hotel_rate_rule_id,omitempty"`
+	// Hotel rate type.
+	HotelRateType enums.HotelRateTypeEnum_HotelRateType `protobuf:"varint,74,opt,name=hotel_rate_type,json=hotelRateType,proto3,enum=google.ads.googleads.v3.enums.HotelRateTypeEnum_HotelRateType" json:"hotel_rate_type,omitempty"`
+	// Hotel price bucket.
+	HotelPriceBucket enums.HotelPriceBucketEnum_HotelPriceBucket `protobuf:"varint,78,opt,name=hotel_price_bucket,json=hotelPriceBucket,proto3,enum=google.ads.googleads.v3.enums.HotelPriceBucketEnum_HotelPriceBucket" json:"hotel_price_bucket,omitempty"`
+	// Hotel state.
+	HotelState *wrappers.StringValue `protobuf:"bytes,15,opt,name=hotel_state,json=hotelState,proto3" json:"hotel_state,omitempty"`
+	// Hour of day as a number between 0 and 23, inclusive.
+	Hour *wrappers.Int32Value `protobuf:"bytes,16,opt,name=hour,proto3" json:"hour,omitempty"`
+	// Only used with feed item metrics.
+	// Indicates whether the interaction metrics occurred on the feed item itself
+	// or a different extension or ad unit.
+	InteractionOnThisExtension *wrappers.BoolValue `protobuf:"bytes,49,opt,name=interaction_on_this_extension,json=interactionOnThisExtension,proto3" json:"interaction_on_this_extension,omitempty"`
+	// Keyword criterion.
+	Keyword *Keyword `protobuf:"bytes,61,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	// Month as represented by the date of the first day of a month. Formatted as
+	// yyyy-MM-dd.
+	Month *wrappers.StringValue `protobuf:"bytes,17,opt,name=month,proto3" json:"month,omitempty"`
+	// Month of the year, e.g., January.
+	MonthOfYear enums.MonthOfYearEnum_MonthOfYear `protobuf:"varint,18,opt,name=month_of_year,json=monthOfYear,proto3,enum=google.ads.googleads.v3.enums.MonthOfYearEnum_MonthOfYear" json:"month_of_year,omitempty"`
+	// Partner hotel ID.
+	PartnerHotelId *wrappers.StringValue `protobuf:"bytes,19,opt,name=partner_hotel_id,json=partnerHotelId,proto3" json:"partner_hotel_id,omitempty"`
+	// Placeholder type. This is only used with feed item metrics.
+	PlaceholderType enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,20,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type,omitempty"`
+	// Aggregator ID of the product.
+	ProductAggregatorId *wrappers.UInt64Value `protobuf:"bytes,28,opt,name=product_aggregator_id,json=productAggregatorId,proto3" json:"product_aggregator_id,omitempty"`
+	// Bidding category (level 1) of the product.
+	ProductBiddingCategoryLevel1 *wrappers.StringValue `protobuf:"bytes,56,opt,name=product_bidding_category_level1,json=productBiddingCategoryLevel1,proto3" json:"product_bidding_category_level1,omitempty"`
+	// Bidding category (level 2) of the product.
+	ProductBiddingCategoryLevel2 *wrappers.StringValue `protobuf:"bytes,57,opt,name=product_bidding_category_level2,json=productBiddingCategoryLevel2,proto3" json:"product_bidding_category_level2,omitempty"`
+	// Bidding category (level 3) of the product.
+	ProductBiddingCategoryLevel3 *wrappers.StringValue `protobuf:"bytes,58,opt,name=product_bidding_category_level3,json=productBiddingCategoryLevel3,proto3" json:"product_bidding_category_level3,omitempty"`
+	// Bidding category (level 4) of the product.
+	ProductBiddingCategoryLevel4 *wrappers.StringValue `protobuf:"bytes,59,opt,name=product_bidding_category_level4,json=productBiddingCategoryLevel4,proto3" json:"product_bidding_category_level4,omitempty"`
+	// Bidding category (level 5) of the product.
+	ProductBiddingCategoryLevel5 *wrappers.StringValue `protobuf:"bytes,60,opt,name=product_bidding_category_level5,json=productBiddingCategoryLevel5,proto3" json:"product_bidding_category_level5,omitempty"`
+	// Brand of the product.
+	ProductBrand *wrappers.StringValue `protobuf:"bytes,29,opt,name=product_brand,json=productBrand,proto3" json:"product_brand,omitempty"`
+	// Channel of the product.
+	ProductChannel enums.ProductChannelEnum_ProductChannel `protobuf:"varint,30,opt,name=product_channel,json=productChannel,proto3,enum=google.ads.googleads.v3.enums.ProductChannelEnum_ProductChannel" json:"product_channel,omitempty"`
+	// Channel exclusivity of the product.
+	ProductChannelExclusivity enums.ProductChannelExclusivityEnum_ProductChannelExclusivity `protobuf:"varint,31,opt,name=product_channel_exclusivity,json=productChannelExclusivity,proto3,enum=google.ads.googleads.v3.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity" json:"product_channel_exclusivity,omitempty"`
+	// Condition of the product.
+	ProductCondition enums.ProductConditionEnum_ProductCondition `protobuf:"varint,32,opt,name=product_condition,json=productCondition,proto3,enum=google.ads.googleads.v3.enums.ProductConditionEnum_ProductCondition" json:"product_condition,omitempty"`
+	// Resource name of the geo target constant for the country of sale of the
+	// product.
+	ProductCountry *wrappers.StringValue `protobuf:"bytes,33,opt,name=product_country,json=productCountry,proto3" json:"product_country,omitempty"`
+	// Custom attribute 0 of the product.
+	ProductCustomAttribute0 *wrappers.StringValue `protobuf:"bytes,34,opt,name=product_custom_attribute0,json=productCustomAttribute0,proto3" json:"product_custom_attribute0,omitempty"`
+	// Custom attribute 1 of the product.
+	ProductCustomAttribute1 *wrappers.StringValue `protobuf:"bytes,35,opt,name=product_custom_attribute1,json=productCustomAttribute1,proto3" json:"product_custom_attribute1,omitempty"`
+	// Custom attribute 2 of the product.
+	ProductCustomAttribute2 *wrappers.StringValue `protobuf:"bytes,36,opt,name=product_custom_attribute2,json=productCustomAttribute2,proto3" json:"product_custom_attribute2,omitempty"`
+	// Custom attribute 3 of the product.
+	ProductCustomAttribute3 *wrappers.StringValue `protobuf:"bytes,37,opt,name=product_custom_attribute3,json=productCustomAttribute3,proto3" json:"product_custom_attribute3,omitempty"`
+	// Custom attribute 4 of the product.
+	ProductCustomAttribute4 *wrappers.StringValue `protobuf:"bytes,38,opt,name=product_custom_attribute4,json=productCustomAttribute4,proto3" json:"product_custom_attribute4,omitempty"`
+	// Item ID of the product.
+	ProductItemId *wrappers.StringValue `protobuf:"bytes,39,opt,name=product_item_id,json=productItemId,proto3" json:"product_item_id,omitempty"`
+	// Resource name of the language constant for the language of the product.
+	ProductLanguage *wrappers.StringValue `protobuf:"bytes,40,opt,name=product_language,json=productLanguage,proto3" json:"product_language,omitempty"`
+	// Merchant ID of the product.
+	ProductMerchantId *wrappers.UInt64Value `protobuf:"bytes,41,opt,name=product_merchant_id,json=productMerchantId,proto3" json:"product_merchant_id,omitempty"`
+	// Store ID of the product.
+	ProductStoreId *wrappers.StringValue `protobuf:"bytes,42,opt,name=product_store_id,json=productStoreId,proto3" json:"product_store_id,omitempty"`
+	// Title of the product.
+	ProductTitle *wrappers.StringValue `protobuf:"bytes,43,opt,name=product_title,json=productTitle,proto3" json:"product_title,omitempty"`
+	// Type (level 1) of the product.
+	ProductTypeL1 *wrappers.StringValue `protobuf:"bytes,44,opt,name=product_type_l1,json=productTypeL1,proto3" json:"product_type_l1,omitempty"`
+	// Type (level 2) of the product.
+	ProductTypeL2 *wrappers.StringValue `protobuf:"bytes,45,opt,name=product_type_l2,json=productTypeL2,proto3" json:"product_type_l2,omitempty"`
+	// Type (level 3) of the product.
+	ProductTypeL3 *wrappers.StringValue `protobuf:"bytes,46,opt,name=product_type_l3,json=productTypeL3,proto3" json:"product_type_l3,omitempty"`
+	// Type (level 4) of the product.
+	ProductTypeL4 *wrappers.StringValue `protobuf:"bytes,47,opt,name=product_type_l4,json=productTypeL4,proto3" json:"product_type_l4,omitempty"`
+	// Type (level 5) of the product.
+	ProductTypeL5 *wrappers.StringValue `protobuf:"bytes,48,opt,name=product_type_l5,json=productTypeL5,proto3" json:"product_type_l5,omitempty"`
+	// Quarter as represented by the date of the first day of a quarter.
+	// Uses the calendar year for quarters, e.g., the second quarter of 2018
+	// starts on 2018-04-01. Formatted as yyyy-MM-dd.
+	Quarter *wrappers.StringValue `protobuf:"bytes,21,opt,name=quarter,proto3" json:"quarter,omitempty"`
+	// Type of the search engine results page.
+	SearchEngineResultsPageType enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType `protobuf:"varint,70,opt,name=search_engine_results_page_type,json=searchEngineResultsPageType,proto3,enum=google.ads.googleads.v3.enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType" json:"search_engine_results_page_type,omitempty"`
+	// Match type of the keyword that triggered the ad, including variants.
+	SearchTermMatchType enums.SearchTermMatchTypeEnum_SearchTermMatchType `protobuf:"varint,22,opt,name=search_term_match_type,json=searchTermMatchType,proto3,enum=google.ads.googleads.v3.enums.SearchTermMatchTypeEnum_SearchTermMatchType" json:"search_term_match_type,omitempty"`
+	// Position of the ad.
+	Slot enums.SlotEnum_Slot `protobuf:"varint,23,opt,name=slot,proto3,enum=google.ads.googleads.v3.enums.SlotEnum_Slot" json:"slot,omitempty"`
+	// Resource name of the ad group criterion that represents webpage criterion.
+	Webpage *wrappers.StringValue `protobuf:"bytes,66,opt,name=webpage,proto3" json:"webpage,omitempty"`
+	// Week as defined as Monday through Sunday, and represented by the date of
+	// Monday. Formatted as yyyy-MM-dd.
+	Week *wrappers.StringValue `protobuf:"bytes,24,opt,name=week,proto3" json:"week,omitempty"`
+	// Year, formatted as yyyy.
+	Year                 *wrappers.Int32Value `protobuf:"bytes,25,opt,name=year,proto3" json:"year,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Segments) Reset()         { *m = Segments{} }
+func (m *Segments) String() string { return proto.CompactTextString(m) }
+func (*Segments) ProtoMessage()    {}
+func (*Segments) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aeb1e0d15c8aadb4, []int{0}
+}
+
+func (m *Segments) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Segments.Unmarshal(m, b)
+}
+func (m *Segments) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Segments.Marshal(b, m, deterministic)
+}
+func (m *Segments) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Segments.Merge(m, src)
+}
+func (m *Segments) XXX_Size() int {
+	return xxx_messageInfo_Segments.Size(m)
+}
+func (m *Segments) XXX_DiscardUnknown() {
+	xxx_messageInfo_Segments.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Segments proto.InternalMessageInfo
+
+func (m *Segments) GetAdNetworkType() enums.AdNetworkTypeEnum_AdNetworkType {
+	if m != nil {
+		return m.AdNetworkType
+	}
+	return enums.AdNetworkTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetClickType() enums.ClickTypeEnum_ClickType {
+	if m != nil {
+		return m.ClickType
+	}
+	return enums.ClickTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *Segments) GetConversionActionCategory() enums.ConversionActionCategoryEnum_ConversionActionCategory {
+	if m != nil {
+		return m.ConversionActionCategory
+	}
+	return enums.ConversionActionCategoryEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetConversionActionName() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionActionName
+	}
+	return nil
+}
+
+func (m *Segments) GetConversionAdjustment() *wrappers.BoolValue {
+	if m != nil {
+		return m.ConversionAdjustment
+	}
+	return nil
+}
+
+func (m *Segments) GetConversionAttributionEventType() enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType {
+	if m != nil {
+		return m.ConversionAttributionEventType
+	}
+	return enums.ConversionAttributionEventTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetConversionLagBucket() enums.ConversionLagBucketEnum_ConversionLagBucket {
+	if m != nil {
+		return m.ConversionLagBucket
+	}
+	return enums.ConversionLagBucketEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetConversionOrAdjustmentLagBucket() enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket {
+	if m != nil {
+		return m.ConversionOrAdjustmentLagBucket
+	}
+	return enums.ConversionOrAdjustmentLagBucketEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetDate() *wrappers.StringValue {
+	if m != nil {
+		return m.Date
+	}
+	return nil
+}
+
+func (m *Segments) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetDevice() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.Device
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetExternalConversionSource() enums.ExternalConversionSourceEnum_ExternalConversionSource {
+	if m != nil {
+		return m.ExternalConversionSource
+	}
+	return enums.ExternalConversionSourceEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetGeoTargetAirport() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetAirport
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetCanton() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetCanton
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetCity() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetCity
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetCountry
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetCounty() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetCounty
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetDistrict() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetDistrict
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetMetro() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetMetro
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetMostSpecificLocation() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetMostSpecificLocation
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetPostalCode() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetPostalCode
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetProvince() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetProvince
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetRegion() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetRegion
+	}
+	return nil
+}
+
+func (m *Segments) GetGeoTargetState() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetState
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelBookingWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelBookingWindowDays
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelCenterId() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelCenterId
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelCheckInDate() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCheckInDate
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelCheckInDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.HotelCheckInDayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetHotelCity() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCity
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelClass() *wrappers.Int32Value {
+	if m != nil {
+		return m.HotelClass
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCountry
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelDateSelectionType() enums.HotelDateSelectionTypeEnum_HotelDateSelectionType {
+	if m != nil {
+		return m.HotelDateSelectionType
+	}
+	return enums.HotelDateSelectionTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetHotelLengthOfStay() *wrappers.Int32Value {
+	if m != nil {
+		return m.HotelLengthOfStay
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelRateRuleId() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelRateRuleId
+	}
+	return nil
+}
+
+func (m *Segments) GetHotelRateType() enums.HotelRateTypeEnum_HotelRateType {
+	if m != nil {
+		return m.HotelRateType
+	}
+	return enums.HotelRateTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetHotelPriceBucket() enums.HotelPriceBucketEnum_HotelPriceBucket {
+	if m != nil {
+		return m.HotelPriceBucket
+	}
+	return enums.HotelPriceBucketEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetHotelState() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelState
+	}
+	return nil
+}
+
+func (m *Segments) GetHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.Hour
+	}
+	return nil
+}
+
+func (m *Segments) GetInteractionOnThisExtension() *wrappers.BoolValue {
+	if m != nil {
+		return m.InteractionOnThisExtension
+	}
+	return nil
+}
+
+func (m *Segments) GetKeyword() *Keyword {
+	if m != nil {
+		return m.Keyword
+	}
+	return nil
+}
+
+func (m *Segments) GetMonth() *wrappers.StringValue {
+	if m != nil {
+		return m.Month
+	}
+	return nil
+}
+
+func (m *Segments) GetMonthOfYear() enums.MonthOfYearEnum_MonthOfYear {
+	if m != nil {
+		return m.MonthOfYear
+	}
+	return enums.MonthOfYearEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetPartnerHotelId() *wrappers.StringValue {
+	if m != nil {
+		return m.PartnerHotelId
+	}
+	return nil
+}
+
+func (m *Segments) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderType
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetProductAggregatorId() *wrappers.UInt64Value {
+	if m != nil {
+		return m.ProductAggregatorId
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBiddingCategoryLevel1() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryLevel1
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBiddingCategoryLevel2() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryLevel2
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBiddingCategoryLevel3() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryLevel3
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBiddingCategoryLevel4() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryLevel4
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBiddingCategoryLevel5() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryLevel5
+	}
+	return nil
+}
+
+func (m *Segments) GetProductBrand() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBrand
+	}
+	return nil
+}
+
+func (m *Segments) GetProductChannel() enums.ProductChannelEnum_ProductChannel {
+	if m != nil {
+		return m.ProductChannel
+	}
+	return enums.ProductChannelEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetProductChannelExclusivity() enums.ProductChannelExclusivityEnum_ProductChannelExclusivity {
+	if m != nil {
+		return m.ProductChannelExclusivity
+	}
+	return enums.ProductChannelExclusivityEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetProductCondition() enums.ProductConditionEnum_ProductCondition {
+	if m != nil {
+		return m.ProductCondition
+	}
+	return enums.ProductConditionEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetProductCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCountry
+	}
+	return nil
+}
+
+func (m *Segments) GetProductCustomAttribute0() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCustomAttribute0
+	}
+	return nil
+}
+
+func (m *Segments) GetProductCustomAttribute1() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCustomAttribute1
+	}
+	return nil
+}
+
+func (m *Segments) GetProductCustomAttribute2() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCustomAttribute2
+	}
+	return nil
+}
+
+func (m *Segments) GetProductCustomAttribute3() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCustomAttribute3
+	}
+	return nil
+}
+
+func (m *Segments) GetProductCustomAttribute4() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductCustomAttribute4
+	}
+	return nil
+}
+
+func (m *Segments) GetProductItemId() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductItemId
+	}
+	return nil
+}
+
+func (m *Segments) GetProductLanguage() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductLanguage
+	}
+	return nil
+}
+
+func (m *Segments) GetProductMerchantId() *wrappers.UInt64Value {
+	if m != nil {
+		return m.ProductMerchantId
+	}
+	return nil
+}
+
+func (m *Segments) GetProductStoreId() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductStoreId
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTitle() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTitle
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTypeL1() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTypeL1
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTypeL2() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTypeL2
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTypeL3() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTypeL3
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTypeL4() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTypeL4
+	}
+	return nil
+}
+
+func (m *Segments) GetProductTypeL5() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductTypeL5
+	}
+	return nil
+}
+
+func (m *Segments) GetQuarter() *wrappers.StringValue {
+	if m != nil {
+		return m.Quarter
+	}
+	return nil
+}
+
+func (m *Segments) GetSearchEngineResultsPageType() enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType {
+	if m != nil {
+		return m.SearchEngineResultsPageType
+	}
+	return enums.SearchEngineResultsPageTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetSearchTermMatchType() enums.SearchTermMatchTypeEnum_SearchTermMatchType {
+	if m != nil {
+		return m.SearchTermMatchType
+	}
+	return enums.SearchTermMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetSlot() enums.SlotEnum_Slot {
+	if m != nil {
+		return m.Slot
+	}
+	return enums.SlotEnum_UNSPECIFIED
+}
+
+func (m *Segments) GetWebpage() *wrappers.StringValue {
+	if m != nil {
+		return m.Webpage
+	}
+	return nil
+}
+
+func (m *Segments) GetWeek() *wrappers.StringValue {
+	if m != nil {
+		return m.Week
+	}
+	return nil
+}
+
+func (m *Segments) GetYear() *wrappers.Int32Value {
+	if m != nil {
+		return m.Year
+	}
+	return nil
+}
+
+// A Keyword criterion segment.
+type Keyword struct {
+	// The AdGroupCriterion resource name.
+	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,1,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// Keyword info.
+	Info                 *KeywordInfo `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *Keyword) Reset()         { *m = Keyword{} }
+func (m *Keyword) String() string { return proto.CompactTextString(m) }
+func (*Keyword) ProtoMessage()    {}
+func (*Keyword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aeb1e0d15c8aadb4, []int{1}
+}
+
+func (m *Keyword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Keyword.Unmarshal(m, b)
+}
+func (m *Keyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Keyword.Marshal(b, m, deterministic)
+}
+func (m *Keyword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Keyword.Merge(m, src)
+}
+func (m *Keyword) XXX_Size() int {
+	return xxx_messageInfo_Keyword.Size(m)
+}
+func (m *Keyword) XXX_DiscardUnknown() {
+	xxx_messageInfo_Keyword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Keyword proto.InternalMessageInfo
+
+func (m *Keyword) GetAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *Keyword) GetInfo() *KeywordInfo {
+	if m != nil {
+		return m.Info
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Segments)(nil), "google.ads.googleads.v3.common.Segments")
+	proto.RegisterType((*Keyword)(nil), "google.ads.googleads.v3.common.Keyword")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/segments.proto", fileDescriptor_aeb1e0d15c8aadb4)
+}
+
+var fileDescriptor_aeb1e0d15c8aadb4 = []byte{
+	// 2157 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9a, 0x5b, 0x5b, 0xdb, 0xc8,
+	0x19, 0xc7, 0x1f, 0x67, 0xd9, 0x64, 0x33, 0x2c, 0x01, 0x86, 0x84, 0x9d, 0x90, 0x33, 0xdb, 0x76,
+	0xd3, 0x3d, 0xd8, 0x60, 0x03, 0xed, 0x3a, 0x9b, 0x83, 0x31, 0x2c, 0x38, 0x81, 0x40, 0x05, 0xcb,
+	0xb6, 0xfb, 0xa4, 0x55, 0x07, 0x69, 0x2c, 0x54, 0x64, 0x8d, 0x32, 0x1a, 0xc3, 0xfa, 0xa6, 0xfd,
+	0x00, 0xbd, 0xeb, 0x45, 0xae, 0xfb, 0xf4, 0xb2, 0xbd, 0xe9, 0x77, 0xe8, 0x5d, 0x3f, 0x49, 0x9f,
+	0x7e, 0x8a, 0x7d, 0xe6, 0x20, 0x59, 0xb6, 0xb1, 0x35, 0x0e, 0x57, 0x48, 0xa3, 0xf7, 0xff, 0x7b,
+	0x5f, 0xbd, 0x33, 0x7a, 0xe7, 0x60, 0xc0, 0x57, 0x1e, 0xa5, 0x5e, 0x40, 0x4a, 0xd8, 0x8d, 0x4b,
+	0xea, 0x52, 0x5c, 0x9d, 0x55, 0x4a, 0x0e, 0x6d, 0xb5, 0x68, 0x58, 0x8a, 0x89, 0xd7, 0x22, 0x21,
+	0x8f, 0x8b, 0x11, 0xa3, 0x9c, 0xc2, 0xfb, 0xca, 0xa6, 0x88, 0xdd, 0xb8, 0x98, 0x9a, 0x17, 0xcf,
+	0x2a, 0x45, 0x65, 0xbe, 0x90, 0x87, 0x73, 0x98, 0xcf, 0x09, 0xf3, 0xb1, 0xc2, 0x2d, 0x54, 0x86,
+	0x99, 0x93, 0xb0, 0xdd, 0x8a, 0x4b, 0xd8, 0xb5, 0x43, 0xc2, 0xcf, 0x29, 0x3b, 0xb5, 0x79, 0x27,
+	0x22, 0x5a, 0x54, 0x1c, 0x2d, 0x72, 0x02, 0xdf, 0xe9, 0xb1, 0x7f, 0x96, 0x63, 0x4f, 0xc3, 0x33,
+	0xc2, 0x62, 0x9f, 0x86, 0x36, 0x76, 0xb8, 0xf8, 0xe3, 0x60, 0x4e, 0x3c, 0xca, 0x3a, 0x5a, 0xbf,
+	0x69, 0xae, 0xe7, 0x9c, 0xf9, 0xc7, 0x6d, 0x09, 0x21, 0x67, 0x24, 0xe4, 0xd9, 0x30, 0xbe, 0x36,
+	0xc6, 0x04, 0xd8, 0xb3, 0x8f, 0xdb, 0xce, 0x29, 0xe1, 0x5a, 0xba, 0x65, 0x2c, 0xa5, 0xcc, 0xc6,
+	0xee, 0x9f, 0xda, 0x31, 0x17, 0x9d, 0x36, 0x08, 0x2a, 0x8d, 0x06, 0xb9, 0xb8, 0x63, 0xd3, 0xa6,
+	0x7d, 0x4e, 0xc8, 0xa9, 0x16, 0x7c, 0x9e, 0x23, 0x20, 0x67, 0xbe, 0x63, 0x98, 0x67, 0xf2, 0x23,
+	0x27, 0x2c, 0xc4, 0x81, 0x9d, 0x09, 0x37, 0xa6, 0x6d, 0x96, 0xea, 0x9f, 0x8e, 0xd6, 0x9f, 0x50,
+	0x4e, 0x02, 0xdb, 0xc5, 0x9c, 0xd8, 0x31, 0x09, 0x88, 0xea, 0xaa, 0x4c, 0x7e, 0xd7, 0x4c, 0xe4,
+	0x11, 0xf3, 0x1d, 0xd2, 0x9b, 0x93, 0x8a, 0x89, 0x8e, 0x09, 0xb7, 0x19, 0x67, 0xcb, 0xa3, 0x45,
+	0x2d, 0x1a, 0xf2, 0x13, 0x91, 0xca, 0x0e, 0xc1, 0x4c, 0x4b, 0x56, 0x46, 0x4b, 0xa2, 0x00, 0x3b,
+	0xe4, 0x84, 0x06, 0x2e, 0x61, 0x59, 0x47, 0x39, 0xd1, 0x45, 0x8c, 0xba, 0x6d, 0x87, 0xdb, 0xce,
+	0x09, 0x0e, 0x43, 0x12, 0x68, 0xd1, 0xf3, 0xb1, 0x44, 0x36, 0xf9, 0xd1, 0x09, 0xda, 0xb1, 0x7f,
+	0xe6, 0xf3, 0x64, 0xc8, 0xaf, 0x1a, 0x02, 0x68, 0xe8, 0xfa, 0xa2, 0x1f, 0xb4, 0xac, 0x3e, 0x5a,
+	0x16, 0x13, 0xcc, 0x9c, 0x13, 0x9b, 0x84, 0x9e, 0x1f, 0x12, 0x9b, 0x91, 0xb8, 0x1d, 0xf0, 0xd8,
+	0x8e, 0xb0, 0xd7, 0x93, 0xda, 0xaa, 0x11, 0x84, 0x13, 0xd6, 0xb2, 0x5b, 0x98, 0x8b, 0xcb, 0xae,
+	0xf6, 0x71, 0x8e, 0x36, 0xa0, 0x49, 0xaf, 0xeb, 0x42, 0x56, 0x92, 0x77, 0xc7, 0xed, 0x66, 0xe9,
+	0x9c, 0xe1, 0x28, 0x22, 0x4c, 0x17, 0xba, 0x85, 0xbb, 0x09, 0x29, 0xf2, 0x4b, 0x38, 0x0c, 0x29,
+	0xc7, 0xe2, 0x3d, 0xf5, 0xd3, 0xc5, 0xff, 0xac, 0x82, 0x8f, 0x0e, 0x74, 0x65, 0x84, 0x4d, 0x30,
+	0xdd, 0x57, 0xa8, 0xd0, 0x07, 0x0f, 0x0b, 0x8f, 0x6f, 0x94, 0x9f, 0x15, 0x87, 0x55, 0x4b, 0x19,
+	0x4e, 0xb1, 0xe6, 0xbe, 0x56, 0xa2, 0xc3, 0x4e, 0x44, 0x36, 0xc3, 0x76, 0xab, 0xb7, 0xc5, 0x9a,
+	0xc2, 0xd9, 0x5b, 0xf8, 0x1d, 0x00, 0xdd, 0xda, 0x86, 0x16, 0xa4, 0x8b, 0xb5, 0x1c, 0x17, 0x75,
+	0x21, 0x48, 0xf1, 0xe9, 0x9d, 0x75, 0xdd, 0x49, 0x2e, 0x61, 0x03, 0xcc, 0x0e, 0x94, 0x40, 0xb4,
+	0xf2, 0xb0, 0xf0, 0x78, 0xb2, 0x7c, 0x37, 0xa1, 0x27, 0x59, 0x2a, 0x1e, 0x70, 0xe6, 0x87, 0xde,
+	0x11, 0x0e, 0xda, 0xc4, 0x9a, 0xe9, 0xca, 0x6a, 0x52, 0x05, 0xff, 0x56, 0x00, 0x0b, 0xc3, 0xcb,
+	0x29, 0x5a, 0x95, 0x21, 0x1f, 0xe6, 0x85, 0xdc, 0x47, 0xad, 0x6b, 0xb9, 0x7a, 0x83, 0x21, 0x0f,
+	0x2d, 0xe4, 0x0c, 0x79, 0x02, 0x2d, 0x30, 0x3f, 0x18, 0x53, 0x88, 0x5b, 0x04, 0xad, 0x19, 0xbc,
+	0xe4, 0xcd, 0x7e, 0xee, 0x6b, 0xdc, 0x22, 0x70, 0x0f, 0xdc, 0xca, 0x32, 0xd3, 0x8a, 0x8b, 0xee,
+	0x48, 0xe4, 0xc2, 0x00, 0x72, 0x9d, 0xd2, 0x60, 0x10, 0x98, 0xea, 0xe0, 0xbf, 0x0a, 0xe0, 0x51,
+	0xee, 0x44, 0x82, 0xae, 0xc8, 0x04, 0xfe, 0xd1, 0x3c, 0x81, 0x5d, 0xcc, 0xa6, 0xa0, 0x74, 0x07,
+	0xc2, 0x48, 0x13, 0xeb, 0xbe, 0x33, 0xf2, 0x39, 0xfc, 0x73, 0xcf, 0xeb, 0x77, 0x67, 0x19, 0x54,
+	0x96, 0x01, 0xbe, 0x34, 0x0e, 0x70, 0x07, 0x7b, 0xeb, 0x52, 0xd9, 0x17, 0x55, 0xda, 0x6e, 0xcd,
+	0x39, 0x83, 0x8d, 0xf0, 0xdf, 0x05, 0xf0, 0xa9, 0xc1, 0xa4, 0x87, 0x2a, 0x32, 0x9c, 0x63, 0xe3,
+	0x70, 0xf6, 0x58, 0xb7, 0x4b, 0x86, 0x85, 0x76, 0xa1, 0x8d, 0xf5, 0xc0, 0x19, 0x6d, 0x00, 0x97,
+	0xc0, 0x84, 0x98, 0xba, 0xd0, 0x84, 0xc1, 0x98, 0x93, 0x96, 0xf0, 0x08, 0x4c, 0x66, 0xe6, 0x63,
+	0xf4, 0xa1, 0xd1, 0xf7, 0xbe, 0x81, 0x3b, 0x7b, 0xcd, 0xef, 0x09, 0x39, 0x95, 0x51, 0xa7, 0x77,
+	0xd6, 0x75, 0x37, 0xb9, 0x84, 0xdb, 0xe0, 0xaa, 0x9a, 0xb6, 0x51, 0x41, 0x22, 0x97, 0xf2, 0x90,
+	0xd2, 0x58, 0xf1, 0xe4, 0xa5, 0xa5, 0xf5, 0xf2, 0x73, 0x1f, 0x3e, 0xab, 0xa3, 0x5f, 0x19, 0x7d,
+	0xee, 0x9b, 0x1a, 0xd0, 0xcd, 0xf0, 0x81, 0x94, 0x4b, 0x87, 0xc3, 0x1e, 0x5a, 0x88, 0x0c, 0x79,
+	0x02, 0x5f, 0x02, 0xe8, 0x11, 0x6a, 0x73, 0xcc, 0x3c, 0xc2, 0x6d, 0xec, 0xb3, 0x88, 0x32, 0x8e,
+	0x6a, 0x26, 0xf5, 0xcc, 0x23, 0xf4, 0x50, 0xca, 0x6a, 0x4a, 0x05, 0xb7, 0xc1, 0x6c, 0x86, 0xe5,
+	0xe0, 0x90, 0xd3, 0x10, 0xed, 0x18, 0xa0, 0xa6, 0x53, 0x54, 0x5d, 0x8a, 0xe0, 0x06, 0x98, 0xce,
+	0x92, 0x7c, 0xde, 0x41, 0xcf, 0x0c, 0x38, 0x53, 0x5d, 0x8e, 0xcf, 0x3b, 0x7d, 0xef, 0xe6, 0xd0,
+	0x76, 0xc8, 0x59, 0x07, 0xed, 0x8e, 0xf5, 0x6e, 0x75, 0xa5, 0xea, 0x7f, 0x37, 0xd1, 0xda, 0x41,
+	0x1b, 0xe3, 0xbd, 0x9b, 0x14, 0xc1, 0x1d, 0x30, 0x97, 0x21, 0xb9, 0x7e, 0xcc, 0x99, 0xef, 0x70,
+	0xb4, 0x69, 0xc0, 0x9a, 0x4d, 0x59, 0x1b, 0x5a, 0x06, 0xbf, 0x05, 0x33, 0x19, 0x5a, 0x8b, 0x70,
+	0x46, 0xd1, 0x73, 0x03, 0xd4, 0x8d, 0x14, 0xb5, 0x2b, 0x34, 0xb0, 0x09, 0x1e, 0x65, 0x39, 0x34,
+	0xe6, 0x76, 0x1c, 0x11, 0xc7, 0x6f, 0xfa, 0x8e, 0x1d, 0x50, 0x47, 0x4e, 0xe7, 0x68, 0xdb, 0x00,
+	0x7c, 0xaf, 0x0b, 0xa6, 0x31, 0x3f, 0xd0, 0x8c, 0x1d, 0x8d, 0x80, 0xbf, 0x01, 0xf3, 0x19, 0x3f,
+	0x11, 0x8d, 0xb9, 0xfc, 0x18, 0x5c, 0x82, 0xb6, 0x0c, 0xe0, 0x73, 0x29, 0x7c, 0x5f, 0x2a, 0xeb,
+	0xd4, 0x25, 0x7d, 0x09, 0x8d, 0x18, 0x3d, 0xf3, 0x43, 0x87, 0xa0, 0x57, 0x63, 0x25, 0x74, 0x5f,
+	0xcb, 0xfa, 0x3a, 0x9a, 0x11, 0x4f, 0xbc, 0xf8, 0x8b, 0xb1, 0x3a, 0xda, 0x92, 0xa2, 0xbe, 0xae,
+	0x89, 0xb9, 0xa8, 0x67, 0xf5, 0xb1, 0xba, 0xe6, 0x80, 0xab, 0xca, 0x76, 0x5b, 0xad, 0xaa, 0x8f,
+	0x29, 0x3d, 0xf5, 0x43, 0xcf, 0x3e, 0xf7, 0x43, 0x97, 0x9e, 0xdb, 0x2e, 0xee, 0xc4, 0xe8, 0xaa,
+	0x04, 0xde, 0x19, 0x00, 0x36, 0x42, 0xbe, 0xb6, 0xa2, 0x78, 0xf3, 0x52, 0xbd, 0xae, 0xc4, 0xdf,
+	0x4b, 0xed, 0x06, 0xee, 0xc4, 0xb0, 0x0e, 0xa6, 0x15, 0xd7, 0x21, 0x21, 0x27, 0xcc, 0xf6, 0x5d,
+	0x74, 0x2d, 0x9f, 0x36, 0x25, 0x35, 0x75, 0x29, 0x69, 0xb8, 0xf0, 0x15, 0x98, 0xd3, 0x90, 0x13,
+	0xe2, 0x9c, 0xda, 0x7e, 0x28, 0xb7, 0x1c, 0xe8, 0x23, 0x93, 0x8f, 0x4c, 0x91, 0x84, 0xae, 0x11,
+	0x6e, 0x88, 0x37, 0x7d, 0x0b, 0x16, 0x06, 0x60, 0xdd, 0x92, 0x7e, 0xfd, 0x52, 0x25, 0xfd, 0x56,
+	0xaf, 0xb7, 0xa4, 0xbc, 0x3f, 0x01, 0x40, 0xbb, 0x14, 0x45, 0x06, 0x18, 0x84, 0x7d, 0x5d, 0x81,
+	0x44, 0x81, 0xf9, 0x06, 0x4c, 0x6a, 0x71, 0x80, 0xe3, 0x18, 0x4d, 0x0e, 0xcf, 0x5e, 0xa5, 0xac,
+	0xc4, 0xca, 0x59, 0x5d, 0x98, 0xc3, 0x1a, 0x98, 0xd2, 0x6a, 0x5d, 0x99, 0x3e, 0x36, 0xf0, 0xfe,
+	0xb1, 0x02, 0xe8, 0xaa, 0xf4, 0xd7, 0x42, 0x32, 0x36, 0x2e, 0xd8, 0xe8, 0xa1, 0x29, 0x99, 0xb0,
+	0xfd, 0x9c, 0x84, 0x6d, 0x0b, 0xbd, 0x48, 0xff, 0x41, 0xa2, 0x4e, 0xd7, 0x3d, 0x17, 0x3f, 0xd2,
+	0x03, 0x6a, 0xa0, 0x1d, 0xee, 0x80, 0x9b, 0x2a, 0x98, 0x80, 0x84, 0x9e, 0xda, 0xd0, 0xc5, 0x1c,
+	0x77, 0xd0, 0x8d, 0xfc, 0xbc, 0xcc, 0x4a, 0xe1, 0x8e, 0xd4, 0xed, 0x35, 0x0f, 0x38, 0xee, 0xc0,
+	0x06, 0x80, 0x99, 0xcd, 0x24, 0x6b, 0x07, 0x44, 0x8c, 0xd0, 0x86, 0xc9, 0x97, 0x28, 0x75, 0x16,
+	0xe6, 0xc4, 0x6a, 0x07, 0xa4, 0xe1, 0x8a, 0x2d, 0x47, 0xdf, 0xbe, 0x14, 0xbd, 0x34, 0xda, 0x72,
+	0x6c, 0x27, 0xa0, 0xde, 0x94, 0x24, 0x2d, 0xfa, 0x63, 0x48, 0x6e, 0x21, 0x4b, 0x42, 0xce, 0xee,
+	0x9b, 0xd1, 0x6b, 0xe9, 0x6a, 0xc3, 0xc4, 0xd5, 0xbe, 0xd0, 0x65, 0xd6, 0x51, 0xfd, 0x8d, 0xfa,
+	0x9b, 0xc9, 0xb4, 0xc0, 0xa7, 0xc9, 0x18, 0x54, 0x05, 0x66, 0xda, 0x20, 0x3f, 0x6a, 0x10, 0xaa,
+	0xe2, 0x52, 0x02, 0x13, 0x27, 0xb4, 0xcd, 0xd0, 0x4c, 0x7e, 0x1f, 0x49, 0x43, 0xf8, 0x7b, 0x70,
+	0xcf, 0x17, 0xdf, 0xbe, 0xde, 0x19, 0x88, 0xb1, 0x76, 0xe2, 0xc7, 0xb6, 0x58, 0x60, 0x84, 0x62,
+	0x5d, 0x81, 0x96, 0x73, 0xd7, 0xf4, 0x0b, 0x19, 0xc0, 0x5e, 0x78, 0x78, 0xe2, 0xc7, 0x9b, 0x89,
+	0x1a, 0xd6, 0xc0, 0xb5, 0x53, 0xd2, 0x39, 0xa7, 0xcc, 0x45, 0x4f, 0x25, 0xe8, 0xb3, 0xe2, 0xe8,
+	0x33, 0xb4, 0xe2, 0x2b, 0x65, 0x6e, 0x25, 0x3a, 0x58, 0x06, 0x1f, 0xca, 0x03, 0x05, 0x34, 0x6b,
+	0x90, 0x0b, 0x65, 0x0a, 0xff, 0x00, 0xa6, 0x7a, 0x0e, 0x21, 0x10, 0x94, 0x9d, 0x56, 0xcd, 0xe9,
+	0xb4, 0x5d, 0xa1, 0xd9, 0x6b, 0xfe, 0x8e, 0x60, 0x26, 0xfb, 0x2b, 0x73, 0x6f, 0x4d, 0xb6, 0xba,
+	0x37, 0x62, 0x2e, 0x88, 0x30, 0xe3, 0x21, 0x61, 0xb6, 0xea, 0x2d, 0xdf, 0x45, 0x73, 0x26, 0x73,
+	0x81, 0x56, 0xc9, 0x81, 0xd0, 0x70, 0x61, 0x0b, 0xcc, 0xf4, 0x9f, 0x7c, 0xa0, 0x9b, 0x32, 0xd4,
+	0xf5, 0x9c, 0x50, 0xf7, 0xbb, 0xb2, 0x74, 0x30, 0xf7, 0xb5, 0x59, 0xd3, 0x51, 0x6f, 0x03, 0xdc,
+	0x07, 0xb7, 0x92, 0xc3, 0x0b, 0xec, 0x79, 0x8c, 0x78, 0x98, 0x53, 0x39, 0x51, 0xdc, 0x1d, 0x12,
+	0xfb, 0x77, 0x99, 0x99, 0x62, 0x4e, 0x4b, 0x6b, 0xa9, 0xb2, 0xe1, 0x42, 0x07, 0x3c, 0x48, 0x88,
+	0xc7, 0xbe, 0xeb, 0x8a, 0xe9, 0x2c, 0xd9, 0xf0, 0xda, 0x01, 0x39, 0x23, 0xc1, 0x32, 0xfa, 0xb5,
+	0x41, 0x5e, 0xee, 0x6a, 0xc8, 0xba, 0x62, 0x24, 0xbb, 0xd7, 0x1d, 0x49, 0xc8, 0x77, 0x52, 0x46,
+	0x5f, 0x5f, 0xd2, 0x49, 0x39, 0xdf, 0x49, 0x05, 0x55, 0x2f, 0xe9, 0xa4, 0x92, 0xef, 0x64, 0x05,
+	0x3d, 0xb9, 0xa4, 0x93, 0x95, 0x7c, 0x27, 0xab, 0xe8, 0x9b, 0x4b, 0x3a, 0x59, 0x15, 0xb3, 0x5d,
+	0xea, 0x84, 0xe1, 0xd0, 0x45, 0xf7, 0x4c, 0x66, 0xbb, 0x04, 0x29, 0x14, 0xd0, 0x07, 0xd3, 0x7d,
+	0x67, 0x71, 0xe8, 0xbe, 0x1c, 0xfb, 0x2f, 0xf2, 0xc6, 0xbe, 0x52, 0xd5, 0x95, 0x48, 0x0d, 0xfd,
+	0x9e, 0x26, 0xeb, 0x46, 0xd4, 0x73, 0x0f, 0xdf, 0x15, 0xc0, 0x9d, 0x11, 0xe7, 0x7e, 0xe8, 0x81,
+	0xf4, 0x7b, 0x34, 0x9e, 0xdf, 0xae, 0xfe, 0x82, 0x10, 0x32, 0x4f, 0xad, 0xdb, 0xd1, 0xb0, 0x47,
+	0xf0, 0x2d, 0x98, 0x1d, 0x38, 0x4e, 0x44, 0x0f, 0x8d, 0x66, 0x98, 0xc4, 0x5f, 0x22, 0xeb, 0x09,
+	0x22, 0x69, 0xb4, 0x66, 0xa2, 0xbe, 0x16, 0xb8, 0x99, 0x49, 0xbb, 0x5e, 0xa9, 0x3c, 0x32, 0x2a,
+	0x5d, 0x09, 0x48, 0xad, 0x55, 0x7e, 0x0b, 0x6e, 0xa7, 0x98, 0x76, 0xcc, 0x69, 0x2b, 0x3d, 0xb6,
+	0x21, 0x4b, 0x68, 0xd1, 0x00, 0xf8, 0x49, 0x02, 0x94, 0xea, 0x5a, 0x2a, 0x1e, 0x45, 0x5e, 0x46,
+	0x9f, 0xbe, 0x3f, 0x79, 0x79, 0x14, 0xb9, 0x8c, 0x7e, 0xf6, 0xfe, 0xe4, 0xf2, 0x28, 0x72, 0x05,
+	0xfd, 0xfc, 0xfd, 0xc9, 0x95, 0x51, 0xe4, 0x15, 0xf4, 0x8b, 0xf7, 0x27, 0xaf, 0x88, 0x5d, 0x79,
+	0x42, 0xf6, 0x39, 0x69, 0x89, 0x79, 0xe0, 0x33, 0x93, 0x5d, 0xb9, 0x16, 0x35, 0x38, 0x69, 0x35,
+	0x5c, 0xb8, 0x05, 0x92, 0x21, 0x66, 0x07, 0x38, 0xf4, 0xda, 0xd8, 0x23, 0xe8, 0xb1, 0xc9, 0xaa,
+	0x4e, 0xab, 0x76, 0xb4, 0x48, 0xec, 0xfb, 0x12, 0x50, 0x8b, 0x30, 0xf1, 0x95, 0x72, 0x11, 0xd2,
+	0x2f, 0x0d, 0xa6, 0xa6, 0xe4, 0x1b, 0xda, 0xd5, 0xba, 0x86, 0x2b, 0x67, 0x68, 0x4d, 0x8b, 0x39,
+	0x65, 0x72, 0xb1, 0xf9, 0xf9, 0x18, 0xc3, 0xfc, 0x40, 0x88, 0x1a, 0x6e, 0xb6, 0xce, 0x71, 0x9f,
+	0x07, 0x04, 0x7d, 0x31, 0x46, 0x9d, 0x3b, 0x14, 0x8a, 0x6c, 0x9e, 0xc5, 0x04, 0x6f, 0x07, 0xcb,
+	0xe8, 0xcb, 0x31, 0xf2, 0x2c, 0x66, 0xee, 0x9d, 0xe5, 0x41, 0x4a, 0x19, 0x7d, 0x35, 0x2e, 0xa5,
+	0x3c, 0x48, 0xa9, 0xa0, 0xe2, 0xb8, 0x94, 0xca, 0x20, 0x65, 0x05, 0x95, 0xc6, 0xa5, 0xac, 0x0c,
+	0x52, 0x56, 0xd1, 0xd2, 0xb8, 0x94, 0x55, 0xb8, 0x06, 0xae, 0xbd, 0x6d, 0x63, 0xc6, 0x09, 0x43,
+	0xb7, 0x0c, 0xd4, 0x89, 0x31, 0xfc, 0x7b, 0x01, 0x3c, 0xc8, 0xf9, 0x49, 0x06, 0x7d, 0x2b, 0x0b,
+	0xf1, 0x0f, 0x39, 0x85, 0xf8, 0x40, 0x52, 0x36, 0x25, 0xc4, 0x52, 0x8c, 0x7d, 0xec, 0x75, 0xf7,
+	0x18, 0x23, 0x9e, 0x5b, 0x77, 0xe2, 0xe1, 0x0f, 0xe1, 0x5f, 0xc0, 0xfc, 0xc5, 0xbf, 0xf7, 0xa0,
+	0x79, 0xa3, 0x93, 0x66, 0xe5, 0xf8, 0x90, 0xb0, 0xd6, 0xae, 0x90, 0xf6, 0x05, 0xd4, 0xd3, 0x6e,
+	0xcd, 0xc5, 0x83, 0x8d, 0xf0, 0x05, 0x98, 0x88, 0x03, 0xca, 0xd1, 0x27, 0xd2, 0xdd, 0x97, 0x79,
+	0xee, 0x02, 0xaa, 0xb6, 0x39, 0xe2, 0xc2, 0x92, 0x4a, 0xd1, 0x3b, 0xe7, 0xe4, 0x58, 0x64, 0x14,
+	0xad, 0x9b, 0xf4, 0x8e, 0x36, 0x86, 0x4b, 0x60, 0x42, 0x1e, 0x12, 0x20, 0x93, 0x03, 0x63, 0x61,
+	0x29, 0x76, 0x3e, 0x72, 0xa5, 0x7f, 0xdb, 0x60, 0xe7, 0x23, 0x0c, 0x17, 0xdf, 0x15, 0xc0, 0x35,
+	0xbd, 0xd9, 0x80, 0x2f, 0x01, 0xc4, 0xae, 0xed, 0x31, 0xda, 0x8e, 0x6c, 0xfd, 0x23, 0x3d, 0x0d,
+	0xe5, 0x09, 0x71, 0xee, 0xa9, 0x07, 0x76, 0xb7, 0x84, 0xac, 0x9e, 0xa8, 0xe0, 0x73, 0x30, 0xe1,
+	0x87, 0x4d, 0x2a, 0x7f, 0xae, 0x98, 0x2c, 0x7f, 0x61, 0xb8, 0xdf, 0x69, 0x84, 0x4d, 0x6a, 0x49,
+	0xe1, 0xfa, 0xff, 0x0a, 0x60, 0xd1, 0xa1, 0xad, 0x1c, 0xe1, 0xfa, 0x54, 0xf2, 0x13, 0xdc, 0xbe,
+	0x88, 0x6b, 0xbf, 0xf0, 0xc3, 0x86, 0x16, 0x78, 0x54, 0x14, 0xe2, 0x22, 0x65, 0x5e, 0xc9, 0x23,
+	0xa1, 0x8c, 0x3a, 0xf9, 0x39, 0x30, 0xf2, 0xe3, 0x61, 0xff, 0x9c, 0xf0, 0x44, 0xfd, 0xf9, 0xc7,
+	0x95, 0x0f, 0xb6, 0x6a, 0xb5, 0x7f, 0x5e, 0xb9, 0xbf, 0xa5, 0x60, 0x35, 0x37, 0x2e, 0xaa, 0x4b,
+	0x71, 0x75, 0x54, 0x29, 0xd6, 0xa5, 0xd9, 0x7f, 0x13, 0x83, 0x37, 0x35, 0x37, 0x7e, 0x93, 0x1a,
+	0xbc, 0x39, 0xaa, 0xbc, 0x51, 0x06, 0xff, 0xbf, 0xb2, 0xa8, 0x5a, 0xab, 0xd5, 0x9a, 0x1b, 0x57,
+	0xab, 0xa9, 0x49, 0xb5, 0x7a, 0x54, 0xa9, 0x56, 0x95, 0xd1, 0xf1, 0x55, 0x19, 0x5d, 0xe5, 0xa7,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0x3e, 0x44, 0x5d, 0x88, 0x21, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/simulation.pb.go b/googleapis/ads/googleads/v3/common/simulation.pb.go
new file mode 100644
index 0000000..37d9f33
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/simulation.pb.go
@@ -0,0 +1,679 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/simulation.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A container for simulation points for simulations of type BID_MODIFIER.
+type BidModifierSimulationPointList struct {
+	// Projected metrics for a series of bid modifier amounts.
+	Points               []*BidModifierSimulationPoint `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *BidModifierSimulationPointList) Reset()         { *m = BidModifierSimulationPointList{} }
+func (m *BidModifierSimulationPointList) String() string { return proto.CompactTextString(m) }
+func (*BidModifierSimulationPointList) ProtoMessage()    {}
+func (*BidModifierSimulationPointList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{0}
+}
+
+func (m *BidModifierSimulationPointList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BidModifierSimulationPointList.Unmarshal(m, b)
+}
+func (m *BidModifierSimulationPointList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BidModifierSimulationPointList.Marshal(b, m, deterministic)
+}
+func (m *BidModifierSimulationPointList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BidModifierSimulationPointList.Merge(m, src)
+}
+func (m *BidModifierSimulationPointList) XXX_Size() int {
+	return xxx_messageInfo_BidModifierSimulationPointList.Size(m)
+}
+func (m *BidModifierSimulationPointList) XXX_DiscardUnknown() {
+	xxx_messageInfo_BidModifierSimulationPointList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BidModifierSimulationPointList proto.InternalMessageInfo
+
+func (m *BidModifierSimulationPointList) GetPoints() []*BidModifierSimulationPoint {
+	if m != nil {
+		return m.Points
+	}
+	return nil
+}
+
+// A container for simulation points for simulations of type CPC_BID.
+type CpcBidSimulationPointList struct {
+	// Projected metrics for a series of CPC bid amounts.
+	Points               []*CpcBidSimulationPoint `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *CpcBidSimulationPointList) Reset()         { *m = CpcBidSimulationPointList{} }
+func (m *CpcBidSimulationPointList) String() string { return proto.CompactTextString(m) }
+func (*CpcBidSimulationPointList) ProtoMessage()    {}
+func (*CpcBidSimulationPointList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{1}
+}
+
+func (m *CpcBidSimulationPointList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CpcBidSimulationPointList.Unmarshal(m, b)
+}
+func (m *CpcBidSimulationPointList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CpcBidSimulationPointList.Marshal(b, m, deterministic)
+}
+func (m *CpcBidSimulationPointList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CpcBidSimulationPointList.Merge(m, src)
+}
+func (m *CpcBidSimulationPointList) XXX_Size() int {
+	return xxx_messageInfo_CpcBidSimulationPointList.Size(m)
+}
+func (m *CpcBidSimulationPointList) XXX_DiscardUnknown() {
+	xxx_messageInfo_CpcBidSimulationPointList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CpcBidSimulationPointList proto.InternalMessageInfo
+
+func (m *CpcBidSimulationPointList) GetPoints() []*CpcBidSimulationPoint {
+	if m != nil {
+		return m.Points
+	}
+	return nil
+}
+
+// A container for simulation points for simulations of type CPV_BID.
+type CpvBidSimulationPointList struct {
+	// Projected metrics for a series of CPV bid amounts.
+	Points               []*CpvBidSimulationPoint `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *CpvBidSimulationPointList) Reset()         { *m = CpvBidSimulationPointList{} }
+func (m *CpvBidSimulationPointList) String() string { return proto.CompactTextString(m) }
+func (*CpvBidSimulationPointList) ProtoMessage()    {}
+func (*CpvBidSimulationPointList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{2}
+}
+
+func (m *CpvBidSimulationPointList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CpvBidSimulationPointList.Unmarshal(m, b)
+}
+func (m *CpvBidSimulationPointList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CpvBidSimulationPointList.Marshal(b, m, deterministic)
+}
+func (m *CpvBidSimulationPointList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CpvBidSimulationPointList.Merge(m, src)
+}
+func (m *CpvBidSimulationPointList) XXX_Size() int {
+	return xxx_messageInfo_CpvBidSimulationPointList.Size(m)
+}
+func (m *CpvBidSimulationPointList) XXX_DiscardUnknown() {
+	xxx_messageInfo_CpvBidSimulationPointList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CpvBidSimulationPointList proto.InternalMessageInfo
+
+func (m *CpvBidSimulationPointList) GetPoints() []*CpvBidSimulationPoint {
+	if m != nil {
+		return m.Points
+	}
+	return nil
+}
+
+// A container for simulation points for simulations of type TARGET_CPA.
+type TargetCpaSimulationPointList struct {
+	// Projected metrics for a series of target CPA amounts.
+	Points               []*TargetCpaSimulationPoint `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *TargetCpaSimulationPointList) Reset()         { *m = TargetCpaSimulationPointList{} }
+func (m *TargetCpaSimulationPointList) String() string { return proto.CompactTextString(m) }
+func (*TargetCpaSimulationPointList) ProtoMessage()    {}
+func (*TargetCpaSimulationPointList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{3}
+}
+
+func (m *TargetCpaSimulationPointList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpaSimulationPointList.Unmarshal(m, b)
+}
+func (m *TargetCpaSimulationPointList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpaSimulationPointList.Marshal(b, m, deterministic)
+}
+func (m *TargetCpaSimulationPointList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpaSimulationPointList.Merge(m, src)
+}
+func (m *TargetCpaSimulationPointList) XXX_Size() int {
+	return xxx_messageInfo_TargetCpaSimulationPointList.Size(m)
+}
+func (m *TargetCpaSimulationPointList) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpaSimulationPointList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpaSimulationPointList proto.InternalMessageInfo
+
+func (m *TargetCpaSimulationPointList) GetPoints() []*TargetCpaSimulationPoint {
+	if m != nil {
+		return m.Points
+	}
+	return nil
+}
+
+// Projected metrics for a specific bid modifier amount.
+type BidModifierSimulationPoint struct {
+	// The simulated bid modifier upon which projected metrics are based.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// Projected number of biddable conversions.
+	// Only search advertising channel type supports this field.
+	BiddableConversions *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=biddable_conversions,json=biddableConversions,proto3" json:"biddable_conversions,omitempty"`
+	// Projected total value of biddable conversions.
+	// Only search advertising channel type supports this field.
+	BiddableConversionsValue *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=biddable_conversions_value,json=biddableConversionsValue,proto3" json:"biddable_conversions_value,omitempty"`
+	// Projected number of clicks.
+	Clicks *wrappers.Int64Value `protobuf:"bytes,4,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Projected cost in micros.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,5,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Projected number of impressions.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,6,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Projected number of top slot impressions.
+	// Only search advertising channel type supports this field.
+	TopSlotImpressions *wrappers.Int64Value `protobuf:"bytes,7,opt,name=top_slot_impressions,json=topSlotImpressions,proto3" json:"top_slot_impressions,omitempty"`
+	// Projected number of biddable conversions for the parent resource.
+	// Only search advertising channel type supports this field.
+	ParentBiddableConversions *wrappers.DoubleValue `protobuf:"bytes,8,opt,name=parent_biddable_conversions,json=parentBiddableConversions,proto3" json:"parent_biddable_conversions,omitempty"`
+	// Projected total value of biddable conversions for the parent resource.
+	// Only search advertising channel type supports this field.
+	ParentBiddableConversionsValue *wrappers.DoubleValue `protobuf:"bytes,9,opt,name=parent_biddable_conversions_value,json=parentBiddableConversionsValue,proto3" json:"parent_biddable_conversions_value,omitempty"`
+	// Projected number of clicks for the parent resource.
+	ParentClicks *wrappers.Int64Value `protobuf:"bytes,10,opt,name=parent_clicks,json=parentClicks,proto3" json:"parent_clicks,omitempty"`
+	// Projected cost in micros for the parent resource.
+	ParentCostMicros *wrappers.Int64Value `protobuf:"bytes,11,opt,name=parent_cost_micros,json=parentCostMicros,proto3" json:"parent_cost_micros,omitempty"`
+	// Projected number of impressions for the parent resource.
+	ParentImpressions *wrappers.Int64Value `protobuf:"bytes,12,opt,name=parent_impressions,json=parentImpressions,proto3" json:"parent_impressions,omitempty"`
+	// Projected number of top slot impressions for the parent resource.
+	// Only search advertising channel type supports this field.
+	ParentTopSlotImpressions *wrappers.Int64Value `protobuf:"bytes,13,opt,name=parent_top_slot_impressions,json=parentTopSlotImpressions,proto3" json:"parent_top_slot_impressions,omitempty"`
+	// Projected minimum daily budget that must be available to the parent
+	// resource to realize this simulation.
+	ParentRequiredBudgetMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=parent_required_budget_micros,json=parentRequiredBudgetMicros,proto3" json:"parent_required_budget_micros,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}             `json:"-"`
+	XXX_unrecognized           []byte               `json:"-"`
+	XXX_sizecache              int32                `json:"-"`
+}
+
+func (m *BidModifierSimulationPoint) Reset()         { *m = BidModifierSimulationPoint{} }
+func (m *BidModifierSimulationPoint) String() string { return proto.CompactTextString(m) }
+func (*BidModifierSimulationPoint) ProtoMessage()    {}
+func (*BidModifierSimulationPoint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{4}
+}
+
+func (m *BidModifierSimulationPoint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BidModifierSimulationPoint.Unmarshal(m, b)
+}
+func (m *BidModifierSimulationPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BidModifierSimulationPoint.Marshal(b, m, deterministic)
+}
+func (m *BidModifierSimulationPoint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BidModifierSimulationPoint.Merge(m, src)
+}
+func (m *BidModifierSimulationPoint) XXX_Size() int {
+	return xxx_messageInfo_BidModifierSimulationPoint.Size(m)
+}
+func (m *BidModifierSimulationPoint) XXX_DiscardUnknown() {
+	xxx_messageInfo_BidModifierSimulationPoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BidModifierSimulationPoint proto.InternalMessageInfo
+
+func (m *BidModifierSimulationPoint) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetBiddableConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetBiddableConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversionsValue
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetTopSlotImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.TopSlotImpressions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentBiddableConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ParentBiddableConversions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentBiddableConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ParentBiddableConversionsValue
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentClicks
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentCostMicros
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentImpressions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentTopSlotImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentTopSlotImpressions
+	}
+	return nil
+}
+
+func (m *BidModifierSimulationPoint) GetParentRequiredBudgetMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentRequiredBudgetMicros
+	}
+	return nil
+}
+
+// Projected metrics for a specific CPC bid amount.
+type CpcBidSimulationPoint struct {
+	// The simulated CPC bid upon which projected metrics are based.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// Projected number of biddable conversions.
+	BiddableConversions *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=biddable_conversions,json=biddableConversions,proto3" json:"biddable_conversions,omitempty"`
+	// Projected total value of biddable conversions.
+	BiddableConversionsValue *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=biddable_conversions_value,json=biddableConversionsValue,proto3" json:"biddable_conversions_value,omitempty"`
+	// Projected number of clicks.
+	Clicks *wrappers.Int64Value `protobuf:"bytes,4,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Projected cost in micros.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,5,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Projected number of impressions.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,6,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Projected number of top slot impressions.
+	// Only search advertising channel type supports this field.
+	TopSlotImpressions   *wrappers.Int64Value `protobuf:"bytes,7,opt,name=top_slot_impressions,json=topSlotImpressions,proto3" json:"top_slot_impressions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CpcBidSimulationPoint) Reset()         { *m = CpcBidSimulationPoint{} }
+func (m *CpcBidSimulationPoint) String() string { return proto.CompactTextString(m) }
+func (*CpcBidSimulationPoint) ProtoMessage()    {}
+func (*CpcBidSimulationPoint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{5}
+}
+
+func (m *CpcBidSimulationPoint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CpcBidSimulationPoint.Unmarshal(m, b)
+}
+func (m *CpcBidSimulationPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CpcBidSimulationPoint.Marshal(b, m, deterministic)
+}
+func (m *CpcBidSimulationPoint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CpcBidSimulationPoint.Merge(m, src)
+}
+func (m *CpcBidSimulationPoint) XXX_Size() int {
+	return xxx_messageInfo_CpcBidSimulationPoint.Size(m)
+}
+func (m *CpcBidSimulationPoint) XXX_DiscardUnknown() {
+	xxx_messageInfo_CpcBidSimulationPoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CpcBidSimulationPoint proto.InternalMessageInfo
+
+func (m *CpcBidSimulationPoint) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetBiddableConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversions
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetBiddableConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversionsValue
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *CpcBidSimulationPoint) GetTopSlotImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.TopSlotImpressions
+	}
+	return nil
+}
+
+// Projected metrics for a specific CPV bid amount.
+type CpvBidSimulationPoint struct {
+	// The simulated CPV bid upon which projected metrics are based.
+	CpvBidMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cpv_bid_micros,json=cpvBidMicros,proto3" json:"cpv_bid_micros,omitempty"`
+	// Projected cost in micros.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Projected number of impressions.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,3,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Projected number of views.
+	Views                *wrappers.Int64Value `protobuf:"bytes,4,opt,name=views,proto3" json:"views,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CpvBidSimulationPoint) Reset()         { *m = CpvBidSimulationPoint{} }
+func (m *CpvBidSimulationPoint) String() string { return proto.CompactTextString(m) }
+func (*CpvBidSimulationPoint) ProtoMessage()    {}
+func (*CpvBidSimulationPoint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{6}
+}
+
+func (m *CpvBidSimulationPoint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CpvBidSimulationPoint.Unmarshal(m, b)
+}
+func (m *CpvBidSimulationPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CpvBidSimulationPoint.Marshal(b, m, deterministic)
+}
+func (m *CpvBidSimulationPoint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CpvBidSimulationPoint.Merge(m, src)
+}
+func (m *CpvBidSimulationPoint) XXX_Size() int {
+	return xxx_messageInfo_CpvBidSimulationPoint.Size(m)
+}
+func (m *CpvBidSimulationPoint) XXX_DiscardUnknown() {
+	xxx_messageInfo_CpvBidSimulationPoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CpvBidSimulationPoint proto.InternalMessageInfo
+
+func (m *CpvBidSimulationPoint) GetCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpvBidMicros
+	}
+	return nil
+}
+
+func (m *CpvBidSimulationPoint) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *CpvBidSimulationPoint) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *CpvBidSimulationPoint) GetViews() *wrappers.Int64Value {
+	if m != nil {
+		return m.Views
+	}
+	return nil
+}
+
+// Projected metrics for a specific target CPA amount.
+type TargetCpaSimulationPoint struct {
+	// The simulated target CPA upon which projected metrics are based.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// Projected number of biddable conversions.
+	BiddableConversions *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=biddable_conversions,json=biddableConversions,proto3" json:"biddable_conversions,omitempty"`
+	// Projected total value of biddable conversions.
+	BiddableConversionsValue *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=biddable_conversions_value,json=biddableConversionsValue,proto3" json:"biddable_conversions_value,omitempty"`
+	// Projected number of clicks.
+	Clicks *wrappers.Int64Value `protobuf:"bytes,4,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Projected cost in micros.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,5,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Projected number of impressions.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,6,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Projected number of top slot impressions.
+	// Only search advertising channel type supports this field.
+	TopSlotImpressions   *wrappers.Int64Value `protobuf:"bytes,7,opt,name=top_slot_impressions,json=topSlotImpressions,proto3" json:"top_slot_impressions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetCpaSimulationPoint) Reset()         { *m = TargetCpaSimulationPoint{} }
+func (m *TargetCpaSimulationPoint) String() string { return proto.CompactTextString(m) }
+func (*TargetCpaSimulationPoint) ProtoMessage()    {}
+func (*TargetCpaSimulationPoint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ab119bcaf279127, []int{7}
+}
+
+func (m *TargetCpaSimulationPoint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpaSimulationPoint.Unmarshal(m, b)
+}
+func (m *TargetCpaSimulationPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpaSimulationPoint.Marshal(b, m, deterministic)
+}
+func (m *TargetCpaSimulationPoint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpaSimulationPoint.Merge(m, src)
+}
+func (m *TargetCpaSimulationPoint) XXX_Size() int {
+	return xxx_messageInfo_TargetCpaSimulationPoint.Size(m)
+}
+func (m *TargetCpaSimulationPoint) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpaSimulationPoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpaSimulationPoint proto.InternalMessageInfo
+
+func (m *TargetCpaSimulationPoint) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetBiddableConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversions
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetBiddableConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BiddableConversionsValue
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *TargetCpaSimulationPoint) GetTopSlotImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.TopSlotImpressions
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*BidModifierSimulationPointList)(nil), "google.ads.googleads.v3.common.BidModifierSimulationPointList")
+	proto.RegisterType((*CpcBidSimulationPointList)(nil), "google.ads.googleads.v3.common.CpcBidSimulationPointList")
+	proto.RegisterType((*CpvBidSimulationPointList)(nil), "google.ads.googleads.v3.common.CpvBidSimulationPointList")
+	proto.RegisterType((*TargetCpaSimulationPointList)(nil), "google.ads.googleads.v3.common.TargetCpaSimulationPointList")
+	proto.RegisterType((*BidModifierSimulationPoint)(nil), "google.ads.googleads.v3.common.BidModifierSimulationPoint")
+	proto.RegisterType((*CpcBidSimulationPoint)(nil), "google.ads.googleads.v3.common.CpcBidSimulationPoint")
+	proto.RegisterType((*CpvBidSimulationPoint)(nil), "google.ads.googleads.v3.common.CpvBidSimulationPoint")
+	proto.RegisterType((*TargetCpaSimulationPoint)(nil), "google.ads.googleads.v3.common.TargetCpaSimulationPoint")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/simulation.proto", fileDescriptor_5ab119bcaf279127)
+}
+
+var fileDescriptor_5ab119bcaf279127 = []byte{
+	// 741 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x97, 0xcd, 0x6e, 0xd3, 0x4e,
+	0x14, 0xc5, 0x95, 0xa4, 0xcd, 0xbf, 0xff, 0x49, 0x3f, 0xa8, 0x29, 0x92, 0x9b, 0x96, 0xa8, 0x64,
+	0xd5, 0x95, 0x2d, 0x6a, 0x40, 0xc8, 0x80, 0x20, 0x49, 0xa5, 0xaa, 0x88, 0x88, 0x2a, 0xad, 0xb2,
+	0xa8, 0x22, 0x2c, 0x7f, 0x4c, 0xad, 0x01, 0xdb, 0x33, 0x78, 0x26, 0xee, 0x2b, 0x20, 0x76, 0xbc,
+	0x02, 0x4b, 0x1e, 0x85, 0x17, 0x41, 0xea, 0x53, 0x20, 0x7b, 0xc6, 0x8e, 0x69, 0xed, 0x3a, 0x15,
+	0x6c, 0x2a, 0x75, 0x95, 0x49, 0xe6, 0x9e, 0xdf, 0x71, 0xee, 0xb9, 0x9e, 0xc4, 0x40, 0x75, 0x31,
+	0x76, 0x3d, 0xa8, 0x9a, 0x0e, 0x15, 0xcb, 0x78, 0x15, 0x69, 0xaa, 0x8d, 0x7d, 0x1f, 0x07, 0x2a,
+	0x45, 0xfe, 0xd4, 0x33, 0x19, 0xc2, 0x81, 0x42, 0x42, 0xcc, 0xb0, 0xd4, 0xe1, 0x55, 0x8a, 0xe9,
+	0x50, 0x25, 0x13, 0x28, 0x91, 0xa6, 0x70, 0x41, 0x5b, 0xec, 0xab, 0x49, 0xb5, 0x35, 0x3d, 0x53,
+	0xcf, 0x43, 0x93, 0x10, 0x18, 0x52, 0xae, 0x6f, 0x6f, 0xa7, 0x86, 0x04, 0xa9, 0x66, 0x10, 0x60,
+	0x96, 0xc0, 0xc5, 0x6e, 0x97, 0x81, 0x4e, 0x1f, 0x39, 0x43, 0xec, 0xa0, 0x33, 0x04, 0xc3, 0xe3,
+	0xcc, 0xfc, 0x08, 0xa3, 0x80, 0xbd, 0x43, 0x94, 0x49, 0x23, 0xd0, 0x24, 0xf1, 0x1b, 0x2a, 0xd7,
+	0x76, 0x1a, 0xbb, 0xad, 0x3d, 0x5d, 0xb9, 0xfe, 0x82, 0x94, 0x72, 0xde, 0x48, 0x90, 0xba, 0x1f,
+	0xc1, 0xe6, 0x80, 0xd8, 0x7d, 0xe4, 0x14, 0x19, 0x0e, 0x2f, 0x19, 0x3e, 0xad, 0x32, 0x2c, 0x44,
+	0xfd, 0xe9, 0x15, 0xfd, 0x3b, 0xaf, 0xe8, 0x1a, 0x2f, 0x02, 0xb6, 0x4f, 0xcc, 0xd0, 0x85, 0x6c,
+	0x40, 0xcc, 0x22, 0xbb, 0xa3, 0x4b, 0x76, 0xcf, 0xab, 0xec, 0xca, 0x68, 0x99, 0xe3, 0xaf, 0x25,
+	0xd0, 0x2e, 0x6f, 0xb8, 0xf4, 0x1a, 0x2c, 0x5b, 0xc8, 0x31, 0x7c, 0xb1, 0x2d, 0xd7, 0x76, 0x6a,
+	0xbb, 0xad, 0xbd, 0xed, 0xd4, 0x36, 0x9d, 0x19, 0x65, 0x1f, 0x4f, 0x2d, 0x0f, 0x8e, 0x4d, 0x6f,
+	0x0a, 0x47, 0x2d, 0x6b, 0xc6, 0x93, 0xde, 0x83, 0x0d, 0x0b, 0x39, 0x8e, 0x69, 0x79, 0xd0, 0xb0,
+	0x71, 0x10, 0xc1, 0x90, 0xc6, 0xd3, 0x23, 0xd7, 0xe7, 0x00, 0xdd, 0x4f, 0x95, 0x83, 0x99, 0x50,
+	0x3a, 0x05, 0xed, 0x22, 0xa0, 0x11, 0xc5, 0x12, 0xb9, 0x31, 0x07, 0x56, 0x2e, 0xc0, 0x26, 0x3b,
+	0x92, 0x06, 0x9a, 0xb6, 0x87, 0xec, 0x4f, 0x54, 0x5e, 0x48, 0x38, 0x5b, 0x57, 0x38, 0x87, 0x01,
+	0x7b, 0xf6, 0x84, 0x63, 0x44, 0xa9, 0xf4, 0x12, 0xb4, 0x6c, 0x4c, 0x99, 0xe1, 0x23, 0x3b, 0xc4,
+	0x54, 0x5e, 0xac, 0x56, 0x82, 0xb8, 0x7e, 0x98, 0x94, 0x4b, 0xaf, 0x40, 0x0b, 0xf9, 0x24, 0x84,
+	0x94, 0xb7, 0xa5, 0x59, 0xad, 0xce, 0xd7, 0x4b, 0x43, 0xb0, 0xc1, 0x30, 0x31, 0xa8, 0x87, 0x99,
+	0x91, 0xe7, 0xfc, 0x57, 0xcd, 0x91, 0x18, 0x26, 0xc7, 0x1e, 0x66, 0x87, 0x39, 0xdc, 0x04, 0x6c,
+	0x11, 0x33, 0x84, 0x01, 0x33, 0x0a, 0x43, 0x5b, 0x9a, 0xa3, 0xbb, 0x9b, 0x1c, 0xd0, 0x2f, 0x88,
+	0xce, 0x05, 0x8f, 0xae, 0xa1, 0x8b, 0x04, 0xff, 0x9f, 0xc3, 0xa3, 0x53, 0xea, 0xc1, 0x73, 0x7c,
+	0x03, 0x56, 0x84, 0x91, 0x88, 0x13, 0x54, 0xb7, 0x63, 0x99, 0x2b, 0x06, 0x3c, 0xd4, 0x43, 0x20,
+	0xa5, 0x84, 0x5c, 0xb6, 0xad, 0x6a, 0xcc, 0x3d, 0x81, 0x99, 0x25, 0xfc, 0x36, 0x43, 0xe5, 0x03,
+	0x5a, 0xae, 0x46, 0xad, 0x73, 0x59, 0x3e, 0x9f, 0xd3, 0x2c, 0x9f, 0xc2, 0xd4, 0x57, 0xaa, 0xa1,
+	0x32, 0xd7, 0x9f, 0x5c, 0xcd, 0xfe, 0x03, 0x78, 0x28, 0xd8, 0x21, 0xfc, 0x3c, 0x45, 0x21, 0x74,
+	0x0c, 0x6b, 0xea, 0xb8, 0x30, 0xfb, 0xf6, 0xab, 0xd5, 0xf4, 0x36, 0x27, 0x8c, 0x04, 0xa0, 0x9f,
+	0xe8, 0x79, 0x1f, 0xba, 0x5f, 0x16, 0xc0, 0x83, 0xc2, 0x93, 0x56, 0xea, 0x81, 0x55, 0x9b, 0xd8,
+	0x46, 0x72, 0xd0, 0x70, 0xab, 0xda, 0x1c, 0x79, 0xd9, 0x09, 0x4b, 0x34, 0xf9, 0xee, 0x98, 0xb9,
+	0x45, 0xc7, 0x4c, 0xf7, 0x6b, 0x3d, 0x1e, 0x85, 0xa8, 0x6c, 0x14, 0xa2, 0x9b, 0x8f, 0x42, 0x34,
+	0x1b, 0x85, 0x4b, 0x8d, 0xaa, 0xff, 0x55, 0xa3, 0x1a, 0x37, 0x6c, 0xd4, 0x63, 0xb0, 0x18, 0x21,
+	0x78, 0x3e, 0x57, 0xb2, 0xbc, 0xb2, 0xfb, 0x6d, 0x01, 0xc8, 0x65, 0x3f, 0xd3, 0xd2, 0x01, 0x58,
+	0x67, 0xc9, 0x9e, 0x61, 0x13, 0xf3, 0x06, 0x2d, 0x59, 0x63, 0x29, 0xf1, 0xee, 0x06, 0xb9, 0x7d,
+	0x37, 0x48, 0xff, 0xa2, 0x06, 0xba, 0x36, 0xf6, 0x2b, 0xfe, 0xdd, 0xf5, 0xd7, 0x72, 0xe3, 0x12,
+	0x93, 0x8f, 0x6a, 0xa7, 0xfb, 0x42, 0xe2, 0x62, 0xcf, 0x0c, 0x5c, 0x05, 0x87, 0xae, 0xea, 0xc2,
+	0x20, 0xf1, 0x4d, 0x1f, 0x17, 0x08, 0xa2, 0x65, 0x4f, 0x0f, 0x2f, 0xf8, 0xcb, 0xf7, 0x7a, 0xe3,
+	0xa0, 0xd7, 0xfb, 0x51, 0xef, 0x1c, 0x70, 0x58, 0xcf, 0xa1, 0x0a, 0x5f, 0xc6, 0xab, 0xb1, 0xa6,
+	0x0c, 0x92, 0xb2, 0x9f, 0x69, 0xc1, 0xa4, 0xe7, 0xd0, 0x49, 0x56, 0x30, 0x19, 0x6b, 0x13, 0x5e,
+	0x70, 0x51, 0xef, 0xf2, 0x4f, 0x75, 0xbd, 0xe7, 0x50, 0x5d, 0xcf, 0x4a, 0x74, 0x7d, 0xac, 0xe9,
+	0x3a, 0x2f, 0xb2, 0x9a, 0xc9, 0xd5, 0x69, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x53, 0x82, 0xf1,
+	0xae, 0xda, 0x0c, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/tag_snippet.pb.go b/googleapis/ads/googleads/v3/common/tag_snippet.pb.go
new file mode 100644
index 0000000..b566729
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/tag_snippet.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/tag_snippet.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The site tag and event snippet pair for a TrackingCodeType.
+type TagSnippet struct {
+	// The type of the generated tag snippets for tracking conversions.
+	Type enums.TrackingCodeTypeEnum_TrackingCodeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.TrackingCodeTypeEnum_TrackingCodeType" json:"type,omitempty"`
+	// The format of the web page where the tracking tag and snippet will be
+	// installed, e.g. HTML.
+	PageFormat enums.TrackingCodePageFormatEnum_TrackingCodePageFormat `protobuf:"varint,2,opt,name=page_format,json=pageFormat,proto3,enum=google.ads.googleads.v3.enums.TrackingCodePageFormatEnum_TrackingCodePageFormat" json:"page_format,omitempty"`
+	// The site tag that adds visitors to your basic remarketing lists and sets
+	// new cookies on your domain.
+	GlobalSiteTag *wrappers.StringValue `protobuf:"bytes,3,opt,name=global_site_tag,json=globalSiteTag,proto3" json:"global_site_tag,omitempty"`
+	// The event snippet that works with the site tag to track actions that
+	// should be counted as conversions.
+	EventSnippet         *wrappers.StringValue `protobuf:"bytes,4,opt,name=event_snippet,json=eventSnippet,proto3" json:"event_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TagSnippet) Reset()         { *m = TagSnippet{} }
+func (m *TagSnippet) String() string { return proto.CompactTextString(m) }
+func (*TagSnippet) ProtoMessage()    {}
+func (*TagSnippet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3d82c3f30f27f01d, []int{0}
+}
+
+func (m *TagSnippet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TagSnippet.Unmarshal(m, b)
+}
+func (m *TagSnippet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TagSnippet.Marshal(b, m, deterministic)
+}
+func (m *TagSnippet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TagSnippet.Merge(m, src)
+}
+func (m *TagSnippet) XXX_Size() int {
+	return xxx_messageInfo_TagSnippet.Size(m)
+}
+func (m *TagSnippet) XXX_DiscardUnknown() {
+	xxx_messageInfo_TagSnippet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TagSnippet proto.InternalMessageInfo
+
+func (m *TagSnippet) GetType() enums.TrackingCodeTypeEnum_TrackingCodeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.TrackingCodeTypeEnum_UNSPECIFIED
+}
+
+func (m *TagSnippet) GetPageFormat() enums.TrackingCodePageFormatEnum_TrackingCodePageFormat {
+	if m != nil {
+		return m.PageFormat
+	}
+	return enums.TrackingCodePageFormatEnum_UNSPECIFIED
+}
+
+func (m *TagSnippet) GetGlobalSiteTag() *wrappers.StringValue {
+	if m != nil {
+		return m.GlobalSiteTag
+	}
+	return nil
+}
+
+func (m *TagSnippet) GetEventSnippet() *wrappers.StringValue {
+	if m != nil {
+		return m.EventSnippet
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TagSnippet)(nil), "google.ads.googleads.v3.common.TagSnippet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/tag_snippet.proto", fileDescriptor_3d82c3f30f27f01d)
+}
+
+var fileDescriptor_3d82c3f30f27f01d = []byte{
+	// 420 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x4f, 0x6b, 0xdb, 0x30,
+	0x14, 0xc7, 0x6e, 0xd9, 0x41, 0x5d, 0x57, 0xf0, 0x29, 0x94, 0x52, 0x4a, 0x4e, 0x3d, 0x49, 0xa3,
+	0x86, 0x1d, 0x34, 0x76, 0x70, 0x9b, 0xad, 0xd7, 0x90, 0x84, 0x30, 0x46, 0xc0, 0xbc, 0xc4, 0xaf,
+	0x42, 0xcc, 0x96, 0x34, 0x4b, 0xc9, 0xe8, 0xd7, 0xd9, 0x71, 0x1f, 0x65, 0x1f, 0x63, 0xc7, 0x7e,
+	0x8a, 0x61, 0x49, 0x76, 0x07, 0x25, 0x63, 0x39, 0xf9, 0x67, 0xbd, 0xdf, 0x9f, 0xf7, 0xa4, 0x47,
+	0xde, 0x0a, 0xad, 0x45, 0x8d, 0x0c, 0x2a, 0xcb, 0x02, 0xec, 0xd0, 0x2e, 0x67, 0x1b, 0xdd, 0x34,
+	0x5a, 0x31, 0x07, 0xa2, 0xb4, 0x4a, 0x1a, 0x83, 0x8e, 0x9a, 0x56, 0x3b, 0x9d, 0x5d, 0x06, 0x1a,
+	0x85, 0xca, 0xd2, 0x41, 0x41, 0x77, 0x39, 0x0d, 0x8a, 0xf3, 0x0f, 0xfb, 0x1c, 0x51, 0x6d, 0x1b,
+	0xcb, 0x5c, 0x0b, 0x9b, 0xaf, 0x52, 0x89, 0x72, 0xa3, 0x2b, 0x2c, 0x0d, 0x08, 0x2c, 0x1f, 0x74,
+	0xdb, 0x40, 0xb4, 0x3f, 0x7f, 0x77, 0x88, 0xdc, 0x3d, 0x1a, 0x8c, 0xba, 0xd8, 0x16, 0xf3, 0x7f,
+	0xeb, 0xed, 0x03, 0xfb, 0xde, 0x82, 0x31, 0xd8, 0xda, 0x58, 0xbf, 0xe8, 0x7d, 0x8d, 0x64, 0xa0,
+	0x94, 0x76, 0xe0, 0xa4, 0x56, 0xb1, 0x3a, 0xfe, 0x9d, 0x12, 0xb2, 0x00, 0x31, 0x0f, 0x93, 0x66,
+	0x9f, 0xc9, 0x71, 0x67, 0x3d, 0x4a, 0xae, 0x92, 0xeb, 0x37, 0x37, 0x13, 0xba, 0x6f, 0x64, 0xdf,
+	0x13, 0x5d, 0xc4, 0x9e, 0xee, 0x74, 0x85, 0x8b, 0x47, 0x83, 0x1f, 0xd5, 0xb6, 0x79, 0x71, 0x38,
+	0xf3, 0x8e, 0xd9, 0x37, 0x72, 0xf2, 0xd7, 0xcc, 0xa3, 0xd4, 0x07, 0x4c, 0x0f, 0x08, 0x98, 0x82,
+	0xc0, 0x4f, 0x5e, 0xfc, 0x22, 0xe6, 0xb9, 0x34, 0x23, 0x66, 0xc0, 0xd9, 0x84, 0x9c, 0x89, 0x5a,
+	0xaf, 0xa1, 0x2e, 0xad, 0x74, 0x58, 0x3a, 0x10, 0xa3, 0xa3, 0xab, 0xe4, 0xfa, 0xe4, 0xe6, 0xa2,
+	0x8f, 0xed, 0xef, 0x8c, 0xce, 0x5d, 0x2b, 0x95, 0x58, 0x42, 0xbd, 0xc5, 0xd9, 0x69, 0x10, 0xcd,
+	0xa5, 0xc3, 0x05, 0x88, 0xac, 0x20, 0xa7, 0xb8, 0x43, 0xe5, 0xfa, 0x6d, 0x18, 0x1d, 0xff, 0x87,
+	0xc7, 0x6b, 0x2f, 0x89, 0xb7, 0x7a, 0xfb, 0x94, 0x90, 0xf1, 0x46, 0x37, 0xf4, 0xdf, 0x0b, 0x74,
+	0x7b, 0xf6, 0xfc, 0x10, 0xd3, 0xce, 0x74, 0x9a, 0x7c, 0x99, 0x44, 0x89, 0xd0, 0x35, 0x28, 0x41,
+	0x75, 0x2b, 0x98, 0x40, 0xe5, 0x23, 0xfb, 0x25, 0x31, 0xd2, 0xee, 0x5b, 0xe2, 0xf7, 0xe1, 0xf3,
+	0x23, 0x3d, 0xba, 0x2f, 0x8a, 0x9f, 0xe9, 0xe5, 0x7d, 0x30, 0x2b, 0x2a, 0x4b, 0x03, 0xec, 0xd0,
+	0x32, 0xa7, 0x77, 0x9e, 0xf6, 0xab, 0x27, 0xac, 0x8a, 0xca, 0xae, 0x06, 0xc2, 0x6a, 0x99, 0xaf,
+	0x02, 0xe1, 0x29, 0x1d, 0x87, 0x53, 0xce, 0x8b, 0xca, 0x72, 0x3e, 0x50, 0x38, 0x5f, 0xe6, 0x9c,
+	0x07, 0xd2, 0xfa, 0x95, 0xef, 0x2e, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x72, 0x4c, 0x99, 0x8f,
+	0x61, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/targeting_setting.pb.go b/googleapis/ads/googleads/v3/common/targeting_setting.pb.go
new file mode 100644
index 0000000..a38b90b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/targeting_setting.pb.go
@@ -0,0 +1,271 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/targeting_setting.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The operator.
+type TargetRestrictionOperation_Operator int32
+
+const (
+	// Unspecified.
+	TargetRestrictionOperation_UNSPECIFIED TargetRestrictionOperation_Operator = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetRestrictionOperation_UNKNOWN TargetRestrictionOperation_Operator = 1
+	// Add the restriction to the existing restrictions.
+	TargetRestrictionOperation_ADD TargetRestrictionOperation_Operator = 2
+	// Remove the restriction from the existing restrictions.
+	TargetRestrictionOperation_REMOVE TargetRestrictionOperation_Operator = 3
+)
+
+var TargetRestrictionOperation_Operator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADD",
+	3: "REMOVE",
+}
+
+var TargetRestrictionOperation_Operator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADD":         2,
+	"REMOVE":      3,
+}
+
+func (x TargetRestrictionOperation_Operator) String() string {
+	return proto.EnumName(TargetRestrictionOperation_Operator_name, int32(x))
+}
+
+func (TargetRestrictionOperation_Operator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa7d412c2ce6d703, []int{2, 0}
+}
+
+// Settings for the targeting-related features, at the campaign and ad group
+// levels. For more details about the targeting setting, visit
+// https://support.google.com/google-ads/answer/7365594
+type TargetingSetting struct {
+	// The per-targeting-dimension setting to restrict the reach of your campaign
+	// or ad group.
+	TargetRestrictions []*TargetRestriction `protobuf:"bytes,1,rep,name=target_restrictions,json=targetRestrictions,proto3" json:"target_restrictions,omitempty"`
+	// The list of operations changing the target restrictions.
+	//
+	// Adding a target restriction with a targeting dimension that already exists
+	// causes the existing target restriction to be replaced with the new value.
+	TargetRestrictionOperations []*TargetRestrictionOperation `protobuf:"bytes,2,rep,name=target_restriction_operations,json=targetRestrictionOperations,proto3" json:"target_restriction_operations,omitempty"`
+	XXX_NoUnkeyedLiteral        struct{}                      `json:"-"`
+	XXX_unrecognized            []byte                        `json:"-"`
+	XXX_sizecache               int32                         `json:"-"`
+}
+
+func (m *TargetingSetting) Reset()         { *m = TargetingSetting{} }
+func (m *TargetingSetting) String() string { return proto.CompactTextString(m) }
+func (*TargetingSetting) ProtoMessage()    {}
+func (*TargetingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa7d412c2ce6d703, []int{0}
+}
+
+func (m *TargetingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetingSetting.Unmarshal(m, b)
+}
+func (m *TargetingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetingSetting.Marshal(b, m, deterministic)
+}
+func (m *TargetingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetingSetting.Merge(m, src)
+}
+func (m *TargetingSetting) XXX_Size() int {
+	return xxx_messageInfo_TargetingSetting.Size(m)
+}
+func (m *TargetingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetingSetting proto.InternalMessageInfo
+
+func (m *TargetingSetting) GetTargetRestrictions() []*TargetRestriction {
+	if m != nil {
+		return m.TargetRestrictions
+	}
+	return nil
+}
+
+func (m *TargetingSetting) GetTargetRestrictionOperations() []*TargetRestrictionOperation {
+	if m != nil {
+		return m.TargetRestrictionOperations
+	}
+	return nil
+}
+
+// The list of per-targeting-dimension targeting settings.
+type TargetRestriction struct {
+	// The targeting dimension that these settings apply to.
+	TargetingDimension enums.TargetingDimensionEnum_TargetingDimension `protobuf:"varint,1,opt,name=targeting_dimension,json=targetingDimension,proto3,enum=google.ads.googleads.v3.enums.TargetingDimensionEnum_TargetingDimension" json:"targeting_dimension,omitempty"`
+	// Indicates whether to restrict your ads to show only for the criteria you
+	// have selected for this targeting_dimension, or to target all values for
+	// this targeting_dimension and show ads based on your targeting in other
+	// TargetingDimensions. A value of `true` means that these criteria will only
+	// apply bid modifiers, and not affect targeting. A value of `false` means
+	// that these criteria will restrict targeting as well as applying bid
+	// modifiers.
+	BidOnly              *wrappers.BoolValue `protobuf:"bytes,2,opt,name=bid_only,json=bidOnly,proto3" json:"bid_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *TargetRestriction) Reset()         { *m = TargetRestriction{} }
+func (m *TargetRestriction) String() string { return proto.CompactTextString(m) }
+func (*TargetRestriction) ProtoMessage()    {}
+func (*TargetRestriction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa7d412c2ce6d703, []int{1}
+}
+
+func (m *TargetRestriction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetRestriction.Unmarshal(m, b)
+}
+func (m *TargetRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetRestriction.Marshal(b, m, deterministic)
+}
+func (m *TargetRestriction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetRestriction.Merge(m, src)
+}
+func (m *TargetRestriction) XXX_Size() int {
+	return xxx_messageInfo_TargetRestriction.Size(m)
+}
+func (m *TargetRestriction) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetRestriction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetRestriction proto.InternalMessageInfo
+
+func (m *TargetRestriction) GetTargetingDimension() enums.TargetingDimensionEnum_TargetingDimension {
+	if m != nil {
+		return m.TargetingDimension
+	}
+	return enums.TargetingDimensionEnum_UNSPECIFIED
+}
+
+func (m *TargetRestriction) GetBidOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.BidOnly
+	}
+	return nil
+}
+
+// Operation to be performed on a target restriction list in a mutate.
+type TargetRestrictionOperation struct {
+	// Type of list operation to perform.
+	Operator TargetRestrictionOperation_Operator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.common.TargetRestrictionOperation_Operator" json:"operator,omitempty"`
+	// The target restriction being added to or removed from the list.
+	Value                *TargetRestriction `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *TargetRestrictionOperation) Reset()         { *m = TargetRestrictionOperation{} }
+func (m *TargetRestrictionOperation) String() string { return proto.CompactTextString(m) }
+func (*TargetRestrictionOperation) ProtoMessage()    {}
+func (*TargetRestrictionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa7d412c2ce6d703, []int{2}
+}
+
+func (m *TargetRestrictionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetRestrictionOperation.Unmarshal(m, b)
+}
+func (m *TargetRestrictionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetRestrictionOperation.Marshal(b, m, deterministic)
+}
+func (m *TargetRestrictionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetRestrictionOperation.Merge(m, src)
+}
+func (m *TargetRestrictionOperation) XXX_Size() int {
+	return xxx_messageInfo_TargetRestrictionOperation.Size(m)
+}
+func (m *TargetRestrictionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetRestrictionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetRestrictionOperation proto.InternalMessageInfo
+
+func (m *TargetRestrictionOperation) GetOperator() TargetRestrictionOperation_Operator {
+	if m != nil {
+		return m.Operator
+	}
+	return TargetRestrictionOperation_UNSPECIFIED
+}
+
+func (m *TargetRestrictionOperation) GetValue() *TargetRestriction {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.common.TargetRestrictionOperation_Operator", TargetRestrictionOperation_Operator_name, TargetRestrictionOperation_Operator_value)
+	proto.RegisterType((*TargetingSetting)(nil), "google.ads.googleads.v3.common.TargetingSetting")
+	proto.RegisterType((*TargetRestriction)(nil), "google.ads.googleads.v3.common.TargetRestriction")
+	proto.RegisterType((*TargetRestrictionOperation)(nil), "google.ads.googleads.v3.common.TargetRestrictionOperation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/targeting_setting.proto", fileDescriptor_fa7d412c2ce6d703)
+}
+
+var fileDescriptor_fa7d412c2ce6d703 = []byte{
+	// 515 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x41, 0x8f, 0x93, 0x40,
+	0x18, 0x15, 0x1a, 0xb7, 0xcd, 0x34, 0x51, 0x1c, 0x63, 0xd2, 0x54, 0xdd, 0x34, 0x9c, 0x7a, 0x1a,
+	0x62, 0x89, 0x9a, 0x60, 0x3c, 0xd0, 0x82, 0x75, 0x63, 0x2c, 0x0d, 0xeb, 0x62, 0x62, 0x9a, 0x10,
+	0x28, 0x23, 0x21, 0x81, 0x19, 0xc2, 0xd0, 0x9a, 0x5e, 0xbc, 0xf9, 0x47, 0x3c, 0xfa, 0x3f, 0xbc,
+	0xf8, 0x53, 0x3c, 0x79, 0xf2, 0x6c, 0x60, 0x18, 0x5c, 0x77, 0x45, 0xb3, 0x7b, 0xe2, 0xe3, 0x9b,
+	0xf7, 0xde, 0xf7, 0xe6, 0xcd, 0x0c, 0x78, 0x12, 0x53, 0x1a, 0xa7, 0x58, 0x0b, 0x22, 0xa6, 0xf1,
+	0xb2, 0xaa, 0xf6, 0xba, 0xb6, 0xa5, 0x59, 0x46, 0x89, 0x56, 0x06, 0x45, 0x8c, 0xcb, 0x84, 0xc4,
+	0x3e, 0xc3, 0x65, 0xf5, 0x45, 0x79, 0x41, 0x4b, 0x0a, 0x8f, 0x39, 0x18, 0x05, 0x11, 0x43, 0x2d,
+	0x0f, 0xed, 0x75, 0xc4, 0x79, 0xe3, 0xa7, 0x5d, 0xba, 0x98, 0xec, 0x32, 0x76, 0x4e, 0x36, 0x4a,
+	0x32, 0x4c, 0x58, 0x42, 0x09, 0x17, 0x1e, 0x37, 0xc2, 0x5a, 0xfd, 0x17, 0xee, 0xde, 0x6b, 0x1f,
+	0x8a, 0x20, 0xcf, 0x71, 0xc1, 0x9a, 0xf5, 0x07, 0x42, 0x38, 0x4f, 0xb4, 0x80, 0x10, 0x5a, 0x06,
+	0x65, 0x42, 0x49, 0xb3, 0xaa, 0xfe, 0x94, 0x80, 0xf2, 0x46, 0x68, 0x9f, 0x72, 0xc7, 0x30, 0x04,
+	0x77, 0xf9, 0x3c, 0xbf, 0xc0, 0xac, 0x2c, 0x92, 0x6d, 0xcd, 0x18, 0x49, 0x93, 0xde, 0x74, 0x38,
+	0x7b, 0x84, 0xfe, 0xbd, 0x13, 0xc4, 0xe5, 0xdc, 0xdf, 0x4c, 0x17, 0x96, 0x17, 0x5b, 0x0c, 0x7e,
+	0x04, 0x0f, 0x2f, 0xcf, 0xf0, 0x69, 0x8e, 0x0b, 0xee, 0x6f, 0x24, 0xd7, 0xd3, 0x8c, 0x2b, 0x4f,
+	0x73, 0x84, 0x84, 0x7b, 0xbf, 0xec, 0x5c, 0x63, 0xea, 0x57, 0x09, 0xdc, 0xb9, 0xc4, 0x85, 0x07,
+	0xb1, 0xf3, 0x3f, 0x92, 0x1e, 0x49, 0x13, 0x69, 0x7a, 0x6b, 0xf6, 0xb2, 0xd3, 0x4b, 0x7d, 0x46,
+	0xa8, 0xcd, 0xd1, 0x12, 0x44, 0x9b, 0xec, 0xb2, 0xbf, 0xb4, 0x45, 0x20, 0xe7, 0x7b, 0xf0, 0x31,
+	0x18, 0x84, 0x49, 0xe4, 0x53, 0x92, 0x1e, 0x46, 0xf2, 0x44, 0x9a, 0x0e, 0x67, 0x63, 0x31, 0x4f,
+	0x1c, 0x2d, 0x9a, 0x53, 0x9a, 0x7a, 0x41, 0xba, 0xc3, 0x6e, 0x3f, 0x4c, 0x22, 0x87, 0xa4, 0x07,
+	0xf5, 0x93, 0x0c, 0xc6, 0xdd, 0x19, 0x40, 0x1f, 0x0c, 0x78, 0xa6, 0xb4, 0x68, 0x76, 0xb1, 0xb8,
+	0x7e, 0xa2, 0xc8, 0x69, 0xa4, 0xdc, 0x56, 0x14, 0x2e, 0xc1, 0xcd, 0x7d, 0xe5, 0xa8, 0xf1, 0x7c,
+	0x8d, 0xdb, 0xc1, 0xf9, 0xea, 0x73, 0x30, 0x10, 0xf2, 0xf0, 0x36, 0x18, 0x9e, 0xad, 0x4e, 0xd7,
+	0xf6, 0xe2, 0xe4, 0xc5, 0x89, 0x6d, 0x29, 0x37, 0xe0, 0x10, 0xf4, 0xcf, 0x56, 0xaf, 0x56, 0xce,
+	0xdb, 0x95, 0x22, 0xc1, 0x3e, 0xe8, 0x99, 0x96, 0xa5, 0xc8, 0x10, 0x80, 0x23, 0xd7, 0x7e, 0xed,
+	0x78, 0xb6, 0xd2, 0x9b, 0xff, 0x90, 0x80, 0xba, 0xa5, 0xd9, 0x7f, 0xc6, 0xcf, 0xef, 0x5d, 0xbc,
+	0xec, 0xeb, 0x2a, 0xdb, 0xb5, 0xf4, 0xce, 0x6a, 0x88, 0x31, 0x4d, 0x03, 0x12, 0x23, 0x5a, 0xc4,
+	0x5a, 0x8c, 0x49, 0x9d, 0xbc, 0x78, 0x8f, 0x79, 0xc2, 0xba, 0x9e, 0xfd, 0x33, 0xfe, 0xf9, 0x2c,
+	0xf7, 0x96, 0xa6, 0xf9, 0x45, 0x3e, 0x5e, 0x72, 0x31, 0x33, 0x62, 0x88, 0x97, 0x55, 0xe5, 0xe9,
+	0x68, 0x51, 0xc3, 0xbe, 0x09, 0xc0, 0xc6, 0x8c, 0xd8, 0xa6, 0x05, 0x6c, 0x3c, 0x7d, 0xc3, 0x01,
+	0xdf, 0x65, 0x95, 0x77, 0x0d, 0xc3, 0x8c, 0x98, 0x61, 0xb4, 0x10, 0xc3, 0xf0, 0x74, 0xc3, 0xe0,
+	0xa0, 0xf0, 0xa8, 0x76, 0xa7, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x05, 0xf9, 0xc5, 0xc5, 0x93,
+	0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/text_label.pb.go b/googleapis/ads/googleads/v3/common/text_label.pb.go
new file mode 100644
index 0000000..b104d5b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/text_label.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/text_label.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A type of label displaying text on a colored background.
+type TextLabel struct {
+	// Background color of the label in RGB format. This string must match the
+	// regular expression '^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$'.
+	// Note: The background color may not be visible for manager accounts.
+	BackgroundColor *wrappers.StringValue `protobuf:"bytes,1,opt,name=background_color,json=backgroundColor,proto3" json:"background_color,omitempty"`
+	// A short description of the label. The length must be no more than 200
+	// characters.
+	Description          *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TextLabel) Reset()         { *m = TextLabel{} }
+func (m *TextLabel) String() string { return proto.CompactTextString(m) }
+func (*TextLabel) ProtoMessage()    {}
+func (*TextLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9cba9b2419deeefc, []int{0}
+}
+
+func (m *TextLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TextLabel.Unmarshal(m, b)
+}
+func (m *TextLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TextLabel.Marshal(b, m, deterministic)
+}
+func (m *TextLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TextLabel.Merge(m, src)
+}
+func (m *TextLabel) XXX_Size() int {
+	return xxx_messageInfo_TextLabel.Size(m)
+}
+func (m *TextLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_TextLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TextLabel proto.InternalMessageInfo
+
+func (m *TextLabel) GetBackgroundColor() *wrappers.StringValue {
+	if m != nil {
+		return m.BackgroundColor
+	}
+	return nil
+}
+
+func (m *TextLabel) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TextLabel)(nil), "google.ads.googleads.v3.common.TextLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/text_label.proto", fileDescriptor_9cba9b2419deeefc)
+}
+
+var fileDescriptor_9cba9b2419deeefc = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x69, 0x05, 0xc1, 0x0e, 0x54, 0x76, 0x1a, 0x63, 0x0c, 0xd9, 0xc9, 0x53, 0x02, 0xf6,
+	0x16, 0x41, 0xe8, 0x26, 0xec, 0xe2, 0x61, 0xa8, 0xf4, 0x20, 0x85, 0x91, 0x36, 0x31, 0x14, 0xb3,
+	0x7c, 0x21, 0xc9, 0xe6, 0x1e, 0xc4, 0x27, 0xf0, 0xe8, 0xa3, 0xf8, 0x26, 0xfa, 0x14, 0x92, 0xa6,
+	0xad, 0x5e, 0x14, 0x4f, 0xfd, 0xd3, 0xfc, 0x7e, 0xdf, 0x3f, 0xf9, 0x12, 0x2c, 0x00, 0x84, 0xe4,
+	0x98, 0x32, 0xdb, 0x46, 0x9f, 0x76, 0x29, 0xae, 0x60, 0xb3, 0x01, 0x85, 0x1d, 0xdf, 0xbb, 0xb5,
+	0xa4, 0x25, 0x97, 0x48, 0x1b, 0x70, 0x30, 0x9c, 0x06, 0x0a, 0x51, 0x66, 0x51, 0x2f, 0xa0, 0x5d,
+	0x8a, 0x82, 0x30, 0x6e, 0xcf, 0x71, 0x43, 0x97, 0xdb, 0x47, 0xfc, 0x6c, 0xa8, 0xd6, 0xdc, 0xd8,
+	0xe0, 0x8f, 0x27, 0x5d, 0xa1, 0xae, 0x31, 0x55, 0x0a, 0x1c, 0x75, 0x35, 0xa8, 0xf6, 0x74, 0xf6,
+	0x12, 0x25, 0x47, 0xf7, 0x7c, 0xef, 0x6e, 0x7c, 0xe3, 0x70, 0x99, 0x9c, 0x96, 0xb4, 0x7a, 0x12,
+	0x06, 0xb6, 0x8a, 0xad, 0x2b, 0x90, 0x60, 0x46, 0xd1, 0x59, 0x74, 0x3e, 0xb8, 0x98, 0xb4, 0xdd,
+	0xa8, 0xab, 0x41, 0x77, 0xce, 0xd4, 0x4a, 0xe4, 0x54, 0x6e, 0xf9, 0xed, 0xc9, 0xb7, 0xb5, 0xf0,
+	0xd2, 0xf0, 0x2a, 0x19, 0x30, 0x6e, 0x2b, 0x53, 0x6b, 0x5f, 0x36, 0x8a, 0xff, 0x31, 0xe3, 0xa7,
+	0x30, 0xff, 0x88, 0x92, 0x59, 0x05, 0x1b, 0xf4, 0xf7, 0xdb, 0xe7, 0xc7, 0xfd, 0xd5, 0x57, 0x7e,
+	0xe4, 0x2a, 0x7a, 0xb8, 0x6e, 0x0d, 0x01, 0x92, 0x2a, 0x81, 0xc0, 0x08, 0x2c, 0xb8, 0x6a, 0x0a,
+	0xbb, 0x75, 0xeb, 0xda, 0xfe, 0xb6, 0xfd, 0xcb, 0xf0, 0x79, 0x8d, 0x0f, 0x96, 0x59, 0xf6, 0x16,
+	0x4f, 0x97, 0x61, 0x58, 0xc6, 0x2c, 0x0a, 0xd1, 0xa7, 0x3c, 0x45, 0x8b, 0x06, 0x7b, 0xef, 0x80,
+	0x22, 0x63, 0xb6, 0xe8, 0x81, 0x22, 0x4f, 0x8b, 0x00, 0x7c, 0xc6, 0xb3, 0xf0, 0x97, 0x90, 0x8c,
+	0x59, 0x42, 0x7a, 0x84, 0x90, 0x3c, 0x25, 0x24, 0x40, 0xe5, 0x61, 0x73, 0xbb, 0xf4, 0x2b, 0x00,
+	0x00, 0xff, 0xff, 0xf9, 0xac, 0xc1, 0x18, 0x1a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/url_collection.pb.go b/googleapis/ads/googleads/v3/common/url_collection.pb.go
new file mode 100644
index 0000000..ebdf205
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/url_collection.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/url_collection.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Collection of urls that is tagged with a unique identifier.
+type UrlCollection struct {
+	// Unique identifier for this UrlCollection instance.
+	UrlCollectionId *wrappers.StringValue `protobuf:"bytes,1,opt,name=url_collection_id,json=urlCollectionId,proto3" json:"url_collection_id,omitempty"`
+	// A list of possible final URLs.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,2,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of possible final mobile URLs.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,3,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// URL template for constructing a tracking URL.
+	TrackingUrlTemplate  *wrappers.StringValue `protobuf:"bytes,4,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UrlCollection) Reset()         { *m = UrlCollection{} }
+func (m *UrlCollection) String() string { return proto.CompactTextString(m) }
+func (*UrlCollection) ProtoMessage()    {}
+func (*UrlCollection) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0a1d955dae37e0d9, []int{0}
+}
+
+func (m *UrlCollection) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UrlCollection.Unmarshal(m, b)
+}
+func (m *UrlCollection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UrlCollection.Marshal(b, m, deterministic)
+}
+func (m *UrlCollection) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UrlCollection.Merge(m, src)
+}
+func (m *UrlCollection) XXX_Size() int {
+	return xxx_messageInfo_UrlCollection.Size(m)
+}
+func (m *UrlCollection) XXX_DiscardUnknown() {
+	xxx_messageInfo_UrlCollection.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UrlCollection proto.InternalMessageInfo
+
+func (m *UrlCollection) GetUrlCollectionId() *wrappers.StringValue {
+	if m != nil {
+		return m.UrlCollectionId
+	}
+	return nil
+}
+
+func (m *UrlCollection) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *UrlCollection) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *UrlCollection) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*UrlCollection)(nil), "google.ads.googleads.v3.common.UrlCollection")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/url_collection.proto", fileDescriptor_0a1d955dae37e0d9)
+}
+
+var fileDescriptor_0a1d955dae37e0d9 = []byte{
+	// 368 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x4b, 0xf3, 0x30,
+	0x18, 0xc7, 0x69, 0xf7, 0xf2, 0x82, 0x15, 0x19, 0x56, 0x84, 0x31, 0xc6, 0x18, 0x3b, 0x79, 0x4a,
+	0xc0, 0xde, 0xb2, 0x53, 0x37, 0x61, 0x7a, 0x10, 0x86, 0xba, 0x1e, 0xa4, 0x50, 0xb2, 0x36, 0x0b,
+	0xc1, 0x34, 0x29, 0x49, 0x3b, 0xbf, 0x8f, 0x47, 0x8f, 0x7e, 0x0c, 0x3f, 0x8a, 0xe0, 0x77, 0x90,
+	0x26, 0x6d, 0x71, 0x07, 0x75, 0xa7, 0x3e, 0x34, 0xff, 0xdf, 0xef, 0x79, 0xda, 0x3c, 0x5e, 0x40,
+	0xa5, 0xa4, 0x9c, 0x40, 0x9c, 0x69, 0x68, 0xcb, 0xba, 0xda, 0x05, 0x30, 0x95, 0x79, 0x2e, 0x05,
+	0xac, 0x14, 0x4f, 0x52, 0xc9, 0x39, 0x49, 0x4b, 0x26, 0x05, 0x28, 0x94, 0x2c, 0xa5, 0x3f, 0xb6,
+	0x49, 0x80, 0x33, 0x0d, 0x3a, 0x08, 0xec, 0x02, 0x60, 0xa1, 0x61, 0x73, 0x0e, 0x4d, 0x7a, 0x53,
+	0x6d, 0xe1, 0xb3, 0xc2, 0x45, 0x41, 0x94, 0xb6, 0xfc, 0x70, 0xd4, 0x36, 0x2d, 0x18, 0xc4, 0x42,
+	0xc8, 0x12, 0xd7, 0xf2, 0xe6, 0x74, 0xfa, 0xe6, 0x7a, 0x27, 0x6b, 0xc5, 0x17, 0x5d, 0x57, 0xff,
+	0xda, 0x3b, 0xdd, 0x9f, 0x23, 0x61, 0xd9, 0xc0, 0x99, 0x38, 0x17, 0xc7, 0x97, 0xa3, 0x66, 0x00,
+	0xd0, 0xf6, 0x02, 0xf7, 0xa5, 0x62, 0x82, 0x46, 0x98, 0x57, 0xe4, 0xae, 0x5f, 0x7d, 0xf7, 0xdc,
+	0x64, 0xfe, 0xcc, 0xf3, 0xb6, 0x4c, 0x60, 0x9e, 0x54, 0x8a, 0xeb, 0x81, 0x3b, 0xe9, 0xfd, 0xa9,
+	0x38, 0x32, 0xf9, 0xb5, 0xe2, 0xba, 0x1e, 0xc3, 0xc2, 0xb9, 0xdc, 0x30, 0x4e, 0xac, 0xa3, 0x77,
+	0x80, 0xa3, 0x6f, 0xb0, 0x5b, 0x43, 0x19, 0xd3, 0xca, 0x3b, 0x2f, 0x15, 0x4e, 0x9f, 0x98, 0xa0,
+	0xb5, 0x25, 0x29, 0x49, 0x5e, 0x70, 0x5c, 0x92, 0xc1, 0xbf, 0x03, 0x3e, 0xea, 0xac, 0x45, 0xd7,
+	0x8a, 0x3f, 0x34, 0xe0, 0xfc, 0xd3, 0xf1, 0xa6, 0xa9, 0xcc, 0xc1, 0xef, 0x37, 0x33, 0xf7, 0xf7,
+	0x7e, 0xec, 0xaa, 0xd6, 0xaf, 0x9c, 0xc7, 0xab, 0x86, 0xa2, 0x92, 0x63, 0x41, 0x81, 0x54, 0x14,
+	0x52, 0x22, 0x4c, 0xf3, 0x76, 0x29, 0x0a, 0xa6, 0x7f, 0xda, 0x91, 0x99, 0x7d, 0xbc, 0xb8, 0xbd,
+	0x65, 0x18, 0xbe, 0xba, 0xe3, 0xa5, 0x95, 0x85, 0x99, 0x06, 0xb6, 0xac, 0xab, 0x28, 0x00, 0x0b,
+	0x13, 0x7b, 0x6f, 0x03, 0x71, 0x98, 0xe9, 0xb8, 0x0b, 0xc4, 0x51, 0x10, 0xdb, 0xc0, 0x87, 0x3b,
+	0xb5, 0x6f, 0x11, 0x0a, 0x33, 0x8d, 0x50, 0x17, 0x41, 0x28, 0x0a, 0x10, 0xb2, 0xa1, 0xcd, 0x7f,
+	0x33, 0x5d, 0xf0, 0x15, 0x00, 0x00, 0xff, 0xff, 0xec, 0x05, 0x93, 0xfe, 0xc0, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/user_lists.pb.go b/googleapis/ads/googleads/v3/common/user_lists.pb.go
new file mode 100644
index 0000000..de6c309
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/user_lists.pb.go
@@ -0,0 +1,1191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/user_lists.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// SimilarUserList is a list of users which are similar to users from another
+// UserList. These lists are read-only and automatically created by Google.
+type SimilarUserListInfo struct {
+	// Seed UserList from which this list is derived.
+	SeedUserList         *wrappers.StringValue `protobuf:"bytes,1,opt,name=seed_user_list,json=seedUserList,proto3" json:"seed_user_list,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *SimilarUserListInfo) Reset()         { *m = SimilarUserListInfo{} }
+func (m *SimilarUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*SimilarUserListInfo) ProtoMessage()    {}
+func (*SimilarUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{0}
+}
+
+func (m *SimilarUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SimilarUserListInfo.Unmarshal(m, b)
+}
+func (m *SimilarUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SimilarUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *SimilarUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SimilarUserListInfo.Merge(m, src)
+}
+func (m *SimilarUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_SimilarUserListInfo.Size(m)
+}
+func (m *SimilarUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_SimilarUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SimilarUserListInfo proto.InternalMessageInfo
+
+func (m *SimilarUserListInfo) GetSeedUserList() *wrappers.StringValue {
+	if m != nil {
+		return m.SeedUserList
+	}
+	return nil
+}
+
+// UserList of CRM users provided by the advertiser.
+type CrmBasedUserListInfo struct {
+	// A string that uniquely identifies a mobile application from which the data
+	// was collected to the Google Ads API.
+	// For iOS, the ID string is the 9 digit string that appears at the end of an
+	// App Store URL (e.g., "476943146" for "Flood-It! 2" whose App Store link is
+	// http://itunes.apple.com/us/app/flood-it!-2/id476943146).
+	// For Android, the ID string is the application's package name
+	// (e.g., "com.labpixies.colordrips" for "Color Drips" given Google Play link
+	// https://play.google.com/store/apps/details?id=com.labpixies.colordrips).
+	// Required when creating CrmBasedUserList for uploading mobile advertising
+	// IDs.
+	AppId *wrappers.StringValue `protobuf:"bytes,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// Matching key type of the list.
+	// Mixed data types are not allowed on the same list.
+	// This field is required for an ADD operation.
+	UploadKeyType enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType `protobuf:"varint,2,opt,name=upload_key_type,json=uploadKeyType,proto3,enum=google.ads.googleads.v3.enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType" json:"upload_key_type,omitempty"`
+	// Data source of the list. Default value is FIRST_PARTY.
+	// Only whitelisted customers can create third-party sourced CRM lists.
+	DataSourceType       enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType `protobuf:"varint,3,opt,name=data_source_type,json=dataSourceType,proto3,enum=google.ads.googleads.v3.enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType" json:"data_source_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *CrmBasedUserListInfo) Reset()         { *m = CrmBasedUserListInfo{} }
+func (m *CrmBasedUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*CrmBasedUserListInfo) ProtoMessage()    {}
+func (*CrmBasedUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{1}
+}
+
+func (m *CrmBasedUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CrmBasedUserListInfo.Unmarshal(m, b)
+}
+func (m *CrmBasedUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CrmBasedUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *CrmBasedUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CrmBasedUserListInfo.Merge(m, src)
+}
+func (m *CrmBasedUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_CrmBasedUserListInfo.Size(m)
+}
+func (m *CrmBasedUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CrmBasedUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CrmBasedUserListInfo proto.InternalMessageInfo
+
+func (m *CrmBasedUserListInfo) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *CrmBasedUserListInfo) GetUploadKeyType() enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType {
+	if m != nil {
+		return m.UploadKeyType
+	}
+	return enums.CustomerMatchUploadKeyTypeEnum_UNSPECIFIED
+}
+
+func (m *CrmBasedUserListInfo) GetDataSourceType() enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType {
+	if m != nil {
+		return m.DataSourceType
+	}
+	return enums.UserListCrmDataSourceTypeEnum_UNSPECIFIED
+}
+
+// A client defined rule based on custom parameters sent by web sites or
+// uploaded by the advertiser.
+type UserListRuleInfo struct {
+	// Rule type is used to determine how to group rule items.
+	//
+	// The default is OR of ANDs (disjunctive normal form).
+	// That is, rule items will be ANDed together within rule item groups and the
+	// groups themselves will be ORed together.
+	//
+	// Currently AND of ORs (conjunctive normal form) is only supported for
+	// ExpressionRuleUserList.
+	RuleType enums.UserListRuleTypeEnum_UserListRuleType `protobuf:"varint,1,opt,name=rule_type,json=ruleType,proto3,enum=google.ads.googleads.v3.enums.UserListRuleTypeEnum_UserListRuleType" json:"rule_type,omitempty"`
+	// List of rule item groups that defines this rule.
+	// Rule item groups are grouped together based on rule_type.
+	RuleItemGroups       []*UserListRuleItemGroupInfo `protobuf:"bytes,2,rep,name=rule_item_groups,json=ruleItemGroups,proto3" json:"rule_item_groups,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *UserListRuleInfo) Reset()         { *m = UserListRuleInfo{} }
+func (m *UserListRuleInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListRuleInfo) ProtoMessage()    {}
+func (*UserListRuleInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{2}
+}
+
+func (m *UserListRuleInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListRuleInfo.Unmarshal(m, b)
+}
+func (m *UserListRuleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListRuleInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListRuleInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListRuleInfo.Merge(m, src)
+}
+func (m *UserListRuleInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListRuleInfo.Size(m)
+}
+func (m *UserListRuleInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListRuleInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListRuleInfo proto.InternalMessageInfo
+
+func (m *UserListRuleInfo) GetRuleType() enums.UserListRuleTypeEnum_UserListRuleType {
+	if m != nil {
+		return m.RuleType
+	}
+	return enums.UserListRuleTypeEnum_UNSPECIFIED
+}
+
+func (m *UserListRuleInfo) GetRuleItemGroups() []*UserListRuleItemGroupInfo {
+	if m != nil {
+		return m.RuleItemGroups
+	}
+	return nil
+}
+
+// A group of rule items.
+type UserListRuleItemGroupInfo struct {
+	// Rule items that will be grouped together based on rule_type.
+	RuleItems            []*UserListRuleItemInfo `protobuf:"bytes,1,rep,name=rule_items,json=ruleItems,proto3" json:"rule_items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *UserListRuleItemGroupInfo) Reset()         { *m = UserListRuleItemGroupInfo{} }
+func (m *UserListRuleItemGroupInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListRuleItemGroupInfo) ProtoMessage()    {}
+func (*UserListRuleItemGroupInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{3}
+}
+
+func (m *UserListRuleItemGroupInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListRuleItemGroupInfo.Unmarshal(m, b)
+}
+func (m *UserListRuleItemGroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListRuleItemGroupInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListRuleItemGroupInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListRuleItemGroupInfo.Merge(m, src)
+}
+func (m *UserListRuleItemGroupInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListRuleItemGroupInfo.Size(m)
+}
+func (m *UserListRuleItemGroupInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListRuleItemGroupInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListRuleItemGroupInfo proto.InternalMessageInfo
+
+func (m *UserListRuleItemGroupInfo) GetRuleItems() []*UserListRuleItemInfo {
+	if m != nil {
+		return m.RuleItems
+	}
+	return nil
+}
+
+// An atomic rule fragment.
+type UserListRuleItemInfo struct {
+	// Rule variable name. It should match the corresponding key name fired
+	// by the pixel.
+	// A name must begin with US-ascii letters or underscore or UTF8 code that is
+	// greater than 127 and consist of US-ascii letters or digits or underscore or
+	// UTF8 code that is greater than 127.
+	// For websites, there are two built-in variable URL (name = 'url__') and
+	// referrer URL (name = 'ref_url__').
+	// This field must be populated when creating a new rule item.
+	Name *wrappers.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// An atomic rule fragment.
+	//
+	// Types that are valid to be assigned to RuleItem:
+	//	*UserListRuleItemInfo_NumberRuleItem
+	//	*UserListRuleItemInfo_StringRuleItem
+	//	*UserListRuleItemInfo_DateRuleItem
+	RuleItem             isUserListRuleItemInfo_RuleItem `protobuf_oneof:"rule_item"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *UserListRuleItemInfo) Reset()         { *m = UserListRuleItemInfo{} }
+func (m *UserListRuleItemInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListRuleItemInfo) ProtoMessage()    {}
+func (*UserListRuleItemInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{4}
+}
+
+func (m *UserListRuleItemInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListRuleItemInfo.Unmarshal(m, b)
+}
+func (m *UserListRuleItemInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListRuleItemInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListRuleItemInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListRuleItemInfo.Merge(m, src)
+}
+func (m *UserListRuleItemInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListRuleItemInfo.Size(m)
+}
+func (m *UserListRuleItemInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListRuleItemInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListRuleItemInfo proto.InternalMessageInfo
+
+func (m *UserListRuleItemInfo) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+type isUserListRuleItemInfo_RuleItem interface {
+	isUserListRuleItemInfo_RuleItem()
+}
+
+type UserListRuleItemInfo_NumberRuleItem struct {
+	NumberRuleItem *UserListNumberRuleItemInfo `protobuf:"bytes,2,opt,name=number_rule_item,json=numberRuleItem,proto3,oneof"`
+}
+
+type UserListRuleItemInfo_StringRuleItem struct {
+	StringRuleItem *UserListStringRuleItemInfo `protobuf:"bytes,3,opt,name=string_rule_item,json=stringRuleItem,proto3,oneof"`
+}
+
+type UserListRuleItemInfo_DateRuleItem struct {
+	DateRuleItem *UserListDateRuleItemInfo `protobuf:"bytes,4,opt,name=date_rule_item,json=dateRuleItem,proto3,oneof"`
+}
+
+func (*UserListRuleItemInfo_NumberRuleItem) isUserListRuleItemInfo_RuleItem() {}
+
+func (*UserListRuleItemInfo_StringRuleItem) isUserListRuleItemInfo_RuleItem() {}
+
+func (*UserListRuleItemInfo_DateRuleItem) isUserListRuleItemInfo_RuleItem() {}
+
+func (m *UserListRuleItemInfo) GetRuleItem() isUserListRuleItemInfo_RuleItem {
+	if m != nil {
+		return m.RuleItem
+	}
+	return nil
+}
+
+func (m *UserListRuleItemInfo) GetNumberRuleItem() *UserListNumberRuleItemInfo {
+	if x, ok := m.GetRuleItem().(*UserListRuleItemInfo_NumberRuleItem); ok {
+		return x.NumberRuleItem
+	}
+	return nil
+}
+
+func (m *UserListRuleItemInfo) GetStringRuleItem() *UserListStringRuleItemInfo {
+	if x, ok := m.GetRuleItem().(*UserListRuleItemInfo_StringRuleItem); ok {
+		return x.StringRuleItem
+	}
+	return nil
+}
+
+func (m *UserListRuleItemInfo) GetDateRuleItem() *UserListDateRuleItemInfo {
+	if x, ok := m.GetRuleItem().(*UserListRuleItemInfo_DateRuleItem); ok {
+		return x.DateRuleItem
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*UserListRuleItemInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*UserListRuleItemInfo_NumberRuleItem)(nil),
+		(*UserListRuleItemInfo_StringRuleItem)(nil),
+		(*UserListRuleItemInfo_DateRuleItem)(nil),
+	}
+}
+
+// A rule item composed of date operation.
+type UserListDateRuleItemInfo struct {
+	// Date comparison operator.
+	// This field is required and must be populated when creating new date
+	// rule item.
+	Operator enums.UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator" json:"operator,omitempty"`
+	// String representing date value to be compared with the rule variable.
+	// Supported date format is YYYY-MM-DD.
+	// Times are reported in the customer's time zone.
+	Value *wrappers.StringValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	// The relative date value of the right hand side denoted by number of days
+	// offset from now. The value field will override this field when both are
+	// present.
+	OffsetInDays         *wrappers.Int64Value `protobuf:"bytes,3,opt,name=offset_in_days,json=offsetInDays,proto3" json:"offset_in_days,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *UserListDateRuleItemInfo) Reset()         { *m = UserListDateRuleItemInfo{} }
+func (m *UserListDateRuleItemInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListDateRuleItemInfo) ProtoMessage()    {}
+func (*UserListDateRuleItemInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{5}
+}
+
+func (m *UserListDateRuleItemInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListDateRuleItemInfo.Unmarshal(m, b)
+}
+func (m *UserListDateRuleItemInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListDateRuleItemInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListDateRuleItemInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListDateRuleItemInfo.Merge(m, src)
+}
+func (m *UserListDateRuleItemInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListDateRuleItemInfo.Size(m)
+}
+func (m *UserListDateRuleItemInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListDateRuleItemInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListDateRuleItemInfo proto.InternalMessageInfo
+
+func (m *UserListDateRuleItemInfo) GetOperator() enums.UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.UserListDateRuleItemOperatorEnum_UNSPECIFIED
+}
+
+func (m *UserListDateRuleItemInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *UserListDateRuleItemInfo) GetOffsetInDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.OffsetInDays
+	}
+	return nil
+}
+
+// A rule item composed of number operation.
+type UserListNumberRuleItemInfo struct {
+	// Number comparison operator.
+	// This field is required and must be populated when creating a new number
+	// rule item.
+	Operator enums.UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator" json:"operator,omitempty"`
+	// Number value to be compared with the variable.
+	// This field is required and must be populated when creating a new number
+	// rule item.
+	Value                *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserListNumberRuleItemInfo) Reset()         { *m = UserListNumberRuleItemInfo{} }
+func (m *UserListNumberRuleItemInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListNumberRuleItemInfo) ProtoMessage()    {}
+func (*UserListNumberRuleItemInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{6}
+}
+
+func (m *UserListNumberRuleItemInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListNumberRuleItemInfo.Unmarshal(m, b)
+}
+func (m *UserListNumberRuleItemInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListNumberRuleItemInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListNumberRuleItemInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListNumberRuleItemInfo.Merge(m, src)
+}
+func (m *UserListNumberRuleItemInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListNumberRuleItemInfo.Size(m)
+}
+func (m *UserListNumberRuleItemInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListNumberRuleItemInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListNumberRuleItemInfo proto.InternalMessageInfo
+
+func (m *UserListNumberRuleItemInfo) GetOperator() enums.UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.UserListNumberRuleItemOperatorEnum_UNSPECIFIED
+}
+
+func (m *UserListNumberRuleItemInfo) GetValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// A rule item fragment composed of date operation.
+type UserListStringRuleItemInfo struct {
+	// String comparison operator.
+	// This field is required and must be populated when creating a new string
+	// rule item.
+	Operator enums.UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator" json:"operator,omitempty"`
+	// The right hand side of the string rule item. For URLs or referrer URLs,
+	// the value can not contain illegal URL chars such as newlines, quotes,
+	// tabs, or parentheses. This field is required and must be populated when
+	// creating a new string rule item.
+	Value                *wrappers.StringValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserListStringRuleItemInfo) Reset()         { *m = UserListStringRuleItemInfo{} }
+func (m *UserListStringRuleItemInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListStringRuleItemInfo) ProtoMessage()    {}
+func (*UserListStringRuleItemInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{7}
+}
+
+func (m *UserListStringRuleItemInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListStringRuleItemInfo.Unmarshal(m, b)
+}
+func (m *UserListStringRuleItemInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListStringRuleItemInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListStringRuleItemInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListStringRuleItemInfo.Merge(m, src)
+}
+func (m *UserListStringRuleItemInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListStringRuleItemInfo.Size(m)
+}
+func (m *UserListStringRuleItemInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListStringRuleItemInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListStringRuleItemInfo proto.InternalMessageInfo
+
+func (m *UserListStringRuleItemInfo) GetOperator() enums.UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.UserListStringRuleItemOperatorEnum_UNSPECIFIED
+}
+
+func (m *UserListStringRuleItemInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// User lists defined by combining two rules, left operand and right operand.
+// There are two operators: AND where left operand and right operand have to be
+// true; AND_NOT where left operand is true but right operand is false.
+type CombinedRuleUserListInfo struct {
+	// Left operand of the combined rule.
+	// This field is required and must be populated when creating new combined
+	// rule based user list.
+	LeftOperand *UserListRuleInfo `protobuf:"bytes,1,opt,name=left_operand,json=leftOperand,proto3" json:"left_operand,omitempty"`
+	// Right operand of the combined rule.
+	// This field is required and must be populated when creating new combined
+	// rule based user list.
+	RightOperand *UserListRuleInfo `protobuf:"bytes,2,opt,name=right_operand,json=rightOperand,proto3" json:"right_operand,omitempty"`
+	// Operator to connect the two operands.
+	//
+	// Required for creating a combined rule user list.
+	RuleOperator         enums.UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator `protobuf:"varint,3,opt,name=rule_operator,json=ruleOperator,proto3,enum=google.ads.googleads.v3.enums.UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator" json:"rule_operator,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                            `json:"-"`
+	XXX_unrecognized     []byte                                                              `json:"-"`
+	XXX_sizecache        int32                                                               `json:"-"`
+}
+
+func (m *CombinedRuleUserListInfo) Reset()         { *m = CombinedRuleUserListInfo{} }
+func (m *CombinedRuleUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*CombinedRuleUserListInfo) ProtoMessage()    {}
+func (*CombinedRuleUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{8}
+}
+
+func (m *CombinedRuleUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CombinedRuleUserListInfo.Unmarshal(m, b)
+}
+func (m *CombinedRuleUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CombinedRuleUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *CombinedRuleUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CombinedRuleUserListInfo.Merge(m, src)
+}
+func (m *CombinedRuleUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_CombinedRuleUserListInfo.Size(m)
+}
+func (m *CombinedRuleUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CombinedRuleUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CombinedRuleUserListInfo proto.InternalMessageInfo
+
+func (m *CombinedRuleUserListInfo) GetLeftOperand() *UserListRuleInfo {
+	if m != nil {
+		return m.LeftOperand
+	}
+	return nil
+}
+
+func (m *CombinedRuleUserListInfo) GetRightOperand() *UserListRuleInfo {
+	if m != nil {
+		return m.RightOperand
+	}
+	return nil
+}
+
+func (m *CombinedRuleUserListInfo) GetRuleOperator() enums.UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator {
+	if m != nil {
+		return m.RuleOperator
+	}
+	return enums.UserListCombinedRuleOperatorEnum_UNSPECIFIED
+}
+
+// Visitors of a page during specific dates.
+type DateSpecificRuleUserListInfo struct {
+	// Boolean rule that defines visitor of a page.
+	//
+	// Required for creating a date specific rule user list.
+	Rule *UserListRuleInfo `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"`
+	// Start date of users visit. If set to 2000-01-01, then the list includes all
+	// users before end_date. The date's format should be YYYY-MM-DD.
+	//
+	// Required for creating a data specific rule user list.
+	StartDate *wrappers.StringValue `protobuf:"bytes,2,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// End date of users visit. If set to 2037-12-30, then the list includes all
+	// users after start_date. The date's format should be YYYY-MM-DD.
+	//
+	// Required for creating a data specific rule user list.
+	EndDate              *wrappers.StringValue `protobuf:"bytes,3,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DateSpecificRuleUserListInfo) Reset()         { *m = DateSpecificRuleUserListInfo{} }
+func (m *DateSpecificRuleUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*DateSpecificRuleUserListInfo) ProtoMessage()    {}
+func (*DateSpecificRuleUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{9}
+}
+
+func (m *DateSpecificRuleUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateSpecificRuleUserListInfo.Unmarshal(m, b)
+}
+func (m *DateSpecificRuleUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateSpecificRuleUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *DateSpecificRuleUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateSpecificRuleUserListInfo.Merge(m, src)
+}
+func (m *DateSpecificRuleUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_DateSpecificRuleUserListInfo.Size(m)
+}
+func (m *DateSpecificRuleUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateSpecificRuleUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateSpecificRuleUserListInfo proto.InternalMessageInfo
+
+func (m *DateSpecificRuleUserListInfo) GetRule() *UserListRuleInfo {
+	if m != nil {
+		return m.Rule
+	}
+	return nil
+}
+
+func (m *DateSpecificRuleUserListInfo) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *DateSpecificRuleUserListInfo) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+// Visitors of a page. The page visit is defined by one boolean rule expression.
+type ExpressionRuleUserListInfo struct {
+	// Boolean rule that defines this user list. The rule consists of a list of
+	// rule item groups and each rule item group consists of a list of rule items.
+	// All the rule item groups are ORed or ANDed together for evaluation based on
+	// rule.rule_type.
+	//
+	// Required for creating an expression rule user list.
+	Rule                 *UserListRuleInfo `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *ExpressionRuleUserListInfo) Reset()         { *m = ExpressionRuleUserListInfo{} }
+func (m *ExpressionRuleUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*ExpressionRuleUserListInfo) ProtoMessage()    {}
+func (*ExpressionRuleUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{10}
+}
+
+func (m *ExpressionRuleUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpressionRuleUserListInfo.Unmarshal(m, b)
+}
+func (m *ExpressionRuleUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpressionRuleUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *ExpressionRuleUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpressionRuleUserListInfo.Merge(m, src)
+}
+func (m *ExpressionRuleUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_ExpressionRuleUserListInfo.Size(m)
+}
+func (m *ExpressionRuleUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpressionRuleUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpressionRuleUserListInfo proto.InternalMessageInfo
+
+func (m *ExpressionRuleUserListInfo) GetRule() *UserListRuleInfo {
+	if m != nil {
+		return m.Rule
+	}
+	return nil
+}
+
+// Representation of a userlist that is generated by a rule.
+type RuleBasedUserListInfo struct {
+	// The status of pre-population. The field is default to NONE if not set which
+	// means the previous users will not be considered. If set to REQUESTED, past
+	// site visitors or app users who match the list definition will be included
+	// in the list (works on the Display Network only). This will only
+	// add past users from within the last 30 days, depending on the
+	// list's membership duration and the date when the remarketing tag is added.
+	// The status will be updated to FINISHED once request is processed, or FAILED
+	// if the request fails.
+	PrepopulationStatus enums.UserListPrepopulationStatusEnum_UserListPrepopulationStatus `protobuf:"varint,1,opt,name=prepopulation_status,json=prepopulationStatus,proto3,enum=google.ads.googleads.v3.enums.UserListPrepopulationStatusEnum_UserListPrepopulationStatus" json:"prepopulation_status,omitempty"`
+	// Subtypes of rule based user lists.
+	//
+	// Types that are valid to be assigned to RuleBasedUserList:
+	//	*RuleBasedUserListInfo_CombinedRuleUserList
+	//	*RuleBasedUserListInfo_DateSpecificRuleUserList
+	//	*RuleBasedUserListInfo_ExpressionRuleUserList
+	RuleBasedUserList    isRuleBasedUserListInfo_RuleBasedUserList `protobuf_oneof:"rule_based_user_list"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *RuleBasedUserListInfo) Reset()         { *m = RuleBasedUserListInfo{} }
+func (m *RuleBasedUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*RuleBasedUserListInfo) ProtoMessage()    {}
+func (*RuleBasedUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{11}
+}
+
+func (m *RuleBasedUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RuleBasedUserListInfo.Unmarshal(m, b)
+}
+func (m *RuleBasedUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RuleBasedUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *RuleBasedUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RuleBasedUserListInfo.Merge(m, src)
+}
+func (m *RuleBasedUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_RuleBasedUserListInfo.Size(m)
+}
+func (m *RuleBasedUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_RuleBasedUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RuleBasedUserListInfo proto.InternalMessageInfo
+
+func (m *RuleBasedUserListInfo) GetPrepopulationStatus() enums.UserListPrepopulationStatusEnum_UserListPrepopulationStatus {
+	if m != nil {
+		return m.PrepopulationStatus
+	}
+	return enums.UserListPrepopulationStatusEnum_UNSPECIFIED
+}
+
+type isRuleBasedUserListInfo_RuleBasedUserList interface {
+	isRuleBasedUserListInfo_RuleBasedUserList()
+}
+
+type RuleBasedUserListInfo_CombinedRuleUserList struct {
+	CombinedRuleUserList *CombinedRuleUserListInfo `protobuf:"bytes,2,opt,name=combined_rule_user_list,json=combinedRuleUserList,proto3,oneof"`
+}
+
+type RuleBasedUserListInfo_DateSpecificRuleUserList struct {
+	DateSpecificRuleUserList *DateSpecificRuleUserListInfo `protobuf:"bytes,3,opt,name=date_specific_rule_user_list,json=dateSpecificRuleUserList,proto3,oneof"`
+}
+
+type RuleBasedUserListInfo_ExpressionRuleUserList struct {
+	ExpressionRuleUserList *ExpressionRuleUserListInfo `protobuf:"bytes,4,opt,name=expression_rule_user_list,json=expressionRuleUserList,proto3,oneof"`
+}
+
+func (*RuleBasedUserListInfo_CombinedRuleUserList) isRuleBasedUserListInfo_RuleBasedUserList() {}
+
+func (*RuleBasedUserListInfo_DateSpecificRuleUserList) isRuleBasedUserListInfo_RuleBasedUserList() {}
+
+func (*RuleBasedUserListInfo_ExpressionRuleUserList) isRuleBasedUserListInfo_RuleBasedUserList() {}
+
+func (m *RuleBasedUserListInfo) GetRuleBasedUserList() isRuleBasedUserListInfo_RuleBasedUserList {
+	if m != nil {
+		return m.RuleBasedUserList
+	}
+	return nil
+}
+
+func (m *RuleBasedUserListInfo) GetCombinedRuleUserList() *CombinedRuleUserListInfo {
+	if x, ok := m.GetRuleBasedUserList().(*RuleBasedUserListInfo_CombinedRuleUserList); ok {
+		return x.CombinedRuleUserList
+	}
+	return nil
+}
+
+func (m *RuleBasedUserListInfo) GetDateSpecificRuleUserList() *DateSpecificRuleUserListInfo {
+	if x, ok := m.GetRuleBasedUserList().(*RuleBasedUserListInfo_DateSpecificRuleUserList); ok {
+		return x.DateSpecificRuleUserList
+	}
+	return nil
+}
+
+func (m *RuleBasedUserListInfo) GetExpressionRuleUserList() *ExpressionRuleUserListInfo {
+	if x, ok := m.GetRuleBasedUserList().(*RuleBasedUserListInfo_ExpressionRuleUserList); ok {
+		return x.ExpressionRuleUserList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*RuleBasedUserListInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*RuleBasedUserListInfo_CombinedRuleUserList)(nil),
+		(*RuleBasedUserListInfo_DateSpecificRuleUserList)(nil),
+		(*RuleBasedUserListInfo_ExpressionRuleUserList)(nil),
+	}
+}
+
+// Represents a user list that is a custom combination of user lists.
+type LogicalUserListInfo struct {
+	// Logical list rules that define this user list. The rules are defined as a
+	// logical operator (ALL/ANY/NONE) and a list of user lists. All the rules are
+	// ANDed when they are evaluated.
+	//
+	// Required for creating a logical user list.
+	Rules                []*UserListLogicalRuleInfo `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *LogicalUserListInfo) Reset()         { *m = LogicalUserListInfo{} }
+func (m *LogicalUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*LogicalUserListInfo) ProtoMessage()    {}
+func (*LogicalUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{12}
+}
+
+func (m *LogicalUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalUserListInfo.Unmarshal(m, b)
+}
+func (m *LogicalUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *LogicalUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalUserListInfo.Merge(m, src)
+}
+func (m *LogicalUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_LogicalUserListInfo.Size(m)
+}
+func (m *LogicalUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalUserListInfo proto.InternalMessageInfo
+
+func (m *LogicalUserListInfo) GetRules() []*UserListLogicalRuleInfo {
+	if m != nil {
+		return m.Rules
+	}
+	return nil
+}
+
+// A user list logical rule. A rule has a logical operator (and/or/not) and a
+// list of user lists as operands.
+type UserListLogicalRuleInfo struct {
+	// The logical operator of the rule.
+	Operator enums.UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.enums.UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator" json:"operator,omitempty"`
+	// The list of operands of the rule.
+	RuleOperands         []*LogicalUserListOperandInfo `protobuf:"bytes,2,rep,name=rule_operands,json=ruleOperands,proto3" json:"rule_operands,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *UserListLogicalRuleInfo) Reset()         { *m = UserListLogicalRuleInfo{} }
+func (m *UserListLogicalRuleInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListLogicalRuleInfo) ProtoMessage()    {}
+func (*UserListLogicalRuleInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{13}
+}
+
+func (m *UserListLogicalRuleInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListLogicalRuleInfo.Unmarshal(m, b)
+}
+func (m *UserListLogicalRuleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListLogicalRuleInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListLogicalRuleInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListLogicalRuleInfo.Merge(m, src)
+}
+func (m *UserListLogicalRuleInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListLogicalRuleInfo.Size(m)
+}
+func (m *UserListLogicalRuleInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListLogicalRuleInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListLogicalRuleInfo proto.InternalMessageInfo
+
+func (m *UserListLogicalRuleInfo) GetOperator() enums.UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return enums.UserListLogicalRuleOperatorEnum_UNSPECIFIED
+}
+
+func (m *UserListLogicalRuleInfo) GetRuleOperands() []*LogicalUserListOperandInfo {
+	if m != nil {
+		return m.RuleOperands
+	}
+	return nil
+}
+
+// Operand of logical user list that consists of a user list.
+type LogicalUserListOperandInfo struct {
+	// Resource name of a user list as an operand.
+	UserList             *wrappers.StringValue `protobuf:"bytes,1,opt,name=user_list,json=userList,proto3" json:"user_list,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LogicalUserListOperandInfo) Reset()         { *m = LogicalUserListOperandInfo{} }
+func (m *LogicalUserListOperandInfo) String() string { return proto.CompactTextString(m) }
+func (*LogicalUserListOperandInfo) ProtoMessage()    {}
+func (*LogicalUserListOperandInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{14}
+}
+
+func (m *LogicalUserListOperandInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalUserListOperandInfo.Unmarshal(m, b)
+}
+func (m *LogicalUserListOperandInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalUserListOperandInfo.Marshal(b, m, deterministic)
+}
+func (m *LogicalUserListOperandInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalUserListOperandInfo.Merge(m, src)
+}
+func (m *LogicalUserListOperandInfo) XXX_Size() int {
+	return xxx_messageInfo_LogicalUserListOperandInfo.Size(m)
+}
+func (m *LogicalUserListOperandInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalUserListOperandInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalUserListOperandInfo proto.InternalMessageInfo
+
+func (m *LogicalUserListOperandInfo) GetUserList() *wrappers.StringValue {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+// User list targeting as a collection of conversions or remarketing actions.
+type BasicUserListInfo struct {
+	// Actions associated with this user list.
+	Actions              []*UserListActionInfo `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *BasicUserListInfo) Reset()         { *m = BasicUserListInfo{} }
+func (m *BasicUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*BasicUserListInfo) ProtoMessage()    {}
+func (*BasicUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{15}
+}
+
+func (m *BasicUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BasicUserListInfo.Unmarshal(m, b)
+}
+func (m *BasicUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BasicUserListInfo.Marshal(b, m, deterministic)
+}
+func (m *BasicUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BasicUserListInfo.Merge(m, src)
+}
+func (m *BasicUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_BasicUserListInfo.Size(m)
+}
+func (m *BasicUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_BasicUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BasicUserListInfo proto.InternalMessageInfo
+
+func (m *BasicUserListInfo) GetActions() []*UserListActionInfo {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Represents an action type used for building remarketing user lists.
+type UserListActionInfo struct {
+	// Subtypes of user list action.
+	//
+	// Types that are valid to be assigned to UserListAction:
+	//	*UserListActionInfo_ConversionAction
+	//	*UserListActionInfo_RemarketingAction
+	UserListAction       isUserListActionInfo_UserListAction `protobuf_oneof:"user_list_action"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *UserListActionInfo) Reset()         { *m = UserListActionInfo{} }
+func (m *UserListActionInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListActionInfo) ProtoMessage()    {}
+func (*UserListActionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b84b419434fa1b22, []int{16}
+}
+
+func (m *UserListActionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListActionInfo.Unmarshal(m, b)
+}
+func (m *UserListActionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListActionInfo.Marshal(b, m, deterministic)
+}
+func (m *UserListActionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListActionInfo.Merge(m, src)
+}
+func (m *UserListActionInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListActionInfo.Size(m)
+}
+func (m *UserListActionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListActionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListActionInfo proto.InternalMessageInfo
+
+type isUserListActionInfo_UserListAction interface {
+	isUserListActionInfo_UserListAction()
+}
+
+type UserListActionInfo_ConversionAction struct {
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,1,opt,name=conversion_action,json=conversionAction,proto3,oneof"`
+}
+
+type UserListActionInfo_RemarketingAction struct {
+	RemarketingAction *wrappers.StringValue `protobuf:"bytes,2,opt,name=remarketing_action,json=remarketingAction,proto3,oneof"`
+}
+
+func (*UserListActionInfo_ConversionAction) isUserListActionInfo_UserListAction() {}
+
+func (*UserListActionInfo_RemarketingAction) isUserListActionInfo_UserListAction() {}
+
+func (m *UserListActionInfo) GetUserListAction() isUserListActionInfo_UserListAction {
+	if m != nil {
+		return m.UserListAction
+	}
+	return nil
+}
+
+func (m *UserListActionInfo) GetConversionAction() *wrappers.StringValue {
+	if x, ok := m.GetUserListAction().(*UserListActionInfo_ConversionAction); ok {
+		return x.ConversionAction
+	}
+	return nil
+}
+
+func (m *UserListActionInfo) GetRemarketingAction() *wrappers.StringValue {
+	if x, ok := m.GetUserListAction().(*UserListActionInfo_RemarketingAction); ok {
+		return x.RemarketingAction
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*UserListActionInfo) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*UserListActionInfo_ConversionAction)(nil),
+		(*UserListActionInfo_RemarketingAction)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*SimilarUserListInfo)(nil), "google.ads.googleads.v3.common.SimilarUserListInfo")
+	proto.RegisterType((*CrmBasedUserListInfo)(nil), "google.ads.googleads.v3.common.CrmBasedUserListInfo")
+	proto.RegisterType((*UserListRuleInfo)(nil), "google.ads.googleads.v3.common.UserListRuleInfo")
+	proto.RegisterType((*UserListRuleItemGroupInfo)(nil), "google.ads.googleads.v3.common.UserListRuleItemGroupInfo")
+	proto.RegisterType((*UserListRuleItemInfo)(nil), "google.ads.googleads.v3.common.UserListRuleItemInfo")
+	proto.RegisterType((*UserListDateRuleItemInfo)(nil), "google.ads.googleads.v3.common.UserListDateRuleItemInfo")
+	proto.RegisterType((*UserListNumberRuleItemInfo)(nil), "google.ads.googleads.v3.common.UserListNumberRuleItemInfo")
+	proto.RegisterType((*UserListStringRuleItemInfo)(nil), "google.ads.googleads.v3.common.UserListStringRuleItemInfo")
+	proto.RegisterType((*CombinedRuleUserListInfo)(nil), "google.ads.googleads.v3.common.CombinedRuleUserListInfo")
+	proto.RegisterType((*DateSpecificRuleUserListInfo)(nil), "google.ads.googleads.v3.common.DateSpecificRuleUserListInfo")
+	proto.RegisterType((*ExpressionRuleUserListInfo)(nil), "google.ads.googleads.v3.common.ExpressionRuleUserListInfo")
+	proto.RegisterType((*RuleBasedUserListInfo)(nil), "google.ads.googleads.v3.common.RuleBasedUserListInfo")
+	proto.RegisterType((*LogicalUserListInfo)(nil), "google.ads.googleads.v3.common.LogicalUserListInfo")
+	proto.RegisterType((*UserListLogicalRuleInfo)(nil), "google.ads.googleads.v3.common.UserListLogicalRuleInfo")
+	proto.RegisterType((*LogicalUserListOperandInfo)(nil), "google.ads.googleads.v3.common.LogicalUserListOperandInfo")
+	proto.RegisterType((*BasicUserListInfo)(nil), "google.ads.googleads.v3.common.BasicUserListInfo")
+	proto.RegisterType((*UserListActionInfo)(nil), "google.ads.googleads.v3.common.UserListActionInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/user_lists.proto", fileDescriptor_b84b419434fa1b22)
+}
+
+var fileDescriptor_b84b419434fa1b22 = []byte{
+	// 1305 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x41, 0x6f, 0xdb, 0xb6,
+	0x17, 0x8f, 0x9c, 0xb4, 0x4d, 0x98, 0xd4, 0xff, 0x94, 0xcd, 0xbf, 0x75, 0xbd, 0xa0, 0x28, 0x74,
+	0xea, 0x49, 0x2e, 0xec, 0x62, 0x5d, 0xdd, 0x5d, 0xec, 0xb8, 0x48, 0x82, 0xb6, 0x6b, 0x21, 0xaf,
+	0xd9, 0x56, 0x04, 0x50, 0x69, 0x89, 0x76, 0x85, 0x4a, 0xa4, 0x46, 0x4a, 0x69, 0x0d, 0x0c, 0xc3,
+	0x76, 0xda, 0x61, 0xd8, 0x97, 0xd8, 0x71, 0xfb, 0x1a, 0x3b, 0xf5, 0x30, 0x60, 0xd7, 0x7d, 0x83,
+	0xed, 0xb8, 0x4f, 0x30, 0x90, 0xa2, 0x6c, 0xc9, 0x96, 0x12, 0xa6, 0xc5, 0x4e, 0xa6, 0xc8, 0xf7,
+	0x7e, 0xef, 0xc7, 0xc7, 0x1f, 0x1f, 0x49, 0x83, 0xd6, 0x84, 0xd2, 0x49, 0x80, 0x5b, 0xc8, 0xe3,
+	0xaa, 0x29, 0x5a, 0x27, 0x9d, 0x96, 0x4b, 0xc3, 0x90, 0x92, 0x56, 0xc2, 0x31, 0x73, 0x02, 0x9f,
+	0xc7, 0xdc, 0x8a, 0x18, 0x8d, 0x29, 0xbc, 0x99, 0x5a, 0x59, 0xc8, 0xe3, 0xd6, 0xcc, 0xc1, 0x3a,
+	0xe9, 0x58, 0xa9, 0x43, 0xb3, 0x5f, 0x05, 0x88, 0x49, 0x12, 0xf2, 0x96, 0x9b, 0xf0, 0x98, 0x86,
+	0x98, 0x39, 0x21, 0x8a, 0xdd, 0x57, 0x4e, 0x12, 0x05, 0x14, 0x79, 0xce, 0x6b, 0x3c, 0x75, 0xe2,
+	0x69, 0x84, 0xd3, 0x18, 0xcd, 0xc1, 0xe9, 0x18, 0x33, 0x4e, 0x8e, 0x4b, 0xc3, 0x91, 0x4f, 0xb0,
+	0xe7, 0xb0, 0x24, 0xc0, 0x0e, 0x8d, 0x30, 0x43, 0x31, 0x65, 0x0a, 0xa5, 0xaf, 0x8d, 0xc2, 0x42,
+	0xc7, 0x43, 0x31, 0x72, 0x38, 0x4d, 0x98, 0x8b, 0xf3, 0x4c, 0x1e, 0xea, 0x62, 0x78, 0x28, 0xc6,
+	0x29, 0x0b, 0x3f, 0xc6, 0xe1, 0x22, 0x95, 0x3d, 0x5d, 0x98, 0x80, 0x4e, 0x7c, 0x17, 0x05, 0xa5,
+	0xf3, 0xd9, 0xd7, 0x05, 0x21, 0x49, 0x38, 0xc2, 0xac, 0x9a, 0x8d, 0x76, 0x62, 0x22, 0x86, 0x23,
+	0x1a, 0x25, 0x01, 0x8a, 0x7d, 0x4a, 0x1c, 0x1e, 0xa3, 0x38, 0x51, 0x32, 0x68, 0xde, 0xd3, 0xc5,
+	0x90, 0x2c, 0x72, 0x19, 0xd5, 0x9e, 0x05, 0x8f, 0x99, 0x4f, 0x26, 0xd5, 0xb3, 0x50, 0x42, 0x6c,
+	0xc9, 0xaf, 0x51, 0x32, 0x6e, 0xbd, 0x61, 0x28, 0x8a, 0x30, 0xcb, 0x18, 0xee, 0x66, 0x81, 0x22,
+	0xbf, 0x85, 0x08, 0xa1, 0xb1, 0x9c, 0x85, 0x1a, 0x35, 0xbf, 0x02, 0x57, 0x87, 0x7e, 0xe8, 0x07,
+	0x88, 0x3d, 0xe7, 0x98, 0x3d, 0xf6, 0x79, 0x7c, 0x48, 0xc6, 0x14, 0xf6, 0x41, 0x9d, 0x63, 0xec,
+	0x39, 0x33, 0x1a, 0x0d, 0xe3, 0x96, 0x71, 0x7b, 0xb3, 0xbd, 0xab, 0xb4, 0x6e, 0x65, 0xd1, 0xac,
+	0xa1, 0xa4, 0x77, 0x84, 0x82, 0x04, 0xdb, 0x5b, 0xc2, 0x27, 0xc3, 0x31, 0xff, 0xa8, 0x81, 0x9d,
+	0x3d, 0x16, 0xf6, 0x11, 0x9f, 0x77, 0x4a, 0xf0, 0x0e, 0xb8, 0x88, 0xa2, 0xc8, 0xf1, 0x3d, 0x2d,
+	0xd0, 0x0b, 0x28, 0x8a, 0x0e, 0x3d, 0xf8, 0x9d, 0x01, 0xfe, 0xb7, 0xb0, 0x4b, 0x1a, 0xb5, 0x5b,
+	0xc6, 0xed, 0x7a, 0xfb, 0x4b, 0xab, 0x6a, 0x2b, 0xca, 0x54, 0x5a, 0x7b, 0x6a, 0xab, 0x3d, 0x11,
+	0x3b, 0xed, 0xb9, 0x84, 0x78, 0x84, 0xa7, 0x9f, 0x4f, 0x23, 0xfc, 0x90, 0x24, 0xe1, 0x29, 0xc3,
+	0xf6, 0xe5, 0x24, 0xff, 0x29, 0x28, 0x6c, 0x2f, 0xee, 0x8f, 0xc6, 0xaa, 0xe4, 0x70, 0x74, 0x06,
+	0x87, 0x6c, 0xfe, 0x7b, 0x2c, 0x1c, 0xa0, 0x18, 0x0d, 0x25, 0xc0, 0x8c, 0x42, 0xe5, 0xa8, 0x5d,
+	0xf7, 0x0a, 0xdf, 0xe6, 0x9f, 0x06, 0xd8, 0xce, 0xac, 0xed, 0x24, 0xc0, 0x32, 0x9f, 0x08, 0x6c,
+	0xcc, 0xd4, 0x25, 0x53, 0x5a, 0x6f, 0x0f, 0x34, 0xf9, 0x08, 0x8c, 0x25, 0x1a, 0x59, 0xa7, 0xbd,
+	0xce, 0x54, 0x0b, 0xba, 0x60, 0x7b, 0x2e, 0xc0, 0x09, 0xa3, 0x49, 0xc4, 0x1b, 0xb5, 0x5b, 0xab,
+	0xb7, 0x37, 0xdb, 0xf7, 0xad, 0xd3, 0x0b, 0x61, 0x01, 0xf5, 0x30, 0xc6, 0xe1, 0xbe, 0xf0, 0x16,
+	0xbc, 0xed, 0x3a, 0xcb, 0x77, 0x71, 0x33, 0x02, 0x37, 0x2a, 0x8d, 0xe1, 0x10, 0x80, 0x19, 0x03,
+	0xde, 0x30, 0x64, 0xec, 0xbb, 0xe7, 0x8d, 0x2d, 0xc3, 0x6e, 0x64, 0x61, 0xb9, 0xf9, 0xc3, 0x2a,
+	0xd8, 0x29, 0xb3, 0x81, 0x77, 0xc0, 0x1a, 0x41, 0x21, 0xd6, 0x12, 0xa8, 0xb4, 0x84, 0x63, 0xb0,
+	0xbd, 0x58, 0x6f, 0xa4, 0x3e, 0x37, 0xdb, 0x5d, 0x5d, 0x96, 0x9f, 0x49, 0xff, 0x3c, 0x8f, 0x83,
+	0x15, 0xbb, 0x4e, 0x0a, 0xbd, 0x22, 0xce, 0x62, 0x45, 0x90, 0x1a, 0x3c, 0x47, 0x9c, 0x94, 0xfc,
+	0x62, 0x1c, 0x5e, 0xe8, 0x85, 0x2f, 0x41, 0xbd, 0x58, 0xcb, 0x1b, 0x6b, 0x32, 0xca, 0x27, 0xba,
+	0x51, 0x06, 0x28, 0xc6, 0x0b, 0x31, 0xb6, 0xbc, 0x5c, 0x5f, 0x7f, 0x53, 0xc9, 0x56, 0x80, 0x9b,
+	0x3f, 0xd6, 0x40, 0xa3, 0xca, 0x13, 0xbe, 0x05, 0xeb, 0x59, 0xd1, 0x53, 0xfa, 0x3e, 0xd6, 0xd4,
+	0x77, 0x1e, 0xea, 0xa9, 0x82, 0x28, 0x68, 0xbd, 0xcc, 0xc0, 0x9e, 0x45, 0x83, 0x6d, 0x70, 0xe1,
+	0x44, 0x2c, 0xb2, 0x5a, 0xca, 0x33, 0x2a, 0x95, 0x34, 0x85, 0x3d, 0x50, 0xa7, 0xe3, 0x31, 0xc7,
+	0xb1, 0xe3, 0x13, 0xc7, 0x43, 0x53, 0xae, 0xd6, 0xe7, 0xa3, 0x25, 0xe7, 0x43, 0x12, 0x7f, 0x7c,
+	0x57, 0x95, 0xce, 0xd4, 0xe5, 0x90, 0x0c, 0xd0, 0x94, 0x9b, 0xbf, 0x1b, 0xa0, 0x59, 0xad, 0x0a,
+	0xf8, 0xcd, 0x52, 0x3e, 0x5e, 0x6a, 0xe6, 0xa3, 0x08, 0x56, 0x9a, 0x91, 0x72, 0x93, 0xf3, 0xe4,
+	0x64, 0x40, 0x93, 0x51, 0x80, 0xf3, 0x39, 0x29, 0x4c, 0x68, 0x59, 0x7e, 0x1f, 0x30, 0xa1, 0x22,
+	0x58, 0xe9, 0x84, 0xca, 0x4d, 0x3e, 0x6c, 0x91, 0xcd, 0x77, 0x35, 0xd0, 0xd8, 0x53, 0xb7, 0x2e,
+	0x01, 0x5d, 0x38, 0xe0, 0x86, 0x60, 0x2b, 0xc0, 0xe3, 0x38, 0x3d, 0xa9, 0x49, 0x76, 0xcc, 0xdd,
+	0x39, 0x57, 0xb5, 0x12, 0x95, 0x6a, 0x53, 0xa0, 0x3c, 0x4d, 0x41, 0xe0, 0x73, 0x70, 0x99, 0xf9,
+	0x93, 0x57, 0x73, 0xd4, 0xda, 0x7b, 0xa2, 0x6e, 0x49, 0x98, 0x0c, 0xf6, 0x7b, 0x03, 0x5c, 0x2e,
+	0xdc, 0xb2, 0xd4, 0x89, 0xa6, 0xbb, 0xc3, 0xf2, 0x49, 0x28, 0x4d, 0x7f, 0x99, 0x81, 0xbd, 0xc5,
+	0x72, 0x5f, 0xe2, 0x54, 0xdb, 0x15, 0x1b, 0x71, 0x18, 0x61, 0xd7, 0x1f, 0xfb, 0xee, 0x52, 0x42,
+	0x07, 0x60, 0x4d, 0x38, 0xbc, 0x77, 0x22, 0xa5, 0x37, 0x7c, 0x00, 0x00, 0x8f, 0x11, 0x4b, 0x2f,
+	0xa9, 0x5a, 0x8b, 0xbd, 0x21, 0xed, 0x05, 0x35, 0x78, 0x0f, 0xac, 0x63, 0xe2, 0xa5, 0xae, 0xab,
+	0x1a, 0xae, 0x97, 0x30, 0xf1, 0x84, 0xa3, 0x39, 0x02, 0xcd, 0x87, 0x6f, 0x23, 0x86, 0x39, 0xf7,
+	0x29, 0xf9, 0x6f, 0x66, 0x66, 0xfe, 0xba, 0x06, 0xfe, 0x2f, 0xba, 0x96, 0xef, 0x5a, 0x3f, 0x19,
+	0x60, 0xa7, 0xec, 0xfa, 0xaa, 0xb6, 0xd9, 0x0b, 0xcd, 0x55, 0x7e, 0x96, 0x87, 0x18, 0x4a, 0x84,
+	0xc2, 0x22, 0x97, 0x8c, 0xdb, 0x57, 0xa3, 0xe5, 0x4e, 0xf8, 0x35, 0xb8, 0x5e, 0x7c, 0xac, 0xcc,
+	0x6f, 0x98, 0x35, 0xbd, 0xf3, 0xa5, 0x6a, 0xd7, 0x1d, 0xac, 0xd8, 0x3b, 0x6e, 0xc9, 0x18, 0xfc,
+	0x16, 0xec, 0xca, 0x93, 0x8c, 0x2b, 0x75, 0x2d, 0xc6, 0x4d, 0x57, 0xf3, 0xd3, 0xb3, 0xe2, 0x9e,
+	0x26, 0xd0, 0x83, 0x15, 0xbb, 0xe1, 0x55, 0x8c, 0xc3, 0x37, 0xe0, 0x06, 0x9e, 0x09, 0x60, 0x31,
+	0xf8, 0x9a, 0xde, 0xd1, 0x5d, 0xad, 0xa0, 0x83, 0x15, 0xfb, 0x1a, 0x2e, 0x1d, 0xed, 0x5f, 0x03,
+	0x3b, 0x32, 0xda, 0x48, 0xa8, 0x62, 0x1e, 0xd3, 0xf4, 0xc0, 0xd5, 0xc7, 0xe9, 0xfb, 0xaa, 0x20,
+	0x95, 0x27, 0xe0, 0x82, 0x30, 0xcf, 0x2e, 0x57, 0xf7, 0x74, 0xb5, 0xa8, 0xb0, 0x66, 0x92, 0x4c,
+	0x51, 0xcc, 0x7f, 0x0c, 0x70, 0xbd, 0xc2, 0x04, 0x9e, 0x2c, 0xd5, 0x7b, 0x5d, 0x21, 0xe6, 0x90,
+	0x4a, 0xab, 0x4d, 0xc9, 0x78, 0xae, 0xd2, 0x3b, 0xf9, 0x5a, 0x47, 0xbc, 0xec, 0x0e, 0x7b, 0x66,
+	0xfa, 0x17, 0xd2, 0xa5, 0x6a, 0xa7, 0xaa, 0xa6, 0x59, 0x28, 0xe2, 0x71, 0xf3, 0x0b, 0xd0, 0xac,
+	0xb6, 0x85, 0xf7, 0xc1, 0xc6, 0xf9, 0x1e, 0x54, 0xeb, 0x49, 0xf6, 0x98, 0x42, 0xe0, 0x4a, 0x1f,
+	0x71, 0xdf, 0x2d, 0xac, 0xd8, 0x63, 0x70, 0x09, 0xb9, 0xf2, 0x35, 0xa7, 0xd6, 0xac, 0xad, 0xbb,
+	0x66, 0x3d, 0xe9, 0x26, 0x27, 0x90, 0x41, 0x98, 0xbf, 0x19, 0x00, 0x2e, 0x8f, 0xc3, 0x47, 0xe0,
+	0x8a, 0x4b, 0xc9, 0x09, 0x66, 0x52, 0xbe, 0xa9, 0xb1, 0x0e, 0xf9, 0x83, 0x15, 0x7b, 0x7b, 0xee,
+	0x98, 0x02, 0xc2, 0x27, 0x00, 0x32, 0x1c, 0x22, 0xf6, 0x1a, 0xc7, 0xe2, 0x0a, 0xab, 0xd0, 0x6a,
+	0x5a, 0x68, 0x57, 0x72, 0x9e, 0x29, 0x5c, 0x1f, 0x82, 0xed, 0xf9, 0x43, 0x39, 0x05, 0xeb, 0xff,
+	0x65, 0x00, 0xd3, 0xa5, 0xe1, 0x19, 0x99, 0xe8, 0xd7, 0xb3, 0xa9, 0xf2, 0x67, 0x22, 0xdc, 0x33,
+	0xe3, 0x85, 0xfa, 0xb7, 0xc5, 0x9a, 0xd0, 0x00, 0x91, 0x89, 0x45, 0xd9, 0xa4, 0x35, 0xc1, 0x44,
+	0x92, 0xc9, 0x5e, 0xe8, 0x91, 0xcf, 0xab, 0xfe, 0x21, 0x7a, 0x90, 0xfe, 0xfc, 0x5c, 0x5b, 0xdd,
+	0xef, 0xf5, 0x7e, 0xa9, 0xdd, 0xdc, 0x4f, 0xc1, 0x7a, 0x1e, 0xb7, 0xd2, 0xa6, 0x68, 0x1d, 0x75,
+	0x44, 0xf9, 0x0a, 0x29, 0x79, 0x97, 0x19, 0x1c, 0xf7, 0x3c, 0x7e, 0x3c, 0x33, 0x38, 0x3e, 0xea,
+	0x1c, 0xa7, 0x06, 0x7f, 0xd7, 0xcc, 0xb4, 0xb7, 0xdb, 0xed, 0x79, 0xbc, 0xdb, 0x9d, 0x99, 0x74,
+	0xbb, 0x47, 0x9d, 0x6e, 0x37, 0x35, 0x1a, 0x5d, 0x94, 0xec, 0x3a, 0xff, 0x06, 0x00, 0x00, 0xff,
+	0xff, 0x32, 0xc1, 0x74, 0x46, 0xbe, 0x12, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/common/value.pb.go b/googleapis/ads/googleads/v3/common/value.pb.go
new file mode 100644
index 0000000..03efc4e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/common/value.pb.go
@@ -0,0 +1,184 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/common/value.proto
+
+package common
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A generic data container.
+type Value struct {
+	// A value.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*Value_BooleanValue
+	//	*Value_Int64Value
+	//	*Value_FloatValue
+	//	*Value_DoubleValue
+	//	*Value_StringValue
+	Value                isValue_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *Value) Reset()         { *m = Value{} }
+func (m *Value) String() string { return proto.CompactTextString(m) }
+func (*Value) ProtoMessage()    {}
+func (*Value) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a73d72db515a577a, []int{0}
+}
+
+func (m *Value) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Value.Unmarshal(m, b)
+}
+func (m *Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Value.Marshal(b, m, deterministic)
+}
+func (m *Value) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Value.Merge(m, src)
+}
+func (m *Value) XXX_Size() int {
+	return xxx_messageInfo_Value.Size(m)
+}
+func (m *Value) XXX_DiscardUnknown() {
+	xxx_messageInfo_Value.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Value proto.InternalMessageInfo
+
+type isValue_Value interface {
+	isValue_Value()
+}
+
+type Value_BooleanValue struct {
+	BooleanValue bool `protobuf:"varint,1,opt,name=boolean_value,json=booleanValue,proto3,oneof"`
+}
+
+type Value_Int64Value struct {
+	Int64Value int64 `protobuf:"varint,2,opt,name=int64_value,json=int64Value,proto3,oneof"`
+}
+
+type Value_FloatValue struct {
+	FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3,oneof"`
+}
+
+type Value_DoubleValue struct {
+	DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3,oneof"`
+}
+
+type Value_StringValue struct {
+	StringValue string `protobuf:"bytes,5,opt,name=string_value,json=stringValue,proto3,oneof"`
+}
+
+func (*Value_BooleanValue) isValue_Value() {}
+
+func (*Value_Int64Value) isValue_Value() {}
+
+func (*Value_FloatValue) isValue_Value() {}
+
+func (*Value_DoubleValue) isValue_Value() {}
+
+func (*Value_StringValue) isValue_Value() {}
+
+func (m *Value) GetValue() isValue_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *Value) GetBooleanValue() bool {
+	if x, ok := m.GetValue().(*Value_BooleanValue); ok {
+		return x.BooleanValue
+	}
+	return false
+}
+
+func (m *Value) GetInt64Value() int64 {
+	if x, ok := m.GetValue().(*Value_Int64Value); ok {
+		return x.Int64Value
+	}
+	return 0
+}
+
+func (m *Value) GetFloatValue() float32 {
+	if x, ok := m.GetValue().(*Value_FloatValue); ok {
+		return x.FloatValue
+	}
+	return 0
+}
+
+func (m *Value) GetDoubleValue() float64 {
+	if x, ok := m.GetValue().(*Value_DoubleValue); ok {
+		return x.DoubleValue
+	}
+	return 0
+}
+
+func (m *Value) GetStringValue() string {
+	if x, ok := m.GetValue().(*Value_StringValue); ok {
+		return x.StringValue
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Value) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Value_BooleanValue)(nil),
+		(*Value_Int64Value)(nil),
+		(*Value_FloatValue)(nil),
+		(*Value_DoubleValue)(nil),
+		(*Value_StringValue)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*Value)(nil), "google.ads.googleads.v3.common.Value")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/common/value.proto", fileDescriptor_a73d72db515a577a)
+}
+
+var fileDescriptor_a73d72db515a577a = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd1, 0x4f, 0x4b, 0xc3, 0x30,
+	0x18, 0x06, 0xf0, 0xa5, 0x73, 0xfe, 0xc9, 0xe6, 0x65, 0x27, 0x11, 0x19, 0x75, 0x22, 0x14, 0x0f,
+	0xe9, 0xa1, 0xe2, 0x21, 0x9e, 0x3a, 0x85, 0xed, 0x38, 0x76, 0xe8, 0x41, 0x0a, 0x92, 0xad, 0x35,
+	0x14, 0xb2, 0xbc, 0x63, 0xc9, 0xf6, 0x81, 0x3c, 0xfa, 0x45, 0x04, 0xbf, 0x87, 0x17, 0x3f, 0x85,
+	0x24, 0x6f, 0xd6, 0x9b, 0x9e, 0xfa, 0xf2, 0xf4, 0x97, 0x87, 0xf6, 0x0d, 0xbd, 0x93, 0x00, 0x52,
+	0xd5, 0xa9, 0xa8, 0x4c, 0x8a, 0xa3, 0x9b, 0xf6, 0x59, 0xba, 0x82, 0xf5, 0x1a, 0x74, 0xba, 0x17,
+	0x6a, 0x57, 0xb3, 0xcd, 0x16, 0x2c, 0x0c, 0x47, 0x08, 0x98, 0xa8, 0x0c, 0x6b, 0x2d, 0xdb, 0x67,
+	0x0c, 0xed, 0xe5, 0xd5, 0xa1, 0x6b, 0xd3, 0xa4, 0x42, 0x6b, 0xb0, 0xc2, 0x36, 0xa0, 0x0d, 0x9e,
+	0x1e, 0x7f, 0x12, 0xda, 0x2b, 0x5c, 0xdb, 0xf0, 0x96, 0x9e, 0x2f, 0x01, 0x54, 0x2d, 0xf4, 0xab,
+	0xaf, 0xbf, 0x20, 0x31, 0x49, 0x4e, 0x67, 0x9d, 0xc5, 0x20, 0xc4, 0xc8, 0xae, 0x69, 0xbf, 0xd1,
+	0xf6, 0xe1, 0x3e, 0xa0, 0x28, 0x26, 0x49, 0x77, 0xd6, 0x59, 0x50, 0x1f, 0xb6, 0xe4, 0x4d, 0x81,
+	0xb0, 0x81, 0x74, 0x63, 0x92, 0x44, 0x8e, 0xf8, 0x10, 0xc9, 0x0d, 0x1d, 0x54, 0xb0, 0x5b, 0xaa,
+	0x3a, 0x98, 0xa3, 0x98, 0x24, 0x64, 0xd6, 0x59, 0xf4, 0x31, 0x6d, 0x91, 0xb1, 0xdb, 0x46, 0xcb,
+	0x80, 0x7a, 0x31, 0x49, 0xce, 0x1c, 0xc2, 0xd4, 0xa3, 0xc9, 0x09, 0xed, 0xf9, 0xb7, 0x93, 0x6f,
+	0x42, 0xc7, 0x2b, 0x58, 0xb3, 0xff, 0xd7, 0x31, 0xa1, 0xfe, 0xd8, 0xdc, 0xfd, 0xfc, 0x9c, 0xbc,
+	0x3c, 0x07, 0x2d, 0x41, 0x09, 0x2d, 0x19, 0x6c, 0x65, 0x2a, 0x6b, 0xed, 0x57, 0x73, 0x58, 0xfc,
+	0xa6, 0x31, 0x7f, 0xdd, 0xc3, 0x23, 0x3e, 0xde, 0xa3, 0xee, 0x34, 0xcf, 0x3f, 0xa2, 0xd1, 0x14,
+	0xcb, 0xf2, 0xca, 0x30, 0x1c, 0xdd, 0x54, 0x64, 0xec, 0xc9, 0xb3, 0xaf, 0x03, 0x28, 0xf3, 0xca,
+	0x94, 0x2d, 0x28, 0x8b, 0xac, 0x44, 0xf0, 0x13, 0x8d, 0x31, 0xe5, 0x3c, 0xaf, 0x0c, 0xe7, 0x2d,
+	0xe1, 0xbc, 0xc8, 0x38, 0x47, 0xb4, 0x3c, 0xf6, 0x5f, 0x97, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff,
+	0x12, 0x9e, 0x55, 0x7b, 0x24, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/access_reason.pb.go b/googleapis/ads/googleads/v3/enums/access_reason.pb.go
new file mode 100644
index 0000000..d7bc880
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/access_reason.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/access_reason.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible access reasons.
+type AccessReasonEnum_AccessReason int32
+
+const (
+	// Not specified.
+	AccessReasonEnum_UNSPECIFIED AccessReasonEnum_AccessReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccessReasonEnum_UNKNOWN AccessReasonEnum_AccessReason = 1
+	// The resource is owned by the user.
+	AccessReasonEnum_OWNED AccessReasonEnum_AccessReason = 2
+	// The resource is shared to the user.
+	AccessReasonEnum_SHARED AccessReasonEnum_AccessReason = 3
+	// The resource is licensed to the user.
+	AccessReasonEnum_LICENSED AccessReasonEnum_AccessReason = 4
+	// The user subscribed to the resource.
+	AccessReasonEnum_SUBSCRIBED AccessReasonEnum_AccessReason = 5
+	// The resource is accessible to the user.
+	AccessReasonEnum_AFFILIATED AccessReasonEnum_AccessReason = 6
+)
+
+var AccessReasonEnum_AccessReason_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OWNED",
+	3: "SHARED",
+	4: "LICENSED",
+	5: "SUBSCRIBED",
+	6: "AFFILIATED",
+}
+
+var AccessReasonEnum_AccessReason_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"OWNED":       2,
+	"SHARED":      3,
+	"LICENSED":    4,
+	"SUBSCRIBED":  5,
+	"AFFILIATED":  6,
+}
+
+func (x AccessReasonEnum_AccessReason) String() string {
+	return proto.EnumName(AccessReasonEnum_AccessReason_name, int32(x))
+}
+
+func (AccessReasonEnum_AccessReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6898016474772933, []int{0, 0}
+}
+
+// Indicates the way the resource such as user list is related to a user.
+type AccessReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccessReasonEnum) Reset()         { *m = AccessReasonEnum{} }
+func (m *AccessReasonEnum) String() string { return proto.CompactTextString(m) }
+func (*AccessReasonEnum) ProtoMessage()    {}
+func (*AccessReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6898016474772933, []int{0}
+}
+
+func (m *AccessReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccessReasonEnum.Unmarshal(m, b)
+}
+func (m *AccessReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccessReasonEnum.Marshal(b, m, deterministic)
+}
+func (m *AccessReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccessReasonEnum.Merge(m, src)
+}
+func (m *AccessReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_AccessReasonEnum.Size(m)
+}
+func (m *AccessReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccessReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccessReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AccessReasonEnum_AccessReason", AccessReasonEnum_AccessReason_name, AccessReasonEnum_AccessReason_value)
+	proto.RegisterType((*AccessReasonEnum)(nil), "google.ads.googleads.v3.enums.AccessReasonEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/access_reason.proto", fileDescriptor_6898016474772933)
+}
+
+var fileDescriptor_6898016474772933 = []byte{
+	// 336 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xd1, 0x4e, 0xf2, 0x30,
+	0x18, 0xfd, 0x37, 0x7e, 0x50, 0x0b, 0xd1, 0xda, 0x4b, 0x23, 0x17, 0xf0, 0x00, 0x5d, 0xcc, 0xee,
+	0xea, 0x55, 0xc7, 0x0a, 0x2e, 0x92, 0x41, 0x98, 0x40, 0x62, 0x96, 0x98, 0xca, 0x96, 0x85, 0x04,
+	0x5a, 0xe4, 0x03, 0xde, 0xc0, 0x17, 0xf1, 0xd2, 0x47, 0xf1, 0x41, 0xbc, 0xf0, 0x29, 0xcc, 0x5a,
+	0x21, 0xdc, 0xe8, 0x4d, 0x73, 0xfa, 0x7d, 0xe7, 0x9c, 0x7c, 0xe7, 0xa0, 0x9b, 0x42, 0xeb, 0x62,
+	0x91, 0x7b, 0x32, 0x03, 0xcf, 0xc2, 0x12, 0xed, 0x7c, 0x2f, 0x57, 0xdb, 0x25, 0x78, 0x72, 0x36,
+	0xcb, 0x01, 0x9e, 0xd6, 0xb9, 0x04, 0xad, 0xe8, 0x6a, 0xad, 0x37, 0x9a, 0x34, 0x2d, 0x8f, 0xca,
+	0x0c, 0xe8, 0x41, 0x42, 0x77, 0x3e, 0x35, 0x92, 0xab, 0xeb, 0xbd, 0xe3, 0x6a, 0xee, 0x49, 0xa5,
+	0xf4, 0x46, 0x6e, 0xe6, 0x5a, 0x81, 0x15, 0xb7, 0x5f, 0x1d, 0x84, 0xb9, 0x31, 0x1d, 0x19, 0x4f,
+	0xa1, 0xb6, 0xcb, 0xf6, 0x0b, 0x6a, 0x1c, 0xcf, 0xc8, 0x05, 0xaa, 0x8f, 0xe3, 0x64, 0x28, 0x3a,
+	0x51, 0x37, 0x12, 0x21, 0xfe, 0x47, 0xea, 0xe8, 0x64, 0x1c, 0xdf, 0xc7, 0x83, 0x69, 0x8c, 0x1d,
+	0x72, 0x86, 0xaa, 0x83, 0x69, 0x2c, 0x42, 0xec, 0x12, 0x84, 0x6a, 0xc9, 0x1d, 0x1f, 0x89, 0x10,
+	0x57, 0x48, 0x03, 0x9d, 0xf6, 0xa3, 0x8e, 0x88, 0x13, 0x11, 0xe2, 0xff, 0xe4, 0x1c, 0xa1, 0x64,
+	0x1c, 0x24, 0x9d, 0x51, 0x14, 0x88, 0x10, 0x57, 0xcb, 0x3f, 0xef, 0x76, 0xa3, 0x7e, 0xc4, 0x1f,
+	0x44, 0x88, 0x6b, 0xc1, 0xa7, 0x83, 0x5a, 0x33, 0xbd, 0xa4, 0x7f, 0x66, 0x09, 0x2e, 0x8f, 0xcf,
+	0x1a, 0x96, 0x01, 0x86, 0xce, 0x63, 0xf0, 0xa3, 0x29, 0xf4, 0x42, 0xaa, 0x82, 0xea, 0x75, 0xe1,
+	0x15, 0xb9, 0x32, 0xf1, 0xf6, 0x15, 0xae, 0xe6, 0xf0, 0x4b, 0xa3, 0xb7, 0xe6, 0x7d, 0x73, 0x2b,
+	0x3d, 0xce, 0xdf, 0xdd, 0x66, 0xcf, 0x5a, 0xf1, 0x0c, 0xa8, 0x85, 0x25, 0x9a, 0xf8, 0xb4, 0xac,
+	0x05, 0x3e, 0xf6, 0xfb, 0x94, 0x67, 0x90, 0x1e, 0xf6, 0xe9, 0xc4, 0x4f, 0xcd, 0xfe, 0xcb, 0x6d,
+	0xd9, 0x21, 0x63, 0x3c, 0x03, 0xc6, 0x0e, 0x0c, 0xc6, 0x26, 0x3e, 0x63, 0x86, 0xf3, 0x5c, 0x33,
+	0x87, 0xf9, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x6d, 0xce, 0xd8, 0xe9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/access_role.pb.go b/googleapis/ads/googleads/v3/enums/access_role.pb.go
new file mode 100644
index 0000000..29c0fc3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/access_role.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/access_role.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible access role of a user.
+type AccessRoleEnum_AccessRole int32
+
+const (
+	// Not specified.
+	AccessRoleEnum_UNSPECIFIED AccessRoleEnum_AccessRole = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccessRoleEnum_UNKNOWN AccessRoleEnum_AccessRole = 1
+	// Owns its account and can control the addition of other users.
+	AccessRoleEnum_ADMIN AccessRoleEnum_AccessRole = 2
+	// Can modify campaigns, but can't affect other users.
+	AccessRoleEnum_STANDARD AccessRoleEnum_AccessRole = 3
+	// Can view campaigns and account changes, but cannot make edits.
+	AccessRoleEnum_READ_ONLY AccessRoleEnum_AccessRole = 4
+)
+
+var AccessRoleEnum_AccessRole_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADMIN",
+	3: "STANDARD",
+	4: "READ_ONLY",
+}
+
+var AccessRoleEnum_AccessRole_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADMIN":       2,
+	"STANDARD":    3,
+	"READ_ONLY":   4,
+}
+
+func (x AccessRoleEnum_AccessRole) String() string {
+	return proto.EnumName(AccessRoleEnum_AccessRole_name, int32(x))
+}
+
+func (AccessRoleEnum_AccessRole) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ea219286496feae1, []int{0, 0}
+}
+
+// Container for enum describing possible access role for user.
+type AccessRoleEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccessRoleEnum) Reset()         { *m = AccessRoleEnum{} }
+func (m *AccessRoleEnum) String() string { return proto.CompactTextString(m) }
+func (*AccessRoleEnum) ProtoMessage()    {}
+func (*AccessRoleEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ea219286496feae1, []int{0}
+}
+
+func (m *AccessRoleEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccessRoleEnum.Unmarshal(m, b)
+}
+func (m *AccessRoleEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccessRoleEnum.Marshal(b, m, deterministic)
+}
+func (m *AccessRoleEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccessRoleEnum.Merge(m, src)
+}
+func (m *AccessRoleEnum) XXX_Size() int {
+	return xxx_messageInfo_AccessRoleEnum.Size(m)
+}
+func (m *AccessRoleEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccessRoleEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccessRoleEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AccessRoleEnum_AccessRole", AccessRoleEnum_AccessRole_name, AccessRoleEnum_AccessRole_value)
+	proto.RegisterType((*AccessRoleEnum)(nil), "google.ads.googleads.v3.enums.AccessRoleEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/access_role.proto", fileDescriptor_ea219286496feae1)
+}
+
+var fileDescriptor_ea219286496feae1 = []byte{
+	// 307 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0x02, 0x31,
+	0x14, 0x96, 0xc1, 0x3f, 0x8a, 0xca, 0xa4, 0x4b, 0x23, 0x0b, 0x38, 0x40, 0xbb, 0xe8, 0xae, 0xae,
+	0x8a, 0x33, 0x12, 0xa2, 0x16, 0x32, 0x08, 0x46, 0x33, 0x09, 0xa9, 0xb4, 0x69, 0x48, 0x86, 0x96,
+	0x50, 0xe0, 0x40, 0x2e, 0x3d, 0x8a, 0xe7, 0x70, 0xe5, 0x29, 0xcc, 0x74, 0x98, 0x61, 0xa5, 0x9b,
+	0xe6, 0xcb, 0xfb, 0x7e, 0xfa, 0xbd, 0x07, 0xb0, 0xb6, 0x56, 0x67, 0x0a, 0x0b, 0xe9, 0xf6, 0x30,
+	0x47, 0x3b, 0x82, 0x95, 0xd9, 0x2e, 0x1d, 0x16, 0xf3, 0xb9, 0x72, 0x6e, 0xb6, 0xb6, 0x99, 0x42,
+	0xab, 0xb5, 0xdd, 0x58, 0xd8, 0x2e, 0x54, 0x48, 0x48, 0x87, 0x2a, 0x03, 0xda, 0x11, 0xe4, 0x0d,
+	0xd7, 0x37, 0x65, 0xde, 0x6a, 0x81, 0x85, 0x31, 0x76, 0x23, 0x36, 0x0b, 0x6b, 0x5c, 0x61, 0xee,
+	0x4a, 0x70, 0xc5, 0x7c, 0x62, 0x62, 0x33, 0x15, 0x9b, 0xed, 0xb2, 0x9b, 0x00, 0x70, 0x98, 0xc0,
+	0x16, 0x68, 0x4e, 0xf8, 0x78, 0x14, 0xdf, 0x0d, 0xee, 0x07, 0x71, 0x14, 0x1e, 0xc1, 0x26, 0x38,
+	0x9b, 0xf0, 0x07, 0x3e, 0x7c, 0xe1, 0x61, 0x0d, 0x36, 0xc0, 0x09, 0x8b, 0x9e, 0x06, 0x3c, 0x0c,
+	0xe0, 0x05, 0x38, 0x1f, 0x3f, 0x33, 0x1e, 0xb1, 0x24, 0x0a, 0xeb, 0xf0, 0x12, 0x34, 0x92, 0x98,
+	0x45, 0xb3, 0x21, 0x7f, 0x7c, 0x0d, 0x8f, 0x7b, 0xdf, 0x35, 0xd0, 0x99, 0xdb, 0x25, 0xfa, 0xb7,
+	0x69, 0xaf, 0x75, 0xf8, 0x77, 0x94, 0x97, 0x1b, 0xd5, 0xde, 0x7a, 0x7b, 0x87, 0xb6, 0x99, 0x30,
+	0x1a, 0xd9, 0xb5, 0xc6, 0x5a, 0x19, 0x5f, 0xbd, 0x3c, 0xce, 0x6a, 0xe1, 0xfe, 0xb8, 0xd5, 0xad,
+	0x7f, 0x3f, 0x82, 0x7a, 0x9f, 0xb1, 0xcf, 0xa0, 0xdd, 0x2f, 0xa2, 0x98, 0x74, 0xa8, 0x80, 0x39,
+	0x9a, 0x12, 0x94, 0x6f, 0xed, 0xbe, 0x4a, 0x3e, 0x65, 0xd2, 0xa5, 0x15, 0x9f, 0x4e, 0x49, 0xea,
+	0xf9, 0x9f, 0xa0, 0x53, 0x0c, 0x29, 0x65, 0xd2, 0x51, 0x5a, 0x29, 0x28, 0x9d, 0x12, 0x4a, 0xbd,
+	0xe6, 0xfd, 0xd4, 0x17, 0x23, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0xb4, 0x06, 0xdb, 0xc3,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/account_budget_proposal_status.pb.go b/googleapis/ads/googleads/v3/enums/account_budget_proposal_status.pb.go
new file mode 100644
index 0000000..a0c3144
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/account_budget_proposal_status.pb.go
@@ -0,0 +1,143 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/account_budget_proposal_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of an AccountBudgetProposal.
+type AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus int32
+
+const (
+	// Not specified.
+	AccountBudgetProposalStatusEnum_UNSPECIFIED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetProposalStatusEnum_UNKNOWN AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 1
+	// The proposal is pending approval.
+	AccountBudgetProposalStatusEnum_PENDING AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 2
+	// The proposal has been approved but the corresponding billing setup
+	// has not.  This can occur for proposals that set up the first budget
+	// when signing up for billing or when performing a change of bill-to
+	// operation.
+	AccountBudgetProposalStatusEnum_APPROVED_HELD AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 3
+	// The proposal has been approved.
+	AccountBudgetProposalStatusEnum_APPROVED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 4
+	// The proposal has been cancelled by the user.
+	AccountBudgetProposalStatusEnum_CANCELLED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 5
+	// The proposal has been rejected by the user, e.g. by rejecting an
+	// acceptance email.
+	AccountBudgetProposalStatusEnum_REJECTED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 6
+)
+
+var AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED_HELD",
+	4: "APPROVED",
+	5: "CANCELLED",
+	6: "REJECTED",
+}
+
+var AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"PENDING":       2,
+	"APPROVED_HELD": 3,
+	"APPROVED":      4,
+	"CANCELLED":     5,
+	"REJECTED":      6,
+}
+
+func (x AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus) String() string {
+	return proto.EnumName(AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name, int32(x))
+}
+
+func (AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0efe433c1cc6a5f9, []int{0, 0}
+}
+
+// Message describing AccountBudgetProposal statuses.
+type AccountBudgetProposalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalStatusEnum) Reset()         { *m = AccountBudgetProposalStatusEnum{} }
+func (m *AccountBudgetProposalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalStatusEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0efe433c1cc6a5f9, []int{0}
+}
+
+func (m *AccountBudgetProposalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalStatusEnum.Merge(m, src)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Size(m)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus", AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name, AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_value)
+	proto.RegisterType((*AccountBudgetProposalStatusEnum)(nil), "google.ads.googleads.v3.enums.AccountBudgetProposalStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/account_budget_proposal_status.proto", fileDescriptor_0efe433c1cc6a5f9)
+}
+
+var fileDescriptor_0efe433c1cc6a5f9 = []byte{
+	// 356 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x6e, 0xe2, 0x30,
+	0x10, 0xdd, 0x84, 0x5d, 0x76, 0xd7, 0x14, 0x35, 0xcd, 0xb1, 0x2d, 0x6a, 0xe1, 0x03, 0x9c, 0x43,
+	0x6e, 0xee, 0xc9, 0x49, 0x5c, 0x4a, 0x8b, 0x42, 0x04, 0x25, 0x95, 0xaa, 0x48, 0x91, 0x21, 0x91,
+	0x85, 0x04, 0x76, 0x84, 0x1d, 0x3e, 0xa1, 0x1f, 0xd2, 0x23, 0x9f, 0xd2, 0x4f, 0xe9, 0xbd, 0xf7,
+	0x2a, 0x0e, 0xe1, 0x56, 0x2e, 0xd6, 0xf3, 0xbc, 0x99, 0x79, 0x33, 0x6f, 0x80, 0xc7, 0x84, 0x60,
+	0xeb, 0xdc, 0xa1, 0x99, 0x74, 0x6a, 0x58, 0xa1, 0x9d, 0xeb, 0xe4, 0xbc, 0xdc, 0x48, 0x87, 0x2e,
+	0x97, 0xa2, 0xe4, 0x2a, 0x5d, 0x94, 0x19, 0xcb, 0x55, 0x5a, 0x6c, 0x45, 0x21, 0x24, 0x5d, 0xa7,
+	0x52, 0x51, 0x55, 0x4a, 0x58, 0x6c, 0x85, 0x12, 0x76, 0xaf, 0x2e, 0x84, 0x34, 0x93, 0xf0, 0xd8,
+	0x03, 0xee, 0x5c, 0xa8, 0x7b, 0x5c, 0x5e, 0x37, 0x12, 0xc5, 0xca, 0xa1, 0x9c, 0x0b, 0x45, 0xd5,
+	0x4a, 0xf0, 0x43, 0xf1, 0x60, 0x6f, 0x80, 0x1b, 0x5c, 0xab, 0x78, 0x5a, 0x24, 0x3a, 0x68, 0xcc,
+	0xb4, 0x04, 0xe1, 0xe5, 0x66, 0xf0, 0x66, 0x80, 0xab, 0x13, 0x39, 0xf6, 0x39, 0xe8, 0xcc, 0xc3,
+	0x59, 0x44, 0xfc, 0xd1, 0xfd, 0x88, 0x04, 0xd6, 0x2f, 0xbb, 0x03, 0xfe, 0xce, 0xc3, 0xa7, 0x70,
+	0xf2, 0x12, 0x5a, 0x46, 0xf5, 0x89, 0x48, 0x18, 0x8c, 0xc2, 0xa1, 0x65, 0xda, 0x17, 0xa0, 0x8b,
+	0xa3, 0x68, 0x3a, 0x89, 0x49, 0x90, 0x3e, 0x90, 0x71, 0x60, 0xb5, 0xec, 0x33, 0xf0, 0xaf, 0x09,
+	0x59, 0xbf, 0xed, 0x2e, 0xf8, 0xef, 0xe3, 0xd0, 0x27, 0xe3, 0x31, 0x09, 0xac, 0x3f, 0x15, 0x39,
+	0x25, 0x8f, 0xc4, 0x7f, 0x26, 0x81, 0xd5, 0xf6, 0xbe, 0x0c, 0xd0, 0x5f, 0x8a, 0x0d, 0x3c, 0xb9,
+	0xb0, 0x77, 0x7b, 0x62, 0xd6, 0xa8, 0x5a, 0x3a, 0x32, 0x5e, 0x0f, 0xbe, 0x43, 0x26, 0xd6, 0x94,
+	0x33, 0x28, 0xb6, 0xcc, 0x61, 0x39, 0xd7, 0x96, 0x34, 0x77, 0x28, 0x56, 0xf2, 0x87, 0xb3, 0xdc,
+	0xe9, 0xf7, 0xdd, 0x6c, 0x0d, 0x31, 0xde, 0x9b, 0xbd, 0x61, 0xdd, 0x0a, 0x67, 0x12, 0xd6, 0xb0,
+	0x42, 0xb1, 0x0b, 0x2b, 0xef, 0xe4, 0x47, 0xc3, 0x27, 0x38, 0x93, 0xc9, 0x91, 0x4f, 0x62, 0x37,
+	0xd1, 0xfc, 0xa7, 0xd9, 0xaf, 0x83, 0x08, 0xe1, 0x4c, 0x22, 0x74, 0xcc, 0x40, 0x28, 0x76, 0x11,
+	0xd2, 0x39, 0x8b, 0xb6, 0x1e, 0xcc, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x9c, 0x74, 0x91,
+	0x2e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/account_budget_proposal_type.pb.go b/googleapis/ads/googleads/v3/enums/account_budget_proposal_type.pb.go
new file mode 100644
index 0000000..7118a91
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/account_budget_proposal_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/account_budget_proposal_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible types of an AccountBudgetProposal.
+type AccountBudgetProposalTypeEnum_AccountBudgetProposalType int32
+
+const (
+	// Not specified.
+	AccountBudgetProposalTypeEnum_UNSPECIFIED AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetProposalTypeEnum_UNKNOWN AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 1
+	// Identifies a request to create a new budget.
+	AccountBudgetProposalTypeEnum_CREATE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 2
+	// Identifies a request to edit an existing budget.
+	AccountBudgetProposalTypeEnum_UPDATE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 3
+	// Identifies a request to end a budget that has already started.
+	AccountBudgetProposalTypeEnum_END AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 4
+	// Identifies a request to remove a budget that hasn't started yet.
+	AccountBudgetProposalTypeEnum_REMOVE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 5
+)
+
+var AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CREATE",
+	3: "UPDATE",
+	4: "END",
+	5: "REMOVE",
+}
+
+var AccountBudgetProposalTypeEnum_AccountBudgetProposalType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CREATE":      2,
+	"UPDATE":      3,
+	"END":         4,
+	"REMOVE":      5,
+}
+
+func (x AccountBudgetProposalTypeEnum_AccountBudgetProposalType) String() string {
+	return proto.EnumName(AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name, int32(x))
+}
+
+func (AccountBudgetProposalTypeEnum_AccountBudgetProposalType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_23d72264051de41b, []int{0, 0}
+}
+
+// Message describing AccountBudgetProposal types.
+type AccountBudgetProposalTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalTypeEnum) Reset()         { *m = AccountBudgetProposalTypeEnum{} }
+func (m *AccountBudgetProposalTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalTypeEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_23d72264051de41b, []int{0}
+}
+
+func (m *AccountBudgetProposalTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalTypeEnum.Merge(m, src)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Size(m)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType", AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name, AccountBudgetProposalTypeEnum_AccountBudgetProposalType_value)
+	proto.RegisterType((*AccountBudgetProposalTypeEnum)(nil), "google.ads.googleads.v3.enums.AccountBudgetProposalTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/account_budget_proposal_type.proto", fileDescriptor_23d72264051de41b)
+}
+
+var fileDescriptor_23d72264051de41b = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x6a, 0x3a, 0x31,
+	0x14, 0xc6, 0xff, 0x33, 0xfe, 0xab, 0x10, 0x17, 0x1d, 0x66, 0xd7, 0x52, 0x0b, 0x7a, 0x80, 0xcc,
+	0x62, 0x76, 0xe9, 0xa6, 0x19, 0x4d, 0x45, 0x4a, 0xc7, 0xc1, 0xea, 0x14, 0xca, 0x80, 0x44, 0x67,
+	0x1a, 0x04, 0x4d, 0x82, 0xc9, 0x08, 0x9e, 0xa0, 0xf7, 0xe8, 0xb2, 0x47, 0xe9, 0x51, 0xba, 0xed,
+	0x05, 0x4a, 0x12, 0x75, 0x67, 0x37, 0xe1, 0x47, 0xde, 0x7b, 0xdf, 0xf7, 0xde, 0x07, 0xee, 0x99,
+	0x10, 0x6c, 0x5d, 0x45, 0xb4, 0x54, 0x91, 0x43, 0x43, 0xbb, 0x38, 0xaa, 0x78, 0xbd, 0x51, 0x11,
+	0x5d, 0x2e, 0x45, 0xcd, 0xf5, 0x7c, 0x51, 0x97, 0xac, 0xd2, 0x73, 0xb9, 0x15, 0x52, 0x28, 0xba,
+	0x9e, 0xeb, 0xbd, 0xac, 0xa0, 0xdc, 0x0a, 0x2d, 0xc2, 0x8e, 0x1b, 0x83, 0xb4, 0x54, 0xf0, 0xa4,
+	0x00, 0x77, 0x31, 0xb4, 0x0a, 0xd7, 0x37, 0x47, 0x03, 0xb9, 0x8a, 0x28, 0xe7, 0x42, 0x53, 0xbd,
+	0x12, 0x5c, 0xb9, 0xe1, 0xde, 0xbb, 0x07, 0x3a, 0xd8, 0x79, 0x24, 0xd6, 0x22, 0x3b, 0x38, 0x4c,
+	0xf7, 0xb2, 0x22, 0xbc, 0xde, 0xf4, 0xde, 0xc0, 0xd5, 0xd9, 0x86, 0xf0, 0x12, 0xb4, 0x67, 0xe9,
+	0x73, 0x46, 0xfa, 0xa3, 0x87, 0x11, 0x19, 0x04, 0xff, 0xc2, 0x36, 0x68, 0xcd, 0xd2, 0xc7, 0x74,
+	0xfc, 0x92, 0x06, 0x5e, 0x08, 0x40, 0xb3, 0x3f, 0x21, 0x78, 0x4a, 0x02, 0xdf, 0xf0, 0x2c, 0x1b,
+	0x18, 0x6e, 0x84, 0x2d, 0xd0, 0x20, 0xe9, 0x20, 0xf8, 0x6f, 0x3e, 0x27, 0xe4, 0x69, 0x9c, 0x93,
+	0xe0, 0x22, 0xf9, 0xf1, 0x40, 0x77, 0x29, 0x36, 0xf0, 0xcf, 0x6b, 0x92, 0xdb, 0xb3, 0xbb, 0x64,
+	0xe6, 0x9e, 0xcc, 0x7b, 0x4d, 0x0e, 0x02, 0x4c, 0xac, 0x29, 0x67, 0x50, 0x6c, 0x59, 0xc4, 0x2a,
+	0x6e, 0xaf, 0x3d, 0x06, 0x2c, 0x57, 0xea, 0x4c, 0xde, 0x77, 0xf6, 0xfd, 0xf0, 0x1b, 0x43, 0x8c,
+	0x3f, 0xfd, 0xce, 0xd0, 0x49, 0xe1, 0x52, 0x41, 0x87, 0x86, 0xf2, 0x18, 0x9a, 0x60, 0xd4, 0xd7,
+	0xb1, 0x5e, 0xe0, 0x52, 0x15, 0xa7, 0x7a, 0x91, 0xc7, 0x85, 0xad, 0x7f, 0xfb, 0x5d, 0xf7, 0x89,
+	0x10, 0x2e, 0x15, 0x42, 0xa7, 0x0e, 0x84, 0xf2, 0x18, 0x21, 0xdb, 0xb3, 0x68, 0xda, 0xc5, 0xe2,
+	0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0xef, 0x9a, 0xc5, 0x07, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/account_budget_status.pb.go b/googleapis/ads/googleads/v3/enums/account_budget_status.pb.go
new file mode 100644
index 0000000..5b8b55d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/account_budget_status.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/account_budget_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of an AccountBudget.
+type AccountBudgetStatusEnum_AccountBudgetStatus int32
+
+const (
+	// Not specified.
+	AccountBudgetStatusEnum_UNSPECIFIED AccountBudgetStatusEnum_AccountBudgetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetStatusEnum_UNKNOWN AccountBudgetStatusEnum_AccountBudgetStatus = 1
+	// The account budget is pending approval.
+	AccountBudgetStatusEnum_PENDING AccountBudgetStatusEnum_AccountBudgetStatus = 2
+	// The account budget has been approved.
+	AccountBudgetStatusEnum_APPROVED AccountBudgetStatusEnum_AccountBudgetStatus = 3
+	// The account budget has been cancelled by the user.
+	AccountBudgetStatusEnum_CANCELLED AccountBudgetStatusEnum_AccountBudgetStatus = 4
+)
+
+var AccountBudgetStatusEnum_AccountBudgetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED",
+	4: "CANCELLED",
+}
+
+var AccountBudgetStatusEnum_AccountBudgetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"APPROVED":    3,
+	"CANCELLED":   4,
+}
+
+func (x AccountBudgetStatusEnum_AccountBudgetStatus) String() string {
+	return proto.EnumName(AccountBudgetStatusEnum_AccountBudgetStatus_name, int32(x))
+}
+
+func (AccountBudgetStatusEnum_AccountBudgetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7b869fdf507ee832, []int{0, 0}
+}
+
+// Message describing AccountBudget statuses.
+type AccountBudgetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetStatusEnum) Reset()         { *m = AccountBudgetStatusEnum{} }
+func (m *AccountBudgetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetStatusEnum) ProtoMessage()    {}
+func (*AccountBudgetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7b869fdf507ee832, []int{0}
+}
+
+func (m *AccountBudgetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetStatusEnum.Merge(m, src)
+}
+func (m *AccountBudgetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Size(m)
+}
+func (m *AccountBudgetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AccountBudgetStatusEnum_AccountBudgetStatus", AccountBudgetStatusEnum_AccountBudgetStatus_name, AccountBudgetStatusEnum_AccountBudgetStatus_value)
+	proto.RegisterType((*AccountBudgetStatusEnum)(nil), "google.ads.googleads.v3.enums.AccountBudgetStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/account_budget_status.proto", fileDescriptor_7b869fdf507ee832)
+}
+
+var fileDescriptor_7b869fdf507ee832 = []byte{
+	// 320 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xfb, 0x30,
+	0x00, 0xfe, 0xad, 0xfb, 0xe1, 0x9f, 0x4c, 0xb1, 0xd4, 0x83, 0x22, 0xee, 0xb0, 0x3d, 0x40, 0x7a,
+	0xe8, 0xc9, 0x78, 0x4a, 0xd7, 0x38, 0x86, 0x23, 0x2b, 0x8e, 0x55, 0x90, 0xca, 0xc8, 0x96, 0x12,
+	0x06, 0x5b, 0x32, 0x96, 0x74, 0xf8, 0x3c, 0x1e, 0x7d, 0x14, 0x1f, 0x45, 0xf0, 0x1d, 0xa4, 0xc9,
+	0xd6, 0xd3, 0xf4, 0x12, 0xbe, 0xe4, 0xfb, 0xc3, 0x97, 0x0f, 0xdc, 0x09, 0xa5, 0xc4, 0xb2, 0x08,
+	0x19, 0xd7, 0xa1, 0x83, 0x15, 0xda, 0x46, 0x61, 0x21, 0xcb, 0x95, 0x0e, 0xd9, 0x7c, 0xae, 0x4a,
+	0x69, 0xa6, 0xb3, 0x92, 0x8b, 0xc2, 0x4c, 0xb5, 0x61, 0xa6, 0xd4, 0x70, 0xbd, 0x51, 0x46, 0x05,
+	0x6d, 0xa7, 0x87, 0x8c, 0x6b, 0x58, 0x5b, 0xe1, 0x36, 0x82, 0xd6, 0x7a, 0x73, 0xbb, 0x4f, 0x5e,
+	0x2f, 0x42, 0x26, 0xa5, 0x32, 0xcc, 0x2c, 0x94, 0xdc, 0x99, 0xbb, 0x6f, 0xe0, 0x0a, 0xbb, 0xec,
+	0xd8, 0x46, 0x8f, 0x6d, 0x32, 0x91, 0xe5, 0xaa, 0xfb, 0x0a, 0x2e, 0x0f, 0x50, 0xc1, 0x05, 0x68,
+	0x4d, 0xe8, 0x38, 0x25, 0xbd, 0xc1, 0xc3, 0x80, 0x24, 0xfe, 0xbf, 0xa0, 0x05, 0x8e, 0x27, 0xf4,
+	0x91, 0x8e, 0x9e, 0xa9, 0xdf, 0xa8, 0x2e, 0x29, 0xa1, 0xc9, 0x80, 0xf6, 0x7d, 0x2f, 0x38, 0x03,
+	0x27, 0x38, 0x4d, 0x9f, 0x46, 0x19, 0x49, 0xfc, 0x66, 0x70, 0x0e, 0x4e, 0x7b, 0x98, 0xf6, 0xc8,
+	0x70, 0x48, 0x12, 0xff, 0x7f, 0xfc, 0xdd, 0x00, 0x9d, 0xb9, 0x5a, 0xc1, 0x3f, 0xdb, 0xc7, 0xd7,
+	0x07, 0x2a, 0xa4, 0x55, 0xf3, 0xb4, 0xf1, 0x12, 0xef, 0xac, 0x42, 0x2d, 0x99, 0x14, 0x50, 0x6d,
+	0x44, 0x28, 0x0a, 0x69, 0xff, 0xb5, 0xdf, 0x70, 0xbd, 0xd0, 0xbf, 0x4c, 0x7a, 0x6f, 0xcf, 0x77,
+	0xaf, 0xd9, 0xc7, 0xf8, 0xc3, 0x6b, 0xf7, 0x5d, 0x14, 0xe6, 0x1a, 0x3a, 0x58, 0xa1, 0x2c, 0x82,
+	0xd5, 0x12, 0xfa, 0x73, 0xcf, 0xe7, 0x98, 0xeb, 0xbc, 0xe6, 0xf3, 0x2c, 0xca, 0x2d, 0xff, 0xe5,
+	0x75, 0xdc, 0x23, 0x42, 0x98, 0x6b, 0x84, 0x6a, 0x05, 0x42, 0x59, 0x84, 0x90, 0xd5, 0xcc, 0x8e,
+	0x6c, 0xb1, 0xe8, 0x27, 0x00, 0x00, 0xff, 0xff, 0x17, 0x24, 0xba, 0xc5, 0xea, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_customizer_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/ad_customizer_placeholder_field.pb.go
new file mode 100644
index 0000000..1d84546
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_customizer_placeholder_field.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_customizer_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Ad Customizers placeholder fields.
+type AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField int32
+
+const (
+	// Not specified.
+	AdCustomizerPlaceholderFieldEnum_UNSPECIFIED AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	AdCustomizerPlaceholderFieldEnum_UNKNOWN AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 1
+	// Data Type: INT64. Integer value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_INTEGER AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 2
+	// Data Type: STRING. Price value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_PRICE AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 3
+	// Data Type: DATE_TIME. Date value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_DATE AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 4
+	// Data Type: STRING. String value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_STRING AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 5
+)
+
+var AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INTEGER",
+	3: "PRICE",
+	4: "DATE",
+	5: "STRING",
+}
+
+var AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INTEGER":     2,
+	"PRICE":       3,
+	"DATE":        4,
+	"STRING":      5,
+}
+
+func (x AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField) String() string {
+	return proto.EnumName(AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name, int32(x))
+}
+
+func (AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_af5941c12bdd346d, []int{0, 0}
+}
+
+// Values for Ad Customizer placeholder fields.
+type AdCustomizerPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdCustomizerPlaceholderFieldEnum) Reset()         { *m = AdCustomizerPlaceholderFieldEnum{} }
+func (m *AdCustomizerPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*AdCustomizerPlaceholderFieldEnum) ProtoMessage()    {}
+func (*AdCustomizerPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af5941c12bdd346d, []int{0}
+}
+
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Size(m)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdCustomizerPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField", AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name, AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_value)
+	proto.RegisterType((*AdCustomizerPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.AdCustomizerPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_customizer_placeholder_field.proto", fileDescriptor_af5941c12bdd346d)
+}
+
+var fileDescriptor_af5941c12bdd346d = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xf3, 0x30,
+	0x14, 0xfc, 0x92, 0xfe, 0x7c, 0xe0, 0x2e, 0x88, 0xb2, 0x44, 0xad, 0x44, 0x7b, 0x00, 0x67, 0x91,
+	0x9d, 0x59, 0xb9, 0xa9, 0x1b, 0x45, 0x48, 0x21, 0xea, 0x1f, 0x12, 0x8a, 0x54, 0x99, 0xda, 0x84,
+	0xa0, 0xc4, 0x8e, 0xe2, 0xb4, 0x0b, 0x0e, 0xc1, 0x21, 0x58, 0x72, 0x14, 0x8e, 0xc2, 0x01, 0x58,
+	0xa3, 0xc4, 0x34, 0xac, 0xe8, 0x26, 0x9a, 0xf8, 0xcd, 0x9b, 0x79, 0x33, 0xc0, 0x4b, 0xa4, 0x4c,
+	0x32, 0xee, 0x50, 0xa6, 0x1c, 0x0d, 0x6b, 0x74, 0x70, 0x1d, 0x2e, 0xf6, 0xb9, 0x72, 0x28, 0xdb,
+	0xee, 0xf6, 0xaa, 0x92, 0x79, 0xfa, 0xc2, 0xcb, 0x6d, 0x91, 0xd1, 0x1d, 0x7f, 0x92, 0x19, 0xe3,
+	0xe5, 0xf6, 0x31, 0xe5, 0x19, 0x83, 0x45, 0x29, 0x2b, 0x69, 0x8f, 0xf4, 0x26, 0xa4, 0x4c, 0xc1,
+	0x56, 0x04, 0x1e, 0x5c, 0xd8, 0x88, 0x5c, 0x0e, 0x8f, 0x1e, 0x45, 0xea, 0x50, 0x21, 0x64, 0x45,
+	0xab, 0x54, 0x0a, 0xa5, 0x97, 0x27, 0xaf, 0x06, 0xb8, 0xc2, 0xcc, 0x6b, 0x5d, 0xa2, 0x5f, 0x93,
+	0x79, 0xed, 0x41, 0xc4, 0x3e, 0x9f, 0x3c, 0x83, 0xe1, 0x29, 0x8e, 0x7d, 0x01, 0x06, 0xeb, 0x70,
+	0x19, 0x11, 0x2f, 0x98, 0x07, 0x64, 0x66, 0xfd, 0xb3, 0x07, 0xe0, 0xff, 0x3a, 0xbc, 0x09, 0x6f,
+	0xef, 0x42, 0xcb, 0xa8, 0x7f, 0x82, 0x70, 0x45, 0x7c, 0xb2, 0xb0, 0x4c, 0xfb, 0x1c, 0xf4, 0xa2,
+	0x45, 0xe0, 0x11, 0xab, 0x63, 0x9f, 0x81, 0xee, 0x0c, 0xaf, 0x88, 0xd5, 0xb5, 0x01, 0xe8, 0x2f,
+	0x57, 0x8b, 0x20, 0xf4, 0xad, 0xde, 0xf4, 0xcb, 0x00, 0xe3, 0x9d, 0xcc, 0xe1, 0xc9, 0x50, 0xd3,
+	0xf1, 0xa9, 0x7b, 0xa2, 0x3a, 0x59, 0x64, 0xdc, 0x4f, 0x7f, 0x34, 0x12, 0x99, 0x51, 0x91, 0x40,
+	0x59, 0x26, 0x4e, 0xc2, 0x45, 0x93, 0xfb, 0xd8, 0x76, 0x91, 0xaa, 0x3f, 0xca, 0xbf, 0x6e, 0xbe,
+	0x6f, 0x66, 0xc7, 0xc7, 0xf8, 0xdd, 0x1c, 0xf9, 0x5a, 0x0a, 0x33, 0x05, 0x35, 0xac, 0xd1, 0xc6,
+	0x85, 0x75, 0x3f, 0xea, 0xe3, 0x38, 0x8f, 0x31, 0x53, 0x71, 0x3b, 0x8f, 0x37, 0x6e, 0xdc, 0xcc,
+	0x3f, 0xcd, 0xb1, 0x7e, 0x44, 0x08, 0x33, 0x85, 0x50, 0xcb, 0x40, 0x68, 0xe3, 0x22, 0xd4, 0x70,
+	0x1e, 0xfa, 0xcd, 0x61, 0xee, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, 0x85, 0xbb, 0x81, 0x14,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_ad_rotation_mode.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_ad_rotation_mode.pb.go
new file mode 100644
index 0000000..aa6ef6d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_ad_rotation_mode.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_ad_rotation_mode.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible ad rotation modes of an ad group.
+type AdGroupAdRotationModeEnum_AdGroupAdRotationMode int32
+
+const (
+	// The ad rotation mode has not been specified.
+	AdGroupAdRotationModeEnum_UNSPECIFIED AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupAdRotationModeEnum_UNKNOWN AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 1
+	// Optimize ad group ads based on clicks or conversions.
+	AdGroupAdRotationModeEnum_OPTIMIZE AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 2
+	// Rotate evenly forever.
+	AdGroupAdRotationModeEnum_ROTATE_FOREVER AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 3
+)
+
+var AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPTIMIZE",
+	3: "ROTATE_FOREVER",
+}
+
+var AdGroupAdRotationModeEnum_AdGroupAdRotationMode_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"OPTIMIZE":       2,
+	"ROTATE_FOREVER": 3,
+}
+
+func (x AdGroupAdRotationModeEnum_AdGroupAdRotationMode) String() string {
+	return proto.EnumName(AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name, int32(x))
+}
+
+func (AdGroupAdRotationModeEnum_AdGroupAdRotationMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2286469973ba5e1d, []int{0, 0}
+}
+
+// Container for enum describing possible ad rotation modes of ads within an
+// ad group.
+type AdGroupAdRotationModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdRotationModeEnum) Reset()         { *m = AdGroupAdRotationModeEnum{} }
+func (m *AdGroupAdRotationModeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdRotationModeEnum) ProtoMessage()    {}
+func (*AdGroupAdRotationModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2286469973ba5e1d, []int{0}
+}
+
+func (m *AdGroupAdRotationModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdRotationModeEnum.Merge(m, src)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Size(m)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdRotationModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdRotationModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode", AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name, AdGroupAdRotationModeEnum_AdGroupAdRotationMode_value)
+	proto.RegisterType((*AdGroupAdRotationModeEnum)(nil), "google.ads.googleads.v3.enums.AdGroupAdRotationModeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_ad_rotation_mode.proto", fileDescriptor_2286469973ba5e1d)
+}
+
+var fileDescriptor_2286469973ba5e1d = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x07, 0x2a, 0x99, 0x68, 0x29, 0x78, 0x70, 0xb8, 0xc3, 0xf6, 0x00, 0xe9, 0xa1,
+	0xb7, 0x88, 0x87, 0x4c, 0xb3, 0x51, 0x64, 0x6d, 0xa9, 0x5b, 0x07, 0xa3, 0x50, 0xa2, 0x29, 0x61,
+	0xb0, 0xe6, 0x5f, 0x9a, 0x6e, 0x0f, 0xe4, 0xd1, 0x47, 0xf1, 0x51, 0xbc, 0xf8, 0x0a, 0xd2, 0x66,
+	0xdb, 0x69, 0x7a, 0x09, 0x1f, 0xf9, 0xfe, 0xbf, 0x2f, 0xff, 0x7c, 0xe8, 0x51, 0x02, 0xc8, 0x4d,
+	0xee, 0x72, 0xa1, 0x5d, 0x23, 0x1b, 0xb5, 0xf3, 0xdc, 0x5c, 0x6d, 0x0b, 0xed, 0x72, 0x91, 0xc9,
+	0x0a, 0xb6, 0x65, 0xc6, 0x45, 0x56, 0x41, 0xcd, 0xeb, 0x35, 0xa8, 0xac, 0x00, 0x91, 0xe3, 0xb2,
+	0x82, 0x1a, 0x9c, 0x81, 0x61, 0x30, 0x17, 0x1a, 0x1f, 0x71, 0xbc, 0xf3, 0x70, 0x8b, 0xf7, 0xef,
+	0x0f, 0xe9, 0xe5, 0xda, 0xe5, 0x4a, 0xed, 0x03, 0xb4, 0x81, 0x47, 0x35, 0xba, 0xa3, 0x62, 0xda,
+	0xc4, 0x53, 0x11, 0xef, 0xbd, 0x19, 0x88, 0x9c, 0xa9, 0x6d, 0x31, 0x5a, 0xa2, 0xdb, 0x93, 0xa6,
+	0x73, 0x83, 0x7a, 0x8b, 0xe0, 0x35, 0x62, 0x4f, 0xfe, 0xc4, 0x67, 0xcf, 0xf6, 0x99, 0xd3, 0x43,
+	0x17, 0x8b, 0xe0, 0x25, 0x08, 0x97, 0x81, 0xdd, 0x71, 0xae, 0xd0, 0x65, 0x18, 0xcd, 0xfd, 0x99,
+	0xbf, 0x62, 0xb6, 0xe5, 0x38, 0xe8, 0x3a, 0x0e, 0xe7, 0x74, 0xce, 0xb2, 0x49, 0x18, 0xb3, 0x84,
+	0xc5, 0x76, 0x77, 0xfc, 0xd3, 0x41, 0xc3, 0x77, 0x28, 0xf0, 0xbf, 0x9b, 0x8f, 0xfb, 0x27, 0x1f,
+	0x8f, 0x9a, 0xbd, 0xa3, 0xce, 0x6a, 0xbc, 0x87, 0x25, 0x6c, 0xb8, 0x92, 0x18, 0x2a, 0xe9, 0xca,
+	0x5c, 0xb5, 0xbf, 0x3a, 0xb4, 0x58, 0xae, 0xf5, 0x1f, 0xa5, 0x3e, 0xb4, 0xe7, 0x87, 0xd5, 0x9d,
+	0x52, 0xfa, 0x69, 0x0d, 0xa6, 0x26, 0x8a, 0x0a, 0x8d, 0x8d, 0x6c, 0x54, 0xe2, 0xe1, 0xa6, 0x05,
+	0xfd, 0x75, 0xf0, 0x53, 0x2a, 0x74, 0x7a, 0xf4, 0xd3, 0xc4, 0x4b, 0x5b, 0xff, 0xdb, 0x1a, 0x9a,
+	0x4b, 0x42, 0xa8, 0xd0, 0x84, 0x1c, 0x27, 0x08, 0x49, 0x3c, 0x42, 0xda, 0x99, 0xb7, 0xf3, 0x76,
+	0x31, 0xef, 0x37, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x79, 0x2f, 0xf6, 0xec, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_ad_status.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_ad_status.pb.go
new file mode 100644
index 0000000..8b25754
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_ad_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_ad_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of an AdGroupAd.
+type AdGroupAdStatusEnum_AdGroupAdStatus int32
+
+const (
+	// No value has been specified.
+	AdGroupAdStatusEnum_UNSPECIFIED AdGroupAdStatusEnum_AdGroupAdStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupAdStatusEnum_UNKNOWN AdGroupAdStatusEnum_AdGroupAdStatus = 1
+	// The ad group ad is enabled.
+	AdGroupAdStatusEnum_ENABLED AdGroupAdStatusEnum_AdGroupAdStatus = 2
+	// The ad group ad is paused.
+	AdGroupAdStatusEnum_PAUSED AdGroupAdStatusEnum_AdGroupAdStatus = 3
+	// The ad group ad is removed.
+	AdGroupAdStatusEnum_REMOVED AdGroupAdStatusEnum_AdGroupAdStatus = 4
+)
+
+var AdGroupAdStatusEnum_AdGroupAdStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+
+var AdGroupAdStatusEnum_AdGroupAdStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupAdStatusEnum_AdGroupAdStatus) String() string {
+	return proto.EnumName(AdGroupAdStatusEnum_AdGroupAdStatus_name, int32(x))
+}
+
+func (AdGroupAdStatusEnum_AdGroupAdStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_469b781fb0018c61, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of an AdGroupAd.
+type AdGroupAdStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdStatusEnum) Reset()         { *m = AdGroupAdStatusEnum{} }
+func (m *AdGroupAdStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdStatusEnum) ProtoMessage()    {}
+func (*AdGroupAdStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_469b781fb0018c61, []int{0}
+}
+
+func (m *AdGroupAdStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdStatusEnum.Merge(m, src)
+}
+func (m *AdGroupAdStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Size(m)
+}
+func (m *AdGroupAdStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupAdStatusEnum_AdGroupAdStatus", AdGroupAdStatusEnum_AdGroupAdStatus_name, AdGroupAdStatusEnum_AdGroupAdStatus_value)
+	proto.RegisterType((*AdGroupAdStatusEnum)(nil), "google.ads.googleads.v3.enums.AdGroupAdStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_ad_status.proto", fileDescriptor_469b781fb0018c61)
+}
+
+var fileDescriptor_469b781fb0018c61 = []byte{
+	// 312 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xfb, 0x30,
+	0x18, 0xfe, 0xad, 0xfb, 0x31, 0x21, 0x3b, 0xac, 0x54, 0x4f, 0xe2, 0x0e, 0xdb, 0x07, 0x48, 0x0e,
+	0x01, 0x0f, 0xf1, 0x94, 0xda, 0x38, 0x86, 0xda, 0x15, 0x47, 0x2b, 0x48, 0x61, 0x44, 0x33, 0xc2,
+	0x60, 0x4d, 0x4a, 0xd3, 0xee, 0x03, 0x79, 0xf4, 0xa3, 0xf8, 0x4d, 0xf4, 0x53, 0x48, 0xd2, 0xb5,
+	0x87, 0x81, 0x5e, 0xca, 0xd3, 0xf7, 0xf9, 0x93, 0xe7, 0x7d, 0xc1, 0xb5, 0xd4, 0x5a, 0xee, 0xb7,
+	0x88, 0x0b, 0x83, 0x5a, 0x68, 0xd1, 0x01, 0xa3, 0xad, 0x6a, 0x0a, 0x83, 0xb8, 0xd8, 0xc8, 0x4a,
+	0x37, 0xe5, 0x86, 0x8b, 0x8d, 0xa9, 0x79, 0xdd, 0x18, 0x58, 0x56, 0xba, 0xd6, 0xc1, 0xb4, 0x15,
+	0x43, 0x2e, 0x0c, 0xec, 0x7d, 0xf0, 0x80, 0xa1, 0xf3, 0x5d, 0x5e, 0x75, 0xb1, 0xe5, 0x0e, 0x71,
+	0xa5, 0x74, 0xcd, 0xeb, 0x9d, 0x56, 0x47, 0xf3, 0x7c, 0x0f, 0xce, 0xa9, 0x58, 0xd8, 0x5c, 0x2a,
+	0xd6, 0x2e, 0x95, 0xa9, 0xa6, 0x98, 0xa7, 0x60, 0x72, 0x32, 0x0e, 0x26, 0x60, 0x9c, 0xc6, 0xeb,
+	0x84, 0xdd, 0x2e, 0xef, 0x96, 0x2c, 0xf2, 0xff, 0x05, 0x63, 0x70, 0x96, 0xc6, 0xf7, 0xf1, 0xea,
+	0x39, 0xf6, 0x07, 0xf6, 0x87, 0xc5, 0x34, 0x7c, 0x60, 0x91, 0xef, 0x05, 0x00, 0x8c, 0x12, 0x9a,
+	0xae, 0x59, 0xe4, 0x0f, 0x2d, 0xf1, 0xc4, 0x1e, 0x57, 0x19, 0x8b, 0xfc, 0xff, 0xe1, 0xd7, 0x00,
+	0xcc, 0xde, 0x74, 0x01, 0xff, 0x6c, 0x1c, 0x5e, 0x9c, 0x3c, 0x9d, 0xd8, 0xa6, 0xc9, 0xe0, 0x25,
+	0x3c, 0xda, 0xa4, 0xde, 0x73, 0x25, 0xa1, 0xae, 0x24, 0x92, 0x5b, 0xe5, 0xf6, 0xe8, 0x0e, 0x56,
+	0xee, 0xcc, 0x2f, 0xf7, 0xbb, 0x71, 0xdf, 0x77, 0x6f, 0xb8, 0xa0, 0xf4, 0xc3, 0x9b, 0x2e, 0xda,
+	0x28, 0x2a, 0x0c, 0x6c, 0xa1, 0x45, 0x19, 0x86, 0x76, 0x7b, 0xf3, 0xd9, 0xf1, 0x39, 0x15, 0x26,
+	0xef, 0xf9, 0x3c, 0xc3, 0xb9, 0xe3, 0xbf, 0xbd, 0x59, 0x3b, 0x24, 0x84, 0x0a, 0x43, 0x48, 0xaf,
+	0x20, 0x24, 0xc3, 0x84, 0x38, 0xcd, 0xeb, 0xc8, 0x15, 0xc3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x9e, 0xcd, 0x77, 0xa8, 0xd7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_criterion_approval_status.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_criterion_approval_status.pb.go
new file mode 100644
index 0000000..c20e343
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_criterion_approval_status.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_criterion_approval_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates AdGroupCriterion approval statuses.
+type AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus int32
+
+const (
+	// Not specified.
+	AdGroupCriterionApprovalStatusEnum_UNSPECIFIED AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 0
+	// The value is unknown in this version.
+	AdGroupCriterionApprovalStatusEnum_UNKNOWN AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 1
+	// Approved.
+	AdGroupCriterionApprovalStatusEnum_APPROVED AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 2
+	// Disapproved.
+	AdGroupCriterionApprovalStatusEnum_DISAPPROVED AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 3
+	// Pending Review.
+	AdGroupCriterionApprovalStatusEnum_PENDING_REVIEW AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 4
+	// Under review.
+	AdGroupCriterionApprovalStatusEnum_UNDER_REVIEW AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus = 5
+)
+
+var AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "APPROVED",
+	3: "DISAPPROVED",
+	4: "PENDING_REVIEW",
+	5: "UNDER_REVIEW",
+}
+
+var AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"APPROVED":       2,
+	"DISAPPROVED":    3,
+	"PENDING_REVIEW": 4,
+	"UNDER_REVIEW":   5,
+}
+
+func (x AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus) String() string {
+	return proto.EnumName(AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus_name, int32(x))
+}
+
+func (AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2a16f79d7ca5aed0, []int{0, 0}
+}
+
+// Container for enum describing possible AdGroupCriterion approval statuses.
+type AdGroupCriterionApprovalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupCriterionApprovalStatusEnum) Reset()         { *m = AdGroupCriterionApprovalStatusEnum{} }
+func (m *AdGroupCriterionApprovalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionApprovalStatusEnum) ProtoMessage()    {}
+func (*AdGroupCriterionApprovalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2a16f79d7ca5aed0, []int{0}
+}
+
+func (m *AdGroupCriterionApprovalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionApprovalStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionApprovalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionApprovalStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionApprovalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionApprovalStatusEnum.Merge(m, src)
+}
+func (m *AdGroupCriterionApprovalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionApprovalStatusEnum.Size(m)
+}
+func (m *AdGroupCriterionApprovalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionApprovalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionApprovalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus", AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus_name, AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus_value)
+	proto.RegisterType((*AdGroupCriterionApprovalStatusEnum)(nil), "google.ads.googleads.v3.enums.AdGroupCriterionApprovalStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_criterion_approval_status.proto", fileDescriptor_2a16f79d7ca5aed0)
+}
+
+var fileDescriptor_2a16f79d7ca5aed0 = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcb, 0x6a, 0xb3, 0x40,
+	0x18, 0xfd, 0x35, 0x7f, 0x2f, 0x4c, 0x42, 0x2b, 0x2e, 0x4b, 0x53, 0x48, 0xba, 0x1f, 0x17, 0xee,
+	0xa6, 0xab, 0x49, 0x9c, 0x88, 0x14, 0x8c, 0x24, 0xc4, 0x40, 0x11, 0x64, 0x9a, 0x91, 0x41, 0x48,
+	0x66, 0xc4, 0xd1, 0xbc, 0x40, 0xdf, 0xa4, 0xcb, 0x3c, 0x4a, 0x1f, 0xa5, 0x4f, 0xd0, 0x65, 0x71,
+	0x8c, 0xee, 0x9a, 0xcd, 0x70, 0xf8, 0xce, 0x99, 0x73, 0xbe, 0x0b, 0x58, 0x70, 0x29, 0xf9, 0x3e,
+	0x73, 0x28, 0x53, 0x4e, 0x0b, 0x1b, 0x74, 0x74, 0x9d, 0x4c, 0xd4, 0x07, 0xe5, 0x50, 0x96, 0xf2,
+	0x52, 0xd6, 0x45, 0xba, 0x2b, 0xf3, 0x2a, 0x2b, 0x73, 0x29, 0x52, 0x5a, 0x14, 0xa5, 0x3c, 0xd2,
+	0x7d, 0xaa, 0x2a, 0x5a, 0xd5, 0x0a, 0x16, 0xa5, 0xac, 0xa4, 0x3d, 0x6e, 0x3f, 0x43, 0xca, 0x14,
+	0xec, 0x7d, 0xe0, 0xd1, 0x85, 0xda, 0xe7, 0xe1, 0xb1, 0x8b, 0x29, 0x72, 0x87, 0x0a, 0x21, 0x2b,
+	0x5a, 0xe5, 0x52, 0x9c, 0x3f, 0x4f, 0x4f, 0x06, 0x98, 0x62, 0xe6, 0x37, 0x41, 0xf3, 0x2e, 0x07,
+	0x9f, 0x63, 0xd6, 0x3a, 0x85, 0x88, 0xfa, 0x30, 0xfd, 0x30, 0xc0, 0xd3, 0x65, 0x99, 0x7d, 0x0f,
+	0x86, 0x9b, 0x70, 0x1d, 0x91, 0x79, 0xb0, 0x08, 0x88, 0x67, 0xfd, 0xb3, 0x87, 0xe0, 0x66, 0x13,
+	0xbe, 0x86, 0xcb, 0x6d, 0x68, 0x19, 0xf6, 0x08, 0xdc, 0xe2, 0x28, 0x5a, 0x2d, 0x63, 0xe2, 0x59,
+	0x66, 0xa3, 0xf5, 0x82, 0x75, 0x5f, 0x18, 0xd8, 0x36, 0xb8, 0x8b, 0x48, 0xe8, 0x05, 0xa1, 0x9f,
+	0xae, 0x48, 0x1c, 0x90, 0xad, 0xf5, 0xdf, 0xb6, 0xc0, 0x68, 0x13, 0x7a, 0x64, 0xd5, 0x55, 0xae,
+	0x66, 0x3f, 0x06, 0x98, 0xec, 0xe4, 0x01, 0x5e, 0x1c, 0x78, 0xf6, 0x7c, 0xb9, 0xd1, 0xa8, 0x99,
+	0x3b, 0x32, 0xde, 0x66, 0x67, 0x17, 0x2e, 0xf7, 0x54, 0x70, 0x28, 0x4b, 0xee, 0xf0, 0x4c, 0xe8,
+	0xad, 0x74, 0xe7, 0x28, 0x72, 0xf5, 0xc7, 0x75, 0x5e, 0xf4, 0xfb, 0x69, 0x0e, 0x7c, 0x8c, 0x4f,
+	0xe6, 0xd8, 0x6f, 0xad, 0x30, 0x53, 0xb0, 0x85, 0x0d, 0x8a, 0x5d, 0xd8, 0xec, 0x4e, 0x7d, 0x75,
+	0x7c, 0x82, 0x99, 0x4a, 0x7a, 0x3e, 0x89, 0xdd, 0x44, 0xf3, 0xdf, 0xe6, 0xa4, 0x2d, 0x22, 0x84,
+	0x99, 0x42, 0xa8, 0x57, 0x20, 0x14, 0xbb, 0x08, 0x69, 0xcd, 0xfb, 0xb5, 0x6e, 0xcc, 0xfd, 0x0d,
+	0x00, 0x00, 0xff, 0xff, 0x21, 0x40, 0xe3, 0x45, 0x35, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_criterion_status.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_criterion_status.pb.go
new file mode 100644
index 0000000..7f8f1c0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_criterion_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_criterion_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of an AdGroupCriterion.
+type AdGroupCriterionStatusEnum_AdGroupCriterionStatus int32
+
+const (
+	// No value has been specified.
+	AdGroupCriterionStatusEnum_UNSPECIFIED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupCriterionStatusEnum_UNKNOWN AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 1
+	// The ad group criterion is enabled.
+	AdGroupCriterionStatusEnum_ENABLED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 2
+	// The ad group criterion is paused.
+	AdGroupCriterionStatusEnum_PAUSED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 3
+	// The ad group criterion is removed.
+	AdGroupCriterionStatusEnum_REMOVED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 4
+)
+
+var AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+
+var AdGroupCriterionStatusEnum_AdGroupCriterionStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupCriterionStatusEnum_AdGroupCriterionStatus) String() string {
+	return proto.EnumName(AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name, int32(x))
+}
+
+func (AdGroupCriterionStatusEnum_AdGroupCriterionStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_319f05083d11848f, []int{0, 0}
+}
+
+// Message describing AdGroupCriterion statuses.
+type AdGroupCriterionStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupCriterionStatusEnum) Reset()         { *m = AdGroupCriterionStatusEnum{} }
+func (m *AdGroupCriterionStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionStatusEnum) ProtoMessage()    {}
+func (*AdGroupCriterionStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_319f05083d11848f, []int{0}
+}
+
+func (m *AdGroupCriterionStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionStatusEnum.Merge(m, src)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Size(m)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus", AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name, AdGroupCriterionStatusEnum_AdGroupCriterionStatus_value)
+	proto.RegisterType((*AdGroupCriterionStatusEnum)(nil), "google.ads.googleads.v3.enums.AdGroupCriterionStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_criterion_status.proto", fileDescriptor_319f05083d11848f)
+}
+
+var fileDescriptor_319f05083d11848f = []byte{
+	// 320 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x31, 0x4e, 0xc3, 0x30,
+	0x18, 0x85, 0x69, 0x8a, 0x8a, 0xe4, 0x0e, 0x44, 0x19, 0x18, 0x0a, 0x1d, 0xda, 0x03, 0x38, 0x43,
+	0x36, 0x23, 0x06, 0xa7, 0x31, 0x55, 0x05, 0xa4, 0x11, 0x55, 0x83, 0x84, 0x22, 0x55, 0xa6, 0x8e,
+	0xac, 0x48, 0xad, 0x1d, 0xc5, 0x4e, 0x07, 0x8e, 0xc3, 0xc8, 0x51, 0x38, 0x0a, 0x13, 0x47, 0x40,
+	0x76, 0x9a, 0x4c, 0x85, 0xc5, 0x7a, 0xf6, 0xfb, 0xdf, 0xa7, 0xe7, 0x1f, 0xdc, 0x71, 0x29, 0xf9,
+	0x2e, 0xf7, 0x29, 0x53, 0x7e, 0x23, 0x8d, 0x3a, 0x04, 0x7e, 0x2e, 0xea, 0xbd, 0xf2, 0x29, 0xdb,
+	0xf0, 0x4a, 0xd6, 0xe5, 0x66, 0x5b, 0x15, 0x3a, 0xaf, 0x0a, 0x29, 0x36, 0x4a, 0x53, 0x5d, 0x2b,
+	0x58, 0x56, 0x52, 0x4b, 0x6f, 0xdc, 0x64, 0x20, 0x65, 0x0a, 0x76, 0x71, 0x78, 0x08, 0xa0, 0x8d,
+	0x8f, 0x6e, 0x5a, 0x7a, 0x59, 0xf8, 0x54, 0x08, 0xa9, 0xa9, 0x2e, 0xa4, 0x38, 0x86, 0xa7, 0xef,
+	0x60, 0x84, 0xd9, 0xdc, 0xe0, 0x67, 0x2d, 0x7d, 0x65, 0xe1, 0x44, 0xd4, 0xfb, 0x69, 0x06, 0xae,
+	0x4e, 0xbb, 0xde, 0x25, 0x18, 0xae, 0xe3, 0x55, 0x42, 0x66, 0x8b, 0xfb, 0x05, 0x89, 0xdc, 0x33,
+	0x6f, 0x08, 0x2e, 0xd6, 0xf1, 0x43, 0xbc, 0x7c, 0x89, 0xdd, 0x9e, 0xb9, 0x90, 0x18, 0x87, 0x8f,
+	0x24, 0x72, 0x1d, 0x0f, 0x80, 0x41, 0x82, 0xd7, 0x2b, 0x12, 0xb9, 0x7d, 0x63, 0x3c, 0x93, 0xa7,
+	0x65, 0x4a, 0x22, 0xf7, 0x3c, 0xfc, 0xe9, 0x81, 0xc9, 0x56, 0xee, 0xe1, 0xbf, 0xfd, 0xc3, 0xeb,
+	0xd3, 0x0d, 0x12, 0x53, 0x3f, 0xe9, 0xbd, 0x86, 0xc7, 0x34, 0x97, 0x3b, 0x2a, 0x38, 0x94, 0x15,
+	0xf7, 0x79, 0x2e, 0xec, 0xe7, 0xda, 0x65, 0x96, 0x85, 0xfa, 0x63, 0xb7, 0xb7, 0xf6, 0xfc, 0x70,
+	0xfa, 0x73, 0x8c, 0x3f, 0x9d, 0xf1, 0xbc, 0x41, 0x61, 0xa6, 0x60, 0x23, 0x8d, 0x4a, 0x03, 0x68,
+	0x76, 0xa1, 0xbe, 0x5a, 0x3f, 0xc3, 0x4c, 0x65, 0x9d, 0x9f, 0xa5, 0x41, 0x66, 0xfd, 0x6f, 0x67,
+	0xd2, 0x3c, 0x22, 0x84, 0x99, 0x42, 0xa8, 0x9b, 0x40, 0x28, 0x0d, 0x10, 0xb2, 0x33, 0x6f, 0x03,
+	0x5b, 0x2c, 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x0e, 0xf9, 0x4a, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_status.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_status.pb.go
new file mode 100644
index 0000000..10dc7bb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of an ad group.
+type AdGroupStatusEnum_AdGroupStatus int32
+
+const (
+	// The status has not been specified.
+	AdGroupStatusEnum_UNSPECIFIED AdGroupStatusEnum_AdGroupStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupStatusEnum_UNKNOWN AdGroupStatusEnum_AdGroupStatus = 1
+	// The ad group is enabled.
+	AdGroupStatusEnum_ENABLED AdGroupStatusEnum_AdGroupStatus = 2
+	// The ad group is paused.
+	AdGroupStatusEnum_PAUSED AdGroupStatusEnum_AdGroupStatus = 3
+	// The ad group is removed.
+	AdGroupStatusEnum_REMOVED AdGroupStatusEnum_AdGroupStatus = 4
+)
+
+var AdGroupStatusEnum_AdGroupStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+
+var AdGroupStatusEnum_AdGroupStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupStatusEnum_AdGroupStatus) String() string {
+	return proto.EnumName(AdGroupStatusEnum_AdGroupStatus_name, int32(x))
+}
+
+func (AdGroupStatusEnum_AdGroupStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ec520dd54d7ad64c, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of an ad group.
+type AdGroupStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupStatusEnum) Reset()         { *m = AdGroupStatusEnum{} }
+func (m *AdGroupStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupStatusEnum) ProtoMessage()    {}
+func (*AdGroupStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ec520dd54d7ad64c, []int{0}
+}
+
+func (m *AdGroupStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupStatusEnum.Merge(m, src)
+}
+func (m *AdGroupStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupStatusEnum.Size(m)
+}
+func (m *AdGroupStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupStatusEnum_AdGroupStatus", AdGroupStatusEnum_AdGroupStatus_name, AdGroupStatusEnum_AdGroupStatus_value)
+	proto.RegisterType((*AdGroupStatusEnum)(nil), "google.ads.googleads.v3.enums.AdGroupStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_status.proto", fileDescriptor_ec520dd54d7ad64c)
+}
+
+var fileDescriptor_ec520dd54d7ad64c = []byte{
+	// 305 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x9d, 0x4c, 0xc8, 0x10, 0x6b, 0x8f, 0xe2, 0x0e, 0xdb, 0x03, 0x24, 0x87, 0xdc, 0xe2,
+	0x29, 0xb5, 0x71, 0x0c, 0xb5, 0x2b, 0x96, 0x55, 0x90, 0xc2, 0x88, 0x66, 0xc4, 0xc1, 0x9a, 0x94,
+	0xa6, 0xdd, 0x03, 0x79, 0xf4, 0x51, 0x7c, 0x11, 0xc1, 0xa7, 0x90, 0xa4, 0x6b, 0x61, 0x07, 0xbd,
+	0x94, 0x5f, 0xbf, 0xdf, 0x9f, 0xfc, 0xbe, 0x0f, 0x60, 0xa9, 0xb5, 0xdc, 0x6d, 0x10, 0x17, 0x06,
+	0xb5, 0xd0, 0xa2, 0x3d, 0x46, 0x1b, 0xd5, 0x14, 0x06, 0x71, 0xb1, 0x96, 0x95, 0x6e, 0xca, 0xb5,
+	0xa9, 0x79, 0xdd, 0x18, 0x58, 0x56, 0xba, 0xd6, 0xc1, 0xa4, 0x55, 0x42, 0x2e, 0x0c, 0xec, 0x4d,
+	0x70, 0x8f, 0xa1, 0x33, 0x5d, 0x5d, 0x77, 0x99, 0xe5, 0x16, 0x71, 0xa5, 0x74, 0xcd, 0xeb, 0xad,
+	0x56, 0x07, 0xf3, 0xec, 0x1d, 0x5c, 0x52, 0x31, 0xb7, 0xa1, 0xa9, 0xcb, 0x64, 0xaa, 0x29, 0x66,
+	0x29, 0x38, 0x3f, 0x1a, 0x06, 0x17, 0x60, 0xbc, 0x8a, 0xd3, 0x84, 0xdd, 0x2e, 0xee, 0x16, 0x2c,
+	0xf2, 0x4f, 0x82, 0x31, 0x38, 0x5b, 0xc5, 0xf7, 0xf1, 0xf2, 0x39, 0xf6, 0x07, 0xf6, 0x87, 0xc5,
+	0x34, 0x7c, 0x60, 0x91, 0xef, 0x05, 0x00, 0x8c, 0x12, 0xba, 0x4a, 0x59, 0xe4, 0x0f, 0x2d, 0xf1,
+	0xc4, 0x1e, 0x97, 0x19, 0x8b, 0xfc, 0xd3, 0xf0, 0x7b, 0x00, 0xa6, 0x6f, 0xba, 0x80, 0xff, 0xb6,
+	0x0d, 0x83, 0xa3, 0x87, 0x13, 0xdb, 0x31, 0x19, 0xbc, 0x84, 0x07, 0x93, 0xd4, 0x3b, 0xae, 0x24,
+	0xd4, 0x95, 0x44, 0x72, 0xa3, 0xdc, 0x06, 0xdd, 0x9d, 0xca, 0xad, 0xf9, 0xe3, 0x6c, 0x37, 0xee,
+	0xfb, 0xe1, 0x0d, 0xe7, 0x94, 0x7e, 0x7a, 0x93, 0x79, 0x1b, 0x45, 0x85, 0x81, 0x2d, 0xb4, 0x28,
+	0xc3, 0xd0, 0x6e, 0x6e, 0xbe, 0x3a, 0x3e, 0xa7, 0xc2, 0xe4, 0x3d, 0x9f, 0x67, 0x38, 0x77, 0xfc,
+	0x8f, 0x37, 0x6d, 0x87, 0x84, 0x50, 0x61, 0x08, 0xe9, 0x15, 0x84, 0x64, 0x98, 0x10, 0xa7, 0x79,
+	0x1d, 0xb9, 0x62, 0xf8, 0x37, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x15, 0x6f, 0x49, 0xce, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_group_type.pb.go b/googleapis/ads/googleads/v3/enums/ad_group_type.pb.go
new file mode 100644
index 0000000..bb1a35b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_group_type.pb.go
@@ -0,0 +1,182 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_group_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible types of an ad group.
+type AdGroupTypeEnum_AdGroupType int32
+
+const (
+	// The type has not been specified.
+	AdGroupTypeEnum_UNSPECIFIED AdGroupTypeEnum_AdGroupType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupTypeEnum_UNKNOWN AdGroupTypeEnum_AdGroupType = 1
+	// The default ad group type for Search campaigns.
+	AdGroupTypeEnum_SEARCH_STANDARD AdGroupTypeEnum_AdGroupType = 2
+	// The default ad group type for Display campaigns.
+	AdGroupTypeEnum_DISPLAY_STANDARD AdGroupTypeEnum_AdGroupType = 3
+	// The ad group type for Shopping campaigns serving standard product ads.
+	AdGroupTypeEnum_SHOPPING_PRODUCT_ADS AdGroupTypeEnum_AdGroupType = 4
+	// The default ad group type for Hotel campaigns.
+	AdGroupTypeEnum_HOTEL_ADS AdGroupTypeEnum_AdGroupType = 6
+	// The type for ad groups in Smart Shopping campaigns.
+	AdGroupTypeEnum_SHOPPING_SMART_ADS AdGroupTypeEnum_AdGroupType = 7
+	// Short unskippable in-stream video ads.
+	AdGroupTypeEnum_VIDEO_BUMPER AdGroupTypeEnum_AdGroupType = 8
+	// TrueView (skippable) in-stream video ads.
+	AdGroupTypeEnum_VIDEO_TRUE_VIEW_IN_STREAM AdGroupTypeEnum_AdGroupType = 9
+	// TrueView in-display video ads.
+	AdGroupTypeEnum_VIDEO_TRUE_VIEW_IN_DISPLAY AdGroupTypeEnum_AdGroupType = 10
+	// Unskippable in-stream video ads.
+	AdGroupTypeEnum_VIDEO_NON_SKIPPABLE_IN_STREAM AdGroupTypeEnum_AdGroupType = 11
+	// Outstream video ads.
+	AdGroupTypeEnum_VIDEO_OUTSTREAM AdGroupTypeEnum_AdGroupType = 12
+	// Ad group type for Dynamic Search Ads ad groups.
+	AdGroupTypeEnum_SEARCH_DYNAMIC_ADS AdGroupTypeEnum_AdGroupType = 13
+	// The type for ad groups in Shopping Comparison Listing campaigns.
+	AdGroupTypeEnum_SHOPPING_COMPARISON_LISTING_ADS AdGroupTypeEnum_AdGroupType = 14
+	// The ad group type for Promoted Hotel ad groups.
+	AdGroupTypeEnum_PROMOTED_HOTEL_ADS AdGroupTypeEnum_AdGroupType = 15
+)
+
+var AdGroupTypeEnum_AdGroupType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SEARCH_STANDARD",
+	3:  "DISPLAY_STANDARD",
+	4:  "SHOPPING_PRODUCT_ADS",
+	6:  "HOTEL_ADS",
+	7:  "SHOPPING_SMART_ADS",
+	8:  "VIDEO_BUMPER",
+	9:  "VIDEO_TRUE_VIEW_IN_STREAM",
+	10: "VIDEO_TRUE_VIEW_IN_DISPLAY",
+	11: "VIDEO_NON_SKIPPABLE_IN_STREAM",
+	12: "VIDEO_OUTSTREAM",
+	13: "SEARCH_DYNAMIC_ADS",
+	14: "SHOPPING_COMPARISON_LISTING_ADS",
+	15: "PROMOTED_HOTEL_ADS",
+}
+
+var AdGroupTypeEnum_AdGroupType_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"SEARCH_STANDARD":                 2,
+	"DISPLAY_STANDARD":                3,
+	"SHOPPING_PRODUCT_ADS":            4,
+	"HOTEL_ADS":                       6,
+	"SHOPPING_SMART_ADS":              7,
+	"VIDEO_BUMPER":                    8,
+	"VIDEO_TRUE_VIEW_IN_STREAM":       9,
+	"VIDEO_TRUE_VIEW_IN_DISPLAY":      10,
+	"VIDEO_NON_SKIPPABLE_IN_STREAM":   11,
+	"VIDEO_OUTSTREAM":                 12,
+	"SEARCH_DYNAMIC_ADS":              13,
+	"SHOPPING_COMPARISON_LISTING_ADS": 14,
+	"PROMOTED_HOTEL_ADS":              15,
+}
+
+func (x AdGroupTypeEnum_AdGroupType) String() string {
+	return proto.EnumName(AdGroupTypeEnum_AdGroupType_name, int32(x))
+}
+
+func (AdGroupTypeEnum_AdGroupType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_caa3c10e4a74e367, []int{0, 0}
+}
+
+// Defines types of an ad group, specific to a particular campaign channel
+// type. This type drives validations that restrict which entities can be
+// added to the ad group.
+type AdGroupTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupTypeEnum) Reset()         { *m = AdGroupTypeEnum{} }
+func (m *AdGroupTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupTypeEnum) ProtoMessage()    {}
+func (*AdGroupTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caa3c10e4a74e367, []int{0}
+}
+
+func (m *AdGroupTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupTypeEnum.Unmarshal(m, b)
+}
+func (m *AdGroupTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupTypeEnum.Merge(m, src)
+}
+func (m *AdGroupTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupTypeEnum.Size(m)
+}
+func (m *AdGroupTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdGroupTypeEnum_AdGroupType", AdGroupTypeEnum_AdGroupType_name, AdGroupTypeEnum_AdGroupType_value)
+	proto.RegisterType((*AdGroupTypeEnum)(nil), "google.ads.googleads.v3.enums.AdGroupTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_group_type.proto", fileDescriptor_caa3c10e4a74e367)
+}
+
+var fileDescriptor_caa3c10e4a74e367 = []byte{
+	// 478 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4f, 0x6f, 0xd3, 0x30,
+	0x14, 0xa7, 0x2d, 0xda, 0x98, 0xbb, 0x51, 0xcb, 0x4c, 0x08, 0x26, 0x0a, 0xea, 0xb8, 0x27, 0x42,
+	0xb9, 0x85, 0x93, 0xdb, 0x98, 0xd6, 0x5a, 0x63, 0x5b, 0x71, 0x92, 0x69, 0xa8, 0x92, 0x15, 0x48,
+	0x14, 0x55, 0x5a, 0xe3, 0xa8, 0x69, 0x27, 0xed, 0x23, 0xf0, 0x35, 0x38, 0xf2, 0x51, 0xf8, 0x1e,
+	0x5c, 0xb8, 0x73, 0x47, 0x89, 0xdb, 0xac, 0x07, 0xd8, 0xc5, 0x7a, 0xfe, 0xfd, 0x79, 0xfa, 0x3d,
+	0xbd, 0x07, 0x3e, 0xe4, 0x5a, 0xe7, 0xb7, 0x99, 0x9d, 0xa4, 0x95, 0x6d, 0xca, 0xba, 0xba, 0x73,
+	0xec, 0xac, 0xd8, 0xae, 0x2a, 0x3b, 0x49, 0x55, 0xbe, 0xd6, 0xdb, 0x52, 0x6d, 0xee, 0xcb, 0xcc,
+	0x2a, 0xd7, 0x7a, 0xa3, 0xd1, 0xd0, 0xe8, 0xac, 0x24, 0xad, 0xac, 0xd6, 0x62, 0xdd, 0x39, 0x56,
+	0x63, 0xb9, 0x78, 0xb3, 0xef, 0x58, 0x2e, 0xed, 0xa4, 0x28, 0xf4, 0x26, 0xd9, 0x2c, 0x75, 0x51,
+	0x19, 0xf3, 0xe5, 0xb7, 0x1e, 0x18, 0xe0, 0x74, 0x5a, 0xf7, 0x0c, 0xef, 0xcb, 0x8c, 0x14, 0xdb,
+	0xd5, 0xe5, 0x9f, 0x2e, 0xe8, 0x1f, 0x60, 0x68, 0x00, 0xfa, 0x11, 0x93, 0x82, 0x4c, 0xe8, 0x27,
+	0x4a, 0x3c, 0xf8, 0x04, 0xf5, 0xc1, 0x71, 0xc4, 0xae, 0x18, 0xbf, 0x66, 0xb0, 0x83, 0x5e, 0x80,
+	0x81, 0x24, 0x38, 0x98, 0xcc, 0x94, 0x0c, 0x31, 0xf3, 0x70, 0xe0, 0xc1, 0x2e, 0x3a, 0x07, 0xd0,
+	0xa3, 0x52, 0xcc, 0xf1, 0xcd, 0x03, 0xda, 0x43, 0xaf, 0xc0, 0xb9, 0x9c, 0x71, 0x21, 0x28, 0x9b,
+	0x2a, 0x11, 0x70, 0x2f, 0x9a, 0x84, 0x0a, 0x7b, 0x12, 0x3e, 0x45, 0x67, 0xe0, 0x64, 0xc6, 0x43,
+	0x32, 0x6f, 0xbe, 0x47, 0xe8, 0x25, 0x40, 0xad, 0x50, 0xfa, 0x38, 0x30, 0xb2, 0x63, 0x04, 0xc1,
+	0x69, 0x4c, 0x3d, 0xc2, 0xd5, 0x38, 0xf2, 0x05, 0x09, 0xe0, 0x33, 0x34, 0x04, 0xaf, 0x0d, 0x12,
+	0x06, 0x11, 0x51, 0x31, 0x25, 0xd7, 0x8a, 0x32, 0x25, 0xc3, 0x80, 0x60, 0x1f, 0x9e, 0xa0, 0xb7,
+	0xe0, 0xe2, 0x1f, 0xf4, 0x2e, 0x1a, 0x04, 0x68, 0x04, 0x86, 0x86, 0x67, 0x9c, 0x29, 0x79, 0x45,
+	0x85, 0xc0, 0xe3, 0x39, 0x39, 0x68, 0xd1, 0xaf, 0xe7, 0x33, 0x12, 0x1e, 0x85, 0x3b, 0xf0, 0xb4,
+	0x09, 0x68, 0x86, 0xf6, 0x6e, 0x18, 0xf6, 0xe9, 0xa4, 0x09, 0x78, 0x86, 0xde, 0x83, 0x77, 0x6d,
+	0xf0, 0x09, 0xf7, 0x05, 0x0e, 0xa8, 0xe4, 0x4c, 0xcd, 0xa9, 0x0c, 0x6b, 0xa8, 0x16, 0x3d, 0xaf,
+	0xcd, 0x22, 0xe0, 0x3e, 0x0f, 0x89, 0xa7, 0x1e, 0xa6, 0x1e, 0x8c, 0x7f, 0x75, 0xc0, 0xe8, 0xab,
+	0x5e, 0x59, 0x8f, 0xee, 0x73, 0x0c, 0x0f, 0x56, 0x23, 0xea, 0x1d, 0x8a, 0xce, 0xe7, 0xf1, 0xce,
+	0x92, 0xeb, 0xdb, 0xa4, 0xc8, 0x2d, 0xbd, 0xce, 0xed, 0x3c, 0x2b, 0x9a, 0x0d, 0xef, 0xaf, 0xa8,
+	0x5c, 0x56, 0xff, 0x39, 0xaa, 0x8f, 0xcd, 0xfb, 0xbd, 0xdb, 0x9b, 0x62, 0xfc, 0xa3, 0x3b, 0x9c,
+	0x9a, 0x56, 0x38, 0xad, 0x2c, 0x53, 0xd6, 0x55, 0xec, 0x58, 0xf5, 0x69, 0x54, 0x3f, 0xf7, 0xfc,
+	0x02, 0xa7, 0xd5, 0xa2, 0xe5, 0x17, 0xb1, 0xb3, 0x68, 0xf8, 0xdf, 0xdd, 0x91, 0x01, 0x5d, 0x17,
+	0xa7, 0x95, 0xeb, 0xb6, 0x0a, 0xd7, 0x8d, 0x1d, 0xd7, 0x6d, 0x34, 0x5f, 0x8e, 0x9a, 0x60, 0xce,
+	0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x28, 0xb8, 0x91, 0xec, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_network_type.pb.go b/googleapis/ads/googleads/v3/enums/ad_network_type.pb.go
new file mode 100644
index 0000000..6f2193e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_network_type.pb.go
@@ -0,0 +1,143 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_network_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates Google Ads network types.
+type AdNetworkTypeEnum_AdNetworkType int32
+
+const (
+	// Not specified.
+	AdNetworkTypeEnum_UNSPECIFIED AdNetworkTypeEnum_AdNetworkType = 0
+	// The value is unknown in this version.
+	AdNetworkTypeEnum_UNKNOWN AdNetworkTypeEnum_AdNetworkType = 1
+	// Google search.
+	AdNetworkTypeEnum_SEARCH AdNetworkTypeEnum_AdNetworkType = 2
+	// Search partners.
+	AdNetworkTypeEnum_SEARCH_PARTNERS AdNetworkTypeEnum_AdNetworkType = 3
+	// Display Network.
+	AdNetworkTypeEnum_CONTENT AdNetworkTypeEnum_AdNetworkType = 4
+	// YouTube Search.
+	AdNetworkTypeEnum_YOUTUBE_SEARCH AdNetworkTypeEnum_AdNetworkType = 5
+	// YouTube Videos
+	AdNetworkTypeEnum_YOUTUBE_WATCH AdNetworkTypeEnum_AdNetworkType = 6
+	// Cross-network.
+	AdNetworkTypeEnum_MIXED AdNetworkTypeEnum_AdNetworkType = 7
+)
+
+var AdNetworkTypeEnum_AdNetworkType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH",
+	3: "SEARCH_PARTNERS",
+	4: "CONTENT",
+	5: "YOUTUBE_SEARCH",
+	6: "YOUTUBE_WATCH",
+	7: "MIXED",
+}
+
+var AdNetworkTypeEnum_AdNetworkType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"SEARCH":          2,
+	"SEARCH_PARTNERS": 3,
+	"CONTENT":         4,
+	"YOUTUBE_SEARCH":  5,
+	"YOUTUBE_WATCH":   6,
+	"MIXED":           7,
+}
+
+func (x AdNetworkTypeEnum_AdNetworkType) String() string {
+	return proto.EnumName(AdNetworkTypeEnum_AdNetworkType_name, int32(x))
+}
+
+func (AdNetworkTypeEnum_AdNetworkType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a418102a00fe2b95, []int{0, 0}
+}
+
+// Container for enumeration of Google Ads network types.
+type AdNetworkTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdNetworkTypeEnum) Reset()         { *m = AdNetworkTypeEnum{} }
+func (m *AdNetworkTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdNetworkTypeEnum) ProtoMessage()    {}
+func (*AdNetworkTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a418102a00fe2b95, []int{0}
+}
+
+func (m *AdNetworkTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdNetworkTypeEnum.Unmarshal(m, b)
+}
+func (m *AdNetworkTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdNetworkTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdNetworkTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdNetworkTypeEnum.Merge(m, src)
+}
+func (m *AdNetworkTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdNetworkTypeEnum.Size(m)
+}
+func (m *AdNetworkTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdNetworkTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdNetworkTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdNetworkTypeEnum_AdNetworkType", AdNetworkTypeEnum_AdNetworkType_name, AdNetworkTypeEnum_AdNetworkType_value)
+	proto.RegisterType((*AdNetworkTypeEnum)(nil), "google.ads.googleads.v3.enums.AdNetworkTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_network_type.proto", fileDescriptor_a418102a00fe2b95)
+}
+
+var fileDescriptor_a418102a00fe2b95 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x6e, 0xe2, 0x30,
+	0x18, 0x9d, 0x84, 0x01, 0x34, 0x46, 0x0c, 0xc1, 0xb3, 0x1b, 0x0d, 0x0b, 0x38, 0x80, 0xb3, 0xc8,
+	0xce, 0xb3, 0x72, 0x82, 0x0b, 0xa8, 0xaa, 0x89, 0x20, 0x81, 0xb6, 0x8a, 0x14, 0xa5, 0x4d, 0x14,
+	0xa1, 0x82, 0x1d, 0xe1, 0x40, 0xc5, 0x21, 0x7a, 0x89, 0x76, 0xd7, 0xa3, 0xf4, 0x22, 0x95, 0x7a,
+	0x8a, 0x2a, 0x31, 0x41, 0x62, 0xd1, 0x6e, 0xac, 0xa7, 0xef, 0xfd, 0xc8, 0xef, 0x01, 0x2b, 0x15,
+	0x22, 0x5d, 0x27, 0x66, 0x14, 0x4b, 0x53, 0xc1, 0x02, 0xed, 0x2d, 0x33, 0xe1, 0xbb, 0x8d, 0x34,
+	0xa3, 0x38, 0xe4, 0x49, 0xfe, 0x28, 0xb6, 0x0f, 0x61, 0x7e, 0xc8, 0x12, 0x94, 0x6d, 0x45, 0x2e,
+	0x60, 0x4f, 0x29, 0x51, 0x14, 0x4b, 0x74, 0x32, 0xa1, 0xbd, 0x85, 0x4a, 0xd3, 0xdf, 0x7f, 0x55,
+	0x66, 0xb6, 0x32, 0x23, 0xce, 0x45, 0x1e, 0xe5, 0x2b, 0xc1, 0xa5, 0x32, 0x0f, 0x5e, 0x34, 0xd0,
+	0x25, 0x31, 0x53, 0xa9, 0xde, 0x21, 0x4b, 0x28, 0xdf, 0x6d, 0x06, 0x4f, 0x1a, 0x68, 0x9f, 0x5d,
+	0x61, 0x07, 0xb4, 0x7c, 0x36, 0x77, 0xa9, 0x33, 0xb9, 0x98, 0xd0, 0xa1, 0xf1, 0x03, 0xb6, 0x40,
+	0xd3, 0x67, 0x97, 0x6c, 0xba, 0x64, 0x86, 0x06, 0x01, 0x68, 0xcc, 0x29, 0x99, 0x39, 0x63, 0x43,
+	0x87, 0x7f, 0x40, 0x47, 0xe1, 0xd0, 0x25, 0x33, 0x8f, 0xd1, 0xd9, 0xdc, 0xa8, 0x15, 0x6a, 0x67,
+	0xca, 0x3c, 0xca, 0x3c, 0xe3, 0x27, 0x84, 0xe0, 0xf7, 0xcd, 0xd4, 0xf7, 0x7c, 0x9b, 0x86, 0x47,
+	0x57, 0x1d, 0x76, 0x41, 0xbb, 0xba, 0x2d, 0x89, 0xe7, 0x8c, 0x8d, 0x06, 0xfc, 0x05, 0xea, 0x57,
+	0x93, 0x6b, 0x3a, 0x34, 0x9a, 0xf6, 0xbb, 0x06, 0xfa, 0xf7, 0x62, 0x83, 0xbe, 0x6d, 0x6a, 0xc3,
+	0xb3, 0x2f, 0xbb, 0x45, 0x3f, 0x57, 0xbb, 0xb5, 0x8f, 0xa6, 0x54, 0xac, 0x23, 0x9e, 0x22, 0xb1,
+	0x4d, 0xcd, 0x34, 0xe1, 0x65, 0xfb, 0x6a, 0xe3, 0x6c, 0x25, 0xbf, 0x98, 0xfc, 0x7f, 0xf9, 0x3e,
+	0xeb, 0xb5, 0x11, 0x21, 0xaf, 0x7a, 0x6f, 0xa4, 0xa2, 0x48, 0x2c, 0x91, 0x82, 0x05, 0x5a, 0x58,
+	0xa8, 0x18, 0x4d, 0xbe, 0x55, 0x7c, 0x40, 0x62, 0x19, 0x9c, 0xf8, 0x60, 0x61, 0x05, 0x25, 0xff,
+	0xa1, 0xf7, 0xd5, 0x11, 0x63, 0x12, 0x4b, 0x8c, 0x4f, 0x0a, 0x8c, 0x17, 0x16, 0xc6, 0xa5, 0xe6,
+	0xae, 0x51, 0x7e, 0xcc, 0xfa, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xda, 0xad, 0xab, 0x55, 0x0a, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_serving_optimization_status.pb.go b/googleapis/ads/googleads/v3/enums/ad_serving_optimization_status.pb.go
new file mode 100644
index 0000000..0e00365
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_serving_optimization_status.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_serving_optimization_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible serving statuses.
+type AdServingOptimizationStatusEnum_AdServingOptimizationStatus int32
+
+const (
+	// No value has been specified.
+	AdServingOptimizationStatusEnum_UNSPECIFIED AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdServingOptimizationStatusEnum_UNKNOWN AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 1
+	// Ad serving is optimized based on CTR for the campaign.
+	AdServingOptimizationStatusEnum_OPTIMIZE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 2
+	// Ad serving is optimized based on CTR * Conversion for the campaign. If
+	// the campaign is not in the conversion optimizer bidding strategy, it will
+	// default to OPTIMIZED.
+	AdServingOptimizationStatusEnum_CONVERSION_OPTIMIZE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 3
+	// Ads are rotated evenly for 90 days, then optimized for clicks.
+	AdServingOptimizationStatusEnum_ROTATE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 4
+	// Show lower performing ads more evenly with higher performing ads, and do
+	// not optimize.
+	AdServingOptimizationStatusEnum_ROTATE_INDEFINITELY AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 5
+	// Ad serving optimization status is not available.
+	AdServingOptimizationStatusEnum_UNAVAILABLE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 6
+)
+
+var AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPTIMIZE",
+	3: "CONVERSION_OPTIMIZE",
+	4: "ROTATE",
+	5: "ROTATE_INDEFINITELY",
+	6: "UNAVAILABLE",
+}
+
+var AdServingOptimizationStatusEnum_AdServingOptimizationStatus_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"OPTIMIZE":            2,
+	"CONVERSION_OPTIMIZE": 3,
+	"ROTATE":              4,
+	"ROTATE_INDEFINITELY": 5,
+	"UNAVAILABLE":         6,
+}
+
+func (x AdServingOptimizationStatusEnum_AdServingOptimizationStatus) String() string {
+	return proto.EnumName(AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name, int32(x))
+}
+
+func (AdServingOptimizationStatusEnum_AdServingOptimizationStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_68f0c6c0e1ebc7e3, []int{0, 0}
+}
+
+// Possible ad serving statuses of a campaign.
+type AdServingOptimizationStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdServingOptimizationStatusEnum) Reset()         { *m = AdServingOptimizationStatusEnum{} }
+func (m *AdServingOptimizationStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdServingOptimizationStatusEnum) ProtoMessage()    {}
+func (*AdServingOptimizationStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68f0c6c0e1ebc7e3, []int{0}
+}
+
+func (m *AdServingOptimizationStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Unmarshal(m, b)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdServingOptimizationStatusEnum.Merge(m, src)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Size(m)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdServingOptimizationStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdServingOptimizationStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus", AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name, AdServingOptimizationStatusEnum_AdServingOptimizationStatus_value)
+	proto.RegisterType((*AdServingOptimizationStatusEnum)(nil), "google.ads.googleads.v3.enums.AdServingOptimizationStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_serving_optimization_status.proto", fileDescriptor_68f0c6c0e1ebc7e3)
+}
+
+var fileDescriptor_68f0c6c0e1ebc7e3 = []byte{
+	// 367 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x8a, 0xdb, 0x30,
+	0x14, 0xac, 0x9d, 0x36, 0x2d, 0x4a, 0xa1, 0xc6, 0x3d, 0x14, 0xda, 0x86, 0x36, 0xf9, 0x00, 0xf9,
+	0xe0, 0x9b, 0x7a, 0x92, 0x13, 0x25, 0x88, 0xa6, 0xb2, 0x89, 0x1d, 0x97, 0x06, 0x83, 0x71, 0xd7,
+	0xc6, 0x18, 0x62, 0xc9, 0x44, 0x4e, 0x0e, 0xfb, 0x25, 0x7b, 0xde, 0xe3, 0x7e, 0xc3, 0x7e, 0xc1,
+	0x7e, 0xca, 0xde, 0xf7, 0xbe, 0x58, 0x4a, 0xcc, 0x5e, 0x36, 0x17, 0x31, 0x68, 0xe6, 0xcd, 0x3c,
+	0xe6, 0x01, 0xaf, 0x14, 0xa2, 0xdc, 0x15, 0x4e, 0x96, 0x4b, 0x47, 0xc3, 0x0e, 0x1d, 0x5d, 0xa7,
+	0xe0, 0x87, 0x5a, 0x3a, 0x59, 0x9e, 0xca, 0x62, 0x7f, 0xac, 0x78, 0x99, 0x8a, 0xa6, 0xad, 0xea,
+	0xea, 0x3a, 0x6b, 0x2b, 0xc1, 0x53, 0xd9, 0x66, 0xed, 0x41, 0xc2, 0x66, 0x2f, 0x5a, 0x61, 0x8f,
+	0xf5, 0x20, 0xcc, 0x72, 0x09, 0x7b, 0x0f, 0x78, 0x74, 0xa1, 0xf2, 0xf8, 0xfa, 0xfd, 0x1c, 0xd1,
+	0x54, 0x4e, 0xc6, 0xb9, 0x68, 0x95, 0xc5, 0x69, 0x78, 0x7a, 0x6f, 0x80, 0x1f, 0x38, 0x0f, 0x75,
+	0x88, 0xff, 0x22, 0x23, 0x54, 0x11, 0x84, 0x1f, 0xea, 0xe9, 0x8d, 0x01, 0xbe, 0x5d, 0xd0, 0xd8,
+	0x9f, 0xc0, 0x68, 0xc3, 0xc2, 0x80, 0xcc, 0xe8, 0x82, 0x92, 0xb9, 0xf5, 0xc6, 0x1e, 0x81, 0xf7,
+	0x1b, 0xf6, 0x9b, 0xf9, 0x7f, 0x99, 0x65, 0xd8, 0x1f, 0xc1, 0x07, 0x3f, 0x88, 0xe8, 0x1f, 0xba,
+	0x25, 0x96, 0x69, 0x7f, 0x01, 0x9f, 0x67, 0x3e, 0x8b, 0xc9, 0x3a, 0xa4, 0x3e, 0x4b, 0x7b, 0x62,
+	0x60, 0x03, 0x30, 0x5c, 0xfb, 0x11, 0x8e, 0x88, 0xf5, 0xb6, 0x13, 0x69, 0x9c, 0x52, 0x36, 0x27,
+	0x0b, 0xca, 0x68, 0x44, 0x56, 0xff, 0xac, 0x77, 0x3a, 0x09, 0xc7, 0x98, 0xae, 0xb0, 0xb7, 0x22,
+	0xd6, 0xd0, 0x7b, 0x32, 0xc0, 0xe4, 0x4a, 0xd4, 0xf0, 0x62, 0x05, 0xde, 0xcf, 0x0b, 0xdb, 0x07,
+	0x5d, 0x0d, 0x81, 0xb1, 0x3d, 0x5d, 0x02, 0x96, 0x62, 0x97, 0xf1, 0x12, 0x8a, 0x7d, 0xe9, 0x94,
+	0x05, 0x57, 0x25, 0x9d, 0x2f, 0xd3, 0x54, 0xf2, 0x95, 0x43, 0xfd, 0x52, 0xef, 0xad, 0x39, 0x58,
+	0x62, 0x7c, 0x67, 0x8e, 0x97, 0xda, 0x0a, 0xe7, 0x12, 0x6a, 0xd8, 0xa1, 0xd8, 0x85, 0x5d, 0x9b,
+	0xf2, 0xe1, 0xcc, 0x27, 0x38, 0x97, 0x49, 0xcf, 0x27, 0xb1, 0x9b, 0x28, 0xfe, 0xd1, 0x9c, 0xe8,
+	0x4f, 0x84, 0x70, 0x2e, 0x11, 0xea, 0x15, 0x08, 0xc5, 0x2e, 0x42, 0x4a, 0xf3, 0x7f, 0xa8, 0x16,
+	0x73, 0x9f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x79, 0x51, 0xc9, 0x40, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_strength.pb.go b/googleapis/ads/googleads/v3/enums/ad_strength.pb.go
new file mode 100644
index 0000000..3f9c8ec
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_strength.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_strength.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible ad strengths.
+type AdStrengthEnum_AdStrength int32
+
+const (
+	// Not specified.
+	AdStrengthEnum_UNSPECIFIED AdStrengthEnum_AdStrength = 0
+	// Used for return value only. Represents value unknown in this version.
+	AdStrengthEnum_UNKNOWN AdStrengthEnum_AdStrength = 1
+	// The ad strength is currently pending.
+	AdStrengthEnum_PENDING AdStrengthEnum_AdStrength = 2
+	// No ads could be generated.
+	AdStrengthEnum_NO_ADS AdStrengthEnum_AdStrength = 3
+	// Poor strength.
+	AdStrengthEnum_POOR AdStrengthEnum_AdStrength = 4
+	// Average strength.
+	AdStrengthEnum_AVERAGE AdStrengthEnum_AdStrength = 5
+	// Good strength.
+	AdStrengthEnum_GOOD AdStrengthEnum_AdStrength = 6
+	// Excellent strength.
+	AdStrengthEnum_EXCELLENT AdStrengthEnum_AdStrength = 7
+)
+
+var AdStrengthEnum_AdStrength_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "NO_ADS",
+	4: "POOR",
+	5: "AVERAGE",
+	6: "GOOD",
+	7: "EXCELLENT",
+}
+
+var AdStrengthEnum_AdStrength_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"NO_ADS":      3,
+	"POOR":        4,
+	"AVERAGE":     5,
+	"GOOD":        6,
+	"EXCELLENT":   7,
+}
+
+func (x AdStrengthEnum_AdStrength) String() string {
+	return proto.EnumName(AdStrengthEnum_AdStrength_name, int32(x))
+}
+
+func (AdStrengthEnum_AdStrength) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3eea2cf3af8be160, []int{0, 0}
+}
+
+// Container for enum describing possible ad strengths.
+type AdStrengthEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdStrengthEnum) Reset()         { *m = AdStrengthEnum{} }
+func (m *AdStrengthEnum) String() string { return proto.CompactTextString(m) }
+func (*AdStrengthEnum) ProtoMessage()    {}
+func (*AdStrengthEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3eea2cf3af8be160, []int{0}
+}
+
+func (m *AdStrengthEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdStrengthEnum.Unmarshal(m, b)
+}
+func (m *AdStrengthEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdStrengthEnum.Marshal(b, m, deterministic)
+}
+func (m *AdStrengthEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdStrengthEnum.Merge(m, src)
+}
+func (m *AdStrengthEnum) XXX_Size() int {
+	return xxx_messageInfo_AdStrengthEnum.Size(m)
+}
+func (m *AdStrengthEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdStrengthEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdStrengthEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdStrengthEnum_AdStrength", AdStrengthEnum_AdStrength_name, AdStrengthEnum_AdStrength_value)
+	proto.RegisterType((*AdStrengthEnum)(nil), "google.ads.googleads.v3.enums.AdStrengthEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_strength.proto", fileDescriptor_3eea2cf3af8be160)
+}
+
+var fileDescriptor_3eea2cf3af8be160 = []byte{
+	// 331 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x6e, 0xea, 0x30,
+	0x14, 0xfc, 0x09, 0x7c, 0x68, 0x8d, 0x5a, 0xac, 0x2c, 0xab, 0xb2, 0x80, 0x03, 0x38, 0x8b, 0xec,
+	0xdc, 0x95, 0x21, 0x6e, 0x84, 0x8a, 0x9c, 0x08, 0x4a, 0x5a, 0x55, 0x91, 0x50, 0x5a, 0x47, 0x2e,
+	0x12, 0xd8, 0x08, 0x07, 0x6e, 0xd0, 0x8b, 0x74, 0xd9, 0xa3, 0xf4, 0x1c, 0x5d, 0xf5, 0x14, 0x95,
+	0x1d, 0x08, 0xab, 0x76, 0x63, 0x8d, 0xdf, 0x9b, 0x19, 0xcd, 0x1b, 0xe0, 0x0b, 0xa5, 0xc4, 0xaa,
+	0xf0, 0x73, 0xae, 0x0f, 0xd0, 0xa0, 0x7d, 0xe0, 0x17, 0x72, 0xb7, 0xd6, 0x7e, 0xce, 0x17, 0xba,
+	0xdc, 0x16, 0x52, 0x94, 0xaf, 0x68, 0xb3, 0x55, 0xa5, 0xf2, 0x7a, 0x15, 0x0b, 0xe5, 0x5c, 0xa3,
+	0x5a, 0x80, 0xf6, 0x01, 0xb2, 0x82, 0xab, 0xeb, 0xa3, 0xdf, 0x66, 0xe9, 0xe7, 0x52, 0xaa, 0x32,
+	0x2f, 0x97, 0x4a, 0xea, 0x4a, 0x3c, 0x78, 0x73, 0xc0, 0x25, 0xe1, 0xb3, 0x83, 0x23, 0x95, 0xbb,
+	0xf5, 0x40, 0x03, 0x70, 0x9a, 0x78, 0x5d, 0xd0, 0x99, 0xb3, 0x59, 0x42, 0x47, 0xe3, 0xdb, 0x31,
+	0x0d, 0xe1, 0x3f, 0xaf, 0x03, 0xda, 0x73, 0x76, 0xc7, 0xe2, 0x07, 0x06, 0x1d, 0xf3, 0x49, 0x28,
+	0x0b, 0xc7, 0x2c, 0x82, 0xae, 0x07, 0x40, 0x8b, 0xc5, 0x0b, 0x12, 0xce, 0x60, 0xc3, 0x3b, 0x03,
+	0xcd, 0x24, 0x8e, 0xa7, 0xb0, 0x69, 0x28, 0x24, 0xa5, 0x53, 0x12, 0x51, 0xf8, 0xdf, 0x8c, 0xa3,
+	0x38, 0x0e, 0x61, 0xcb, 0xbb, 0x00, 0xe7, 0xf4, 0x71, 0x44, 0x27, 0x13, 0xca, 0xee, 0x61, 0x7b,
+	0xf8, 0xe5, 0x80, 0xfe, 0x8b, 0x5a, 0xa3, 0x3f, 0x6f, 0x19, 0x76, 0x4f, 0xc1, 0x12, 0x13, 0x3f,
+	0x71, 0x9e, 0x86, 0x07, 0x85, 0x50, 0xab, 0x5c, 0x0a, 0xa4, 0xb6, 0xc2, 0x17, 0x85, 0xb4, 0xc7,
+	0x1d, 0xeb, 0xdb, 0x2c, 0xf5, 0x2f, 0x6d, 0xde, 0xd8, 0xf7, 0xdd, 0x6d, 0x44, 0x84, 0x7c, 0xb8,
+	0xbd, 0xa8, 0xb2, 0x22, 0x5c, 0xa3, 0x0a, 0x1a, 0x94, 0x06, 0xc8, 0xd4, 0xa2, 0x3f, 0x8f, 0xfb,
+	0x8c, 0x70, 0x9d, 0xd5, 0xfb, 0x2c, 0x0d, 0x32, 0xbb, 0xff, 0x76, 0xfb, 0xd5, 0x10, 0x63, 0xc2,
+	0x35, 0xc6, 0x35, 0x03, 0xe3, 0x34, 0xc0, 0xd8, 0x72, 0x9e, 0x5b, 0x36, 0x58, 0xf0, 0x13, 0x00,
+	0x00, 0xff, 0xff, 0x86, 0x7e, 0x00, 0xb0, 0xe5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/ad_type.pb.go b/googleapis/ads/googleads/v3/enums/ad_type.pb.go
new file mode 100644
index 0000000..f45dd3f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/ad_type.pb.go
@@ -0,0 +1,208 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/ad_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible types of an ad.
+type AdTypeEnum_AdType int32
+
+const (
+	// No value has been specified.
+	AdTypeEnum_UNSPECIFIED AdTypeEnum_AdType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdTypeEnum_UNKNOWN AdTypeEnum_AdType = 1
+	// The ad is a text ad.
+	AdTypeEnum_TEXT_AD AdTypeEnum_AdType = 2
+	// The ad is an expanded text ad.
+	AdTypeEnum_EXPANDED_TEXT_AD AdTypeEnum_AdType = 3
+	// The ad is a call only ad.
+	AdTypeEnum_CALL_ONLY_AD AdTypeEnum_AdType = 6
+	// The ad is an expanded dynamic search ad.
+	AdTypeEnum_EXPANDED_DYNAMIC_SEARCH_AD AdTypeEnum_AdType = 7
+	// The ad is a hotel ad.
+	AdTypeEnum_HOTEL_AD AdTypeEnum_AdType = 8
+	// The ad is a Smart Shopping ad.
+	AdTypeEnum_SHOPPING_SMART_AD AdTypeEnum_AdType = 9
+	// The ad is a standard Shopping ad.
+	AdTypeEnum_SHOPPING_PRODUCT_AD AdTypeEnum_AdType = 10
+	// The ad is a video ad.
+	AdTypeEnum_VIDEO_AD AdTypeEnum_AdType = 12
+	// This ad is a Gmail ad.
+	AdTypeEnum_GMAIL_AD AdTypeEnum_AdType = 13
+	// This ad is an Image ad.
+	AdTypeEnum_IMAGE_AD AdTypeEnum_AdType = 14
+	// The ad is a responsive search ad.
+	AdTypeEnum_RESPONSIVE_SEARCH_AD AdTypeEnum_AdType = 15
+	// The ad is a legacy responsive display ad.
+	AdTypeEnum_LEGACY_RESPONSIVE_DISPLAY_AD AdTypeEnum_AdType = 16
+	// The ad is an app ad.
+	AdTypeEnum_APP_AD AdTypeEnum_AdType = 17
+	// The ad is a legacy app install ad.
+	AdTypeEnum_LEGACY_APP_INSTALL_AD AdTypeEnum_AdType = 18
+	// The ad is a responsive display ad.
+	AdTypeEnum_RESPONSIVE_DISPLAY_AD AdTypeEnum_AdType = 19
+	// The ad is a display upload ad with the HTML5_UPLOAD_AD product type.
+	AdTypeEnum_HTML5_UPLOAD_AD AdTypeEnum_AdType = 21
+	// The ad is a display upload ad with one of the DYNAMIC_HTML5_* product
+	// types.
+	AdTypeEnum_DYNAMIC_HTML5_AD AdTypeEnum_AdType = 22
+	// The ad is an app engagement ad.
+	AdTypeEnum_APP_ENGAGEMENT_AD AdTypeEnum_AdType = 23
+	// The ad is a Shopping Comparison Listing ad.
+	AdTypeEnum_SHOPPING_COMPARISON_LISTING_AD AdTypeEnum_AdType = 24
+)
+
+var AdTypeEnum_AdType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "TEXT_AD",
+	3:  "EXPANDED_TEXT_AD",
+	6:  "CALL_ONLY_AD",
+	7:  "EXPANDED_DYNAMIC_SEARCH_AD",
+	8:  "HOTEL_AD",
+	9:  "SHOPPING_SMART_AD",
+	10: "SHOPPING_PRODUCT_AD",
+	12: "VIDEO_AD",
+	13: "GMAIL_AD",
+	14: "IMAGE_AD",
+	15: "RESPONSIVE_SEARCH_AD",
+	16: "LEGACY_RESPONSIVE_DISPLAY_AD",
+	17: "APP_AD",
+	18: "LEGACY_APP_INSTALL_AD",
+	19: "RESPONSIVE_DISPLAY_AD",
+	21: "HTML5_UPLOAD_AD",
+	22: "DYNAMIC_HTML5_AD",
+	23: "APP_ENGAGEMENT_AD",
+	24: "SHOPPING_COMPARISON_LISTING_AD",
+}
+
+var AdTypeEnum_AdType_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"TEXT_AD":                        2,
+	"EXPANDED_TEXT_AD":               3,
+	"CALL_ONLY_AD":                   6,
+	"EXPANDED_DYNAMIC_SEARCH_AD":     7,
+	"HOTEL_AD":                       8,
+	"SHOPPING_SMART_AD":              9,
+	"SHOPPING_PRODUCT_AD":            10,
+	"VIDEO_AD":                       12,
+	"GMAIL_AD":                       13,
+	"IMAGE_AD":                       14,
+	"RESPONSIVE_SEARCH_AD":           15,
+	"LEGACY_RESPONSIVE_DISPLAY_AD":   16,
+	"APP_AD":                         17,
+	"LEGACY_APP_INSTALL_AD":          18,
+	"RESPONSIVE_DISPLAY_AD":          19,
+	"HTML5_UPLOAD_AD":                21,
+	"DYNAMIC_HTML5_AD":               22,
+	"APP_ENGAGEMENT_AD":              23,
+	"SHOPPING_COMPARISON_LISTING_AD": 24,
+}
+
+func (x AdTypeEnum_AdType) String() string {
+	return proto.EnumName(AdTypeEnum_AdType_name, int32(x))
+}
+
+func (AdTypeEnum_AdType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2322810cfdc14ea3, []int{0, 0}
+}
+
+// Container for enum describing possible types of an ad.
+type AdTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdTypeEnum) Reset()         { *m = AdTypeEnum{} }
+func (m *AdTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdTypeEnum) ProtoMessage()    {}
+func (*AdTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2322810cfdc14ea3, []int{0}
+}
+
+func (m *AdTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdTypeEnum.Unmarshal(m, b)
+}
+func (m *AdTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdTypeEnum.Merge(m, src)
+}
+func (m *AdTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdTypeEnum.Size(m)
+}
+func (m *AdTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdTypeEnum_AdType", AdTypeEnum_AdType_name, AdTypeEnum_AdType_value)
+	proto.RegisterType((*AdTypeEnum)(nil), "google.ads.googleads.v3.enums.AdTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/ad_type.proto", fileDescriptor_2322810cfdc14ea3)
+}
+
+var fileDescriptor_2322810cfdc14ea3 = []byte{
+	// 517 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6a, 0xdb, 0x4c,
+	0x14, 0xfd, 0x62, 0x83, 0x93, 0x6f, 0xe2, 0xd6, 0xca, 0x38, 0x6e, 0xd2, 0x90, 0x84, 0xc6, 0xdb,
+	0x82, 0xb4, 0x10, 0xdd, 0xa8, 0xab, 0x6b, 0xcd, 0x54, 0x1e, 0x2a, 0x8d, 0x06, 0x4b, 0x76, 0xe3,
+	0x62, 0x10, 0x6a, 0x65, 0x84, 0x21, 0x96, 0x4c, 0xe4, 0x04, 0xf2, 0x3a, 0x5d, 0xf6, 0x45, 0x0a,
+	0x7d, 0x80, 0xae, 0xbb, 0xee, 0x53, 0x94, 0x3b, 0x8a, 0x45, 0x16, 0x6d, 0x37, 0xe2, 0x9e, 0x9f,
+	0x39, 0xcc, 0x5c, 0x1d, 0xf2, 0x3a, 0x2f, 0xcb, 0xfc, 0x66, 0x69, 0xa5, 0x59, 0x65, 0xd5, 0x23,
+	0x4e, 0xf7, 0xb6, 0xb5, 0x2c, 0xee, 0xd6, 0x95, 0x95, 0x66, 0xc9, 0xf6, 0x61, 0xb3, 0x34, 0x37,
+	0xb7, 0xe5, 0xb6, 0xa4, 0x17, 0xb5, 0xc3, 0x4c, 0xb3, 0xca, 0x6c, 0xcc, 0xe6, 0xbd, 0x6d, 0x6a,
+	0xf3, 0xd9, 0xf9, 0x2e, 0x6b, 0xb3, 0xb2, 0xd2, 0xa2, 0x28, 0xb7, 0xe9, 0x76, 0x55, 0x16, 0x55,
+	0x7d, 0x78, 0xf8, 0xa3, 0x4d, 0x08, 0x64, 0xf1, 0xc3, 0x66, 0xc9, 0x8b, 0xbb, 0xf5, 0xf0, 0x5b,
+	0x9b, 0x74, 0x6a, 0x48, 0x7b, 0xe4, 0x70, 0x2a, 0x23, 0xc5, 0x5d, 0xf1, 0x4e, 0x70, 0x66, 0xfc,
+	0x47, 0x0f, 0xc9, 0xfe, 0x54, 0xbe, 0x97, 0xe1, 0x07, 0x69, 0xec, 0x21, 0x88, 0xf9, 0x75, 0x9c,
+	0x00, 0x33, 0x5a, 0xf4, 0x98, 0x18, 0xfc, 0x5a, 0x81, 0x64, 0x9c, 0x25, 0x3b, 0xb6, 0x4d, 0x0d,
+	0xd2, 0x75, 0xc1, 0xf7, 0x93, 0x50, 0xfa, 0x73, 0x64, 0x3a, 0xf4, 0x92, 0x9c, 0x35, 0x3e, 0x36,
+	0x97, 0x10, 0x08, 0x37, 0x89, 0x38, 0x4c, 0xdc, 0x31, 0xea, 0xfb, 0xb4, 0x4b, 0x0e, 0xc6, 0x61,
+	0xcc, 0x7d, 0x44, 0x07, 0x74, 0x40, 0x8e, 0xa2, 0x71, 0xa8, 0x94, 0x90, 0x5e, 0x12, 0x05, 0x30,
+	0xd1, 0xb1, 0xff, 0xd3, 0x13, 0xd2, 0x6f, 0x68, 0x35, 0x09, 0xd9, 0xd4, 0xd5, 0x02, 0xc1, 0xd3,
+	0x33, 0xc1, 0x78, 0x88, 0xa8, 0x8b, 0xc8, 0x0b, 0x40, 0xe8, 0xac, 0x67, 0x88, 0x44, 0x00, 0x1e,
+	0x47, 0xf4, 0x9c, 0x9e, 0x92, 0xe3, 0x09, 0x8f, 0x54, 0x28, 0x23, 0x31, 0xe3, 0x4f, 0x6e, 0xd0,
+	0xa3, 0xaf, 0xc8, 0xb9, 0xcf, 0x3d, 0x70, 0xe7, 0xc9, 0x13, 0x03, 0x13, 0x91, 0xf2, 0x41, 0xbf,
+	0xc1, 0xa0, 0x84, 0x74, 0x40, 0x29, 0x9c, 0x8f, 0xe8, 0x4b, 0x32, 0x78, 0x74, 0x23, 0x25, 0x64,
+	0x14, 0xe3, 0x7b, 0x81, 0x19, 0x14, 0xa5, 0x3f, 0x27, 0xf4, 0x69, 0x9f, 0xf4, 0xc6, 0x71, 0xe0,
+	0xbf, 0x49, 0xa6, 0xca, 0x0f, 0x81, 0x21, 0x39, 0xc0, 0x15, 0xee, 0x36, 0x52, 0x8b, 0xc0, 0x8c,
+	0x17, 0xb8, 0x02, 0x4c, 0xe6, 0xd2, 0x03, 0x8f, 0x07, 0x5c, 0xea, 0x97, 0x9e, 0xd0, 0x21, 0xb9,
+	0x6c, 0x56, 0xe0, 0x86, 0x81, 0x82, 0x89, 0x88, 0x42, 0x99, 0xf8, 0x22, 0x8a, 0x91, 0x02, 0x66,
+	0x9c, 0x8e, 0x7e, 0xee, 0x91, 0xab, 0xcf, 0xe5, 0xda, 0xfc, 0x67, 0x39, 0x46, 0x87, 0xf5, 0xcf,
+	0x56, 0xd8, 0x05, 0xb5, 0xf7, 0x71, 0xf4, 0xe8, 0xce, 0xcb, 0x9b, 0xb4, 0xc8, 0xcd, 0xf2, 0x36,
+	0xb7, 0xf2, 0x65, 0xa1, 0x9b, 0xb2, 0xeb, 0xe1, 0x66, 0x55, 0xfd, 0xa5, 0x96, 0x6f, 0xf5, 0xf7,
+	0x4b, 0xab, 0xed, 0x01, 0x7c, 0x6d, 0x5d, 0x78, 0x75, 0x14, 0x64, 0x95, 0x59, 0x8f, 0x38, 0xcd,
+	0x6c, 0x13, 0x7b, 0x56, 0x7d, 0xdf, 0xe9, 0x0b, 0xc8, 0xaa, 0x45, 0xa3, 0x2f, 0x66, 0xf6, 0x42,
+	0xeb, 0xbf, 0x5a, 0x57, 0x35, 0xe9, 0x38, 0x90, 0x55, 0x8e, 0xd3, 0x38, 0x1c, 0x67, 0x66, 0x3b,
+	0x8e, 0xf6, 0x7c, 0xea, 0xe8, 0x8b, 0xd9, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xc5, 0x68,
+	0x27, 0x2e, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/advertising_channel_sub_type.pb.go b/googleapis/ads/googleads/v3/enums/advertising_channel_sub_type.pb.go
new file mode 100644
index 0000000..cb9d674
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/advertising_channel_sub_type.pb.go
@@ -0,0 +1,183 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/advertising_channel_sub_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the different channel subtypes.
+type AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType int32
+
+const (
+	// Not specified.
+	AdvertisingChannelSubTypeEnum_UNSPECIFIED AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 0
+	// Used as a return value only. Represents value unknown in this version.
+	AdvertisingChannelSubTypeEnum_UNKNOWN AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 1
+	// Mobile app campaigns for Search.
+	AdvertisingChannelSubTypeEnum_SEARCH_MOBILE_APP AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 2
+	// Mobile app campaigns for Display.
+	AdvertisingChannelSubTypeEnum_DISPLAY_MOBILE_APP AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 3
+	// AdWords express campaigns for search.
+	AdvertisingChannelSubTypeEnum_SEARCH_EXPRESS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 4
+	// AdWords Express campaigns for display.
+	AdvertisingChannelSubTypeEnum_DISPLAY_EXPRESS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 5
+	// Smart Shopping campaigns.
+	AdvertisingChannelSubTypeEnum_SHOPPING_SMART_ADS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 6
+	// Gmail Ad campaigns.
+	AdvertisingChannelSubTypeEnum_DISPLAY_GMAIL_AD AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 7
+	// Smart display campaigns.
+	AdvertisingChannelSubTypeEnum_DISPLAY_SMART_CAMPAIGN AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 8
+	// Video Outstream campaigns.
+	AdvertisingChannelSubTypeEnum_VIDEO_OUTSTREAM AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 9
+	// Video TrueView for Action campaigns.
+	AdvertisingChannelSubTypeEnum_VIDEO_ACTION AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 10
+	// Video campaigns with non-skippable video ads.
+	AdvertisingChannelSubTypeEnum_VIDEO_NON_SKIPPABLE AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 11
+	// App Campaign that allows you to easily promote your Android or iOS app
+	// across Google's top properties including Search, Play, YouTube, and the
+	// Google Display Network.
+	AdvertisingChannelSubTypeEnum_APP_CAMPAIGN AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 12
+	// App Campaign for engagement, focused on driving re-engagement with the
+	// app across several of Google’s top properties including Search, YouTube,
+	// and the Google Display Network.
+	AdvertisingChannelSubTypeEnum_APP_CAMPAIGN_FOR_ENGAGEMENT AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 13
+	// Shopping Comparison Listing campaigns.
+	AdvertisingChannelSubTypeEnum_SHOPPING_COMPARISON_LISTING_ADS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 15
+)
+
+var AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SEARCH_MOBILE_APP",
+	3:  "DISPLAY_MOBILE_APP",
+	4:  "SEARCH_EXPRESS",
+	5:  "DISPLAY_EXPRESS",
+	6:  "SHOPPING_SMART_ADS",
+	7:  "DISPLAY_GMAIL_AD",
+	8:  "DISPLAY_SMART_CAMPAIGN",
+	9:  "VIDEO_OUTSTREAM",
+	10: "VIDEO_ACTION",
+	11: "VIDEO_NON_SKIPPABLE",
+	12: "APP_CAMPAIGN",
+	13: "APP_CAMPAIGN_FOR_ENGAGEMENT",
+	15: "SHOPPING_COMPARISON_LISTING_ADS",
+}
+
+var AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"SEARCH_MOBILE_APP":               2,
+	"DISPLAY_MOBILE_APP":              3,
+	"SEARCH_EXPRESS":                  4,
+	"DISPLAY_EXPRESS":                 5,
+	"SHOPPING_SMART_ADS":              6,
+	"DISPLAY_GMAIL_AD":                7,
+	"DISPLAY_SMART_CAMPAIGN":          8,
+	"VIDEO_OUTSTREAM":                 9,
+	"VIDEO_ACTION":                    10,
+	"VIDEO_NON_SKIPPABLE":             11,
+	"APP_CAMPAIGN":                    12,
+	"APP_CAMPAIGN_FOR_ENGAGEMENT":     13,
+	"SHOPPING_COMPARISON_LISTING_ADS": 15,
+}
+
+func (x AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType) String() string {
+	return proto.EnumName(AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name, int32(x))
+}
+
+func (AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_007989ef93506f12, []int{0, 0}
+}
+
+// An immutable specialization of an Advertising Channel.
+type AdvertisingChannelSubTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdvertisingChannelSubTypeEnum) Reset()         { *m = AdvertisingChannelSubTypeEnum{} }
+func (m *AdvertisingChannelSubTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdvertisingChannelSubTypeEnum) ProtoMessage()    {}
+func (*AdvertisingChannelSubTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_007989ef93506f12, []int{0}
+}
+
+func (m *AdvertisingChannelSubTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Unmarshal(m, b)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdvertisingChannelSubTypeEnum.Merge(m, src)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Size(m)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdvertisingChannelSubTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdvertisingChannelSubTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType", AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name, AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_value)
+	proto.RegisterType((*AdvertisingChannelSubTypeEnum)(nil), "google.ads.googleads.v3.enums.AdvertisingChannelSubTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/advertising_channel_sub_type.proto", fileDescriptor_007989ef93506f12)
+}
+
+var fileDescriptor_007989ef93506f12 = []byte{
+	// 494 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x6e, 0xd3, 0x40,
+	0x10, 0xc6, 0x69, 0x02, 0x2d, 0x6c, 0x0a, 0x59, 0xb6, 0x50, 0x44, 0x21, 0x54, 0x2d, 0x77, 0xfb,
+	0xe0, 0x9b, 0xb9, 0x30, 0x71, 0xb6, 0xee, 0xaa, 0xf1, 0x7a, 0xe5, 0x75, 0xc2, 0x1f, 0x45, 0x5a,
+	0x39, 0xb5, 0x65, 0x22, 0x25, 0x76, 0x94, 0x75, 0x22, 0xf5, 0x41, 0x78, 0x01, 0x8e, 0x3c, 0x0a,
+	0x8f, 0xc2, 0xb5, 0x2f, 0x80, 0x6c, 0xd7, 0x69, 0x2f, 0xe1, 0x62, 0x8d, 0xbe, 0xf9, 0xed, 0x37,
+	0x63, 0x7d, 0x83, 0x3e, 0xa7, 0x79, 0x9e, 0xce, 0x13, 0x33, 0x8a, 0xb5, 0x59, 0x97, 0x65, 0xb5,
+	0xb1, 0xcc, 0x24, 0x5b, 0x2f, 0xb4, 0x19, 0xc5, 0x9b, 0x64, 0x55, 0xcc, 0xf4, 0x2c, 0x4b, 0xd5,
+	0xf5, 0x8f, 0x28, 0xcb, 0x92, 0xb9, 0xd2, 0xeb, 0xa9, 0x2a, 0x6e, 0x96, 0x89, 0xb1, 0x5c, 0xe5,
+	0x45, 0x4e, 0x7a, 0xf5, 0x33, 0x23, 0x8a, 0xb5, 0xb1, 0x75, 0x30, 0x36, 0x96, 0x51, 0x39, 0x9c,
+	0xbc, 0x6f, 0x06, 0x2c, 0x67, 0x66, 0x94, 0x65, 0x79, 0x11, 0x15, 0xb3, 0x3c, 0xd3, 0xf5, 0xe3,
+	0xf3, 0x9f, 0x6d, 0xd4, 0x83, 0xfb, 0x19, 0x4e, 0x3d, 0x42, 0xae, 0xa7, 0xe1, 0xcd, 0x32, 0xa1,
+	0xd9, 0x7a, 0x71, 0x7e, 0xdb, 0x42, 0x6f, 0x77, 0x12, 0xa4, 0x8b, 0x3a, 0x23, 0x2e, 0x05, 0x75,
+	0xd8, 0x05, 0xa3, 0x03, 0xfc, 0x88, 0x74, 0xd0, 0xc1, 0x88, 0x5f, 0x71, 0xff, 0x0b, 0xc7, 0x7b,
+	0xe4, 0x35, 0x7a, 0x29, 0x29, 0x04, 0xce, 0xa5, 0xf2, 0xfc, 0x3e, 0x1b, 0x52, 0x05, 0x42, 0xe0,
+	0x16, 0x39, 0x46, 0x64, 0xc0, 0xa4, 0x18, 0xc2, 0xb7, 0x87, 0x7a, 0x9b, 0x10, 0xf4, 0xe2, 0x0e,
+	0xa7, 0x5f, 0x45, 0x40, 0xa5, 0xc4, 0x8f, 0xc9, 0x11, 0xea, 0x36, 0x6c, 0x23, 0x3e, 0x29, 0x0d,
+	0xe4, 0xa5, 0x2f, 0x04, 0xe3, 0xae, 0x92, 0x1e, 0x04, 0xa1, 0x82, 0x81, 0xc4, 0xfb, 0xe4, 0x15,
+	0xc2, 0x0d, 0xec, 0x7a, 0xc0, 0x86, 0x0a, 0x06, 0xf8, 0x80, 0x9c, 0xa0, 0xe3, 0x46, 0xad, 0x61,
+	0x07, 0x3c, 0x01, 0xcc, 0xe5, 0xf8, 0x69, 0x69, 0x3f, 0x66, 0x03, 0xea, 0x2b, 0x7f, 0x14, 0xca,
+	0x30, 0xa0, 0xe0, 0xe1, 0x67, 0x04, 0xa3, 0xc3, 0x5a, 0x04, 0x27, 0x64, 0x3e, 0xc7, 0x88, 0xbc,
+	0x41, 0x47, 0xb5, 0xc2, 0x7d, 0xae, 0xe4, 0x15, 0x13, 0x02, 0xfa, 0x43, 0x8a, 0x3b, 0x25, 0x0a,
+	0x42, 0xdc, 0x3b, 0x1e, 0x92, 0x53, 0xf4, 0xee, 0xa1, 0xa2, 0x2e, 0xfc, 0x40, 0x51, 0xee, 0x82,
+	0x4b, 0x3d, 0xca, 0x43, 0xfc, 0x9c, 0x7c, 0x44, 0xa7, 0xdb, 0xe5, 0x1d, 0xdf, 0x13, 0x10, 0x30,
+	0xe9, 0x73, 0x35, 0x64, 0x32, 0x2c, 0xa5, 0xf2, 0x4f, 0xba, 0xfd, 0xdb, 0x3d, 0x74, 0x76, 0x9d,
+	0x2f, 0x8c, 0xff, 0x66, 0xdb, 0xff, 0xb0, 0x33, 0x18, 0x51, 0xa6, 0x2b, 0xf6, 0xbe, 0xf7, 0xef,
+	0x0c, 0xd2, 0x7c, 0x1e, 0x65, 0xa9, 0x91, 0xaf, 0x52, 0x33, 0x4d, 0xb2, 0x2a, 0xfb, 0xe6, 0xdc,
+	0x96, 0x33, 0xbd, 0xe3, 0xfa, 0x3e, 0x55, 0xdf, 0x5f, 0xad, 0xb6, 0x0b, 0xf0, 0xbb, 0xd5, 0x73,
+	0x6b, 0x2b, 0x88, 0xb5, 0x51, 0x97, 0x65, 0x35, 0xb6, 0x8c, 0xf2, 0x4c, 0xf4, 0x9f, 0xa6, 0x3f,
+	0x81, 0x58, 0x4f, 0xb6, 0xfd, 0xc9, 0xd8, 0x9a, 0x54, 0xfd, 0xbf, 0xad, 0xb3, 0x5a, 0xb4, 0x6d,
+	0x88, 0xb5, 0x6d, 0x6f, 0x09, 0xdb, 0x1e, 0x5b, 0xb6, 0x5d, 0x31, 0xd3, 0xfd, 0x6a, 0x31, 0xeb,
+	0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0xfd, 0xc9, 0x77, 0x15, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/advertising_channel_type.pb.go b/googleapis/ads/googleads/v3/enums/advertising_channel_type.pb.go
new file mode 100644
index 0000000..b49a9de
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/advertising_channel_type.pb.go
@@ -0,0 +1,145 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/advertising_channel_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the various advertising channel types.
+type AdvertisingChannelTypeEnum_AdvertisingChannelType int32
+
+const (
+	// Not specified.
+	AdvertisingChannelTypeEnum_UNSPECIFIED AdvertisingChannelTypeEnum_AdvertisingChannelType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AdvertisingChannelTypeEnum_UNKNOWN AdvertisingChannelTypeEnum_AdvertisingChannelType = 1
+	// Search Network. Includes display bundled, and Search+ campaigns.
+	AdvertisingChannelTypeEnum_SEARCH AdvertisingChannelTypeEnum_AdvertisingChannelType = 2
+	// Google Display Network only.
+	AdvertisingChannelTypeEnum_DISPLAY AdvertisingChannelTypeEnum_AdvertisingChannelType = 3
+	// Shopping campaigns serve on the shopping property
+	// and on google.com search results.
+	AdvertisingChannelTypeEnum_SHOPPING AdvertisingChannelTypeEnum_AdvertisingChannelType = 4
+	// Hotel Ads campaigns.
+	AdvertisingChannelTypeEnum_HOTEL AdvertisingChannelTypeEnum_AdvertisingChannelType = 5
+	// Video campaigns.
+	AdvertisingChannelTypeEnum_VIDEO AdvertisingChannelTypeEnum_AdvertisingChannelType = 6
+	// App Campaigns, and App Campaigns for Engagement, that run
+	// across multiple channels.
+	AdvertisingChannelTypeEnum_MULTI_CHANNEL AdvertisingChannelTypeEnum_AdvertisingChannelType = 7
+)
+
+var AdvertisingChannelTypeEnum_AdvertisingChannelType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH",
+	3: "DISPLAY",
+	4: "SHOPPING",
+	5: "HOTEL",
+	6: "VIDEO",
+	7: "MULTI_CHANNEL",
+}
+
+var AdvertisingChannelTypeEnum_AdvertisingChannelType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"SEARCH":        2,
+	"DISPLAY":       3,
+	"SHOPPING":      4,
+	"HOTEL":         5,
+	"VIDEO":         6,
+	"MULTI_CHANNEL": 7,
+}
+
+func (x AdvertisingChannelTypeEnum_AdvertisingChannelType) String() string {
+	return proto.EnumName(AdvertisingChannelTypeEnum_AdvertisingChannelType_name, int32(x))
+}
+
+func (AdvertisingChannelTypeEnum_AdvertisingChannelType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1a0a613438b3bd04, []int{0, 0}
+}
+
+// The channel type a campaign may target to serve on.
+type AdvertisingChannelTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdvertisingChannelTypeEnum) Reset()         { *m = AdvertisingChannelTypeEnum{} }
+func (m *AdvertisingChannelTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdvertisingChannelTypeEnum) ProtoMessage()    {}
+func (*AdvertisingChannelTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a0a613438b3bd04, []int{0}
+}
+
+func (m *AdvertisingChannelTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Unmarshal(m, b)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdvertisingChannelTypeEnum.Merge(m, src)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Size(m)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdvertisingChannelTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdvertisingChannelTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType", AdvertisingChannelTypeEnum_AdvertisingChannelType_name, AdvertisingChannelTypeEnum_AdvertisingChannelType_value)
+	proto.RegisterType((*AdvertisingChannelTypeEnum)(nil), "google.ads.googleads.v3.enums.AdvertisingChannelTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/advertising_channel_type.proto", fileDescriptor_1a0a613438b3bd04)
+}
+
+var fileDescriptor_1a0a613438b3bd04 = []byte{
+	// 362 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4e, 0x83, 0x40,
+	0x18, 0x85, 0x85, 0xda, 0x56, 0xa7, 0x1a, 0x47, 0x16, 0x2e, 0xaa, 0x5d, 0xb4, 0x07, 0x18, 0x16,
+	0xec, 0x46, 0x37, 0x53, 0x8a, 0x85, 0x88, 0x40, 0xa4, 0xc5, 0x68, 0x48, 0x1a, 0x2c, 0x04, 0x49,
+	0xda, 0x19, 0xd2, 0xa1, 0x4d, 0x7a, 0x01, 0x0f, 0x62, 0xe2, 0xc6, 0xa3, 0x78, 0x14, 0x57, 0x1e,
+	0xc1, 0xc0, 0xd8, 0xba, 0xa9, 0x6e, 0xc8, 0x0b, 0xef, 0xff, 0x5e, 0xfe, 0xff, 0x0d, 0xb8, 0x4a,
+	0x19, 0x4b, 0x67, 0x89, 0x1a, 0xc5, 0x5c, 0x15, 0xb2, 0x54, 0x2b, 0x4d, 0x4d, 0xe8, 0x72, 0xce,
+	0xd5, 0x28, 0x5e, 0x25, 0x8b, 0x22, 0xe3, 0x19, 0x4d, 0x27, 0xd3, 0xe7, 0x88, 0xd2, 0x64, 0x36,
+	0x29, 0xd6, 0x79, 0x82, 0xf2, 0x05, 0x2b, 0x98, 0xd2, 0x11, 0x08, 0x8a, 0x62, 0x8e, 0xb6, 0x34,
+	0x5a, 0x69, 0xa8, 0xa2, 0xdb, 0x17, 0x9b, 0xf0, 0x3c, 0x53, 0x23, 0x4a, 0x59, 0x11, 0x15, 0x19,
+	0xa3, 0x5c, 0xc0, 0xbd, 0x37, 0x09, 0xb4, 0xc9, 0x6f, 0xbe, 0x2e, 0xe2, 0x47, 0xeb, 0x3c, 0x31,
+	0xe8, 0x72, 0xde, 0x7b, 0x91, 0xc0, 0xd9, 0x6e, 0x5b, 0x39, 0x01, 0xad, 0xb1, 0xe3, 0x7b, 0x86,
+	0x6e, 0x5d, 0x5b, 0xc6, 0x00, 0xee, 0x29, 0x2d, 0xd0, 0x1c, 0x3b, 0x37, 0x8e, 0x7b, 0xef, 0x40,
+	0x49, 0x01, 0xa0, 0xe1, 0x1b, 0xe4, 0x4e, 0x37, 0xa1, 0x5c, 0x1a, 0x03, 0xcb, 0xf7, 0x6c, 0xf2,
+	0x00, 0x6b, 0xca, 0x11, 0x38, 0xf0, 0x4d, 0xd7, 0xf3, 0x2c, 0x67, 0x08, 0xf7, 0x95, 0x43, 0x50,
+	0x37, 0xdd, 0x91, 0x61, 0xc3, 0x7a, 0x29, 0x03, 0x6b, 0x60, 0xb8, 0xb0, 0xa1, 0x9c, 0x82, 0xe3,
+	0xdb, 0xb1, 0x3d, 0xb2, 0x26, 0xba, 0x49, 0x1c, 0xc7, 0xb0, 0x61, 0xb3, 0xff, 0x25, 0x81, 0xee,
+	0x94, 0xcd, 0xd1, 0xbf, 0xb7, 0xf6, 0xcf, 0x77, 0xef, 0xea, 0x95, 0xa7, 0x7a, 0xd2, 0x63, 0xff,
+	0x87, 0x4e, 0xd9, 0x2c, 0xa2, 0x29, 0x62, 0x8b, 0x54, 0x4d, 0x13, 0x5a, 0x15, 0xb1, 0xe9, 0x3d,
+	0xcf, 0xf8, 0x1f, 0xcf, 0x70, 0x59, 0x7d, 0x5f, 0xe5, 0xda, 0x90, 0x90, 0x77, 0xb9, 0x33, 0x14,
+	0x51, 0x24, 0xe6, 0x48, 0xc8, 0x52, 0x05, 0x1a, 0x2a, 0x6b, 0xe3, 0x1f, 0x1b, 0x3f, 0x24, 0x31,
+	0x0f, 0xb7, 0x7e, 0x18, 0x68, 0x61, 0xe5, 0x7f, 0xca, 0x5d, 0xf1, 0x13, 0x63, 0x12, 0x73, 0x8c,
+	0xb7, 0x13, 0x18, 0x07, 0x1a, 0xc6, 0xd5, 0xcc, 0x53, 0xa3, 0x5a, 0x4c, 0xfb, 0x0e, 0x00, 0x00,
+	0xff, 0xff, 0x89, 0xb4, 0xd3, 0x6e, 0x1e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/affiliate_location_feed_relationship_type.pb.go b/googleapis/ads/googleads/v3/enums/affiliate_location_feed_relationship_type.pb.go
new file mode 100644
index 0000000..f1a5d9c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/affiliate_location_feed_relationship_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/affiliate_location_feed_relationship_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for a relationship type for an affiliate location feed.
+type AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType int32
+
+const (
+	// Not specified.
+	AffiliateLocationFeedRelationshipTypeEnum_UNSPECIFIED AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AffiliateLocationFeedRelationshipTypeEnum_UNKNOWN AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 1
+	// General retailer relationship.
+	AffiliateLocationFeedRelationshipTypeEnum_GENERAL_RETAILER AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 2
+)
+
+var AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "GENERAL_RETAILER",
+}
+
+var AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"GENERAL_RETAILER": 2,
+}
+
+func (x AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType) String() string {
+	return proto.EnumName(AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name, int32(x))
+}
+
+func (AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_02d1112b0969f917, []int{0, 0}
+}
+
+// Container for enum describing possible values for a relationship type for
+// an affiliate location feed.
+type AffiliateLocationFeedRelationshipTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AffiliateLocationFeedRelationshipTypeEnum) Reset() {
+	*m = AffiliateLocationFeedRelationshipTypeEnum{}
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AffiliateLocationFeedRelationshipTypeEnum) ProtoMessage()    {}
+func (*AffiliateLocationFeedRelationshipTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02d1112b0969f917, []int{0}
+}
+
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Unmarshal(m, b)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Merge(m, src)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Size(m)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType", AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name, AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_value)
+	proto.RegisterType((*AffiliateLocationFeedRelationshipTypeEnum)(nil), "google.ads.googleads.v3.enums.AffiliateLocationFeedRelationshipTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/affiliate_location_feed_relationship_type.proto", fileDescriptor_02d1112b0969f917)
+}
+
+var fileDescriptor_02d1112b0969f917 = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xfb, 0x30,
+	0x18, 0xc6, 0xff, 0xed, 0x1f, 0x14, 0xb2, 0x83, 0xa5, 0x78, 0x12, 0x77, 0xd8, 0xc0, 0x83, 0x1e,
+	0xd2, 0x43, 0x6f, 0xf1, 0x94, 0x69, 0x36, 0x86, 0xb3, 0x8e, 0xba, 0x4d, 0xd0, 0x42, 0x89, 0x4b,
+	0x56, 0x0b, 0x5d, 0x12, 0x96, 0x6e, 0xb0, 0x6f, 0xe0, 0xe7, 0xf0, 0xe8, 0x47, 0xf1, 0xa3, 0xf8,
+	0x25, 0x94, 0x26, 0x6b, 0xf1, 0xa2, 0xec, 0x52, 0x9e, 0xe6, 0x7d, 0xf3, 0x7b, 0xde, 0xe7, 0x0d,
+	0xb8, 0xcd, 0xa4, 0xcc, 0x0a, 0x1e, 0x50, 0xa6, 0x03, 0x2b, 0x2b, 0xb5, 0x09, 0x03, 0x2e, 0xd6,
+	0x4b, 0x1d, 0xd0, 0xc5, 0x22, 0x2f, 0x72, 0x5a, 0xf2, 0xb4, 0x90, 0x73, 0x5a, 0xe6, 0x52, 0xa4,
+	0x0b, 0xce, 0x59, 0xba, 0xe2, 0x85, 0xf9, 0xd3, 0x2f, 0xb9, 0x4a, 0xcb, 0xad, 0xe2, 0x50, 0xad,
+	0x64, 0x29, 0xfd, 0xb6, 0x65, 0x40, 0xca, 0x34, 0x6c, 0x70, 0x70, 0x13, 0x42, 0x83, 0x3b, 0x39,
+	0xad, 0xdd, 0x54, 0x1e, 0x50, 0x21, 0x64, 0x69, 0x21, 0xf6, 0x72, 0xf7, 0xd5, 0x01, 0xe7, 0xb8,
+	0x36, 0x1c, 0xed, 0xfc, 0xfa, 0x9c, 0xb3, 0xf8, 0x87, 0xdb, 0x64, 0xab, 0x38, 0x11, 0xeb, 0x65,
+	0xf7, 0x09, 0x9c, 0xed, 0xd5, 0xec, 0x1f, 0x81, 0xd6, 0x34, 0xba, 0x1f, 0x93, 0xab, 0x61, 0x7f,
+	0x48, 0xae, 0xbd, 0x7f, 0x7e, 0x0b, 0x1c, 0x4e, 0xa3, 0x9b, 0xe8, 0xee, 0x21, 0xf2, 0x1c, 0xff,
+	0x18, 0x78, 0x03, 0x12, 0x91, 0x18, 0x8f, 0xd2, 0x98, 0x4c, 0xf0, 0x70, 0x44, 0x62, 0xcf, 0xed,
+	0x7d, 0x39, 0xa0, 0x33, 0x97, 0x4b, 0xf8, 0x67, 0x9c, 0xde, 0xc5, 0x5e, 0x03, 0x8c, 0xab, 0x70,
+	0x63, 0xe7, 0xb1, 0xb7, 0x83, 0x65, 0xb2, 0xa0, 0x22, 0x83, 0x72, 0x95, 0x05, 0x19, 0x17, 0x26,
+	0x7a, 0xbd, 0x7a, 0x95, 0xeb, 0x5f, 0x5e, 0xe2, 0xd2, 0x7c, 0xdf, 0xdc, 0xff, 0x03, 0x8c, 0xdf,
+	0xdd, 0xf6, 0xc0, 0xa2, 0x30, 0xd3, 0xd0, 0xca, 0x4a, 0xcd, 0x42, 0x58, 0x6d, 0x46, 0x7f, 0xd4,
+	0xf5, 0x04, 0x33, 0x9d, 0x34, 0xf5, 0x64, 0x16, 0x26, 0xa6, 0xfe, 0xe9, 0x76, 0xec, 0x21, 0x42,
+	0x98, 0x69, 0x84, 0x9a, 0x0e, 0x84, 0x66, 0x21, 0x42, 0xa6, 0xe7, 0xf9, 0xc0, 0x0c, 0x16, 0x7e,
+	0x07, 0x00, 0x00, 0xff, 0xff, 0x54, 0x92, 0xc9, 0x13, 0x21, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/affiliate_location_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/affiliate_location_placeholder_field.pb.go
new file mode 100644
index 0000000..d362c0d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/affiliate_location_placeholder_field.pb.go
@@ -0,0 +1,167 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/affiliate_location_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Affiliate Location placeholder fields.
+type AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField int32
+
+const (
+	// Not specified.
+	AffiliateLocationPlaceholderFieldEnum_UNSPECIFIED AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	AffiliateLocationPlaceholderFieldEnum_UNKNOWN AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 1
+	// Data Type: STRING. The name of the business.
+	AffiliateLocationPlaceholderFieldEnum_BUSINESS_NAME AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 2
+	// Data Type: STRING. Line 1 of the business address.
+	AffiliateLocationPlaceholderFieldEnum_ADDRESS_LINE_1 AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 3
+	// Data Type: STRING. Line 2 of the business address.
+	AffiliateLocationPlaceholderFieldEnum_ADDRESS_LINE_2 AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 4
+	// Data Type: STRING. City of the business address.
+	AffiliateLocationPlaceholderFieldEnum_CITY AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 5
+	// Data Type: STRING. Province of the business address.
+	AffiliateLocationPlaceholderFieldEnum_PROVINCE AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 6
+	// Data Type: STRING. Postal code of the business address.
+	AffiliateLocationPlaceholderFieldEnum_POSTAL_CODE AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 7
+	// Data Type: STRING. Country code of the business address.
+	AffiliateLocationPlaceholderFieldEnum_COUNTRY_CODE AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 8
+	// Data Type: STRING. Phone number of the business.
+	AffiliateLocationPlaceholderFieldEnum_PHONE_NUMBER AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 9
+	// Data Type: STRING. Language code of the business.
+	AffiliateLocationPlaceholderFieldEnum_LANGUAGE_CODE AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 10
+	// Data Type: INT64. ID of the chain.
+	AffiliateLocationPlaceholderFieldEnum_CHAIN_ID AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 11
+	// Data Type: STRING. Name of the chain.
+	AffiliateLocationPlaceholderFieldEnum_CHAIN_NAME AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField = 12
+)
+
+var AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BUSINESS_NAME",
+	3:  "ADDRESS_LINE_1",
+	4:  "ADDRESS_LINE_2",
+	5:  "CITY",
+	6:  "PROVINCE",
+	7:  "POSTAL_CODE",
+	8:  "COUNTRY_CODE",
+	9:  "PHONE_NUMBER",
+	10: "LANGUAGE_CODE",
+	11: "CHAIN_ID",
+	12: "CHAIN_NAME",
+}
+
+var AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"BUSINESS_NAME":  2,
+	"ADDRESS_LINE_1": 3,
+	"ADDRESS_LINE_2": 4,
+	"CITY":           5,
+	"PROVINCE":       6,
+	"POSTAL_CODE":    7,
+	"COUNTRY_CODE":   8,
+	"PHONE_NUMBER":   9,
+	"LANGUAGE_CODE":  10,
+	"CHAIN_ID":       11,
+	"CHAIN_NAME":     12,
+}
+
+func (x AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField) String() string {
+	return proto.EnumName(AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField_name, int32(x))
+}
+
+func (AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_86c7ac5a51c3c22b, []int{0, 0}
+}
+
+// Values for Affiliate Location placeholder fields.
+type AffiliateLocationPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AffiliateLocationPlaceholderFieldEnum) Reset()         { *m = AffiliateLocationPlaceholderFieldEnum{} }
+func (m *AffiliateLocationPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*AffiliateLocationPlaceholderFieldEnum) ProtoMessage()    {}
+func (*AffiliateLocationPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86c7ac5a51c3c22b, []int{0}
+}
+
+func (m *AffiliateLocationPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *AffiliateLocationPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *AffiliateLocationPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *AffiliateLocationPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum.Size(m)
+}
+func (m *AffiliateLocationPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AffiliateLocationPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField", AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField_name, AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField_value)
+	proto.RegisterType((*AffiliateLocationPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.AffiliateLocationPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/affiliate_location_placeholder_field.proto", fileDescriptor_86c7ac5a51c3c22b)
+}
+
+var fileDescriptor_86c7ac5a51c3c22b = []byte{
+	// 431 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x8e, 0xd3, 0x30,
+	0x10, 0xa5, 0xd9, 0x65, 0xb7, 0xb8, 0x65, 0x31, 0x3e, 0x22, 0xf6, 0xd0, 0x95, 0xe0, 0xe8, 0x08,
+	0x72, 0x0b, 0x27, 0x27, 0xf1, 0xb6, 0x11, 0x5d, 0x27, 0x6a, 0x9a, 0xa2, 0x45, 0x95, 0x2c, 0xd3,
+	0xa4, 0x21, 0x52, 0x1a, 0x57, 0x75, 0x77, 0x3f, 0x08, 0x71, 0xe2, 0x53, 0xf8, 0x14, 0x3e, 0x01,
+	0x2e, 0xc8, 0xf6, 0xa6, 0x1c, 0x10, 0xf4, 0x12, 0xbd, 0xbc, 0x79, 0x7e, 0x6f, 0x34, 0x33, 0x60,
+	0x52, 0x49, 0x59, 0x35, 0xa5, 0x2b, 0x0a, 0xe5, 0x5a, 0xa8, 0xd1, 0xbd, 0xe7, 0x96, 0xed, 0xdd,
+	0x46, 0xb9, 0x62, 0xbd, 0xae, 0x9b, 0x5a, 0xec, 0x4b, 0xde, 0xc8, 0x95, 0xd8, 0xd7, 0xb2, 0xe5,
+	0xdb, 0x46, 0xac, 0xca, 0xcf, 0xb2, 0x29, 0xca, 0x1d, 0x5f, 0xd7, 0x65, 0x53, 0xe0, 0xed, 0x4e,
+	0xee, 0x25, 0xba, 0xb4, 0xcf, 0xb1, 0x28, 0x14, 0x3e, 0x38, 0xe1, 0x7b, 0x0f, 0x1b, 0xa7, 0x17,
+	0x2f, 0xbb, 0xa0, 0x6d, 0xed, 0x8a, 0xb6, 0x95, 0x7b, 0xe3, 0xa6, 0xec, 0xe3, 0xab, 0xaf, 0x0e,
+	0x78, 0x45, 0xba, 0xac, 0xe9, 0x43, 0x54, 0xfa, 0x27, 0xe9, 0x5a, 0x07, 0xd1, 0xf6, 0x6e, 0x73,
+	0xf5, 0xb3, 0x07, 0x46, 0x47, 0x95, 0xe8, 0x19, 0x18, 0xe4, 0x2c, 0x4b, 0x69, 0x18, 0x5f, 0xc7,
+	0x34, 0x82, 0x8f, 0xd0, 0x00, 0x9c, 0xe7, 0xec, 0x3d, 0x4b, 0x3e, 0x30, 0xd8, 0x43, 0xcf, 0xc1,
+	0xd3, 0x20, 0xcf, 0x62, 0x46, 0xb3, 0x8c, 0x33, 0x72, 0x43, 0xa1, 0x83, 0x10, 0xb8, 0x20, 0x51,
+	0x34, 0xd3, 0xcc, 0x34, 0x66, 0x94, 0xbf, 0x81, 0x27, 0x7f, 0x71, 0x6f, 0xe1, 0x29, 0xea, 0x83,
+	0xd3, 0x30, 0x9e, 0xdf, 0xc2, 0xc7, 0x68, 0x08, 0xfa, 0xe9, 0x2c, 0x59, 0xc4, 0x2c, 0xa4, 0xf0,
+	0x4c, 0x07, 0xa6, 0x49, 0x36, 0x27, 0x53, 0x1e, 0x26, 0x11, 0x85, 0xe7, 0x08, 0x82, 0x61, 0x98,
+	0xe4, 0x6c, 0x3e, 0xbb, 0xb5, 0x4c, 0x5f, 0x33, 0xe9, 0x24, 0x61, 0x94, 0xb3, 0xfc, 0x26, 0xa0,
+	0x33, 0xf8, 0x44, 0xf7, 0x31, 0x25, 0x6c, 0x9c, 0x93, 0x31, 0xb5, 0x22, 0xa0, 0x5d, 0xc3, 0x09,
+	0x89, 0x19, 0x8f, 0x23, 0x38, 0x40, 0x17, 0x00, 0xd8, 0x3f, 0xd3, 0xe5, 0x30, 0xf8, 0xd5, 0x03,
+	0xa3, 0x95, 0xdc, 0xe0, 0xff, 0x8e, 0x3a, 0x78, 0x7d, 0x74, 0x3e, 0xa9, 0x1e, 0x7a, 0xda, 0xfb,
+	0x18, 0x3c, 0x18, 0x55, 0xb2, 0x11, 0x6d, 0x85, 0xe5, 0xae, 0x72, 0xab, 0xb2, 0x35, 0x2b, 0xe9,
+	0xae, 0x61, 0x5b, 0xab, 0x7f, 0x1c, 0xc7, 0x3b, 0xf3, 0xfd, 0xe2, 0x9c, 0x8c, 0x09, 0xf9, 0xe6,
+	0x5c, 0x8e, 0xad, 0x15, 0x29, 0x14, 0xb6, 0x50, 0xa3, 0x85, 0x87, 0xf5, 0xd6, 0xd4, 0xf7, 0xae,
+	0xbe, 0x24, 0x85, 0x5a, 0x1e, 0xea, 0xcb, 0x85, 0xb7, 0x34, 0xf5, 0x1f, 0xce, 0xc8, 0x92, 0xbe,
+	0x4f, 0x0a, 0xe5, 0xfb, 0x07, 0x85, 0xef, 0x2f, 0x3c, 0xdf, 0x37, 0x9a, 0x4f, 0x67, 0xa6, 0x31,
+	0xef, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x2c, 0xf3, 0xaf, 0xb4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/age_range_type.pb.go b/googleapis/ads/googleads/v3/enums/age_range_type.pb.go
new file mode 100644
index 0000000..5853e7c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/age_range_type.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/age_range_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of demographic age ranges (e.g. between 18 and 24 years old).
+type AgeRangeTypeEnum_AgeRangeType int32
+
+const (
+	// Not specified.
+	AgeRangeTypeEnum_UNSPECIFIED AgeRangeTypeEnum_AgeRangeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AgeRangeTypeEnum_UNKNOWN AgeRangeTypeEnum_AgeRangeType = 1
+	// Between 18 and 24 years old.
+	AgeRangeTypeEnum_AGE_RANGE_18_24 AgeRangeTypeEnum_AgeRangeType = 503001
+	// Between 25 and 34 years old.
+	AgeRangeTypeEnum_AGE_RANGE_25_34 AgeRangeTypeEnum_AgeRangeType = 503002
+	// Between 35 and 44 years old.
+	AgeRangeTypeEnum_AGE_RANGE_35_44 AgeRangeTypeEnum_AgeRangeType = 503003
+	// Between 45 and 54 years old.
+	AgeRangeTypeEnum_AGE_RANGE_45_54 AgeRangeTypeEnum_AgeRangeType = 503004
+	// Between 55 and 64 years old.
+	AgeRangeTypeEnum_AGE_RANGE_55_64 AgeRangeTypeEnum_AgeRangeType = 503005
+	// 65 years old and beyond.
+	AgeRangeTypeEnum_AGE_RANGE_65_UP AgeRangeTypeEnum_AgeRangeType = 503006
+	// Undetermined age range.
+	AgeRangeTypeEnum_AGE_RANGE_UNDETERMINED AgeRangeTypeEnum_AgeRangeType = 503999
+)
+
+var AgeRangeTypeEnum_AgeRangeType_name = map[int32]string{
+	0:      "UNSPECIFIED",
+	1:      "UNKNOWN",
+	503001: "AGE_RANGE_18_24",
+	503002: "AGE_RANGE_25_34",
+	503003: "AGE_RANGE_35_44",
+	503004: "AGE_RANGE_45_54",
+	503005: "AGE_RANGE_55_64",
+	503006: "AGE_RANGE_65_UP",
+	503999: "AGE_RANGE_UNDETERMINED",
+}
+
+var AgeRangeTypeEnum_AgeRangeType_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"AGE_RANGE_18_24":        503001,
+	"AGE_RANGE_25_34":        503002,
+	"AGE_RANGE_35_44":        503003,
+	"AGE_RANGE_45_54":        503004,
+	"AGE_RANGE_55_64":        503005,
+	"AGE_RANGE_65_UP":        503006,
+	"AGE_RANGE_UNDETERMINED": 503999,
+}
+
+func (x AgeRangeTypeEnum_AgeRangeType) String() string {
+	return proto.EnumName(AgeRangeTypeEnum_AgeRangeType_name, int32(x))
+}
+
+func (AgeRangeTypeEnum_AgeRangeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c79df600b719b617, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic age ranges.
+type AgeRangeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AgeRangeTypeEnum) Reset()         { *m = AgeRangeTypeEnum{} }
+func (m *AgeRangeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeTypeEnum) ProtoMessage()    {}
+func (*AgeRangeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c79df600b719b617, []int{0}
+}
+
+func (m *AgeRangeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeTypeEnum.Unmarshal(m, b)
+}
+func (m *AgeRangeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AgeRangeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeTypeEnum.Merge(m, src)
+}
+func (m *AgeRangeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeTypeEnum.Size(m)
+}
+func (m *AgeRangeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AgeRangeTypeEnum_AgeRangeType", AgeRangeTypeEnum_AgeRangeType_name, AgeRangeTypeEnum_AgeRangeType_value)
+	proto.RegisterType((*AgeRangeTypeEnum)(nil), "google.ads.googleads.v3.enums.AgeRangeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/age_range_type.proto", fileDescriptor_c79df600b719b617)
+}
+
+var fileDescriptor_c79df600b719b617 = []byte{
+	// 378 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x8b, 0xd3, 0x40,
+	0x18, 0xc6, 0x4d, 0x05, 0x85, 0xa9, 0xd0, 0x31, 0xa0, 0x07, 0x69, 0x0b, 0xed, 0x07, 0x98, 0x60,
+	0x27, 0x29, 0x32, 0x9e, 0xa6, 0x76, 0x0c, 0x45, 0x8c, 0xa1, 0x36, 0x15, 0x24, 0x30, 0x44, 0x33,
+	0x0c, 0x85, 0x76, 0x26, 0x74, 0xd2, 0x42, 0xbf, 0x8e, 0x47, 0xbf, 0x84, 0x77, 0xcf, 0x5e, 0xea,
+	0x3f, 0xd8, 0xcb, 0xc2, 0xee, 0xa7, 0x58, 0x92, 0x6c, 0xbb, 0xdd, 0xc0, 0xee, 0x25, 0x3c, 0xfc,
+	0xde, 0xf7, 0x79, 0xc8, 0x3c, 0x2f, 0x18, 0x48, 0xad, 0xe5, 0x52, 0x38, 0x49, 0x6a, 0x9c, 0x4a,
+	0x16, 0x6a, 0x8b, 0x1d, 0xa1, 0x36, 0x2b, 0xe3, 0x24, 0x52, 0xf0, 0x75, 0xa2, 0xa4, 0xe0, 0xf9,
+	0x2e, 0x13, 0x28, 0x5b, 0xeb, 0x5c, 0xdb, 0x9d, 0x6a, 0x11, 0x25, 0xa9, 0x41, 0x47, 0x0f, 0xda,
+	0x62, 0x54, 0x7a, 0x5e, 0xb4, 0x0f, 0x91, 0xd9, 0xc2, 0x49, 0x94, 0xd2, 0x79, 0x92, 0x2f, 0xb4,
+	0x32, 0x95, 0xb9, 0x7f, 0x61, 0x01, 0x48, 0xa5, 0x98, 0x16, 0xa1, 0xb3, 0x5d, 0x26, 0x98, 0xda,
+	0xac, 0xfa, 0xbf, 0x2c, 0xf0, 0xe4, 0x14, 0xda, 0x2d, 0xd0, 0x8c, 0x82, 0x8f, 0x21, 0x7b, 0x33,
+	0x79, 0x3b, 0x61, 0x63, 0xf8, 0xc0, 0x6e, 0x82, 0xc7, 0x51, 0xf0, 0x2e, 0xf8, 0xf0, 0x29, 0x80,
+	0x96, 0xfd, 0x0c, 0xb4, 0xa8, 0xcf, 0xf8, 0x94, 0x06, 0x3e, 0xe3, 0x2f, 0x5f, 0xf1, 0x81, 0x0b,
+	0xf7, 0xfb, 0xee, 0x6d, 0x3c, 0xf0, 0x38, 0x76, 0xe1, 0xef, 0x3a, 0xc6, 0x1e, 0x77, 0x5d, 0xf8,
+	0xa7, 0x8e, 0x5d, 0x8f, 0x7b, 0x2e, 0xfc, 0x5b, 0xc7, 0x9e, 0xc7, 0x87, 0x2e, 0xfc, 0x57, 0xc7,
+	0x43, 0x8f, 0x47, 0x21, 0xfc, 0xbf, 0xef, 0xda, 0x6d, 0xf0, 0xfc, 0x06, 0x47, 0xc1, 0x98, 0xcd,
+	0xd8, 0xf4, 0xfd, 0x24, 0x60, 0x63, 0xf8, 0xe3, 0xac, 0x3b, 0x3a, 0xb7, 0x40, 0xef, 0xab, 0x5e,
+	0xa1, 0x7b, 0xfb, 0x1a, 0x3d, 0x3d, 0x7d, 0x79, 0x58, 0x94, 0x14, 0x5a, 0x9f, 0x47, 0xd7, 0x1e,
+	0xa9, 0x97, 0x89, 0x92, 0x48, 0xaf, 0xa5, 0x23, 0x85, 0x2a, 0x2b, 0x3c, 0xdc, 0x29, 0x5b, 0x98,
+	0x3b, 0xce, 0xf6, 0xba, 0xfc, 0x7e, 0x6b, 0x3c, 0xf4, 0x29, 0xfd, 0xde, 0xe8, 0xf8, 0x55, 0x14,
+	0x4d, 0x0d, 0xaa, 0x64, 0xa1, 0xe6, 0x18, 0x15, 0xd5, 0x9b, 0x9f, 0x87, 0x79, 0x4c, 0x53, 0x13,
+	0x1f, 0xe7, 0xf1, 0x1c, 0xc7, 0xe5, 0xfc, 0xb2, 0xd1, 0xab, 0x20, 0x21, 0x34, 0x35, 0x84, 0x1c,
+	0x37, 0x08, 0x99, 0x63, 0x42, 0xca, 0x9d, 0x2f, 0x8f, 0xca, 0x1f, 0xc3, 0x57, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0x32, 0x0c, 0x38, 0x0c, 0x4e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_campaign_app_store.pb.go b/googleapis/ads/googleads/v3/enums/app_campaign_app_store.pb.go
new file mode 100644
index 0000000..f43fec5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_campaign_app_store.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_campaign_app_store.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing app campaign app store.
+type AppCampaignAppStoreEnum_AppCampaignAppStore int32
+
+const (
+	// Not specified.
+	AppCampaignAppStoreEnum_UNSPECIFIED AppCampaignAppStoreEnum_AppCampaignAppStore = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppCampaignAppStoreEnum_UNKNOWN AppCampaignAppStoreEnum_AppCampaignAppStore = 1
+	// Apple app store.
+	AppCampaignAppStoreEnum_APPLE_APP_STORE AppCampaignAppStoreEnum_AppCampaignAppStore = 2
+	// Google play.
+	AppCampaignAppStoreEnum_GOOGLE_APP_STORE AppCampaignAppStoreEnum_AppCampaignAppStore = 3
+)
+
+var AppCampaignAppStoreEnum_AppCampaignAppStore_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "APPLE_APP_STORE",
+	3: "GOOGLE_APP_STORE",
+}
+
+var AppCampaignAppStoreEnum_AppCampaignAppStore_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"APPLE_APP_STORE":  2,
+	"GOOGLE_APP_STORE": 3,
+}
+
+func (x AppCampaignAppStoreEnum_AppCampaignAppStore) String() string {
+	return proto.EnumName(AppCampaignAppStoreEnum_AppCampaignAppStore_name, int32(x))
+}
+
+func (AppCampaignAppStoreEnum_AppCampaignAppStore) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_042483d04109fcc0, []int{0, 0}
+}
+
+// The application store that distributes mobile applications.
+type AppCampaignAppStoreEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppCampaignAppStoreEnum) Reset()         { *m = AppCampaignAppStoreEnum{} }
+func (m *AppCampaignAppStoreEnum) String() string { return proto.CompactTextString(m) }
+func (*AppCampaignAppStoreEnum) ProtoMessage()    {}
+func (*AppCampaignAppStoreEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_042483d04109fcc0, []int{0}
+}
+
+func (m *AppCampaignAppStoreEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppCampaignAppStoreEnum.Unmarshal(m, b)
+}
+func (m *AppCampaignAppStoreEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppCampaignAppStoreEnum.Marshal(b, m, deterministic)
+}
+func (m *AppCampaignAppStoreEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppCampaignAppStoreEnum.Merge(m, src)
+}
+func (m *AppCampaignAppStoreEnum) XXX_Size() int {
+	return xxx_messageInfo_AppCampaignAppStoreEnum.Size(m)
+}
+func (m *AppCampaignAppStoreEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppCampaignAppStoreEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppCampaignAppStoreEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppCampaignAppStoreEnum_AppCampaignAppStore", AppCampaignAppStoreEnum_AppCampaignAppStore_name, AppCampaignAppStoreEnum_AppCampaignAppStore_value)
+	proto.RegisterType((*AppCampaignAppStoreEnum)(nil), "google.ads.googleads.v3.enums.AppCampaignAppStoreEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_campaign_app_store.proto", fileDescriptor_042483d04109fcc0)
+}
+
+var fileDescriptor_042483d04109fcc0 = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xd1, 0x4a, 0xf3, 0x30,
+	0x18, 0xfd, 0xd7, 0xc1, 0x2f, 0x64, 0x17, 0x2b, 0x9d, 0xa0, 0x88, 0xbb, 0xd8, 0x1e, 0x20, 0xbd,
+	0xc8, 0x5d, 0xbc, 0xca, 0x66, 0x2d, 0x43, 0x69, 0x83, 0x73, 0x13, 0xa4, 0x58, 0xe2, 0x5a, 0x42,
+	0x61, 0x4d, 0xc2, 0xd2, 0x0d, 0x7c, 0x1d, 0x2f, 0x7d, 0x14, 0x1f, 0x45, 0xf0, 0x1d, 0x24, 0xc9,
+	0x56, 0x10, 0xa6, 0x37, 0xe1, 0xe4, 0x3b, 0xdf, 0x39, 0x9c, 0xef, 0x00, 0xcc, 0xa5, 0xe4, 0xeb,
+	0x32, 0x64, 0x85, 0x0e, 0x1d, 0x34, 0x68, 0x87, 0xc2, 0x52, 0x6c, 0x6b, 0x1d, 0x32, 0xa5, 0xf2,
+	0x15, 0xab, 0x15, 0xab, 0xb8, 0xc8, 0xcd, 0x47, 0x37, 0x72, 0x53, 0x42, 0xb5, 0x91, 0x8d, 0x0c,
+	0x86, 0x4e, 0x00, 0x59, 0xa1, 0x61, 0xab, 0x85, 0x3b, 0x04, 0xad, 0xf6, 0xe2, 0xf2, 0x60, 0xad,
+	0xaa, 0x90, 0x09, 0x21, 0x1b, 0xd6, 0x54, 0x52, 0x68, 0x27, 0x1e, 0xbf, 0x82, 0x33, 0xa2, 0xd4,
+	0x74, 0xef, 0x4d, 0x94, 0x9a, 0x1b, 0xe7, 0x48, 0x6c, 0xeb, 0xf1, 0x33, 0x18, 0x1c, 0xa1, 0x82,
+	0x3e, 0xe8, 0x2d, 0x92, 0x39, 0x8d, 0xa6, 0xb3, 0x9b, 0x59, 0x74, 0xed, 0xff, 0x0b, 0x7a, 0xe0,
+	0x64, 0x91, 0xdc, 0x26, 0xe9, 0x63, 0xe2, 0x77, 0x82, 0x01, 0xe8, 0x13, 0x4a, 0xef, 0xa2, 0x9c,
+	0x50, 0x9a, 0xcf, 0x1f, 0xd2, 0xfb, 0xc8, 0xf7, 0x82, 0x53, 0xe0, 0xc7, 0x69, 0x1a, 0xff, 0x98,
+	0x76, 0x27, 0x5f, 0x1d, 0x30, 0x5a, 0xc9, 0x1a, 0xfe, 0x19, 0x7f, 0x72, 0x7e, 0x24, 0x03, 0x35,
+	0xd1, 0x69, 0xe7, 0x69, 0xb2, 0x97, 0x72, 0xb9, 0x66, 0x82, 0x43, 0xb9, 0xe1, 0x21, 0x2f, 0x85,
+	0x3d, 0xec, 0xd0, 0xa2, 0xaa, 0xf4, 0x2f, 0xa5, 0x5e, 0xd9, 0xf7, 0xcd, 0xeb, 0xc6, 0x84, 0xbc,
+	0x7b, 0xc3, 0xd8, 0x59, 0x91, 0x42, 0x43, 0x07, 0x0d, 0x5a, 0x22, 0x68, 0xaa, 0xd0, 0x1f, 0x07,
+	0x3e, 0x23, 0x85, 0xce, 0x5a, 0x3e, 0x5b, 0xa2, 0xcc, 0xf2, 0x9f, 0xde, 0xc8, 0x0d, 0x31, 0x26,
+	0x85, 0xc6, 0xb8, 0xdd, 0xc0, 0x78, 0x89, 0x30, 0xb6, 0x3b, 0x2f, 0xff, 0x6d, 0x30, 0xf4, 0x1d,
+	0x00, 0x00, 0xff, 0xff, 0x67, 0xd2, 0x06, 0xf6, 0xec, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_campaign_bidding_strategy_goal_type.pb.go b/googleapis/ads/googleads/v3/enums/app_campaign_bidding_strategy_goal_type.pb.go
new file mode 100644
index 0000000..06e0f84
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_campaign_bidding_strategy_goal_type.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_campaign_bidding_strategy_goal_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Goal type of App campaign BiddingStrategy.
+type AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType int32
+
+const (
+	// Not specified.
+	AppCampaignBiddingStrategyGoalTypeEnum_UNSPECIFIED AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppCampaignBiddingStrategyGoalTypeEnum_UNKNOWN AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 1
+	// Aim to maximize the number of app installs. The cpa bid is the
+	// target cost per install.
+	AppCampaignBiddingStrategyGoalTypeEnum_OPTIMIZE_INSTALLS_TARGET_INSTALL_COST AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 2
+	// Aim to maximize the long term number of selected in-app conversions from
+	// app installs. The cpa bid is the target cost per install.
+	AppCampaignBiddingStrategyGoalTypeEnum_OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 3
+	// Aim to maximize the long term number of selected in-app conversions from
+	// app installs. The cpa bid is the target cost per in-app conversion. Note
+	// that the actual cpa may seem higher than the target cpa at first, since
+	// the long term conversions haven’t happened yet.
+	AppCampaignBiddingStrategyGoalTypeEnum_OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 4
+	// Aim to maximize all conversions' value, i.e. install + selected in-app
+	// conversions while achieving or exceeding target return on advertising
+	// spend.
+	AppCampaignBiddingStrategyGoalTypeEnum_OPTIMIZE_RETURN_ON_ADVERTISING_SPEND AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType = 5
+)
+
+var AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPTIMIZE_INSTALLS_TARGET_INSTALL_COST",
+	3: "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST",
+	4: "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST",
+	5: "OPTIMIZE_RETURN_ON_ADVERTISING_SPEND",
+}
+
+var AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType_value = map[string]int32{
+	"UNSPECIFIED":                           0,
+	"UNKNOWN":                               1,
+	"OPTIMIZE_INSTALLS_TARGET_INSTALL_COST": 2,
+	"OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST":    3,
+	"OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST": 4,
+	"OPTIMIZE_RETURN_ON_ADVERTISING_SPEND":               5,
+}
+
+func (x AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType) String() string {
+	return proto.EnumName(AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType_name, int32(x))
+}
+
+func (AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e9151c8d2d13e16b, []int{0, 0}
+}
+
+// Container for enum describing goal towards which the bidding strategy of an
+// app campaign should optimize for.
+type AppCampaignBiddingStrategyGoalTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) Reset() {
+	*m = AppCampaignBiddingStrategyGoalTypeEnum{}
+}
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AppCampaignBiddingStrategyGoalTypeEnum) ProtoMessage()    {}
+func (*AppCampaignBiddingStrategyGoalTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e9151c8d2d13e16b, []int{0}
+}
+
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum.Unmarshal(m, b)
+}
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum.Merge(m, src)
+}
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum.Size(m)
+}
+func (m *AppCampaignBiddingStrategyGoalTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppCampaignBiddingStrategyGoalTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType", AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType_name, AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType_value)
+	proto.RegisterType((*AppCampaignBiddingStrategyGoalTypeEnum)(nil), "google.ads.googleads.v3.enums.AppCampaignBiddingStrategyGoalTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_campaign_bidding_strategy_goal_type.proto", fileDescriptor_e9151c8d2d13e16b)
+}
+
+var fileDescriptor_e9151c8d2d13e16b = []byte{
+	// 411 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0x8a, 0xdb, 0x30,
+	0x10, 0x6e, 0xbc, 0xfd, 0x01, 0xed, 0xa1, 0xc1, 0xc7, 0xd2, 0x3d, 0x6c, 0xe8, 0xef, 0x45, 0x86,
+	0x1a, 0x7a, 0x50, 0x4f, 0x4a, 0xa2, 0x1a, 0xb1, 0x5b, 0xd9, 0x58, 0x8a, 0x0b, 0x4b, 0x40, 0x68,
+	0xd7, 0x46, 0x18, 0x12, 0x49, 0x44, 0xde, 0x85, 0xdc, 0xfb, 0x24, 0x3d, 0xf6, 0xd2, 0xf7, 0xe8,
+	0xa3, 0xf4, 0x19, 0x7a, 0x28, 0xb1, 0x12, 0xb7, 0x87, 0xb6, 0xe9, 0xc5, 0x7c, 0x9e, 0xf9, 0x7e,
+	0xc4, 0xcc, 0x80, 0x0b, 0x6d, 0xad, 0x5e, 0x35, 0x89, 0xaa, 0x7d, 0x12, 0xe0, 0x0e, 0xdd, 0xa5,
+	0x49, 0x63, 0x6e, 0xd7, 0x3e, 0x51, 0xce, 0xc9, 0x1b, 0xb5, 0x76, 0xaa, 0xd5, 0x46, 0x5e, 0xb7,
+	0x75, 0xdd, 0x1a, 0x2d, 0x7d, 0xb7, 0x51, 0x5d, 0xa3, 0xb7, 0x52, 0x5b, 0xb5, 0x92, 0xdd, 0xd6,
+	0x35, 0xd0, 0x6d, 0x6c, 0x67, 0xe3, 0xb3, 0xe0, 0x00, 0x55, 0xed, 0xe1, 0x60, 0x06, 0xef, 0x52,
+	0xd8, 0x9b, 0x3d, 0x79, 0x7a, 0xc8, 0x72, 0x6d, 0xa2, 0x8c, 0xb1, 0x9d, 0xea, 0x5a, 0x6b, 0x7c,
+	0x10, 0x4f, 0xbe, 0x46, 0xe0, 0x05, 0x76, 0x6e, 0xb6, 0x4f, 0x9b, 0x86, 0x30, 0xbe, 0xcf, 0xca,
+	0xac, 0x5a, 0x89, 0xad, 0x6b, 0x88, 0xb9, 0x5d, 0x4f, 0x3e, 0x45, 0x60, 0x72, 0x9c, 0x1a, 0x3f,
+	0x06, 0xa7, 0x0b, 0xc6, 0x0b, 0x32, 0xa3, 0xef, 0x29, 0x99, 0x8f, 0xef, 0xc5, 0xa7, 0xe0, 0xd1,
+	0x82, 0x5d, 0xb0, 0xfc, 0x23, 0x1b, 0x8f, 0xe2, 0xd7, 0xe0, 0x79, 0x5e, 0x08, 0xfa, 0x81, 0x5e,
+	0x11, 0x49, 0x19, 0x17, 0xf8, 0xf2, 0x92, 0x4b, 0x81, 0xcb, 0x8c, 0x88, 0xc3, 0xbf, 0x9c, 0xe5,
+	0x5c, 0x8c, 0xa3, 0x38, 0x05, 0xc9, 0x6f, 0x54, 0x89, 0x8b, 0x42, 0xce, 0x72, 0x56, 0x91, 0x92,
+	0xd3, 0x9c, 0xfd, 0x59, 0x74, 0x12, 0xbf, 0x05, 0x6f, 0xfe, 0x43, 0xf4, 0xab, 0x14, 0x74, 0xf7,
+	0xe3, 0x57, 0xe0, 0xd9, 0xa0, 0x2b, 0x89, 0x58, 0x94, 0x4c, 0xe6, 0x4c, 0xe2, 0x79, 0x45, 0x4a,
+	0x41, 0x39, 0x65, 0x99, 0xe4, 0x05, 0x61, 0xf3, 0xf1, 0x83, 0xe9, 0x8f, 0x11, 0x38, 0xbf, 0xb1,
+	0x6b, 0xf8, 0xcf, 0xa9, 0x4f, 0x5f, 0x1e, 0x9f, 0x54, 0xb1, 0x5b, 0x40, 0x31, 0xba, 0x9a, 0xee,
+	0x9d, 0xb4, 0x5d, 0x29, 0xa3, 0xa1, 0xdd, 0xe8, 0x44, 0x37, 0xa6, 0x5f, 0xcf, 0xe1, 0x38, 0x5c,
+	0xeb, 0xff, 0x72, 0x2b, 0xef, 0xfa, 0xef, 0xe7, 0xe8, 0x24, 0xc3, 0xf8, 0x4b, 0x74, 0x96, 0x05,
+	0x2b, 0x5c, 0x7b, 0x18, 0xe0, 0x0e, 0x55, 0x29, 0xdc, 0x2d, 0xd0, 0x7f, 0x3b, 0xf4, 0x97, 0xb8,
+	0xf6, 0xcb, 0xa1, 0xbf, 0xac, 0xd2, 0x65, 0xdf, 0xff, 0x1e, 0x9d, 0x87, 0x22, 0x42, 0xb8, 0xf6,
+	0x08, 0x0d, 0x0c, 0x84, 0xaa, 0x14, 0xa1, 0x9e, 0x73, 0xfd, 0xb0, 0x7f, 0x58, 0xfa, 0x33, 0x00,
+	0x00, 0xff, 0xff, 0x7e, 0x89, 0xee, 0x47, 0xc3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_payment_model_type.pb.go b/googleapis/ads/googleads/v3/enums/app_payment_model_type.pb.go
new file mode 100644
index 0000000..4b7e632
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_payment_model_type.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_payment_model_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible app payment models.
+type AppPaymentModelTypeEnum_AppPaymentModelType int32
+
+const (
+	// Not specified.
+	AppPaymentModelTypeEnum_UNSPECIFIED AppPaymentModelTypeEnum_AppPaymentModelType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppPaymentModelTypeEnum_UNKNOWN AppPaymentModelTypeEnum_AppPaymentModelType = 1
+	// Represents paid-for apps.
+	AppPaymentModelTypeEnum_PAID AppPaymentModelTypeEnum_AppPaymentModelType = 30
+)
+
+var AppPaymentModelTypeEnum_AppPaymentModelType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	30: "PAID",
+}
+
+var AppPaymentModelTypeEnum_AppPaymentModelType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PAID":        30,
+}
+
+func (x AppPaymentModelTypeEnum_AppPaymentModelType) String() string {
+	return proto.EnumName(AppPaymentModelTypeEnum_AppPaymentModelType_name, int32(x))
+}
+
+func (AppPaymentModelTypeEnum_AppPaymentModelType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d3e62b72aff6b996, []int{0, 0}
+}
+
+// Represents a criterion for targeting paid apps.
+type AppPaymentModelTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppPaymentModelTypeEnum) Reset()         { *m = AppPaymentModelTypeEnum{} }
+func (m *AppPaymentModelTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AppPaymentModelTypeEnum) ProtoMessage()    {}
+func (*AppPaymentModelTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3e62b72aff6b996, []int{0}
+}
+
+func (m *AppPaymentModelTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppPaymentModelTypeEnum.Unmarshal(m, b)
+}
+func (m *AppPaymentModelTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppPaymentModelTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AppPaymentModelTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppPaymentModelTypeEnum.Merge(m, src)
+}
+func (m *AppPaymentModelTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AppPaymentModelTypeEnum.Size(m)
+}
+func (m *AppPaymentModelTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppPaymentModelTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppPaymentModelTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppPaymentModelTypeEnum_AppPaymentModelType", AppPaymentModelTypeEnum_AppPaymentModelType_name, AppPaymentModelTypeEnum_AppPaymentModelType_value)
+	proto.RegisterType((*AppPaymentModelTypeEnum)(nil), "google.ads.googleads.v3.enums.AppPaymentModelTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_payment_model_type.proto", fileDescriptor_d3e62b72aff6b996)
+}
+
+var fileDescriptor_d3e62b72aff6b996 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xdd, 0x14, 0x95, 0xec, 0xe0, 0xa8, 0x07, 0x45, 0x9c, 0xb0, 0x3d, 0x40, 0x72, 0xc8,
+	0x2d, 0xe2, 0x21, 0x73, 0x73, 0x14, 0xb1, 0x16, 0x74, 0x55, 0xa4, 0x50, 0xa2, 0x09, 0xa1, 0xd0,
+	0x26, 0x61, 0xe9, 0x06, 0x7d, 0x1d, 0x8f, 0x3e, 0x8a, 0x8f, 0x22, 0xf8, 0x0e, 0xd2, 0xc4, 0xf6,
+	0x34, 0xbd, 0x84, 0x8f, 0x7c, 0xff, 0xdf, 0x97, 0x2f, 0x7f, 0x40, 0xa4, 0xd6, 0xb2, 0x10, 0x88,
+	0x71, 0x8b, 0xbc, 0x6c, 0xd4, 0x06, 0x23, 0xa1, 0xd6, 0xa5, 0x45, 0xcc, 0x98, 0xcc, 0xb0, 0xba,
+	0x14, 0xaa, 0xca, 0x4a, 0xcd, 0x45, 0x91, 0x55, 0xb5, 0x11, 0xd0, 0xac, 0x74, 0xa5, 0x83, 0x91,
+	0x07, 0x20, 0xe3, 0x16, 0x76, 0x2c, 0xdc, 0x60, 0xe8, 0xd8, 0xb3, 0xf3, 0x36, 0xda, 0xe4, 0x88,
+	0x29, 0xa5, 0x2b, 0x56, 0xe5, 0x5a, 0x59, 0x0f, 0x4f, 0x9e, 0xc1, 0x09, 0x35, 0x26, 0xf6, 0xd9,
+	0x77, 0x4d, 0xf4, 0x63, 0x6d, 0xc4, 0x5c, 0xad, 0xcb, 0xc9, 0x15, 0x38, 0xde, 0x62, 0x05, 0x47,
+	0x60, 0xb0, 0x8c, 0x1e, 0xe2, 0xf9, 0x75, 0x78, 0x13, 0xce, 0x67, 0xc3, 0x9d, 0x60, 0x00, 0x0e,
+	0x96, 0xd1, 0x6d, 0x74, 0xff, 0x14, 0x0d, 0x7b, 0xc1, 0x21, 0xd8, 0x8b, 0x69, 0x38, 0x1b, 0x5e,
+	0x4c, 0xbf, 0x7b, 0x60, 0xfc, 0xa6, 0x4b, 0xf8, 0x6f, 0xbb, 0xe9, 0xe9, 0x96, 0x27, 0xe2, 0xa6,
+	0x59, 0xdc, 0x7b, 0x99, 0xfe, 0xa2, 0x52, 0x17, 0x4c, 0x49, 0xa8, 0x57, 0x12, 0x49, 0xa1, 0x5c,
+	0xef, 0x76, 0x49, 0x26, 0xb7, 0x7f, 0xec, 0xec, 0xd2, 0x9d, 0xef, 0xfd, 0xdd, 0x05, 0xa5, 0x1f,
+	0xfd, 0xd1, 0xc2, 0x47, 0x51, 0x6e, 0xa1, 0x97, 0x8d, 0x4a, 0x30, 0x6c, 0x7e, 0x6a, 0x3f, 0x5b,
+	0x3f, 0xa5, 0xdc, 0xa6, 0x9d, 0x9f, 0x26, 0x38, 0x75, 0xfe, 0x57, 0x7f, 0xec, 0x2f, 0x09, 0xa1,
+	0xdc, 0x12, 0xd2, 0x4d, 0x10, 0x92, 0x60, 0x42, 0xdc, 0xcc, 0xeb, 0xbe, 0x2b, 0x86, 0x7f, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xf0, 0x46, 0x27, 0xe2, 0xcb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/app_placeholder_field.pb.go
new file mode 100644
index 0000000..e6c0011
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_placeholder_field.pb.go
@@ -0,0 +1,159 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for App placeholder fields.
+type AppPlaceholderFieldEnum_AppPlaceholderField int32
+
+const (
+	// Not specified.
+	AppPlaceholderFieldEnum_UNSPECIFIED AppPlaceholderFieldEnum_AppPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppPlaceholderFieldEnum_UNKNOWN AppPlaceholderFieldEnum_AppPlaceholderField = 1
+	// Data Type: INT64. The application store that the target application
+	// belongs to. Valid values are: 1 = Apple iTunes Store; 2 = Google Play
+	// Store.
+	AppPlaceholderFieldEnum_STORE AppPlaceholderFieldEnum_AppPlaceholderField = 2
+	// Data Type: STRING. The store-specific ID for the target application.
+	AppPlaceholderFieldEnum_ID AppPlaceholderFieldEnum_AppPlaceholderField = 3
+	// Data Type: STRING. The visible text displayed when the link is rendered
+	// in an ad.
+	AppPlaceholderFieldEnum_LINK_TEXT AppPlaceholderFieldEnum_AppPlaceholderField = 4
+	// Data Type: STRING. The destination URL of the in-app link.
+	AppPlaceholderFieldEnum_URL AppPlaceholderFieldEnum_AppPlaceholderField = 5
+	// Data Type: URL_LIST. Final URLs for the in-app link when using Upgraded
+	// URLs.
+	AppPlaceholderFieldEnum_FINAL_URLS AppPlaceholderFieldEnum_AppPlaceholderField = 6
+	// Data Type: URL_LIST. Final Mobile URLs for the in-app link when using
+	// Upgraded URLs.
+	AppPlaceholderFieldEnum_FINAL_MOBILE_URLS AppPlaceholderFieldEnum_AppPlaceholderField = 7
+	// Data Type: URL. Tracking template for the in-app link when using Upgraded
+	// URLs.
+	AppPlaceholderFieldEnum_TRACKING_URL AppPlaceholderFieldEnum_AppPlaceholderField = 8
+	// Data Type: STRING. Final URL suffix for the in-app link when using
+	// parallel tracking.
+	AppPlaceholderFieldEnum_FINAL_URL_SUFFIX AppPlaceholderFieldEnum_AppPlaceholderField = 9
+)
+
+var AppPlaceholderFieldEnum_AppPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STORE",
+	3: "ID",
+	4: "LINK_TEXT",
+	5: "URL",
+	6: "FINAL_URLS",
+	7: "FINAL_MOBILE_URLS",
+	8: "TRACKING_URL",
+	9: "FINAL_URL_SUFFIX",
+}
+
+var AppPlaceholderFieldEnum_AppPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"STORE":             2,
+	"ID":                3,
+	"LINK_TEXT":         4,
+	"URL":               5,
+	"FINAL_URLS":        6,
+	"FINAL_MOBILE_URLS": 7,
+	"TRACKING_URL":      8,
+	"FINAL_URL_SUFFIX":  9,
+}
+
+func (x AppPlaceholderFieldEnum_AppPlaceholderField) String() string {
+	return proto.EnumName(AppPlaceholderFieldEnum_AppPlaceholderField_name, int32(x))
+}
+
+func (AppPlaceholderFieldEnum_AppPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_60a611ef024f5427, []int{0, 0}
+}
+
+// Values for App placeholder fields.
+type AppPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppPlaceholderFieldEnum) Reset()         { *m = AppPlaceholderFieldEnum{} }
+func (m *AppPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*AppPlaceholderFieldEnum) ProtoMessage()    {}
+func (*AppPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_60a611ef024f5427, []int{0}
+}
+
+func (m *AppPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *AppPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *AppPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *AppPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Size(m)
+}
+func (m *AppPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppPlaceholderFieldEnum_AppPlaceholderField", AppPlaceholderFieldEnum_AppPlaceholderField_name, AppPlaceholderFieldEnum_AppPlaceholderField_value)
+	proto.RegisterType((*AppPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.AppPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_placeholder_field.proto", fileDescriptor_60a611ef024f5427)
+}
+
+var fileDescriptor_60a611ef024f5427 = []byte{
+	// 382 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xdd, 0xce, 0x93, 0x30,
+	0x18, 0x16, 0xe6, 0xb7, 0xb9, 0x7e, 0xfe, 0xd4, 0xaa, 0xd1, 0x18, 0x77, 0xb0, 0x5d, 0x40, 0x39,
+	0xe0, 0xc8, 0x7a, 0x54, 0x36, 0x58, 0x9a, 0x21, 0x23, 0xfc, 0xcc, 0xc5, 0x90, 0x10, 0x1c, 0x88,
+	0x24, 0x8c, 0x36, 0xeb, 0xb6, 0x0b, 0xf2, 0xd0, 0xc4, 0x0b, 0xd1, 0x4b, 0x31, 0xf1, 0x1e, 0x0c,
+	0xd4, 0xe1, 0xc9, 0xfc, 0x4e, 0x9a, 0xa7, 0xef, 0xf3, 0x93, 0xf6, 0x79, 0xc1, 0xdb, 0x92, 0xf3,
+	0xb2, 0x2e, 0x8c, 0x2c, 0x97, 0x86, 0x82, 0x2d, 0x3a, 0x9b, 0x46, 0xd1, 0x9c, 0xf6, 0xd2, 0xc8,
+	0x84, 0x48, 0x45, 0x9d, 0xed, 0x8a, 0x2f, 0xbc, 0xce, 0x8b, 0x43, 0xfa, 0xb9, 0x2a, 0xea, 0x1c,
+	0x8b, 0x03, 0x3f, 0x72, 0x34, 0x51, 0x7a, 0x9c, 0xe5, 0x12, 0xf7, 0x56, 0x7c, 0x36, 0x71, 0x67,
+	0x7d, 0xfd, 0xe6, 0x92, 0x2c, 0x2a, 0x23, 0x6b, 0x1a, 0x7e, 0xcc, 0x8e, 0x15, 0x6f, 0xa4, 0x32,
+	0xcf, 0x7e, 0x68, 0xe0, 0x25, 0x15, 0xc2, 0xff, 0x97, 0xed, 0xb4, 0xd1, 0x76, 0x73, 0xda, 0xcf,
+	0xbe, 0x6b, 0xe0, 0xd9, 0x15, 0x0e, 0x3d, 0x01, 0xb7, 0xb1, 0x17, 0xfa, 0xf6, 0x9c, 0x39, 0xcc,
+	0x5e, 0xc0, 0x7b, 0xe8, 0x16, 0x8c, 0x62, 0x6f, 0xe5, 0xad, 0x3f, 0x78, 0x50, 0x43, 0x63, 0x70,
+	0x13, 0x46, 0xeb, 0xc0, 0x86, 0x3a, 0x1a, 0x02, 0x9d, 0x2d, 0xe0, 0x00, 0x3d, 0x02, 0x63, 0x97,
+	0x79, 0xab, 0x34, 0xb2, 0xb7, 0x11, 0xbc, 0x8f, 0x46, 0x60, 0x10, 0x07, 0x2e, 0xbc, 0x41, 0x8f,
+	0x01, 0x70, 0x98, 0x47, 0xdd, 0x34, 0x0e, 0xdc, 0x10, 0x0e, 0xd1, 0x0b, 0xf0, 0x54, 0xdd, 0xdf,
+	0xaf, 0x2d, 0xe6, 0xda, 0x6a, 0x3c, 0x42, 0x10, 0x3c, 0x8c, 0x02, 0x3a, 0x5f, 0x31, 0x6f, 0xd9,
+	0x8e, 0xe0, 0x03, 0xf4, 0x1c, 0xc0, 0xde, 0x98, 0x86, 0xb1, 0xe3, 0xb0, 0x2d, 0x1c, 0x5b, 0xbf,
+	0x35, 0x30, 0xdd, 0xf1, 0x3d, 0xbe, 0xb3, 0x0f, 0xeb, 0xd5, 0x95, 0x2f, 0xf9, 0x6d, 0x17, 0xbe,
+	0xf6, 0xd1, 0xfa, 0x6b, 0x2d, 0x79, 0x9d, 0x35, 0x25, 0xe6, 0x87, 0xd2, 0x28, 0x8b, 0xa6, 0x6b,
+	0xea, 0xb2, 0x15, 0x51, 0xc9, 0xff, 0x2c, 0xe9, 0x5d, 0x77, 0x7e, 0xd5, 0x07, 0x4b, 0x4a, 0xbf,
+	0xe9, 0x93, 0xa5, 0x8a, 0xa2, 0xb9, 0xc4, 0x0a, 0xb6, 0x68, 0x63, 0xe2, 0xb6, 0x5a, 0xf9, 0xf3,
+	0xc2, 0x27, 0x34, 0x97, 0x49, 0xcf, 0x27, 0x1b, 0x33, 0xe9, 0xf8, 0x5f, 0xfa, 0x54, 0x0d, 0x09,
+	0xa1, 0xb9, 0x24, 0xa4, 0x57, 0x10, 0xb2, 0x31, 0x09, 0xe9, 0x34, 0x9f, 0x86, 0xdd, 0xc3, 0xcc,
+	0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xe8, 0xae, 0xdb, 0x3c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_store.pb.go b/googleapis/ads/googleads/v3/enums/app_store.pb.go
new file mode 100644
index 0000000..cb49829
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_store.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_store.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// App store type in an app extension.
+type AppStoreEnum_AppStore int32
+
+const (
+	// Not specified.
+	AppStoreEnum_UNSPECIFIED AppStoreEnum_AppStore = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppStoreEnum_UNKNOWN AppStoreEnum_AppStore = 1
+	// Apple iTunes.
+	AppStoreEnum_APPLE_ITUNES AppStoreEnum_AppStore = 2
+	// Google Play.
+	AppStoreEnum_GOOGLE_PLAY AppStoreEnum_AppStore = 3
+)
+
+var AppStoreEnum_AppStore_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "APPLE_ITUNES",
+	3: "GOOGLE_PLAY",
+}
+
+var AppStoreEnum_AppStore_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"APPLE_ITUNES": 2,
+	"GOOGLE_PLAY":  3,
+}
+
+func (x AppStoreEnum_AppStore) String() string {
+	return proto.EnumName(AppStoreEnum_AppStore_name, int32(x))
+}
+
+func (AppStoreEnum_AppStore) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa65b602be71fce1, []int{0, 0}
+}
+
+// Container for enum describing app store type in an app extension.
+type AppStoreEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppStoreEnum) Reset()         { *m = AppStoreEnum{} }
+func (m *AppStoreEnum) String() string { return proto.CompactTextString(m) }
+func (*AppStoreEnum) ProtoMessage()    {}
+func (*AppStoreEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa65b602be71fce1, []int{0}
+}
+
+func (m *AppStoreEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppStoreEnum.Unmarshal(m, b)
+}
+func (m *AppStoreEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppStoreEnum.Marshal(b, m, deterministic)
+}
+func (m *AppStoreEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppStoreEnum.Merge(m, src)
+}
+func (m *AppStoreEnum) XXX_Size() int {
+	return xxx_messageInfo_AppStoreEnum.Size(m)
+}
+func (m *AppStoreEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppStoreEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppStoreEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppStoreEnum_AppStore", AppStoreEnum_AppStore_name, AppStoreEnum_AppStore_value)
+	proto.RegisterType((*AppStoreEnum)(nil), "google.ads.googleads.v3.enums.AppStoreEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_store.proto", fileDescriptor_fa65b602be71fce1)
+}
+
+var fileDescriptor_fa65b602be71fce1 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4f, 0xf3, 0x20,
+	0x1c, 0xc6, 0xdf, 0x75, 0xc9, 0xab, 0x61, 0x33, 0x36, 0x3d, 0x1a, 0x77, 0xd8, 0xee, 0xc2, 0x81,
+	0x1b, 0x9e, 0x98, 0x62, 0xb3, 0x6c, 0xe9, 0x48, 0xe6, 0x66, 0xd4, 0x26, 0x0b, 0xda, 0x86, 0x2c,
+	0x59, 0x81, 0x94, 0x6e, 0x1f, 0xc8, 0xa3, 0x1f, 0xc5, 0x8f, 0xe1, 0xd1, 0x4f, 0x61, 0x00, 0xdb,
+	0x9b, 0x5e, 0xc8, 0x03, 0xcf, 0x8f, 0x87, 0x87, 0x3f, 0xb8, 0x92, 0x5a, 0xcb, 0x7d, 0x89, 0x44,
+	0x61, 0x51, 0x90, 0x4e, 0x1d, 0x31, 0x2a, 0xd5, 0xa1, 0xb2, 0x48, 0x18, 0xb3, 0xb5, 0x8d, 0xae,
+	0x4b, 0x68, 0x6a, 0xdd, 0xe8, 0x64, 0x14, 0x18, 0x28, 0x0a, 0x0b, 0x3b, 0x1c, 0x1e, 0x31, 0xf4,
+	0xf8, 0xc5, 0x65, 0x9b, 0x66, 0x76, 0x48, 0x28, 0xa5, 0x1b, 0xd1, 0xec, 0xb4, 0xb2, 0xe1, 0xf2,
+	0xe4, 0x19, 0x0c, 0xa9, 0x31, 0x2b, 0x17, 0xc7, 0xd4, 0xa1, 0x9a, 0xcc, 0xc1, 0x69, 0xbb, 0x4f,
+	0xce, 0xc1, 0x60, 0x9d, 0xad, 0x38, 0xbb, 0x99, 0xdd, 0xcd, 0xd8, 0x6d, 0xfc, 0x2f, 0x19, 0x80,
+	0x93, 0x75, 0x36, 0xcf, 0x96, 0x0f, 0x59, 0xdc, 0x4b, 0x62, 0x30, 0xa4, 0x9c, 0x2f, 0xd8, 0x76,
+	0x76, 0xbf, 0xce, 0xd8, 0x2a, 0x8e, 0x1c, 0x9f, 0x2e, 0x97, 0xe9, 0x82, 0x6d, 0xf9, 0x82, 0x3e,
+	0xc6, 0xfd, 0xe9, 0x67, 0x0f, 0x8c, 0x5f, 0x75, 0x05, 0xff, 0x2c, 0x38, 0x3d, 0x6b, 0x1f, 0xe4,
+	0xae, 0x11, 0xef, 0x3d, 0x4d, 0x7f, 0x78, 0xa9, 0xf7, 0x42, 0x49, 0xa8, 0x6b, 0x89, 0x64, 0xa9,
+	0x7c, 0xdf, 0x76, 0x1e, 0x66, 0x67, 0x7f, 0x19, 0xcf, 0xb5, 0x5f, 0xdf, 0xa2, 0x7e, 0x4a, 0xe9,
+	0x7b, 0x34, 0x4a, 0x43, 0x14, 0x2d, 0x2c, 0x0c, 0xd2, 0xa9, 0x0d, 0x86, 0xee, 0xb3, 0xf6, 0xa3,
+	0xf5, 0x73, 0x5a, 0xd8, 0xbc, 0xf3, 0xf3, 0x0d, 0xce, 0xbd, 0xff, 0x15, 0x8d, 0xc3, 0x21, 0x21,
+	0xb4, 0xb0, 0x84, 0x74, 0x04, 0x21, 0x1b, 0x4c, 0x88, 0x67, 0x5e, 0xfe, 0xfb, 0x62, 0xf8, 0x3b,
+	0x00, 0x00, 0xff, 0xff, 0x25, 0xe8, 0xdf, 0x59, 0xb6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/app_url_operating_system_type.pb.go b/googleapis/ads/googleads/v3/enums/app_url_operating_system_type.pb.go
new file mode 100644
index 0000000..9789c2b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/app_url_operating_system_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/app_url_operating_system_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Operating System
+type AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType int32
+
+const (
+	// Not specified.
+	AppUrlOperatingSystemTypeEnum_UNSPECIFIED AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppUrlOperatingSystemTypeEnum_UNKNOWN AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType = 1
+	// The Apple IOS operating system.
+	AppUrlOperatingSystemTypeEnum_IOS AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType = 2
+	// The Android operating system.
+	AppUrlOperatingSystemTypeEnum_ANDROID AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType = 3
+)
+
+var AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IOS",
+	3: "ANDROID",
+}
+
+var AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"IOS":         2,
+	"ANDROID":     3,
+}
+
+func (x AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType) String() string {
+	return proto.EnumName(AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType_name, int32(x))
+}
+
+func (AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_61db9fcc7d434805, []int{0, 0}
+}
+
+// The possible OS types for a deeplink AppUrl.
+type AppUrlOperatingSystemTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppUrlOperatingSystemTypeEnum) Reset()         { *m = AppUrlOperatingSystemTypeEnum{} }
+func (m *AppUrlOperatingSystemTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AppUrlOperatingSystemTypeEnum) ProtoMessage()    {}
+func (*AppUrlOperatingSystemTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_61db9fcc7d434805, []int{0}
+}
+
+func (m *AppUrlOperatingSystemTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppUrlOperatingSystemTypeEnum.Unmarshal(m, b)
+}
+func (m *AppUrlOperatingSystemTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppUrlOperatingSystemTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AppUrlOperatingSystemTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppUrlOperatingSystemTypeEnum.Merge(m, src)
+}
+func (m *AppUrlOperatingSystemTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AppUrlOperatingSystemTypeEnum.Size(m)
+}
+func (m *AppUrlOperatingSystemTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppUrlOperatingSystemTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppUrlOperatingSystemTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType", AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType_name, AppUrlOperatingSystemTypeEnum_AppUrlOperatingSystemType_value)
+	proto.RegisterType((*AppUrlOperatingSystemTypeEnum)(nil), "google.ads.googleads.v3.enums.AppUrlOperatingSystemTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/app_url_operating_system_type.proto", fileDescriptor_61db9fcc7d434805)
+}
+
+var fileDescriptor_61db9fcc7d434805 = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x6a, 0xeb, 0x30,
+	0x14, 0xfc, 0x71, 0xe0, 0x07, 0x94, 0x45, 0x8d, 0x77, 0x2d, 0x4d, 0x21, 0x39, 0x80, 0xb4, 0xd0,
+	0x4e, 0x5d, 0x29, 0x4d, 0x1a, 0x4c, 0xc1, 0x0e, 0x4d, 0x93, 0x42, 0x31, 0x18, 0xb5, 0x16, 0xc2,
+	0x60, 0x4b, 0xc2, 0x52, 0x02, 0xb9, 0x4e, 0x97, 0x3d, 0x4a, 0x8f, 0xd2, 0x6d, 0x2f, 0x50, 0x2c,
+	0xd5, 0xde, 0xb9, 0x1b, 0x31, 0xbc, 0x37, 0x6f, 0x66, 0x34, 0x80, 0x0a, 0xa5, 0x44, 0xc5, 0x11,
+	0x2b, 0x0c, 0xf2, 0xb0, 0x45, 0x27, 0x8c, 0xb8, 0x3c, 0xd6, 0x06, 0x31, 0xad, 0xf3, 0x63, 0x53,
+	0xe5, 0x4a, 0xf3, 0x86, 0xd9, 0x52, 0x8a, 0xdc, 0x9c, 0x8d, 0xe5, 0x75, 0x6e, 0xcf, 0x9a, 0x43,
+	0xdd, 0x28, 0xab, 0xa2, 0x99, 0xbf, 0x83, 0xac, 0x30, 0xb0, 0x97, 0x80, 0x27, 0x0c, 0x9d, 0xc4,
+	0xd5, 0x75, 0xe7, 0xa0, 0x4b, 0xc4, 0xa4, 0x54, 0x96, 0xd9, 0x52, 0x49, 0xe3, 0x8f, 0x17, 0x1a,
+	0xcc, 0xa8, 0xd6, 0xfb, 0xa6, 0x4a, 0x3b, 0x87, 0x9d, 0x33, 0x78, 0x3a, 0x6b, 0xbe, 0x96, 0xc7,
+	0x7a, 0x91, 0x82, 0xcb, 0x41, 0x42, 0x74, 0x01, 0xa6, 0xfb, 0x64, 0xb7, 0x5d, 0xdf, 0xc5, 0xf7,
+	0xf1, 0x7a, 0x15, 0xfe, 0x8b, 0xa6, 0x60, 0xb2, 0x4f, 0x1e, 0x92, 0xf4, 0x39, 0x09, 0x47, 0xd1,
+	0x04, 0x8c, 0xe3, 0x74, 0x17, 0x06, 0xed, 0x94, 0x26, 0xab, 0xc7, 0x34, 0x5e, 0x85, 0xe3, 0xe5,
+	0xf7, 0x08, 0xcc, 0xdf, 0x54, 0x0d, 0xff, 0x4c, 0xbd, 0xbc, 0x19, 0x34, 0xdd, 0xb6, 0xb9, 0xb7,
+	0xa3, 0x97, 0xe5, 0xaf, 0x80, 0x50, 0x15, 0x93, 0x02, 0xaa, 0x46, 0x20, 0xc1, 0xa5, 0xfb, 0x55,
+	0xd7, 0xa4, 0x2e, 0xcd, 0x40, 0xb1, 0xb7, 0xee, 0x7d, 0x0f, 0xc6, 0x1b, 0x4a, 0x3f, 0x82, 0xd9,
+	0xc6, 0x4b, 0xd1, 0xc2, 0x40, 0x0f, 0x5b, 0x74, 0xc0, 0xb0, 0x6d, 0xc0, 0x7c, 0x76, 0xfb, 0x8c,
+	0x16, 0x26, 0xeb, 0xf7, 0xd9, 0x01, 0x67, 0x6e, 0xff, 0x15, 0xcc, 0xfd, 0x90, 0x10, 0x5a, 0x18,
+	0x42, 0x7a, 0x06, 0x21, 0x07, 0x4c, 0x88, 0xe3, 0xbc, 0xfe, 0x77, 0xc1, 0xf0, 0x4f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x03, 0x47, 0xfc, 0x92, 0xf0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/asset_field_type.pb.go b/googleapis/ads/googleads/v3/enums/asset_field_type.pb.go
new file mode 100644
index 0000000..168ac8a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/asset_field_type.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/asset_field_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the possible placements of an asset.
+type AssetFieldTypeEnum_AssetFieldType int32
+
+const (
+	// Not specified.
+	AssetFieldTypeEnum_UNSPECIFIED AssetFieldTypeEnum_AssetFieldType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AssetFieldTypeEnum_UNKNOWN AssetFieldTypeEnum_AssetFieldType = 1
+	// The asset is linked for use as a headline.
+	AssetFieldTypeEnum_HEADLINE AssetFieldTypeEnum_AssetFieldType = 2
+	// The asset is linked for use as a description.
+	AssetFieldTypeEnum_DESCRIPTION AssetFieldTypeEnum_AssetFieldType = 3
+	// The asset is linked for use as mandatory ad text.
+	AssetFieldTypeEnum_MANDATORY_AD_TEXT AssetFieldTypeEnum_AssetFieldType = 4
+	// The asset is linked for use as a marketing image.
+	AssetFieldTypeEnum_MARKETING_IMAGE AssetFieldTypeEnum_AssetFieldType = 5
+	// The asset is linked for use as a media bundle.
+	AssetFieldTypeEnum_MEDIA_BUNDLE AssetFieldTypeEnum_AssetFieldType = 6
+	// The asset is linked for use as a YouTube video.
+	AssetFieldTypeEnum_YOUTUBE_VIDEO AssetFieldTypeEnum_AssetFieldType = 7
+)
+
+var AssetFieldTypeEnum_AssetFieldType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HEADLINE",
+	3: "DESCRIPTION",
+	4: "MANDATORY_AD_TEXT",
+	5: "MARKETING_IMAGE",
+	6: "MEDIA_BUNDLE",
+	7: "YOUTUBE_VIDEO",
+}
+
+var AssetFieldTypeEnum_AssetFieldType_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"HEADLINE":          2,
+	"DESCRIPTION":       3,
+	"MANDATORY_AD_TEXT": 4,
+	"MARKETING_IMAGE":   5,
+	"MEDIA_BUNDLE":      6,
+	"YOUTUBE_VIDEO":     7,
+}
+
+func (x AssetFieldTypeEnum_AssetFieldType) String() string {
+	return proto.EnumName(AssetFieldTypeEnum_AssetFieldType_name, int32(x))
+}
+
+func (AssetFieldTypeEnum_AssetFieldType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1a10068170a3f176, []int{0, 0}
+}
+
+// Container for enum describing the possible placements of an asset.
+type AssetFieldTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AssetFieldTypeEnum) Reset()         { *m = AssetFieldTypeEnum{} }
+func (m *AssetFieldTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AssetFieldTypeEnum) ProtoMessage()    {}
+func (*AssetFieldTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a10068170a3f176, []int{0}
+}
+
+func (m *AssetFieldTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AssetFieldTypeEnum.Unmarshal(m, b)
+}
+func (m *AssetFieldTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AssetFieldTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AssetFieldTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AssetFieldTypeEnum.Merge(m, src)
+}
+func (m *AssetFieldTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AssetFieldTypeEnum.Size(m)
+}
+func (m *AssetFieldTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AssetFieldTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AssetFieldTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AssetFieldTypeEnum_AssetFieldType", AssetFieldTypeEnum_AssetFieldType_name, AssetFieldTypeEnum_AssetFieldType_value)
+	proto.RegisterType((*AssetFieldTypeEnum)(nil), "google.ads.googleads.v3.enums.AssetFieldTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/asset_field_type.proto", fileDescriptor_1a10068170a3f176)
+}
+
+var fileDescriptor_1a10068170a3f176 = []byte{
+	// 382 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcf, 0x8e, 0x93, 0x40,
+	0x1c, 0x16, 0x56, 0x77, 0xcd, 0xec, 0xea, 0xce, 0xce, 0xc6, 0x8b, 0x71, 0x0f, 0xed, 0x03, 0x0c,
+	0x07, 0x3c, 0x8d, 0xa7, 0xa1, 0x33, 0xc5, 0x49, 0xcb, 0x40, 0x5a, 0x40, 0x6b, 0x48, 0x08, 0x0a,
+	0x12, 0x92, 0x96, 0x21, 0x1d, 0xda, 0xa4, 0x2f, 0xe3, 0xc1, 0xa3, 0x77, 0x5f, 0xc2, 0x27, 0x31,
+	0x3e, 0x85, 0x01, 0x6c, 0x93, 0x1e, 0xdc, 0x0b, 0xf9, 0xf2, 0xfb, 0xfe, 0x84, 0xef, 0x1b, 0xf0,
+	0xb6, 0x54, 0xaa, 0x5c, 0x17, 0x56, 0x96, 0x6b, 0x6b, 0x80, 0x1d, 0xda, 0xdb, 0x56, 0x51, 0xef,
+	0x36, 0xda, 0xca, 0xb4, 0x2e, 0xda, 0xf4, 0x6b, 0x55, 0xac, 0xf3, 0xb4, 0x3d, 0x34, 0x05, 0x6e,
+	0xb6, 0xaa, 0x55, 0xe8, 0x61, 0x90, 0xe2, 0x2c, 0xd7, 0xf8, 0xe4, 0xc2, 0x7b, 0x1b, 0xf7, 0xae,
+	0xd7, 0x6f, 0x8e, 0xa1, 0x4d, 0x65, 0x65, 0x75, 0xad, 0xda, 0xac, 0xad, 0x54, 0xad, 0x07, 0xf3,
+	0xf8, 0xa7, 0x01, 0x10, 0xed, 0x72, 0xa7, 0x5d, 0x6c, 0x78, 0x68, 0x0a, 0x5e, 0xef, 0x36, 0xe3,
+	0x6f, 0x06, 0x78, 0x79, 0x7e, 0x46, 0xb7, 0xe0, 0x3a, 0x92, 0xcb, 0x80, 0x4f, 0xc4, 0x54, 0x70,
+	0x06, 0x9f, 0xa0, 0x6b, 0x70, 0x15, 0xc9, 0x99, 0xf4, 0x3f, 0x48, 0x68, 0xa0, 0x1b, 0xf0, 0xfc,
+	0x3d, 0xa7, 0x6c, 0x2e, 0x24, 0x87, 0x66, 0xa7, 0x65, 0x7c, 0x39, 0x59, 0x88, 0x20, 0x14, 0xbe,
+	0x84, 0x17, 0xe8, 0x15, 0xb8, 0xf3, 0xa8, 0x64, 0x34, 0xf4, 0x17, 0xab, 0x94, 0xb2, 0x34, 0xe4,
+	0x1f, 0x43, 0xf8, 0x14, 0xdd, 0x83, 0x5b, 0x8f, 0x2e, 0x66, 0x3c, 0x14, 0xd2, 0x4d, 0x85, 0x47,
+	0x5d, 0x0e, 0x9f, 0x21, 0x08, 0x6e, 0x3c, 0xce, 0x04, 0x4d, 0x9d, 0x48, 0xb2, 0x39, 0x87, 0x97,
+	0xe8, 0x0e, 0xbc, 0x58, 0xf9, 0x51, 0x18, 0x39, 0x3c, 0x8d, 0x05, 0xe3, 0x3e, 0xbc, 0x72, 0x7e,
+	0x1b, 0x60, 0xf4, 0x45, 0x6d, 0xf0, 0xa3, 0xdd, 0x9d, 0xfb, 0xf3, 0x0e, 0x41, 0x57, 0x39, 0x30,
+	0x3e, 0x39, 0xff, 0x5c, 0xa5, 0x5a, 0x67, 0x75, 0x89, 0xd5, 0xb6, 0xb4, 0xca, 0xa2, 0xee, 0x07,
+	0x39, 0xee, 0xde, 0x54, 0xfa, 0x3f, 0xcf, 0xf0, 0xae, 0xff, 0x7e, 0x37, 0x2f, 0x5c, 0x4a, 0x7f,
+	0x98, 0x0f, 0xee, 0x10, 0x45, 0x73, 0x8d, 0x07, 0xd8, 0xa1, 0xd8, 0xc6, 0xdd, 0x8c, 0xfa, 0xd7,
+	0x91, 0x4f, 0x68, 0xae, 0x93, 0x13, 0x9f, 0xc4, 0x76, 0xd2, 0xf3, 0x7f, 0xcc, 0xd1, 0x70, 0x24,
+	0x84, 0xe6, 0x9a, 0x90, 0x93, 0x82, 0x90, 0xd8, 0x26, 0xa4, 0xd7, 0x7c, 0xbe, 0xec, 0x7f, 0xcc,
+	0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xbe, 0x0e, 0xae, 0x1e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/asset_performance_label.pb.go b/googleapis/ads/googleads/v3/enums/asset_performance_label.pb.go
new file mode 100644
index 0000000..fa94b56
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/asset_performance_label.pb.go
@@ -0,0 +1,140 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/asset_performance_label.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the possible performance labels of an asset, usually
+// computed in the context of a linkage.
+type AssetPerformanceLabelEnum_AssetPerformanceLabel int32
+
+const (
+	// Not specified.
+	AssetPerformanceLabelEnum_UNSPECIFIED AssetPerformanceLabelEnum_AssetPerformanceLabel = 0
+	// Used for return value only. Represents value unknown in this version.
+	AssetPerformanceLabelEnum_UNKNOWN AssetPerformanceLabelEnum_AssetPerformanceLabel = 1
+	// This asset does not yet have any performance informantion. This may be
+	// because it is still under review.
+	AssetPerformanceLabelEnum_PENDING AssetPerformanceLabelEnum_AssetPerformanceLabel = 2
+	// The asset has started getting impressions but the stats are not
+	// statistically significant enough to get an asset performance label.
+	AssetPerformanceLabelEnum_LEARNING AssetPerformanceLabelEnum_AssetPerformanceLabel = 3
+	// Worst performing assets.
+	AssetPerformanceLabelEnum_LOW AssetPerformanceLabelEnum_AssetPerformanceLabel = 4
+	// Good performing assets.
+	AssetPerformanceLabelEnum_GOOD AssetPerformanceLabelEnum_AssetPerformanceLabel = 5
+	// Best performing assets.
+	AssetPerformanceLabelEnum_BEST AssetPerformanceLabelEnum_AssetPerformanceLabel = 6
+)
+
+var AssetPerformanceLabelEnum_AssetPerformanceLabel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "LEARNING",
+	4: "LOW",
+	5: "GOOD",
+	6: "BEST",
+}
+
+var AssetPerformanceLabelEnum_AssetPerformanceLabel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"LEARNING":    3,
+	"LOW":         4,
+	"GOOD":        5,
+	"BEST":        6,
+}
+
+func (x AssetPerformanceLabelEnum_AssetPerformanceLabel) String() string {
+	return proto.EnumName(AssetPerformanceLabelEnum_AssetPerformanceLabel_name, int32(x))
+}
+
+func (AssetPerformanceLabelEnum_AssetPerformanceLabel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2c0d096edebf114e, []int{0, 0}
+}
+
+// Container for enum describing the performance label of an asset.
+type AssetPerformanceLabelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AssetPerformanceLabelEnum) Reset()         { *m = AssetPerformanceLabelEnum{} }
+func (m *AssetPerformanceLabelEnum) String() string { return proto.CompactTextString(m) }
+func (*AssetPerformanceLabelEnum) ProtoMessage()    {}
+func (*AssetPerformanceLabelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2c0d096edebf114e, []int{0}
+}
+
+func (m *AssetPerformanceLabelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AssetPerformanceLabelEnum.Unmarshal(m, b)
+}
+func (m *AssetPerformanceLabelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AssetPerformanceLabelEnum.Marshal(b, m, deterministic)
+}
+func (m *AssetPerformanceLabelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AssetPerformanceLabelEnum.Merge(m, src)
+}
+func (m *AssetPerformanceLabelEnum) XXX_Size() int {
+	return xxx_messageInfo_AssetPerformanceLabelEnum.Size(m)
+}
+func (m *AssetPerformanceLabelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AssetPerformanceLabelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AssetPerformanceLabelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AssetPerformanceLabelEnum_AssetPerformanceLabel", AssetPerformanceLabelEnum_AssetPerformanceLabel_name, AssetPerformanceLabelEnum_AssetPerformanceLabel_value)
+	proto.RegisterType((*AssetPerformanceLabelEnum)(nil), "google.ads.googleads.v3.enums.AssetPerformanceLabelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/asset_performance_label.proto", fileDescriptor_2c0d096edebf114e)
+}
+
+var fileDescriptor_2c0d096edebf114e = []byte{
+	// 335 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x6e, 0xea, 0x30,
+	0x14, 0xfc, 0x09, 0x7c, 0x40, 0xa6, 0x52, 0xa3, 0x48, 0x5d, 0x14, 0x95, 0x05, 0x1c, 0xc0, 0x59,
+	0x64, 0x67, 0x56, 0x4e, 0x49, 0x23, 0x54, 0xe4, 0x44, 0xa5, 0x80, 0x54, 0x45, 0x42, 0x86, 0xb8,
+	0x11, 0x52, 0x62, 0x47, 0x71, 0xe0, 0x10, 0x3d, 0x46, 0x97, 0x3d, 0x4a, 0x8f, 0xd2, 0x4d, 0xaf,
+	0x50, 0x39, 0x2e, 0xe9, 0x86, 0x76, 0x63, 0xcd, 0xf3, 0xbc, 0x19, 0xbd, 0x19, 0x30, 0x49, 0x85,
+	0x48, 0x33, 0xe6, 0xd0, 0x44, 0x3a, 0x1a, 0x2a, 0x74, 0x74, 0x1d, 0xc6, 0x0f, 0xb9, 0x74, 0xa8,
+	0x94, 0xac, 0xda, 0x14, 0xac, 0x7c, 0x16, 0x65, 0x4e, 0xf9, 0x8e, 0x6d, 0x32, 0xba, 0x65, 0x19,
+	0x2c, 0x4a, 0x51, 0x09, 0x7b, 0xa8, 0x15, 0x90, 0x26, 0x12, 0x36, 0x62, 0x78, 0x74, 0x61, 0x2d,
+	0x1e, 0xdc, 0x9c, 0xbc, 0x8b, 0xbd, 0x43, 0x39, 0x17, 0x15, 0xad, 0xf6, 0x82, 0x4b, 0x2d, 0x1e,
+	0xbf, 0x18, 0xe0, 0x1a, 0x2b, 0xfb, 0xe8, 0xc7, 0x7d, 0xae, 0xcc, 0x7d, 0x7e, 0xc8, 0xc7, 0x39,
+	0xb8, 0x3a, 0x4b, 0xda, 0x97, 0xa0, 0xbf, 0x24, 0x8b, 0xc8, 0xbf, 0x9d, 0xdd, 0xcd, 0xfc, 0xa9,
+	0xf5, 0xcf, 0xee, 0x83, 0xee, 0x92, 0xdc, 0x93, 0x70, 0x4d, 0x2c, 0x43, 0x0d, 0x91, 0x4f, 0xa6,
+	0x33, 0x12, 0x58, 0xa6, 0x7d, 0x01, 0x7a, 0x73, 0x1f, 0x3f, 0x10, 0x35, 0xb5, 0xec, 0x2e, 0x68,
+	0xcd, 0xc3, 0xb5, 0xd5, 0xb6, 0x7b, 0xa0, 0x1d, 0x84, 0xe1, 0xd4, 0xfa, 0xaf, 0x90, 0xe7, 0x2f,
+	0x1e, 0xad, 0x8e, 0xf7, 0x69, 0x80, 0xd1, 0x4e, 0xe4, 0xf0, 0xcf, 0x40, 0xde, 0xe0, 0xec, 0x49,
+	0x91, 0x8a, 0x13, 0x19, 0x4f, 0xde, 0xb7, 0x38, 0x15, 0x19, 0xe5, 0x29, 0x14, 0x65, 0xea, 0xa4,
+	0x8c, 0xd7, 0x61, 0x4f, 0xd5, 0x16, 0x7b, 0xf9, 0x4b, 0xd3, 0x93, 0xfa, 0x7d, 0x35, 0x5b, 0x01,
+	0xc6, 0x6f, 0xe6, 0x30, 0xd0, 0x56, 0x38, 0x91, 0x50, 0x43, 0x85, 0x56, 0x2e, 0x54, 0xdd, 0xc8,
+	0xf7, 0x13, 0x1f, 0xe3, 0x44, 0xc6, 0x0d, 0x1f, 0xaf, 0xdc, 0xb8, 0xe6, 0x3f, 0xcc, 0x91, 0xfe,
+	0x44, 0x08, 0x27, 0x12, 0xa1, 0x66, 0x03, 0xa1, 0x95, 0x8b, 0x50, 0xbd, 0xb3, 0xed, 0xd4, 0x87,
+	0xb9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xc8, 0x63, 0xf0, 0x01, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/asset_type.pb.go b/googleapis/ads/googleads/v3/enums/asset_type.pb.go
new file mode 100644
index 0000000..6952076
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/asset_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/asset_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible types of asset.
+type AssetTypeEnum_AssetType int32
+
+const (
+	// Not specified.
+	AssetTypeEnum_UNSPECIFIED AssetTypeEnum_AssetType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AssetTypeEnum_UNKNOWN AssetTypeEnum_AssetType = 1
+	// YouTube video asset.
+	AssetTypeEnum_YOUTUBE_VIDEO AssetTypeEnum_AssetType = 2
+	// Media bundle asset.
+	AssetTypeEnum_MEDIA_BUNDLE AssetTypeEnum_AssetType = 3
+	// Image asset.
+	AssetTypeEnum_IMAGE AssetTypeEnum_AssetType = 4
+	// Text asset.
+	AssetTypeEnum_TEXT AssetTypeEnum_AssetType = 5
+)
+
+var AssetTypeEnum_AssetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "YOUTUBE_VIDEO",
+	3: "MEDIA_BUNDLE",
+	4: "IMAGE",
+	5: "TEXT",
+}
+
+var AssetTypeEnum_AssetType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"YOUTUBE_VIDEO": 2,
+	"MEDIA_BUNDLE":  3,
+	"IMAGE":         4,
+	"TEXT":          5,
+}
+
+func (x AssetTypeEnum_AssetType) String() string {
+	return proto.EnumName(AssetTypeEnum_AssetType_name, int32(x))
+}
+
+func (AssetTypeEnum_AssetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d2719617ac292991, []int{0, 0}
+}
+
+// Container for enum describing the types of asset.
+type AssetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AssetTypeEnum) Reset()         { *m = AssetTypeEnum{} }
+func (m *AssetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AssetTypeEnum) ProtoMessage()    {}
+func (*AssetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d2719617ac292991, []int{0}
+}
+
+func (m *AssetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AssetTypeEnum.Unmarshal(m, b)
+}
+func (m *AssetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AssetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *AssetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AssetTypeEnum.Merge(m, src)
+}
+func (m *AssetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AssetTypeEnum.Size(m)
+}
+func (m *AssetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AssetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AssetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AssetTypeEnum_AssetType", AssetTypeEnum_AssetType_name, AssetTypeEnum_AssetType_value)
+	proto.RegisterType((*AssetTypeEnum)(nil), "google.ads.googleads.v3.enums.AssetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/asset_type.proto", fileDescriptor_d2719617ac292991)
+}
+
+var fileDescriptor_d2719617ac292991 = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4f, 0xc2, 0x30,
+	0x18, 0xc6, 0x65, 0x80, 0x4a, 0x11, 0xad, 0x3d, 0x1a, 0x39, 0xc0, 0x07, 0xe8, 0x0e, 0xbb, 0xd5,
+	0x53, 0xe7, 0x2a, 0x59, 0x94, 0x41, 0xe2, 0x36, 0xff, 0x64, 0x09, 0x99, 0x6c, 0x59, 0x48, 0xa0,
+	0x5d, 0x68, 0x21, 0xe1, 0xeb, 0x78, 0xf4, 0xa3, 0xf8, 0x35, 0xbc, 0xf9, 0x29, 0xcc, 0x5a, 0xb7,
+	0x9b, 0x5e, 0x9a, 0x27, 0xef, 0xfb, 0x7b, 0x9f, 0x3c, 0x7d, 0x00, 0x2e, 0x84, 0x28, 0xd6, 0xb9,
+	0x9d, 0x66, 0xd2, 0x36, 0xb2, 0x52, 0x7b, 0xc7, 0xce, 0xf9, 0x6e, 0x23, 0xed, 0x54, 0xca, 0x5c,
+	0x2d, 0xd4, 0xa1, 0xcc, 0x71, 0xb9, 0x15, 0x4a, 0xa0, 0xa1, 0x81, 0x70, 0x9a, 0x49, 0xdc, 0xf0,
+	0x78, 0xef, 0x60, 0xcd, 0x5f, 0x5d, 0xd7, 0x76, 0xe5, 0xca, 0x4e, 0x39, 0x17, 0x2a, 0x55, 0x2b,
+	0xc1, 0xa5, 0x39, 0x1e, 0x2b, 0x30, 0xa0, 0x95, 0x61, 0x78, 0x28, 0x73, 0xc6, 0x77, 0x9b, 0xf1,
+	0x12, 0xf4, 0x9a, 0x01, 0xba, 0x00, 0xfd, 0x28, 0x78, 0x9c, 0xb3, 0x5b, 0xff, 0xce, 0x67, 0x1e,
+	0x3c, 0x42, 0x7d, 0x70, 0x12, 0x05, 0xf7, 0xc1, 0xec, 0x29, 0x80, 0x2d, 0x74, 0x09, 0x06, 0x2f,
+	0xb3, 0x28, 0x8c, 0x5c, 0xb6, 0x88, 0x7d, 0x8f, 0xcd, 0xa0, 0x85, 0x20, 0x38, 0x9b, 0x32, 0xcf,
+	0xa7, 0x0b, 0x37, 0x0a, 0xbc, 0x07, 0x06, 0xdb, 0xa8, 0x07, 0xba, 0xfe, 0x94, 0x4e, 0x18, 0xec,
+	0xa0, 0x53, 0xd0, 0x09, 0xd9, 0x73, 0x08, 0xbb, 0xee, 0x57, 0x0b, 0x8c, 0x96, 0x62, 0x83, 0xff,
+	0x4d, 0xee, 0x9e, 0x37, 0x41, 0xe6, 0x55, 0xd6, 0x79, 0xeb, 0xd5, 0xfd, 0x3d, 0x28, 0xc4, 0x3a,
+	0xe5, 0x05, 0x16, 0xdb, 0xc2, 0x2e, 0x72, 0xae, 0x7f, 0x52, 0x57, 0x55, 0xae, 0xe4, 0x1f, 0xcd,
+	0xdd, 0xe8, 0xf7, 0xdd, 0x6a, 0x4f, 0x28, 0xfd, 0xb0, 0x86, 0x13, 0x63, 0x45, 0x33, 0x89, 0x8d,
+	0xac, 0x54, 0xec, 0xe0, 0xaa, 0x05, 0xf9, 0x59, 0xef, 0x13, 0x9a, 0xc9, 0xa4, 0xd9, 0x27, 0xb1,
+	0x93, 0xe8, 0xfd, 0xb7, 0x35, 0x32, 0x43, 0x42, 0x68, 0x26, 0x09, 0x69, 0x08, 0x42, 0x62, 0x87,
+	0x10, 0xcd, 0xbc, 0x1d, 0xeb, 0x60, 0xce, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xed, 0x6d,
+	0xbe, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/attribution_model.pb.go b/googleapis/ads/googleads/v3/enums/attribution_model.pb.go
new file mode 100644
index 0000000..1711bf7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/attribution_model.pb.go
@@ -0,0 +1,159 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/attribution_model.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The attribution model that describes how to distribute credit for a
+// particular conversion across potentially many prior interactions.
+type AttributionModelEnum_AttributionModel int32
+
+const (
+	// Not specified.
+	AttributionModelEnum_UNSPECIFIED AttributionModelEnum_AttributionModel = 0
+	// Used for return value only. Represents value unknown in this version.
+	AttributionModelEnum_UNKNOWN AttributionModelEnum_AttributionModel = 1
+	// Uses external attribution.
+	AttributionModelEnum_EXTERNAL AttributionModelEnum_AttributionModel = 100
+	// Attributes all credit for a conversion to its last click.
+	AttributionModelEnum_GOOGLE_ADS_LAST_CLICK AttributionModelEnum_AttributionModel = 101
+	// Attributes all credit for a conversion to its first click using Google
+	// Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK AttributionModelEnum_AttributionModel = 102
+	// Attributes credit for a conversion equally across all of its clicks using
+	// Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_LINEAR AttributionModelEnum_AttributionModel = 103
+	// Attributes exponentially more credit for a conversion to its more recent
+	// clicks using Google Search attribution (half-life is 1 week).
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY AttributionModelEnum_AttributionModel = 104
+	// Attributes 40% of the credit for a conversion to its first and last
+	// clicks. Remaining 20% is evenly distributed across all other clicks. This
+	// uses Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED AttributionModelEnum_AttributionModel = 105
+	// Flexible model that uses machine learning to determine the appropriate
+	// distribution of credit among clicks using Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN AttributionModelEnum_AttributionModel = 106
+)
+
+var AttributionModelEnum_AttributionModel_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	100: "EXTERNAL",
+	101: "GOOGLE_ADS_LAST_CLICK",
+	102: "GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK",
+	103: "GOOGLE_SEARCH_ATTRIBUTION_LINEAR",
+	104: "GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY",
+	105: "GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED",
+	106: "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN",
+}
+
+var AttributionModelEnum_AttributionModel_value = map[string]int32{
+	"UNSPECIFIED":                              0,
+	"UNKNOWN":                                  1,
+	"EXTERNAL":                                 100,
+	"GOOGLE_ADS_LAST_CLICK":                    101,
+	"GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK":    102,
+	"GOOGLE_SEARCH_ATTRIBUTION_LINEAR":         103,
+	"GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY":     104,
+	"GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED": 105,
+	"GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN":    106,
+}
+
+func (x AttributionModelEnum_AttributionModel) String() string {
+	return proto.EnumName(AttributionModelEnum_AttributionModel_name, int32(x))
+}
+
+func (AttributionModelEnum_AttributionModel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1c756564395f8b71, []int{0, 0}
+}
+
+// Container for enum representing the attribution model that describes how to
+// distribute credit for a particular conversion across potentially many prior
+// interactions.
+type AttributionModelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AttributionModelEnum) Reset()         { *m = AttributionModelEnum{} }
+func (m *AttributionModelEnum) String() string { return proto.CompactTextString(m) }
+func (*AttributionModelEnum) ProtoMessage()    {}
+func (*AttributionModelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1c756564395f8b71, []int{0}
+}
+
+func (m *AttributionModelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AttributionModelEnum.Unmarshal(m, b)
+}
+func (m *AttributionModelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AttributionModelEnum.Marshal(b, m, deterministic)
+}
+func (m *AttributionModelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AttributionModelEnum.Merge(m, src)
+}
+func (m *AttributionModelEnum) XXX_Size() int {
+	return xxx_messageInfo_AttributionModelEnum.Size(m)
+}
+func (m *AttributionModelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AttributionModelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AttributionModelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.AttributionModelEnum_AttributionModel", AttributionModelEnum_AttributionModel_name, AttributionModelEnum_AttributionModel_value)
+	proto.RegisterType((*AttributionModelEnum)(nil), "google.ads.googleads.v3.enums.AttributionModelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/attribution_model.proto", fileDescriptor_1c756564395f8b71)
+}
+
+var fileDescriptor_1c756564395f8b71 = []byte{
+	// 407 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdd, 0x6a, 0xd4, 0x40,
+	0x1c, 0xc5, 0xdd, 0x08, 0x2a, 0x53, 0xc1, 0x61, 0xb0, 0x17, 0x8a, 0x05, 0x5b, 0x2a, 0x54, 0x90,
+	0xc9, 0x45, 0xf0, 0x66, 0xbc, 0xfa, 0x27, 0x99, 0xae, 0x43, 0xd3, 0xc9, 0x92, 0x64, 0xd7, 0x0f,
+	0x16, 0x86, 0xd4, 0xc4, 0x18, 0xd9, 0x64, 0x96, 0x9d, 0x6c, 0x1f, 0xc8, 0x4b, 0xc1, 0xd7, 0xf0,
+	0xc2, 0x47, 0xe9, 0x53, 0x48, 0x92, 0x6e, 0x0a, 0x85, 0xec, 0x4d, 0x38, 0xe4, 0xfc, 0xce, 0x61,
+	0x98, 0x33, 0xe8, 0x7d, 0xa1, 0x75, 0xb1, 0xca, 0xed, 0x34, 0x33, 0x76, 0x2f, 0x5b, 0x75, 0xed,
+	0xd8, 0x79, 0xbd, 0xad, 0x8c, 0x9d, 0x36, 0xcd, 0xa6, 0xbc, 0xda, 0x36, 0xa5, 0xae, 0x55, 0xa5,
+	0xb3, 0x7c, 0x45, 0xd7, 0x1b, 0xdd, 0x68, 0x72, 0xd4, 0xb3, 0x34, 0xcd, 0x0c, 0x1d, 0x62, 0xf4,
+	0xda, 0xa1, 0x5d, 0xec, 0xe5, 0xab, 0x5d, 0xeb, 0xba, 0xb4, 0xd3, 0xba, 0xd6, 0x4d, 0xda, 0x36,
+	0x98, 0x3e, 0x7c, 0xf2, 0xd7, 0x42, 0xcf, 0xe1, 0xae, 0xf8, 0xb2, 0xed, 0xe5, 0xf5, 0xb6, 0x3a,
+	0xf9, 0x63, 0x21, 0x7c, 0xdf, 0x20, 0xcf, 0xd0, 0xc1, 0x5c, 0xc6, 0x33, 0xee, 0x89, 0x73, 0xc1,
+	0x7d, 0xfc, 0x80, 0x1c, 0xa0, 0xc7, 0x73, 0x79, 0x21, 0xc3, 0x4f, 0x12, 0x4f, 0xc8, 0x53, 0xf4,
+	0x84, 0x7f, 0x4e, 0x78, 0x24, 0x21, 0xc0, 0x19, 0x79, 0x81, 0x0e, 0xa7, 0x61, 0x38, 0x0d, 0xb8,
+	0x02, 0x3f, 0x56, 0x01, 0xc4, 0x89, 0xf2, 0x02, 0xe1, 0x5d, 0xe0, 0x9c, 0xbc, 0x45, 0x6f, 0x6e,
+	0xad, 0x98, 0x43, 0xe4, 0x7d, 0x54, 0x90, 0x24, 0x91, 0x70, 0xe7, 0x89, 0x08, 0xa5, 0x3a, 0x17,
+	0xd1, 0x80, 0x7e, 0x27, 0xa7, 0xe8, 0xf5, 0x38, 0x1a, 0x08, 0xc9, 0x21, 0xc2, 0x05, 0x39, 0x43,
+	0xa7, 0xe3, 0x54, 0x22, 0x2e, 0xb9, 0xf2, 0xb9, 0x07, 0x5f, 0xf0, 0x0f, 0xf2, 0x0e, 0x9d, 0x8d,
+	0x93, 0xb3, 0x30, 0x16, 0x9d, 0x70, 0x21, 0xe6, 0x3e, 0x2e, 0xf7, 0x1f, 0xd4, 0x87, 0x04, 0x94,
+	0x1f, 0x89, 0x05, 0x97, 0xf8, 0xa7, 0x7b, 0x33, 0x41, 0xc7, 0xdf, 0x74, 0x45, 0xf7, 0x8e, 0xe1,
+	0x1e, 0xde, 0xbf, 0xd2, 0x59, 0xbb, 0xc2, 0x6c, 0xf2, 0xd5, 0xbd, 0xcd, 0x15, 0x7a, 0x95, 0xd6,
+	0x05, 0xd5, 0x9b, 0xc2, 0x2e, 0xf2, 0xba, 0xdb, 0x68, 0xf7, 0x16, 0xd6, 0xa5, 0x19, 0x79, 0x1a,
+	0x1f, 0xba, 0xef, 0x2f, 0xeb, 0xe1, 0x14, 0xe0, 0xb7, 0x75, 0x34, 0xed, 0xab, 0x20, 0x33, 0xb4,
+	0x97, 0xad, 0x5a, 0x38, 0xb4, 0xdd, 0xd5, 0xfc, 0xdb, 0xf9, 0x4b, 0xc8, 0xcc, 0x72, 0xf0, 0x97,
+	0x0b, 0x67, 0xd9, 0xf9, 0x37, 0xd6, 0x71, 0xff, 0x93, 0x31, 0xc8, 0x0c, 0x63, 0x03, 0xc1, 0xd8,
+	0xc2, 0x61, 0xac, 0x63, 0xae, 0x1e, 0x75, 0x07, 0x73, 0xfe, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfe,
+	0x05, 0x57, 0x6f, 0xb2, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/bid_modifier_source.pb.go b/googleapis/ads/googleads/v3/enums/bid_modifier_source.pb.go
new file mode 100644
index 0000000..00af05c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/bid_modifier_source.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/bid_modifier_source.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible bid modifier sources.
+type BidModifierSourceEnum_BidModifierSource int32
+
+const (
+	// Not specified.
+	BidModifierSourceEnum_UNSPECIFIED BidModifierSourceEnum_BidModifierSource = 0
+	// Used for return value only. Represents value unknown in this version.
+	BidModifierSourceEnum_UNKNOWN BidModifierSourceEnum_BidModifierSource = 1
+	// The bid modifier is specified at the campaign level, on the campaign
+	// level criterion.
+	BidModifierSourceEnum_CAMPAIGN BidModifierSourceEnum_BidModifierSource = 2
+	// The bid modifier is specified (overridden) at the ad group level.
+	BidModifierSourceEnum_AD_GROUP BidModifierSourceEnum_BidModifierSource = 3
+)
+
+var BidModifierSourceEnum_BidModifierSource_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CAMPAIGN",
+	3: "AD_GROUP",
+}
+
+var BidModifierSourceEnum_BidModifierSource_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CAMPAIGN":    2,
+	"AD_GROUP":    3,
+}
+
+func (x BidModifierSourceEnum_BidModifierSource) String() string {
+	return proto.EnumName(BidModifierSourceEnum_BidModifierSource_name, int32(x))
+}
+
+func (BidModifierSourceEnum_BidModifierSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c0b718d07dc79201, []int{0, 0}
+}
+
+// Container for enum describing possible bid modifier sources.
+type BidModifierSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BidModifierSourceEnum) Reset()         { *m = BidModifierSourceEnum{} }
+func (m *BidModifierSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*BidModifierSourceEnum) ProtoMessage()    {}
+func (*BidModifierSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c0b718d07dc79201, []int{0}
+}
+
+func (m *BidModifierSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BidModifierSourceEnum.Unmarshal(m, b)
+}
+func (m *BidModifierSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BidModifierSourceEnum.Marshal(b, m, deterministic)
+}
+func (m *BidModifierSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BidModifierSourceEnum.Merge(m, src)
+}
+func (m *BidModifierSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_BidModifierSourceEnum.Size(m)
+}
+func (m *BidModifierSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BidModifierSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BidModifierSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BidModifierSourceEnum_BidModifierSource", BidModifierSourceEnum_BidModifierSource_name, BidModifierSourceEnum_BidModifierSource_value)
+	proto.RegisterType((*BidModifierSourceEnum)(nil), "google.ads.googleads.v3.enums.BidModifierSourceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/bid_modifier_source.proto", fileDescriptor_c0b718d07dc79201)
+}
+
+var fileDescriptor_c0b718d07dc79201 = []byte{
+	// 307 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x1d, 0xa8, 0x64, 0x82, 0xb5, 0xa0, 0x07, 0x71, 0x87, 0xed, 0x01, 0x92, 0x43, 0x0e,
+	0x42, 0x3c, 0xa5, 0xdb, 0x2c, 0x43, 0xd6, 0x15, 0xc7, 0x26, 0x48, 0x61, 0x74, 0x4b, 0x17, 0x02,
+	0x6b, 0x52, 0x9a, 0x76, 0x0f, 0xe4, 0xd1, 0x47, 0xf1, 0x51, 0xf4, 0x25, 0xa4, 0xc9, 0xda, 0xcb,
+	0xd0, 0x4b, 0xf8, 0x92, 0xef, 0x4f, 0xbe, 0xdf, 0x0f, 0x3c, 0x72, 0xa5, 0xf8, 0x3e, 0x45, 0x09,
+	0xd3, 0xc8, 0xc2, 0x1a, 0x1d, 0x30, 0x4a, 0x65, 0x95, 0x69, 0xb4, 0x11, 0x6c, 0x9d, 0x29, 0x26,
+	0x76, 0x22, 0x2d, 0xd6, 0x5a, 0x55, 0xc5, 0x36, 0x85, 0x79, 0xa1, 0x4a, 0xe5, 0xf5, 0xad, 0x1a,
+	0x26, 0x4c, 0xc3, 0xd6, 0x08, 0x0f, 0x18, 0x1a, 0xe3, 0xfd, 0x43, 0x93, 0x9b, 0x0b, 0x94, 0x48,
+	0xa9, 0xca, 0xa4, 0x14, 0x4a, 0x6a, 0x6b, 0x1e, 0xee, 0xc0, 0xad, 0x2f, 0xd8, 0xec, 0x18, 0xbc,
+	0x30, 0xb9, 0x13, 0x59, 0x65, 0xc3, 0x19, 0xb8, 0x39, 0x21, 0xbc, 0x6b, 0xd0, 0x5b, 0x86, 0x8b,
+	0x68, 0x32, 0x9a, 0x3e, 0x4f, 0x27, 0x63, 0xf7, 0xcc, 0xeb, 0x81, 0x8b, 0x65, 0xf8, 0x12, 0xce,
+	0xdf, 0x42, 0xb7, 0xe3, 0x5d, 0x81, 0xcb, 0x11, 0x9d, 0x45, 0x74, 0x1a, 0x84, 0xae, 0x53, 0xdf,
+	0xe8, 0x78, 0x1d, 0xbc, 0xce, 0x97, 0x91, 0xdb, 0xf5, 0x7f, 0x3a, 0x60, 0xb0, 0x55, 0x19, 0xfc,
+	0xb7, 0xab, 0x7f, 0x77, 0xf2, 0x65, 0x54, 0xb7, 0x8c, 0x3a, 0xef, 0xfe, 0xd1, 0xc8, 0xd5, 0x3e,
+	0x91, 0x1c, 0xaa, 0x82, 0x23, 0x9e, 0x4a, 0x33, 0x43, 0xb3, 0xad, 0x5c, 0xe8, 0x3f, 0x96, 0xf7,
+	0x64, 0xce, 0x0f, 0xa7, 0x1b, 0x50, 0xfa, 0xe9, 0xf4, 0x03, 0x1b, 0x45, 0x99, 0x86, 0x16, 0xd6,
+	0x68, 0x85, 0x61, 0x3d, 0xb7, 0xfe, 0x6a, 0xf8, 0x98, 0x32, 0x1d, 0xb7, 0x7c, 0xbc, 0xc2, 0xb1,
+	0xe1, 0xbf, 0x9d, 0x81, 0x7d, 0x24, 0x84, 0x32, 0x4d, 0x48, 0xab, 0x20, 0x64, 0x85, 0x09, 0x31,
+	0x9a, 0xcd, 0xb9, 0x29, 0x86, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa0, 0xda, 0xa4, 0xcb, 0xd4,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/bidding_source.pb.go b/googleapis/ads/googleads/v3/enums/bidding_source.pb.go
new file mode 100644
index 0000000..0e5a896
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/bidding_source.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/bidding_source.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Indicates where a bid or target is defined. For example, an ad group
+// criterion may define a cpc bid directly, or it can inherit its cpc bid from
+// the ad group.
+type BiddingSourceEnum_BiddingSource int32
+
+const (
+	// Not specified.
+	BiddingSourceEnum_UNSPECIFIED BiddingSourceEnum_BiddingSource = 0
+	// Used for return value only. Represents value unknown in this version.
+	BiddingSourceEnum_UNKNOWN BiddingSourceEnum_BiddingSource = 1
+	// Effective bid or target is inherited from campaign bidding strategy.
+	BiddingSourceEnum_CAMPAIGN_BIDDING_STRATEGY BiddingSourceEnum_BiddingSource = 5
+	// The bid or target is defined on the ad group.
+	BiddingSourceEnum_AD_GROUP BiddingSourceEnum_BiddingSource = 6
+	// The bid or target is defined on the ad group criterion.
+	BiddingSourceEnum_AD_GROUP_CRITERION BiddingSourceEnum_BiddingSource = 7
+)
+
+var BiddingSourceEnum_BiddingSource_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	5: "CAMPAIGN_BIDDING_STRATEGY",
+	6: "AD_GROUP",
+	7: "AD_GROUP_CRITERION",
+}
+
+var BiddingSourceEnum_BiddingSource_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"CAMPAIGN_BIDDING_STRATEGY": 5,
+	"AD_GROUP":                  6,
+	"AD_GROUP_CRITERION":        7,
+}
+
+func (x BiddingSourceEnum_BiddingSource) String() string {
+	return proto.EnumName(BiddingSourceEnum_BiddingSource_name, int32(x))
+}
+
+func (BiddingSourceEnum_BiddingSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e6307df4d287cd0d, []int{0, 0}
+}
+
+// Container for enum describing possible bidding sources.
+type BiddingSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingSourceEnum) Reset()         { *m = BiddingSourceEnum{} }
+func (m *BiddingSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingSourceEnum) ProtoMessage()    {}
+func (*BiddingSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e6307df4d287cd0d, []int{0}
+}
+
+func (m *BiddingSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingSourceEnum.Unmarshal(m, b)
+}
+func (m *BiddingSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingSourceEnum.Marshal(b, m, deterministic)
+}
+func (m *BiddingSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingSourceEnum.Merge(m, src)
+}
+func (m *BiddingSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingSourceEnum.Size(m)
+}
+func (m *BiddingSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource", BiddingSourceEnum_BiddingSource_name, BiddingSourceEnum_BiddingSource_value)
+	proto.RegisterType((*BiddingSourceEnum)(nil), "google.ads.googleads.v3.enums.BiddingSourceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/bidding_source.proto", fileDescriptor_e6307df4d287cd0d)
+}
+
+var fileDescriptor_e6307df4d287cd0d = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdd, 0x4a, 0xc3, 0x30,
+	0x18, 0xb5, 0x13, 0x37, 0xc9, 0x14, 0x6b, 0x2e, 0x04, 0xc5, 0x5d, 0x6c, 0x0f, 0x90, 0x82, 0xbd,
+	0x8b, 0x57, 0xe9, 0x5a, 0x4b, 0x11, 0xb3, 0xd2, 0xfd, 0x88, 0x52, 0x28, 0xdd, 0x52, 0x42, 0x61,
+	0x4b, 0x46, 0xb3, 0xed, 0x15, 0x7c, 0x0f, 0x2f, 0x7d, 0x14, 0x5f, 0x44, 0xf0, 0x29, 0xa4, 0x89,
+	0x1d, 0xec, 0x42, 0x6f, 0xc2, 0xc9, 0xf7, 0x9d, 0x73, 0xf8, 0xce, 0x01, 0x77, 0x5c, 0x4a, 0xbe,
+	0x2c, 0x9c, 0x9c, 0x29, 0xc7, 0xc0, 0x1a, 0xed, 0x5c, 0xa7, 0x10, 0xdb, 0x95, 0x72, 0xe6, 0x25,
+	0x63, 0xa5, 0xe0, 0x99, 0x92, 0xdb, 0x6a, 0x51, 0xa0, 0x75, 0x25, 0x37, 0x12, 0xf6, 0x0c, 0x11,
+	0xe5, 0x4c, 0xa1, 0xbd, 0x06, 0xed, 0x5c, 0xa4, 0x35, 0x37, 0xb7, 0x8d, 0xe5, 0xba, 0x74, 0x72,
+	0x21, 0xe4, 0x26, 0xdf, 0x94, 0x52, 0x28, 0x23, 0x1e, 0xbc, 0x59, 0xe0, 0xd2, 0x33, 0xae, 0x63,
+	0x6d, 0x1a, 0x88, 0xed, 0x6a, 0x50, 0x81, 0xf3, 0x83, 0x21, 0xbc, 0x00, 0xdd, 0x29, 0x1d, 0xc7,
+	0xc1, 0x30, 0x7a, 0x88, 0x02, 0xdf, 0x3e, 0x82, 0x5d, 0xd0, 0x99, 0xd2, 0x47, 0x3a, 0x7a, 0xa6,
+	0xb6, 0x05, 0x7b, 0xe0, 0x7a, 0x48, 0x9e, 0x62, 0x12, 0x85, 0x34, 0xf3, 0x22, 0xdf, 0x8f, 0x68,
+	0x98, 0x8d, 0x27, 0x09, 0x99, 0x04, 0xe1, 0x8b, 0x7d, 0x02, 0xcf, 0xc0, 0x29, 0xf1, 0xb3, 0x30,
+	0x19, 0x4d, 0x63, 0xbb, 0x0d, 0xaf, 0x00, 0x6c, 0x7e, 0xd9, 0x30, 0x89, 0x26, 0x41, 0x12, 0x8d,
+	0xa8, 0xdd, 0xf1, 0xbe, 0x2c, 0xd0, 0x5f, 0xc8, 0x15, 0xfa, 0x37, 0x8d, 0x07, 0x0f, 0xee, 0x8a,
+	0xeb, 0x0c, 0xb1, 0xf5, 0xea, 0xfd, 0x8a, 0xb8, 0x5c, 0xe6, 0x82, 0x23, 0x59, 0x71, 0x87, 0x17,
+	0x42, 0x27, 0x6c, 0x6a, 0x5c, 0x97, 0xea, 0x8f, 0x56, 0xef, 0xf5, 0xfb, 0xde, 0x3a, 0x0e, 0x09,
+	0xf9, 0x68, 0xf5, 0x42, 0x63, 0x45, 0x98, 0x42, 0x06, 0xd6, 0x68, 0xe6, 0xa2, 0xba, 0x18, 0xf5,
+	0xd9, 0xec, 0x53, 0xc2, 0x54, 0xba, 0xdf, 0xa7, 0x33, 0x37, 0xd5, 0xfb, 0xef, 0x56, 0xdf, 0x0c,
+	0x31, 0x26, 0x4c, 0x61, 0xbc, 0x67, 0x60, 0x3c, 0x73, 0x31, 0xd6, 0x9c, 0x79, 0x5b, 0x1f, 0xe6,
+	0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x97, 0x6b, 0xfe, 0x2a, 0xed, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/bidding_strategy_status.pb.go b/googleapis/ads/googleads/v3/enums/bidding_strategy_status.pb.go
new file mode 100644
index 0000000..8e0fa22
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/bidding_strategy_status.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/bidding_strategy_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of a BiddingStrategy.
+type BiddingStrategyStatusEnum_BiddingStrategyStatus int32
+
+const (
+	// No value has been specified.
+	BiddingStrategyStatusEnum_UNSPECIFIED BiddingStrategyStatusEnum_BiddingStrategyStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	BiddingStrategyStatusEnum_UNKNOWN BiddingStrategyStatusEnum_BiddingStrategyStatus = 1
+	// The bidding strategy is enabled.
+	BiddingStrategyStatusEnum_ENABLED BiddingStrategyStatusEnum_BiddingStrategyStatus = 2
+	// The bidding strategy is removed.
+	BiddingStrategyStatusEnum_REMOVED BiddingStrategyStatusEnum_BiddingStrategyStatus = 4
+)
+
+var BiddingStrategyStatusEnum_BiddingStrategyStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	4: "REMOVED",
+}
+
+var BiddingStrategyStatusEnum_BiddingStrategyStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     4,
+}
+
+func (x BiddingStrategyStatusEnum_BiddingStrategyStatus) String() string {
+	return proto.EnumName(BiddingStrategyStatusEnum_BiddingStrategyStatus_name, int32(x))
+}
+
+func (BiddingStrategyStatusEnum_BiddingStrategyStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_24139d4c475931a6, []int{0, 0}
+}
+
+// Message describing BiddingStrategy statuses.
+type BiddingStrategyStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingStrategyStatusEnum) Reset()         { *m = BiddingStrategyStatusEnum{} }
+func (m *BiddingStrategyStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyStatusEnum) ProtoMessage()    {}
+func (*BiddingStrategyStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_24139d4c475931a6, []int{0}
+}
+
+func (m *BiddingStrategyStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyStatusEnum.Unmarshal(m, b)
+}
+func (m *BiddingStrategyStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *BiddingStrategyStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyStatusEnum.Merge(m, src)
+}
+func (m *BiddingStrategyStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyStatusEnum.Size(m)
+}
+func (m *BiddingStrategyStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BiddingStrategyStatusEnum_BiddingStrategyStatus", BiddingStrategyStatusEnum_BiddingStrategyStatus_name, BiddingStrategyStatusEnum_BiddingStrategyStatus_value)
+	proto.RegisterType((*BiddingStrategyStatusEnum)(nil), "google.ads.googleads.v3.enums.BiddingStrategyStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/bidding_strategy_status.proto", fileDescriptor_24139d4c475931a6)
+}
+
+var fileDescriptor_24139d4c475931a6 = []byte{
+	// 308 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4a, 0x2b, 0x31,
+	0x14, 0x7d, 0x9d, 0x27, 0x0a, 0xe9, 0xc2, 0xa1, 0xe0, 0xc2, 0x62, 0x17, 0xed, 0x07, 0x24, 0x8b,
+	0xec, 0xd2, 0x55, 0xc6, 0xc6, 0x52, 0xd4, 0x69, 0xb1, 0x74, 0x04, 0x19, 0x28, 0xa9, 0x19, 0xc2,
+	0x40, 0x9b, 0x94, 0x26, 0x53, 0xf0, 0x77, 0x5c, 0xfa, 0x29, 0x7e, 0x8a, 0x1b, 0x7f, 0x41, 0x92,
+	0xcc, 0xcc, 0xaa, 0xba, 0x09, 0xe7, 0xe6, 0xdc, 0x73, 0xee, 0xb9, 0x17, 0x8c, 0xa5, 0xd6, 0x72,
+	0x5b, 0x20, 0x2e, 0x0c, 0x0a, 0xd0, 0xa1, 0x23, 0x46, 0x85, 0xaa, 0x76, 0x06, 0x6d, 0x4a, 0x21,
+	0x4a, 0x25, 0xd7, 0xc6, 0x1e, 0xb8, 0x2d, 0xe4, 0xdb, 0xda, 0x58, 0x6e, 0x2b, 0x03, 0xf7, 0x07,
+	0x6d, 0x75, 0x6f, 0x10, 0x14, 0x90, 0x0b, 0x03, 0x5b, 0x31, 0x3c, 0x62, 0xe8, 0xc5, 0xfd, 0x9b,
+	0xc6, 0x7b, 0x5f, 0x22, 0xae, 0x94, 0xb6, 0xdc, 0x96, 0x5a, 0xd5, 0xe2, 0xd1, 0x16, 0x5c, 0x27,
+	0xc1, 0x7d, 0x59, 0x9b, 0x2f, 0xbd, 0x37, 0x53, 0xd5, 0x6e, 0x34, 0x07, 0x57, 0x27, 0xc9, 0xde,
+	0x25, 0xe8, 0xae, 0xd2, 0xe5, 0x82, 0xdd, 0xce, 0xee, 0x66, 0x6c, 0x12, 0xff, 0xeb, 0x75, 0xc1,
+	0xc5, 0x2a, 0xbd, 0x4f, 0xe7, 0xcf, 0x69, 0xdc, 0x71, 0x05, 0x4b, 0x69, 0xf2, 0xc0, 0x26, 0x71,
+	0xe4, 0x8a, 0x27, 0xf6, 0x38, 0xcf, 0xd8, 0x24, 0x3e, 0x4b, 0xbe, 0x3b, 0x60, 0xf8, 0xaa, 0x77,
+	0xf0, 0xcf, 0xc4, 0x49, 0xff, 0xe4, 0xd0, 0x85, 0xcb, 0xbb, 0xe8, 0xbc, 0x24, 0xb5, 0x58, 0xea,
+	0x2d, 0x57, 0x12, 0xea, 0x83, 0x44, 0xb2, 0x50, 0x7e, 0x9b, 0xe6, 0x76, 0xfb, 0xd2, 0xfc, 0x72,
+	0xca, 0xb1, 0x7f, 0xdf, 0xa3, 0xff, 0x53, 0x4a, 0x3f, 0xa2, 0xc1, 0x34, 0x58, 0x51, 0x61, 0x60,
+	0x80, 0x0e, 0x65, 0x18, 0xba, 0xed, 0xcd, 0x67, 0xc3, 0xe7, 0x54, 0x98, 0xbc, 0xe5, 0xf3, 0x0c,
+	0xe7, 0x9e, 0xff, 0x8a, 0x86, 0xe1, 0x93, 0x10, 0x2a, 0x0c, 0x21, 0x6d, 0x07, 0x21, 0x19, 0x26,
+	0xc4, 0xf7, 0x6c, 0xce, 0x7d, 0x30, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x44, 0x5f, 0x08, 0x27,
+	0xe2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/bidding_strategy_type.pb.go b/googleapis/ads/googleads/v3/enums/bidding_strategy_type.pb.go
new file mode 100644
index 0000000..65bf9e0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/bidding_strategy_type.pb.go
@@ -0,0 +1,207 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/bidding_strategy_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible bidding strategy types.
+type BiddingStrategyTypeEnum_BiddingStrategyType int32
+
+const (
+	// Not specified.
+	BiddingStrategyTypeEnum_UNSPECIFIED BiddingStrategyTypeEnum_BiddingStrategyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	BiddingStrategyTypeEnum_UNKNOWN BiddingStrategyTypeEnum_BiddingStrategyType = 1
+	// Commission is an automatic bidding strategy in which the advertiser pays
+	// a certain portion of the conversion value.
+	BiddingStrategyTypeEnum_COMMISSION BiddingStrategyTypeEnum_BiddingStrategyType = 16
+	// Enhanced CPC is a bidding strategy that raises bids for clicks
+	// that seem more likely to lead to a conversion and lowers
+	// them for clicks where they seem less likely.
+	BiddingStrategyTypeEnum_ENHANCED_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 2
+	// Manual click based bidding where user pays per click.
+	BiddingStrategyTypeEnum_MANUAL_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 3
+	// Manual impression based bidding
+	// where user pays per thousand impressions.
+	BiddingStrategyTypeEnum_MANUAL_CPM BiddingStrategyTypeEnum_BiddingStrategyType = 4
+	// A bidding strategy that pays a configurable amount per video view.
+	BiddingStrategyTypeEnum_MANUAL_CPV BiddingStrategyTypeEnum_BiddingStrategyType = 13
+	// A bidding strategy that automatically maximizes number of conversions
+	// given a daily budget.
+	BiddingStrategyTypeEnum_MAXIMIZE_CONVERSIONS BiddingStrategyTypeEnum_BiddingStrategyType = 10
+	// An automated bidding strategy that automatically sets bids to maximize
+	// revenue while spending your budget.
+	BiddingStrategyTypeEnum_MAXIMIZE_CONVERSION_VALUE BiddingStrategyTypeEnum_BiddingStrategyType = 11
+	// Page-One Promoted bidding scheme, which sets max cpc bids to
+	// target impressions on page one or page one promoted slots on google.com.
+	// This enum value is deprecated.
+	BiddingStrategyTypeEnum_PAGE_ONE_PROMOTED BiddingStrategyTypeEnum_BiddingStrategyType = 5
+	// Percent Cpc is bidding strategy where bids are a fraction of the
+	// advertised price for some good or service.
+	BiddingStrategyTypeEnum_PERCENT_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 12
+	// Target CPA is an automated bid strategy that sets bids
+	// to help get as many conversions as possible
+	// at the target cost-per-acquisition (CPA) you set.
+	BiddingStrategyTypeEnum_TARGET_CPA BiddingStrategyTypeEnum_BiddingStrategyType = 6
+	// Target CPM is an automated bid strategy that sets bids to help get
+	// as many impressions as possible at the target cost per one thousand
+	// impressions (CPM) you set.
+	BiddingStrategyTypeEnum_TARGET_CPM BiddingStrategyTypeEnum_BiddingStrategyType = 14
+	// An automated bidding strategy that sets bids so that a certain percentage
+	// of search ads are shown at the top of the first page (or other targeted
+	// location).
+	BiddingStrategyTypeEnum_TARGET_IMPRESSION_SHARE BiddingStrategyTypeEnum_BiddingStrategyType = 15
+	// Target Outrank Share is an automated bidding strategy that sets bids
+	// based on the target fraction of auctions where the advertiser
+	// should outrank a specific competitor.
+	// This enum value is deprecated.
+	BiddingStrategyTypeEnum_TARGET_OUTRANK_SHARE BiddingStrategyTypeEnum_BiddingStrategyType = 7
+	// Target ROAS is an automated bidding strategy
+	// that helps you maximize revenue while averaging
+	// a specific target Return On Average Spend (ROAS).
+	BiddingStrategyTypeEnum_TARGET_ROAS BiddingStrategyTypeEnum_BiddingStrategyType = 8
+	// Target Spend is an automated bid strategy that sets your bids
+	// to help get as many clicks as possible within your budget.
+	BiddingStrategyTypeEnum_TARGET_SPEND BiddingStrategyTypeEnum_BiddingStrategyType = 9
+)
+
+var BiddingStrategyTypeEnum_BiddingStrategyType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	16: "COMMISSION",
+	2:  "ENHANCED_CPC",
+	3:  "MANUAL_CPC",
+	4:  "MANUAL_CPM",
+	13: "MANUAL_CPV",
+	10: "MAXIMIZE_CONVERSIONS",
+	11: "MAXIMIZE_CONVERSION_VALUE",
+	5:  "PAGE_ONE_PROMOTED",
+	12: "PERCENT_CPC",
+	6:  "TARGET_CPA",
+	14: "TARGET_CPM",
+	15: "TARGET_IMPRESSION_SHARE",
+	7:  "TARGET_OUTRANK_SHARE",
+	8:  "TARGET_ROAS",
+	9:  "TARGET_SPEND",
+}
+
+var BiddingStrategyTypeEnum_BiddingStrategyType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"COMMISSION":                16,
+	"ENHANCED_CPC":              2,
+	"MANUAL_CPC":                3,
+	"MANUAL_CPM":                4,
+	"MANUAL_CPV":                13,
+	"MAXIMIZE_CONVERSIONS":      10,
+	"MAXIMIZE_CONVERSION_VALUE": 11,
+	"PAGE_ONE_PROMOTED":         5,
+	"PERCENT_CPC":               12,
+	"TARGET_CPA":                6,
+	"TARGET_CPM":                14,
+	"TARGET_IMPRESSION_SHARE":   15,
+	"TARGET_OUTRANK_SHARE":      7,
+	"TARGET_ROAS":               8,
+	"TARGET_SPEND":              9,
+}
+
+func (x BiddingStrategyTypeEnum_BiddingStrategyType) String() string {
+	return proto.EnumName(BiddingStrategyTypeEnum_BiddingStrategyType_name, int32(x))
+}
+
+func (BiddingStrategyTypeEnum_BiddingStrategyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a3fd4c3a5138f25d, []int{0, 0}
+}
+
+// Container for enum describing possible bidding strategy types.
+type BiddingStrategyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingStrategyTypeEnum) Reset()         { *m = BiddingStrategyTypeEnum{} }
+func (m *BiddingStrategyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyTypeEnum) ProtoMessage()    {}
+func (*BiddingStrategyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a3fd4c3a5138f25d, []int{0}
+}
+
+func (m *BiddingStrategyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Unmarshal(m, b)
+}
+func (m *BiddingStrategyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *BiddingStrategyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyTypeEnum.Merge(m, src)
+}
+func (m *BiddingStrategyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Size(m)
+}
+func (m *BiddingStrategyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BiddingStrategyTypeEnum_BiddingStrategyType", BiddingStrategyTypeEnum_BiddingStrategyType_name, BiddingStrategyTypeEnum_BiddingStrategyType_value)
+	proto.RegisterType((*BiddingStrategyTypeEnum)(nil), "google.ads.googleads.v3.enums.BiddingStrategyTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/bidding_strategy_type.proto", fileDescriptor_a3fd4c3a5138f25d)
+}
+
+var fileDescriptor_a3fd4c3a5138f25d = []byte{
+	// 466 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x6e, 0xd3, 0x40,
+	0x10, 0xc7, 0xa9, 0x0b, 0x2d, 0x6c, 0x4a, 0xbb, 0x18, 0x50, 0xcb, 0x47, 0x0e, 0xed, 0x03, 0xac,
+	0x0f, 0x3e, 0x61, 0x4e, 0x1b, 0x67, 0x49, 0xad, 0x76, 0x3f, 0xe4, 0x2f, 0x50, 0x15, 0xc9, 0x72,
+	0xb1, 0x65, 0x59, 0x6a, 0xbc, 0x56, 0xd6, 0xad, 0x94, 0xd7, 0xe1, 0xc8, 0xa3, 0xf0, 0x14, 0x9c,
+	0x91, 0x78, 0x03, 0x0e, 0x68, 0xd7, 0x4e, 0xa4, 0x48, 0x81, 0x8b, 0x35, 0xff, 0xfd, 0xcd, 0xfc,
+	0x77, 0xbc, 0x33, 0xe0, 0x43, 0x25, 0x65, 0x75, 0x57, 0x3a, 0x79, 0xa1, 0x9c, 0x3e, 0xd4, 0xd1,
+	0x83, 0xeb, 0x94, 0xcd, 0xfd, 0x42, 0x39, 0xb7, 0x75, 0x51, 0xd4, 0x4d, 0x95, 0xa9, 0x6e, 0x99,
+	0x77, 0x65, 0xb5, 0xca, 0xba, 0x55, 0x5b, 0xa2, 0x76, 0x29, 0x3b, 0x69, 0x8f, 0xfb, 0x7c, 0x94,
+	0x17, 0x0a, 0x6d, 0x4a, 0xd1, 0x83, 0x8b, 0x4c, 0xe9, 0xdb, 0xf7, 0x6b, 0xe7, 0xb6, 0x76, 0xf2,
+	0xa6, 0x91, 0x5d, 0xde, 0xd5, 0xb2, 0x51, 0x7d, 0xf1, 0xc5, 0x1f, 0x0b, 0x9c, 0x4e, 0x7a, 0xf3,
+	0x68, 0xf0, 0x8e, 0x57, 0x6d, 0x49, 0x9a, 0xfb, 0xc5, 0xc5, 0x4f, 0x0b, 0xbc, 0xdc, 0xc1, 0xec,
+	0x13, 0x30, 0x4a, 0x58, 0x24, 0x88, 0x1f, 0x7c, 0x0a, 0xc8, 0x14, 0x3e, 0xb2, 0x47, 0xe0, 0x30,
+	0x61, 0x57, 0x8c, 0x7f, 0x66, 0x70, 0xcf, 0x3e, 0x06, 0xc0, 0xe7, 0x94, 0x06, 0x51, 0x14, 0x70,
+	0x06, 0xa1, 0x0d, 0xc1, 0x11, 0x61, 0x97, 0x98, 0xf9, 0x64, 0x9a, 0xf9, 0xc2, 0x87, 0x96, 0xce,
+	0xa0, 0x98, 0x25, 0xf8, 0xda, 0xe8, 0xfd, 0x2d, 0x4d, 0xe1, 0xe3, 0x2d, 0x9d, 0xc2, 0xe7, 0xf6,
+	0x19, 0x78, 0x45, 0xf1, 0x97, 0x80, 0x06, 0x37, 0x24, 0xf3, 0x39, 0x4b, 0x49, 0xa8, 0xad, 0x23,
+	0x08, 0xec, 0x31, 0x78, 0xb3, 0x83, 0x64, 0x29, 0xbe, 0x4e, 0x08, 0x1c, 0xd9, 0xaf, 0xc1, 0x0b,
+	0x81, 0x67, 0x24, 0xe3, 0x8c, 0x64, 0x22, 0xe4, 0x94, 0xc7, 0x64, 0x0a, 0x9f, 0xe8, 0xfe, 0x05,
+	0x09, 0x7d, 0xc2, 0x62, 0xd3, 0xc0, 0x91, 0xbe, 0x30, 0xc6, 0xe1, 0x8c, 0x68, 0x8d, 0xe1, 0xc1,
+	0x96, 0xa6, 0xf0, 0xd8, 0x7e, 0x07, 0x4e, 0x07, 0x1d, 0x50, 0x11, 0x12, 0xf3, 0x67, 0x59, 0x74,
+	0x89, 0x43, 0x02, 0x4f, 0x74, 0x77, 0x03, 0xe4, 0x49, 0x1c, 0x62, 0x76, 0x35, 0x90, 0x43, 0x7d,
+	0xcf, 0x40, 0x42, 0x8e, 0x23, 0xf8, 0x54, 0x3f, 0xc5, 0x70, 0x10, 0x09, 0xc2, 0xa6, 0xf0, 0xd9,
+	0xe4, 0xf7, 0x1e, 0x38, 0xff, 0x2a, 0x17, 0xe8, 0xbf, 0x23, 0x9c, 0x9c, 0xed, 0x98, 0x82, 0xd0,
+	0xe3, 0x13, 0x7b, 0x37, 0x93, 0xa1, 0xb4, 0x92, 0x77, 0x79, 0x53, 0x21, 0xb9, 0xac, 0x9c, 0xaa,
+	0x6c, 0xcc, 0x70, 0xd7, 0x8b, 0xd4, 0xd6, 0xea, 0x1f, 0x7b, 0xf5, 0xd1, 0x7c, 0xbf, 0x59, 0xfb,
+	0x33, 0x8c, 0xbf, 0x5b, 0xe3, 0x59, 0x6f, 0x85, 0x0b, 0x85, 0xfa, 0x50, 0x47, 0xa9, 0x8b, 0xf4,
+	0x36, 0xa8, 0x1f, 0x6b, 0x3e, 0xc7, 0x85, 0x9a, 0x6f, 0xf8, 0x3c, 0x75, 0xe7, 0x86, 0xff, 0xb2,
+	0xce, 0xfb, 0x43, 0xcf, 0xc3, 0x85, 0xf2, 0xbc, 0x4d, 0x86, 0xe7, 0xa5, 0xae, 0xe7, 0x99, 0x9c,
+	0xdb, 0x03, 0xd3, 0x98, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0x6a, 0xb0, 0x0b, 0xa0, 0xef, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/billing_setup_status.pb.go b/googleapis/ads/googleads/v3/enums/billing_setup_status.pb.go
new file mode 100644
index 0000000..2fcb951
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/billing_setup_status.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/billing_setup_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of a BillingSetup.
+type BillingSetupStatusEnum_BillingSetupStatus int32
+
+const (
+	// Not specified.
+	BillingSetupStatusEnum_UNSPECIFIED BillingSetupStatusEnum_BillingSetupStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	BillingSetupStatusEnum_UNKNOWN BillingSetupStatusEnum_BillingSetupStatus = 1
+	// The billing setup is pending approval.
+	BillingSetupStatusEnum_PENDING BillingSetupStatusEnum_BillingSetupStatus = 2
+	// The billing setup has been approved but the corresponding first budget
+	// has not.  This can only occur for billing setups configured for monthly
+	// invoicing.
+	BillingSetupStatusEnum_APPROVED_HELD BillingSetupStatusEnum_BillingSetupStatus = 3
+	// The billing setup has been approved.
+	BillingSetupStatusEnum_APPROVED BillingSetupStatusEnum_BillingSetupStatus = 4
+	// The billing setup was cancelled by the user prior to approval.
+	BillingSetupStatusEnum_CANCELLED BillingSetupStatusEnum_BillingSetupStatus = 5
+)
+
+var BillingSetupStatusEnum_BillingSetupStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED_HELD",
+	4: "APPROVED",
+	5: "CANCELLED",
+}
+
+var BillingSetupStatusEnum_BillingSetupStatus_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"PENDING":       2,
+	"APPROVED_HELD": 3,
+	"APPROVED":      4,
+	"CANCELLED":     5,
+}
+
+func (x BillingSetupStatusEnum_BillingSetupStatus) String() string {
+	return proto.EnumName(BillingSetupStatusEnum_BillingSetupStatus_name, int32(x))
+}
+
+func (BillingSetupStatusEnum_BillingSetupStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0274de631061209b, []int{0, 0}
+}
+
+// Message describing BillingSetup statuses.
+type BillingSetupStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BillingSetupStatusEnum) Reset()         { *m = BillingSetupStatusEnum{} }
+func (m *BillingSetupStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupStatusEnum) ProtoMessage()    {}
+func (*BillingSetupStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0274de631061209b, []int{0}
+}
+
+func (m *BillingSetupStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupStatusEnum.Unmarshal(m, b)
+}
+func (m *BillingSetupStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *BillingSetupStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupStatusEnum.Merge(m, src)
+}
+func (m *BillingSetupStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupStatusEnum.Size(m)
+}
+func (m *BillingSetupStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BillingSetupStatusEnum_BillingSetupStatus", BillingSetupStatusEnum_BillingSetupStatus_name, BillingSetupStatusEnum_BillingSetupStatus_value)
+	proto.RegisterType((*BillingSetupStatusEnum)(nil), "google.ads.googleads.v3.enums.BillingSetupStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/billing_setup_status.proto", fileDescriptor_0274de631061209b)
+}
+
+var fileDescriptor_0274de631061209b = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdd, 0x4a, 0xc3, 0x30,
+	0x18, 0xb5, 0x9d, 0xbf, 0x99, 0xc3, 0x9a, 0x0b, 0x05, 0x71, 0x17, 0xdb, 0x03, 0xa4, 0x17, 0xbd,
+	0x91, 0x78, 0x95, 0xae, 0x71, 0x0e, 0x47, 0x56, 0x1c, 0xab, 0x20, 0x85, 0xd1, 0xd9, 0x12, 0x0a,
+	0x5d, 0x52, 0x96, 0x76, 0xef, 0xe0, 0x6b, 0x78, 0xe9, 0xa3, 0xf8, 0x28, 0xe2, 0x43, 0x48, 0xd3,
+	0xb5, 0x37, 0x43, 0x6f, 0xc2, 0xc9, 0x77, 0xbe, 0x73, 0xf8, 0xce, 0x01, 0x77, 0x5c, 0x4a, 0x9e,
+	0x25, 0x76, 0x14, 0x2b, 0xbb, 0x86, 0x15, 0xda, 0x3a, 0x76, 0x22, 0xca, 0xb5, 0xb2, 0x57, 0x69,
+	0x96, 0xa5, 0x82, 0x2f, 0x55, 0x52, 0x94, 0xf9, 0x52, 0x15, 0x51, 0x51, 0x2a, 0x94, 0x6f, 0x64,
+	0x21, 0x61, 0xbf, 0x5e, 0x47, 0x51, 0xac, 0x50, 0xab, 0x44, 0x5b, 0x07, 0x69, 0xe5, 0xcd, 0x6d,
+	0x63, 0x9c, 0xa7, 0x76, 0x24, 0x84, 0x2c, 0xa2, 0x22, 0x95, 0x62, 0x27, 0x1e, 0xbe, 0x1b, 0xe0,
+	0xca, 0xad, 0xbd, 0xe7, 0x95, 0xf5, 0x5c, 0x3b, 0x53, 0x51, 0xae, 0x87, 0x12, 0xc0, 0x7d, 0x06,
+	0x5e, 0x80, 0xee, 0x82, 0xcd, 0x7d, 0x3a, 0x9a, 0x3c, 0x4c, 0xa8, 0x67, 0x1d, 0xc0, 0x2e, 0x38,
+	0x59, 0xb0, 0x27, 0x36, 0x7b, 0x61, 0x96, 0x51, 0x7d, 0x7c, 0xca, 0xbc, 0x09, 0x1b, 0x5b, 0x26,
+	0xbc, 0x04, 0x3d, 0xe2, 0xfb, 0xcf, 0xb3, 0x80, 0x7a, 0xcb, 0x47, 0x3a, 0xf5, 0xac, 0x0e, 0x3c,
+	0x07, 0xa7, 0xcd, 0xc8, 0x3a, 0x84, 0x3d, 0x70, 0x36, 0x22, 0x6c, 0x44, 0xa7, 0x53, 0xea, 0x59,
+	0x47, 0xee, 0x8f, 0x01, 0x06, 0x6f, 0x72, 0x8d, 0xfe, 0xcd, 0xe3, 0x5e, 0xef, 0x1f, 0xe5, 0x57,
+	0x51, 0x7c, 0xe3, 0xd5, 0xdd, 0x29, 0xb9, 0xcc, 0x22, 0xc1, 0x91, 0xdc, 0x70, 0x9b, 0x27, 0x42,
+	0x07, 0x6d, 0x3a, 0xcd, 0x53, 0xf5, 0x47, 0xc5, 0xf7, 0xfa, 0xfd, 0x30, 0x3b, 0x63, 0x42, 0x3e,
+	0xcd, 0xfe, 0xb8, 0xb6, 0x22, 0xb1, 0x42, 0x35, 0xac, 0x50, 0xe0, 0xa0, 0xaa, 0x1a, 0xf5, 0xd5,
+	0xf0, 0x21, 0x89, 0x55, 0xd8, 0xf2, 0x61, 0xe0, 0x84, 0x9a, 0xff, 0x36, 0x07, 0xf5, 0x10, 0x63,
+	0x12, 0x2b, 0x8c, 0xdb, 0x0d, 0x8c, 0x03, 0x07, 0x63, 0xbd, 0xb3, 0x3a, 0xd6, 0x87, 0x39, 0xbf,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x5e, 0x25, 0x32, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/brand_safety_suitability.pb.go b/googleapis/ads/googleads/v3/enums/brand_safety_suitability.pb.go
new file mode 100644
index 0000000..a2d0edc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/brand_safety_suitability.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/brand_safety_suitability.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// 3-Tier brand safety suitability control.
+type BrandSafetySuitabilityEnum_BrandSafetySuitability int32
+
+const (
+	// Not specified.
+	BrandSafetySuitabilityEnum_UNSPECIFIED BrandSafetySuitabilityEnum_BrandSafetySuitability = 0
+	// Used for return value only. Represents value unknown in this version.
+	BrandSafetySuitabilityEnum_UNKNOWN BrandSafetySuitabilityEnum_BrandSafetySuitability = 1
+	// This option lets you show ads across all inventory on YouTube and video
+	// partners that meet our standards for monetization. This option may be an
+	// appropriate choice for brands that want maximum access to the full
+	// breadth of videos eligible for ads, including, for example, videos that
+	// have strong profanity in the context of comedy or a documentary, or
+	// excessive violence as featured in video games.
+	BrandSafetySuitabilityEnum_EXPANDED_INVENTORY BrandSafetySuitabilityEnum_BrandSafetySuitability = 2
+	// This option lets you show ads across a wide range of content that's
+	// appropriate for most brands, such as popular music videos, documentaries,
+	// and movie trailers. The content you can show ads on is based on YouTube's
+	// advertiser-friendly content guidelines that take into account, for
+	// example, the strength or frequency of profanity, or the appropriateness
+	// of subject matter like sensitive events. Ads won't show, for example, on
+	// content with repeated strong profanity, strong sexual content, or graphic
+	// violence.
+	BrandSafetySuitabilityEnum_STANDARD_INVENTORY BrandSafetySuitabilityEnum_BrandSafetySuitability = 3
+	// This option lets you show ads on a reduced range of content that's
+	// appropriate for brands with particularly strict guidelines around
+	// inappropriate language and sexual suggestiveness; above and beyond what
+	// YouTube's advertiser-friendly content guidelines address. The videos
+	// accessible in this sensitive category meet heightened requirements,
+	// especially for inappropriate language and sexual suggestiveness. For
+	// example, your ads will be excluded from showing on some of YouTube's most
+	// popular music videos and other pop culture content across YouTube and
+	// Google video partners.
+	BrandSafetySuitabilityEnum_LIMITED_INVENTORY BrandSafetySuitabilityEnum_BrandSafetySuitability = 4
+)
+
+var BrandSafetySuitabilityEnum_BrandSafetySuitability_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EXPANDED_INVENTORY",
+	3: "STANDARD_INVENTORY",
+	4: "LIMITED_INVENTORY",
+}
+
+var BrandSafetySuitabilityEnum_BrandSafetySuitability_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"EXPANDED_INVENTORY": 2,
+	"STANDARD_INVENTORY": 3,
+	"LIMITED_INVENTORY":  4,
+}
+
+func (x BrandSafetySuitabilityEnum_BrandSafetySuitability) String() string {
+	return proto.EnumName(BrandSafetySuitabilityEnum_BrandSafetySuitability_name, int32(x))
+}
+
+func (BrandSafetySuitabilityEnum_BrandSafetySuitability) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_86b8ec423673ab58, []int{0, 0}
+}
+
+// Container for enum with 3-Tier brand safety suitability control.
+type BrandSafetySuitabilityEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BrandSafetySuitabilityEnum) Reset()         { *m = BrandSafetySuitabilityEnum{} }
+func (m *BrandSafetySuitabilityEnum) String() string { return proto.CompactTextString(m) }
+func (*BrandSafetySuitabilityEnum) ProtoMessage()    {}
+func (*BrandSafetySuitabilityEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86b8ec423673ab58, []int{0}
+}
+
+func (m *BrandSafetySuitabilityEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BrandSafetySuitabilityEnum.Unmarshal(m, b)
+}
+func (m *BrandSafetySuitabilityEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BrandSafetySuitabilityEnum.Marshal(b, m, deterministic)
+}
+func (m *BrandSafetySuitabilityEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BrandSafetySuitabilityEnum.Merge(m, src)
+}
+func (m *BrandSafetySuitabilityEnum) XXX_Size() int {
+	return xxx_messageInfo_BrandSafetySuitabilityEnum.Size(m)
+}
+func (m *BrandSafetySuitabilityEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BrandSafetySuitabilityEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BrandSafetySuitabilityEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BrandSafetySuitabilityEnum_BrandSafetySuitability", BrandSafetySuitabilityEnum_BrandSafetySuitability_name, BrandSafetySuitabilityEnum_BrandSafetySuitability_value)
+	proto.RegisterType((*BrandSafetySuitabilityEnum)(nil), "google.ads.googleads.v3.enums.BrandSafetySuitabilityEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/brand_safety_suitability.proto", fileDescriptor_86b8ec423673ab58)
+}
+
+var fileDescriptor_86b8ec423673ab58 = []byte{
+	// 337 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4e, 0xc2, 0x30,
+	0x1c, 0x76, 0xc3, 0x68, 0x52, 0x0e, 0xe2, 0x12, 0x39, 0xa0, 0x1c, 0xe0, 0x01, 0xba, 0xc3, 0x6e,
+	0xd5, 0x4b, 0xe7, 0x26, 0x59, 0xd4, 0xb2, 0x30, 0x98, 0x7f, 0xb2, 0x84, 0x14, 0x37, 0x97, 0x25,
+	0xd0, 0x12, 0x3a, 0x48, 0x38, 0xf8, 0x24, 0xde, 0x3c, 0xfa, 0x28, 0x3e, 0x8a, 0x27, 0x1f, 0xc1,
+	0xb4, 0x95, 0xa9, 0x09, 0x7a, 0x69, 0xbe, 0xfc, 0xbe, 0x3f, 0xe9, 0xf7, 0x81, 0xb3, 0x9c, 0xf3,
+	0x7c, 0x9a, 0xd9, 0x34, 0x15, 0xb6, 0x86, 0x12, 0xad, 0x1c, 0x3b, 0x63, 0xcb, 0x99, 0xb0, 0x27,
+	0x0b, 0xca, 0xd2, 0xb1, 0xa0, 0x8f, 0x59, 0xb9, 0x1e, 0x8b, 0x65, 0x51, 0xd2, 0x49, 0x31, 0x2d,
+	0xca, 0x35, 0x9c, 0x2f, 0x78, 0xc9, 0xad, 0xb6, 0xb6, 0x40, 0x9a, 0x0a, 0x58, 0xb9, 0xe1, 0xca,
+	0x81, 0xca, 0xdd, 0x3a, 0xd9, 0x84, 0xcf, 0x0b, 0x9b, 0x32, 0xc6, 0x4b, 0x5a, 0x16, 0x9c, 0x09,
+	0x6d, 0xee, 0x3e, 0x1b, 0xa0, 0xe5, 0xca, 0xfc, 0x48, 0xc5, 0x47, 0xdf, 0xe9, 0x3e, 0x5b, 0xce,
+	0xba, 0x4f, 0xa0, 0xb9, 0x9d, 0xb5, 0x0e, 0x40, 0x7d, 0x44, 0xa2, 0xd0, 0x3f, 0x0f, 0x2e, 0x02,
+	0xdf, 0x6b, 0xec, 0x58, 0x75, 0xb0, 0x3f, 0x22, 0x97, 0xa4, 0x7f, 0x43, 0x1a, 0x86, 0xd5, 0x04,
+	0x96, 0x7f, 0x1b, 0x62, 0xe2, 0xf9, 0xde, 0x38, 0x20, 0xb1, 0x4f, 0x86, 0xfd, 0xc1, 0x5d, 0xc3,
+	0x94, 0xf7, 0x68, 0x88, 0x89, 0x87, 0x07, 0x3f, 0xef, 0x35, 0xeb, 0x08, 0x1c, 0x5e, 0x05, 0xd7,
+	0xc1, 0xf0, 0x97, 0x7c, 0xd7, 0xfd, 0x30, 0x40, 0xe7, 0x81, 0xcf, 0xe0, 0xbf, 0x0d, 0xdd, 0xe3,
+	0xed, 0x5f, 0x0c, 0x65, 0xc1, 0xd0, 0xb8, 0x77, 0xbf, 0xdc, 0x39, 0x9f, 0x52, 0x96, 0x43, 0xbe,
+	0xc8, 0xed, 0x3c, 0x63, 0xaa, 0xfe, 0x66, 0xed, 0x79, 0x21, 0xfe, 0x18, 0xff, 0x54, 0xbd, 0x2f,
+	0x66, 0xad, 0x87, 0xf1, 0xab, 0xd9, 0xee, 0xe9, 0x28, 0x9c, 0x0a, 0xa8, 0xa1, 0x44, 0xb1, 0x03,
+	0xe5, 0x58, 0xe2, 0x6d, 0xc3, 0x27, 0x38, 0x15, 0x49, 0xc5, 0x27, 0xb1, 0x93, 0x28, 0xfe, 0xdd,
+	0xec, 0xe8, 0x23, 0x42, 0x38, 0x15, 0x08, 0x55, 0x0a, 0x84, 0x62, 0x07, 0x21, 0xa5, 0x99, 0xec,
+	0xa9, 0x8f, 0x39, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x8d, 0x6d, 0x8c, 0x14, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/budget_delivery_method.pb.go b/googleapis/ads/googleads/v3/enums/budget_delivery_method.pb.go
new file mode 100644
index 0000000..c92b1a5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/budget_delivery_method.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/budget_delivery_method.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible delivery methods of a Budget.
+type BudgetDeliveryMethodEnum_BudgetDeliveryMethod int32
+
+const (
+	// Not specified.
+	BudgetDeliveryMethodEnum_UNSPECIFIED BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetDeliveryMethodEnum_UNKNOWN BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 1
+	// The budget server will throttle serving evenly across
+	// the entire time period.
+	BudgetDeliveryMethodEnum_STANDARD BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 2
+	// The budget server will not throttle serving,
+	// and ads will serve as fast as possible.
+	BudgetDeliveryMethodEnum_ACCELERATED BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 3
+)
+
+var BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STANDARD",
+	3: "ACCELERATED",
+}
+
+var BudgetDeliveryMethodEnum_BudgetDeliveryMethod_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"STANDARD":    2,
+	"ACCELERATED": 3,
+}
+
+func (x BudgetDeliveryMethodEnum_BudgetDeliveryMethod) String() string {
+	return proto.EnumName(BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name, int32(x))
+}
+
+func (BudgetDeliveryMethodEnum_BudgetDeliveryMethod) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_addd9b866c9590d5, []int{0, 0}
+}
+
+// Message describing Budget delivery methods. A delivery method determines the
+// rate at which the Budget is spent.
+type BudgetDeliveryMethodEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetDeliveryMethodEnum) Reset()         { *m = BudgetDeliveryMethodEnum{} }
+func (m *BudgetDeliveryMethodEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetDeliveryMethodEnum) ProtoMessage()    {}
+func (*BudgetDeliveryMethodEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_addd9b866c9590d5, []int{0}
+}
+
+func (m *BudgetDeliveryMethodEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Unmarshal(m, b)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Marshal(b, m, deterministic)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetDeliveryMethodEnum.Merge(m, src)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Size(m)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetDeliveryMethodEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetDeliveryMethodEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod", BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name, BudgetDeliveryMethodEnum_BudgetDeliveryMethod_value)
+	proto.RegisterType((*BudgetDeliveryMethodEnum)(nil), "google.ads.googleads.v3.enums.BudgetDeliveryMethodEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/budget_delivery_method.proto", fileDescriptor_addd9b866c9590d5)
+}
+
+var fileDescriptor_addd9b866c9590d5 = []byte{
+	// 311 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcd, 0x4a, 0xc3, 0x30,
+	0x00, 0x76, 0x1d, 0xa8, 0x64, 0x82, 0xa5, 0x78, 0x50, 0x71, 0x87, 0xed, 0x01, 0x92, 0x43, 0x6e,
+	0xf1, 0x94, 0xae, 0x71, 0x0c, 0xb5, 0x8e, 0xfd, 0x09, 0x52, 0x18, 0x9d, 0x09, 0xb1, 0xb0, 0x26,
+	0x63, 0xe9, 0x0a, 0xbe, 0x8e, 0x47, 0x1f, 0xc5, 0x47, 0xf1, 0xe0, 0x33, 0x48, 0x93, 0xb5, 0xa7,
+	0xe9, 0x25, 0x7c, 0xe4, 0xfb, 0xc9, 0x97, 0x0f, 0x10, 0xa9, 0xb5, 0x5c, 0x0b, 0x94, 0x72, 0x83,
+	0x1c, 0xac, 0x50, 0x89, 0x91, 0x50, 0xbb, 0xdc, 0xa0, 0xd5, 0x8e, 0x4b, 0x51, 0x2c, 0xb9, 0x58,
+	0x67, 0xa5, 0xd8, 0xbe, 0x2f, 0x73, 0x51, 0xbc, 0x69, 0x0e, 0x37, 0x5b, 0x5d, 0xe8, 0xa0, 0xeb,
+	0x0c, 0x30, 0xe5, 0x06, 0x36, 0x5e, 0x58, 0x62, 0x68, 0xbd, 0xd7, 0x37, 0x75, 0xf4, 0x26, 0x43,
+	0xa9, 0x52, 0xba, 0x48, 0x8b, 0x4c, 0x2b, 0xe3, 0xcc, 0x7d, 0x0d, 0x2e, 0x43, 0x1b, 0x1e, 0xed,
+	0xb3, 0x1f, 0x6d, 0x34, 0x53, 0xbb, 0xbc, 0x3f, 0x05, 0x17, 0x87, 0xb8, 0xe0, 0x1c, 0x74, 0xe6,
+	0xf1, 0x74, 0xcc, 0x06, 0xa3, 0xbb, 0x11, 0x8b, 0xfc, 0xa3, 0xa0, 0x03, 0x4e, 0xe6, 0xf1, 0x7d,
+	0xfc, 0xf4, 0x1c, 0xfb, 0xad, 0xe0, 0x0c, 0x9c, 0x4e, 0x67, 0x34, 0x8e, 0xe8, 0x24, 0xf2, 0xbd,
+	0x4a, 0x4b, 0x07, 0x03, 0xf6, 0xc0, 0x26, 0x74, 0xc6, 0x22, 0xbf, 0x1d, 0xfe, 0xb4, 0x40, 0xef,
+	0x55, 0xe7, 0xf0, 0xdf, 0xd2, 0xe1, 0xd5, 0xa1, 0x87, 0xc7, 0x55, 0xe3, 0x71, 0xeb, 0x25, 0xdc,
+	0x7b, 0xa5, 0x5e, 0xa7, 0x4a, 0x42, 0xbd, 0x95, 0x48, 0x0a, 0x65, 0xff, 0x53, 0x8f, 0xb7, 0xc9,
+	0xcc, 0x1f, 0x5b, 0xde, 0xda, 0xf3, 0xc3, 0x6b, 0x0f, 0x29, 0xfd, 0xf4, 0xba, 0x43, 0x17, 0x45,
+	0xb9, 0x81, 0x0e, 0x56, 0x68, 0x81, 0x61, 0x35, 0x80, 0xf9, 0xaa, 0xf9, 0x84, 0x72, 0x93, 0x34,
+	0x7c, 0xb2, 0xc0, 0x89, 0xe5, 0xbf, 0xbd, 0x9e, 0xbb, 0x24, 0x84, 0x72, 0x43, 0x48, 0xa3, 0x20,
+	0x64, 0x81, 0x09, 0xb1, 0x9a, 0xd5, 0xb1, 0x2d, 0x86, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdb,
+	0xc1, 0xca, 0xdd, 0xe3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/budget_period.pb.go b/googleapis/ads/googleads/v3/enums/budget_period.pb.go
new file mode 100644
index 0000000..9cc0aef
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/budget_period.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/budget_period.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible period of a Budget.
+type BudgetPeriodEnum_BudgetPeriod int32
+
+const (
+	// Not specified.
+	BudgetPeriodEnum_UNSPECIFIED BudgetPeriodEnum_BudgetPeriod = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetPeriodEnum_UNKNOWN BudgetPeriodEnum_BudgetPeriod = 1
+	// Daily budget.
+	BudgetPeriodEnum_DAILY BudgetPeriodEnum_BudgetPeriod = 2
+)
+
+var BudgetPeriodEnum_BudgetPeriod_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DAILY",
+}
+
+var BudgetPeriodEnum_BudgetPeriod_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DAILY":       2,
+}
+
+func (x BudgetPeriodEnum_BudgetPeriod) String() string {
+	return proto.EnumName(BudgetPeriodEnum_BudgetPeriod_name, int32(x))
+}
+
+func (BudgetPeriodEnum_BudgetPeriod) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_81ebdaeddf717b90, []int{0, 0}
+}
+
+// Message describing Budget period.
+type BudgetPeriodEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetPeriodEnum) Reset()         { *m = BudgetPeriodEnum{} }
+func (m *BudgetPeriodEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetPeriodEnum) ProtoMessage()    {}
+func (*BudgetPeriodEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_81ebdaeddf717b90, []int{0}
+}
+
+func (m *BudgetPeriodEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetPeriodEnum.Unmarshal(m, b)
+}
+func (m *BudgetPeriodEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetPeriodEnum.Marshal(b, m, deterministic)
+}
+func (m *BudgetPeriodEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetPeriodEnum.Merge(m, src)
+}
+func (m *BudgetPeriodEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetPeriodEnum.Size(m)
+}
+func (m *BudgetPeriodEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetPeriodEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetPeriodEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BudgetPeriodEnum_BudgetPeriod", BudgetPeriodEnum_BudgetPeriod_name, BudgetPeriodEnum_BudgetPeriod_value)
+	proto.RegisterType((*BudgetPeriodEnum)(nil), "google.ads.googleads.v3.enums.BudgetPeriodEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/budget_period.proto", fileDescriptor_81ebdaeddf717b90)
+}
+
+var fileDescriptor_81ebdaeddf717b90 = []byte{
+	// 288 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4c, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x63, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xa4, 0xd2, 0x94, 0xf4, 0xd4, 0x92, 0xf8, 0x82, 0xd4, 0xa2, 0xcc, 0xfc,
+	0x14, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x3a, 0xbd, 0xc4, 0x94, 0x62, 0x3d,
+	0xb8, 0x16, 0xbd, 0x32, 0x63, 0x3d, 0xb0, 0x16, 0x29, 0x19, 0x98, 0x89, 0x05, 0x99, 0xfa, 0x89,
+	0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x10, 0xcd, 0x4a, 0xde, 0x5c, 0x02,
+	0x4e, 0x60, 0x33, 0x03, 0xc0, 0x46, 0xba, 0xe6, 0x95, 0xe6, 0x2a, 0x99, 0x73, 0xf1, 0x20, 0x8b,
+	0x09, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8, 0x3a, 0x7b, 0xba, 0x79, 0xba, 0xba, 0x08,
+	0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb, 0xf9, 0x87, 0xfb, 0x09, 0x30, 0x0a, 0x71,
+	0x72, 0xb1, 0xba, 0x38, 0x7a, 0xfa, 0x44, 0x0a, 0x30, 0x39, 0x3d, 0x63, 0xe4, 0x52, 0x4c, 0xce,
+	0xcf, 0xd5, 0xc3, 0xeb, 0x20, 0x27, 0x41, 0x64, 0xc3, 0x03, 0x40, 0xae, 0x08, 0x60, 0x8c, 0x72,
+	0x82, 0xea, 0x49, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd,
+	0x03, 0xbb, 0x11, 0x16, 0x0e, 0x05, 0x99, 0xc5, 0x38, 0x82, 0xc5, 0x1a, 0x4c, 0x2e, 0x62, 0x62,
+	0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e, 0x31, 0xca, 0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04,
+	0xb1, 0xc2, 0x8c, 0xf5, 0x40, 0x9e, 0x2b, 0x3e, 0x05, 0x93, 0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81,
+	0xcb, 0xc7, 0x84, 0x19, 0xc7, 0x80, 0xe5, 0x5f, 0x31, 0x29, 0x42, 0x04, 0xad, 0xac, 0x1c, 0x53,
+	0x8a, 0xad, 0xac, 0xe0, 0x2a, 0xac, 0xac, 0xc2, 0x8c, 0xad, 0xac, 0xc0, 0x6a, 0x92, 0xd8, 0xc0,
+	0x0e, 0x33, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x51, 0xdb, 0x23, 0x98, 0xae, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/budget_status.pb.go b/googleapis/ads/googleads/v3/enums/budget_status.pb.go
new file mode 100644
index 0000000..a9e3dfa
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/budget_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/budget_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a Budget.
+type BudgetStatusEnum_BudgetStatus int32
+
+const (
+	// Not specified.
+	BudgetStatusEnum_UNSPECIFIED BudgetStatusEnum_BudgetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetStatusEnum_UNKNOWN BudgetStatusEnum_BudgetStatus = 1
+	// Budget is enabled.
+	BudgetStatusEnum_ENABLED BudgetStatusEnum_BudgetStatus = 2
+	// Budget is removed.
+	BudgetStatusEnum_REMOVED BudgetStatusEnum_BudgetStatus = 3
+)
+
+var BudgetStatusEnum_BudgetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var BudgetStatusEnum_BudgetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x BudgetStatusEnum_BudgetStatus) String() string {
+	return proto.EnumName(BudgetStatusEnum_BudgetStatus_name, int32(x))
+}
+
+func (BudgetStatusEnum_BudgetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_10afd99aeed822db, []int{0, 0}
+}
+
+// Message describing a Budget status
+type BudgetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetStatusEnum) Reset()         { *m = BudgetStatusEnum{} }
+func (m *BudgetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetStatusEnum) ProtoMessage()    {}
+func (*BudgetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_10afd99aeed822db, []int{0}
+}
+
+func (m *BudgetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetStatusEnum.Unmarshal(m, b)
+}
+func (m *BudgetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *BudgetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetStatusEnum.Merge(m, src)
+}
+func (m *BudgetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetStatusEnum.Size(m)
+}
+func (m *BudgetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BudgetStatusEnum_BudgetStatus", BudgetStatusEnum_BudgetStatus_name, BudgetStatusEnum_BudgetStatus_value)
+	proto.RegisterType((*BudgetStatusEnum)(nil), "google.ads.googleads.v3.enums.BudgetStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/budget_status.proto", fileDescriptor_10afd99aeed822db)
+}
+
+var fileDescriptor_10afd99aeed822db = []byte{
+	// 294 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x1d, 0x28, 0x64, 0x82, 0x75, 0x47, 0x71, 0x87, 0xed, 0x01, 0x12, 0x24, 0xb7, 0x78,
+	0x4a, 0x5d, 0x36, 0x86, 0xda, 0x15, 0xc7, 0x2a, 0x8c, 0x82, 0x64, 0xa6, 0x84, 0xc2, 0x9a, 0x94,
+	0x25, 0xdd, 0x03, 0x79, 0xf4, 0x51, 0x7c, 0x10, 0x0f, 0x3e, 0x85, 0x24, 0x5d, 0xcb, 0x2e, 0x7a,
+	0x29, 0xbf, 0xef, 0xfb, 0xfd, 0xe9, 0x2f, 0x1f, 0xb8, 0x93, 0x5a, 0xcb, 0x5d, 0x8e, 0xb8, 0x30,
+	0xa8, 0x81, 0x0e, 0x1d, 0x30, 0xca, 0x55, 0x5d, 0x1a, 0xb4, 0xad, 0x85, 0xcc, 0xed, 0x9b, 0xb1,
+	0xdc, 0xd6, 0x06, 0x56, 0x7b, 0x6d, 0xf5, 0x70, 0xd4, 0xe8, 0x20, 0x17, 0x06, 0x76, 0x16, 0x78,
+	0xc0, 0xd0, 0x5b, 0x6e, 0x6e, 0xdb, 0xc4, 0xaa, 0x40, 0x5c, 0x29, 0x6d, 0xb9, 0x2d, 0xb4, 0x3a,
+	0x9a, 0x27, 0x1b, 0x10, 0x46, 0x3e, 0x73, 0xe5, 0x23, 0x99, 0xaa, 0xcb, 0xc9, 0x0c, 0x5c, 0x9e,
+	0xee, 0x86, 0x57, 0x60, 0xb0, 0x8e, 0x57, 0x09, 0x7b, 0x58, 0xcc, 0x16, 0x6c, 0x1a, 0x9e, 0x0d,
+	0x07, 0xe0, 0x62, 0x1d, 0x3f, 0xc6, 0xcb, 0xd7, 0x38, 0xec, 0xb9, 0x81, 0xc5, 0x34, 0x7a, 0x62,
+	0xd3, 0x30, 0x70, 0xc3, 0x0b, 0x7b, 0x5e, 0xa6, 0x6c, 0x1a, 0xf6, 0xa3, 0xef, 0x1e, 0x18, 0xbf,
+	0xeb, 0x12, 0xfe, 0xdb, 0x2f, 0xba, 0x3e, 0xfd, 0x57, 0xe2, 0x4a, 0x25, 0xbd, 0x4d, 0x74, 0xf4,
+	0x48, 0xbd, 0xe3, 0x4a, 0x42, 0xbd, 0x97, 0x48, 0xe6, 0xca, 0x57, 0x6e, 0xcf, 0x52, 0x15, 0xe6,
+	0x8f, 0x2b, 0xdd, 0xfb, 0xef, 0x47, 0xd0, 0x9f, 0x53, 0xfa, 0x19, 0x8c, 0xe6, 0x4d, 0x14, 0x15,
+	0x06, 0x36, 0xd0, 0xa1, 0x14, 0x43, 0xf7, 0x56, 0xf3, 0xd5, 0xf2, 0x19, 0x15, 0x26, 0xeb, 0xf8,
+	0x2c, 0xc5, 0x99, 0xe7, 0x7f, 0x82, 0x71, 0xb3, 0x24, 0x84, 0x0a, 0x43, 0x48, 0xa7, 0x20, 0x24,
+	0xc5, 0x84, 0x78, 0xcd, 0xf6, 0xdc, 0x17, 0xc3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x77,
+	0x42, 0x51, 0xbd, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/budget_type.pb.go b/googleapis/ads/googleads/v3/enums/budget_type.pb.go
new file mode 100644
index 0000000..4d0104e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/budget_type.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/budget_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible Budget types.
+type BudgetTypeEnum_BudgetType int32
+
+const (
+	// Not specified.
+	BudgetTypeEnum_UNSPECIFIED BudgetTypeEnum_BudgetType = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetTypeEnum_UNKNOWN BudgetTypeEnum_BudgetType = 1
+	// Budget type for standard Google Ads usage.
+	// Caps daily spend at two times the specified budget amount.
+	// Full details: https://support.google.com/google-ads/answer/6385083
+	BudgetTypeEnum_STANDARD BudgetTypeEnum_BudgetType = 2
+	// Budget type for Hotels Ads commission program.
+	// Full details: https://support.google.com/google-ads/answer/9243945
+	//
+	// This type is only supported by campaigns with
+	// AdvertisingChannelType.HOTEL, BiddingStrategyType.COMMISSION and
+	// PaymentMode.CONVERSION_VALUE.
+	BudgetTypeEnum_HOTEL_ADS_COMMISSION BudgetTypeEnum_BudgetType = 3
+	// Budget type with a fixed cost-per-acquisition (conversion).
+	// Full details: https://support.google.com/google-ads/answer/7528254
+	//
+	// This type is only supported by campaigns with
+	// AdvertisingChannelType.DISPLAY (excluding
+	// AdvertisingChannelSubType.DISPLAY_GMAIL),
+	// BiddingStrategyType.TARGET_CPA and PaymentMode.CONVERSIONS.
+	BudgetTypeEnum_FIXED_CPA BudgetTypeEnum_BudgetType = 4
+)
+
+var BudgetTypeEnum_BudgetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STANDARD",
+	3: "HOTEL_ADS_COMMISSION",
+	4: "FIXED_CPA",
+}
+
+var BudgetTypeEnum_BudgetType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"STANDARD":             2,
+	"HOTEL_ADS_COMMISSION": 3,
+	"FIXED_CPA":            4,
+}
+
+func (x BudgetTypeEnum_BudgetType) String() string {
+	return proto.EnumName(BudgetTypeEnum_BudgetType_name, int32(x))
+}
+
+func (BudgetTypeEnum_BudgetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_413da7440d0c3f52, []int{0, 0}
+}
+
+// Describes Budget types.
+type BudgetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetTypeEnum) Reset()         { *m = BudgetTypeEnum{} }
+func (m *BudgetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetTypeEnum) ProtoMessage()    {}
+func (*BudgetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_413da7440d0c3f52, []int{0}
+}
+
+func (m *BudgetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetTypeEnum.Unmarshal(m, b)
+}
+func (m *BudgetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *BudgetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetTypeEnum.Merge(m, src)
+}
+func (m *BudgetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetTypeEnum.Size(m)
+}
+func (m *BudgetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.BudgetTypeEnum_BudgetType", BudgetTypeEnum_BudgetType_name, BudgetTypeEnum_BudgetType_value)
+	proto.RegisterType((*BudgetTypeEnum)(nil), "google.ads.googleads.v3.enums.BudgetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/budget_type.proto", fileDescriptor_413da7440d0c3f52)
+}
+
+var fileDescriptor_413da7440d0c3f52 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4e, 0xc2, 0x30,
+	0x1c, 0x96, 0x61, 0xfc, 0x53, 0x54, 0x96, 0xc5, 0x83, 0x31, 0x72, 0x80, 0x07, 0xe8, 0x0e, 0xbb,
+	0xd5, 0x53, 0xc7, 0x06, 0x2e, 0xca, 0xb6, 0x38, 0x40, 0x63, 0x96, 0x2c, 0xc5, 0x36, 0x0d, 0x09,
+	0xb4, 0x0b, 0x1d, 0x24, 0xbc, 0x8e, 0x47, 0x1f, 0xc5, 0xe7, 0xf0, 0xe4, 0x53, 0x98, 0x75, 0x30,
+	0x4e, 0x7a, 0x69, 0xbe, 0xfc, 0xbe, 0x3f, 0xf9, 0xfa, 0x01, 0x9b, 0x4b, 0xc9, 0x17, 0xcc, 0x26,
+	0x54, 0xed, 0x60, 0x89, 0x36, 0x8e, 0xcd, 0xc4, 0x7a, 0xa9, 0xec, 0xd9, 0x9a, 0x72, 0x56, 0x64,
+	0xc5, 0x36, 0x67, 0x30, 0x5f, 0xc9, 0x42, 0x5a, 0x9d, 0x4a, 0x05, 0x09, 0x55, 0xb0, 0x36, 0xc0,
+	0x8d, 0x03, 0xb5, 0xe1, 0xf6, 0x6e, 0x9f, 0x97, 0xcf, 0x6d, 0x22, 0x84, 0x2c, 0x48, 0x31, 0x97,
+	0x42, 0x55, 0xe6, 0x9e, 0x02, 0x57, 0xae, 0x4e, 0x1c, 0x6f, 0x73, 0xe6, 0x8b, 0xf5, 0xb2, 0x47,
+	0x00, 0x38, 0x5c, 0xac, 0x36, 0x68, 0x4d, 0xc2, 0x24, 0xf6, 0xfb, 0xc1, 0x20, 0xf0, 0x3d, 0xf3,
+	0xc8, 0x6a, 0x81, 0xd3, 0x49, 0xf8, 0x18, 0x46, 0x2f, 0xa1, 0xd9, 0xb0, 0x2e, 0xc0, 0x59, 0x32,
+	0xc6, 0xa1, 0x87, 0x9f, 0x3d, 0xd3, 0xb0, 0x6e, 0xc0, 0xf5, 0x43, 0x34, 0xf6, 0x9f, 0x32, 0xec,
+	0x25, 0x59, 0x3f, 0x1a, 0x8d, 0x82, 0x24, 0x09, 0xa2, 0xd0, 0x6c, 0x5a, 0x97, 0xe0, 0x7c, 0x10,
+	0xbc, 0xfa, 0x5e, 0xd6, 0x8f, 0xb1, 0x79, 0xec, 0x7e, 0x37, 0x40, 0xf7, 0x5d, 0x2e, 0xe1, 0xbf,
+	0xc5, 0xdd, 0xf6, 0xa1, 0x46, 0x5c, 0x76, 0x8d, 0x1b, 0x6f, 0xee, 0xce, 0xc1, 0xe5, 0x82, 0x08,
+	0x0e, 0xe5, 0x8a, 0xdb, 0x9c, 0x09, 0xfd, 0x93, 0xfd, 0x56, 0xf9, 0x5c, 0xfd, 0x31, 0xdd, 0xbd,
+	0x7e, 0x3f, 0x8c, 0xe6, 0x10, 0xe3, 0x4f, 0xa3, 0x33, 0xac, 0xa2, 0x30, 0x55, 0xb0, 0x82, 0x25,
+	0x9a, 0x3a, 0xb0, 0x1c, 0x41, 0x7d, 0xed, 0xf9, 0x14, 0x53, 0x95, 0xd6, 0x7c, 0x3a, 0x75, 0x52,
+	0xcd, 0xff, 0x18, 0xdd, 0xea, 0x88, 0x10, 0xa6, 0x0a, 0xa1, 0x5a, 0x81, 0xd0, 0xd4, 0x41, 0x48,
+	0x6b, 0x66, 0x27, 0xba, 0x98, 0xf3, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x8d, 0x09, 0x7d, 0xd2,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/call_conversion_reporting_state.pb.go b/googleapis/ads/googleads/v3/enums/call_conversion_reporting_state.pb.go
new file mode 100644
index 0000000..6c7567c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/call_conversion_reporting_state.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/call_conversion_reporting_state.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible data types for a call conversion action state.
+type CallConversionReportingStateEnum_CallConversionReportingState int32
+
+const (
+	// Not specified.
+	CallConversionReportingStateEnum_UNSPECIFIED CallConversionReportingStateEnum_CallConversionReportingState = 0
+	// Used for return value only. Represents value unknown in this version.
+	CallConversionReportingStateEnum_UNKNOWN CallConversionReportingStateEnum_CallConversionReportingState = 1
+	// Call conversion action is disabled.
+	CallConversionReportingStateEnum_DISABLED CallConversionReportingStateEnum_CallConversionReportingState = 2
+	// Call conversion action will use call conversion type set at the
+	// account level.
+	CallConversionReportingStateEnum_USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION CallConversionReportingStateEnum_CallConversionReportingState = 3
+	// Call conversion action will use call conversion type set at the resource
+	// (call only ads/call extensions) level.
+	CallConversionReportingStateEnum_USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION CallConversionReportingStateEnum_CallConversionReportingState = 4
+)
+
+var CallConversionReportingStateEnum_CallConversionReportingState_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISABLED",
+	3: "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION",
+	4: "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION",
+}
+
+var CallConversionReportingStateEnum_CallConversionReportingState_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DISABLED":    2,
+	"USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION":  3,
+	"USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION": 4,
+}
+
+func (x CallConversionReportingStateEnum_CallConversionReportingState) String() string {
+	return proto.EnumName(CallConversionReportingStateEnum_CallConversionReportingState_name, int32(x))
+}
+
+func (CallConversionReportingStateEnum_CallConversionReportingState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9c92a91800d0b626, []int{0, 0}
+}
+
+// Container for enum describing possible data types for call conversion
+// reporting state.
+type CallConversionReportingStateEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallConversionReportingStateEnum) Reset()         { *m = CallConversionReportingStateEnum{} }
+func (m *CallConversionReportingStateEnum) String() string { return proto.CompactTextString(m) }
+func (*CallConversionReportingStateEnum) ProtoMessage()    {}
+func (*CallConversionReportingStateEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9c92a91800d0b626, []int{0}
+}
+
+func (m *CallConversionReportingStateEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Unmarshal(m, b)
+}
+func (m *CallConversionReportingStateEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Marshal(b, m, deterministic)
+}
+func (m *CallConversionReportingStateEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallConversionReportingStateEnum.Merge(m, src)
+}
+func (m *CallConversionReportingStateEnum) XXX_Size() int {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Size(m)
+}
+func (m *CallConversionReportingStateEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallConversionReportingStateEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallConversionReportingStateEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CallConversionReportingStateEnum_CallConversionReportingState", CallConversionReportingStateEnum_CallConversionReportingState_name, CallConversionReportingStateEnum_CallConversionReportingState_value)
+	proto.RegisterType((*CallConversionReportingStateEnum)(nil), "google.ads.googleads.v3.enums.CallConversionReportingStateEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/call_conversion_reporting_state.proto", fileDescriptor_9c92a91800d0b626)
+}
+
+var fileDescriptor_9c92a91800d0b626 = []byte{
+	// 365 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0xca, 0x9c, 0x30,
+	0x18, 0xac, 0x6e, 0x69, 0x4b, 0xb6, 0x50, 0xf1, 0x58, 0x76, 0xa1, 0xbb, 0xa7, 0x16, 0xda, 0x78,
+	0xf0, 0x96, 0x9e, 0x62, 0x36, 0x5d, 0xa4, 0x12, 0x17, 0x5d, 0x2d, 0x14, 0x21, 0xa4, 0xab, 0x88,
+	0xe0, 0x26, 0x62, 0xdc, 0x7d, 0xa0, 0x5e, 0x0a, 0x7d, 0x94, 0xd2, 0x27, 0xe9, 0x03, 0xf4, 0xfc,
+	0xa3, 0xfe, 0x7a, 0xfb, 0xbd, 0x84, 0x21, 0x33, 0xdf, 0x4c, 0x32, 0x1f, 0x20, 0xa5, 0x52, 0x65,
+	0x5d, 0x38, 0x22, 0xd7, 0xce, 0x08, 0x7b, 0x74, 0x77, 0x9d, 0x42, 0xde, 0xae, 0xda, 0xb9, 0x88,
+	0xba, 0xe6, 0x17, 0x25, 0xef, 0x45, 0xab, 0x2b, 0x25, 0x79, 0x5b, 0x34, 0xaa, 0xed, 0x2a, 0x59,
+	0x72, 0xdd, 0x89, 0xae, 0x80, 0x4d, 0xab, 0x3a, 0x65, 0x6f, 0xc7, 0x49, 0x28, 0x72, 0x0d, 0x67,
+	0x13, 0x78, 0x77, 0xe1, 0x60, 0xf2, 0x76, 0x33, 0x65, 0x34, 0x95, 0x23, 0xa4, 0x54, 0x9d, 0xe8,
+	0x2a, 0x25, 0xf5, 0x38, 0xbc, 0xff, 0x6b, 0x80, 0x77, 0x44, 0xd4, 0x35, 0x99, 0x53, 0xa2, 0x29,
+	0x24, 0xee, 0x33, 0xa8, 0xbc, 0x5d, 0xf7, 0xbf, 0x0c, 0xb0, 0x59, 0x12, 0xd9, 0x6f, 0xc0, 0x3a,
+	0x61, 0xf1, 0x89, 0x12, 0xff, 0x8b, 0x4f, 0x0f, 0xd6, 0x33, 0x7b, 0x0d, 0x5e, 0x26, 0xec, 0x2b,
+	0x0b, 0xbf, 0x31, 0xcb, 0xb0, 0x5f, 0x83, 0x57, 0x07, 0x3f, 0xc6, 0x5e, 0x40, 0x0f, 0x96, 0x69,
+	0x7f, 0x04, 0xef, 0x93, 0x98, 0x72, 0x4c, 0x48, 0x98, 0xb0, 0x33, 0x0f, 0x68, 0x4a, 0x03, 0x4e,
+	0x70, 0x10, 0x70, 0x12, 0xb2, 0x94, 0x46, 0xb1, 0x1f, 0x32, 0x8e, 0xc9, 0xd9, 0x0f, 0x99, 0xb5,
+	0xb2, 0x3f, 0x81, 0x0f, 0xbd, 0x3a, 0xa2, 0x71, 0x98, 0x44, 0x84, 0x2e, 0xcb, 0x9f, 0x7b, 0xff,
+	0x0d, 0xb0, 0xbb, 0xa8, 0x2b, 0x5c, 0xac, 0xc4, 0xdb, 0x2d, 0x7d, 0xe6, 0xd4, 0xf7, 0x72, 0x32,
+	0xbe, 0x7b, 0x8f, 0x1e, 0xa5, 0xaa, 0x85, 0x2c, 0xa1, 0x6a, 0x4b, 0xa7, 0x2c, 0xe4, 0xd0, 0xda,
+	0xb4, 0xab, 0xa6, 0xd2, 0x4f, 0xac, 0xee, 0xf3, 0x70, 0xfe, 0x34, 0x57, 0x47, 0x8c, 0x7f, 0x9b,
+	0xdb, 0xe3, 0x68, 0x85, 0x73, 0x0d, 0x47, 0xd8, 0xa3, 0xd4, 0x85, 0x7d, 0xbb, 0xfa, 0xcf, 0xc4,
+	0x67, 0x38, 0xd7, 0xd9, 0xcc, 0x67, 0xa9, 0x9b, 0x0d, 0xfc, 0x3f, 0x73, 0x37, 0x5e, 0x22, 0x84,
+	0x73, 0x8d, 0xd0, 0xac, 0x40, 0x28, 0x75, 0x11, 0x1a, 0x34, 0x3f, 0x5e, 0x0c, 0x0f, 0x73, 0x1f,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x9e, 0x47, 0x5a, 0x52, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/call_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/call_placeholder_field.pb.go
new file mode 100644
index 0000000..b4593de
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/call_placeholder_field.pb.go
@@ -0,0 +1,147 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/call_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Call placeholder fields.
+type CallPlaceholderFieldEnum_CallPlaceholderField int32
+
+const (
+	// Not specified.
+	CallPlaceholderFieldEnum_UNSPECIFIED CallPlaceholderFieldEnum_CallPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CallPlaceholderFieldEnum_UNKNOWN CallPlaceholderFieldEnum_CallPlaceholderField = 1
+	// Data Type: STRING. The advertiser's phone number to append to the ad.
+	CallPlaceholderFieldEnum_PHONE_NUMBER CallPlaceholderFieldEnum_CallPlaceholderField = 2
+	// Data Type: STRING. Uppercase two-letter country code of the advertiser's
+	// phone number.
+	CallPlaceholderFieldEnum_COUNTRY_CODE CallPlaceholderFieldEnum_CallPlaceholderField = 3
+	// Data Type: BOOLEAN. Indicates whether call tracking is enabled. Default:
+	// true.
+	CallPlaceholderFieldEnum_TRACKED CallPlaceholderFieldEnum_CallPlaceholderField = 4
+	// Data Type: INT64. The ID of an AdCallMetricsConversion object. This
+	// object contains the phoneCallDurationfield which is the minimum duration
+	// (in seconds) of a call to be considered a conversion.
+	CallPlaceholderFieldEnum_CONVERSION_TYPE_ID CallPlaceholderFieldEnum_CallPlaceholderField = 5
+	// Data Type: STRING. Indicates whether this call extension uses its own
+	// call conversion setting or follows the account level setting.
+	// Valid values are: USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION and
+	// USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION.
+	CallPlaceholderFieldEnum_CONVERSION_REPORTING_STATE CallPlaceholderFieldEnum_CallPlaceholderField = 6
+)
+
+var CallPlaceholderFieldEnum_CallPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PHONE_NUMBER",
+	3: "COUNTRY_CODE",
+	4: "TRACKED",
+	5: "CONVERSION_TYPE_ID",
+	6: "CONVERSION_REPORTING_STATE",
+}
+
+var CallPlaceholderFieldEnum_CallPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"PHONE_NUMBER":               2,
+	"COUNTRY_CODE":               3,
+	"TRACKED":                    4,
+	"CONVERSION_TYPE_ID":         5,
+	"CONVERSION_REPORTING_STATE": 6,
+}
+
+func (x CallPlaceholderFieldEnum_CallPlaceholderField) String() string {
+	return proto.EnumName(CallPlaceholderFieldEnum_CallPlaceholderField_name, int32(x))
+}
+
+func (CallPlaceholderFieldEnum_CallPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_359d87f272d7bd8f, []int{0, 0}
+}
+
+// Values for Call placeholder fields.
+type CallPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallPlaceholderFieldEnum) Reset()         { *m = CallPlaceholderFieldEnum{} }
+func (m *CallPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CallPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CallPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_359d87f272d7bd8f, []int{0}
+}
+
+func (m *CallPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CallPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *CallPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *CallPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Size(m)
+}
+func (m *CallPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CallPlaceholderFieldEnum_CallPlaceholderField", CallPlaceholderFieldEnum_CallPlaceholderField_name, CallPlaceholderFieldEnum_CallPlaceholderField_value)
+	proto.RegisterType((*CallPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.CallPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/call_placeholder_field.proto", fileDescriptor_359d87f272d7bd8f)
+}
+
+var fileDescriptor_359d87f272d7bd8f = []byte{
+	// 377 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x6a, 0xdb, 0x40,
+	0x14, 0xc6, 0x2b, 0xb9, 0x75, 0x61, 0x5c, 0xe8, 0x20, 0x4a, 0x69, 0x4d, 0x5d, 0xb0, 0x0f, 0x30,
+	0x5a, 0x68, 0x37, 0x5d, 0xe9, 0xcf, 0xd8, 0x15, 0x26, 0x23, 0x21, 0x4b, 0x0a, 0x0e, 0x02, 0x31,
+	0xb1, 0x14, 0x45, 0x30, 0xd6, 0x08, 0x8f, 0xed, 0xdb, 0x64, 0x93, 0x65, 0x8e, 0x90, 0x23, 0xe4,
+	0x28, 0x59, 0xe4, 0x0c, 0x41, 0x52, 0xec, 0x64, 0xe1, 0x64, 0x33, 0x7c, 0xbc, 0xef, 0xfd, 0x3e,
+	0xe6, 0xbd, 0x07, 0x70, 0x21, 0x44, 0xc1, 0x73, 0x9d, 0x65, 0x52, 0xef, 0x64, 0xa3, 0xf6, 0x86,
+	0x9e, 0x57, 0xbb, 0xb5, 0xd4, 0x57, 0x8c, 0xf3, 0xb4, 0xe6, 0x6c, 0x95, 0x5f, 0x0b, 0x9e, 0xe5,
+	0x9b, 0xf4, 0xaa, 0xcc, 0x79, 0x86, 0xea, 0x8d, 0xd8, 0x0a, 0x6d, 0xd4, 0x01, 0x88, 0x65, 0x12,
+	0x1d, 0x59, 0xb4, 0x37, 0x50, 0xcb, 0x0e, 0xff, 0x1c, 0xa2, 0xeb, 0x52, 0x67, 0x55, 0x25, 0xb6,
+	0x6c, 0x5b, 0x8a, 0x4a, 0x76, 0xf0, 0xe4, 0x5e, 0x01, 0xbf, 0x6c, 0xc6, 0xb9, 0xff, 0x1a, 0x3e,
+	0x6d, 0xb2, 0x49, 0xb5, 0x5b, 0x4f, 0x6e, 0x14, 0xf0, 0xe3, 0x94, 0xa9, 0x7d, 0x07, 0x83, 0x88,
+	0x2e, 0x7c, 0x62, 0xbb, 0x53, 0x97, 0x38, 0xf0, 0x93, 0x36, 0x00, 0x5f, 0x23, 0x3a, 0xa7, 0xde,
+	0x39, 0x85, 0x8a, 0x06, 0xc1, 0x37, 0xff, 0xbf, 0x47, 0x49, 0x4a, 0xa3, 0x33, 0x8b, 0x04, 0x50,
+	0x6d, 0x2a, 0xb6, 0x17, 0xd1, 0x30, 0x58, 0xa6, 0xb6, 0xe7, 0x10, 0xd8, 0x6b, 0x80, 0x30, 0x30,
+	0xed, 0x39, 0x71, 0xe0, 0x67, 0xed, 0x27, 0xd0, 0x6c, 0x8f, 0xc6, 0x24, 0x58, 0xb8, 0x1e, 0x4d,
+	0xc3, 0xa5, 0x4f, 0x52, 0xd7, 0x81, 0x5f, 0xb4, 0xbf, 0x60, 0xf8, 0xa6, 0x1e, 0x10, 0xdf, 0x0b,
+	0x42, 0x97, 0xce, 0xd2, 0x45, 0x68, 0x86, 0x04, 0xf6, 0xad, 0x27, 0x05, 0x8c, 0x57, 0x62, 0x8d,
+	0x3e, 0x5c, 0x80, 0xf5, 0xfb, 0xd4, 0x08, 0x7e, 0x33, 0xbd, 0xaf, 0x5c, 0x58, 0x2f, 0x6c, 0x21,
+	0x38, 0xab, 0x0a, 0x24, 0x36, 0x85, 0x5e, 0xe4, 0x55, 0xbb, 0x9b, 0xc3, 0x21, 0xea, 0x52, 0xbe,
+	0x73, 0x97, 0x7f, 0xed, 0x7b, 0xab, 0xf6, 0x66, 0xa6, 0x79, 0xa7, 0x8e, 0x66, 0x5d, 0x94, 0x99,
+	0x49, 0xd4, 0xc9, 0x46, 0xc5, 0x06, 0x6a, 0x76, 0x29, 0x1f, 0x0e, 0x7e, 0x62, 0x66, 0x32, 0x39,
+	0xfa, 0x49, 0x6c, 0x24, 0xad, 0xff, 0xa8, 0x8e, 0xbb, 0x22, 0xc6, 0x66, 0x26, 0x31, 0x3e, 0x76,
+	0x60, 0x1c, 0x1b, 0x18, 0xb7, 0x3d, 0x97, 0xfd, 0xf6, 0x63, 0xc6, 0x73, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x1f, 0xa6, 0xf0, 0x5c, 0x2f, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/callout_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/callout_placeholder_field.pb.go
new file mode 100644
index 0000000..ebeaef0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/callout_placeholder_field.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/callout_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Callout placeholder fields.
+type CalloutPlaceholderFieldEnum_CalloutPlaceholderField int32
+
+const (
+	// Not specified.
+	CalloutPlaceholderFieldEnum_UNSPECIFIED CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CalloutPlaceholderFieldEnum_UNKNOWN CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 1
+	// Data Type: STRING. Callout text.
+	CalloutPlaceholderFieldEnum_CALLOUT_TEXT CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 2
+)
+
+var CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CALLOUT_TEXT",
+}
+
+var CalloutPlaceholderFieldEnum_CalloutPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"CALLOUT_TEXT": 2,
+}
+
+func (x CalloutPlaceholderFieldEnum_CalloutPlaceholderField) String() string {
+	return proto.EnumName(CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name, int32(x))
+}
+
+func (CalloutPlaceholderFieldEnum_CalloutPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cb91159a825d5b02, []int{0, 0}
+}
+
+// Values for Callout placeholder fields.
+type CalloutPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CalloutPlaceholderFieldEnum) Reset()         { *m = CalloutPlaceholderFieldEnum{} }
+func (m *CalloutPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CalloutPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CalloutPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cb91159a825d5b02, []int{0}
+}
+
+func (m *CalloutPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CalloutPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Size(m)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CalloutPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CalloutPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField", CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name, CalloutPlaceholderFieldEnum_CalloutPlaceholderField_value)
+	proto.RegisterType((*CalloutPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.CalloutPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/callout_placeholder_field.proto", fileDescriptor_cb91159a825d5b02)
+}
+
+var fileDescriptor_cb91159a825d5b02 = []byte{
+	// 308 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x05, 0x85, 0x4c, 0xb0, 0xf4, 0x22, 0xe8, 0x76, 0xd8, 0x1e, 0x20, 0x39, 0xe4,
+	0x16, 0xf1, 0x90, 0xcd, 0x6e, 0x0c, 0x47, 0x57, 0x70, 0x9b, 0x22, 0x85, 0x11, 0x97, 0x98, 0x15,
+	0xb2, 0xa4, 0x2c, 0xdd, 0x1e, 0xc8, 0xa3, 0x8f, 0xe2, 0xa3, 0x78, 0xf3, 0x0d, 0xa4, 0x89, 0xab,
+	0xa7, 0x7a, 0x29, 0x1f, 0xfd, 0xfe, 0xdf, 0x2f, 0xdf, 0xff, 0x0f, 0xee, 0xa4, 0x31, 0x52, 0x09,
+	0xc4, 0xb8, 0x45, 0x5e, 0x56, 0xea, 0x80, 0x91, 0xd0, 0xfb, 0xad, 0x45, 0x6b, 0xa6, 0x94, 0xd9,
+	0x97, 0xab, 0x42, 0xb1, 0xb5, 0xd8, 0x18, 0xc5, 0xc5, 0x6e, 0xf5, 0x96, 0x0b, 0xc5, 0x61, 0xb1,
+	0x33, 0xa5, 0x89, 0xba, 0x3e, 0x03, 0x19, 0xb7, 0xb0, 0x8e, 0xc3, 0x03, 0x86, 0x2e, 0x7e, 0xdd,
+	0x39, 0xd2, 0x8b, 0x1c, 0x31, 0xad, 0x4d, 0xc9, 0xca, 0xdc, 0x68, 0xeb, 0xc3, 0xfd, 0x0d, 0xb8,
+	0x19, 0x7a, 0x7e, 0xfa, 0x87, 0x1f, 0x55, 0xf4, 0x58, 0xef, 0xb7, 0xfd, 0x09, 0xb8, 0x6a, 0xb0,
+	0xa3, 0x4b, 0xd0, 0x5e, 0x24, 0x8f, 0x69, 0x3c, 0x9c, 0x8c, 0x26, 0xf1, 0x7d, 0x78, 0x12, 0xb5,
+	0xc1, 0xf9, 0x22, 0x79, 0x48, 0x66, 0x4f, 0x49, 0xd8, 0x8a, 0x42, 0x70, 0x31, 0xa4, 0xd3, 0xe9,
+	0x6c, 0x31, 0x5f, 0xcd, 0xe3, 0xe7, 0x79, 0x18, 0x0c, 0xbe, 0x5b, 0xa0, 0xb7, 0x36, 0x5b, 0xf8,
+	0x6f, 0xdb, 0x41, 0xa7, 0xe1, 0xb9, 0xb4, 0x6a, 0x9b, 0xb6, 0x5e, 0x06, 0xbf, 0x71, 0x69, 0x14,
+	0xd3, 0x12, 0x9a, 0x9d, 0x44, 0x52, 0x68, 0xb7, 0xcb, 0xf1, 0x76, 0x45, 0x6e, 0x1b, 0x4e, 0x79,
+	0xeb, 0xbe, 0xef, 0xc1, 0xe9, 0x98, 0xd2, 0x8f, 0xa0, 0x3b, 0xf6, 0x28, 0xca, 0x2d, 0xf4, 0xb2,
+	0x52, 0x4b, 0x0c, 0xab, 0xcd, 0xed, 0xe7, 0xd1, 0xcf, 0x28, 0xb7, 0x59, 0xed, 0x67, 0x4b, 0x9c,
+	0x39, 0xff, 0x2b, 0xe8, 0xf9, 0x9f, 0x84, 0x50, 0x6e, 0x09, 0xa9, 0x27, 0x08, 0x59, 0x62, 0x42,
+	0xdc, 0xcc, 0xeb, 0x99, 0x2b, 0x86, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x3b, 0x7e, 0x6e,
+	0xe2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_criterion_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_criterion_status.pb.go
new file mode 100644
index 0000000..bf6b2cb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_criterion_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_criterion_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of a CampaignCriterion.
+type CampaignCriterionStatusEnum_CampaignCriterionStatus int32
+
+const (
+	// No value has been specified.
+	CampaignCriterionStatusEnum_UNSPECIFIED CampaignCriterionStatusEnum_CampaignCriterionStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	CampaignCriterionStatusEnum_UNKNOWN CampaignCriterionStatusEnum_CampaignCriterionStatus = 1
+	// The campaign criterion is enabled.
+	CampaignCriterionStatusEnum_ENABLED CampaignCriterionStatusEnum_CampaignCriterionStatus = 2
+	// The campaign criterion is paused.
+	CampaignCriterionStatusEnum_PAUSED CampaignCriterionStatusEnum_CampaignCriterionStatus = 3
+	// The campaign criterion is removed.
+	CampaignCriterionStatusEnum_REMOVED CampaignCriterionStatusEnum_CampaignCriterionStatus = 4
+)
+
+var CampaignCriterionStatusEnum_CampaignCriterionStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+
+var CampaignCriterionStatusEnum_CampaignCriterionStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x CampaignCriterionStatusEnum_CampaignCriterionStatus) String() string {
+	return proto.EnumName(CampaignCriterionStatusEnum_CampaignCriterionStatus_name, int32(x))
+}
+
+func (CampaignCriterionStatusEnum_CampaignCriterionStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cb42476aef577b3f, []int{0, 0}
+}
+
+// Message describing CampaignCriterion statuses.
+type CampaignCriterionStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignCriterionStatusEnum) Reset()         { *m = CampaignCriterionStatusEnum{} }
+func (m *CampaignCriterionStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionStatusEnum) ProtoMessage()    {}
+func (*CampaignCriterionStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cb42476aef577b3f, []int{0}
+}
+
+func (m *CampaignCriterionStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignCriterionStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignCriterionStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionStatusEnum.Merge(m, src)
+}
+func (m *CampaignCriterionStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionStatusEnum.Size(m)
+}
+func (m *CampaignCriterionStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignCriterionStatusEnum_CampaignCriterionStatus", CampaignCriterionStatusEnum_CampaignCriterionStatus_name, CampaignCriterionStatusEnum_CampaignCriterionStatus_value)
+	proto.RegisterType((*CampaignCriterionStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignCriterionStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_criterion_status.proto", fileDescriptor_cb42476aef577b3f)
+}
+
+var fileDescriptor_cb42476aef577b3f = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xb1, 0x4e, 0xc3, 0x30,
+	0x14, 0xa4, 0x29, 0x2a, 0x92, 0x3b, 0x10, 0x65, 0x41, 0x82, 0x76, 0x68, 0x3f, 0xc0, 0x19, 0xb2,
+	0x19, 0x31, 0x38, 0x8d, 0xa9, 0x2a, 0x20, 0x8d, 0xa8, 0x1a, 0x24, 0x14, 0x54, 0x99, 0x26, 0xb2,
+	0x2c, 0x35, 0x76, 0x14, 0xbb, 0x9d, 0xf8, 0x1a, 0x46, 0x3e, 0x85, 0x4f, 0x61, 0xe3, 0x0f, 0x90,
+	0x9d, 0xa6, 0x5b, 0x58, 0xac, 0xf3, 0xbb, 0x77, 0xa7, 0x77, 0x07, 0xee, 0x98, 0x94, 0x6c, 0x57,
+	0xf8, 0x34, 0x57, 0x7e, 0x03, 0x0d, 0x3a, 0x04, 0x7e, 0x21, 0xf6, 0xa5, 0xf2, 0xb7, 0xb4, 0xac,
+	0x28, 0x67, 0x62, 0xb3, 0xad, 0xb9, 0x2e, 0x6a, 0x2e, 0xc5, 0x46, 0x69, 0xaa, 0xf7, 0x0a, 0x56,
+	0xb5, 0xd4, 0xd2, 0x1b, 0x37, 0x1a, 0x48, 0x73, 0x05, 0x4f, 0x72, 0x78, 0x08, 0xa0, 0x95, 0x5f,
+	0x8f, 0x5a, 0xf7, 0x8a, 0xfb, 0x54, 0x08, 0xa9, 0xa9, 0xe6, 0x52, 0x1c, 0xc5, 0xd3, 0x0f, 0x70,
+	0x33, 0x3b, 0xfa, 0xcf, 0x5a, 0xfb, 0x95, 0x75, 0x27, 0x62, 0x5f, 0x4e, 0xdf, 0xc0, 0x55, 0x07,
+	0xed, 0x5d, 0x82, 0xe1, 0x3a, 0x5e, 0x25, 0x64, 0xb6, 0xb8, 0x5f, 0x90, 0xc8, 0x3d, 0xf3, 0x86,
+	0xe0, 0x62, 0x1d, 0x3f, 0xc4, 0xcb, 0x97, 0xd8, 0xed, 0x99, 0x0f, 0x89, 0x71, 0xf8, 0x48, 0x22,
+	0xd7, 0xf1, 0x00, 0x18, 0x24, 0x78, 0xbd, 0x22, 0x91, 0xdb, 0x37, 0xc4, 0x33, 0x79, 0x5a, 0xa6,
+	0x24, 0x72, 0xcf, 0xc3, 0xdf, 0x1e, 0x98, 0x6c, 0x65, 0x09, 0xff, 0x4d, 0x10, 0x8e, 0x3a, 0x4e,
+	0x48, 0x4c, 0x82, 0xa4, 0xf7, 0x1a, 0x1e, 0xe5, 0x4c, 0xee, 0xa8, 0x60, 0x50, 0xd6, 0xcc, 0x67,
+	0x85, 0xb0, 0xf9, 0xda, 0x3e, 0x2b, 0xae, 0x3a, 0xea, 0xbd, 0xb5, 0xef, 0xa7, 0xd3, 0x9f, 0x63,
+	0xfc, 0xe5, 0x8c, 0xe7, 0x8d, 0x15, 0xce, 0x15, 0x6c, 0xa0, 0x41, 0x69, 0x00, 0x4d, 0x1b, 0xea,
+	0xbb, 0xe5, 0x33, 0x9c, 0xab, 0xec, 0xc4, 0x67, 0x69, 0x90, 0x59, 0xfe, 0xc7, 0x99, 0x34, 0x43,
+	0x84, 0x70, 0xae, 0x10, 0x3a, 0x6d, 0x20, 0x94, 0x06, 0x08, 0xd9, 0x9d, 0xf7, 0x81, 0x3d, 0x2c,
+	0xf8, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x5a, 0x6b, 0xa2, 0xf6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_draft_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_draft_status.pb.go
new file mode 100644
index 0000000..b294fe8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_draft_status.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_draft_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a campaign draft.
+type CampaignDraftStatusEnum_CampaignDraftStatus int32
+
+const (
+	// The status has not been specified.
+	CampaignDraftStatusEnum_UNSPECIFIED CampaignDraftStatusEnum_CampaignDraftStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignDraftStatusEnum_UNKNOWN CampaignDraftStatusEnum_CampaignDraftStatus = 1
+	// Initial state of the draft, the advertiser can start adding changes with
+	// no effect on serving.
+	CampaignDraftStatusEnum_PROPOSED CampaignDraftStatusEnum_CampaignDraftStatus = 2
+	// The campaign draft is removed.
+	CampaignDraftStatusEnum_REMOVED CampaignDraftStatusEnum_CampaignDraftStatus = 3
+	// Advertiser requested to promote draft's changes back into the original
+	// campaign. Advertiser can poll the long running operation returned by
+	// the promote action to see the status of the promotion.
+	CampaignDraftStatusEnum_PROMOTING CampaignDraftStatusEnum_CampaignDraftStatus = 5
+	// The process to merge changes in the draft back to the original campaign
+	// has completed successfully.
+	CampaignDraftStatusEnum_PROMOTED CampaignDraftStatusEnum_CampaignDraftStatus = 4
+	// The promotion failed after it was partially applied. Promote cannot be
+	// attempted again safely, so the issue must be corrected in the original
+	// campaign.
+	CampaignDraftStatusEnum_PROMOTE_FAILED CampaignDraftStatusEnum_CampaignDraftStatus = 6
+)
+
+var CampaignDraftStatusEnum_CampaignDraftStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PROPOSED",
+	3: "REMOVED",
+	5: "PROMOTING",
+	4: "PROMOTED",
+	6: "PROMOTE_FAILED",
+}
+
+var CampaignDraftStatusEnum_CampaignDraftStatus_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"PROPOSED":       2,
+	"REMOVED":        3,
+	"PROMOTING":      5,
+	"PROMOTED":       4,
+	"PROMOTE_FAILED": 6,
+}
+
+func (x CampaignDraftStatusEnum_CampaignDraftStatus) String() string {
+	return proto.EnumName(CampaignDraftStatusEnum_CampaignDraftStatus_name, int32(x))
+}
+
+func (CampaignDraftStatusEnum_CampaignDraftStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_70c9d2fa31d31347, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a campaign draft.
+type CampaignDraftStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignDraftStatusEnum) Reset()         { *m = CampaignDraftStatusEnum{} }
+func (m *CampaignDraftStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignDraftStatusEnum) ProtoMessage()    {}
+func (*CampaignDraftStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70c9d2fa31d31347, []int{0}
+}
+
+func (m *CampaignDraftStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignDraftStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignDraftStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignDraftStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignDraftStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignDraftStatusEnum.Merge(m, src)
+}
+func (m *CampaignDraftStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignDraftStatusEnum.Size(m)
+}
+func (m *CampaignDraftStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignDraftStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignDraftStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignDraftStatusEnum_CampaignDraftStatus", CampaignDraftStatusEnum_CampaignDraftStatus_name, CampaignDraftStatusEnum_CampaignDraftStatus_value)
+	proto.RegisterType((*CampaignDraftStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignDraftStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_draft_status.proto", fileDescriptor_70c9d2fa31d31347)
+}
+
+var fileDescriptor_70c9d2fa31d31347 = []byte{
+	// 347 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xe3, 0x30,
+	0x18, 0x9d, 0xa4, 0x33, 0x9d, 0x19, 0x97, 0x9f, 0xc8, 0x2c, 0x40, 0x88, 0x2e, 0xda, 0x03, 0x38,
+	0x8b, 0xac, 0x30, 0xab, 0xb4, 0x71, 0xab, 0x08, 0x1a, 0x47, 0xfd, 0x09, 0x12, 0x8a, 0x54, 0x99,
+	0xa6, 0x58, 0x91, 0x1a, 0x3b, 0xaa, 0xd3, 0x6e, 0xb9, 0x07, 0x4b, 0x96, 0x1c, 0x85, 0xa3, 0x20,
+	0x71, 0x07, 0x14, 0x27, 0xed, 0xaa, 0xb0, 0x89, 0x5e, 0xfc, 0x7e, 0xf4, 0xbd, 0x07, 0xae, 0xb9,
+	0x94, 0x7c, 0xb5, 0xb4, 0x59, 0xa2, 0xec, 0x0a, 0x96, 0x68, 0xeb, 0xd8, 0x4b, 0xb1, 0xc9, 0x94,
+	0xbd, 0x60, 0x59, 0xce, 0x52, 0x2e, 0xe6, 0xc9, 0x9a, 0x3d, 0x15, 0x73, 0x55, 0xb0, 0x62, 0xa3,
+	0x50, 0xbe, 0x96, 0x85, 0x84, 0xed, 0x4a, 0x8f, 0x58, 0xa2, 0xd0, 0xde, 0x8a, 0xb6, 0x0e, 0xd2,
+	0xd6, 0xcb, 0xab, 0x5d, 0x72, 0x9e, 0xda, 0x4c, 0x08, 0x59, 0xb0, 0x22, 0x95, 0xa2, 0x36, 0x77,
+	0x5f, 0x0c, 0x70, 0xde, 0xaf, 0xc3, 0xbd, 0x32, 0x7b, 0xa2, 0xa3, 0x89, 0xd8, 0x64, 0xdd, 0x67,
+	0x70, 0x76, 0x80, 0x82, 0xa7, 0xa0, 0x35, 0x0b, 0x26, 0x21, 0xe9, 0xfb, 0x03, 0x9f, 0x78, 0xd6,
+	0x2f, 0xd8, 0x02, 0x7f, 0x67, 0xc1, 0x6d, 0x40, 0xef, 0x03, 0xcb, 0x80, 0x47, 0xe0, 0x5f, 0x38,
+	0xa6, 0x21, 0x9d, 0x10, 0xcf, 0x32, 0x4b, 0x6a, 0x4c, 0x46, 0x34, 0x22, 0x9e, 0xd5, 0x80, 0xc7,
+	0xe0, 0x7f, 0x38, 0xa6, 0x23, 0x3a, 0xf5, 0x83, 0xa1, 0xf5, 0xa7, 0x56, 0x8e, 0xe8, 0x94, 0x78,
+	0xd6, 0x6f, 0x08, 0xc1, 0x49, 0xfd, 0x37, 0x1f, 0xb8, 0xfe, 0x1d, 0xf1, 0xac, 0x66, 0xef, 0xd3,
+	0x00, 0x9d, 0x85, 0xcc, 0xd0, 0x8f, 0x05, 0x7b, 0x17, 0x07, 0x8e, 0x0c, 0xcb, 0x72, 0xa1, 0xf1,
+	0xd0, 0xab, 0xad, 0x5c, 0xae, 0x98, 0xe0, 0x48, 0xae, 0xb9, 0xcd, 0x97, 0x42, 0x57, 0xdf, 0xcd,
+	0x9c, 0xa7, 0xea, 0x9b, 0xd5, 0x6f, 0xf4, 0xf7, 0xd5, 0x6c, 0x0c, 0x5d, 0xf7, 0xcd, 0x6c, 0x0f,
+	0xab, 0x28, 0x37, 0x51, 0xa8, 0x82, 0x25, 0x8a, 0x1c, 0x54, 0x6e, 0xa5, 0xde, 0x77, 0x7c, 0xec,
+	0x26, 0x2a, 0xde, 0xf3, 0x71, 0xe4, 0xc4, 0x9a, 0xff, 0x30, 0x3b, 0xd5, 0x23, 0xc6, 0x6e, 0xa2,
+	0x30, 0xde, 0x2b, 0x30, 0x8e, 0x1c, 0x8c, 0xb5, 0xe6, 0xb1, 0xa9, 0x0f, 0x73, 0xbe, 0x02, 0x00,
+	0x00, 0xff, 0xff, 0x6e, 0x06, 0x85, 0xe8, 0x0d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_experiment_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_experiment_status.pb.go
new file mode 100644
index 0000000..ab4db7d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_experiment_status.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_experiment_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a campaign experiment.
+type CampaignExperimentStatusEnum_CampaignExperimentStatus int32
+
+const (
+	// The status has not been specified.
+	CampaignExperimentStatusEnum_UNSPECIFIED CampaignExperimentStatusEnum_CampaignExperimentStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignExperimentStatusEnum_UNKNOWN CampaignExperimentStatusEnum_CampaignExperimentStatus = 1
+	// The experiment campaign is being initialized.
+	CampaignExperimentStatusEnum_INITIALIZING CampaignExperimentStatusEnum_CampaignExperimentStatus = 2
+	// Initialization of the experiment campaign failed.
+	CampaignExperimentStatusEnum_INITIALIZATION_FAILED CampaignExperimentStatusEnum_CampaignExperimentStatus = 8
+	// The experiment campaign is fully initialized. The experiment is currently
+	// running, scheduled to run in the future or has ended based on its
+	// end date. An experiment with the status INITIALIZING will be updated to
+	// ENABLED when it is fully created.
+	CampaignExperimentStatusEnum_ENABLED CampaignExperimentStatusEnum_CampaignExperimentStatus = 3
+	// The experiment campaign was graduated to a stand-alone
+	// campaign, existing independently of the experiment.
+	CampaignExperimentStatusEnum_GRADUATED CampaignExperimentStatusEnum_CampaignExperimentStatus = 4
+	// The experiment is removed.
+	CampaignExperimentStatusEnum_REMOVED CampaignExperimentStatusEnum_CampaignExperimentStatus = 5
+	// The experiment's changes are being applied to the original campaign.
+	// The long running operation returned by the promote method can be polled
+	// to see the status of the promotion.
+	CampaignExperimentStatusEnum_PROMOTING CampaignExperimentStatusEnum_CampaignExperimentStatus = 6
+	// Promote of the experiment campaign failed.
+	CampaignExperimentStatusEnum_PROMOTION_FAILED CampaignExperimentStatusEnum_CampaignExperimentStatus = 9
+	// The changes of the experiment are promoted to their original campaign.
+	CampaignExperimentStatusEnum_PROMOTED CampaignExperimentStatusEnum_CampaignExperimentStatus = 7
+	// The experiment was ended manually. It did not end based on its end date.
+	CampaignExperimentStatusEnum_ENDED_MANUALLY CampaignExperimentStatusEnum_CampaignExperimentStatus = 10
+)
+
+var CampaignExperimentStatusEnum_CampaignExperimentStatus_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INITIALIZING",
+	8:  "INITIALIZATION_FAILED",
+	3:  "ENABLED",
+	4:  "GRADUATED",
+	5:  "REMOVED",
+	6:  "PROMOTING",
+	9:  "PROMOTION_FAILED",
+	7:  "PROMOTED",
+	10: "ENDED_MANUALLY",
+}
+
+var CampaignExperimentStatusEnum_CampaignExperimentStatus_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"INITIALIZING":          2,
+	"INITIALIZATION_FAILED": 8,
+	"ENABLED":               3,
+	"GRADUATED":             4,
+	"REMOVED":               5,
+	"PROMOTING":             6,
+	"PROMOTION_FAILED":      9,
+	"PROMOTED":              7,
+	"ENDED_MANUALLY":        10,
+}
+
+func (x CampaignExperimentStatusEnum_CampaignExperimentStatus) String() string {
+	return proto.EnumName(CampaignExperimentStatusEnum_CampaignExperimentStatus_name, int32(x))
+}
+
+func (CampaignExperimentStatusEnum_CampaignExperimentStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ab93bd5181abeea7, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a campaign experiment.
+type CampaignExperimentStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignExperimentStatusEnum) Reset()         { *m = CampaignExperimentStatusEnum{} }
+func (m *CampaignExperimentStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperimentStatusEnum) ProtoMessage()    {}
+func (*CampaignExperimentStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ab93bd5181abeea7, []int{0}
+}
+
+func (m *CampaignExperimentStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperimentStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignExperimentStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperimentStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperimentStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperimentStatusEnum.Merge(m, src)
+}
+func (m *CampaignExperimentStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperimentStatusEnum.Size(m)
+}
+func (m *CampaignExperimentStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperimentStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperimentStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignExperimentStatusEnum_CampaignExperimentStatus", CampaignExperimentStatusEnum_CampaignExperimentStatus_name, CampaignExperimentStatusEnum_CampaignExperimentStatus_value)
+	proto.RegisterType((*CampaignExperimentStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignExperimentStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_experiment_status.proto", fileDescriptor_ab93bd5181abeea7)
+}
+
+var fileDescriptor_ab93bd5181abeea7 = []byte{
+	// 403 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x4d, 0x6f, 0xd4, 0x30,
+	0x10, 0x25, 0x5b, 0xe8, 0x87, 0x5b, 0xc0, 0xb2, 0x40, 0x02, 0xd4, 0x3d, 0xb4, 0x3f, 0xc0, 0x39,
+	0xe4, 0x66, 0x24, 0x24, 0x6f, 0xed, 0xae, 0x2c, 0x76, 0x9d, 0xd5, 0x36, 0x09, 0xa2, 0x8a, 0x14,
+	0x99, 0x26, 0x8a, 0x22, 0x35, 0x76, 0xb4, 0xce, 0xae, 0xf8, 0x3d, 0x1c, 0xf9, 0x29, 0xdc, 0xf9,
+	0x13, 0x1c, 0x39, 0x70, 0x46, 0x4e, 0xb2, 0xe1, 0xb4, 0x5c, 0xa2, 0x37, 0xf3, 0xe6, 0xbd, 0x89,
+	0xe7, 0x81, 0x0f, 0xa5, 0x31, 0xe5, 0x63, 0xe1, 0xab, 0xdc, 0xfa, 0x3d, 0x74, 0x68, 0x17, 0xf8,
+	0x85, 0xde, 0xd6, 0xd6, 0x7f, 0x50, 0x75, 0xa3, 0xaa, 0x52, 0x67, 0xc5, 0xd7, 0xa6, 0xd8, 0x54,
+	0x75, 0xa1, 0xdb, 0xcc, 0xb6, 0xaa, 0xdd, 0x5a, 0xdc, 0x6c, 0x4c, 0x6b, 0xd0, 0xb4, 0x17, 0x61,
+	0x95, 0x5b, 0x3c, 0xea, 0xf1, 0x2e, 0xc0, 0x9d, 0xfe, 0xdd, 0xe5, 0xde, 0xbe, 0xa9, 0x7c, 0xa5,
+	0xb5, 0x69, 0x55, 0x5b, 0x19, 0x3d, 0x88, 0xaf, 0xff, 0x78, 0xe0, 0xf2, 0x66, 0xd8, 0xc0, 0xc7,
+	0x05, 0x77, 0x9d, 0x3f, 0xd7, 0xdb, 0xfa, 0xfa, 0xa7, 0x07, 0xde, 0x1c, 0x1a, 0x40, 0x2f, 0xc1,
+	0x79, 0x2c, 0xef, 0x56, 0xfc, 0x46, 0xdc, 0x0a, 0xce, 0xe0, 0x13, 0x74, 0x0e, 0x4e, 0x62, 0xf9,
+	0x51, 0x86, 0x9f, 0x24, 0xf4, 0x10, 0x04, 0x17, 0x42, 0x8a, 0x48, 0xd0, 0x85, 0xb8, 0x17, 0x72,
+	0x0e, 0x27, 0xe8, 0x2d, 0x78, 0x3d, 0x76, 0x68, 0x24, 0x42, 0x99, 0xdd, 0x52, 0xb1, 0xe0, 0x0c,
+	0x9e, 0x3a, 0x25, 0x97, 0x74, 0xe6, 0x8a, 0x23, 0xf4, 0x1c, 0x9c, 0xcd, 0xd7, 0x94, 0xc5, 0x34,
+	0xe2, 0x0c, 0x3e, 0x75, 0xdc, 0x9a, 0x2f, 0xc3, 0x84, 0x33, 0xf8, 0xcc, 0x71, 0xab, 0x75, 0xb8,
+	0x0c, 0x23, 0x67, 0x79, 0x8c, 0x5e, 0x01, 0x38, 0x94, 0xff, 0xdc, 0xce, 0xd0, 0x05, 0x38, 0xed,
+	0xbb, 0x9c, 0xc1, 0x13, 0x84, 0xc0, 0x0b, 0x2e, 0x19, 0x67, 0xd9, 0x92, 0xca, 0x98, 0x2e, 0x16,
+	0x9f, 0x21, 0x98, 0xfd, 0xf6, 0xc0, 0xd5, 0x83, 0xa9, 0xf1, 0x7f, 0x8f, 0x37, 0x9b, 0x1e, 0x7a,
+	0xfa, 0xca, 0x5d, 0x6f, 0xe5, 0xdd, 0xcf, 0x06, 0x7d, 0x69, 0x1e, 0x95, 0x2e, 0xb1, 0xd9, 0x94,
+	0x7e, 0x59, 0xe8, 0xee, 0xb6, 0xfb, 0x30, 0x9b, 0xca, 0x1e, 0xc8, 0xf6, 0x7d, 0xf7, 0xfd, 0x36,
+	0x39, 0x9a, 0x53, 0xfa, 0x7d, 0x32, 0x9d, 0xf7, 0x56, 0x34, 0xb7, 0xb8, 0x87, 0x0e, 0x25, 0x01,
+	0x76, 0x39, 0xd8, 0x1f, 0x7b, 0x3e, 0xa5, 0xb9, 0x4d, 0x47, 0x3e, 0x4d, 0x82, 0xb4, 0xe3, 0x7f,
+	0x4d, 0xae, 0xfa, 0x26, 0x21, 0x34, 0xb7, 0x84, 0x8c, 0x13, 0x84, 0x24, 0x01, 0x21, 0xdd, 0xcc,
+	0x97, 0xe3, 0xee, 0xc7, 0x82, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x56, 0xaa, 0xdf, 0x02, 0x73,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_experiment_traffic_split_type.pb.go b/googleapis/ads/googleads/v3/enums/campaign_experiment_traffic_split_type.pb.go
new file mode 100644
index 0000000..96673ff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_experiment_traffic_split_type.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_experiment_traffic_split_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum of strategies for splitting traffic between base and experiment
+// campaigns in campaign experiment.
+type CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType int32
+
+const (
+	// Not specified.
+	CampaignExperimentTrafficSplitTypeEnum_UNSPECIFIED CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignExperimentTrafficSplitTypeEnum_UNKNOWN CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType = 1
+	// Traffic is randomly assigned to the base or experiment arm for each
+	// query, independent of previous assignments for the same user.
+	CampaignExperimentTrafficSplitTypeEnum_RANDOM_QUERY CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType = 2
+	// Traffic is split using cookies to keep users in the same arm (base or
+	// experiment) of the experiment.
+	CampaignExperimentTrafficSplitTypeEnum_COOKIE CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType = 3
+)
+
+var CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RANDOM_QUERY",
+	3: "COOKIE",
+}
+
+var CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"RANDOM_QUERY": 2,
+	"COOKIE":       3,
+}
+
+func (x CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType) String() string {
+	return proto.EnumName(CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType_name, int32(x))
+}
+
+func (CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8a5c058d201e2ee9, []int{0, 0}
+}
+
+// Container for enum describing campaign experiment traffic split type.
+type CampaignExperimentTrafficSplitTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignExperimentTrafficSplitTypeEnum) Reset() {
+	*m = CampaignExperimentTrafficSplitTypeEnum{}
+}
+func (m *CampaignExperimentTrafficSplitTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperimentTrafficSplitTypeEnum) ProtoMessage()    {}
+func (*CampaignExperimentTrafficSplitTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8a5c058d201e2ee9, []int{0}
+}
+
+func (m *CampaignExperimentTrafficSplitTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum.Unmarshal(m, b)
+}
+func (m *CampaignExperimentTrafficSplitTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperimentTrafficSplitTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum.Merge(m, src)
+}
+func (m *CampaignExperimentTrafficSplitTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum.Size(m)
+}
+func (m *CampaignExperimentTrafficSplitTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperimentTrafficSplitTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType", CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType_name, CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType_value)
+	proto.RegisterType((*CampaignExperimentTrafficSplitTypeEnum)(nil), "google.ads.googleads.v3.enums.CampaignExperimentTrafficSplitTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_experiment_traffic_split_type.proto", fileDescriptor_8a5c058d201e2ee9)
+}
+
+var fileDescriptor_8a5c058d201e2ee9 = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x51, 0xbd, 0x4e, 0xeb, 0x30,
+	0x18, 0xbd, 0x49, 0xa5, 0x5e, 0xc9, 0xbd, 0xd2, 0x8d, 0x32, 0x22, 0x3a, 0xb4, 0x03, 0x6c, 0xce,
+	0x90, 0xcd, 0x4c, 0x69, 0x1b, 0xaa, 0x52, 0x91, 0x94, 0xfe, 0x21, 0x50, 0xa4, 0x60, 0x1a, 0xd7,
+	0xb2, 0xd4, 0xd8, 0x56, 0xec, 0x56, 0xf4, 0x15, 0x78, 0x0c, 0x46, 0x1e, 0x85, 0x47, 0xe1, 0x19,
+	0x18, 0x50, 0xe2, 0x36, 0x1b, 0x74, 0xb1, 0x8e, 0x7c, 0x8e, 0xcf, 0xf9, 0xce, 0x67, 0x70, 0x43,
+	0x85, 0xa0, 0x1b, 0xe2, 0xe1, 0x4c, 0x79, 0x06, 0x96, 0x68, 0xe7, 0x7b, 0x84, 0x6f, 0x73, 0xe5,
+	0xad, 0x70, 0x2e, 0x31, 0xa3, 0x3c, 0x25, 0x2f, 0x92, 0x14, 0x2c, 0x27, 0x5c, 0xa7, 0xba, 0xc0,
+	0xeb, 0x35, 0x5b, 0xa5, 0x4a, 0x6e, 0x98, 0x4e, 0xf5, 0x5e, 0x12, 0x28, 0x0b, 0xa1, 0x85, 0xdb,
+	0x36, 0x06, 0x10, 0x67, 0x0a, 0xd6, 0x5e, 0x70, 0xe7, 0xc3, 0xca, 0xeb, 0xec, 0xfc, 0x18, 0x25,
+	0x99, 0x87, 0x39, 0x17, 0x1a, 0x6b, 0x26, 0xb8, 0x32, 0x8f, 0xbb, 0xaf, 0x16, 0xb8, 0xe8, 0x1f,
+	0xd2, 0xc2, 0x3a, 0x6c, 0x6e, 0xb2, 0x66, 0x65, 0xd4, 0x7c, 0x2f, 0x49, 0xc8, 0xb7, 0x79, 0xf7,
+	0x09, 0x74, 0x4f, 0x2b, 0xdd, 0xff, 0xa0, 0xb5, 0x88, 0x66, 0x93, 0xb0, 0x3f, 0xba, 0x1e, 0x85,
+	0x03, 0xe7, 0x8f, 0xdb, 0x02, 0x7f, 0x17, 0xd1, 0x38, 0x8a, 0xef, 0x23, 0xc7, 0x72, 0x1d, 0xf0,
+	0x6f, 0x1a, 0x44, 0x83, 0xf8, 0x36, 0xbd, 0x5b, 0x84, 0xd3, 0x07, 0xc7, 0x76, 0x01, 0x68, 0xf6,
+	0xe3, 0x78, 0x3c, 0x0a, 0x9d, 0x46, 0xef, 0xcb, 0x02, 0x9d, 0x95, 0xc8, 0xe1, 0xaf, 0x85, 0x7a,
+	0x97, 0xa7, 0xa7, 0x98, 0x94, 0xdd, 0x26, 0xd6, 0x63, 0xef, 0xe0, 0x44, 0xc5, 0x06, 0x73, 0x0a,
+	0x45, 0x41, 0x3d, 0x4a, 0x78, 0xd5, 0xfc, 0xb8, 0x76, 0xc9, 0xd4, 0x0f, 0xbf, 0x70, 0x55, 0x9d,
+	0x6f, 0x76, 0x63, 0x18, 0x04, 0xef, 0x76, 0x7b, 0x68, 0xac, 0x82, 0x4c, 0x41, 0x03, 0x4b, 0xb4,
+	0xf4, 0x61, 0xb9, 0x1b, 0xf5, 0x71, 0xe4, 0x93, 0x20, 0x53, 0x49, 0xcd, 0x27, 0x4b, 0x3f, 0xa9,
+	0xf8, 0x4f, 0xbb, 0x63, 0x2e, 0x11, 0x0a, 0x32, 0x85, 0x50, 0xad, 0x40, 0x68, 0xe9, 0x23, 0x54,
+	0x69, 0x9e, 0x9b, 0xd5, 0x60, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x31, 0x13, 0x45, 0x71,
+	0x1d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_experiment_type.pb.go b/googleapis/ads/googleads/v3/enums/campaign_experiment_type.pb.go
new file mode 100644
index 0000000..ab749a5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_experiment_type.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_experiment_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Indicates if this campaign is a normal campaign,
+// a draft campaign, or an experiment campaign.
+type CampaignExperimentTypeEnum_CampaignExperimentType int32
+
+const (
+	// Not specified.
+	CampaignExperimentTypeEnum_UNSPECIFIED CampaignExperimentTypeEnum_CampaignExperimentType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignExperimentTypeEnum_UNKNOWN CampaignExperimentTypeEnum_CampaignExperimentType = 1
+	// This is a regular campaign.
+	CampaignExperimentTypeEnum_BASE CampaignExperimentTypeEnum_CampaignExperimentType = 2
+	// This is a draft version of a campaign.
+	// It has some modifications from a base campaign,
+	// but it does not serve or accrue metrics.
+	CampaignExperimentTypeEnum_DRAFT CampaignExperimentTypeEnum_CampaignExperimentType = 3
+	// This is an experiment version of a campaign.
+	// It has some modifications from a base campaign,
+	// and a percentage of traffic is being diverted
+	// from the BASE campaign to this experiment campaign.
+	CampaignExperimentTypeEnum_EXPERIMENT CampaignExperimentTypeEnum_CampaignExperimentType = 4
+)
+
+var CampaignExperimentTypeEnum_CampaignExperimentType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BASE",
+	3: "DRAFT",
+	4: "EXPERIMENT",
+}
+
+var CampaignExperimentTypeEnum_CampaignExperimentType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"BASE":        2,
+	"DRAFT":       3,
+	"EXPERIMENT":  4,
+}
+
+func (x CampaignExperimentTypeEnum_CampaignExperimentType) String() string {
+	return proto.EnumName(CampaignExperimentTypeEnum_CampaignExperimentType_name, int32(x))
+}
+
+func (CampaignExperimentTypeEnum_CampaignExperimentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a76efef12348e68b, []int{0, 0}
+}
+
+// Container for enum describing campaign experiment type.
+type CampaignExperimentTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignExperimentTypeEnum) Reset()         { *m = CampaignExperimentTypeEnum{} }
+func (m *CampaignExperimentTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperimentTypeEnum) ProtoMessage()    {}
+func (*CampaignExperimentTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a76efef12348e68b, []int{0}
+}
+
+func (m *CampaignExperimentTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperimentTypeEnum.Unmarshal(m, b)
+}
+func (m *CampaignExperimentTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperimentTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperimentTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperimentTypeEnum.Merge(m, src)
+}
+func (m *CampaignExperimentTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperimentTypeEnum.Size(m)
+}
+func (m *CampaignExperimentTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperimentTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperimentTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignExperimentTypeEnum_CampaignExperimentType", CampaignExperimentTypeEnum_CampaignExperimentType_name, CampaignExperimentTypeEnum_CampaignExperimentType_value)
+	proto.RegisterType((*CampaignExperimentTypeEnum)(nil), "google.ads.googleads.v3.enums.CampaignExperimentTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_experiment_type.proto", fileDescriptor_a76efef12348e68b)
+}
+
+var fileDescriptor_a76efef12348e68b = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x3d, 0x4e, 0xc3, 0x30,
+	0x1c, 0xc5, 0x69, 0x5a, 0xbe, 0x5c, 0x09, 0xa2, 0x0c, 0x0c, 0x85, 0x0e, 0xed, 0x01, 0x9c, 0x21,
+	0x9b, 0x61, 0x71, 0x5a, 0xb7, 0xaa, 0x10, 0x21, 0xea, 0x17, 0x08, 0x22, 0x55, 0xa6, 0xb1, 0xac,
+	0x48, 0x8d, 0x6d, 0xd5, 0x69, 0x45, 0xaf, 0xc3, 0xc8, 0x51, 0x38, 0x0a, 0x13, 0x47, 0x40, 0x89,
+	0x9b, 0x4c, 0x85, 0x25, 0x7a, 0xca, 0xfb, 0xff, 0x9e, 0x9e, 0x1f, 0xb8, 0xe3, 0x52, 0xf2, 0x15,
+	0x73, 0x69, 0xac, 0x5d, 0x23, 0x73, 0xb5, 0xf5, 0x5c, 0x26, 0x36, 0xa9, 0x76, 0x97, 0x34, 0x55,
+	0x34, 0xe1, 0x62, 0xc1, 0xde, 0x15, 0x5b, 0x27, 0x29, 0x13, 0xd9, 0x22, 0xdb, 0x29, 0x06, 0xd5,
+	0x5a, 0x66, 0xd2, 0x69, 0x1b, 0x04, 0xd2, 0x58, 0xc3, 0x8a, 0x86, 0x5b, 0x0f, 0x16, 0x74, 0xeb,
+	0xa6, 0x0c, 0x57, 0x89, 0x4b, 0x85, 0x90, 0x19, 0xcd, 0x12, 0x29, 0xb4, 0x81, 0xbb, 0x3b, 0xd0,
+	0xea, 0xed, 0xe3, 0x49, 0x95, 0x3e, 0xdd, 0x29, 0x46, 0xc4, 0x26, 0xed, 0xbe, 0x82, 0xab, 0xc3,
+	0xae, 0x73, 0x09, 0x9a, 0xb3, 0x60, 0x12, 0x92, 0xde, 0x68, 0x30, 0x22, 0x7d, 0xfb, 0xc8, 0x69,
+	0x82, 0xd3, 0x59, 0x70, 0x1f, 0x3c, 0x3e, 0x05, 0x76, 0xcd, 0x39, 0x03, 0x0d, 0x1f, 0x4f, 0x88,
+	0x6d, 0x39, 0xe7, 0xe0, 0xb8, 0x3f, 0xc6, 0x83, 0xa9, 0x5d, 0x77, 0x2e, 0x00, 0x20, 0xcf, 0x21,
+	0x19, 0x8f, 0x1e, 0x48, 0x30, 0xb5, 0x1b, 0xfe, 0x4f, 0x0d, 0x74, 0x96, 0x32, 0x85, 0xff, 0xd6,
+	0xf7, 0xaf, 0x0f, 0x17, 0x08, 0xf3, 0xf6, 0x61, 0xed, 0xc5, 0xdf, 0xd3, 0x5c, 0xae, 0xa8, 0xe0,
+	0x50, 0xae, 0xb9, 0xcb, 0x99, 0x28, 0xde, 0x56, 0x4e, 0xa9, 0x12, 0xfd, 0xc7, 0xb2, 0xb7, 0xc5,
+	0xf7, 0xc3, 0xaa, 0x0f, 0x31, 0xfe, 0xb4, 0xda, 0x43, 0x13, 0x85, 0x63, 0x0d, 0x8d, 0xcc, 0xd5,
+	0xdc, 0x83, 0xf9, 0x14, 0xfa, 0xab, 0xf4, 0x23, 0x1c, 0xeb, 0xa8, 0xf2, 0xa3, 0xb9, 0x17, 0x15,
+	0xfe, 0xb7, 0xd5, 0x31, 0x3f, 0x11, 0xc2, 0xb1, 0x46, 0xa8, 0xba, 0x40, 0x68, 0xee, 0x21, 0x54,
+	0xdc, 0xbc, 0x9d, 0x14, 0xc5, 0xbc, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x78, 0x05, 0x0e,
+	0xf1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_serving_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_serving_status.pb.go
new file mode 100644
index 0000000..b29dd94
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_serving_status.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_serving_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible serving statuses of a campaign.
+type CampaignServingStatusEnum_CampaignServingStatus int32
+
+const (
+	// No value has been specified.
+	CampaignServingStatusEnum_UNSPECIFIED CampaignServingStatusEnum_CampaignServingStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	CampaignServingStatusEnum_UNKNOWN CampaignServingStatusEnum_CampaignServingStatus = 1
+	// Serving.
+	CampaignServingStatusEnum_SERVING CampaignServingStatusEnum_CampaignServingStatus = 2
+	// None.
+	CampaignServingStatusEnum_NONE CampaignServingStatusEnum_CampaignServingStatus = 3
+	// Ended.
+	CampaignServingStatusEnum_ENDED CampaignServingStatusEnum_CampaignServingStatus = 4
+	// Pending.
+	CampaignServingStatusEnum_PENDING CampaignServingStatusEnum_CampaignServingStatus = 5
+	// Suspended.
+	CampaignServingStatusEnum_SUSPENDED CampaignServingStatusEnum_CampaignServingStatus = 6
+)
+
+var CampaignServingStatusEnum_CampaignServingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SERVING",
+	3: "NONE",
+	4: "ENDED",
+	5: "PENDING",
+	6: "SUSPENDED",
+}
+
+var CampaignServingStatusEnum_CampaignServingStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"SERVING":     2,
+	"NONE":        3,
+	"ENDED":       4,
+	"PENDING":     5,
+	"SUSPENDED":   6,
+}
+
+func (x CampaignServingStatusEnum_CampaignServingStatus) String() string {
+	return proto.EnumName(CampaignServingStatusEnum_CampaignServingStatus_name, int32(x))
+}
+
+func (CampaignServingStatusEnum_CampaignServingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e1dbcad2fedf0161, []int{0, 0}
+}
+
+// Message describing Campaign serving statuses.
+type CampaignServingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignServingStatusEnum) Reset()         { *m = CampaignServingStatusEnum{} }
+func (m *CampaignServingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignServingStatusEnum) ProtoMessage()    {}
+func (*CampaignServingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e1dbcad2fedf0161, []int{0}
+}
+
+func (m *CampaignServingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignServingStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignServingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignServingStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignServingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignServingStatusEnum.Merge(m, src)
+}
+func (m *CampaignServingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignServingStatusEnum.Size(m)
+}
+func (m *CampaignServingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignServingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignServingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignServingStatusEnum_CampaignServingStatus", CampaignServingStatusEnum_CampaignServingStatus_name, CampaignServingStatusEnum_CampaignServingStatus_value)
+	proto.RegisterType((*CampaignServingStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignServingStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_serving_status.proto", fileDescriptor_e1dbcad2fedf0161)
+}
+
+var fileDescriptor_e1dbcad2fedf0161 = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdd, 0x6a, 0xfa, 0x30,
+	0x1c, 0xfd, 0xb7, 0x7e, 0xfc, 0x67, 0x64, 0xac, 0x14, 0x76, 0x31, 0x99, 0x17, 0xfa, 0x00, 0xe9,
+	0x45, 0xef, 0xe2, 0x55, 0xb5, 0x99, 0xc8, 0x20, 0x96, 0x05, 0x3b, 0x18, 0x05, 0xc9, 0x6c, 0x09,
+	0x05, 0x9b, 0x14, 0x53, 0x7d, 0x8e, 0x3d, 0xc3, 0x2e, 0xf7, 0x28, 0x7b, 0x94, 0xdd, 0xec, 0x15,
+	0x46, 0x12, 0xf5, 0xca, 0xed, 0xa6, 0x9c, 0xe6, 0x7c, 0xf0, 0x3b, 0x07, 0x4c, 0xb8, 0x94, 0x7c,
+	0x5b, 0x04, 0x2c, 0x57, 0x81, 0x85, 0x1a, 0x1d, 0xc2, 0xa0, 0x10, 0xfb, 0x4a, 0x05, 0x1b, 0x56,
+	0xd5, 0xac, 0xe4, 0x62, 0xad, 0x8a, 0xdd, 0xa1, 0x14, 0x7c, 0xad, 0x1a, 0xd6, 0xec, 0x15, 0xac,
+	0x77, 0xb2, 0x91, 0xfe, 0xd0, 0x3a, 0x20, 0xcb, 0x15, 0x3c, 0x9b, 0xe1, 0x21, 0x84, 0xc6, 0x3c,
+	0xb8, 0x3f, 0x65, 0xd7, 0x65, 0xc0, 0x84, 0x90, 0x0d, 0x6b, 0x4a, 0x29, 0x8e, 0xe6, 0xf1, 0x9b,
+	0x03, 0xee, 0x66, 0xc7, 0x78, 0x6a, 0xd3, 0xa9, 0x09, 0xc7, 0x62, 0x5f, 0x8d, 0x15, 0xb8, 0xbd,
+	0x48, 0xfa, 0x37, 0xa0, 0xbf, 0x22, 0x34, 0xc1, 0xb3, 0xc5, 0xc3, 0x02, 0xc7, 0xde, 0x3f, 0xbf,
+	0x0f, 0xfe, 0xaf, 0xc8, 0x23, 0x59, 0x3e, 0x13, 0xcf, 0xd1, 0x3f, 0x14, 0x3f, 0xa5, 0x0b, 0x32,
+	0xf7, 0x5c, 0xff, 0x0a, 0xb4, 0xc9, 0x92, 0x60, 0xaf, 0xe5, 0xf7, 0x40, 0x07, 0x93, 0x18, 0xc7,
+	0x5e, 0x5b, 0x2b, 0x12, 0x4c, 0x62, 0xad, 0xe8, 0xf8, 0xd7, 0xa0, 0x47, 0x57, 0x34, 0xb1, 0x5c,
+	0x77, 0xfa, 0xed, 0x80, 0xd1, 0x46, 0x56, 0xf0, 0xcf, 0x5a, 0xd3, 0xc1, 0xc5, 0xc3, 0x12, 0x5d,
+	0x2a, 0x71, 0x5e, 0xa6, 0x47, 0x33, 0x97, 0x5b, 0x26, 0x38, 0x94, 0x3b, 0x1e, 0xf0, 0x42, 0x98,
+	0xca, 0xa7, 0x81, 0xeb, 0x52, 0xfd, 0xb2, 0xf7, 0xc4, 0x7c, 0xdf, 0xdd, 0xd6, 0x3c, 0x8a, 0x3e,
+	0xdc, 0xe1, 0xdc, 0x46, 0x45, 0xb9, 0x82, 0x16, 0x6a, 0x94, 0x86, 0x50, 0x2f, 0xa4, 0x3e, 0x4f,
+	0x7c, 0x16, 0xe5, 0x2a, 0x3b, 0xf3, 0x59, 0x1a, 0x66, 0x86, 0xff, 0x72, 0x47, 0xf6, 0x11, 0xa1,
+	0x28, 0x57, 0x08, 0x9d, 0x15, 0x08, 0xa5, 0x21, 0x42, 0x46, 0xf3, 0xda, 0x35, 0x87, 0x85, 0x3f,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x81, 0x84, 0x76, 0x33, 0x07, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_shared_set_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_shared_set_status.pb.go
new file mode 100644
index 0000000..854954d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_shared_set_status.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_shared_set_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible campaign shared set statuses.
+type CampaignSharedSetStatusEnum_CampaignSharedSetStatus int32
+
+const (
+	// Not specified.
+	CampaignSharedSetStatusEnum_UNSPECIFIED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignSharedSetStatusEnum_UNKNOWN CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 1
+	// The campaign shared set is enabled.
+	CampaignSharedSetStatusEnum_ENABLED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 2
+	// The campaign shared set is removed and can no longer be used.
+	CampaignSharedSetStatusEnum_REMOVED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 3
+)
+
+var CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var CampaignSharedSetStatusEnum_CampaignSharedSetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x CampaignSharedSetStatusEnum_CampaignSharedSetStatus) String() string {
+	return proto.EnumName(CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name, int32(x))
+}
+
+func (CampaignSharedSetStatusEnum_CampaignSharedSetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0c4d96f92ce0bbad, []int{0, 0}
+}
+
+// Container for enum describing types of campaign shared set statuses.
+type CampaignSharedSetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignSharedSetStatusEnum) Reset()         { *m = CampaignSharedSetStatusEnum{} }
+func (m *CampaignSharedSetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetStatusEnum) ProtoMessage()    {}
+func (*CampaignSharedSetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0c4d96f92ce0bbad, []int{0}
+}
+
+func (m *CampaignSharedSetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetStatusEnum.Merge(m, src)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Size(m)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus", CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name, CampaignSharedSetStatusEnum_CampaignSharedSetStatus_value)
+	proto.RegisterType((*CampaignSharedSetStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignSharedSetStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_shared_set_status.proto", fileDescriptor_0c4d96f92ce0bbad)
+}
+
+var fileDescriptor_0c4d96f92ce0bbad = []byte{
+	// 311 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x75, 0x1d, 0x28, 0x74, 0x07, 0xcb, 0x2e, 0x82, 0x6e, 0x87, 0xed, 0x07, 0xa4, 0x87, 0xdc,
+	0x22, 0x08, 0xe9, 0x16, 0xc7, 0x50, 0xbb, 0x69, 0x59, 0x05, 0x29, 0x8c, 0xb8, 0x84, 0x58, 0x58,
+	0x93, 0xb2, 0x2f, 0xdb, 0x0f, 0xf2, 0xe8, 0x4f, 0xf1, 0xa7, 0x78, 0xf3, 0x1f, 0x48, 0xd2, 0x6d,
+	0xb7, 0x79, 0x29, 0xef, 0xeb, 0xfb, 0xde, 0xfb, 0x5e, 0x5e, 0x78, 0xa7, 0x8c, 0x51, 0x6b, 0x19,
+	0x73, 0x01, 0x71, 0x03, 0x1d, 0xda, 0xe1, 0x58, 0xea, 0x6d, 0x05, 0xf1, 0x8a, 0x57, 0x35, 0x2f,
+	0x95, 0x5e, 0xc2, 0x07, 0xdf, 0x48, 0xb1, 0x04, 0x69, 0x97, 0x60, 0xb9, 0xdd, 0x02, 0xaa, 0x37,
+	0xc6, 0x9a, 0x6e, 0xbf, 0x11, 0x21, 0x2e, 0x00, 0x1d, 0xf5, 0x68, 0x87, 0x91, 0xd7, 0x5f, 0xf7,
+	0x0e, 0xf6, 0x75, 0x19, 0x73, 0xad, 0x8d, 0xe5, 0xb6, 0x34, 0x7a, 0x2f, 0x1e, 0xd6, 0xe1, 0xcd,
+	0x68, 0x7f, 0x20, 0xf3, 0xfe, 0x99, 0xb4, 0x99, 0x77, 0x67, 0x7a, 0x5b, 0x0d, 0x9f, 0xc3, 0xab,
+	0x13, 0x74, 0xf7, 0x32, 0xec, 0x2c, 0xd2, 0x6c, 0xce, 0x46, 0xd3, 0xfb, 0x29, 0x1b, 0x47, 0x67,
+	0xdd, 0x4e, 0x78, 0xb1, 0x48, 0x1f, 0xd2, 0xd9, 0x6b, 0x1a, 0xb5, 0xdc, 0xc0, 0x52, 0x9a, 0x3c,
+	0xb2, 0x71, 0x14, 0xb8, 0xe1, 0x85, 0x3d, 0xcd, 0x72, 0x36, 0x8e, 0xda, 0xc9, 0x6f, 0x2b, 0x1c,
+	0xac, 0x4c, 0x85, 0xfe, 0x4d, 0x9d, 0xf4, 0x4e, 0x9c, 0x9d, 0xbb, 0xd4, 0xf3, 0xd6, 0x5b, 0xb2,
+	0x97, 0x2b, 0xb3, 0xe6, 0x5a, 0x21, 0xb3, 0x51, 0xb1, 0x92, 0xda, 0xbf, 0xe9, 0x50, 0x62, 0x5d,
+	0xc2, 0x89, 0x4e, 0x6f, 0xfd, 0xf7, 0x33, 0x68, 0x4f, 0x28, 0xfd, 0x0a, 0xfa, 0x93, 0xc6, 0x8a,
+	0x0a, 0x40, 0x0d, 0x74, 0x28, 0xc7, 0xc8, 0x35, 0x00, 0xdf, 0x07, 0xbe, 0xa0, 0x02, 0x8a, 0x23,
+	0x5f, 0xe4, 0xb8, 0xf0, 0xfc, 0x4f, 0x30, 0x68, 0x7e, 0x12, 0x42, 0x05, 0x10, 0x72, 0xdc, 0x20,
+	0x24, 0xc7, 0x84, 0xf8, 0x9d, 0xf7, 0x73, 0x1f, 0x0c, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x68,
+	0xd2, 0x25, 0x09, 0xeb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/campaign_status.pb.go b/googleapis/ads/googleads/v3/enums/campaign_status.pb.go
new file mode 100644
index 0000000..a7e8cff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/campaign_status.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/campaign_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a campaign.
+type CampaignStatusEnum_CampaignStatus int32
+
+const (
+	// Not specified.
+	CampaignStatusEnum_UNSPECIFIED CampaignStatusEnum_CampaignStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignStatusEnum_UNKNOWN CampaignStatusEnum_CampaignStatus = 1
+	// Campaign is currently serving ads depending on budget information.
+	CampaignStatusEnum_ENABLED CampaignStatusEnum_CampaignStatus = 2
+	// Campaign has been paused by the user.
+	CampaignStatusEnum_PAUSED CampaignStatusEnum_CampaignStatus = 3
+	// Campaign has been removed.
+	CampaignStatusEnum_REMOVED CampaignStatusEnum_CampaignStatus = 4
+)
+
+var CampaignStatusEnum_CampaignStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+
+var CampaignStatusEnum_CampaignStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x CampaignStatusEnum_CampaignStatus) String() string {
+	return proto.EnumName(CampaignStatusEnum_CampaignStatus_name, int32(x))
+}
+
+func (CampaignStatusEnum_CampaignStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d65eafe20466bcae, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a campaign.
+type CampaignStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignStatusEnum) Reset()         { *m = CampaignStatusEnum{} }
+func (m *CampaignStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignStatusEnum) ProtoMessage()    {}
+func (*CampaignStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d65eafe20466bcae, []int{0}
+}
+
+func (m *CampaignStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignStatusEnum.Merge(m, src)
+}
+func (m *CampaignStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignStatusEnum.Size(m)
+}
+func (m *CampaignStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CampaignStatusEnum_CampaignStatus", CampaignStatusEnum_CampaignStatus_name, CampaignStatusEnum_CampaignStatus_value)
+	proto.RegisterType((*CampaignStatusEnum)(nil), "google.ads.googleads.v3.enums.CampaignStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/campaign_status.proto", fileDescriptor_d65eafe20466bcae)
+}
+
+var fileDescriptor_d65eafe20466bcae = []byte{
+	// 305 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x9d, 0x4c, 0xc8, 0x40, 0x4b, 0xbd, 0x89, 0x3b, 0x6c, 0x0f, 0x90, 0x1c, 0x72, 0x8b,
+	0xa7, 0x74, 0x8d, 0x63, 0xa8, 0x5d, 0x71, 0xae, 0x82, 0x14, 0x24, 0xae, 0x25, 0x54, 0xd6, 0xa4,
+	0x2c, 0xed, 0x1e, 0xc8, 0xa3, 0x8f, 0xe2, 0x93, 0x88, 0x4f, 0x21, 0x49, 0xff, 0xc0, 0x0e, 0x7a,
+	0x29, 0xbf, 0x7e, 0xbf, 0x3f, 0xf9, 0x7d, 0x1f, 0xc0, 0x42, 0x29, 0xb1, 0xcb, 0x10, 0x4f, 0x35,
+	0x6a, 0xa0, 0x41, 0x07, 0x8c, 0x32, 0x59, 0x17, 0x1a, 0x6d, 0x79, 0x51, 0xf2, 0x5c, 0xc8, 0x57,
+	0x5d, 0xf1, 0xaa, 0xd6, 0xb0, 0xdc, 0xab, 0x4a, 0x79, 0x93, 0x46, 0x09, 0x79, 0xaa, 0x61, 0x6f,
+	0x82, 0x07, 0x0c, 0xad, 0xe9, 0xea, 0xba, 0xcb, 0x2c, 0x73, 0xc4, 0xa5, 0x54, 0x15, 0xaf, 0x72,
+	0x25, 0x5b, 0xf3, 0xec, 0x1d, 0x78, 0xf3, 0x36, 0x75, 0x6d, 0x43, 0x99, 0xac, 0x8b, 0xd9, 0x13,
+	0x38, 0x3f, 0x9e, 0x7a, 0x17, 0x60, 0xbc, 0x09, 0xd7, 0x11, 0x9b, 0x2f, 0x6f, 0x97, 0x2c, 0x70,
+	0x4f, 0xbc, 0x31, 0x38, 0xdb, 0x84, 0x77, 0xe1, 0xea, 0x39, 0x74, 0x07, 0xe6, 0x87, 0x85, 0xd4,
+	0xbf, 0x67, 0x81, 0xeb, 0x78, 0x00, 0x8c, 0x22, 0xba, 0x59, 0xb3, 0xc0, 0x1d, 0x1a, 0xe2, 0x91,
+	0x3d, 0xac, 0x62, 0x16, 0xb8, 0xa7, 0xfe, 0xf7, 0x00, 0x4c, 0xb7, 0xaa, 0x80, 0xff, 0xf6, 0xf5,
+	0x2f, 0x8f, 0x5f, 0x8e, 0x4c, 0xcd, 0x68, 0xf0, 0xe2, 0xb7, 0x2e, 0xa1, 0x76, 0x5c, 0x0a, 0xa8,
+	0xf6, 0x02, 0x89, 0x4c, 0xda, 0x25, 0xba, 0x53, 0x95, 0xb9, 0xfe, 0xe3, 0x72, 0x37, 0xf6, 0xfb,
+	0xe1, 0x0c, 0x17, 0x94, 0x7e, 0x3a, 0x93, 0x45, 0x13, 0x45, 0x53, 0x0d, 0x1b, 0x68, 0x50, 0x8c,
+	0xa1, 0xd9, 0x5d, 0x7f, 0x75, 0x7c, 0x42, 0x53, 0x9d, 0xf4, 0x7c, 0x12, 0xe3, 0xc4, 0xf2, 0x3f,
+	0xce, 0xb4, 0x19, 0x12, 0x42, 0x53, 0x4d, 0x48, 0xaf, 0x20, 0x24, 0xc6, 0x84, 0x58, 0xcd, 0xdb,
+	0xc8, 0x16, 0xc3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x40, 0xc4, 0x78, 0x9f, 0xd1, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/change_status_operation.pb.go b/googleapis/ads/googleads/v3/enums/change_status_operation.pb.go
new file mode 100644
index 0000000..c7f2268
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/change_status_operation.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/change_status_operation.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Status of the changed resource
+type ChangeStatusOperationEnum_ChangeStatusOperation int32
+
+const (
+	// No value has been specified.
+	ChangeStatusOperationEnum_UNSPECIFIED ChangeStatusOperationEnum_ChangeStatusOperation = 0
+	// Used for return value only. Represents an unclassified resource unknown
+	// in this version.
+	ChangeStatusOperationEnum_UNKNOWN ChangeStatusOperationEnum_ChangeStatusOperation = 1
+	// The resource was created.
+	ChangeStatusOperationEnum_ADDED ChangeStatusOperationEnum_ChangeStatusOperation = 2
+	// The resource was modified.
+	ChangeStatusOperationEnum_CHANGED ChangeStatusOperationEnum_ChangeStatusOperation = 3
+	// The resource was removed.
+	ChangeStatusOperationEnum_REMOVED ChangeStatusOperationEnum_ChangeStatusOperation = 4
+)
+
+var ChangeStatusOperationEnum_ChangeStatusOperation_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADDED",
+	3: "CHANGED",
+	4: "REMOVED",
+}
+
+var ChangeStatusOperationEnum_ChangeStatusOperation_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADDED":       2,
+	"CHANGED":     3,
+	"REMOVED":     4,
+}
+
+func (x ChangeStatusOperationEnum_ChangeStatusOperation) String() string {
+	return proto.EnumName(ChangeStatusOperationEnum_ChangeStatusOperation_name, int32(x))
+}
+
+func (ChangeStatusOperationEnum_ChangeStatusOperation) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_52f8f4521d0e81d3, []int{0, 0}
+}
+
+// Container for enum describing operations for the ChangeStatus resource.
+type ChangeStatusOperationEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusOperationEnum) Reset()         { *m = ChangeStatusOperationEnum{} }
+func (m *ChangeStatusOperationEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusOperationEnum) ProtoMessage()    {}
+func (*ChangeStatusOperationEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_52f8f4521d0e81d3, []int{0}
+}
+
+func (m *ChangeStatusOperationEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusOperationEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Marshal(b, m, deterministic)
+}
+func (m *ChangeStatusOperationEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusOperationEnum.Merge(m, src)
+}
+func (m *ChangeStatusOperationEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Size(m)
+}
+func (m *ChangeStatusOperationEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusOperationEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusOperationEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ChangeStatusOperationEnum_ChangeStatusOperation", ChangeStatusOperationEnum_ChangeStatusOperation_name, ChangeStatusOperationEnum_ChangeStatusOperation_value)
+	proto.RegisterType((*ChangeStatusOperationEnum)(nil), "google.ads.googleads.v3.enums.ChangeStatusOperationEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/change_status_operation.proto", fileDescriptor_52f8f4521d0e81d3)
+}
+
+var fileDescriptor_52f8f4521d0e81d3 = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4e, 0x02, 0x31,
+	0x14, 0xc6, 0x65, 0xf0, 0x4f, 0x2c, 0x0b, 0x27, 0x93, 0xb8, 0x90, 0xc8, 0x02, 0x0e, 0xd0, 0x2e,
+	0xba, 0x2b, 0xab, 0x42, 0x2b, 0x12, 0xe3, 0x40, 0x24, 0x8c, 0x09, 0x99, 0x84, 0x54, 0x66, 0x52,
+	0x49, 0xa0, 0x9d, 0xd0, 0x01, 0xef, 0xe3, 0xd2, 0xa3, 0x78, 0x14, 0x37, 0x5e, 0xc1, 0xb4, 0x75,
+	0x66, 0x85, 0x6e, 0x9a, 0xaf, 0xef, 0x7b, 0xbf, 0xaf, 0xaf, 0x0f, 0xf4, 0xa5, 0xd6, 0x72, 0x93,
+	0x23, 0x91, 0x19, 0xe4, 0xa5, 0x55, 0x07, 0x8c, 0x72, 0xb5, 0xdf, 0x1a, 0xb4, 0x7a, 0x15, 0x4a,
+	0xe6, 0x4b, 0x53, 0x8a, 0x72, 0x6f, 0x96, 0xba, 0xc8, 0x77, 0xa2, 0x5c, 0x6b, 0x05, 0x8b, 0x9d,
+	0x2e, 0x75, 0xd4, 0xf1, 0x04, 0x14, 0x99, 0x81, 0x35, 0x0c, 0x0f, 0x18, 0x3a, 0xb8, 0x7d, 0x5b,
+	0x65, 0x17, 0x6b, 0x24, 0x94, 0xd2, 0xa5, 0x63, 0x8d, 0x87, 0x7b, 0x6f, 0xe0, 0x66, 0xe8, 0xd2,
+	0x67, 0x2e, 0x7c, 0x52, 0x65, 0x73, 0xb5, 0xdf, 0xf6, 0x16, 0xe0, 0xfa, 0xa8, 0x19, 0x5d, 0x81,
+	0xd6, 0x3c, 0x9e, 0x4d, 0xf9, 0x70, 0x7c, 0x37, 0xe6, 0x2c, 0x3c, 0x89, 0x5a, 0xe0, 0x62, 0x1e,
+	0x3f, 0xc4, 0x93, 0xe7, 0x38, 0x6c, 0x44, 0x97, 0xe0, 0x8c, 0x32, 0xc6, 0x59, 0x18, 0xd8, 0xfa,
+	0xf0, 0x9e, 0xc6, 0x23, 0xce, 0xc2, 0xa6, 0xbd, 0x3c, 0xf1, 0xc7, 0x49, 0xc2, 0x59, 0x78, 0x3a,
+	0xf8, 0x6e, 0x80, 0xee, 0x4a, 0x6f, 0xe1, 0xbf, 0xc3, 0x0f, 0xda, 0x47, 0xdf, 0x9f, 0xda, 0xd1,
+	0xa7, 0x8d, 0xc5, 0xe0, 0x17, 0x96, 0x7a, 0x23, 0x94, 0x84, 0x7a, 0x27, 0x91, 0xcc, 0x95, 0xfb,
+	0x58, 0xb5, 0xc6, 0x62, 0x6d, 0xfe, 0xd8, 0x6a, 0xdf, 0x9d, 0xef, 0x41, 0x73, 0x44, 0xe9, 0x47,
+	0xd0, 0x19, 0xf9, 0x28, 0x9a, 0x19, 0xe8, 0xa5, 0x55, 0x09, 0x86, 0x76, 0x11, 0xe6, 0xb3, 0xf2,
+	0x53, 0x9a, 0x99, 0xb4, 0xf6, 0xd3, 0x04, 0xa7, 0xce, 0xff, 0x0a, 0xba, 0xbe, 0x48, 0x08, 0xcd,
+	0x0c, 0x21, 0x75, 0x07, 0x21, 0x09, 0x26, 0xc4, 0xf5, 0xbc, 0x9c, 0xbb, 0xc1, 0xf0, 0x4f, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x09, 0x2a, 0x56, 0xb5, 0xed, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/change_status_resource_type.pb.go b/googleapis/ads/googleads/v3/enums/change_status_resource_type.pb.go
new file mode 100644
index 0000000..ed4f9d0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/change_status_resource_type.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/change_status_resource_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the resource types support by the ChangeStatus resource.
+type ChangeStatusResourceTypeEnum_ChangeStatusResourceType int32
+
+const (
+	// No value has been specified.
+	ChangeStatusResourceTypeEnum_UNSPECIFIED ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 0
+	// Used for return value only. Represents an unclassified resource unknown
+	// in this version.
+	ChangeStatusResourceTypeEnum_UNKNOWN ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 1
+	// An AdGroup resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 3
+	// An AdGroupAd resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_AD ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 4
+	// An AdGroupCriterion resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_CRITERION ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 5
+	// A Campaign resource change.
+	ChangeStatusResourceTypeEnum_CAMPAIGN ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 6
+	// A CampaignCriterion resource change.
+	ChangeStatusResourceTypeEnum_CAMPAIGN_CRITERION ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 7
+	// A Feed resource change.
+	ChangeStatusResourceTypeEnum_FEED ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 9
+	// A FeedItem resource change.
+	ChangeStatusResourceTypeEnum_FEED_ITEM ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 10
+	// An AdGroupFeed resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_FEED ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 11
+	// A CampaignFeed resource change.
+	ChangeStatusResourceTypeEnum_CAMPAIGN_FEED ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 12
+	// An AdGroupBidModifier resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_BID_MODIFIER ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 13
+)
+
+var ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "AD_GROUP",
+	4:  "AD_GROUP_AD",
+	5:  "AD_GROUP_CRITERION",
+	6:  "CAMPAIGN",
+	7:  "CAMPAIGN_CRITERION",
+	9:  "FEED",
+	10: "FEED_ITEM",
+	11: "AD_GROUP_FEED",
+	12: "CAMPAIGN_FEED",
+	13: "AD_GROUP_BID_MODIFIER",
+}
+
+var ChangeStatusResourceTypeEnum_ChangeStatusResourceType_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"AD_GROUP":              3,
+	"AD_GROUP_AD":           4,
+	"AD_GROUP_CRITERION":    5,
+	"CAMPAIGN":              6,
+	"CAMPAIGN_CRITERION":    7,
+	"FEED":                  9,
+	"FEED_ITEM":             10,
+	"AD_GROUP_FEED":         11,
+	"CAMPAIGN_FEED":         12,
+	"AD_GROUP_BID_MODIFIER": 13,
+}
+
+func (x ChangeStatusResourceTypeEnum_ChangeStatusResourceType) String() string {
+	return proto.EnumName(ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name, int32(x))
+}
+
+func (ChangeStatusResourceTypeEnum_ChangeStatusResourceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ead06545f0260510, []int{0, 0}
+}
+
+// Container for enum describing supported resource types for the ChangeStatus
+// resource.
+type ChangeStatusResourceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusResourceTypeEnum) Reset()         { *m = ChangeStatusResourceTypeEnum{} }
+func (m *ChangeStatusResourceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusResourceTypeEnum) ProtoMessage()    {}
+func (*ChangeStatusResourceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ead06545f0260510, []int{0}
+}
+
+func (m *ChangeStatusResourceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusResourceTypeEnum.Merge(m, src)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Size(m)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusResourceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusResourceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType", ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name, ChangeStatusResourceTypeEnum_ChangeStatusResourceType_value)
+	proto.RegisterType((*ChangeStatusResourceTypeEnum)(nil), "google.ads.googleads.v3.enums.ChangeStatusResourceTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/change_status_resource_type.proto", fileDescriptor_ead06545f0260510)
+}
+
+var fileDescriptor_ead06545f0260510 = []byte{
+	// 406 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcd, 0x8a, 0xd4, 0x40,
+	0x10, 0xc7, 0x4d, 0x76, 0xdd, 0x8f, 0x9e, 0x1d, 0x6c, 0x1b, 0x14, 0x95, 0x9d, 0xc3, 0xee, 0x03,
+	0x74, 0x0e, 0xb9, 0xb5, 0x07, 0xe9, 0x7c, 0x6c, 0x08, 0x32, 0x49, 0xc8, 0x7c, 0x08, 0x12, 0x08,
+	0x71, 0xd2, 0xc4, 0x81, 0x99, 0xee, 0x90, 0x4e, 0x06, 0xe6, 0x2d, 0x7c, 0x06, 0x8f, 0x3e, 0x8a,
+	0x8f, 0xe2, 0x45, 0xf0, 0x09, 0xa4, 0x3b, 0x93, 0xe0, 0x65, 0xbc, 0x84, 0x7f, 0x55, 0xfd, 0xea,
+	0x5f, 0xe9, 0x2a, 0xf0, 0xa1, 0x12, 0xa2, 0xda, 0x31, 0xab, 0x28, 0xa5, 0xd5, 0x4b, 0xa5, 0x0e,
+	0xb6, 0xc5, 0x78, 0xb7, 0x97, 0xd6, 0xe6, 0x6b, 0xc1, 0x2b, 0x96, 0xcb, 0xb6, 0x68, 0x3b, 0x99,
+	0x37, 0x4c, 0x8a, 0xae, 0xd9, 0xb0, 0xbc, 0x3d, 0xd6, 0x0c, 0xd7, 0x8d, 0x68, 0x05, 0x9a, 0xf5,
+	0x5d, 0xb8, 0x28, 0x25, 0x1e, 0x0d, 0xf0, 0xc1, 0xc6, 0xda, 0xe0, 0xdd, 0xfd, 0xe0, 0x5f, 0x6f,
+	0xad, 0x82, 0x73, 0xd1, 0x16, 0xed, 0x56, 0x70, 0xd9, 0x37, 0x3f, 0x7e, 0x33, 0xc1, 0xbd, 0xab,
+	0x47, 0x2c, 0xf4, 0x84, 0xf4, 0x34, 0x60, 0x79, 0xac, 0x99, 0xcf, 0xbb, 0xfd, 0xe3, 0x6f, 0x03,
+	0xbc, 0x39, 0x07, 0xa0, 0x17, 0x60, 0xb2, 0x8a, 0x16, 0x89, 0xef, 0x86, 0x4f, 0xa1, 0xef, 0xc1,
+	0x67, 0x68, 0x02, 0xae, 0x57, 0xd1, 0xc7, 0x28, 0xfe, 0x14, 0x41, 0x03, 0xdd, 0x81, 0x1b, 0xea,
+	0xe5, 0x41, 0x1a, 0xaf, 0x12, 0x78, 0xa1, 0xd8, 0x21, 0xca, 0xa9, 0x07, 0x2f, 0xd1, 0x6b, 0x80,
+	0xc6, 0x84, 0x9b, 0x86, 0x4b, 0x3f, 0x0d, 0xe3, 0x08, 0x3e, 0x57, 0x6d, 0x2e, 0x9d, 0x27, 0x34,
+	0x0c, 0x22, 0x78, 0xa5, 0xa8, 0x21, 0xfa, 0x87, 0xba, 0x46, 0x37, 0xe0, 0xf2, 0xc9, 0xf7, 0x3d,
+	0x78, 0x8b, 0xa6, 0xe0, 0x56, 0xa9, 0x3c, 0x5c, 0xfa, 0x73, 0x08, 0xd0, 0x4b, 0x30, 0x1d, 0x6d,
+	0x35, 0x31, 0x51, 0xa9, 0xd1, 0x43, 0xa7, 0xee, 0xd0, 0x5b, 0xf0, 0x6a, 0xa4, 0x9c, 0xd0, 0xcb,
+	0xe7, 0xb1, 0xa7, 0xde, 0x90, 0xc2, 0xa9, 0xf3, 0xc7, 0x00, 0x0f, 0x1b, 0xb1, 0xc7, 0xff, 0x5d,
+	0xab, 0x33, 0x3b, 0xb7, 0x94, 0x44, 0xed, 0x35, 0x31, 0x3e, 0x3b, 0xa7, 0xfe, 0x4a, 0xec, 0x0a,
+	0x5e, 0x61, 0xd1, 0x54, 0x56, 0xc5, 0xb8, 0xde, 0xfa, 0x70, 0xe7, 0x7a, 0x2b, 0xcf, 0x9c, 0xfd,
+	0xbd, 0xfe, 0x7e, 0x37, 0x2f, 0x02, 0x4a, 0x7f, 0x98, 0xb3, 0xa0, 0xb7, 0xa2, 0xa5, 0xc4, 0xbd,
+	0x54, 0x6a, 0x6d, 0x63, 0x75, 0x21, 0xf9, 0x73, 0xa8, 0x67, 0xb4, 0x94, 0xd9, 0x58, 0xcf, 0xd6,
+	0x76, 0xa6, 0xeb, 0xbf, 0xcc, 0x87, 0x3e, 0x49, 0x08, 0x2d, 0x25, 0x21, 0x23, 0x41, 0xc8, 0xda,
+	0x26, 0x44, 0x33, 0x5f, 0xae, 0xf4, 0x8f, 0xd9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x24, 0x36,
+	0x02, 0xfd, 0x8e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/click_type.pb.go b/googleapis/ads/googleads/v3/enums/click_type.pb.go
new file mode 100644
index 0000000..740d41e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/click_type.pb.go
@@ -0,0 +1,368 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/click_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates Google Ads click types.
+type ClickTypeEnum_ClickType int32
+
+const (
+	// Not specified.
+	ClickTypeEnum_UNSPECIFIED ClickTypeEnum_ClickType = 0
+	// The value is unknown in this version.
+	ClickTypeEnum_UNKNOWN ClickTypeEnum_ClickType = 1
+	// App engagement ad deep link.
+	ClickTypeEnum_APP_DEEPLINK ClickTypeEnum_ClickType = 2
+	// Breadcrumbs.
+	ClickTypeEnum_BREADCRUMBS ClickTypeEnum_ClickType = 3
+	// Broadband Plan.
+	ClickTypeEnum_BROADBAND_PLAN ClickTypeEnum_ClickType = 4
+	// Manually dialed phone calls.
+	ClickTypeEnum_CALL_TRACKING ClickTypeEnum_ClickType = 5
+	// Phone calls.
+	ClickTypeEnum_CALLS ClickTypeEnum_ClickType = 6
+	// Click on engagement ad.
+	ClickTypeEnum_CLICK_ON_ENGAGEMENT_AD ClickTypeEnum_ClickType = 7
+	// Driving direction.
+	ClickTypeEnum_GET_DIRECTIONS ClickTypeEnum_ClickType = 8
+	// Get location details.
+	ClickTypeEnum_LOCATION_EXPANSION ClickTypeEnum_ClickType = 9
+	// Call.
+	ClickTypeEnum_LOCATION_FORMAT_CALL ClickTypeEnum_ClickType = 10
+	// Directions.
+	ClickTypeEnum_LOCATION_FORMAT_DIRECTIONS ClickTypeEnum_ClickType = 11
+	// Image(s).
+	ClickTypeEnum_LOCATION_FORMAT_IMAGE ClickTypeEnum_ClickType = 12
+	// Go to landing page.
+	ClickTypeEnum_LOCATION_FORMAT_LANDING_PAGE ClickTypeEnum_ClickType = 13
+	// Map.
+	ClickTypeEnum_LOCATION_FORMAT_MAP ClickTypeEnum_ClickType = 14
+	// Go to store info.
+	ClickTypeEnum_LOCATION_FORMAT_STORE_INFO ClickTypeEnum_ClickType = 15
+	// Text.
+	ClickTypeEnum_LOCATION_FORMAT_TEXT ClickTypeEnum_ClickType = 16
+	// Mobile phone calls.
+	ClickTypeEnum_MOBILE_CALL_TRACKING ClickTypeEnum_ClickType = 17
+	// Print offer.
+	ClickTypeEnum_OFFER_PRINTS ClickTypeEnum_ClickType = 18
+	// Other.
+	ClickTypeEnum_OTHER ClickTypeEnum_ClickType = 19
+	// Product plusbox offer.
+	ClickTypeEnum_PRODUCT_EXTENSION_CLICKS ClickTypeEnum_ClickType = 20
+	// Shopping - Product - Online.
+	ClickTypeEnum_PRODUCT_LISTING_AD_CLICKS ClickTypeEnum_ClickType = 21
+	// Sitelink.
+	ClickTypeEnum_SITELINKS ClickTypeEnum_ClickType = 22
+	// Show nearby locations.
+	ClickTypeEnum_STORE_LOCATOR ClickTypeEnum_ClickType = 23
+	// Headline.
+	ClickTypeEnum_URL_CLICKS ClickTypeEnum_ClickType = 25
+	// App store.
+	ClickTypeEnum_VIDEO_APP_STORE_CLICKS ClickTypeEnum_ClickType = 26
+	// Call-to-Action overlay.
+	ClickTypeEnum_VIDEO_CALL_TO_ACTION_CLICKS ClickTypeEnum_ClickType = 27
+	// Cards.
+	ClickTypeEnum_VIDEO_CARD_ACTION_HEADLINE_CLICKS ClickTypeEnum_ClickType = 28
+	// End cap.
+	ClickTypeEnum_VIDEO_END_CAP_CLICKS ClickTypeEnum_ClickType = 29
+	// Website.
+	ClickTypeEnum_VIDEO_WEBSITE_CLICKS ClickTypeEnum_ClickType = 30
+	// Visual Sitelinks.
+	ClickTypeEnum_VISUAL_SITELINKS ClickTypeEnum_ClickType = 31
+	// Wireless Plan.
+	ClickTypeEnum_WIRELESS_PLAN ClickTypeEnum_ClickType = 32
+	// Shopping - Product - Local.
+	ClickTypeEnum_PRODUCT_LISTING_AD_LOCAL ClickTypeEnum_ClickType = 33
+	// Shopping - Product - MultiChannel Local.
+	ClickTypeEnum_PRODUCT_LISTING_AD_MULTICHANNEL_LOCAL ClickTypeEnum_ClickType = 34
+	// Shopping - Product - MultiChannel Online.
+	ClickTypeEnum_PRODUCT_LISTING_AD_MULTICHANNEL_ONLINE ClickTypeEnum_ClickType = 35
+	// Shopping - Product - Coupon.
+	ClickTypeEnum_PRODUCT_LISTING_ADS_COUPON ClickTypeEnum_ClickType = 36
+	// Shopping - Product - Sell on Google.
+	ClickTypeEnum_PRODUCT_LISTING_AD_TRANSACTABLE ClickTypeEnum_ClickType = 37
+	// Shopping - Product - App engagement ad deep link.
+	ClickTypeEnum_PRODUCT_AD_APP_DEEPLINK ClickTypeEnum_ClickType = 38
+	// Shopping - Showcase - Category.
+	ClickTypeEnum_SHOWCASE_AD_CATEGORY_LINK ClickTypeEnum_ClickType = 39
+	// Shopping - Showcase - Local storefront.
+	ClickTypeEnum_SHOWCASE_AD_LOCAL_STOREFRONT_LINK ClickTypeEnum_ClickType = 40
+	// Shopping - Showcase - Online product.
+	ClickTypeEnum_SHOWCASE_AD_ONLINE_PRODUCT_LINK ClickTypeEnum_ClickType = 42
+	// Shopping - Showcase - Local product.
+	ClickTypeEnum_SHOWCASE_AD_LOCAL_PRODUCT_LINK ClickTypeEnum_ClickType = 43
+	// Promotion Extension.
+	ClickTypeEnum_PROMOTION_EXTENSION ClickTypeEnum_ClickType = 44
+	// Ad Headline.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_HEADLINE ClickTypeEnum_ClickType = 45
+	// Swipes.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SWIPES ClickTypeEnum_ClickType = 46
+	// See More.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SEE_MORE ClickTypeEnum_ClickType = 47
+	// Sitelink 1.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SITELINK_ONE ClickTypeEnum_ClickType = 48
+	// Sitelink 2.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SITELINK_TWO ClickTypeEnum_ClickType = 49
+	// Sitelink 3.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SITELINK_THREE ClickTypeEnum_ClickType = 50
+	// Sitelink 4.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SITELINK_FOUR ClickTypeEnum_ClickType = 51
+	// Sitelink 5.
+	ClickTypeEnum_SWIPEABLE_GALLERY_AD_SITELINK_FIVE ClickTypeEnum_ClickType = 52
+	// Hotel price.
+	ClickTypeEnum_HOTEL_PRICE ClickTypeEnum_ClickType = 53
+	// Price Extension.
+	ClickTypeEnum_PRICE_EXTENSION ClickTypeEnum_ClickType = 54
+	// Book on Google hotel room selection.
+	ClickTypeEnum_HOTEL_BOOK_ON_GOOGLE_ROOM_SELECTION ClickTypeEnum_ClickType = 55
+	// Shopping - Comparison Listing.
+	ClickTypeEnum_SHOPPING_COMPARISON_LISTING ClickTypeEnum_ClickType = 56
+)
+
+var ClickTypeEnum_ClickType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "APP_DEEPLINK",
+	3:  "BREADCRUMBS",
+	4:  "BROADBAND_PLAN",
+	5:  "CALL_TRACKING",
+	6:  "CALLS",
+	7:  "CLICK_ON_ENGAGEMENT_AD",
+	8:  "GET_DIRECTIONS",
+	9:  "LOCATION_EXPANSION",
+	10: "LOCATION_FORMAT_CALL",
+	11: "LOCATION_FORMAT_DIRECTIONS",
+	12: "LOCATION_FORMAT_IMAGE",
+	13: "LOCATION_FORMAT_LANDING_PAGE",
+	14: "LOCATION_FORMAT_MAP",
+	15: "LOCATION_FORMAT_STORE_INFO",
+	16: "LOCATION_FORMAT_TEXT",
+	17: "MOBILE_CALL_TRACKING",
+	18: "OFFER_PRINTS",
+	19: "OTHER",
+	20: "PRODUCT_EXTENSION_CLICKS",
+	21: "PRODUCT_LISTING_AD_CLICKS",
+	22: "SITELINKS",
+	23: "STORE_LOCATOR",
+	25: "URL_CLICKS",
+	26: "VIDEO_APP_STORE_CLICKS",
+	27: "VIDEO_CALL_TO_ACTION_CLICKS",
+	28: "VIDEO_CARD_ACTION_HEADLINE_CLICKS",
+	29: "VIDEO_END_CAP_CLICKS",
+	30: "VIDEO_WEBSITE_CLICKS",
+	31: "VISUAL_SITELINKS",
+	32: "WIRELESS_PLAN",
+	33: "PRODUCT_LISTING_AD_LOCAL",
+	34: "PRODUCT_LISTING_AD_MULTICHANNEL_LOCAL",
+	35: "PRODUCT_LISTING_AD_MULTICHANNEL_ONLINE",
+	36: "PRODUCT_LISTING_ADS_COUPON",
+	37: "PRODUCT_LISTING_AD_TRANSACTABLE",
+	38: "PRODUCT_AD_APP_DEEPLINK",
+	39: "SHOWCASE_AD_CATEGORY_LINK",
+	40: "SHOWCASE_AD_LOCAL_STOREFRONT_LINK",
+	42: "SHOWCASE_AD_ONLINE_PRODUCT_LINK",
+	43: "SHOWCASE_AD_LOCAL_PRODUCT_LINK",
+	44: "PROMOTION_EXTENSION",
+	45: "SWIPEABLE_GALLERY_AD_HEADLINE",
+	46: "SWIPEABLE_GALLERY_AD_SWIPES",
+	47: "SWIPEABLE_GALLERY_AD_SEE_MORE",
+	48: "SWIPEABLE_GALLERY_AD_SITELINK_ONE",
+	49: "SWIPEABLE_GALLERY_AD_SITELINK_TWO",
+	50: "SWIPEABLE_GALLERY_AD_SITELINK_THREE",
+	51: "SWIPEABLE_GALLERY_AD_SITELINK_FOUR",
+	52: "SWIPEABLE_GALLERY_AD_SITELINK_FIVE",
+	53: "HOTEL_PRICE",
+	54: "PRICE_EXTENSION",
+	55: "HOTEL_BOOK_ON_GOOGLE_ROOM_SELECTION",
+	56: "SHOPPING_COMPARISON_LISTING",
+}
+
+var ClickTypeEnum_ClickType_value = map[string]int32{
+	"UNSPECIFIED":                            0,
+	"UNKNOWN":                                1,
+	"APP_DEEPLINK":                           2,
+	"BREADCRUMBS":                            3,
+	"BROADBAND_PLAN":                         4,
+	"CALL_TRACKING":                          5,
+	"CALLS":                                  6,
+	"CLICK_ON_ENGAGEMENT_AD":                 7,
+	"GET_DIRECTIONS":                         8,
+	"LOCATION_EXPANSION":                     9,
+	"LOCATION_FORMAT_CALL":                   10,
+	"LOCATION_FORMAT_DIRECTIONS":             11,
+	"LOCATION_FORMAT_IMAGE":                  12,
+	"LOCATION_FORMAT_LANDING_PAGE":           13,
+	"LOCATION_FORMAT_MAP":                    14,
+	"LOCATION_FORMAT_STORE_INFO":             15,
+	"LOCATION_FORMAT_TEXT":                   16,
+	"MOBILE_CALL_TRACKING":                   17,
+	"OFFER_PRINTS":                           18,
+	"OTHER":                                  19,
+	"PRODUCT_EXTENSION_CLICKS":               20,
+	"PRODUCT_LISTING_AD_CLICKS":              21,
+	"SITELINKS":                              22,
+	"STORE_LOCATOR":                          23,
+	"URL_CLICKS":                             25,
+	"VIDEO_APP_STORE_CLICKS":                 26,
+	"VIDEO_CALL_TO_ACTION_CLICKS":            27,
+	"VIDEO_CARD_ACTION_HEADLINE_CLICKS":      28,
+	"VIDEO_END_CAP_CLICKS":                   29,
+	"VIDEO_WEBSITE_CLICKS":                   30,
+	"VISUAL_SITELINKS":                       31,
+	"WIRELESS_PLAN":                          32,
+	"PRODUCT_LISTING_AD_LOCAL":               33,
+	"PRODUCT_LISTING_AD_MULTICHANNEL_LOCAL":  34,
+	"PRODUCT_LISTING_AD_MULTICHANNEL_ONLINE": 35,
+	"PRODUCT_LISTING_ADS_COUPON":             36,
+	"PRODUCT_LISTING_AD_TRANSACTABLE":        37,
+	"PRODUCT_AD_APP_DEEPLINK":                38,
+	"SHOWCASE_AD_CATEGORY_LINK":              39,
+	"SHOWCASE_AD_LOCAL_STOREFRONT_LINK":      40,
+	"SHOWCASE_AD_ONLINE_PRODUCT_LINK":        42,
+	"SHOWCASE_AD_LOCAL_PRODUCT_LINK":         43,
+	"PROMOTION_EXTENSION":                    44,
+	"SWIPEABLE_GALLERY_AD_HEADLINE":          45,
+	"SWIPEABLE_GALLERY_AD_SWIPES":            46,
+	"SWIPEABLE_GALLERY_AD_SEE_MORE":          47,
+	"SWIPEABLE_GALLERY_AD_SITELINK_ONE":      48,
+	"SWIPEABLE_GALLERY_AD_SITELINK_TWO":      49,
+	"SWIPEABLE_GALLERY_AD_SITELINK_THREE":    50,
+	"SWIPEABLE_GALLERY_AD_SITELINK_FOUR":     51,
+	"SWIPEABLE_GALLERY_AD_SITELINK_FIVE":     52,
+	"HOTEL_PRICE":                            53,
+	"PRICE_EXTENSION":                        54,
+	"HOTEL_BOOK_ON_GOOGLE_ROOM_SELECTION":    55,
+	"SHOPPING_COMPARISON_LISTING":            56,
+}
+
+func (x ClickTypeEnum_ClickType) String() string {
+	return proto.EnumName(ClickTypeEnum_ClickType_name, int32(x))
+}
+
+func (ClickTypeEnum_ClickType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ca334f107a4ef54e, []int{0, 0}
+}
+
+// Container for enumeration of Google Ads click types.
+type ClickTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ClickTypeEnum) Reset()         { *m = ClickTypeEnum{} }
+func (m *ClickTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ClickTypeEnum) ProtoMessage()    {}
+func (*ClickTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca334f107a4ef54e, []int{0}
+}
+
+func (m *ClickTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClickTypeEnum.Unmarshal(m, b)
+}
+func (m *ClickTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClickTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ClickTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClickTypeEnum.Merge(m, src)
+}
+func (m *ClickTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ClickTypeEnum.Size(m)
+}
+func (m *ClickTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClickTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClickTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ClickTypeEnum_ClickType", ClickTypeEnum_ClickType_name, ClickTypeEnum_ClickType_value)
+	proto.RegisterType((*ClickTypeEnum)(nil), "google.ads.googleads.v3.enums.ClickTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/click_type.proto", fileDescriptor_ca334f107a4ef54e)
+}
+
+var fileDescriptor_ca334f107a4ef54e = []byte{
+	// 947 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x52, 0x1b, 0x37,
+	0x14, 0xc7, 0x1b, 0xd2, 0x24, 0x45, 0x7c, 0x9d, 0x08, 0x02, 0xe1, 0x3b, 0x40, 0x21, 0x6d, 0xda,
+	0xae, 0xdb, 0xba, 0x5f, 0xe3, 0x5e, 0x69, 0x77, 0x8f, 0xd7, 0x1a, 0xb4, 0xd2, 0x8e, 0x24, 0xdb,
+	0xa4, 0xc3, 0x8c, 0x86, 0x02, 0xe3, 0x61, 0x0a, 0x36, 0x13, 0x93, 0xcc, 0xe4, 0x3d, 0xfa, 0x04,
+	0xbd, 0xe8, 0x45, 0x1f, 0xa5, 0xaf, 0xd1, 0xbb, 0x3e, 0x45, 0x47, 0xbb, 0x5e, 0x63, 0x88, 0x13,
+	0x7a, 0xe3, 0x91, 0xf5, 0xff, 0xe9, 0xec, 0xf9, 0x92, 0x0e, 0x09, 0x3a, 0xbd, 0x5e, 0xe7, 0xfc,
+	0xb4, 0x72, 0x74, 0xd2, 0xaf, 0x14, 0x4b, 0xbf, 0x7a, 0x53, 0xad, 0x9c, 0x76, 0x5f, 0x5f, 0xf4,
+	0x2b, 0xc7, 0xe7, 0x67, 0xc7, 0xbf, 0xb9, 0xab, 0xb7, 0x97, 0xa7, 0xc1, 0xe5, 0xab, 0xde, 0x55,
+	0x8f, 0xae, 0x17, 0x50, 0x70, 0x74, 0xd2, 0x0f, 0x86, 0x7c, 0xf0, 0xa6, 0x1a, 0xe4, 0xfc, 0xca,
+	0x5a, 0x69, 0xee, 0xf2, 0xac, 0x72, 0xd4, 0xed, 0xf6, 0xae, 0x8e, 0xae, 0xce, 0x7a, 0xdd, 0x7e,
+	0x71, 0x78, 0xfb, 0xcf, 0x69, 0x32, 0x13, 0x79, 0x8b, 0xf6, 0xed, 0xe5, 0x29, 0x76, 0x5f, 0x5f,
+	0x6c, 0xff, 0x3e, 0x4d, 0x26, 0x87, 0x3b, 0x74, 0x8e, 0x4c, 0x35, 0xa5, 0xc9, 0x30, 0xe2, 0x75,
+	0x8e, 0x31, 0x7c, 0x44, 0xa7, 0xc8, 0xa3, 0xa6, 0xdc, 0x97, 0xaa, 0x2d, 0xe1, 0x1e, 0x05, 0x32,
+	0xcd, 0xb2, 0xcc, 0xc5, 0x88, 0x99, 0xe0, 0x72, 0x1f, 0x26, 0x3c, 0x1f, 0x6a, 0x64, 0x71, 0xa4,
+	0x9b, 0x69, 0x68, 0xe0, 0x3e, 0xa5, 0x64, 0x36, 0xd4, 0x8a, 0xc5, 0x21, 0x93, 0xb1, 0xcb, 0x04,
+	0x93, 0xf0, 0x31, 0x7d, 0x4c, 0x66, 0x22, 0x26, 0x84, 0xb3, 0x9a, 0x45, 0xfb, 0x5c, 0x26, 0xf0,
+	0x80, 0x4e, 0x92, 0x07, 0x7e, 0xcb, 0xc0, 0x43, 0xba, 0x42, 0x16, 0x23, 0xc1, 0xa3, 0x7d, 0xa7,
+	0xa4, 0x43, 0x99, 0xb0, 0x04, 0x53, 0x94, 0xd6, 0xb1, 0x18, 0x1e, 0x79, 0x6b, 0x09, 0x5a, 0x17,
+	0x73, 0x8d, 0x91, 0xe5, 0x4a, 0x1a, 0xf8, 0x84, 0x2e, 0x12, 0x2a, 0x54, 0xc4, 0xfc, 0x5f, 0x87,
+	0x07, 0x19, 0x93, 0x86, 0x2b, 0x09, 0x93, 0xf4, 0x29, 0x59, 0x18, 0xee, 0xd7, 0x95, 0x4e, 0x99,
+	0x75, 0xfe, 0x13, 0x40, 0xe8, 0x06, 0x59, 0xb9, 0xad, 0x8c, 0x58, 0x9c, 0xa2, 0xcb, 0xe4, 0xc9,
+	0x6d, 0x9d, 0xa7, 0x2c, 0x41, 0x98, 0xa6, 0xcf, 0xc8, 0xda, 0x6d, 0x49, 0x30, 0x19, 0x73, 0x99,
+	0xb8, 0xcc, 0x13, 0x33, 0x74, 0x89, 0xcc, 0xdf, 0x26, 0x52, 0x96, 0xc1, 0xec, 0xb8, 0xaf, 0x1a,
+	0xab, 0x34, 0x3a, 0x2e, 0xeb, 0x0a, 0xe6, 0xc6, 0xf9, 0x6b, 0xf1, 0xc0, 0x02, 0x78, 0x25, 0x55,
+	0x21, 0x17, 0xe8, 0x6e, 0xa6, 0xed, 0xb1, 0x2f, 0x80, 0xaa, 0xd7, 0x51, 0xbb, 0x4c, 0x73, 0x69,
+	0x0d, 0x50, 0x9f, 0x48, 0x65, 0x1b, 0xa8, 0x61, 0x9e, 0xae, 0x91, 0xa7, 0x99, 0x56, 0x71, 0x33,
+	0xb2, 0x0e, 0x0f, 0x2c, 0xe6, 0x79, 0x71, 0x79, 0x6a, 0x0d, 0x2c, 0xd0, 0x75, 0xb2, 0x5c, 0xaa,
+	0x82, 0x1b, 0xeb, 0x23, 0x60, 0x71, 0x29, 0x3f, 0xa1, 0x33, 0x64, 0xd2, 0x70, 0x8b, 0xbe, 0xac,
+	0x06, 0x16, 0x7d, 0xc9, 0x0a, 0x67, 0x73, 0x17, 0x95, 0x86, 0x25, 0x3a, 0x4b, 0x48, 0x53, 0x8b,
+	0xf2, 0xc4, 0xb2, 0xaf, 0x5b, 0x8b, 0xc7, 0xa8, 0x9c, 0x6f, 0x89, 0x02, 0x1e, 0x68, 0x2b, 0x74,
+	0x93, 0xac, 0x16, 0x5a, 0x11, 0x80, 0x72, 0x2c, 0x4f, 0x76, 0x09, 0xac, 0xd2, 0x5d, 0xb2, 0x55,
+	0x02, 0x3a, 0x2e, 0xd5, 0x06, 0xb2, 0x58, 0x70, 0x39, 0xb4, 0xb3, 0xe6, 0x33, 0x51, 0x60, 0x28,
+	0x63, 0x17, 0xb1, 0xac, 0x54, 0xd6, 0xaf, 0x95, 0x36, 0x86, 0xde, 0xf1, 0x52, 0xd9, 0xa0, 0x0b,
+	0x04, 0x5a, 0xdc, 0x34, 0x99, 0x70, 0xd7, 0x01, 0x6d, 0xfa, 0x80, 0xda, 0x5c, 0xa3, 0x40, 0x63,
+	0x8a, 0xb6, 0x7c, 0x36, 0x9a, 0xaf, 0x91, 0x8c, 0xf8, 0x80, 0x05, 0x6c, 0xd1, 0xcf, 0xc9, 0xee,
+	0x18, 0x35, 0x6d, 0x0a, 0xcb, 0xa3, 0x06, 0x93, 0x12, 0xc5, 0x00, 0xdd, 0xa6, 0x2f, 0xc8, 0xde,
+	0x5d, 0xa8, 0x92, 0x3e, 0x30, 0xd8, 0xf1, 0x5d, 0xf1, 0x2e, 0x6b, 0x5c, 0xa4, 0x9a, 0x99, 0x92,
+	0xf0, 0x29, 0xdd, 0x21, 0x9b, 0x63, 0x6c, 0x59, 0xcd, 0xa4, 0x61, 0x91, 0x65, 0xa1, 0x40, 0xd8,
+	0xa5, 0xab, 0x64, 0xa9, 0x84, 0x58, 0xec, 0x6e, 0x5c, 0xc9, 0x3d, 0x5f, 0x68, 0xd3, 0x50, 0xed,
+	0x88, 0x19, 0xcc, 0x2b, 0xcc, 0x2c, 0x26, 0x4a, 0xbf, 0x74, 0xb9, 0xfc, 0xdc, 0x67, 0x7e, 0x54,
+	0xce, 0x63, 0x28, 0xca, 0x57, 0xd7, 0x4a, 0xda, 0x02, 0xfb, 0xcc, 0xfb, 0x31, 0x8a, 0x15, 0xfe,
+	0xbb, 0x6b, 0xd7, 0xe4, 0x3e, 0xbc, 0xa0, 0xdb, 0x64, 0xe3, 0x5d, 0x5b, 0x37, 0x98, 0x2f, 0xfc,
+	0xfd, 0xc8, 0xb4, 0x4a, 0xd5, 0xe0, 0xbe, 0x0e, 0xfa, 0x12, 0xbe, 0xa4, 0x5b, 0x64, 0xdd, 0xb4,
+	0x79, 0x86, 0x3e, 0x26, 0x97, 0x30, 0x21, 0x50, 0xbf, 0xf4, 0x56, 0xca, 0x2e, 0x80, 0xaf, 0x7c,
+	0x1b, 0x8d, 0x45, 0xf2, 0x4d, 0x03, 0xc1, 0x7b, 0x6d, 0x18, 0x44, 0x97, 0x2a, 0x8d, 0x50, 0xc9,
+	0xe3, 0x1d, 0x8b, 0x0c, 0x9a, 0xc3, 0x29, 0x89, 0xf0, 0xf5, 0xdd, 0x98, 0x6d, 0x2b, 0xf8, 0x86,
+	0x3e, 0x27, 0x3b, 0x77, 0x60, 0x0d, 0x8d, 0x08, 0xdf, 0xd2, 0x3d, 0xb2, 0xfd, 0x61, 0xb0, 0xae,
+	0x9a, 0x1a, 0xaa, 0xff, 0x83, 0xe3, 0x2d, 0x84, 0xef, 0xfc, 0x43, 0xdb, 0x50, 0x16, 0x7d, 0x7a,
+	0x79, 0x84, 0xf0, 0x3d, 0x9d, 0x27, 0x73, 0xf9, 0x72, 0x24, 0xa7, 0x3f, 0x78, 0xf7, 0x0a, 0x2a,
+	0x54, 0x2a, 0x7f, 0x50, 0x13, 0xa5, 0x12, 0x81, 0x4e, 0x2b, 0x95, 0x3a, 0x83, 0xa2, 0x78, 0xf3,
+	0xe0, 0xc7, 0x3c, 0xb3, 0x0d, 0x95, 0x65, 0xbe, 0xbf, 0x22, 0x95, 0x66, 0x4c, 0x73, 0xa3, 0x64,
+	0xd9, 0x72, 0xf0, 0x53, 0xf8, 0xcf, 0x3d, 0xb2, 0x75, 0xdc, 0xbb, 0x08, 0x3e, 0x38, 0x6c, 0xc2,
+	0xd9, 0xe1, 0xe4, 0xc8, 0xfc, 0x78, 0xc9, 0xee, 0xfd, 0x12, 0x0e, 0x0e, 0x74, 0x7a, 0xe7, 0x47,
+	0xdd, 0x4e, 0xd0, 0x7b, 0xd5, 0xa9, 0x74, 0x4e, 0xbb, 0xf9, 0xf0, 0x29, 0xa7, 0xdb, 0xe5, 0x59,
+	0xff, 0x3d, 0xc3, 0xee, 0xe7, 0xfc, 0xf7, 0x8f, 0x89, 0xfb, 0x09, 0x63, 0x7f, 0x4d, 0xac, 0x27,
+	0x85, 0x29, 0x76, 0xd2, 0x0f, 0x8a, 0xa5, 0x5f, 0xb5, 0xaa, 0x81, 0x9f, 0x5b, 0xfd, 0xbf, 0x4b,
+	0xfd, 0x90, 0x9d, 0xf4, 0x0f, 0x87, 0xfa, 0x61, 0xab, 0x7a, 0x98, 0xeb, 0xff, 0x4e, 0x6c, 0x15,
+	0x9b, 0xb5, 0x1a, 0x3b, 0xe9, 0xd7, 0x6a, 0x43, 0xa2, 0x56, 0x6b, 0x55, 0x6b, 0xb5, 0x9c, 0xf9,
+	0xf5, 0x61, 0xee, 0x58, 0xf5, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0x88, 0xfc, 0xd8, 0x84,
+	0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/content_label_type.pb.go b/googleapis/ads/googleads/v3/enums/content_label_type.pb.go
new file mode 100644
index 0000000..ae4f2af
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/content_label_type.pb.go
@@ -0,0 +1,186 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/content_label_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the content label types supported by ContentLabel criterion.
+type ContentLabelTypeEnum_ContentLabelType int32
+
+const (
+	// Not specified.
+	ContentLabelTypeEnum_UNSPECIFIED ContentLabelTypeEnum_ContentLabelType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ContentLabelTypeEnum_UNKNOWN ContentLabelTypeEnum_ContentLabelType = 1
+	// Sexually suggestive content.
+	ContentLabelTypeEnum_SEXUALLY_SUGGESTIVE ContentLabelTypeEnum_ContentLabelType = 2
+	// Below the fold placement.
+	ContentLabelTypeEnum_BELOW_THE_FOLD ContentLabelTypeEnum_ContentLabelType = 3
+	// Parked domain.
+	ContentLabelTypeEnum_PARKED_DOMAIN ContentLabelTypeEnum_ContentLabelType = 4
+	// Juvenile, gross & bizarre content.
+	ContentLabelTypeEnum_JUVENILE ContentLabelTypeEnum_ContentLabelType = 6
+	// Profanity & rough language.
+	ContentLabelTypeEnum_PROFANITY ContentLabelTypeEnum_ContentLabelType = 7
+	// Death & tragedy.
+	ContentLabelTypeEnum_TRAGEDY ContentLabelTypeEnum_ContentLabelType = 8
+	// Video.
+	ContentLabelTypeEnum_VIDEO ContentLabelTypeEnum_ContentLabelType = 9
+	// Content rating: G.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_G ContentLabelTypeEnum_ContentLabelType = 10
+	// Content rating: PG.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_PG ContentLabelTypeEnum_ContentLabelType = 11
+	// Content rating: T.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_T ContentLabelTypeEnum_ContentLabelType = 12
+	// Content rating: MA.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_MA ContentLabelTypeEnum_ContentLabelType = 13
+	// Content rating: not yet rated.
+	ContentLabelTypeEnum_VIDEO_NOT_YET_RATED ContentLabelTypeEnum_ContentLabelType = 14
+	// Embedded video.
+	ContentLabelTypeEnum_EMBEDDED_VIDEO ContentLabelTypeEnum_ContentLabelType = 15
+	// Live streaming video.
+	ContentLabelTypeEnum_LIVE_STREAMING_VIDEO ContentLabelTypeEnum_ContentLabelType = 16
+	// Sensitive social issues.
+	ContentLabelTypeEnum_SOCIAL_ISSUES ContentLabelTypeEnum_ContentLabelType = 17
+)
+
+var ContentLabelTypeEnum_ContentLabelType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SEXUALLY_SUGGESTIVE",
+	3:  "BELOW_THE_FOLD",
+	4:  "PARKED_DOMAIN",
+	6:  "JUVENILE",
+	7:  "PROFANITY",
+	8:  "TRAGEDY",
+	9:  "VIDEO",
+	10: "VIDEO_RATING_DV_G",
+	11: "VIDEO_RATING_DV_PG",
+	12: "VIDEO_RATING_DV_T",
+	13: "VIDEO_RATING_DV_MA",
+	14: "VIDEO_NOT_YET_RATED",
+	15: "EMBEDDED_VIDEO",
+	16: "LIVE_STREAMING_VIDEO",
+	17: "SOCIAL_ISSUES",
+}
+
+var ContentLabelTypeEnum_ContentLabelType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"SEXUALLY_SUGGESTIVE":  2,
+	"BELOW_THE_FOLD":       3,
+	"PARKED_DOMAIN":        4,
+	"JUVENILE":             6,
+	"PROFANITY":            7,
+	"TRAGEDY":              8,
+	"VIDEO":                9,
+	"VIDEO_RATING_DV_G":    10,
+	"VIDEO_RATING_DV_PG":   11,
+	"VIDEO_RATING_DV_T":    12,
+	"VIDEO_RATING_DV_MA":   13,
+	"VIDEO_NOT_YET_RATED":  14,
+	"EMBEDDED_VIDEO":       15,
+	"LIVE_STREAMING_VIDEO": 16,
+	"SOCIAL_ISSUES":        17,
+}
+
+func (x ContentLabelTypeEnum_ContentLabelType) String() string {
+	return proto.EnumName(ContentLabelTypeEnum_ContentLabelType_name, int32(x))
+}
+
+func (ContentLabelTypeEnum_ContentLabelType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b519dcc6be978913, []int{0, 0}
+}
+
+// Container for enum describing content label types in ContentLabel.
+type ContentLabelTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ContentLabelTypeEnum) Reset()         { *m = ContentLabelTypeEnum{} }
+func (m *ContentLabelTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ContentLabelTypeEnum) ProtoMessage()    {}
+func (*ContentLabelTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b519dcc6be978913, []int{0}
+}
+
+func (m *ContentLabelTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContentLabelTypeEnum.Unmarshal(m, b)
+}
+func (m *ContentLabelTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContentLabelTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ContentLabelTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContentLabelTypeEnum.Merge(m, src)
+}
+func (m *ContentLabelTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ContentLabelTypeEnum.Size(m)
+}
+func (m *ContentLabelTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContentLabelTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContentLabelTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ContentLabelTypeEnum_ContentLabelType", ContentLabelTypeEnum_ContentLabelType_name, ContentLabelTypeEnum_ContentLabelType_value)
+	proto.RegisterType((*ContentLabelTypeEnum)(nil), "google.ads.googleads.v3.enums.ContentLabelTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/content_label_type.proto", fileDescriptor_b519dcc6be978913)
+}
+
+var fileDescriptor_b519dcc6be978913 = []byte{
+	// 479 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x6e, 0xd3, 0x40,
+	0x14, 0x26, 0x2e, 0xb4, 0xcd, 0xa4, 0x69, 0x27, 0x43, 0x0b, 0x08, 0xd1, 0x45, 0x7b, 0x00, 0x7b,
+	0x61, 0x89, 0x85, 0x59, 0x4d, 0x32, 0x2f, 0x66, 0xa8, 0x63, 0x5b, 0xf1, 0x4f, 0x09, 0x8a, 0x34,
+	0x72, 0x1b, 0xcb, 0x8a, 0x94, 0x78, 0xac, 0xda, 0xad, 0xd4, 0xeb, 0xb0, 0xe4, 0x28, 0xdc, 0x81,
+	0x0b, 0xf4, 0x00, 0xac, 0xd1, 0x78, 0x48, 0x16, 0x51, 0x61, 0x63, 0x7d, 0x7a, 0xdf, 0x8f, 0xe7,
+	0xe9, 0x7b, 0xe8, 0x63, 0x21, 0x65, 0xb1, 0xca, 0xad, 0x6c, 0x51, 0x5b, 0x1a, 0x2a, 0xf4, 0x60,
+	0x5b, 0x79, 0x79, 0xbf, 0xae, 0xad, 0x5b, 0x59, 0x36, 0x79, 0xd9, 0x88, 0x55, 0x76, 0x93, 0xaf,
+	0x44, 0xf3, 0x58, 0xe5, 0x66, 0x75, 0x27, 0x1b, 0x49, 0xce, 0xb5, 0xd8, 0xcc, 0x16, 0xb5, 0xb9,
+	0xf5, 0x99, 0x0f, 0xb6, 0xd9, 0xfa, 0xde, 0x7f, 0xd8, 0xc4, 0x56, 0x4b, 0x2b, 0x2b, 0x4b, 0xd9,
+	0x64, 0xcd, 0x52, 0x96, 0xb5, 0x36, 0x5f, 0xfe, 0x36, 0xd0, 0xe9, 0x48, 0x27, 0x7b, 0x2a, 0x38,
+	0x7e, 0xac, 0x72, 0x28, 0xef, 0xd7, 0x97, 0xbf, 0x0c, 0x84, 0x77, 0x09, 0x72, 0x82, 0x7a, 0x89,
+	0x1f, 0x85, 0x30, 0xe2, 0x63, 0x0e, 0x0c, 0xbf, 0x20, 0x3d, 0x74, 0x90, 0xf8, 0x57, 0x7e, 0x70,
+	0xed, 0xe3, 0x0e, 0x79, 0x8b, 0x5e, 0x47, 0xf0, 0x35, 0xa1, 0x9e, 0x37, 0x13, 0x51, 0xe2, 0xba,
+	0x10, 0xc5, 0x3c, 0x05, 0x6c, 0x10, 0x82, 0x8e, 0x87, 0xe0, 0x05, 0xd7, 0x22, 0xfe, 0x0c, 0x62,
+	0x1c, 0x78, 0x0c, 0xef, 0x91, 0x01, 0xea, 0x87, 0x74, 0x7a, 0x05, 0x4c, 0xb0, 0x60, 0x42, 0xb9,
+	0x8f, 0x5f, 0x92, 0x23, 0x74, 0xf8, 0x25, 0x49, 0xc1, 0xe7, 0x1e, 0xe0, 0x7d, 0xd2, 0x47, 0xdd,
+	0x70, 0x1a, 0x8c, 0xa9, 0xcf, 0xe3, 0x19, 0x3e, 0x50, 0x7f, 0x8a, 0xa7, 0xd4, 0x05, 0x36, 0xc3,
+	0x87, 0xa4, 0x8b, 0x5e, 0xa5, 0x9c, 0x41, 0x80, 0xbb, 0xe4, 0x0c, 0x0d, 0x5a, 0x28, 0xa6, 0x34,
+	0xe6, 0xbe, 0x2b, 0x58, 0x2a, 0x5c, 0x8c, 0xc8, 0x1b, 0x44, 0x76, 0xc7, 0xa1, 0x8b, 0x7b, 0xcf,
+	0xc9, 0x63, 0x7c, 0xf4, 0x9c, 0x7c, 0x42, 0x71, 0x5f, 0xad, 0xa4, 0xe7, 0x7e, 0x10, 0x8b, 0x19,
+	0xc4, 0x8a, 0x07, 0x86, 0x8f, 0xd5, 0x4a, 0x30, 0x19, 0x02, 0x63, 0xc0, 0x84, 0x7e, 0xca, 0x09,
+	0x79, 0x87, 0x4e, 0x3d, 0x9e, 0x82, 0x88, 0xe2, 0x29, 0xd0, 0x89, 0x8a, 0xd1, 0x0c, 0x56, 0xcb,
+	0x46, 0xc1, 0x88, 0x53, 0x4f, 0xf0, 0x28, 0x4a, 0x20, 0xc2, 0x83, 0xe1, 0x53, 0x07, 0x5d, 0xdc,
+	0xca, 0xb5, 0xf9, 0xdf, 0xf2, 0x86, 0x67, 0xbb, 0x15, 0x84, 0xaa, 0xb5, 0xb0, 0xf3, 0x6d, 0xf8,
+	0xd7, 0x57, 0xc8, 0x55, 0x56, 0x16, 0xa6, 0xbc, 0x2b, 0xac, 0x22, 0x2f, 0xdb, 0x4e, 0x37, 0xc7,
+	0x53, 0x2d, 0xeb, 0x7f, 0xdc, 0xd2, 0xa7, 0xf6, 0xfb, 0xdd, 0xd8, 0x73, 0x29, 0xfd, 0x61, 0x9c,
+	0xbb, 0x3a, 0x8a, 0x2e, 0x6a, 0x53, 0x43, 0x85, 0x52, 0xdb, 0x54, 0x77, 0x50, 0xff, 0xdc, 0xf0,
+	0x73, 0xba, 0xa8, 0xe7, 0x5b, 0x7e, 0x9e, 0xda, 0xf3, 0x96, 0x7f, 0x32, 0x2e, 0xf4, 0xd0, 0x71,
+	0xe8, 0xa2, 0x76, 0x9c, 0xad, 0xc2, 0x71, 0x52, 0xdb, 0x71, 0x5a, 0xcd, 0xcd, 0x7e, 0xfb, 0x30,
+	0xfb, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x73, 0x79, 0x58, 0xe3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_action_category.pb.go b/googleapis/ads/googleads/v3/enums/conversion_action_category.pb.go
new file mode 100644
index 0000000..3d63282
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_action_category.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_action_category.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The category of conversions that are associated with a ConversionAction.
+type ConversionActionCategoryEnum_ConversionActionCategory int32
+
+const (
+	// Not specified.
+	ConversionActionCategoryEnum_UNSPECIFIED ConversionActionCategoryEnum_ConversionActionCategory = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionCategoryEnum_UNKNOWN ConversionActionCategoryEnum_ConversionActionCategory = 1
+	// Default category.
+	ConversionActionCategoryEnum_DEFAULT ConversionActionCategoryEnum_ConversionActionCategory = 2
+	// User visiting a page.
+	ConversionActionCategoryEnum_PAGE_VIEW ConversionActionCategoryEnum_ConversionActionCategory = 3
+	// Purchase, sales, or "order placed" event.
+	ConversionActionCategoryEnum_PURCHASE ConversionActionCategoryEnum_ConversionActionCategory = 4
+	// Signup user action.
+	ConversionActionCategoryEnum_SIGNUP ConversionActionCategoryEnum_ConversionActionCategory = 5
+	// Lead-generating action.
+	ConversionActionCategoryEnum_LEAD ConversionActionCategoryEnum_ConversionActionCategory = 6
+	// Software download action (as for an app).
+	ConversionActionCategoryEnum_DOWNLOAD ConversionActionCategoryEnum_ConversionActionCategory = 7
+)
+
+var ConversionActionCategoryEnum_ConversionActionCategory_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DEFAULT",
+	3: "PAGE_VIEW",
+	4: "PURCHASE",
+	5: "SIGNUP",
+	6: "LEAD",
+	7: "DOWNLOAD",
+}
+
+var ConversionActionCategoryEnum_ConversionActionCategory_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DEFAULT":     2,
+	"PAGE_VIEW":   3,
+	"PURCHASE":    4,
+	"SIGNUP":      5,
+	"LEAD":        6,
+	"DOWNLOAD":    7,
+}
+
+func (x ConversionActionCategoryEnum_ConversionActionCategory) String() string {
+	return proto.EnumName(ConversionActionCategoryEnum_ConversionActionCategory_name, int32(x))
+}
+
+func (ConversionActionCategoryEnum_ConversionActionCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1a66d28e731c65ca, []int{0, 0}
+}
+
+// Container for enum describing the category of conversions that are associated
+// with a ConversionAction.
+type ConversionActionCategoryEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionCategoryEnum) Reset()         { *m = ConversionActionCategoryEnum{} }
+func (m *ConversionActionCategoryEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionCategoryEnum) ProtoMessage()    {}
+func (*ConversionActionCategoryEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a66d28e731c65ca, []int{0}
+}
+
+func (m *ConversionActionCategoryEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionCategoryEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionCategoryEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionCategoryEnum.Merge(m, src)
+}
+func (m *ConversionActionCategoryEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Size(m)
+}
+func (m *ConversionActionCategoryEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionCategoryEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionCategoryEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionActionCategoryEnum_ConversionActionCategory", ConversionActionCategoryEnum_ConversionActionCategory_name, ConversionActionCategoryEnum_ConversionActionCategory_value)
+	proto.RegisterType((*ConversionActionCategoryEnum)(nil), "google.ads.googleads.v3.enums.ConversionActionCategoryEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_action_category.proto", fileDescriptor_1a66d28e731c65ca)
+}
+
+var fileDescriptor_1a66d28e731c65ca = []byte{
+	// 359 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x6a, 0xea, 0x40,
+	0x14, 0x7d, 0x89, 0x3e, 0xf5, 0x8d, 0xaf, 0x74, 0xc8, 0xaa, 0x14, 0x5d, 0xe8, 0x07, 0x4c, 0x16,
+	0xd9, 0x4d, 0xa1, 0x30, 0x26, 0x63, 0x1a, 0x2a, 0x31, 0xd4, 0x26, 0x42, 0x09, 0x48, 0x9a, 0x84,
+	0x20, 0xe8, 0x8c, 0x64, 0xa2, 0xd0, 0x1f, 0xe8, 0x87, 0x74, 0x53, 0xe8, 0xa7, 0xf4, 0x53, 0xba,
+	0xec, 0x17, 0x94, 0x99, 0x68, 0x76, 0x76, 0x93, 0x9c, 0x99, 0x7b, 0xce, 0xb9, 0xf7, 0x9e, 0x01,
+	0xb7, 0x05, 0xe7, 0xc5, 0x26, 0x37, 0x93, 0x4c, 0x98, 0x35, 0x94, 0xe8, 0x60, 0x99, 0x39, 0xdb,
+	0x6f, 0x85, 0x99, 0x72, 0x76, 0xc8, 0x4b, 0xb1, 0xe6, 0x6c, 0x95, 0xa4, 0x95, 0xfc, 0xa5, 0x49,
+	0x95, 0x17, 0xbc, 0x7c, 0x41, 0xbb, 0x92, 0x57, 0xdc, 0x18, 0xd6, 0x22, 0x94, 0x64, 0x02, 0x35,
+	0x7a, 0x74, 0xb0, 0x90, 0xd2, 0x5f, 0x0f, 0x4e, 0xf6, 0xbb, 0xb5, 0x99, 0x30, 0xc6, 0xab, 0x44,
+	0x9a, 0x88, 0x5a, 0x3c, 0x7e, 0xd7, 0xc0, 0xc0, 0x6e, 0x3a, 0x10, 0xd5, 0xc0, 0x3e, 0xfa, 0x53,
+	0xb6, 0xdf, 0x8e, 0x5f, 0x35, 0x70, 0x75, 0x8e, 0x60, 0x5c, 0x82, 0x7e, 0xe8, 0x2f, 0x02, 0x6a,
+	0x7b, 0x53, 0x8f, 0x3a, 0xf0, 0x8f, 0xd1, 0x07, 0xdd, 0xd0, 0xbf, 0xf7, 0xe7, 0x4b, 0x1f, 0x6a,
+	0xf2, 0xe0, 0xd0, 0x29, 0x09, 0x67, 0x8f, 0x50, 0x37, 0x2e, 0xc0, 0xbf, 0x80, 0xb8, 0x74, 0x15,
+	0x79, 0x74, 0x09, 0x5b, 0xc6, 0x7f, 0xd0, 0x0b, 0xc2, 0x07, 0xfb, 0x8e, 0x2c, 0x28, 0x6c, 0x1b,
+	0x00, 0x74, 0x16, 0x9e, 0xeb, 0x87, 0x01, 0xfc, 0x6b, 0xf4, 0x40, 0x7b, 0x46, 0x89, 0x03, 0x3b,
+	0x92, 0xe3, 0xcc, 0x97, 0xfe, 0x6c, 0x4e, 0x1c, 0xd8, 0x9d, 0x7c, 0x6b, 0x60, 0x94, 0xf2, 0x2d,
+	0xfa, 0x75, 0xdb, 0xc9, 0xf0, 0xdc, 0xac, 0x81, 0x5c, 0x37, 0xd0, 0x9e, 0x26, 0x47, 0x7d, 0xc1,
+	0x37, 0x09, 0x2b, 0x10, 0x2f, 0x0b, 0xb3, 0xc8, 0x99, 0x0a, 0xe3, 0x94, 0xfe, 0x6e, 0x2d, 0xce,
+	0x3c, 0xc6, 0x8d, 0xfa, 0xbe, 0xe9, 0x2d, 0x97, 0x90, 0x0f, 0x7d, 0xe8, 0xd6, 0x56, 0x24, 0x13,
+	0xa8, 0x86, 0x12, 0x45, 0x16, 0x92, 0xc1, 0x89, 0xcf, 0x53, 0x3d, 0x26, 0x99, 0x88, 0x9b, 0x7a,
+	0x1c, 0x59, 0xb1, 0xaa, 0x7f, 0xe9, 0xa3, 0xfa, 0x12, 0x63, 0x92, 0x09, 0x8c, 0x1b, 0x06, 0xc6,
+	0x91, 0x85, 0xb1, 0xe2, 0x3c, 0x77, 0xd4, 0x60, 0xd6, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63,
+	0xf5, 0x85, 0x43, 0x24, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_action_counting_type.pb.go b/googleapis/ads/googleads/v3/enums/conversion_action_counting_type.pb.go
new file mode 100644
index 0000000..b768405
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_action_counting_type.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_action_counting_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Indicates how conversions for this action will be counted. For more
+// information, see https://support.google.com/google-ads/answer/3438531.
+type ConversionActionCountingTypeEnum_ConversionActionCountingType int32
+
+const (
+	// Not specified.
+	ConversionActionCountingTypeEnum_UNSPECIFIED ConversionActionCountingTypeEnum_ConversionActionCountingType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionCountingTypeEnum_UNKNOWN ConversionActionCountingTypeEnum_ConversionActionCountingType = 1
+	// Count only one conversion per click.
+	ConversionActionCountingTypeEnum_ONE_PER_CLICK ConversionActionCountingTypeEnum_ConversionActionCountingType = 2
+	// Count all conversions per click.
+	ConversionActionCountingTypeEnum_MANY_PER_CLICK ConversionActionCountingTypeEnum_ConversionActionCountingType = 3
+)
+
+var ConversionActionCountingTypeEnum_ConversionActionCountingType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ONE_PER_CLICK",
+	3: "MANY_PER_CLICK",
+}
+
+var ConversionActionCountingTypeEnum_ConversionActionCountingType_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ONE_PER_CLICK":  2,
+	"MANY_PER_CLICK": 3,
+}
+
+func (x ConversionActionCountingTypeEnum_ConversionActionCountingType) String() string {
+	return proto.EnumName(ConversionActionCountingTypeEnum_ConversionActionCountingType_name, int32(x))
+}
+
+func (ConversionActionCountingTypeEnum_ConversionActionCountingType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3b999761ccfaadcc, []int{0, 0}
+}
+
+// Container for enum describing the conversion deduplication mode for
+// conversion optimizer.
+type ConversionActionCountingTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionCountingTypeEnum) Reset()         { *m = ConversionActionCountingTypeEnum{} }
+func (m *ConversionActionCountingTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionCountingTypeEnum) ProtoMessage()    {}
+func (*ConversionActionCountingTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3b999761ccfaadcc, []int{0}
+}
+
+func (m *ConversionActionCountingTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionCountingTypeEnum.Merge(m, src)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Size(m)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionCountingTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionCountingTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionActionCountingTypeEnum_ConversionActionCountingType", ConversionActionCountingTypeEnum_ConversionActionCountingType_name, ConversionActionCountingTypeEnum_ConversionActionCountingType_value)
+	proto.RegisterType((*ConversionActionCountingTypeEnum)(nil), "google.ads.googleads.v3.enums.ConversionActionCountingTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_action_counting_type.proto", fileDescriptor_3b999761ccfaadcc)
+}
+
+var fileDescriptor_3b999761ccfaadcc = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0xb6, 0x1d, 0x28, 0x64, 0xa8, 0xb3, 0x47, 0xd9, 0xc0, 0xed, 0x01, 0xd2, 0x43, 0x6f, 0xf1,
+	0x94, 0xc5, 0x3a, 0xc6, 0x34, 0x2b, 0xea, 0x26, 0x4a, 0xa1, 0xc4, 0x36, 0x84, 0xc2, 0x96, 0x94,
+	0xa5, 0x1b, 0xec, 0x09, 0x7c, 0x0f, 0x8f, 0x3e, 0x8a, 0x8f, 0xe2, 0x03, 0x78, 0x96, 0x24, 0x5b,
+	0xf1, 0xe2, 0x2e, 0xc9, 0xc7, 0xef, 0xcf, 0xf7, 0xfd, 0xbe, 0x0f, 0x10, 0xa1, 0x94, 0x58, 0xf0,
+	0x90, 0x15, 0x3a, 0x74, 0xd0, 0xa0, 0x4d, 0x14, 0x72, 0xb9, 0x5e, 0xea, 0x30, 0x57, 0x72, 0xc3,
+	0x57, 0xba, 0x54, 0x32, 0x63, 0x79, 0x6d, 0xbe, 0x5c, 0xad, 0x65, 0x5d, 0x4a, 0x91, 0xd5, 0xdb,
+	0x8a, 0xc3, 0x6a, 0xa5, 0x6a, 0x15, 0xf4, 0xdc, 0x26, 0x64, 0x85, 0x86, 0x0d, 0x09, 0xdc, 0x44,
+	0xd0, 0x92, 0x5c, 0x76, 0xf7, 0x1a, 0x55, 0x19, 0x32, 0x29, 0x55, 0xcd, 0x0c, 0x93, 0x76, 0xcb,
+	0x83, 0x77, 0x0f, 0x5c, 0x91, 0x46, 0x06, 0x5b, 0x15, 0xb2, 0x13, 0x79, 0xda, 0x56, 0x3c, 0x96,
+	0xeb, 0xe5, 0x20, 0x07, 0xdd, 0x43, 0x33, 0xc1, 0x39, 0x68, 0xcf, 0xe8, 0x63, 0x12, 0x93, 0xf1,
+	0xed, 0x38, 0xbe, 0xe9, 0x1c, 0x05, 0x6d, 0x70, 0x32, 0xa3, 0x13, 0x3a, 0x7d, 0xa6, 0x1d, 0x2f,
+	0xb8, 0x00, 0xa7, 0x53, 0x1a, 0x67, 0x49, 0xfc, 0x90, 0x91, 0xbb, 0x31, 0x99, 0x74, 0xfc, 0x20,
+	0x00, 0x67, 0xf7, 0x98, 0xbe, 0xfc, 0xa9, 0xb5, 0x86, 0x3f, 0x1e, 0xe8, 0xe7, 0x6a, 0x09, 0x0f,
+	0xba, 0x19, 0xf6, 0x0f, 0x1d, 0x92, 0x18, 0x4b, 0x89, 0xf7, 0x3a, 0xdc, 0x71, 0x08, 0xb5, 0x60,
+	0x52, 0x40, 0xb5, 0x12, 0xa1, 0xe0, 0xd2, 0x1a, 0xde, 0xc7, 0x5c, 0x95, 0xfa, 0x9f, 0xd4, 0xaf,
+	0xed, 0xfb, 0xe1, 0xb7, 0x46, 0x18, 0x7f, 0xfa, 0xbd, 0x91, 0xa3, 0xc2, 0x85, 0x86, 0x0e, 0x1a,
+	0x34, 0x8f, 0xa0, 0x09, 0x46, 0x7f, 0xed, 0xfb, 0x29, 0x2e, 0x74, 0xda, 0xf4, 0xd3, 0x79, 0x94,
+	0xda, 0xfe, 0xb7, 0xdf, 0x77, 0x45, 0x84, 0x70, 0xa1, 0x11, 0x6a, 0x26, 0x10, 0x9a, 0x47, 0x08,
+	0xd9, 0x99, 0xb7, 0x63, 0x7b, 0x58, 0xf4, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x79, 0x95, 0x05, 0x66,
+	0x0d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_action_status.pb.go b/googleapis/ads/googleads/v3/enums/conversion_action_status.pb.go
new file mode 100644
index 0000000..440bb46
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_action_status.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_action_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a conversion action.
+type ConversionActionStatusEnum_ConversionActionStatus int32
+
+const (
+	// Not specified.
+	ConversionActionStatusEnum_UNSPECIFIED ConversionActionStatusEnum_ConversionActionStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionStatusEnum_UNKNOWN ConversionActionStatusEnum_ConversionActionStatus = 1
+	// Conversions will be recorded.
+	ConversionActionStatusEnum_ENABLED ConversionActionStatusEnum_ConversionActionStatus = 2
+	// Conversions will not be recorded.
+	ConversionActionStatusEnum_REMOVED ConversionActionStatusEnum_ConversionActionStatus = 3
+	// Conversions will not be recorded and the conversion action will not
+	// appear in the UI.
+	ConversionActionStatusEnum_HIDDEN ConversionActionStatusEnum_ConversionActionStatus = 4
+)
+
+var ConversionActionStatusEnum_ConversionActionStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+	4: "HIDDEN",
+}
+
+var ConversionActionStatusEnum_ConversionActionStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+	"HIDDEN":      4,
+}
+
+func (x ConversionActionStatusEnum_ConversionActionStatus) String() string {
+	return proto.EnumName(ConversionActionStatusEnum_ConversionActionStatus_name, int32(x))
+}
+
+func (ConversionActionStatusEnum_ConversionActionStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8fa0bbddeff25dcf, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a conversion action.
+type ConversionActionStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionStatusEnum) Reset()         { *m = ConversionActionStatusEnum{} }
+func (m *ConversionActionStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionStatusEnum) ProtoMessage()    {}
+func (*ConversionActionStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8fa0bbddeff25dcf, []int{0}
+}
+
+func (m *ConversionActionStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionStatusEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionStatusEnum.Merge(m, src)
+}
+func (m *ConversionActionStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionStatusEnum.Size(m)
+}
+func (m *ConversionActionStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionActionStatusEnum_ConversionActionStatus", ConversionActionStatusEnum_ConversionActionStatus_name, ConversionActionStatusEnum_ConversionActionStatus_value)
+	proto.RegisterType((*ConversionActionStatusEnum)(nil), "google.ads.googleads.v3.enums.ConversionActionStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_action_status.proto", fileDescriptor_8fa0bbddeff25dcf)
+}
+
+var fileDescriptor_8fa0bbddeff25dcf = []byte{
+	// 314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xb1, 0x4e, 0xc3, 0x30,
+	0x14, 0xa4, 0x29, 0x2a, 0x92, 0x3b, 0x10, 0x65, 0x60, 0x28, 0x74, 0x68, 0x3f, 0xc0, 0x1e, 0xbc,
+	0x19, 0x16, 0xa7, 0x31, 0xa5, 0x02, 0xdc, 0x8a, 0xaa, 0x41, 0x42, 0x91, 0x90, 0x69, 0x22, 0xab,
+	0x52, 0x6b, 0x57, 0x71, 0x92, 0x81, 0xcf, 0x61, 0xe4, 0x53, 0xf8, 0x14, 0x26, 0x3e, 0x01, 0xd9,
+	0x69, 0x32, 0x15, 0x16, 0xfb, 0x9e, 0xef, 0xdd, 0xe9, 0x7c, 0xe0, 0x46, 0x6a, 0x2d, 0xb7, 0x19,
+	0x12, 0xa9, 0x41, 0x35, 0xb4, 0xa8, 0xc2, 0x28, 0x53, 0xe5, 0xce, 0xa0, 0xb5, 0x56, 0x55, 0x96,
+	0x9b, 0x8d, 0x56, 0xaf, 0x62, 0x5d, 0xd8, 0xcb, 0x14, 0xa2, 0x28, 0x0d, 0xdc, 0xe7, 0xba, 0xd0,
+	0xc1, 0xb0, 0x96, 0x40, 0x91, 0x1a, 0xd8, 0xaa, 0x61, 0x85, 0xa1, 0x53, 0x0f, 0xae, 0x1a, 0xf3,
+	0xfd, 0x06, 0x09, 0xa5, 0x74, 0x21, 0xac, 0xc5, 0x41, 0x3c, 0x7e, 0x07, 0x83, 0x49, 0x6b, 0x4f,
+	0x9d, 0xfb, 0xd2, 0x99, 0x33, 0x55, 0xee, 0xc6, 0x09, 0xb8, 0x38, 0xce, 0x06, 0xe7, 0xa0, 0xbf,
+	0xe2, 0xcb, 0x05, 0x9b, 0xcc, 0x6e, 0x67, 0x2c, 0xf2, 0x4f, 0x82, 0x3e, 0x38, 0x5b, 0xf1, 0x7b,
+	0x3e, 0x7f, 0xe6, 0x7e, 0xc7, 0x0e, 0x8c, 0xd3, 0xf0, 0x81, 0x45, 0xbe, 0x67, 0x87, 0x27, 0xf6,
+	0x38, 0x8f, 0x59, 0xe4, 0x77, 0x03, 0x00, 0x7a, 0x77, 0xb3, 0x28, 0x62, 0xdc, 0x3f, 0x0d, 0x7f,
+	0x3a, 0x60, 0xb4, 0xd6, 0x3b, 0xf8, 0x6f, 0xfe, 0xf0, 0xf2, 0x78, 0x82, 0x85, 0x8d, 0xbf, 0xe8,
+	0xbc, 0x84, 0x07, 0xb5, 0xd4, 0x5b, 0xa1, 0x24, 0xd4, 0xb9, 0x44, 0x32, 0x53, 0xee, 0x73, 0x4d,
+	0x97, 0xfb, 0x8d, 0xf9, 0xa3, 0xda, 0x6b, 0x77, 0x7e, 0x78, 0xdd, 0x29, 0xa5, 0x9f, 0xde, 0x70,
+	0x5a, 0x5b, 0xd1, 0xd4, 0xc0, 0x1a, 0x5a, 0x14, 0x63, 0x68, 0xbb, 0x30, 0x5f, 0x0d, 0x9f, 0xd0,
+	0xd4, 0x24, 0x2d, 0x9f, 0xc4, 0x38, 0x71, 0xfc, 0xb7, 0x37, 0xaa, 0x1f, 0x09, 0xa1, 0xa9, 0x21,
+	0xa4, 0xdd, 0x20, 0x24, 0xc6, 0x84, 0xb8, 0x9d, 0xb7, 0x9e, 0x0b, 0x86, 0x7f, 0x03, 0x00, 0x00,
+	0xff, 0xff, 0x58, 0x8b, 0xdd, 0x69, 0xf2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_action_type.pb.go b/googleapis/ads/googleads/v3/enums/conversion_action_type.pb.go
new file mode 100644
index 0000000..3eeb488
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_action_type.pb.go
@@ -0,0 +1,158 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_action_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible types of a conversion action.
+type ConversionActionTypeEnum_ConversionActionType int32
+
+const (
+	// Not specified.
+	ConversionActionTypeEnum_UNSPECIFIED ConversionActionTypeEnum_ConversionActionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionTypeEnum_UNKNOWN ConversionActionTypeEnum_ConversionActionType = 1
+	// Conversions that occur when a user clicks on an ad's call extension.
+	ConversionActionTypeEnum_AD_CALL ConversionActionTypeEnum_ConversionActionType = 2
+	// Conversions that occur when a user on a mobile device clicks a phone
+	// number.
+	ConversionActionTypeEnum_CLICK_TO_CALL ConversionActionTypeEnum_ConversionActionType = 3
+	// Conversions that occur when a user downloads a mobile app from the Google
+	// Play Store.
+	ConversionActionTypeEnum_GOOGLE_PLAY_DOWNLOAD ConversionActionTypeEnum_ConversionActionType = 4
+	// Conversions that occur when a user makes a purchase in an app through
+	// Android billing.
+	ConversionActionTypeEnum_GOOGLE_PLAY_IN_APP_PURCHASE ConversionActionTypeEnum_ConversionActionType = 5
+	// Call conversions that are tracked by the advertiser and uploaded.
+	ConversionActionTypeEnum_UPLOAD_CALLS ConversionActionTypeEnum_ConversionActionType = 6
+	// Conversions that are tracked by the advertiser and uploaded with
+	// attributed clicks.
+	ConversionActionTypeEnum_UPLOAD_CLICKS ConversionActionTypeEnum_ConversionActionType = 7
+	// Conversions that occur on a webpage.
+	ConversionActionTypeEnum_WEBPAGE ConversionActionTypeEnum_ConversionActionType = 8
+	// Conversions that occur when a user calls a dynamically-generated phone
+	// number from an advertiser's website.
+	ConversionActionTypeEnum_WEBSITE_CALL ConversionActionTypeEnum_ConversionActionType = 9
+)
+
+var ConversionActionTypeEnum_ConversionActionType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_CALL",
+	3: "CLICK_TO_CALL",
+	4: "GOOGLE_PLAY_DOWNLOAD",
+	5: "GOOGLE_PLAY_IN_APP_PURCHASE",
+	6: "UPLOAD_CALLS",
+	7: "UPLOAD_CLICKS",
+	8: "WEBPAGE",
+	9: "WEBSITE_CALL",
+}
+
+var ConversionActionTypeEnum_ConversionActionType_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"AD_CALL":                     2,
+	"CLICK_TO_CALL":               3,
+	"GOOGLE_PLAY_DOWNLOAD":        4,
+	"GOOGLE_PLAY_IN_APP_PURCHASE": 5,
+	"UPLOAD_CALLS":                6,
+	"UPLOAD_CLICKS":               7,
+	"WEBPAGE":                     8,
+	"WEBSITE_CALL":                9,
+}
+
+func (x ConversionActionTypeEnum_ConversionActionType) String() string {
+	return proto.EnumName(ConversionActionTypeEnum_ConversionActionType_name, int32(x))
+}
+
+func (ConversionActionTypeEnum_ConversionActionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3050c3c63416f7a0, []int{0, 0}
+}
+
+// Container for enum describing possible types of a conversion action.
+type ConversionActionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionTypeEnum) Reset()         { *m = ConversionActionTypeEnum{} }
+func (m *ConversionActionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionTypeEnum) ProtoMessage()    {}
+func (*ConversionActionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3050c3c63416f7a0, []int{0}
+}
+
+func (m *ConversionActionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionTypeEnum.Merge(m, src)
+}
+func (m *ConversionActionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionTypeEnum.Size(m)
+}
+func (m *ConversionActionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionActionTypeEnum_ConversionActionType", ConversionActionTypeEnum_ConversionActionType_name, ConversionActionTypeEnum_ConversionActionType_value)
+	proto.RegisterType((*ConversionActionTypeEnum)(nil), "google.ads.googleads.v3.enums.ConversionActionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_action_type.proto", fileDescriptor_3050c3c63416f7a0)
+}
+
+var fileDescriptor_3050c3c63416f7a0 = []byte{
+	// 397 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xdf, 0x8e, 0x94, 0x30,
+	0x14, 0xc6, 0x85, 0xd5, 0x5d, 0xed, 0x6a, 0xac, 0x64, 0x2f, 0xd6, 0x3f, 0x1b, 0xb3, 0xfb, 0x00,
+	0xe5, 0x82, 0xbb, 0x7a, 0x55, 0xa0, 0x22, 0x59, 0x02, 0x8d, 0x0c, 0x43, 0x34, 0x24, 0x04, 0x07,
+	0x42, 0x26, 0xd9, 0x69, 0xc9, 0x94, 0x99, 0x64, 0x5e, 0xc7, 0x4b, 0x1f, 0xc5, 0x5b, 0xdf, 0xc2,
+	0x0b, 0xe3, 0x23, 0x98, 0xb6, 0x42, 0xbc, 0x18, 0xf7, 0x06, 0x4e, 0xcf, 0x77, 0xbe, 0xdf, 0x69,
+	0xcf, 0x01, 0xb8, 0x17, 0xa2, 0xbf, 0xeb, 0xdc, 0xa6, 0x95, 0xae, 0x09, 0x55, 0xb4, 0xf7, 0xdc,
+	0x8e, 0xef, 0x36, 0xd2, 0x5d, 0x09, 0xbe, 0xef, 0xb6, 0x72, 0x2d, 0x78, 0xdd, 0xac, 0x46, 0xf5,
+	0x1b, 0x0f, 0x43, 0x87, 0x86, 0xad, 0x18, 0x85, 0x73, 0x65, 0x0c, 0xa8, 0x69, 0x25, 0x9a, 0xbd,
+	0x68, 0xef, 0x21, 0xed, 0x7d, 0xf5, 0x66, 0x42, 0x0f, 0x6b, 0xb7, 0xe1, 0x5c, 0x8c, 0x8d, 0x02,
+	0x48, 0x63, 0xbe, 0xf9, 0x6d, 0x81, 0xcb, 0x60, 0xa6, 0x13, 0x0d, 0x5f, 0x1c, 0x86, 0x8e, 0xf2,
+	0xdd, 0xe6, 0xe6, 0x87, 0x05, 0x2e, 0x8e, 0x89, 0xce, 0x73, 0x70, 0x5e, 0xa4, 0x39, 0xa3, 0x41,
+	0xfc, 0x3e, 0xa6, 0x21, 0x7c, 0xe0, 0x9c, 0x83, 0xb3, 0x22, 0xbd, 0x4d, 0xb3, 0x32, 0x85, 0x96,
+	0x3a, 0x90, 0xb0, 0x0e, 0x48, 0x92, 0x40, 0xdb, 0x79, 0x01, 0x9e, 0x05, 0x49, 0x1c, 0xdc, 0xd6,
+	0x8b, 0xcc, 0xa4, 0x4e, 0x9c, 0x4b, 0x70, 0x11, 0x65, 0x59, 0x94, 0xd0, 0x9a, 0x25, 0xe4, 0x53,
+	0x1d, 0x66, 0x65, 0x9a, 0x64, 0x24, 0x84, 0x0f, 0x9d, 0xb7, 0xe0, 0xf5, 0xbf, 0x4a, 0x9c, 0xd6,
+	0x84, 0xb1, 0x9a, 0x15, 0x1f, 0x83, 0x0f, 0x24, 0xa7, 0xf0, 0x91, 0x03, 0xc1, 0xd3, 0x82, 0xa9,
+	0x62, 0xcd, 0xca, 0xe1, 0xa9, 0xe2, 0x4f, 0x19, 0xd5, 0x26, 0x87, 0x67, 0xaa, 0x7f, 0x49, 0x7d,
+	0x46, 0x22, 0x0a, 0x1f, 0x2b, 0x47, 0x49, 0xfd, 0x3c, 0x5e, 0x50, 0xd3, 0xfe, 0x89, 0xff, 0xcb,
+	0x02, 0xd7, 0x2b, 0xb1, 0x41, 0xf7, 0x8e, 0xcd, 0x7f, 0x79, 0xec, 0xe1, 0x4c, 0xcd, 0x8c, 0x59,
+	0x9f, 0xfd, 0xbf, 0xde, 0x5e, 0xdc, 0x35, 0xbc, 0x47, 0x62, 0xdb, 0xbb, 0x7d, 0xc7, 0xf5, 0x44,
+	0xa7, 0xf5, 0x0d, 0x6b, 0xf9, 0x9f, 0x6d, 0xbe, 0xd3, 0xdf, 0xaf, 0xf6, 0x49, 0x44, 0xc8, 0x37,
+	0xfb, 0x2a, 0x32, 0x28, 0xd2, 0x4a, 0x64, 0x42, 0x15, 0x2d, 0x3d, 0xa4, 0x36, 0x20, 0xbf, 0x4f,
+	0x7a, 0x45, 0x5a, 0x59, 0xcd, 0x7a, 0xb5, 0xf4, 0x2a, 0xad, 0xff, 0xb4, 0xaf, 0x4d, 0x12, 0x63,
+	0xd2, 0x4a, 0x8c, 0xe7, 0x0a, 0x8c, 0x97, 0x1e, 0xc6, 0xba, 0xe6, 0xcb, 0xa9, 0xbe, 0x98, 0xf7,
+	0x27, 0x00, 0x00, 0xff, 0xff, 0x91, 0xd6, 0x3d, 0x8e, 0x65, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_adjustment_type.pb.go b/googleapis/ads/googleads/v3/enums/conversion_adjustment_type.pb.go
new file mode 100644
index 0000000..3b9a543
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_adjustment_type.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_adjustment_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The different actions advertisers can take to adjust the conversions that
+// they already reported. Retractions negate a conversion. Restatements change
+// the value of a conversion.
+type ConversionAdjustmentTypeEnum_ConversionAdjustmentType int32
+
+const (
+	// Not specified.
+	ConversionAdjustmentTypeEnum_UNSPECIFIED ConversionAdjustmentTypeEnum_ConversionAdjustmentType = 0
+	// Represents value unknown in this version.
+	ConversionAdjustmentTypeEnum_UNKNOWN ConversionAdjustmentTypeEnum_ConversionAdjustmentType = 1
+	// Negates a conversion so that its total value and count are both zero.
+	ConversionAdjustmentTypeEnum_RETRACTION ConversionAdjustmentTypeEnum_ConversionAdjustmentType = 2
+	// Changes the value of a conversion.
+	ConversionAdjustmentTypeEnum_RESTATEMENT ConversionAdjustmentTypeEnum_ConversionAdjustmentType = 3
+)
+
+var ConversionAdjustmentTypeEnum_ConversionAdjustmentType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RETRACTION",
+	3: "RESTATEMENT",
+}
+
+var ConversionAdjustmentTypeEnum_ConversionAdjustmentType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"RETRACTION":  2,
+	"RESTATEMENT": 3,
+}
+
+func (x ConversionAdjustmentTypeEnum_ConversionAdjustmentType) String() string {
+	return proto.EnumName(ConversionAdjustmentTypeEnum_ConversionAdjustmentType_name, int32(x))
+}
+
+func (ConversionAdjustmentTypeEnum_ConversionAdjustmentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_356d233123b32726, []int{0, 0}
+}
+
+// Container for enum describing conversion adjustment types.
+type ConversionAdjustmentTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionAdjustmentTypeEnum) Reset()         { *m = ConversionAdjustmentTypeEnum{} }
+func (m *ConversionAdjustmentTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionAdjustmentTypeEnum) ProtoMessage()    {}
+func (*ConversionAdjustmentTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_356d233123b32726, []int{0}
+}
+
+func (m *ConversionAdjustmentTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAdjustmentTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionAdjustmentTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAdjustmentTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionAdjustmentTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAdjustmentTypeEnum.Merge(m, src)
+}
+func (m *ConversionAdjustmentTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionAdjustmentTypeEnum.Size(m)
+}
+func (m *ConversionAdjustmentTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAdjustmentTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAdjustmentTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType", ConversionAdjustmentTypeEnum_ConversionAdjustmentType_name, ConversionAdjustmentTypeEnum_ConversionAdjustmentType_value)
+	proto.RegisterType((*ConversionAdjustmentTypeEnum)(nil), "google.ads.googleads.v3.enums.ConversionAdjustmentTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_adjustment_type.proto", fileDescriptor_356d233123b32726)
+}
+
+var fileDescriptor_356d233123b32726 = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x1d, 0x28, 0x64, 0xa0, 0xa5, 0x27, 0x91, 0xed, 0xb0, 0x3d, 0x40, 0x7a, 0xe8, 0x2d,
+	0x82, 0x90, 0xcd, 0x38, 0x86, 0xd8, 0x8d, 0x2d, 0x9b, 0x28, 0x85, 0x11, 0x97, 0x10, 0x2a, 0x6b,
+	0x52, 0x96, 0x6c, 0xb0, 0xd7, 0xf1, 0xe8, 0xa3, 0xf8, 0x28, 0x1e, 0x7d, 0x02, 0x69, 0xe2, 0x7a,
+	0xab, 0x97, 0xf2, 0xd1, 0xef, 0xcf, 0xef, 0xcb, 0x07, 0xee, 0xa4, 0xd6, 0x72, 0x2b, 0x62, 0xc6,
+	0x4d, 0xec, 0x61, 0x85, 0x0e, 0x49, 0x2c, 0xd4, 0xbe, 0x30, 0xf1, 0x46, 0xab, 0x83, 0xd8, 0x99,
+	0x5c, 0xab, 0x35, 0xe3, 0xef, 0x7b, 0x63, 0x0b, 0xa1, 0xec, 0xda, 0x1e, 0x4b, 0x01, 0xcb, 0x9d,
+	0xb6, 0x3a, 0xea, 0x79, 0x13, 0x64, 0xdc, 0xc0, 0xda, 0x0f, 0x0f, 0x09, 0x74, 0xfe, 0x9b, 0xee,
+	0x29, 0xbe, 0xcc, 0x63, 0xa6, 0x94, 0xb6, 0xcc, 0xe6, 0x5a, 0x19, 0x6f, 0x1e, 0x1c, 0x41, 0x77,
+	0x54, 0x1f, 0xc0, 0x75, 0x3e, 0x3d, 0x96, 0x82, 0xa8, 0x7d, 0x31, 0x78, 0x01, 0xd7, 0x4d, 0x7c,
+	0x74, 0x05, 0x3a, 0xcb, 0x74, 0x31, 0x23, 0xa3, 0xc9, 0xc3, 0x84, 0xdc, 0x87, 0x67, 0x51, 0x07,
+	0x5c, 0x2c, 0xd3, 0xc7, 0x74, 0xfa, 0x9c, 0x86, 0xad, 0xe8, 0x12, 0x80, 0x39, 0xa1, 0x73, 0x3c,
+	0xa2, 0x93, 0x69, 0x1a, 0x06, 0x95, 0x7a, 0x4e, 0x16, 0x14, 0x53, 0xf2, 0x44, 0x52, 0x1a, 0xb6,
+	0x87, 0x3f, 0x2d, 0xd0, 0xdf, 0xe8, 0x02, 0xfe, 0x5b, 0x7f, 0xd8, 0x6b, 0x3a, 0x3f, 0xab, 0xfa,
+	0xcf, 0x5a, 0xaf, 0xc3, 0x3f, 0xbf, 0xd4, 0x5b, 0xa6, 0x24, 0xd4, 0x3b, 0x19, 0x4b, 0xa1, 0xdc,
+	0xeb, 0x4e, 0x73, 0x96, 0xb9, 0x69, 0x58, 0xf7, 0xd6, 0x7d, 0x3f, 0x82, 0xf6, 0x18, 0xe3, 0xcf,
+	0xa0, 0x37, 0xf6, 0x51, 0x98, 0x1b, 0xe8, 0x61, 0x85, 0x56, 0x09, 0xac, 0xa6, 0x30, 0x5f, 0x27,
+	0x3e, 0xc3, 0xdc, 0x64, 0x35, 0x9f, 0xad, 0x92, 0xcc, 0xf1, 0xdf, 0x41, 0xdf, 0xff, 0x44, 0x08,
+	0x73, 0x83, 0x50, 0xad, 0x40, 0x68, 0x95, 0x20, 0xe4, 0x34, 0x6f, 0xe7, 0xae, 0x58, 0xf2, 0x1b,
+	0x00, 0x00, 0xff, 0xff, 0x7f, 0x19, 0xd8, 0x56, 0xf5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_attribution_event_type.pb.go b/googleapis/ads/googleads/v3/enums/conversion_attribution_event_type.pb.go
new file mode 100644
index 0000000..5e017e1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_attribution_event_type.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_attribution_event_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The event type of conversions that are attributed to.
+type ConversionAttributionEventTypeEnum_ConversionAttributionEventType int32
+
+const (
+	// Not specified.
+	ConversionAttributionEventTypeEnum_UNSPECIFIED ConversionAttributionEventTypeEnum_ConversionAttributionEventType = 0
+	// Represents value unknown in this version.
+	ConversionAttributionEventTypeEnum_UNKNOWN ConversionAttributionEventTypeEnum_ConversionAttributionEventType = 1
+	// The conversion is attributed to an impression.
+	ConversionAttributionEventTypeEnum_IMPRESSION ConversionAttributionEventTypeEnum_ConversionAttributionEventType = 2
+	// The conversion is attributed to an interaction.
+	ConversionAttributionEventTypeEnum_INTERACTION ConversionAttributionEventTypeEnum_ConversionAttributionEventType = 3
+)
+
+var ConversionAttributionEventTypeEnum_ConversionAttributionEventType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IMPRESSION",
+	3: "INTERACTION",
+}
+
+var ConversionAttributionEventTypeEnum_ConversionAttributionEventType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"IMPRESSION":  2,
+	"INTERACTION": 3,
+}
+
+func (x ConversionAttributionEventTypeEnum_ConversionAttributionEventType) String() string {
+	return proto.EnumName(ConversionAttributionEventTypeEnum_ConversionAttributionEventType_name, int32(x))
+}
+
+func (ConversionAttributionEventTypeEnum_ConversionAttributionEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_658026e096ee40da, []int{0, 0}
+}
+
+// Container for enum indicating the event type the conversion is attributed to.
+type ConversionAttributionEventTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionAttributionEventTypeEnum) Reset()         { *m = ConversionAttributionEventTypeEnum{} }
+func (m *ConversionAttributionEventTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionAttributionEventTypeEnum) ProtoMessage()    {}
+func (*ConversionAttributionEventTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_658026e096ee40da, []int{0}
+}
+
+func (m *ConversionAttributionEventTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAttributionEventTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionAttributionEventTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAttributionEventTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionAttributionEventTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAttributionEventTypeEnum.Merge(m, src)
+}
+func (m *ConversionAttributionEventTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionAttributionEventTypeEnum.Size(m)
+}
+func (m *ConversionAttributionEventTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAttributionEventTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAttributionEventTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType", ConversionAttributionEventTypeEnum_ConversionAttributionEventType_name, ConversionAttributionEventTypeEnum_ConversionAttributionEventType_value)
+	proto.RegisterType((*ConversionAttributionEventTypeEnum)(nil), "google.ads.googleads.v3.enums.ConversionAttributionEventTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_attribution_event_type.proto", fileDescriptor_658026e096ee40da)
+}
+
+var fileDescriptor_658026e096ee40da = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xc3, 0x30,
+	0x1c, 0xb5, 0x1d, 0x28, 0x64, 0xa0, 0xa3, 0x47, 0x71, 0xc2, 0xe6, 0x3d, 0x3d, 0xf4, 0x16, 0x4f,
+	0xd9, 0x8c, 0xa3, 0x88, 0x5d, 0xd9, 0x3f, 0x41, 0x0a, 0x23, 0x5b, 0x43, 0x28, 0x6c, 0x49, 0x69,
+	0xb2, 0xc2, 0x3e, 0x80, 0x5f, 0xc4, 0xa3, 0x1f, 0xc5, 0x8f, 0xe2, 0x27, 0xf0, 0x28, 0x49, 0x5c,
+	0x3d, 0xd9, 0x4b, 0x78, 0xe4, 0xf7, 0x7e, 0xef, 0xfd, 0xde, 0x03, 0x84, 0x4b, 0xc9, 0x77, 0x2c,
+	0xa4, 0xb9, 0x0a, 0x1d, 0x34, 0xa8, 0x8e, 0x42, 0x26, 0x0e, 0x7b, 0x15, 0x6e, 0xa5, 0xa8, 0x59,
+	0xa5, 0x0a, 0x29, 0xd6, 0x54, 0xeb, 0xaa, 0xd8, 0x1c, 0xb4, 0xc1, 0xac, 0x66, 0x42, 0xaf, 0xf5,
+	0xb1, 0x64, 0xb0, 0xac, 0xa4, 0x96, 0x41, 0xdf, 0xed, 0x42, 0x9a, 0x2b, 0xd8, 0xc8, 0xc0, 0x3a,
+	0x82, 0x56, 0xe6, 0xfa, 0xe6, 0xe4, 0x52, 0x16, 0x21, 0x15, 0x42, 0x6a, 0x6a, 0x64, 0x94, 0x5b,
+	0x1e, 0xbe, 0x79, 0x60, 0x38, 0x6e, 0x8c, 0xf0, 0x9f, 0x0f, 0x31, 0x36, 0x8b, 0x63, 0xc9, 0x88,
+	0x38, 0xec, 0x87, 0x6b, 0x70, 0xdb, 0xce, 0x0a, 0xae, 0x40, 0x77, 0x99, 0xcc, 0x53, 0x32, 0x8e,
+	0x1f, 0x63, 0xf2, 0xd0, 0x3b, 0x0b, 0xba, 0xe0, 0x62, 0x99, 0x3c, 0x25, 0xd3, 0x97, 0xa4, 0xe7,
+	0x05, 0x97, 0x00, 0xc4, 0xcf, 0xe9, 0x8c, 0xcc, 0xe7, 0xf1, 0x34, 0xe9, 0xf9, 0x86, 0x1d, 0x27,
+	0x0b, 0x32, 0xc3, 0xe3, 0x85, 0xf9, 0xe8, 0x8c, 0xbe, 0x3d, 0x30, 0xd8, 0xca, 0x3d, 0x6c, 0xcd,
+	0x32, 0xba, 0x6b, 0x3f, 0x22, 0x35, 0x91, 0x52, 0xef, 0x75, 0xf4, 0xab, 0xc2, 0xe5, 0x8e, 0x0a,
+	0x0e, 0x65, 0xc5, 0x43, 0xce, 0x84, 0x0d, 0x7c, 0x2a, 0xba, 0x2c, 0xd4, 0x3f, 0xbd, 0xdf, 0xdb,
+	0xf7, 0xdd, 0xef, 0x4c, 0x30, 0xfe, 0xf0, 0xfb, 0x13, 0x27, 0x85, 0x73, 0x05, 0x1d, 0x34, 0x68,
+	0x15, 0x41, 0x53, 0x8b, 0xfa, 0x3c, 0xcd, 0x33, 0x9c, 0xab, 0xac, 0x99, 0x67, 0xab, 0x28, 0xb3,
+	0xf3, 0x2f, 0x7f, 0xe0, 0x3e, 0x11, 0xc2, 0xb9, 0x42, 0xa8, 0x61, 0x20, 0xb4, 0x8a, 0x10, 0xb2,
+	0x9c, 0xcd, 0xb9, 0x3d, 0x2c, 0xfa, 0x09, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xa5, 0x4d, 0xf5, 0x0f,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_lag_bucket.pb.go b/googleapis/ads/googleads/v3/enums/conversion_lag_bucket.pb.go
new file mode 100644
index 0000000..5199621
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_lag_bucket.pb.go
@@ -0,0 +1,222 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_lag_bucket.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum representing the number of days between impression and conversion.
+type ConversionLagBucketEnum_ConversionLagBucket int32
+
+const (
+	// Not specified.
+	ConversionLagBucketEnum_UNSPECIFIED ConversionLagBucketEnum_ConversionLagBucket = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionLagBucketEnum_UNKNOWN ConversionLagBucketEnum_ConversionLagBucket = 1
+	// Conversion lag bucket from 0 to 1 day. 0 day is included, 1 day is not.
+	ConversionLagBucketEnum_LESS_THAN_ONE_DAY ConversionLagBucketEnum_ConversionLagBucket = 2
+	// Conversion lag bucket from 1 to 2 days. 1 day is included, 2 days is not.
+	ConversionLagBucketEnum_ONE_TO_TWO_DAYS ConversionLagBucketEnum_ConversionLagBucket = 3
+	// Conversion lag bucket from 2 to 3 days. 2 days is included,
+	// 3 days is not.
+	ConversionLagBucketEnum_TWO_TO_THREE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 4
+	// Conversion lag bucket from 3 to 4 days. 3 days is included,
+	// 4 days is not.
+	ConversionLagBucketEnum_THREE_TO_FOUR_DAYS ConversionLagBucketEnum_ConversionLagBucket = 5
+	// Conversion lag bucket from 4 to 5 days. 4 days is included,
+	// 5 days is not.
+	ConversionLagBucketEnum_FOUR_TO_FIVE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 6
+	// Conversion lag bucket from 5 to 6 days. 5 days is included,
+	// 6 days is not.
+	ConversionLagBucketEnum_FIVE_TO_SIX_DAYS ConversionLagBucketEnum_ConversionLagBucket = 7
+	// Conversion lag bucket from 6 to 7 days. 6 days is included,
+	// 7 days is not.
+	ConversionLagBucketEnum_SIX_TO_SEVEN_DAYS ConversionLagBucketEnum_ConversionLagBucket = 8
+	// Conversion lag bucket from 7 to 8 days. 7 days is included,
+	// 8 days is not.
+	ConversionLagBucketEnum_SEVEN_TO_EIGHT_DAYS ConversionLagBucketEnum_ConversionLagBucket = 9
+	// Conversion lag bucket from 8 to 9 days. 8 days is included,
+	// 9 days is not.
+	ConversionLagBucketEnum_EIGHT_TO_NINE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 10
+	// Conversion lag bucket from 9 to 10 days. 9 days is included,
+	// 10 days is not.
+	ConversionLagBucketEnum_NINE_TO_TEN_DAYS ConversionLagBucketEnum_ConversionLagBucket = 11
+	// Conversion lag bucket from 10 to 11 days. 10 days is included,
+	// 11 days is not.
+	ConversionLagBucketEnum_TEN_TO_ELEVEN_DAYS ConversionLagBucketEnum_ConversionLagBucket = 12
+	// Conversion lag bucket from 11 to 12 days. 11 days is included,
+	// 12 days is not.
+	ConversionLagBucketEnum_ELEVEN_TO_TWELVE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 13
+	// Conversion lag bucket from 12 to 13 days. 12 days is included,
+	// 13 days is not.
+	ConversionLagBucketEnum_TWELVE_TO_THIRTEEN_DAYS ConversionLagBucketEnum_ConversionLagBucket = 14
+	// Conversion lag bucket from 13 to 14 days. 13 days is included,
+	// 14 days is not.
+	ConversionLagBucketEnum_THIRTEEN_TO_FOURTEEN_DAYS ConversionLagBucketEnum_ConversionLagBucket = 15
+	// Conversion lag bucket from 14 to 21 days. 14 days is included,
+	// 21 days is not.
+	ConversionLagBucketEnum_FOURTEEN_TO_TWENTY_ONE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 16
+	// Conversion lag bucket from 21 to 30 days. 21 days is included,
+	// 30 days is not.
+	ConversionLagBucketEnum_TWENTY_ONE_TO_THIRTY_DAYS ConversionLagBucketEnum_ConversionLagBucket = 17
+	// Conversion lag bucket from 30 to 45 days. 30 days is included,
+	// 45 days is not.
+	ConversionLagBucketEnum_THIRTY_TO_FORTY_FIVE_DAYS ConversionLagBucketEnum_ConversionLagBucket = 18
+	// Conversion lag bucket from 45 to 60 days. 45 days is included,
+	// 60 days is not.
+	ConversionLagBucketEnum_FORTY_FIVE_TO_SIXTY_DAYS ConversionLagBucketEnum_ConversionLagBucket = 19
+	// Conversion lag bucket from 60 to 90 days. 60 days is included,
+	// 90 days is not.
+	ConversionLagBucketEnum_SIXTY_TO_NINETY_DAYS ConversionLagBucketEnum_ConversionLagBucket = 20
+)
+
+var ConversionLagBucketEnum_ConversionLagBucket_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "LESS_THAN_ONE_DAY",
+	3:  "ONE_TO_TWO_DAYS",
+	4:  "TWO_TO_THREE_DAYS",
+	5:  "THREE_TO_FOUR_DAYS",
+	6:  "FOUR_TO_FIVE_DAYS",
+	7:  "FIVE_TO_SIX_DAYS",
+	8:  "SIX_TO_SEVEN_DAYS",
+	9:  "SEVEN_TO_EIGHT_DAYS",
+	10: "EIGHT_TO_NINE_DAYS",
+	11: "NINE_TO_TEN_DAYS",
+	12: "TEN_TO_ELEVEN_DAYS",
+	13: "ELEVEN_TO_TWELVE_DAYS",
+	14: "TWELVE_TO_THIRTEEN_DAYS",
+	15: "THIRTEEN_TO_FOURTEEN_DAYS",
+	16: "FOURTEEN_TO_TWENTY_ONE_DAYS",
+	17: "TWENTY_ONE_TO_THIRTY_DAYS",
+	18: "THIRTY_TO_FORTY_FIVE_DAYS",
+	19: "FORTY_FIVE_TO_SIXTY_DAYS",
+	20: "SIXTY_TO_NINETY_DAYS",
+}
+
+var ConversionLagBucketEnum_ConversionLagBucket_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"LESS_THAN_ONE_DAY":           2,
+	"ONE_TO_TWO_DAYS":             3,
+	"TWO_TO_THREE_DAYS":           4,
+	"THREE_TO_FOUR_DAYS":          5,
+	"FOUR_TO_FIVE_DAYS":           6,
+	"FIVE_TO_SIX_DAYS":            7,
+	"SIX_TO_SEVEN_DAYS":           8,
+	"SEVEN_TO_EIGHT_DAYS":         9,
+	"EIGHT_TO_NINE_DAYS":          10,
+	"NINE_TO_TEN_DAYS":            11,
+	"TEN_TO_ELEVEN_DAYS":          12,
+	"ELEVEN_TO_TWELVE_DAYS":       13,
+	"TWELVE_TO_THIRTEEN_DAYS":     14,
+	"THIRTEEN_TO_FOURTEEN_DAYS":   15,
+	"FOURTEEN_TO_TWENTY_ONE_DAYS": 16,
+	"TWENTY_ONE_TO_THIRTY_DAYS":   17,
+	"THIRTY_TO_FORTY_FIVE_DAYS":   18,
+	"FORTY_FIVE_TO_SIXTY_DAYS":    19,
+	"SIXTY_TO_NINETY_DAYS":        20,
+}
+
+func (x ConversionLagBucketEnum_ConversionLagBucket) String() string {
+	return proto.EnumName(ConversionLagBucketEnum_ConversionLagBucket_name, int32(x))
+}
+
+func (ConversionLagBucketEnum_ConversionLagBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a86fb4f47a5fd7c6, []int{0, 0}
+}
+
+// Container for enum representing the number of days between impression and
+// conversion.
+type ConversionLagBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionLagBucketEnum) Reset()         { *m = ConversionLagBucketEnum{} }
+func (m *ConversionLagBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionLagBucketEnum) ProtoMessage()    {}
+func (*ConversionLagBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a86fb4f47a5fd7c6, []int{0}
+}
+
+func (m *ConversionLagBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionLagBucketEnum.Unmarshal(m, b)
+}
+func (m *ConversionLagBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionLagBucketEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionLagBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionLagBucketEnum.Merge(m, src)
+}
+func (m *ConversionLagBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionLagBucketEnum.Size(m)
+}
+func (m *ConversionLagBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionLagBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionLagBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionLagBucketEnum_ConversionLagBucket", ConversionLagBucketEnum_ConversionLagBucket_name, ConversionLagBucketEnum_ConversionLagBucket_value)
+	proto.RegisterType((*ConversionLagBucketEnum)(nil), "google.ads.googleads.v3.enums.ConversionLagBucketEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_lag_bucket.proto", fileDescriptor_a86fb4f47a5fd7c6)
+}
+
+var fileDescriptor_a86fb4f47a5fd7c6 = []byte{
+	// 512 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xd1, 0x6e, 0xda, 0x30,
+	0x14, 0x86, 0x07, 0x65, 0xed, 0x66, 0xb6, 0x91, 0x1a, 0x3a, 0xe8, 0x5a, 0x34, 0xb5, 0x0f, 0x90,
+	0x5c, 0xe4, 0x6a, 0xd9, 0x55, 0x68, 0x5d, 0x88, 0x86, 0x1c, 0x44, 0x0c, 0x1d, 0x13, 0x92, 0x95,
+	0x42, 0x14, 0xa1, 0x41, 0x8c, 0x30, 0xf0, 0x3a, 0x93, 0x76, 0xb9, 0x57, 0xd8, 0x1b, 0xec, 0x51,
+	0x26, 0xed, 0x1d, 0x26, 0xfb, 0xc4, 0x61, 0x17, 0x5d, 0x6f, 0xa2, 0xf3, 0x7f, 0xe7, 0x9c, 0x3f,
+	0xf6, 0xd1, 0x31, 0xfa, 0x90, 0x0a, 0x91, 0x2e, 0x13, 0x27, 0x9e, 0x4b, 0x07, 0x42, 0x15, 0xed,
+	0x5d, 0x27, 0xc9, 0x76, 0x2b, 0xe9, 0xcc, 0x44, 0xb6, 0x4f, 0x36, 0x72, 0x21, 0x32, 0xbe, 0x8c,
+	0x53, 0xfe, 0xb0, 0x9b, 0x7d, 0x4d, 0xb6, 0xf6, 0x7a, 0x23, 0xb6, 0x02, 0xb7, 0xa1, 0xde, 0x8e,
+	0xe7, 0xd2, 0x2e, 0x5a, 0xed, 0xbd, 0x6b, 0xeb, 0xd6, 0x77, 0x97, 0xc6, 0x79, 0xbd, 0x70, 0xe2,
+	0x2c, 0x13, 0xdb, 0x78, 0xbb, 0x10, 0x99, 0x84, 0xe6, 0xeb, 0x9f, 0x15, 0xd4, 0xbc, 0x29, 0xcc,
+	0xfb, 0x71, 0xda, 0xd1, 0xd6, 0x24, 0xdb, 0xad, 0xae, 0xbf, 0x55, 0x50, 0xfd, 0x91, 0x1c, 0xae,
+	0xa1, 0xea, 0x88, 0x46, 0x03, 0x72, 0x13, 0xdc, 0x05, 0xe4, 0xd6, 0x7a, 0x86, 0xab, 0xe8, 0x64,
+	0x44, 0x3f, 0xd1, 0xf0, 0x9e, 0x5a, 0x25, 0x7c, 0x86, 0x4e, 0xfb, 0x24, 0x8a, 0x38, 0xeb, 0xf9,
+	0x94, 0x87, 0x94, 0xf0, 0x5b, 0x7f, 0x62, 0x95, 0x71, 0x1d, 0xd5, 0x94, 0x60, 0x21, 0x67, 0xf7,
+	0xa1, 0x62, 0x91, 0x75, 0xa4, 0x6a, 0x95, 0x52, 0xb0, 0x37, 0x24, 0x04, 0x70, 0x05, 0xbf, 0x45,
+	0x18, 0x34, 0x0b, 0xf9, 0x5d, 0x38, 0x1a, 0x02, 0x7f, 0xae, 0xca, 0xb5, 0x54, 0x38, 0x18, 0xe7,
+	0xe5, 0xc7, 0xb8, 0x81, 0x2c, 0x2d, 0x59, 0xc8, 0xa3, 0xe0, 0x33, 0xd0, 0x13, 0x55, 0xac, 0x94,
+	0x82, 0x64, 0x4c, 0x28, 0xe0, 0x17, 0xb8, 0x89, 0xea, 0xa0, 0x59, 0xc8, 0x49, 0xd0, 0xed, 0x31,
+	0x48, 0xbc, 0x54, 0x3f, 0x05, 0xcd, 0x42, 0x4e, 0x03, 0x9a, 0xbb, 0x23, 0xe5, 0xae, 0xa5, 0x3a,
+	0xa4, 0xb1, 0xa9, 0xea, 0x23, 0xe6, 0x26, 0xfd, 0x83, 0xfd, 0x2b, 0x7c, 0x8e, 0xce, 0x72, 0xa0,
+	0x6f, 0x4a, 0xfa, 0xe6, 0x98, 0xaf, 0xf1, 0x05, 0x6a, 0xe6, 0x40, 0xdf, 0x37, 0x18, 0x32, 0x62,
+	0xfa, 0xde, 0xe0, 0x36, 0x3a, 0x2f, 0x50, 0x7e, 0xeb, 0x43, 0xba, 0x86, 0xdf, 0xa3, 0x8b, 0x02,
+	0x81, 0x31, 0x65, 0x13, 0x33, 0xdd, 0xc8, 0xb2, 0x74, 0xff, 0x01, 0x9a, 0x1f, 0x4c, 0x20, 0x7d,
+	0x5a, 0xd8, 0x4f, 0xc0, 0x5c, 0x05, 0x87, 0x09, 0x62, 0x7c, 0x89, 0x5a, 0xff, 0x40, 0x98, 0xa3,
+	0x69, 0xae, 0xe3, 0x16, 0x6a, 0x80, 0xce, 0x27, 0x63, 0x32, 0x8d, 0xce, 0x9f, 0x12, 0xba, 0x9a,
+	0x89, 0x95, 0xfd, 0xe4, 0x06, 0x76, 0x5a, 0x8f, 0x2c, 0xd1, 0x40, 0x6d, 0xdf, 0xa0, 0xf4, 0xa5,
+	0x93, 0xb7, 0xa6, 0x62, 0x19, 0x67, 0xa9, 0x2d, 0x36, 0xa9, 0x93, 0x26, 0x99, 0xde, 0x4d, 0xf3,
+	0x0e, 0xd6, 0x0b, 0xf9, 0x9f, 0x67, 0xf1, 0x51, 0x7f, 0xbf, 0x97, 0x8f, 0xba, 0xbe, 0xff, 0xa3,
+	0xdc, 0xee, 0x82, 0x95, 0x3f, 0x97, 0x36, 0x84, 0x2a, 0x1a, 0xbb, 0xb6, 0x5a, 0x66, 0xf9, 0xcb,
+	0xe4, 0xa7, 0xfe, 0x5c, 0x4e, 0x8b, 0xfc, 0x74, 0xec, 0x4e, 0x75, 0xfe, 0x77, 0xf9, 0x0a, 0xa0,
+	0xe7, 0xf9, 0x73, 0xe9, 0x79, 0x45, 0x85, 0xe7, 0x8d, 0x5d, 0xcf, 0xd3, 0x35, 0x0f, 0xc7, 0xfa,
+	0x60, 0xee, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0xd9, 0x61, 0xcb, 0xae, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/conversion_or_adjustment_lag_bucket.pb.go b/googleapis/ads/googleads/v3/enums/conversion_or_adjustment_lag_bucket.pb.go
new file mode 100644
index 0000000..34c4b19
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/conversion_or_adjustment_lag_bucket.pb.go
@@ -0,0 +1,348 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/conversion_or_adjustment_lag_bucket.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum representing the number of days between the impression and the
+// conversion or between the impression and adjustments to the conversion.
+type ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket int32
+
+const (
+	// Not specified.
+	ConversionOrAdjustmentLagBucketEnum_UNSPECIFIED ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionOrAdjustmentLagBucketEnum_UNKNOWN ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 1
+	// Conversion lag bucket from 0 to 1 day. 0 day is included, 1 day is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_LESS_THAN_ONE_DAY ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 2
+	// Conversion lag bucket from 1 to 2 days. 1 day is included, 2 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_ONE_TO_TWO_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 3
+	// Conversion lag bucket from 2 to 3 days. 2 days is included,
+	// 3 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_TWO_TO_THREE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 4
+	// Conversion lag bucket from 3 to 4 days. 3 days is included,
+	// 4 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_THREE_TO_FOUR_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 5
+	// Conversion lag bucket from 4 to 5 days. 4 days is included,
+	// 5 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_FOUR_TO_FIVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 6
+	// Conversion lag bucket from 5 to 6 days. 5 days is included,
+	// 6 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_FIVE_TO_SIX_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 7
+	// Conversion lag bucket from 6 to 7 days. 6 days is included,
+	// 7 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_SIX_TO_SEVEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 8
+	// Conversion lag bucket from 7 to 8 days. 7 days is included,
+	// 8 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_SEVEN_TO_EIGHT_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 9
+	// Conversion lag bucket from 8 to 9 days. 8 days is included,
+	// 9 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_EIGHT_TO_NINE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 10
+	// Conversion lag bucket from 9 to 10 days. 9 days is included,
+	// 10 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_NINE_TO_TEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 11
+	// Conversion lag bucket from 10 to 11 days. 10 days is included,
+	// 11 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_TEN_TO_ELEVEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 12
+	// Conversion lag bucket from 11 to 12 days. 11 days is included,
+	// 12 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_ELEVEN_TO_TWELVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 13
+	// Conversion lag bucket from 12 to 13 days. 12 days is included,
+	// 13 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_TWELVE_TO_THIRTEEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 14
+	// Conversion lag bucket from 13 to 14 days. 13 days is included,
+	// 14 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_THIRTEEN_TO_FOURTEEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 15
+	// Conversion lag bucket from 14 to 21 days. 14 days is included,
+	// 21 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_FOURTEEN_TO_TWENTY_ONE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 16
+	// Conversion lag bucket from 21 to 30 days. 21 days is included,
+	// 30 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_TWENTY_ONE_TO_THIRTY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 17
+	// Conversion lag bucket from 30 to 45 days. 30 days is included,
+	// 45 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_THIRTY_TO_FORTY_FIVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 18
+	// Conversion lag bucket from 45 to 60 days. 45 days is included,
+	// 60 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_FORTY_FIVE_TO_SIXTY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 19
+	// Conversion lag bucket from 60 to 90 days. 60 days is included,
+	// 90 days is not.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_SIXTY_TO_NINETY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 20
+	// Conversion adjustment lag bucket from 0 to 1 day. 0 day is included,
+	// 1 day is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_LESS_THAN_ONE_DAY ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 21
+	// Conversion adjustment lag bucket from 1 to 2 days. 1 day is included,
+	// 2 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_ONE_TO_TWO_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 22
+	// Conversion adjustment lag bucket from 2 to 3 days. 2 days is included,
+	// 3 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_TWO_TO_THREE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 23
+	// Conversion adjustment lag bucket from 3 to 4 days. 3 days is included,
+	// 4 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_THREE_TO_FOUR_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 24
+	// Conversion adjustment lag bucket from 4 to 5 days. 4 days is included,
+	// 5 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_FOUR_TO_FIVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 25
+	// Conversion adjustment lag bucket from 5 to 6 days. 5 days is included,
+	// 6 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_FIVE_TO_SIX_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 26
+	// Conversion adjustment lag bucket from 6 to 7 days. 6 days is included,
+	// 7 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_SIX_TO_SEVEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 27
+	// Conversion adjustment lag bucket from 7 to 8 days. 7 days is included,
+	// 8 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_SEVEN_TO_EIGHT_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 28
+	// Conversion adjustment lag bucket from 8 to 9 days. 8 days is included,
+	// 9 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_EIGHT_TO_NINE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 29
+	// Conversion adjustment lag bucket from 9 to 10 days. 9 days is included,
+	// 10 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_NINE_TO_TEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 30
+	// Conversion adjustment lag bucket from 10 to 11 days. 10 days is included,
+	// 11 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_TEN_TO_ELEVEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 31
+	// Conversion adjustment lag bucket from 11 to 12 days. 11 days is included,
+	// 12 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_ELEVEN_TO_TWELVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 32
+	// Conversion adjustment lag bucket from 12 to 13 days. 12 days is included,
+	// 13 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_TWELVE_TO_THIRTEEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 33
+	// Conversion adjustment lag bucket from 13 to 14 days. 13 days is included,
+	// 14 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_THIRTEEN_TO_FOURTEEN_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 34
+	// Conversion adjustment lag bucket from 14 to 21 days. 14 days is included,
+	// 21 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_FOURTEEN_TO_TWENTY_ONE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 35
+	// Conversion adjustment lag bucket from 21 to 30 days. 21 days is included,
+	// 30 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_TWENTY_ONE_TO_THIRTY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 36
+	// Conversion adjustment lag bucket from 30 to 45 days. 30 days is included,
+	// 45 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_THIRTY_TO_FORTY_FIVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 37
+	// Conversion adjustment lag bucket from 45 to 60 days. 45 days is included,
+	// 60 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_FORTY_FIVE_TO_SIXTY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 38
+	// Conversion adjustment lag bucket from 60 to 90 days. 60 days is included,
+	// 90 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_SIXTY_TO_NINETY_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 39
+	// Conversion adjustment lag bucket from 90 to 145 days. 90 days is
+	// included, 145 days is not.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_NINETY_TO_ONE_HUNDRED_AND_FORTY_FIVE_DAYS ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 40
+	// Conversion lag bucket UNKNOWN. This is for dates before conversion lag
+	// bucket was available in Google Ads.
+	ConversionOrAdjustmentLagBucketEnum_CONVERSION_UNKNOWN ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 41
+	// Conversion adjustment lag bucket UNKNOWN. This is for dates before
+	// conversion adjustment lag bucket was available in Google Ads.
+	ConversionOrAdjustmentLagBucketEnum_ADJUSTMENT_UNKNOWN ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket = 42
+)
+
+var ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CONVERSION_LESS_THAN_ONE_DAY",
+	3:  "CONVERSION_ONE_TO_TWO_DAYS",
+	4:  "CONVERSION_TWO_TO_THREE_DAYS",
+	5:  "CONVERSION_THREE_TO_FOUR_DAYS",
+	6:  "CONVERSION_FOUR_TO_FIVE_DAYS",
+	7:  "CONVERSION_FIVE_TO_SIX_DAYS",
+	8:  "CONVERSION_SIX_TO_SEVEN_DAYS",
+	9:  "CONVERSION_SEVEN_TO_EIGHT_DAYS",
+	10: "CONVERSION_EIGHT_TO_NINE_DAYS",
+	11: "CONVERSION_NINE_TO_TEN_DAYS",
+	12: "CONVERSION_TEN_TO_ELEVEN_DAYS",
+	13: "CONVERSION_ELEVEN_TO_TWELVE_DAYS",
+	14: "CONVERSION_TWELVE_TO_THIRTEEN_DAYS",
+	15: "CONVERSION_THIRTEEN_TO_FOURTEEN_DAYS",
+	16: "CONVERSION_FOURTEEN_TO_TWENTY_ONE_DAYS",
+	17: "CONVERSION_TWENTY_ONE_TO_THIRTY_DAYS",
+	18: "CONVERSION_THIRTY_TO_FORTY_FIVE_DAYS",
+	19: "CONVERSION_FORTY_FIVE_TO_SIXTY_DAYS",
+	20: "CONVERSION_SIXTY_TO_NINETY_DAYS",
+	21: "ADJUSTMENT_LESS_THAN_ONE_DAY",
+	22: "ADJUSTMENT_ONE_TO_TWO_DAYS",
+	23: "ADJUSTMENT_TWO_TO_THREE_DAYS",
+	24: "ADJUSTMENT_THREE_TO_FOUR_DAYS",
+	25: "ADJUSTMENT_FOUR_TO_FIVE_DAYS",
+	26: "ADJUSTMENT_FIVE_TO_SIX_DAYS",
+	27: "ADJUSTMENT_SIX_TO_SEVEN_DAYS",
+	28: "ADJUSTMENT_SEVEN_TO_EIGHT_DAYS",
+	29: "ADJUSTMENT_EIGHT_TO_NINE_DAYS",
+	30: "ADJUSTMENT_NINE_TO_TEN_DAYS",
+	31: "ADJUSTMENT_TEN_TO_ELEVEN_DAYS",
+	32: "ADJUSTMENT_ELEVEN_TO_TWELVE_DAYS",
+	33: "ADJUSTMENT_TWELVE_TO_THIRTEEN_DAYS",
+	34: "ADJUSTMENT_THIRTEEN_TO_FOURTEEN_DAYS",
+	35: "ADJUSTMENT_FOURTEEN_TO_TWENTY_ONE_DAYS",
+	36: "ADJUSTMENT_TWENTY_ONE_TO_THIRTY_DAYS",
+	37: "ADJUSTMENT_THIRTY_TO_FORTY_FIVE_DAYS",
+	38: "ADJUSTMENT_FORTY_FIVE_TO_SIXTY_DAYS",
+	39: "ADJUSTMENT_SIXTY_TO_NINETY_DAYS",
+	40: "ADJUSTMENT_NINETY_TO_ONE_HUNDRED_AND_FORTY_FIVE_DAYS",
+	41: "CONVERSION_UNKNOWN",
+	42: "ADJUSTMENT_UNKNOWN",
+}
+
+var ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket_value = map[string]int32{
+	"UNSPECIFIED":                                          0,
+	"UNKNOWN":                                              1,
+	"CONVERSION_LESS_THAN_ONE_DAY":                         2,
+	"CONVERSION_ONE_TO_TWO_DAYS":                           3,
+	"CONVERSION_TWO_TO_THREE_DAYS":                         4,
+	"CONVERSION_THREE_TO_FOUR_DAYS":                        5,
+	"CONVERSION_FOUR_TO_FIVE_DAYS":                         6,
+	"CONVERSION_FIVE_TO_SIX_DAYS":                          7,
+	"CONVERSION_SIX_TO_SEVEN_DAYS":                         8,
+	"CONVERSION_SEVEN_TO_EIGHT_DAYS":                       9,
+	"CONVERSION_EIGHT_TO_NINE_DAYS":                        10,
+	"CONVERSION_NINE_TO_TEN_DAYS":                          11,
+	"CONVERSION_TEN_TO_ELEVEN_DAYS":                        12,
+	"CONVERSION_ELEVEN_TO_TWELVE_DAYS":                     13,
+	"CONVERSION_TWELVE_TO_THIRTEEN_DAYS":                   14,
+	"CONVERSION_THIRTEEN_TO_FOURTEEN_DAYS":                 15,
+	"CONVERSION_FOURTEEN_TO_TWENTY_ONE_DAYS":               16,
+	"CONVERSION_TWENTY_ONE_TO_THIRTY_DAYS":                 17,
+	"CONVERSION_THIRTY_TO_FORTY_FIVE_DAYS":                 18,
+	"CONVERSION_FORTY_FIVE_TO_SIXTY_DAYS":                  19,
+	"CONVERSION_SIXTY_TO_NINETY_DAYS":                      20,
+	"ADJUSTMENT_LESS_THAN_ONE_DAY":                         21,
+	"ADJUSTMENT_ONE_TO_TWO_DAYS":                           22,
+	"ADJUSTMENT_TWO_TO_THREE_DAYS":                         23,
+	"ADJUSTMENT_THREE_TO_FOUR_DAYS":                        24,
+	"ADJUSTMENT_FOUR_TO_FIVE_DAYS":                         25,
+	"ADJUSTMENT_FIVE_TO_SIX_DAYS":                          26,
+	"ADJUSTMENT_SIX_TO_SEVEN_DAYS":                         27,
+	"ADJUSTMENT_SEVEN_TO_EIGHT_DAYS":                       28,
+	"ADJUSTMENT_EIGHT_TO_NINE_DAYS":                        29,
+	"ADJUSTMENT_NINE_TO_TEN_DAYS":                          30,
+	"ADJUSTMENT_TEN_TO_ELEVEN_DAYS":                        31,
+	"ADJUSTMENT_ELEVEN_TO_TWELVE_DAYS":                     32,
+	"ADJUSTMENT_TWELVE_TO_THIRTEEN_DAYS":                   33,
+	"ADJUSTMENT_THIRTEEN_TO_FOURTEEN_DAYS":                 34,
+	"ADJUSTMENT_FOURTEEN_TO_TWENTY_ONE_DAYS":               35,
+	"ADJUSTMENT_TWENTY_ONE_TO_THIRTY_DAYS":                 36,
+	"ADJUSTMENT_THIRTY_TO_FORTY_FIVE_DAYS":                 37,
+	"ADJUSTMENT_FORTY_FIVE_TO_SIXTY_DAYS":                  38,
+	"ADJUSTMENT_SIXTY_TO_NINETY_DAYS":                      39,
+	"ADJUSTMENT_NINETY_TO_ONE_HUNDRED_AND_FORTY_FIVE_DAYS": 40,
+	"CONVERSION_UNKNOWN":                                   41,
+	"ADJUSTMENT_UNKNOWN":                                   42,
+}
+
+func (x ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket) String() string {
+	return proto.EnumName(ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket_name, int32(x))
+}
+
+func (ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bd532e766f172d26, []int{0, 0}
+}
+
+// Container for enum representing the number of days between the impression and
+// the conversion or between the impression and adjustments to the conversion.
+type ConversionOrAdjustmentLagBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionOrAdjustmentLagBucketEnum) Reset()         { *m = ConversionOrAdjustmentLagBucketEnum{} }
+func (m *ConversionOrAdjustmentLagBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionOrAdjustmentLagBucketEnum) ProtoMessage()    {}
+func (*ConversionOrAdjustmentLagBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bd532e766f172d26, []int{0}
+}
+
+func (m *ConversionOrAdjustmentLagBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum.Unmarshal(m, b)
+}
+func (m *ConversionOrAdjustmentLagBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionOrAdjustmentLagBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum.Merge(m, src)
+}
+func (m *ConversionOrAdjustmentLagBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum.Size(m)
+}
+func (m *ConversionOrAdjustmentLagBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionOrAdjustmentLagBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket", ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket_name, ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket_value)
+	proto.RegisterType((*ConversionOrAdjustmentLagBucketEnum)(nil), "google.ads.googleads.v3.enums.ConversionOrAdjustmentLagBucketEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/conversion_or_adjustment_lag_bucket.proto", fileDescriptor_bd532e766f172d26)
+}
+
+var fileDescriptor_bd532e766f172d26 = []byte{
+	// 741 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x95, 0x5f, 0x73, 0xd2, 0x4c,
+	0x14, 0xc6, 0xdf, 0xd2, 0xd7, 0x56, 0xb7, 0xd5, 0xe2, 0xaa, 0x55, 0xdb, 0x52, 0xca, 0x1f, 0xdb,
+	0xda, 0x8b, 0x70, 0x81, 0x17, 0x4e, 0xbc, 0x0a, 0x65, 0x0b, 0x51, 0xdc, 0x74, 0x48, 0x00, 0x71,
+	0x98, 0xd9, 0x49, 0x0b, 0x93, 0x41, 0x4b, 0xd2, 0x21, 0xc0, 0x07, 0xd2, 0x3b, 0x3f, 0x8a, 0x7e,
+	0x13, 0xbf, 0x81, 0x77, 0xce, 0xc9, 0xb2, 0x90, 0x6c, 0x82, 0xbd, 0xe9, 0xec, 0xe4, 0x79, 0xf2,
+	0x9c, 0x93, 0x73, 0x7e, 0x65, 0x51, 0xcd, 0xf1, 0x3c, 0xe7, 0x66, 0x50, 0xb2, 0xfb, 0x7e, 0x89,
+	0x1f, 0xe1, 0x34, 0x2b, 0x97, 0x06, 0xee, 0x74, 0xe4, 0x97, 0xae, 0x3d, 0x77, 0x36, 0x18, 0xfb,
+	0x43, 0xcf, 0x65, 0xde, 0x98, 0xd9, 0xfd, 0x2f, 0x53, 0x7f, 0x32, 0x1a, 0xb8, 0x13, 0x76, 0x63,
+	0x3b, 0xec, 0x6a, 0x7a, 0xfd, 0x75, 0x30, 0x51, 0x6e, 0xc7, 0xde, 0xc4, 0xc3, 0x19, 0xfe, 0xb6,
+	0x62, 0xf7, 0x7d, 0x65, 0x11, 0xa4, 0xcc, 0xca, 0x4a, 0x10, 0xb4, 0x77, 0x20, 0xea, 0xdc, 0x0e,
+	0x4b, 0xb6, 0xeb, 0x7a, 0x13, 0x7b, 0x32, 0xf4, 0x5c, 0x9f, 0xbf, 0x9c, 0xff, 0xb5, 0x8d, 0x0a,
+	0xe7, 0x8b, 0x52, 0xc6, 0x58, 0x5b, 0x14, 0x6a, 0xd8, 0x4e, 0x25, 0x28, 0x43, 0xdc, 0xe9, 0x28,
+	0xff, 0x7d, 0x1b, 0x65, 0xef, 0xf0, 0xe1, 0x1d, 0xb4, 0xd5, 0xa2, 0xe6, 0x25, 0x39, 0xd7, 0x2f,
+	0x74, 0x52, 0x4d, 0xff, 0x87, 0xb7, 0xd0, 0x66, 0x8b, 0x7e, 0xa0, 0x46, 0x87, 0xa6, 0xd7, 0xf0,
+	0x11, 0x3a, 0x38, 0x37, 0x68, 0x9b, 0x34, 0x4d, 0xdd, 0xa0, 0xac, 0x41, 0x4c, 0x93, 0x59, 0x75,
+	0x8d, 0x32, 0x83, 0x12, 0x56, 0xd5, 0xba, 0xe9, 0x14, 0x3e, 0x44, 0x7b, 0x21, 0x07, 0x3c, 0xb7,
+	0x0c, 0x66, 0x75, 0x0c, 0x90, 0xcd, 0xf4, 0xba, 0x94, 0x00, 0x02, 0xe8, 0xf5, 0x26, 0x21, 0xdc,
+	0xf1, 0x3f, 0xce, 0xa1, 0x4c, 0xd8, 0x11, 0x48, 0x96, 0xc1, 0x2e, 0x8c, 0x56, 0x93, 0x5b, 0xee,
+	0x49, 0x21, 0x81, 0x02, 0x0e, 0xbd, 0x3d, 0x0f, 0xd9, 0xc0, 0x59, 0xb4, 0x1f, 0x76, 0x80, 0x62,
+	0x19, 0xcc, 0xd4, 0x3f, 0x71, 0xc3, 0xa6, 0x14, 0x01, 0x02, 0xe8, 0xa4, 0x4d, 0x28, 0x77, 0xdc,
+	0xc7, 0x79, 0x74, 0x18, 0x76, 0x04, 0x92, 0x65, 0x30, 0xa2, 0xd7, 0xea, 0x16, 0xf7, 0x3c, 0x90,
+	0x7a, 0xe5, 0x92, 0x65, 0x30, 0xaa, 0xd3, 0x79, 0x27, 0x48, 0xea, 0x24, 0x50, 0xe0, 0x8b, 0x45,
+	0x9d, 0x2d, 0xf9, 0x7b, 0xe7, 0x55, 0x1a, 0xcb, 0x56, 0xb6, 0x71, 0x11, 0x1d, 0x85, 0xcb, 0x34,
+	0x44, 0x2f, 0x56, 0x87, 0x34, 0xc4, 0x37, 0x3f, 0xc4, 0xc7, 0x28, 0x1f, 0x19, 0x6d, 0xa0, 0x05,
+	0xd3, 0xd5, 0x9b, 0x16, 0x11, 0x69, 0x8f, 0xf0, 0x29, 0x2a, 0x46, 0x06, 0x3c, 0x57, 0xe7, 0x33,
+	0x5e, 0x3a, 0x77, 0xf0, 0x19, 0x3a, 0x96, 0xe6, 0x2c, 0x9c, 0x56, 0x87, 0x50, 0xab, 0x2b, 0xf6,
+	0x6e, 0xa6, 0xd3, 0x72, 0xea, 0x52, 0x17, 0x1d, 0x74, 0xb9, 0xf3, 0x71, 0x52, 0xfd, 0x2e, 0xaf,
+	0x0e, 0x87, 0xe5, 0x16, 0x31, 0x3e, 0x41, 0x85, 0x48, 0xfd, 0x85, 0xce, 0x77, 0x29, 0x22, 0x9f,
+	0xe0, 0x02, 0xca, 0x46, 0xb7, 0xc9, 0x13, 0x61, 0xda, 0xc2, 0xf4, 0x14, 0x56, 0xae, 0x55, 0xdf,
+	0xb7, 0x4c, 0xeb, 0x23, 0xa1, 0x56, 0x02, 0xbc, 0xcf, 0x00, 0xde, 0x90, 0x43, 0x86, 0x77, 0x57,
+	0x4a, 0x88, 0xc3, 0xfb, 0x1c, 0x96, 0x19, 0x76, 0xc4, 0xe1, 0x7d, 0x21, 0x85, 0xc4, 0xe1, 0x7d,
+	0x09, 0xc8, 0x84, 0x1d, 0x32, 0xbc, 0x7b, 0x52, 0x44, 0x1c, 0xde, 0x7d, 0x80, 0x37, 0xec, 0x48,
+	0x80, 0xf7, 0x40, 0xea, 0x35, 0x01, 0xde, 0x8c, 0xd4, 0x49, 0x0c, 0xde, 0x43, 0xf9, 0x7b, 0xe3,
+	0xf0, 0x66, 0x01, 0xde, 0x70, 0x99, 0x44, 0x78, 0x8f, 0x00, 0xde, 0xc8, 0x68, 0x93, 0xe1, 0xcd,
+	0x01, 0x3c, 0x91, 0x01, 0xaf, 0x82, 0x37, 0x0f, 0xf0, 0x4a, 0x73, 0x5e, 0x05, 0x6f, 0x41, 0x4e,
+	0x5d, 0x09, 0x6f, 0x31, 0xa9, 0x7e, 0x22, 0xbc, 0xaf, 0x00, 0xde, 0x48, 0xfd, 0x15, 0xf0, 0x1e,
+	0x03, 0xbc, 0xd1, 0x6d, 0xc6, 0xe1, 0x3d, 0xc1, 0x6f, 0xd1, 0x1b, 0x69, 0x13, 0xdc, 0x05, 0x4d,
+	0xd6, 0x5b, 0xb4, 0xda, 0x24, 0x55, 0xa6, 0xd1, 0x6a, 0xac, 0x8f, 0x53, 0xbc, 0x8b, 0x70, 0xe8,
+	0x7f, 0x43, 0xfc, 0x96, 0xbf, 0x86, 0xe7, 0xa1, 0x44, 0xf1, 0xfc, 0xac, 0xf2, 0x67, 0x0d, 0xe5,
+	0xae, 0xbd, 0x91, 0xf2, 0xcf, 0x1b, 0xa9, 0x52, 0xbc, 0xe3, 0x22, 0xb9, 0x84, 0x9b, 0xe9, 0x72,
+	0xed, 0x73, 0x65, 0x1e, 0xe3, 0x78, 0x37, 0xb6, 0xeb, 0x28, 0xde, 0xd8, 0x29, 0x39, 0x03, 0x37,
+	0xb8, 0xb7, 0xc4, 0x8d, 0x79, 0x3b, 0xf4, 0x57, 0x5c, 0xa0, 0xef, 0x82, 0xbf, 0xdf, 0x52, 0xeb,
+	0x35, 0x4d, 0xfb, 0x91, 0xca, 0xd4, 0x78, 0x94, 0xd6, 0xf7, 0x15, 0x7e, 0x84, 0x53, 0xbb, 0xac,
+	0xc0, 0xe5, 0xe6, 0xff, 0x14, 0x7a, 0x4f, 0xeb, 0xfb, 0xbd, 0x85, 0xde, 0x6b, 0x97, 0x7b, 0x81,
+	0xfe, 0x3b, 0x95, 0xe3, 0x0f, 0x55, 0x55, 0xeb, 0xfb, 0xaa, 0xba, 0x70, 0xa8, 0x6a, 0xbb, 0xac,
+	0xaa, 0x81, 0xe7, 0x6a, 0x23, 0x68, 0xac, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x42, 0x10,
+	0x80, 0xd8, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/criterion_category_channel_availability_mode.pb.go b/googleapis/ads/googleads/v3/enums/criterion_category_channel_availability_mode.pb.go
new file mode 100644
index 0000000..7fc0617
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/criterion_category_channel_availability_mode.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/criterion_category_channel_availability_mode.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing the possible CriterionCategoryChannelAvailabilityMode.
+type CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode int32
+
+const (
+	// Not specified.
+	CriterionCategoryChannelAvailabilityModeEnum_UNSPECIFIED CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionCategoryChannelAvailabilityModeEnum_UNKNOWN CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 1
+	// The category is available to campaigns of all channel types and subtypes.
+	CriterionCategoryChannelAvailabilityModeEnum_ALL_CHANNELS CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 2
+	// The category is available to campaigns of a specific channel type,
+	// including all subtypes under it.
+	CriterionCategoryChannelAvailabilityModeEnum_CHANNEL_TYPE_AND_ALL_SUBTYPES CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 3
+	// The category is available to campaigns of a specific channel type and
+	// subtype(s).
+	CriterionCategoryChannelAvailabilityModeEnum_CHANNEL_TYPE_AND_SUBSET_SUBTYPES CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 4
+)
+
+var CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_CHANNELS",
+	3: "CHANNEL_TYPE_AND_ALL_SUBTYPES",
+	4: "CHANNEL_TYPE_AND_SUBSET_SUBTYPES",
+}
+
+var CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"ALL_CHANNELS":                     2,
+	"CHANNEL_TYPE_AND_ALL_SUBTYPES":    3,
+	"CHANNEL_TYPE_AND_SUBSET_SUBTYPES": 4,
+}
+
+func (x CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode) String() string {
+	return proto.EnumName(CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name, int32(x))
+}
+
+func (CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_187b80cdb03fe27e, []int{0, 0}
+}
+
+// Describes channel availability mode for a criterion availability - whether
+// the availability is meant to include all advertising channels, or a
+// particular channel with all its channel subtypes, or a channel with a certain
+// subset of channel subtypes.
+type CriterionCategoryChannelAvailabilityModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionCategoryChannelAvailabilityModeEnum) Reset() {
+	*m = CriterionCategoryChannelAvailabilityModeEnum{}
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CriterionCategoryChannelAvailabilityModeEnum) ProtoMessage() {}
+func (*CriterionCategoryChannelAvailabilityModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_187b80cdb03fe27e, []int{0}
+}
+
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Unmarshal(m, b)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Marshal(b, m, deterministic)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Merge(m, src)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Size(m)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode", CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name, CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_value)
+	proto.RegisterType((*CriterionCategoryChannelAvailabilityModeEnum)(nil), "google.ads.googleads.v3.enums.CriterionCategoryChannelAvailabilityModeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/criterion_category_channel_availability_mode.proto", fileDescriptor_187b80cdb03fe27e)
+}
+
+var fileDescriptor_187b80cdb03fe27e = []byte{
+	// 373 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x51, 0xc1, 0x6a, 0xe3, 0x30,
+	0x14, 0x5c, 0x3b, 0xcb, 0x2e, 0x28, 0x0b, 0x6b, 0x7c, 0x5c, 0x36, 0xb0, 0x09, 0x7b, 0xd8, 0xc3,
+	0x56, 0x3e, 0xf8, 0xa6, 0x9e, 0x64, 0xc7, 0x4d, 0x43, 0x53, 0xd7, 0xe0, 0x38, 0xa5, 0xc5, 0x20,
+	0x14, 0x5b, 0xb8, 0x02, 0x5b, 0x0a, 0x96, 0x13, 0xc8, 0xb5, 0x9f, 0xd2, 0xde, 0xfa, 0x29, 0x3d,
+	0xf7, 0x2b, 0xfa, 0x15, 0xc5, 0x76, 0x9c, 0x16, 0x4a, 0x4b, 0x2e, 0x62, 0x9e, 0xde, 0xbc, 0x19,
+	0x69, 0x1e, 0x08, 0x32, 0x29, 0xb3, 0x9c, 0x59, 0x34, 0x55, 0x56, 0x0b, 0x6b, 0xb4, 0xb1, 0x2d,
+	0x26, 0xd6, 0x85, 0xb2, 0x92, 0x92, 0x57, 0xac, 0xe4, 0x52, 0x90, 0x84, 0x56, 0x2c, 0x93, 0xe5,
+	0x96, 0x24, 0x37, 0x54, 0x08, 0x96, 0x13, 0xba, 0xa1, 0x3c, 0xa7, 0x4b, 0x9e, 0xf3, 0x6a, 0x4b,
+	0x0a, 0x99, 0x32, 0xb8, 0x2a, 0x65, 0x25, 0xcd, 0x41, 0x2b, 0x03, 0x69, 0xaa, 0xe0, 0x5e, 0x11,
+	0x6e, 0x6c, 0xd8, 0x28, 0xfe, 0xfa, 0xdd, 0x19, 0xae, 0xb8, 0x45, 0x85, 0x90, 0x15, 0xad, 0xb8,
+	0x14, 0xaa, 0x1d, 0x1e, 0x3d, 0x69, 0xe0, 0xbf, 0xdb, 0x79, 0xba, 0x3b, 0x4b, 0xb7, 0x75, 0xc4,
+	0x6f, 0x0c, 0xcf, 0x65, 0xca, 0x3c, 0xb1, 0x2e, 0x46, 0xf7, 0x1a, 0xf8, 0x77, 0xe8, 0x80, 0xf9,
+	0x13, 0xf4, 0x23, 0x3f, 0x0c, 0x3c, 0x77, 0x7a, 0x32, 0xf5, 0xc6, 0xc6, 0x17, 0xb3, 0x0f, 0xbe,
+	0x47, 0xfe, 0x99, 0x7f, 0x71, 0xe9, 0x1b, 0x9a, 0x69, 0x80, 0x1f, 0x78, 0x36, 0x23, 0xee, 0x29,
+	0xf6, 0x7d, 0x6f, 0x16, 0x1a, 0xba, 0x39, 0x04, 0x83, 0x5d, 0x45, 0xe6, 0x57, 0x81, 0x47, 0xb0,
+	0x3f, 0x26, 0x35, 0x25, 0x8c, 0x9c, 0xba, 0x0e, 0x8d, 0x9e, 0xf9, 0x17, 0xfc, 0x79, 0x47, 0x09,
+	0x23, 0x27, 0xf4, 0xe6, 0xaf, 0xac, 0xaf, 0xce, 0xad, 0x0e, 0x86, 0x89, 0x2c, 0xe0, 0xa7, 0xd1,
+	0x38, 0x47, 0x87, 0x7e, 0x24, 0xa8, 0xb3, 0x0a, 0xb4, 0x6b, 0x67, 0xa7, 0x97, 0xc9, 0x9c, 0x8a,
+	0x0c, 0xca, 0x32, 0xb3, 0x32, 0x26, 0x9a, 0x24, 0xbb, 0x65, 0xae, 0xb8, 0xfa, 0x60, 0xb7, 0xc7,
+	0xcd, 0x79, 0xa7, 0xf7, 0x26, 0x18, 0x3f, 0xe8, 0x83, 0x49, 0x2b, 0x85, 0x53, 0x05, 0x5b, 0x58,
+	0xa3, 0x85, 0x0d, 0xeb, 0x94, 0xd5, 0x63, 0xd7, 0x8f, 0x71, 0xaa, 0xe2, 0x7d, 0x3f, 0x5e, 0xd8,
+	0x71, 0xd3, 0x7f, 0xd6, 0x87, 0xed, 0x25, 0x42, 0x38, 0x55, 0x08, 0xed, 0x19, 0x08, 0x2d, 0x6c,
+	0x84, 0x1a, 0xce, 0xf2, 0x5b, 0xf3, 0x30, 0xfb, 0x25, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x59, 0xb9,
+	0x5c, 0x73, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/criterion_category_locale_availability_mode.pb.go b/googleapis/ads/googleads/v3/enums/criterion_category_locale_availability_mode.pb.go
new file mode 100644
index 0000000..9efd289
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/criterion_category_locale_availability_mode.pb.go
@@ -0,0 +1,145 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/criterion_category_locale_availability_mode.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing the possible CriterionCategoryLocaleAvailabilityMode.
+type CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode int32
+
+const (
+	// Not specified.
+	CriterionCategoryLocaleAvailabilityModeEnum_UNSPECIFIED CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionCategoryLocaleAvailabilityModeEnum_UNKNOWN CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 1
+	// The category is available to campaigns of all locales.
+	CriterionCategoryLocaleAvailabilityModeEnum_ALL_LOCALES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 2
+	// The category is available to campaigns within a list of countries,
+	// regardless of language.
+	CriterionCategoryLocaleAvailabilityModeEnum_COUNTRY_AND_ALL_LANGUAGES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 3
+	// The category is available to campaigns within a list of languages,
+	// regardless of country.
+	CriterionCategoryLocaleAvailabilityModeEnum_LANGUAGE_AND_ALL_COUNTRIES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 4
+	// The category is available to campaigns within a list of country, language
+	// pairs.
+	CriterionCategoryLocaleAvailabilityModeEnum_COUNTRY_AND_LANGUAGE CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 5
+)
+
+var CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_LOCALES",
+	3: "COUNTRY_AND_ALL_LANGUAGES",
+	4: "LANGUAGE_AND_ALL_COUNTRIES",
+	5: "COUNTRY_AND_LANGUAGE",
+}
+
+var CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"ALL_LOCALES":                2,
+	"COUNTRY_AND_ALL_LANGUAGES":  3,
+	"LANGUAGE_AND_ALL_COUNTRIES": 4,
+	"COUNTRY_AND_LANGUAGE":       5,
+}
+
+func (x CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode) String() string {
+	return proto.EnumName(CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name, int32(x))
+}
+
+func (CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8b49eae87de90e5a, []int{0, 0}
+}
+
+// Describes locale availability mode for a criterion availability - whether
+// it's available globally, or a particular country with all languages, or a
+// particular language with all countries, or a country-language pair.
+type CriterionCategoryLocaleAvailabilityModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) Reset() {
+	*m = CriterionCategoryLocaleAvailabilityModeEnum{}
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CriterionCategoryLocaleAvailabilityModeEnum) ProtoMessage() {}
+func (*CriterionCategoryLocaleAvailabilityModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8b49eae87de90e5a, []int{0}
+}
+
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Unmarshal(m, b)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Marshal(b, m, deterministic)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Merge(m, src)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Size(m)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode", CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name, CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_value)
+	proto.RegisterType((*CriterionCategoryLocaleAvailabilityModeEnum)(nil), "google.ads.googleads.v3.enums.CriterionCategoryLocaleAvailabilityModeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/criterion_category_locale_availability_mode.proto", fileDescriptor_8b49eae87de90e5a)
+}
+
+var fileDescriptor_8b49eae87de90e5a = []byte{
+	// 381 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x51, 0x4f, 0x8b, 0x9b, 0x40,
+	0x1c, 0xad, 0xa6, 0x7f, 0x60, 0x72, 0xa8, 0x48, 0x0f, 0x6d, 0x68, 0x0a, 0xc9, 0xa5, 0x87, 0x96,
+	0xf1, 0xe0, 0x6d, 0x7a, 0x9a, 0x18, 0x2b, 0xa1, 0x56, 0x43, 0xad, 0x29, 0x5d, 0x04, 0x99, 0xe8,
+	0x20, 0x03, 0x3a, 0x13, 0x1c, 0x13, 0xc8, 0x71, 0xbf, 0xca, 0x1e, 0xf7, 0xb6, 0x5f, 0x63, 0xbf,
+	0xc5, 0x5e, 0xf7, 0x53, 0x2c, 0x8e, 0x51, 0x72, 0xd9, 0x25, 0x17, 0x79, 0xce, 0x7b, 0xbf, 0xf7,
+	0x66, 0xde, 0x0f, 0x84, 0x85, 0x10, 0x45, 0x49, 0x2d, 0x92, 0x4b, 0xab, 0x83, 0x2d, 0x3a, 0xd8,
+	0x16, 0xe5, 0xfb, 0x4a, 0x5a, 0x59, 0xcd, 0x1a, 0x5a, 0x33, 0xc1, 0xd3, 0x8c, 0x34, 0xb4, 0x10,
+	0xf5, 0x31, 0x2d, 0x45, 0x46, 0x4a, 0x9a, 0x92, 0x03, 0x61, 0x25, 0xd9, 0xb2, 0x92, 0x35, 0xc7,
+	0xb4, 0x12, 0x39, 0x85, 0xbb, 0x5a, 0x34, 0xc2, 0x9c, 0x76, 0x2e, 0x90, 0xe4, 0x12, 0x0e, 0x86,
+	0xf0, 0x60, 0x43, 0x65, 0x38, 0xf9, 0xdc, 0xe7, 0xed, 0x98, 0x45, 0x38, 0x17, 0x0d, 0x69, 0x98,
+	0xe0, 0xb2, 0x1b, 0x9e, 0x3f, 0x68, 0xe0, 0x9b, 0xd3, 0x47, 0x3a, 0xa7, 0x44, 0x5f, 0x05, 0xe2,
+	0xb3, 0xbc, 0xdf, 0x22, 0xa7, 0x2e, 0xdf, 0x57, 0xf3, 0x3b, 0x0d, 0x7c, 0xbd, 0x50, 0x6f, 0xbe,
+	0x07, 0xe3, 0x38, 0x88, 0xd6, 0xae, 0xb3, 0xfa, 0xb9, 0x72, 0x97, 0xc6, 0x2b, 0x73, 0x0c, 0xde,
+	0xc5, 0xc1, 0xaf, 0x20, 0xfc, 0x17, 0x18, 0x5a, 0xcb, 0x62, 0xdf, 0x4f, 0xfd, 0xd0, 0xc1, 0xbe,
+	0x1b, 0x19, 0xba, 0x39, 0x05, 0x9f, 0x9c, 0x30, 0x0e, 0xfe, 0xfe, 0xf9, 0x9f, 0xe2, 0x60, 0x99,
+	0x2a, 0x12, 0x07, 0x5e, 0x8c, 0x3d, 0x37, 0x32, 0x46, 0xe6, 0x17, 0x30, 0xe9, 0x7f, 0x07, 0xbe,
+	0xd3, 0xaf, 0xdc, 0xc8, 0x78, 0x6d, 0x7e, 0x04, 0x1f, 0xce, 0xc7, 0x7b, 0xad, 0xf1, 0x66, 0x71,
+	0xad, 0x83, 0x59, 0x26, 0x2a, 0xf8, 0x62, 0x4f, 0x8b, 0xef, 0x17, 0x3e, 0x6b, 0xdd, 0xf6, 0xb6,
+	0xd6, 0xae, 0x16, 0x27, 0xbb, 0x42, 0x94, 0x84, 0x17, 0x50, 0xd4, 0x85, 0x55, 0x50, 0xae, 0x5a,
+	0xed, 0xf7, 0xba, 0x63, 0xf2, 0x99, 0x35, 0xff, 0x50, 0xdf, 0x1b, 0x7d, 0xe4, 0x61, 0x7c, 0xab,
+	0x4f, 0xbd, 0xce, 0x0a, 0xe7, 0x12, 0x76, 0xb0, 0x45, 0x1b, 0x1b, 0xb6, 0x95, 0xcb, 0xfb, 0x9e,
+	0x4f, 0x70, 0x2e, 0x93, 0x81, 0x4f, 0x36, 0x76, 0xa2, 0xf8, 0x47, 0x7d, 0xd6, 0x1d, 0x22, 0x84,
+	0x73, 0x89, 0xd0, 0xa0, 0x40, 0x68, 0x63, 0x23, 0xa4, 0x34, 0xdb, 0xb7, 0xea, 0x62, 0xf6, 0x53,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x8d, 0xfe, 0x83, 0x7e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/criterion_system_serving_status.pb.go b/googleapis/ads/googleads/v3/enums/criterion_system_serving_status.pb.go
new file mode 100644
index 0000000..c40017a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/criterion_system_serving_status.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/criterion_system_serving_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates criterion system serving statuses.
+type CriterionSystemServingStatusEnum_CriterionSystemServingStatus int32
+
+const (
+	// Not specified.
+	CriterionSystemServingStatusEnum_UNSPECIFIED CriterionSystemServingStatusEnum_CriterionSystemServingStatus = 0
+	// The value is unknown in this version.
+	CriterionSystemServingStatusEnum_UNKNOWN CriterionSystemServingStatusEnum_CriterionSystemServingStatus = 1
+	// Eligible.
+	CriterionSystemServingStatusEnum_ELIGIBLE CriterionSystemServingStatusEnum_CriterionSystemServingStatus = 2
+	// Low search volume.
+	CriterionSystemServingStatusEnum_RARELY_SERVED CriterionSystemServingStatusEnum_CriterionSystemServingStatus = 3
+)
+
+var CriterionSystemServingStatusEnum_CriterionSystemServingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ELIGIBLE",
+	3: "RARELY_SERVED",
+}
+
+var CriterionSystemServingStatusEnum_CriterionSystemServingStatus_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"ELIGIBLE":      2,
+	"RARELY_SERVED": 3,
+}
+
+func (x CriterionSystemServingStatusEnum_CriterionSystemServingStatus) String() string {
+	return proto.EnumName(CriterionSystemServingStatusEnum_CriterionSystemServingStatus_name, int32(x))
+}
+
+func (CriterionSystemServingStatusEnum_CriterionSystemServingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3daf1ed16767b341, []int{0, 0}
+}
+
+// Container for enum describing possible criterion system serving statuses.
+type CriterionSystemServingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionSystemServingStatusEnum) Reset()         { *m = CriterionSystemServingStatusEnum{} }
+func (m *CriterionSystemServingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CriterionSystemServingStatusEnum) ProtoMessage()    {}
+func (*CriterionSystemServingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3daf1ed16767b341, []int{0}
+}
+
+func (m *CriterionSystemServingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionSystemServingStatusEnum.Unmarshal(m, b)
+}
+func (m *CriterionSystemServingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionSystemServingStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CriterionSystemServingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionSystemServingStatusEnum.Merge(m, src)
+}
+func (m *CriterionSystemServingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionSystemServingStatusEnum.Size(m)
+}
+func (m *CriterionSystemServingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionSystemServingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionSystemServingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CriterionSystemServingStatusEnum_CriterionSystemServingStatus", CriterionSystemServingStatusEnum_CriterionSystemServingStatus_name, CriterionSystemServingStatusEnum_CriterionSystemServingStatus_value)
+	proto.RegisterType((*CriterionSystemServingStatusEnum)(nil), "google.ads.googleads.v3.enums.CriterionSystemServingStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/criterion_system_serving_status.proto", fileDescriptor_3daf1ed16767b341)
+}
+
+var fileDescriptor_3daf1ed16767b341 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4a, 0xc3, 0x40,
+	0x14, 0x34, 0x29, 0xa8, 0x6c, 0x15, 0x63, 0x8e, 0xd2, 0x82, 0xed, 0x07, 0x6c, 0x0e, 0xb9, 0xad,
+	0xa7, 0xa4, 0x5d, 0x4b, 0xb0, 0xc4, 0xd2, 0xd0, 0x88, 0x12, 0x09, 0xb1, 0x09, 0x4b, 0xa0, 0xd9,
+	0x2d, 0x79, 0xdb, 0x82, 0x47, 0x7f, 0xc5, 0xa3, 0x9f, 0xe2, 0xa7, 0xf8, 0x01, 0x9e, 0x25, 0xbb,
+	0x4d, 0x6f, 0xe6, 0xb2, 0x0c, 0xfb, 0xe6, 0xcd, 0xbc, 0x19, 0x34, 0x61, 0x42, 0xb0, 0x4d, 0xe1,
+	0x64, 0x39, 0x38, 0x1a, 0x36, 0x68, 0xef, 0x3a, 0x05, 0xdf, 0x55, 0xe0, 0xac, 0xeb, 0x52, 0x16,
+	0x75, 0x29, 0x78, 0x0a, 0xef, 0x20, 0x8b, 0x2a, 0x85, 0xa2, 0xde, 0x97, 0x9c, 0xa5, 0x20, 0x33,
+	0xb9, 0x03, 0xbc, 0xad, 0x85, 0x14, 0xf6, 0x50, 0x6f, 0xe2, 0x2c, 0x07, 0x7c, 0x14, 0xc1, 0x7b,
+	0x17, 0x2b, 0x91, 0x9b, 0x41, 0xeb, 0xb1, 0x2d, 0x9d, 0x8c, 0x73, 0x21, 0x33, 0x59, 0x0a, 0x7e,
+	0x58, 0x1e, 0x7f, 0x18, 0xe8, 0x76, 0xd2, 0xda, 0x44, 0xca, 0x25, 0xd2, 0x26, 0x91, 0xf2, 0xa0,
+	0x7c, 0x57, 0x8d, 0x5f, 0xd1, 0xa0, 0x8b, 0x63, 0x5f, 0xa1, 0xfe, 0x2a, 0x8c, 0x16, 0x74, 0x12,
+	0xdc, 0x07, 0x74, 0x6a, 0x9d, 0xd8, 0x7d, 0x74, 0xb6, 0x0a, 0x1f, 0xc2, 0xc7, 0xa7, 0xd0, 0x32,
+	0xec, 0x0b, 0x74, 0x4e, 0xe7, 0xc1, 0x2c, 0xf0, 0xe7, 0xd4, 0x32, 0xed, 0x6b, 0x74, 0xb9, 0xf4,
+	0x96, 0x74, 0xfe, 0x9c, 0x46, 0x74, 0x19, 0xd3, 0xa9, 0xd5, 0xf3, 0x7f, 0x0d, 0x34, 0x5a, 0x8b,
+	0x0a, 0x77, 0xe6, 0xf0, 0x47, 0x5d, 0x27, 0x2c, 0x9a, 0x30, 0x0b, 0xe3, 0xc5, 0x3f, 0x68, 0x30,
+	0xb1, 0xc9, 0x38, 0xc3, 0xa2, 0x66, 0x0e, 0x2b, 0xb8, 0x8a, 0xda, 0x16, 0xbc, 0x2d, 0xe1, 0x9f,
+	0xbe, 0xef, 0xd4, 0xfb, 0x69, 0xf6, 0x66, 0x9e, 0xf7, 0x65, 0x0e, 0x67, 0x5a, 0xca, 0xcb, 0x01,
+	0x6b, 0xd8, 0xa0, 0xd8, 0xc5, 0x4d, 0x25, 0xf0, 0xdd, 0xce, 0x13, 0x2f, 0x87, 0xe4, 0x38, 0x4f,
+	0x62, 0x37, 0x51, 0xf3, 0x1f, 0x73, 0xa4, 0x3f, 0x09, 0xf1, 0x72, 0x20, 0xe4, 0xc8, 0x20, 0x24,
+	0x76, 0x09, 0x51, 0x9c, 0xb7, 0x53, 0x75, 0x98, 0xfb, 0x17, 0x00, 0x00, 0xff, 0xff, 0x67, 0xec,
+	0x1f, 0x3c, 0x07, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/criterion_type.pb.go b/googleapis/ads/googleads/v3/enums/criterion_type.pb.go
new file mode 100644
index 0000000..e81b051
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/criterion_type.pb.go
@@ -0,0 +1,255 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/criterion_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible criterion types.
+type CriterionTypeEnum_CriterionType int32
+
+const (
+	// Not specified.
+	CriterionTypeEnum_UNSPECIFIED CriterionTypeEnum_CriterionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionTypeEnum_UNKNOWN CriterionTypeEnum_CriterionType = 1
+	// Keyword. e.g. 'mars cruise'.
+	CriterionTypeEnum_KEYWORD CriterionTypeEnum_CriterionType = 2
+	// Placement, aka Website. e.g. 'www.flowers4sale.com'
+	CriterionTypeEnum_PLACEMENT CriterionTypeEnum_CriterionType = 3
+	// Mobile application categories to target.
+	CriterionTypeEnum_MOBILE_APP_CATEGORY CriterionTypeEnum_CriterionType = 4
+	// Mobile applications to target.
+	CriterionTypeEnum_MOBILE_APPLICATION CriterionTypeEnum_CriterionType = 5
+	// Devices to target.
+	CriterionTypeEnum_DEVICE CriterionTypeEnum_CriterionType = 6
+	// Locations to target.
+	CriterionTypeEnum_LOCATION CriterionTypeEnum_CriterionType = 7
+	// Listing groups to target.
+	CriterionTypeEnum_LISTING_GROUP CriterionTypeEnum_CriterionType = 8
+	// Ad Schedule.
+	CriterionTypeEnum_AD_SCHEDULE CriterionTypeEnum_CriterionType = 9
+	// Age range.
+	CriterionTypeEnum_AGE_RANGE CriterionTypeEnum_CriterionType = 10
+	// Gender.
+	CriterionTypeEnum_GENDER CriterionTypeEnum_CriterionType = 11
+	// Income Range.
+	CriterionTypeEnum_INCOME_RANGE CriterionTypeEnum_CriterionType = 12
+	// Parental status.
+	CriterionTypeEnum_PARENTAL_STATUS CriterionTypeEnum_CriterionType = 13
+	// YouTube Video.
+	CriterionTypeEnum_YOUTUBE_VIDEO CriterionTypeEnum_CriterionType = 14
+	// YouTube Channel.
+	CriterionTypeEnum_YOUTUBE_CHANNEL CriterionTypeEnum_CriterionType = 15
+	// User list.
+	CriterionTypeEnum_USER_LIST CriterionTypeEnum_CriterionType = 16
+	// Proximity.
+	CriterionTypeEnum_PROXIMITY CriterionTypeEnum_CriterionType = 17
+	// A topic target on the display network (e.g. "Pets & Animals").
+	CriterionTypeEnum_TOPIC CriterionTypeEnum_CriterionType = 18
+	// Listing scope to target.
+	CriterionTypeEnum_LISTING_SCOPE CriterionTypeEnum_CriterionType = 19
+	// Language.
+	CriterionTypeEnum_LANGUAGE CriterionTypeEnum_CriterionType = 20
+	// IpBlock.
+	CriterionTypeEnum_IP_BLOCK CriterionTypeEnum_CriterionType = 21
+	// Content Label for category exclusion.
+	CriterionTypeEnum_CONTENT_LABEL CriterionTypeEnum_CriterionType = 22
+	// Carrier.
+	CriterionTypeEnum_CARRIER CriterionTypeEnum_CriterionType = 23
+	// A category the user is interested in.
+	CriterionTypeEnum_USER_INTEREST CriterionTypeEnum_CriterionType = 24
+	// Webpage criterion for dynamic search ads.
+	CriterionTypeEnum_WEBPAGE CriterionTypeEnum_CriterionType = 25
+	// Operating system version.
+	CriterionTypeEnum_OPERATING_SYSTEM_VERSION CriterionTypeEnum_CriterionType = 26
+	// App payment model.
+	CriterionTypeEnum_APP_PAYMENT_MODEL CriterionTypeEnum_CriterionType = 27
+	// Mobile device.
+	CriterionTypeEnum_MOBILE_DEVICE CriterionTypeEnum_CriterionType = 28
+	// Custom affinity.
+	CriterionTypeEnum_CUSTOM_AFFINITY CriterionTypeEnum_CriterionType = 29
+	// Custom intent.
+	CriterionTypeEnum_CUSTOM_INTENT CriterionTypeEnum_CriterionType = 30
+	// Location group.
+	CriterionTypeEnum_LOCATION_GROUP CriterionTypeEnum_CriterionType = 31
+)
+
+var CriterionTypeEnum_CriterionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "KEYWORD",
+	3:  "PLACEMENT",
+	4:  "MOBILE_APP_CATEGORY",
+	5:  "MOBILE_APPLICATION",
+	6:  "DEVICE",
+	7:  "LOCATION",
+	8:  "LISTING_GROUP",
+	9:  "AD_SCHEDULE",
+	10: "AGE_RANGE",
+	11: "GENDER",
+	12: "INCOME_RANGE",
+	13: "PARENTAL_STATUS",
+	14: "YOUTUBE_VIDEO",
+	15: "YOUTUBE_CHANNEL",
+	16: "USER_LIST",
+	17: "PROXIMITY",
+	18: "TOPIC",
+	19: "LISTING_SCOPE",
+	20: "LANGUAGE",
+	21: "IP_BLOCK",
+	22: "CONTENT_LABEL",
+	23: "CARRIER",
+	24: "USER_INTEREST",
+	25: "WEBPAGE",
+	26: "OPERATING_SYSTEM_VERSION",
+	27: "APP_PAYMENT_MODEL",
+	28: "MOBILE_DEVICE",
+	29: "CUSTOM_AFFINITY",
+	30: "CUSTOM_INTENT",
+	31: "LOCATION_GROUP",
+}
+
+var CriterionTypeEnum_CriterionType_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"KEYWORD":                  2,
+	"PLACEMENT":                3,
+	"MOBILE_APP_CATEGORY":      4,
+	"MOBILE_APPLICATION":       5,
+	"DEVICE":                   6,
+	"LOCATION":                 7,
+	"LISTING_GROUP":            8,
+	"AD_SCHEDULE":              9,
+	"AGE_RANGE":                10,
+	"GENDER":                   11,
+	"INCOME_RANGE":             12,
+	"PARENTAL_STATUS":          13,
+	"YOUTUBE_VIDEO":            14,
+	"YOUTUBE_CHANNEL":          15,
+	"USER_LIST":                16,
+	"PROXIMITY":                17,
+	"TOPIC":                    18,
+	"LISTING_SCOPE":            19,
+	"LANGUAGE":                 20,
+	"IP_BLOCK":                 21,
+	"CONTENT_LABEL":            22,
+	"CARRIER":                  23,
+	"USER_INTEREST":            24,
+	"WEBPAGE":                  25,
+	"OPERATING_SYSTEM_VERSION": 26,
+	"APP_PAYMENT_MODEL":        27,
+	"MOBILE_DEVICE":            28,
+	"CUSTOM_AFFINITY":          29,
+	"CUSTOM_INTENT":            30,
+	"LOCATION_GROUP":           31,
+}
+
+func (x CriterionTypeEnum_CriterionType) String() string {
+	return proto.EnumName(CriterionTypeEnum_CriterionType_name, int32(x))
+}
+
+func (CriterionTypeEnum_CriterionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_72b4b59f943d7aa1, []int{0, 0}
+}
+
+// The possible types of a criterion.
+type CriterionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionTypeEnum) Reset()         { *m = CriterionTypeEnum{} }
+func (m *CriterionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CriterionTypeEnum) ProtoMessage()    {}
+func (*CriterionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_72b4b59f943d7aa1, []int{0}
+}
+
+func (m *CriterionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionTypeEnum.Unmarshal(m, b)
+}
+func (m *CriterionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CriterionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionTypeEnum.Merge(m, src)
+}
+func (m *CriterionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionTypeEnum.Size(m)
+}
+func (m *CriterionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CriterionTypeEnum_CriterionType", CriterionTypeEnum_CriterionType_name, CriterionTypeEnum_CriterionType_value)
+	proto.RegisterType((*CriterionTypeEnum)(nil), "google.ads.googleads.v3.enums.CriterionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/criterion_type.proto", fileDescriptor_72b4b59f943d7aa1)
+}
+
+var fileDescriptor_72b4b59f943d7aa1 = []byte{
+	// 623 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x4d, 0x6e, 0xdb, 0x3a,
+	0x10, 0x7e, 0x71, 0xfe, 0x99, 0x38, 0xa1, 0x99, 0x97, 0x9f, 0x97, 0x97, 0xbc, 0x87, 0xe4, 0x00,
+	0x32, 0x50, 0xef, 0xd4, 0x15, 0x45, 0x4d, 0x14, 0x22, 0x32, 0x49, 0x50, 0x94, 0x53, 0x17, 0x06,
+	0x08, 0x37, 0x36, 0x0c, 0x03, 0x89, 0x64, 0x58, 0x4e, 0x80, 0x5c, 0xa7, 0xcb, 0x1e, 0xa2, 0x07,
+	0xe8, 0xba, 0x77, 0x28, 0xd0, 0x53, 0x14, 0x94, 0xac, 0xb4, 0x59, 0xb4, 0x1b, 0x61, 0x34, 0xdf,
+	0xcc, 0x37, 0xdf, 0xfc, 0x10, 0xbd, 0x99, 0xe4, 0xf9, 0xe4, 0x7e, 0xdc, 0x1e, 0x8e, 0x8a, 0x76,
+	0x65, 0x3a, 0xeb, 0xa9, 0xd3, 0x1e, 0x67, 0x8f, 0x0f, 0x45, 0xfb, 0x6e, 0x3e, 0x5d, 0x8c, 0xe7,
+	0xd3, 0x3c, 0xb3, 0x8b, 0xe7, 0xd9, 0xd8, 0x9b, 0xcd, 0xf3, 0x45, 0x4e, 0xce, 0xab, 0x40, 0x6f,
+	0x38, 0x2a, 0xbc, 0x97, 0x1c, 0xef, 0xa9, 0xe3, 0x95, 0x39, 0xa7, 0x67, 0x35, 0xe5, 0x6c, 0xda,
+	0x1e, 0x66, 0x59, 0xbe, 0x18, 0x2e, 0xa6, 0x79, 0x56, 0x54, 0xc9, 0x97, 0x5f, 0xd7, 0x50, 0x8b,
+	0xd5, 0xac, 0xe6, 0x79, 0x36, 0x86, 0xec, 0xf1, 0xe1, 0xf2, 0xf3, 0x1a, 0x6a, 0xbe, 0xf2, 0x92,
+	0x7d, 0xb4, 0x93, 0x8a, 0x44, 0x01, 0xe3, 0x57, 0x1c, 0x42, 0xfc, 0x17, 0xd9, 0x41, 0x9b, 0xa9,
+	0xb8, 0x11, 0xf2, 0x56, 0xe0, 0x15, 0xf7, 0x73, 0x03, 0xfd, 0x5b, 0xa9, 0x43, 0xdc, 0x20, 0x4d,
+	0xb4, 0xad, 0x62, 0xca, 0xa0, 0x0b, 0xc2, 0xe0, 0x55, 0x72, 0x8c, 0x0e, 0xba, 0x32, 0xe0, 0x31,
+	0x58, 0xaa, 0x94, 0x65, 0xd4, 0x40, 0x24, 0x75, 0x1f, 0xaf, 0x91, 0x23, 0x44, 0x7e, 0x02, 0x31,
+	0x67, 0xd4, 0x70, 0x29, 0xf0, 0x3a, 0x41, 0x68, 0x23, 0x84, 0x1e, 0x67, 0x80, 0x37, 0xc8, 0x2e,
+	0xda, 0x8a, 0xe5, 0x12, 0xd9, 0x24, 0x2d, 0xd4, 0x8c, 0x79, 0x62, 0xb8, 0x88, 0x6c, 0xa4, 0x65,
+	0xaa, 0xf0, 0x96, 0xd3, 0x45, 0x43, 0x9b, 0xb0, 0x6b, 0x08, 0xd3, 0x18, 0xf0, 0xb6, 0xab, 0x4e,
+	0x23, 0xb0, 0x9a, 0x8a, 0x08, 0x30, 0x72, 0x64, 0x11, 0x88, 0x10, 0x34, 0xde, 0x21, 0x18, 0xed,
+	0x72, 0xc1, 0x64, 0xb7, 0x46, 0x77, 0xc9, 0x01, 0xda, 0x57, 0x54, 0x83, 0x30, 0x34, 0xb6, 0x89,
+	0xa1, 0x26, 0x4d, 0x70, 0xd3, 0x55, 0xe9, 0xcb, 0xd4, 0xa4, 0x01, 0xd8, 0x1e, 0x0f, 0x41, 0xe2,
+	0x3d, 0x17, 0x57, 0xbb, 0xd8, 0x35, 0x15, 0x02, 0x62, 0xbc, 0xef, 0x2a, 0xa5, 0x09, 0x68, 0xeb,
+	0x24, 0x61, 0x5c, 0xb6, 0xad, 0xe5, 0x3b, 0xde, 0xe5, 0xa6, 0x8f, 0x5b, 0x64, 0x1b, 0xad, 0x1b,
+	0xa9, 0x38, 0xc3, 0xe4, 0x57, 0xd9, 0x09, 0x93, 0x0a, 0xf0, 0x41, 0xd9, 0x17, 0x15, 0x51, 0x4a,
+	0x23, 0xc0, 0x7f, 0xbb, 0x3f, 0xae, 0x6c, 0x10, 0x4b, 0x76, 0x83, 0x0f, 0x5d, 0x38, 0x93, 0xc2,
+	0x80, 0x30, 0x36, 0xa6, 0x01, 0xc4, 0xf8, 0xc8, 0xcd, 0x97, 0x51, 0xad, 0x39, 0x68, 0x7c, 0xec,
+	0xf0, 0xb2, 0x2e, 0x17, 0x06, 0x34, 0x24, 0x06, 0x9f, 0x38, 0xfc, 0x16, 0x02, 0xe5, 0xd8, 0xfe,
+	0x21, 0x67, 0xe8, 0x44, 0x2a, 0xd0, 0xb4, 0x2a, 0xd8, 0x4f, 0x0c, 0x74, 0x6d, 0x0f, 0x74, 0xe2,
+	0x66, 0x78, 0x4a, 0x0e, 0x51, 0xcb, 0xed, 0x41, 0xd1, 0xbe, 0xdb, 0x8f, 0xed, 0xca, 0x10, 0x62,
+	0xfc, 0xaf, 0x23, 0x5d, 0x2e, 0x63, 0x39, 0xfb, 0x33, 0xd7, 0x34, 0x4b, 0x13, 0x23, 0xbb, 0x96,
+	0x5e, 0x5d, 0x71, 0xe1, 0xda, 0x3a, 0x2f, 0xc5, 0x55, 0x4e, 0x5e, 0x4a, 0xc4, 0xff, 0x11, 0x82,
+	0xf6, 0xea, 0x1d, 0x2d, 0xd7, 0xf2, 0x7f, 0xf0, 0x6d, 0x05, 0x5d, 0xdc, 0xe5, 0x0f, 0xde, 0x1f,
+	0x4f, 0x33, 0x20, 0xaf, 0x6e, 0x4c, 0xb9, 0x83, 0x54, 0x2b, 0xef, 0x83, 0x65, 0xd2, 0x24, 0xbf,
+	0x1f, 0x66, 0x13, 0x2f, 0x9f, 0x4f, 0xda, 0x93, 0x71, 0x56, 0x9e, 0x6b, 0xfd, 0x26, 0x66, 0xd3,
+	0xe2, 0x37, 0x4f, 0xe4, 0x6d, 0xf9, 0xfd, 0xd8, 0x58, 0x8d, 0x28, 0xfd, 0xd4, 0x38, 0x8f, 0x2a,
+	0x2a, 0x3a, 0x2a, 0xbc, 0xca, 0x74, 0x56, 0xaf, 0xe3, 0xb9, 0x2b, 0x2f, 0xbe, 0xd4, 0xf8, 0x80,
+	0x8e, 0x8a, 0xc1, 0x0b, 0x3e, 0xe8, 0x75, 0x06, 0x25, 0xfe, 0xbd, 0x71, 0x51, 0x39, 0x7d, 0x9f,
+	0x8e, 0x0a, 0xdf, 0x7f, 0x89, 0xf0, 0xfd, 0x5e, 0xc7, 0xf7, 0xcb, 0x98, 0x0f, 0x1b, 0xa5, 0xb0,
+	0xce, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x1c, 0x45, 0x45, 0xba, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/custom_interest_member_type.pb.go b/googleapis/ads/googleads/v3/enums/custom_interest_member_type.pb.go
new file mode 100644
index 0000000..cb4fff2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/custom_interest_member_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/custom_interest_member_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible custom interest member types.
+type CustomInterestMemberTypeEnum_CustomInterestMemberType int32
+
+const (
+	// Not specified.
+	CustomInterestMemberTypeEnum_UNSPECIFIED CustomInterestMemberTypeEnum_CustomInterestMemberType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomInterestMemberTypeEnum_UNKNOWN CustomInterestMemberTypeEnum_CustomInterestMemberType = 1
+	// Custom interest member type KEYWORD.
+	CustomInterestMemberTypeEnum_KEYWORD CustomInterestMemberTypeEnum_CustomInterestMemberType = 2
+	// Custom interest member type URL.
+	CustomInterestMemberTypeEnum_URL CustomInterestMemberTypeEnum_CustomInterestMemberType = 3
+)
+
+var CustomInterestMemberTypeEnum_CustomInterestMemberType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "KEYWORD",
+	3: "URL",
+}
+
+var CustomInterestMemberTypeEnum_CustomInterestMemberType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"KEYWORD":     2,
+	"URL":         3,
+}
+
+func (x CustomInterestMemberTypeEnum_CustomInterestMemberType) String() string {
+	return proto.EnumName(CustomInterestMemberTypeEnum_CustomInterestMemberType_name, int32(x))
+}
+
+func (CustomInterestMemberTypeEnum_CustomInterestMemberType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1e2f9e6f3d781c9a, []int{0, 0}
+}
+
+// The types of custom interest member, either KEYWORD or URL.
+type CustomInterestMemberTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomInterestMemberTypeEnum) Reset()         { *m = CustomInterestMemberTypeEnum{} }
+func (m *CustomInterestMemberTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestMemberTypeEnum) ProtoMessage()    {}
+func (*CustomInterestMemberTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e2f9e6f3d781c9a, []int{0}
+}
+
+func (m *CustomInterestMemberTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestMemberTypeEnum.Unmarshal(m, b)
+}
+func (m *CustomInterestMemberTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestMemberTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestMemberTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestMemberTypeEnum.Merge(m, src)
+}
+func (m *CustomInterestMemberTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestMemberTypeEnum.Size(m)
+}
+func (m *CustomInterestMemberTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestMemberTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestMemberTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomInterestMemberTypeEnum_CustomInterestMemberType", CustomInterestMemberTypeEnum_CustomInterestMemberType_name, CustomInterestMemberTypeEnum_CustomInterestMemberType_value)
+	proto.RegisterType((*CustomInterestMemberTypeEnum)(nil), "google.ads.googleads.v3.enums.CustomInterestMemberTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/custom_interest_member_type.proto", fileDescriptor_1e2f9e6f3d781c9a)
+}
+
+var fileDescriptor_1e2f9e6f3d781c9a = []byte{
+	// 314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x6b, 0xfa, 0x30,
+	0x18, 0xfe, 0x59, 0xe1, 0x27, 0xc4, 0xc3, 0x4a, 0x4f, 0x63, 0xe8, 0x41, 0x3f, 0x40, 0x72, 0xc8,
+	0x2d, 0x3b, 0x8c, 0xaa, 0x9d, 0x88, 0x5b, 0x15, 0x37, 0x95, 0x8d, 0x42, 0xa9, 0x36, 0x84, 0x82,
+	0x49, 0x4a, 0x93, 0x0a, 0x7e, 0x9d, 0x1d, 0xf7, 0x51, 0xf6, 0x51, 0x76, 0xdc, 0x27, 0x18, 0x4d,
+	0x6c, 0x6f, 0xdd, 0xa5, 0x3c, 0xcd, 0xf3, 0x3e, 0x7f, 0xde, 0x17, 0x3c, 0x30, 0x29, 0xd9, 0x89,
+	0xa2, 0x24, 0x55, 0xc8, 0xc2, 0x0a, 0x9d, 0x31, 0xa2, 0xa2, 0xe4, 0x0a, 0x1d, 0x4b, 0xa5, 0x25,
+	0x8f, 0x33, 0xa1, 0x69, 0x41, 0x95, 0x8e, 0x39, 0xe5, 0x07, 0x5a, 0xc4, 0xfa, 0x92, 0x53, 0x98,
+	0x17, 0x52, 0x4b, 0x6f, 0x68, 0x55, 0x30, 0x49, 0x15, 0x6c, 0x0c, 0xe0, 0x19, 0x43, 0x63, 0x70,
+	0x37, 0xa8, 0xfd, 0xf3, 0x0c, 0x25, 0x42, 0x48, 0x9d, 0xe8, 0x4c, 0x0a, 0x65, 0xc5, 0x63, 0x01,
+	0x06, 0x53, 0x93, 0xb0, 0xb8, 0x06, 0x3c, 0x1b, 0xff, 0xd7, 0x4b, 0x4e, 0x03, 0x51, 0xf2, 0x71,
+	0x08, 0x6e, 0xdb, 0x78, 0xef, 0x06, 0xf4, 0xb7, 0xe1, 0xcb, 0x3a, 0x98, 0x2e, 0x1e, 0x17, 0xc1,
+	0xcc, 0xfd, 0xe7, 0xf5, 0x41, 0x6f, 0x1b, 0x2e, 0xc3, 0xd5, 0x3e, 0x74, 0x3b, 0xd5, 0xcf, 0x32,
+	0x78, 0xdb, 0xaf, 0x36, 0x33, 0xd7, 0xf1, 0x7a, 0xa0, 0xbb, 0xdd, 0x3c, 0xb9, 0xdd, 0xc9, 0x4f,
+	0x07, 0x8c, 0x8e, 0x92, 0xc3, 0x3f, 0x3b, 0x4f, 0x86, 0x6d, 0x99, 0xeb, 0xaa, 0xf4, 0xba, 0xf3,
+	0x3e, 0xb9, 0xea, 0x99, 0x3c, 0x25, 0x82, 0x41, 0x59, 0x30, 0xc4, 0xa8, 0x30, 0x2b, 0xd5, 0x47,
+	0xcc, 0x33, 0xd5, 0x72, 0xd3, 0x7b, 0xf3, 0xfd, 0x70, 0xba, 0x73, 0xdf, 0xff, 0x74, 0x86, 0x73,
+	0x6b, 0xe5, 0xa7, 0x0a, 0x5a, 0x58, 0xa1, 0x1d, 0x86, 0xd5, 0xfe, 0xea, 0xab, 0xe6, 0x23, 0x3f,
+	0x55, 0x51, 0xc3, 0x47, 0x3b, 0x1c, 0x19, 0xfe, 0xdb, 0x19, 0xd9, 0x47, 0x42, 0xfc, 0x54, 0x11,
+	0xd2, 0x4c, 0x10, 0xb2, 0xc3, 0x84, 0x98, 0x99, 0xc3, 0x7f, 0x53, 0x0c, 0xff, 0x06, 0x00, 0x00,
+	0xff, 0xff, 0x87, 0x00, 0x9b, 0xbb, 0xeb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/custom_interest_status.pb.go b/googleapis/ads/googleads/v3/enums/custom_interest_status.pb.go
new file mode 100644
index 0000000..62e9b5e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/custom_interest_status.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/custom_interest_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible custom interest types.
+type CustomInterestStatusEnum_CustomInterestStatus int32
+
+const (
+	// Not specified.
+	CustomInterestStatusEnum_UNSPECIFIED CustomInterestStatusEnum_CustomInterestStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomInterestStatusEnum_UNKNOWN CustomInterestStatusEnum_CustomInterestStatus = 1
+	// Enabled status - custom interest is enabled and can be targeted to.
+	CustomInterestStatusEnum_ENABLED CustomInterestStatusEnum_CustomInterestStatus = 2
+	// Removed status - custom interest is removed and cannot be used for
+	// targeting.
+	CustomInterestStatusEnum_REMOVED CustomInterestStatusEnum_CustomInterestStatus = 3
+)
+
+var CustomInterestStatusEnum_CustomInterestStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var CustomInterestStatusEnum_CustomInterestStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x CustomInterestStatusEnum_CustomInterestStatus) String() string {
+	return proto.EnumName(CustomInterestStatusEnum_CustomInterestStatus_name, int32(x))
+}
+
+func (CustomInterestStatusEnum_CustomInterestStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4d0aee2218e339a, []int{0, 0}
+}
+
+// The status of custom interest.
+type CustomInterestStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomInterestStatusEnum) Reset()         { *m = CustomInterestStatusEnum{} }
+func (m *CustomInterestStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestStatusEnum) ProtoMessage()    {}
+func (*CustomInterestStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4d0aee2218e339a, []int{0}
+}
+
+func (m *CustomInterestStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestStatusEnum.Unmarshal(m, b)
+}
+func (m *CustomInterestStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestStatusEnum.Merge(m, src)
+}
+func (m *CustomInterestStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestStatusEnum.Size(m)
+}
+func (m *CustomInterestStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomInterestStatusEnum_CustomInterestStatus", CustomInterestStatusEnum_CustomInterestStatus_name, CustomInterestStatusEnum_CustomInterestStatus_value)
+	proto.RegisterType((*CustomInterestStatusEnum)(nil), "google.ads.googleads.v3.enums.CustomInterestStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/custom_interest_status.proto", fileDescriptor_c4d0aee2218e339a)
+}
+
+var fileDescriptor_c4d0aee2218e339a = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4e, 0x2a, 0x31,
+	0x14, 0x7d, 0x0c, 0xc9, 0x33, 0x29, 0x0b, 0x27, 0xc4, 0x85, 0x1a, 0x59, 0xc0, 0x07, 0xb4, 0x8b,
+	0xee, 0xea, 0xaa, 0x03, 0x95, 0x10, 0xb5, 0x10, 0x09, 0x63, 0x62, 0x26, 0x21, 0x95, 0x99, 0x34,
+	0x63, 0x98, 0x96, 0x70, 0x3b, 0x7c, 0x90, 0x4b, 0x3f, 0xc5, 0x4f, 0x71, 0xe1, 0x37, 0x98, 0x76,
+	0x80, 0x15, 0xba, 0x69, 0xce, 0xed, 0xb9, 0xe7, 0xdc, 0x73, 0x2f, 0x62, 0xda, 0x5a, 0xbd, 0x2e,
+	0x88, 0xca, 0x81, 0x34, 0xd0, 0xa3, 0x1d, 0x25, 0x85, 0xa9, 0x2b, 0x20, 0xab, 0x1a, 0x9c, 0xad,
+	0x96, 0xa5, 0x71, 0xc5, 0xb6, 0x00, 0xb7, 0x04, 0xa7, 0x5c, 0x0d, 0x78, 0xb3, 0xb5, 0xce, 0x76,
+	0x7b, 0x8d, 0x00, 0xab, 0x1c, 0xf0, 0x51, 0x8b, 0x77, 0x14, 0x07, 0xed, 0xf5, 0xcd, 0xc1, 0x7a,
+	0x53, 0x12, 0x65, 0x8c, 0x75, 0xca, 0x95, 0xd6, 0xec, 0xc5, 0x83, 0x37, 0x74, 0x39, 0x0c, 0xe6,
+	0x93, 0xbd, 0xf7, 0x3c, 0x58, 0x0b, 0x53, 0x57, 0x03, 0x89, 0x2e, 0x4e, 0x71, 0xdd, 0x73, 0xd4,
+	0x59, 0xc8, 0xf9, 0x4c, 0x0c, 0x27, 0x77, 0x13, 0x31, 0x8a, 0xff, 0x75, 0x3b, 0xe8, 0x6c, 0x21,
+	0xef, 0xe5, 0xf4, 0x59, 0xc6, 0x2d, 0x5f, 0x08, 0xc9, 0x93, 0x07, 0x31, 0x8a, 0x23, 0x5f, 0x3c,
+	0x89, 0xc7, 0x69, 0x2a, 0x46, 0x71, 0x3b, 0xf9, 0x6e, 0xa1, 0xfe, 0xca, 0x56, 0xf8, 0xcf, 0xbc,
+	0xc9, 0xd5, 0xa9, 0x99, 0x33, 0x1f, 0x76, 0xd6, 0x7a, 0x49, 0xf6, 0x5a, 0x6d, 0xd7, 0xca, 0x68,
+	0x6c, 0xb7, 0x9a, 0xe8, 0xc2, 0x84, 0x55, 0x0e, 0x77, 0xdb, 0x94, 0xf0, 0xcb, 0x19, 0x6f, 0xc3,
+	0xfb, 0x1e, 0xb5, 0xc7, 0x9c, 0x7f, 0x44, 0xbd, 0x71, 0x63, 0xc5, 0x73, 0xc0, 0x0d, 0xf4, 0x28,
+	0xa5, 0xd8, 0xef, 0x0e, 0x9f, 0x07, 0x3e, 0xe3, 0x39, 0x64, 0x47, 0x3e, 0x4b, 0x69, 0x16, 0xf8,
+	0xaf, 0xa8, 0xdf, 0x7c, 0x32, 0xc6, 0x73, 0x60, 0xec, 0xd8, 0xc1, 0x58, 0x4a, 0x19, 0x0b, 0x3d,
+	0xaf, 0xff, 0x43, 0x30, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0x75, 0x5e, 0xc1, 0xae, 0xde, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/custom_interest_type.pb.go b/googleapis/ads/googleads/v3/enums/custom_interest_type.pb.go
new file mode 100644
index 0000000..0487bc3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/custom_interest_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/custom_interest_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible custom interest types.
+type CustomInterestTypeEnum_CustomInterestType int32
+
+const (
+	// Not specified.
+	CustomInterestTypeEnum_UNSPECIFIED CustomInterestTypeEnum_CustomInterestType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomInterestTypeEnum_UNKNOWN CustomInterestTypeEnum_CustomInterestType = 1
+	// Allows brand advertisers to define custom affinity audience lists.
+	CustomInterestTypeEnum_CUSTOM_AFFINITY CustomInterestTypeEnum_CustomInterestType = 2
+	// Allows advertisers to define custom intent audience lists.
+	CustomInterestTypeEnum_CUSTOM_INTENT CustomInterestTypeEnum_CustomInterestType = 3
+)
+
+var CustomInterestTypeEnum_CustomInterestType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOM_AFFINITY",
+	3: "CUSTOM_INTENT",
+}
+
+var CustomInterestTypeEnum_CustomInterestType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"CUSTOM_AFFINITY": 2,
+	"CUSTOM_INTENT":   3,
+}
+
+func (x CustomInterestTypeEnum_CustomInterestType) String() string {
+	return proto.EnumName(CustomInterestTypeEnum_CustomInterestType_name, int32(x))
+}
+
+func (CustomInterestTypeEnum_CustomInterestType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_76f3dccaa5d605c7, []int{0, 0}
+}
+
+// The types of custom interest.
+type CustomInterestTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomInterestTypeEnum) Reset()         { *m = CustomInterestTypeEnum{} }
+func (m *CustomInterestTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestTypeEnum) ProtoMessage()    {}
+func (*CustomInterestTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_76f3dccaa5d605c7, []int{0}
+}
+
+func (m *CustomInterestTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestTypeEnum.Unmarshal(m, b)
+}
+func (m *CustomInterestTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestTypeEnum.Merge(m, src)
+}
+func (m *CustomInterestTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestTypeEnum.Size(m)
+}
+func (m *CustomInterestTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomInterestTypeEnum_CustomInterestType", CustomInterestTypeEnum_CustomInterestType_name, CustomInterestTypeEnum_CustomInterestType_value)
+	proto.RegisterType((*CustomInterestTypeEnum)(nil), "google.ads.googleads.v3.enums.CustomInterestTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/custom_interest_type.proto", fileDescriptor_76f3dccaa5d605c7)
+}
+
+var fileDescriptor_76f3dccaa5d605c7 = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x6a, 0xc2, 0x30,
+	0x1c, 0x9e, 0x15, 0x36, 0x88, 0x0c, 0xbb, 0x0e, 0x36, 0x18, 0xf3, 0xa0, 0x0f, 0x90, 0x1e, 0x72,
+	0x19, 0xd9, 0x29, 0xba, 0x2a, 0x61, 0x2c, 0x0a, 0x56, 0xc7, 0xa4, 0x20, 0x9d, 0x0d, 0xa1, 0x60,
+	0x93, 0x62, 0xa2, 0xe0, 0xeb, 0xec, 0xb8, 0x47, 0xd9, 0xa3, 0x8c, 0x3d, 0xc4, 0x68, 0xa2, 0xbd,
+	0xc8, 0x76, 0x29, 0x1f, 0xbf, 0xef, 0x4f, 0xbf, 0x7c, 0xe0, 0x41, 0x28, 0x25, 0xd6, 0x3c, 0x4c,
+	0x33, 0x1d, 0x3a, 0x58, 0xa1, 0x1d, 0x0a, 0xb9, 0xdc, 0x16, 0x3a, 0x5c, 0x6d, 0xb5, 0x51, 0xc5,
+	0x32, 0x97, 0x86, 0x6f, 0xb8, 0x36, 0x4b, 0xb3, 0x2f, 0x39, 0x2c, 0x37, 0xca, 0xa8, 0xa0, 0xe3,
+	0xe4, 0x30, 0xcd, 0x34, 0xac, 0x9d, 0x70, 0x87, 0xa0, 0x75, 0xde, 0xdd, 0x1f, 0x83, 0xcb, 0x3c,
+	0x4c, 0xa5, 0x54, 0x26, 0x35, 0xb9, 0x92, 0xda, 0x99, 0x7b, 0x06, 0xdc, 0x0c, 0x6c, 0x34, 0x3d,
+	0x24, 0xc7, 0xfb, 0x92, 0x47, 0x72, 0x5b, 0xf4, 0x16, 0x20, 0x38, 0x65, 0x82, 0x36, 0x68, 0xcd,
+	0xd8, 0x74, 0x12, 0x0d, 0xe8, 0x90, 0x46, 0x4f, 0xfe, 0x59, 0xd0, 0x02, 0x17, 0x33, 0xf6, 0xcc,
+	0xc6, 0xaf, 0xcc, 0x6f, 0x04, 0xd7, 0xa0, 0x3d, 0x98, 0x4d, 0xe3, 0xf1, 0xcb, 0x92, 0x0c, 0x87,
+	0x94, 0xd1, 0xf8, 0xcd, 0xf7, 0x82, 0x2b, 0x70, 0x79, 0x38, 0x52, 0x16, 0x47, 0x2c, 0xf6, 0x9b,
+	0xfd, 0x9f, 0x06, 0xe8, 0xae, 0x54, 0x01, 0xff, 0x6d, 0xde, 0xbf, 0x3d, 0xfd, 0xff, 0xa4, 0x2a,
+	0x3d, 0x69, 0x2c, 0xfa, 0x07, 0xa7, 0x50, 0xeb, 0x54, 0x0a, 0xa8, 0x36, 0x22, 0x14, 0x5c, 0xda,
+	0x27, 0x1d, 0xd7, 0x2b, 0x73, 0xfd, 0xc7, 0x98, 0x8f, 0xf6, 0xfb, 0xe1, 0x35, 0x47, 0x84, 0x7c,
+	0x7a, 0x9d, 0x91, 0x8b, 0x22, 0x99, 0x86, 0x0e, 0x56, 0x68, 0x8e, 0x60, 0xb5, 0x82, 0xfe, 0x3a,
+	0xf2, 0x09, 0xc9, 0x74, 0x52, 0xf3, 0xc9, 0x1c, 0x25, 0x96, 0xff, 0xf6, 0xba, 0xee, 0x88, 0x31,
+	0xc9, 0x34, 0xc6, 0xb5, 0x02, 0xe3, 0x39, 0xc2, 0xd8, 0x6a, 0xde, 0xcf, 0x6d, 0x31, 0xf4, 0x1b,
+	0x00, 0x00, 0xff, 0xff, 0x04, 0x2b, 0x31, 0x32, 0xe4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/custom_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/custom_placeholder_field.pb.go
new file mode 100644
index 0000000..b743c1a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/custom_placeholder_field.pb.go
@@ -0,0 +1,234 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/custom_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Custom placeholder fields.
+type CustomPlaceholderFieldEnum_CustomPlaceholderField int32
+
+const (
+	// Not specified.
+	CustomPlaceholderFieldEnum_UNSPECIFIED CustomPlaceholderFieldEnum_CustomPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomPlaceholderFieldEnum_UNKNOWN CustomPlaceholderFieldEnum_CustomPlaceholderField = 1
+	// Data Type: STRING. Required. Combination ID and ID2 must be unique per
+	// offer.
+	CustomPlaceholderFieldEnum_ID CustomPlaceholderFieldEnum_CustomPlaceholderField = 2
+	// Data Type: STRING. Combination ID and ID2 must be unique per offer.
+	CustomPlaceholderFieldEnum_ID2 CustomPlaceholderFieldEnum_CustomPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with product name to be shown
+	// in dynamic ad.
+	CustomPlaceholderFieldEnum_ITEM_TITLE CustomPlaceholderFieldEnum_CustomPlaceholderField = 4
+	// Data Type: STRING. Optional text to be shown in the image ad.
+	CustomPlaceholderFieldEnum_ITEM_SUBTITLE CustomPlaceholderFieldEnum_CustomPlaceholderField = 5
+	// Data Type: STRING. Optional description of the product to be shown in the
+	// ad.
+	CustomPlaceholderFieldEnum_ITEM_DESCRIPTION CustomPlaceholderFieldEnum_CustomPlaceholderField = 6
+	// Data Type: STRING. Full address of your offer or service, including
+	// postal code. This will be used to identify the closest product to the
+	// user when there are multiple offers in the feed that are relevant to the
+	// user.
+	CustomPlaceholderFieldEnum_ITEM_ADDRESS CustomPlaceholderFieldEnum_CustomPlaceholderField = 7
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	CustomPlaceholderFieldEnum_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 8
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	CustomPlaceholderFieldEnum_FORMATTED_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 9
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	CustomPlaceholderFieldEnum_SALE_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 10
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	CustomPlaceholderFieldEnum_FORMATTED_SALE_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 11
+	// Data Type: URL. Image to be displayed in the ad. Highly recommended for
+	// image ads.
+	CustomPlaceholderFieldEnum_IMAGE_URL CustomPlaceholderFieldEnum_CustomPlaceholderField = 12
+	// Data Type: STRING. Used as a recommendation engine signal to serve items
+	// in the same category.
+	CustomPlaceholderFieldEnum_ITEM_CATEGORY CustomPlaceholderFieldEnum_CustomPlaceholderField = 13
+	// Data Type: URL_LIST. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific product for ads that have multiple
+	// products.
+	CustomPlaceholderFieldEnum_FINAL_URLS CustomPlaceholderFieldEnum_CustomPlaceholderField = 14
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	CustomPlaceholderFieldEnum_FINAL_MOBILE_URLS CustomPlaceholderFieldEnum_CustomPlaceholderField = 15
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	CustomPlaceholderFieldEnum_TRACKING_URL CustomPlaceholderFieldEnum_CustomPlaceholderField = 16
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	CustomPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS CustomPlaceholderFieldEnum_CustomPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	CustomPlaceholderFieldEnum_ANDROID_APP_LINK CustomPlaceholderFieldEnum_CustomPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended IDs to show together with
+	// this item.
+	CustomPlaceholderFieldEnum_SIMILAR_IDS CustomPlaceholderFieldEnum_CustomPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	CustomPlaceholderFieldEnum_IOS_APP_LINK CustomPlaceholderFieldEnum_CustomPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	CustomPlaceholderFieldEnum_IOS_APP_STORE_ID CustomPlaceholderFieldEnum_CustomPlaceholderField = 21
+)
+
+var CustomPlaceholderFieldEnum_CustomPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ID",
+	3:  "ID2",
+	4:  "ITEM_TITLE",
+	5:  "ITEM_SUBTITLE",
+	6:  "ITEM_DESCRIPTION",
+	7:  "ITEM_ADDRESS",
+	8:  "PRICE",
+	9:  "FORMATTED_PRICE",
+	10: "SALE_PRICE",
+	11: "FORMATTED_SALE_PRICE",
+	12: "IMAGE_URL",
+	13: "ITEM_CATEGORY",
+	14: "FINAL_URLS",
+	15: "FINAL_MOBILE_URLS",
+	16: "TRACKING_URL",
+	17: "CONTEXTUAL_KEYWORDS",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+
+var CustomPlaceholderFieldEnum_CustomPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"ID":                   2,
+	"ID2":                  3,
+	"ITEM_TITLE":           4,
+	"ITEM_SUBTITLE":        5,
+	"ITEM_DESCRIPTION":     6,
+	"ITEM_ADDRESS":         7,
+	"PRICE":                8,
+	"FORMATTED_PRICE":      9,
+	"SALE_PRICE":           10,
+	"FORMATTED_SALE_PRICE": 11,
+	"IMAGE_URL":            12,
+	"ITEM_CATEGORY":        13,
+	"FINAL_URLS":           14,
+	"FINAL_MOBILE_URLS":    15,
+	"TRACKING_URL":         16,
+	"CONTEXTUAL_KEYWORDS":  17,
+	"ANDROID_APP_LINK":     18,
+	"SIMILAR_IDS":          19,
+	"IOS_APP_LINK":         20,
+	"IOS_APP_STORE_ID":     21,
+}
+
+func (x CustomPlaceholderFieldEnum_CustomPlaceholderField) String() string {
+	return proto.EnumName(CustomPlaceholderFieldEnum_CustomPlaceholderField_name, int32(x))
+}
+
+func (CustomPlaceholderFieldEnum_CustomPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d66efa55f2cff8c2, []int{0, 0}
+}
+
+// Values for Custom placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type CustomPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomPlaceholderFieldEnum) Reset()         { *m = CustomPlaceholderFieldEnum{} }
+func (m *CustomPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CustomPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d66efa55f2cff8c2, []int{0}
+}
+
+func (m *CustomPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Size(m)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomPlaceholderFieldEnum_CustomPlaceholderField", CustomPlaceholderFieldEnum_CustomPlaceholderField_name, CustomPlaceholderFieldEnum_CustomPlaceholderField_value)
+	proto.RegisterType((*CustomPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.CustomPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/custom_placeholder_field.proto", fileDescriptor_d66efa55f2cff8c2)
+}
+
+var fileDescriptor_d66efa55f2cff8c2 = []byte{
+	// 525 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x8e, 0xda, 0x3c,
+	0x14, 0xfd, 0x06, 0xbe, 0x81, 0x62, 0x86, 0xc1, 0x18, 0xa6, 0xad, 0xa6, 0x9d, 0xc5, 0xcc, 0x03,
+	0x24, 0x52, 0xb3, 0x4b, 0xbb, 0x31, 0xb1, 0x41, 0x16, 0x21, 0x89, 0x62, 0xc3, 0x74, 0x2a, 0xa4,
+	0x28, 0x25, 0x69, 0x8a, 0x04, 0x31, 0x22, 0x30, 0xaf, 0x53, 0xa9, 0xcb, 0x3e, 0x44, 0x1f, 0xa0,
+	0x8f, 0xd2, 0x55, 0x1f, 0xa1, 0xb2, 0xc3, 0x4f, 0x17, 0xd3, 0x6e, 0xa2, 0x7b, 0xcf, 0x3d, 0xe7,
+	0xe4, 0xda, 0x3e, 0xe0, 0x5d, 0x26, 0x65, 0xb6, 0x4c, 0xcd, 0x38, 0x29, 0xcc, 0xb2, 0x54, 0xd5,
+	0xa3, 0x65, 0xa6, 0xf9, 0x6e, 0x55, 0x98, 0xf3, 0x5d, 0xb1, 0x95, 0xab, 0x68, 0xbd, 0x8c, 0xe7,
+	0xe9, 0x67, 0xb9, 0x4c, 0xd2, 0x4d, 0xf4, 0x69, 0x91, 0x2e, 0x13, 0x63, 0xbd, 0x91, 0x5b, 0x89,
+	0x6e, 0x4a, 0x89, 0x11, 0x27, 0x85, 0x71, 0x54, 0x1b, 0x8f, 0x96, 0xa1, 0xd5, 0xd7, 0xaf, 0x0f,
+	0xe6, 0xeb, 0x85, 0x19, 0xe7, 0xb9, 0xdc, 0xc6, 0xdb, 0x85, 0xcc, 0x8b, 0x52, 0x7c, 0xf7, 0xbd,
+	0x0a, 0xae, 0x1d, 0xed, 0x1f, 0x9c, 0xec, 0x07, 0xca, 0x9d, 0xe6, 0xbb, 0xd5, 0xdd, 0x97, 0x2a,
+	0x78, 0xfe, 0xf4, 0x18, 0xb5, 0x41, 0x73, 0xe2, 0xf1, 0x80, 0x3a, 0x6c, 0xc0, 0x28, 0x81, 0xff,
+	0xa1, 0x26, 0xa8, 0x4f, 0xbc, 0x91, 0xe7, 0xdf, 0x7b, 0xf0, 0x0c, 0xd5, 0x40, 0x85, 0x11, 0x58,
+	0x41, 0x75, 0x50, 0x65, 0xe4, 0x0d, 0xac, 0xa2, 0x4b, 0x00, 0x98, 0xa0, 0xe3, 0x48, 0x30, 0xe1,
+	0x52, 0xf8, 0x3f, 0xea, 0x80, 0x96, 0xee, 0xf9, 0xa4, 0x5f, 0x42, 0xe7, 0xa8, 0x07, 0xa0, 0x86,
+	0x08, 0xe5, 0x4e, 0xc8, 0x02, 0xc1, 0x7c, 0x0f, 0xd6, 0x10, 0x04, 0x17, 0x1a, 0xc5, 0x84, 0x84,
+	0x94, 0x73, 0x58, 0x47, 0x0d, 0x70, 0x1e, 0x84, 0xcc, 0xa1, 0xf0, 0x19, 0xea, 0x82, 0xf6, 0xc0,
+	0x0f, 0xc7, 0x58, 0x08, 0x4a, 0xa2, 0x12, 0x6c, 0xa8, 0x5f, 0x71, 0xec, 0xd2, 0x7d, 0x0f, 0xd0,
+	0x4b, 0xd0, 0x3b, 0x91, 0xfe, 0x98, 0x34, 0x51, 0x0b, 0x34, 0xd8, 0x18, 0x0f, 0x69, 0x34, 0x09,
+	0x5d, 0x78, 0x71, 0xdc, 0xc9, 0xc1, 0x82, 0x0e, 0xfd, 0xf0, 0x01, 0xb6, 0x94, 0xd7, 0x80, 0x79,
+	0xd8, 0x55, 0x0c, 0x0e, 0x2f, 0xd1, 0x15, 0xe8, 0x94, 0xfd, 0xd8, 0xef, 0x33, 0x97, 0x96, 0x70,
+	0x5b, 0x2d, 0x29, 0x42, 0xec, 0x8c, 0x98, 0x37, 0xd4, 0x5e, 0x10, 0xbd, 0x00, 0x5d, 0xc7, 0xf7,
+	0x04, 0x7d, 0x2f, 0x26, 0xd8, 0x8d, 0x46, 0xf4, 0xe1, 0xde, 0x0f, 0x09, 0x87, 0x1d, 0x75, 0x4a,
+	0xec, 0x91, 0xd0, 0x67, 0x24, 0xc2, 0x41, 0x10, 0xb9, 0xcc, 0x1b, 0x41, 0xa4, 0x6e, 0x93, 0xb3,
+	0x31, 0x73, 0x71, 0x18, 0x31, 0xc2, 0x61, 0x57, 0x1f, 0xdb, 0xe7, 0x27, 0x4a, 0x4f, 0x5f, 0xcf,
+	0x1e, 0xe1, 0xc2, 0x0f, 0x69, 0xc4, 0x08, 0xbc, 0xea, 0xff, 0x3a, 0x03, 0xb7, 0x73, 0xb9, 0x32,
+	0xfe, 0x19, 0x82, 0xfe, 0xab, 0xa7, 0x1f, 0x31, 0x50, 0x19, 0x08, 0xce, 0x3e, 0xf4, 0xf7, 0xea,
+	0x4c, 0x2e, 0xe3, 0x3c, 0x33, 0xe4, 0x26, 0x33, 0xb3, 0x34, 0xd7, 0x09, 0x39, 0x04, 0x72, 0xbd,
+	0x28, 0xfe, 0x92, 0xcf, 0xb7, 0xfa, 0xfb, 0xb5, 0x52, 0x1d, 0x62, 0xfc, 0xad, 0x72, 0x33, 0x2c,
+	0xad, 0x70, 0x52, 0x18, 0x65, 0xa9, 0xaa, 0xa9, 0x65, 0xa8, 0x3c, 0x15, 0x3f, 0x0e, 0xf3, 0x19,
+	0x4e, 0x8a, 0xd9, 0x71, 0x3e, 0x9b, 0x5a, 0x33, 0x3d, 0xff, 0x59, 0xb9, 0x2d, 0x41, 0xdb, 0xc6,
+	0x49, 0x61, 0xdb, 0x47, 0x86, 0x6d, 0x4f, 0x2d, 0xdb, 0xd6, 0x9c, 0x8f, 0x35, 0xbd, 0x98, 0xf5,
+	0x3b, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x4d, 0x05, 0x1f, 0x37, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/customer_match_upload_key_type.pb.go b/googleapis/ads/googleads/v3/enums/customer_match_upload_key_type.pb.go
new file mode 100644
index 0000000..d2096eb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/customer_match_upload_key_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/customer_match_upload_key_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible customer match upload key types.
+type CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType int32
+
+const (
+	// Not specified.
+	CustomerMatchUploadKeyTypeEnum_UNSPECIFIED CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomerMatchUploadKeyTypeEnum_UNKNOWN CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 1
+	// Members are matched from customer info such as email address, phone
+	// number or physical address.
+	CustomerMatchUploadKeyTypeEnum_CONTACT_INFO CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 2
+	// Members are matched from a user id generated and assigned by the
+	// advertiser.
+	CustomerMatchUploadKeyTypeEnum_CRM_ID CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 3
+	// Members are matched from mobile advertising ids.
+	CustomerMatchUploadKeyTypeEnum_MOBILE_ADVERTISING_ID CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 4
+)
+
+var CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CONTACT_INFO",
+	3: "CRM_ID",
+	4: "MOBILE_ADVERTISING_ID",
+}
+
+var CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"CONTACT_INFO":          2,
+	"CRM_ID":                3,
+	"MOBILE_ADVERTISING_ID": 4,
+}
+
+func (x CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType) String() string {
+	return proto.EnumName(CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name, int32(x))
+}
+
+func (CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_5ec82e81541fd3d7, []int{0, 0}
+}
+
+// Indicates what type of data are the user list's members matched from.
+type CustomerMatchUploadKeyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerMatchUploadKeyTypeEnum) Reset()         { *m = CustomerMatchUploadKeyTypeEnum{} }
+func (m *CustomerMatchUploadKeyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerMatchUploadKeyTypeEnum) ProtoMessage()    {}
+func (*CustomerMatchUploadKeyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5ec82e81541fd3d7, []int{0}
+}
+
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Unmarshal(m, b)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Merge(m, src)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Size(m)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerMatchUploadKeyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType", CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name, CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_value)
+	proto.RegisterType((*CustomerMatchUploadKeyTypeEnum)(nil), "google.ads.googleads.v3.enums.CustomerMatchUploadKeyTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/customer_match_upload_key_type.proto", fileDescriptor_5ec82e81541fd3d7)
+}
+
+var fileDescriptor_5ec82e81541fd3d7 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x6a, 0xab, 0x40,
+	0x14, 0x7d, 0x9a, 0x47, 0x1e, 0x4c, 0x1e, 0x3c, 0x11, 0xde, 0xa2, 0xa1, 0x69, 0x49, 0x3e, 0x60,
+	0x5c, 0xb8, 0x9b, 0xae, 0xd4, 0x98, 0x20, 0x69, 0xc6, 0x90, 0x18, 0x0b, 0x45, 0x18, 0xa6, 0x71,
+	0xb0, 0xa1, 0x71, 0x46, 0x32, 0x1a, 0xf0, 0x43, 0xfa, 0x03, 0x5d, 0xf6, 0x53, 0xfa, 0x29, 0x5d,
+	0xf7, 0x03, 0x8a, 0x63, 0x92, 0x5d, 0xba, 0x91, 0x83, 0xe7, 0xde, 0x73, 0xee, 0x39, 0x03, 0xdc,
+	0x4c, 0x88, 0x6c, 0xc7, 0x2c, 0x9a, 0x4a, 0xab, 0x85, 0x0d, 0x3a, 0xd8, 0x16, 0xe3, 0x55, 0x2e,
+	0xad, 0x4d, 0x25, 0x4b, 0x91, 0xb3, 0x3d, 0xc9, 0x69, 0xb9, 0x79, 0x26, 0x55, 0xb1, 0x13, 0x34,
+	0x25, 0x2f, 0xac, 0x26, 0x65, 0x5d, 0x30, 0x58, 0xec, 0x45, 0x29, 0xcc, 0x41, 0xbb, 0x08, 0x69,
+	0x2a, 0xe1, 0x59, 0x03, 0x1e, 0x6c, 0xa8, 0x34, 0xfa, 0xd7, 0x27, 0x8b, 0x62, 0x6b, 0x51, 0xce,
+	0x45, 0x49, 0xcb, 0xad, 0xe0, 0xb2, 0x5d, 0x1e, 0xbd, 0x6a, 0xe0, 0xc6, 0x3b, 0xba, 0xcc, 0x1b,
+	0x93, 0xb5, 0xf2, 0x98, 0xb1, 0x3a, 0xaa, 0x0b, 0xe6, 0xf3, 0x2a, 0x1f, 0x49, 0xd0, 0xbf, 0x3c,
+	0x61, 0xfe, 0x03, 0xbd, 0x35, 0x5e, 0x2d, 0x7c, 0x2f, 0x98, 0x04, 0xfe, 0xd8, 0xf8, 0x65, 0xf6,
+	0xc0, 0x9f, 0x35, 0x9e, 0xe1, 0xf0, 0x01, 0x1b, 0x9a, 0x69, 0x80, 0xbf, 0x5e, 0x88, 0x23, 0xc7,
+	0x8b, 0x48, 0x80, 0x27, 0xa1, 0xa1, 0x9b, 0x00, 0x74, 0xbd, 0xe5, 0x9c, 0x04, 0x63, 0xa3, 0x63,
+	0x5e, 0x81, 0xff, 0xf3, 0xd0, 0x0d, 0xee, 0x7d, 0xe2, 0x8c, 0x63, 0x7f, 0x19, 0x05, 0xab, 0x00,
+	0x4f, 0x1b, 0xea, 0xb7, 0xfb, 0xa5, 0x81, 0xe1, 0x46, 0xe4, 0xf0, 0xc7, 0x6c, 0xee, 0xed, 0xe5,
+	0xc3, 0x16, 0x4d, 0xbc, 0x85, 0xf6, 0x78, 0x6c, 0x18, 0x66, 0x62, 0x47, 0x79, 0x06, 0xc5, 0x3e,
+	0xb3, 0x32, 0xc6, 0x55, 0xf8, 0x53, 0xe3, 0xc5, 0x56, 0x5e, 0x78, 0x80, 0x3b, 0xf5, 0x7d, 0xd3,
+	0x3b, 0x53, 0xc7, 0x79, 0xd7, 0x07, 0xd3, 0x56, 0xca, 0x49, 0x25, 0x6c, 0x61, 0x83, 0x62, 0x1b,
+	0x36, 0x35, 0xc9, 0x8f, 0x13, 0x9f, 0x38, 0xa9, 0x4c, 0xce, 0x7c, 0x12, 0xdb, 0x89, 0xe2, 0x3f,
+	0xf5, 0x61, 0xfb, 0x13, 0x21, 0x27, 0x95, 0x08, 0x9d, 0x27, 0x10, 0x8a, 0x6d, 0x84, 0xd4, 0xcc,
+	0x53, 0x57, 0x1d, 0x66, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x96, 0x90, 0xd2, 0x18, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/customer_pay_per_conversion_eligibility_failure_reason.pb.go b/googleapis/ads/googleads/v3/enums/customer_pay_per_conversion_eligibility_failure_reason.pb.go
new file mode 100644
index 0000000..e62c625
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/customer_pay_per_conversion_eligibility_failure_reason.pb.go
@@ -0,0 +1,161 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/customer_pay_per_conversion_eligibility_failure_reason.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible reasons a customer is not eligible to use
+// PaymentMode.CONVERSIONS.
+type CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason int32
+
+const (
+	// Not specified.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_UNSPECIFIED CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_UNKNOWN CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 1
+	// Customer does not have enough conversions.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_NOT_ENOUGH_CONVERSIONS CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 2
+	// Customer's conversion lag is too high.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_CONVERSION_LAG_TOO_HIGH CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 3
+	// Customer uses shared budgets.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_HAS_CAMPAIGN_WITH_SHARED_BUDGET CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 4
+	// Customer has conversions with ConversionActionType.UPLOAD_CLICKS.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_HAS_UPLOAD_CLICKS_CONVERSION CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 5
+	// Customer's average daily spend is too high.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_AVERAGE_DAILY_SPEND_TOO_HIGH CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 6
+	// Customer's eligibility has not yet been calculated by the Google Ads
+	// backend. Check back soon.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_ANALYSIS_NOT_COMPLETE CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 7
+	// Customer is not eligible due to other reasons.
+	CustomerPayPerConversionEligibilityFailureReasonEnum_OTHER CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason = 8
+)
+
+var CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOT_ENOUGH_CONVERSIONS",
+	3: "CONVERSION_LAG_TOO_HIGH",
+	4: "HAS_CAMPAIGN_WITH_SHARED_BUDGET",
+	5: "HAS_UPLOAD_CLICKS_CONVERSION",
+	6: "AVERAGE_DAILY_SPEND_TOO_HIGH",
+	7: "ANALYSIS_NOT_COMPLETE",
+	8: "OTHER",
+}
+
+var CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"NOT_ENOUGH_CONVERSIONS":          2,
+	"CONVERSION_LAG_TOO_HIGH":         3,
+	"HAS_CAMPAIGN_WITH_SHARED_BUDGET": 4,
+	"HAS_UPLOAD_CLICKS_CONVERSION":    5,
+	"AVERAGE_DAILY_SPEND_TOO_HIGH":    6,
+	"ANALYSIS_NOT_COMPLETE":           7,
+	"OTHER":                           8,
+}
+
+func (x CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason) String() string {
+	return proto.EnumName(CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason_name, int32(x))
+}
+
+func (CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2816f84d40fc8b20, []int{0, 0}
+}
+
+// Container for enum describing reasons why a customer is not eligible to use
+// PaymentMode.CONVERSIONS.
+type CustomerPayPerConversionEligibilityFailureReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) Reset() {
+	*m = CustomerPayPerConversionEligibilityFailureReasonEnum{}
+}
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CustomerPayPerConversionEligibilityFailureReasonEnum) ProtoMessage() {}
+func (*CustomerPayPerConversionEligibilityFailureReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2816f84d40fc8b20, []int{0}
+}
+
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum.Unmarshal(m, b)
+}
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum.Merge(m, src)
+}
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum.Size(m)
+}
+func (m *CustomerPayPerConversionEligibilityFailureReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerPayPerConversionEligibilityFailureReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason", CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason_name, CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason_value)
+	proto.RegisterType((*CustomerPayPerConversionEligibilityFailureReasonEnum)(nil), "google.ads.googleads.v3.enums.CustomerPayPerConversionEligibilityFailureReasonEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/customer_pay_per_conversion_eligibility_failure_reason.proto", fileDescriptor_2816f84d40fc8b20)
+}
+
+var fileDescriptor_2816f84d40fc8b20 = []byte{
+	// 476 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x4f, 0x6f, 0x94, 0x40,
+	0x18, 0xc6, 0x2d, 0xb5, 0xad, 0x4e, 0x0f, 0x12, 0x12, 0x35, 0xd6, 0x36, 0xda, 0x7a, 0x07, 0x13,
+	0xf4, 0x82, 0xa7, 0x59, 0x98, 0x02, 0x29, 0x9d, 0x21, 0xfc, 0x6b, 0xda, 0x6c, 0x32, 0xa1, 0xcb,
+	0x48, 0x48, 0xd8, 0x19, 0xc2, 0xb0, 0x9b, 0xec, 0x57, 0xf0, 0x13, 0x78, 0xf6, 0xe8, 0x47, 0xf1,
+	0xe6, 0xd7, 0xf0, 0x53, 0x18, 0xa0, 0xbb, 0xeb, 0xc5, 0x26, 0x7b, 0x21, 0x4f, 0xe6, 0x7d, 0xe6,
+	0xf9, 0x4d, 0x78, 0x5e, 0x70, 0x57, 0x0a, 0x51, 0xd6, 0xcc, 0xc8, 0x0b, 0x69, 0x8c, 0xb2, 0x57,
+	0x4b, 0xd3, 0x60, 0x7c, 0x31, 0x97, 0xc6, 0x6c, 0x21, 0x3b, 0x31, 0x67, 0x2d, 0x6d, 0xf2, 0x15,
+	0x6d, 0x58, 0x4b, 0x67, 0x82, 0x2f, 0x59, 0x2b, 0x2b, 0xc1, 0x29, 0xab, 0xab, 0xb2, 0xba, 0xaf,
+	0xea, 0xaa, 0x5b, 0xd1, 0xaf, 0x79, 0x55, 0x2f, 0x5a, 0x46, 0x5b, 0x96, 0x4b, 0xc1, 0xf5, 0xa6,
+	0x15, 0x9d, 0xd0, 0xce, 0xc6, 0x40, 0x3d, 0x2f, 0xa4, 0xbe, 0xc9, 0xd6, 0x97, 0xa6, 0x3e, 0x64,
+	0x9f, 0x9c, 0xae, 0xd1, 0x4d, 0x65, 0xe4, 0x9c, 0x8b, 0x2e, 0xef, 0x2a, 0xc1, 0xe5, 0x78, 0xf9,
+	0xe2, 0xb7, 0x02, 0x3e, 0xd9, 0x0f, 0xf4, 0x30, 0x5f, 0x85, 0xac, 0xb5, 0x37, 0x68, 0xb4, 0x25,
+	0x5f, 0x8e, 0xe0, 0x68, 0xe0, 0x22, 0xbe, 0x98, 0x5f, 0x7c, 0x57, 0xc0, 0xc7, 0x5d, 0x2f, 0x6a,
+	0x2f, 0xc0, 0x71, 0x8a, 0xe3, 0x10, 0xd9, 0xfe, 0xa5, 0x8f, 0x1c, 0xf5, 0x89, 0x76, 0x0c, 0x8e,
+	0x52, 0x7c, 0x85, 0xc9, 0x0d, 0x56, 0xf7, 0xb4, 0x13, 0xf0, 0x0a, 0x93, 0x84, 0x22, 0x4c, 0x52,
+	0xd7, 0xa3, 0x36, 0xc1, 0x19, 0x8a, 0x62, 0x9f, 0xe0, 0x58, 0x55, 0xb4, 0xb7, 0xe0, 0xf5, 0xf6,
+	0x80, 0x06, 0xd0, 0xa5, 0x09, 0x21, 0xd4, 0xf3, 0x5d, 0x4f, 0xdd, 0xd7, 0x3e, 0x80, 0x77, 0x1e,
+	0x8c, 0xa9, 0x0d, 0xaf, 0x43, 0xe8, 0xbb, 0x98, 0xde, 0xf8, 0x89, 0x47, 0x63, 0x0f, 0x46, 0xc8,
+	0xa1, 0x93, 0xd4, 0x71, 0x51, 0xa2, 0x3e, 0xd5, 0xde, 0x83, 0xd3, 0xde, 0x94, 0x86, 0x01, 0x81,
+	0x0e, 0xb5, 0x03, 0xdf, 0xbe, 0x8a, 0xff, 0x81, 0xa8, 0x07, 0xbd, 0x03, 0x66, 0x28, 0x82, 0x2e,
+	0xa2, 0x0e, 0xf4, 0x83, 0x5b, 0x1a, 0x87, 0x08, 0x3b, 0x5b, 0xd0, 0xa1, 0xf6, 0x06, 0xbc, 0x84,
+	0x18, 0x06, 0xb7, 0xb1, 0x1f, 0xd3, 0xfe, 0xa9, 0x36, 0xb9, 0x0e, 0x03, 0x94, 0x20, 0xf5, 0x48,
+	0x7b, 0x0e, 0x0e, 0x48, 0xe2, 0xa1, 0x48, 0x7d, 0x36, 0xf9, 0xa6, 0x80, 0xf3, 0x99, 0x98, 0xeb,
+	0x8f, 0xf6, 0x32, 0xf9, 0xbc, 0xeb, 0xdf, 0x0b, 0xfb, 0xc2, 0xc2, 0xbd, 0xbb, 0xc9, 0x43, 0x6e,
+	0x29, 0xea, 0x9c, 0x97, 0xba, 0x68, 0x4b, 0xa3, 0x64, 0x7c, 0xa8, 0x73, 0xbd, 0x5b, 0x4d, 0x25,
+	0xff, 0xb3, 0x6a, 0x5f, 0x86, 0xef, 0x0f, 0x65, 0xdf, 0x85, 0xf0, 0xa7, 0x72, 0xe6, 0x8e, 0x51,
+	0xb0, 0x90, 0xfa, 0x28, 0x7b, 0x95, 0x99, 0x7a, 0x5f, 0xb1, 0xfc, 0xb5, 0x9e, 0x4f, 0x61, 0x21,
+	0xa7, 0x9b, 0xf9, 0x34, 0x33, 0xa7, 0xc3, 0xfc, 0x8f, 0x72, 0x3e, 0x1e, 0x5a, 0x16, 0x2c, 0xa4,
+	0x65, 0x6d, 0x1c, 0x96, 0x95, 0x99, 0x96, 0x35, 0x78, 0xee, 0x0f, 0x87, 0x87, 0x99, 0x7f, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0xff, 0xea, 0x85, 0xe1, 0x02, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/data_driven_model_status.pb.go b/googleapis/ads/googleads/v3/enums/data_driven_model_status.pb.go
new file mode 100644
index 0000000..24b1975
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/data_driven_model_status.pb.go
@@ -0,0 +1,140 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/data_driven_model_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates data driven model statuses.
+type DataDrivenModelStatusEnum_DataDrivenModelStatus int32
+
+const (
+	// Not specified.
+	DataDrivenModelStatusEnum_UNSPECIFIED DataDrivenModelStatusEnum_DataDrivenModelStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	DataDrivenModelStatusEnum_UNKNOWN DataDrivenModelStatusEnum_DataDrivenModelStatus = 1
+	// The data driven model is available.
+	DataDrivenModelStatusEnum_AVAILABLE DataDrivenModelStatusEnum_DataDrivenModelStatus = 2
+	// The data driven model is stale. It hasn't been updated for at least 7
+	// days. It is still being used, but will become expired if it does not get
+	// updated for 30 days.
+	DataDrivenModelStatusEnum_STALE DataDrivenModelStatusEnum_DataDrivenModelStatus = 3
+	// The data driven model expired. It hasn't been updated for at least 30
+	// days and cannot be used. Most commonly this is because there hasn't been
+	// the required number of events in a recent 30-day period.
+	DataDrivenModelStatusEnum_EXPIRED DataDrivenModelStatusEnum_DataDrivenModelStatus = 4
+	// The data driven model has never been generated. Most commonly this is
+	// because there has never been the required number of events in any 30-day
+	// period.
+	DataDrivenModelStatusEnum_NEVER_GENERATED DataDrivenModelStatusEnum_DataDrivenModelStatus = 5
+)
+
+var DataDrivenModelStatusEnum_DataDrivenModelStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AVAILABLE",
+	3: "STALE",
+	4: "EXPIRED",
+	5: "NEVER_GENERATED",
+}
+
+var DataDrivenModelStatusEnum_DataDrivenModelStatus_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"AVAILABLE":       2,
+	"STALE":           3,
+	"EXPIRED":         4,
+	"NEVER_GENERATED": 5,
+}
+
+func (x DataDrivenModelStatusEnum_DataDrivenModelStatus) String() string {
+	return proto.EnumName(DataDrivenModelStatusEnum_DataDrivenModelStatus_name, int32(x))
+}
+
+func (DataDrivenModelStatusEnum_DataDrivenModelStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6532b7607ba422ff, []int{0, 0}
+}
+
+// Container for enum indicating data driven model status.
+type DataDrivenModelStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DataDrivenModelStatusEnum) Reset()         { *m = DataDrivenModelStatusEnum{} }
+func (m *DataDrivenModelStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*DataDrivenModelStatusEnum) ProtoMessage()    {}
+func (*DataDrivenModelStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6532b7607ba422ff, []int{0}
+}
+
+func (m *DataDrivenModelStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Unmarshal(m, b)
+}
+func (m *DataDrivenModelStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *DataDrivenModelStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataDrivenModelStatusEnum.Merge(m, src)
+}
+func (m *DataDrivenModelStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Size(m)
+}
+func (m *DataDrivenModelStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataDrivenModelStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataDrivenModelStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DataDrivenModelStatusEnum_DataDrivenModelStatus", DataDrivenModelStatusEnum_DataDrivenModelStatus_name, DataDrivenModelStatusEnum_DataDrivenModelStatus_value)
+	proto.RegisterType((*DataDrivenModelStatusEnum)(nil), "google.ads.googleads.v3.enums.DataDrivenModelStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/data_driven_model_status.proto", fileDescriptor_6532b7607ba422ff)
+}
+
+var fileDescriptor_6532b7607ba422ff = []byte{
+	// 342 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x3d, 0x4e, 0xfb, 0x30,
+	0x1c, 0xfd, 0x27, 0xfd, 0x17, 0x54, 0x57, 0xa8, 0x51, 0x10, 0x03, 0x15, 0x1d, 0xda, 0x03, 0x38,
+	0x43, 0x36, 0xc3, 0xe2, 0x10, 0x53, 0x45, 0x94, 0x10, 0xf5, 0x23, 0x20, 0x14, 0x29, 0x32, 0x38,
+	0x8a, 0x22, 0x35, 0x76, 0xa9, 0xdd, 0x1e, 0x83, 0x43, 0x30, 0x72, 0x14, 0x8e, 0xc2, 0xc2, 0x15,
+	0x50, 0x9c, 0x36, 0x53, 0x61, 0xb1, 0x9e, 0xfc, 0x3e, 0xf4, 0x7b, 0x0f, 0x5c, 0xe5, 0x42, 0xe4,
+	0xcb, 0xcc, 0xa1, 0x4c, 0x3a, 0x35, 0xac, 0xd0, 0xd6, 0x75, 0x32, 0xbe, 0x29, 0xa5, 0xc3, 0xa8,
+	0xa2, 0x29, 0x5b, 0x17, 0xdb, 0x8c, 0xa7, 0xa5, 0x60, 0xd9, 0x32, 0x95, 0x8a, 0xaa, 0x8d, 0x84,
+	0xab, 0xb5, 0x50, 0xc2, 0x1e, 0xd4, 0x16, 0x48, 0x99, 0x84, 0x8d, 0x1b, 0x6e, 0x5d, 0xa8, 0xdd,
+	0xfd, 0x8b, 0x7d, 0xf8, 0xaa, 0x70, 0x28, 0xe7, 0x42, 0x51, 0x55, 0x08, 0xbe, 0x33, 0x8f, 0xde,
+	0x0c, 0x70, 0xee, 0x53, 0x45, 0x7d, 0x1d, 0x7f, 0x57, 0xa5, 0xcf, 0x74, 0x38, 0xe1, 0x9b, 0x72,
+	0xf4, 0x0a, 0xce, 0x0e, 0x92, 0x76, 0x0f, 0x74, 0x17, 0xe1, 0x2c, 0x22, 0xd7, 0xc1, 0x4d, 0x40,
+	0x7c, 0xeb, 0x9f, 0xdd, 0x05, 0xc7, 0x8b, 0xf0, 0x36, 0xbc, 0x7f, 0x08, 0x2d, 0xc3, 0x3e, 0x01,
+	0x1d, 0x1c, 0xe3, 0x60, 0x82, 0xbd, 0x09, 0xb1, 0x4c, 0xbb, 0x03, 0xda, 0xb3, 0x39, 0x9e, 0x10,
+	0xab, 0x55, 0xc9, 0xc8, 0x63, 0x14, 0x4c, 0x89, 0x6f, 0xfd, 0xb7, 0x4f, 0x41, 0x2f, 0x24, 0x31,
+	0x99, 0xa6, 0x63, 0x12, 0x92, 0x29, 0x9e, 0x13, 0xdf, 0x6a, 0x7b, 0xdf, 0x06, 0x18, 0xbe, 0x88,
+	0x12, 0xfe, 0x59, 0xca, 0xeb, 0x1f, 0x3c, 0x2b, 0xaa, 0x2a, 0x45, 0xc6, 0x93, 0xb7, 0x33, 0xe7,
+	0x62, 0x49, 0x79, 0x0e, 0xc5, 0x3a, 0x77, 0xf2, 0x8c, 0xeb, 0xc2, 0xfb, 0x7d, 0x57, 0x85, 0xfc,
+	0x65, 0xee, 0x4b, 0xfd, 0xbe, 0x9b, 0xad, 0x31, 0xc6, 0x1f, 0xe6, 0x60, 0x5c, 0x47, 0x61, 0x26,
+	0x61, 0x0d, 0x2b, 0x14, 0xbb, 0xb0, 0xda, 0x47, 0x7e, 0xee, 0xf9, 0x04, 0x33, 0x99, 0x34, 0x7c,
+	0x12, 0xbb, 0x89, 0xe6, 0xbf, 0xcc, 0x61, 0xfd, 0x89, 0x10, 0x66, 0x12, 0xa1, 0x46, 0x81, 0x50,
+	0xec, 0x22, 0xa4, 0x35, 0xcf, 0x47, 0xfa, 0x30, 0xf7, 0x27, 0x00, 0x00, 0xff, 0xff, 0x24, 0x32,
+	0x20, 0xac, 0x06, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/day_of_week.pb.go b/googleapis/ads/googleads/v3/enums/day_of_week.pb.go
new file mode 100644
index 0000000..61719a8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/day_of_week.pb.go
@@ -0,0 +1,146 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/day_of_week.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates days of the week, e.g., "Monday".
+type DayOfWeekEnum_DayOfWeek int32
+
+const (
+	// Not specified.
+	DayOfWeekEnum_UNSPECIFIED DayOfWeekEnum_DayOfWeek = 0
+	// The value is unknown in this version.
+	DayOfWeekEnum_UNKNOWN DayOfWeekEnum_DayOfWeek = 1
+	// Monday.
+	DayOfWeekEnum_MONDAY DayOfWeekEnum_DayOfWeek = 2
+	// Tuesday.
+	DayOfWeekEnum_TUESDAY DayOfWeekEnum_DayOfWeek = 3
+	// Wednesday.
+	DayOfWeekEnum_WEDNESDAY DayOfWeekEnum_DayOfWeek = 4
+	// Thursday.
+	DayOfWeekEnum_THURSDAY DayOfWeekEnum_DayOfWeek = 5
+	// Friday.
+	DayOfWeekEnum_FRIDAY DayOfWeekEnum_DayOfWeek = 6
+	// Saturday.
+	DayOfWeekEnum_SATURDAY DayOfWeekEnum_DayOfWeek = 7
+	// Sunday.
+	DayOfWeekEnum_SUNDAY DayOfWeekEnum_DayOfWeek = 8
+)
+
+var DayOfWeekEnum_DayOfWeek_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MONDAY",
+	3: "TUESDAY",
+	4: "WEDNESDAY",
+	5: "THURSDAY",
+	6: "FRIDAY",
+	7: "SATURDAY",
+	8: "SUNDAY",
+}
+
+var DayOfWeekEnum_DayOfWeek_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MONDAY":      2,
+	"TUESDAY":     3,
+	"WEDNESDAY":   4,
+	"THURSDAY":    5,
+	"FRIDAY":      6,
+	"SATURDAY":    7,
+	"SUNDAY":      8,
+}
+
+func (x DayOfWeekEnum_DayOfWeek) String() string {
+	return proto.EnumName(DayOfWeekEnum_DayOfWeek_name, int32(x))
+}
+
+func (DayOfWeekEnum_DayOfWeek) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6abebbff3028d41d, []int{0, 0}
+}
+
+// Container for enumeration of days of the week, e.g., "Monday".
+type DayOfWeekEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DayOfWeekEnum) Reset()         { *m = DayOfWeekEnum{} }
+func (m *DayOfWeekEnum) String() string { return proto.CompactTextString(m) }
+func (*DayOfWeekEnum) ProtoMessage()    {}
+func (*DayOfWeekEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6abebbff3028d41d, []int{0}
+}
+
+func (m *DayOfWeekEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DayOfWeekEnum.Unmarshal(m, b)
+}
+func (m *DayOfWeekEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DayOfWeekEnum.Marshal(b, m, deterministic)
+}
+func (m *DayOfWeekEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DayOfWeekEnum.Merge(m, src)
+}
+func (m *DayOfWeekEnum) XXX_Size() int {
+	return xxx_messageInfo_DayOfWeekEnum.Size(m)
+}
+func (m *DayOfWeekEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DayOfWeekEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DayOfWeekEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek", DayOfWeekEnum_DayOfWeek_name, DayOfWeekEnum_DayOfWeek_value)
+	proto.RegisterType((*DayOfWeekEnum)(nil), "google.ads.googleads.v3.enums.DayOfWeekEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/day_of_week.proto", fileDescriptor_6abebbff3028d41d)
+}
+
+var fileDescriptor_6abebbff3028d41d = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4e, 0x02, 0x31,
+	0x14, 0xc6, 0x9d, 0x41, 0xf9, 0x53, 0x44, 0xc9, 0x2c, 0x8d, 0x2c, 0xe0, 0x00, 0x9d, 0xc5, 0xec,
+	0xea, 0xaa, 0x38, 0x03, 0x12, 0xe3, 0x40, 0x18, 0x06, 0xa2, 0x99, 0x84, 0x54, 0xa7, 0x34, 0x04,
+	0x68, 0x09, 0x05, 0x0c, 0x07, 0xf0, 0x0c, 0xee, 0x5d, 0x7a, 0x14, 0xaf, 0xe1, 0xce, 0x53, 0x98,
+	0xb6, 0xcc, 0xec, 0x74, 0xd3, 0x7c, 0x5f, 0x7f, 0xef, 0x7b, 0x79, 0xef, 0x01, 0x97, 0x09, 0xc1,
+	0x96, 0xd4, 0x25, 0xa9, 0x3c, 0x4a, 0xa5, 0xf6, 0x9e, 0x4b, 0xf9, 0x6e, 0x25, 0xdd, 0x94, 0x1c,
+	0xa6, 0x62, 0x36, 0x7d, 0xa5, 0x74, 0x01, 0xd7, 0x1b, 0xb1, 0x15, 0x4e, 0xc3, 0x54, 0x41, 0x92,
+	0x4a, 0x98, 0x07, 0xe0, 0xde, 0x83, 0x3a, 0x70, 0x75, 0x9d, 0xf5, 0x5b, 0xcf, 0x5d, 0xc2, 0xb9,
+	0xd8, 0x92, 0xed, 0x5c, 0x70, 0x69, 0xc2, 0xad, 0x77, 0x0b, 0xd4, 0x7c, 0x72, 0xe8, 0xcf, 0x26,
+	0x94, 0x2e, 0x02, 0xbe, 0x5b, 0xb5, 0xde, 0x2c, 0x50, 0xc9, 0x7f, 0x9c, 0x4b, 0x50, 0x8d, 0xc3,
+	0x68, 0x10, 0xdc, 0xf6, 0x3a, 0xbd, 0xc0, 0xaf, 0x9f, 0x38, 0x55, 0x50, 0x8a, 0xc3, 0xfb, 0xb0,
+	0x3f, 0x09, 0xeb, 0x96, 0x03, 0x40, 0xf1, 0xa1, 0x1f, 0xfa, 0xf8, 0xb1, 0x6e, 0x2b, 0x30, 0x8a,
+	0x83, 0x48, 0x99, 0x82, 0x53, 0x03, 0x95, 0x49, 0xe0, 0x87, 0xc6, 0x9e, 0x3a, 0xe7, 0xa0, 0x3c,
+	0xba, 0x8b, 0x87, 0xda, 0x9d, 0xa9, 0x54, 0x67, 0xd8, 0x53, 0xba, 0xa8, 0x48, 0x84, 0x47, 0xf1,
+	0x50, 0xb9, 0x92, 0x22, 0x51, 0xac, 0xfb, 0x95, 0xdb, 0xdf, 0x16, 0x68, 0xbe, 0x88, 0x15, 0xfc,
+	0x77, 0xbb, 0xf6, 0x45, 0x3e, 0xea, 0x40, 0xed, 0x33, 0xb0, 0x9e, 0xda, 0xc7, 0x00, 0x13, 0x4b,
+	0xc2, 0x19, 0x14, 0x1b, 0xe6, 0x32, 0xca, 0xf5, 0xb6, 0xd9, 0x3d, 0xd7, 0x73, 0xf9, 0xc7, 0x79,
+	0x6f, 0xf4, 0xfb, 0x61, 0x17, 0xba, 0x18, 0x7f, 0xda, 0x8d, 0xae, 0x69, 0x85, 0x53, 0x09, 0x8d,
+	0x54, 0x6a, 0xec, 0x41, 0x75, 0x28, 0xf9, 0x95, 0xf1, 0x04, 0xa7, 0x32, 0xc9, 0x79, 0x32, 0xf6,
+	0x12, 0xcd, 0x7f, 0xec, 0xa6, 0xf9, 0x44, 0x08, 0xa7, 0x12, 0xa1, 0xbc, 0x02, 0xa1, 0xb1, 0x87,
+	0x90, 0xae, 0x79, 0x2e, 0xea, 0xc1, 0xbc, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x1e, 0x80,
+	0x91, 0xf6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/device.pb.go b/googleapis/ads/googleads/v3/enums/device.pb.go
new file mode 100644
index 0000000..68e427a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/device.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/device.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates Google Ads devices available for targeting.
+type DeviceEnum_Device int32
+
+const (
+	// Not specified.
+	DeviceEnum_UNSPECIFIED DeviceEnum_Device = 0
+	// The value is unknown in this version.
+	DeviceEnum_UNKNOWN DeviceEnum_Device = 1
+	// Mobile devices with full browsers.
+	DeviceEnum_MOBILE DeviceEnum_Device = 2
+	// Tablets with full browsers.
+	DeviceEnum_TABLET DeviceEnum_Device = 3
+	// Computers.
+	DeviceEnum_DESKTOP DeviceEnum_Device = 4
+	// Smart TVs and game consoles.
+	DeviceEnum_CONNECTED_TV DeviceEnum_Device = 6
+	// Other device types.
+	DeviceEnum_OTHER DeviceEnum_Device = 5
+)
+
+var DeviceEnum_Device_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MOBILE",
+	3: "TABLET",
+	4: "DESKTOP",
+	6: "CONNECTED_TV",
+	5: "OTHER",
+}
+
+var DeviceEnum_Device_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"MOBILE":       2,
+	"TABLET":       3,
+	"DESKTOP":      4,
+	"CONNECTED_TV": 6,
+	"OTHER":        5,
+}
+
+func (x DeviceEnum_Device) String() string {
+	return proto.EnumName(DeviceEnum_Device_name, int32(x))
+}
+
+func (DeviceEnum_Device) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c7b3fa303d57f3cb, []int{0, 0}
+}
+
+// Container for enumeration of Google Ads devices available for targeting.
+type DeviceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceEnum) Reset()         { *m = DeviceEnum{} }
+func (m *DeviceEnum) String() string { return proto.CompactTextString(m) }
+func (*DeviceEnum) ProtoMessage()    {}
+func (*DeviceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c7b3fa303d57f3cb, []int{0}
+}
+
+func (m *DeviceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceEnum.Unmarshal(m, b)
+}
+func (m *DeviceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceEnum.Marshal(b, m, deterministic)
+}
+func (m *DeviceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceEnum.Merge(m, src)
+}
+func (m *DeviceEnum) XXX_Size() int {
+	return xxx_messageInfo_DeviceEnum.Size(m)
+}
+func (m *DeviceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DeviceEnum_Device", DeviceEnum_Device_name, DeviceEnum_Device_value)
+	proto.RegisterType((*DeviceEnum)(nil), "google.ads.googleads.v3.enums.DeviceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/device.proto", fileDescriptor_c7b3fa303d57f3cb)
+}
+
+var fileDescriptor_c7b3fa303d57f3cb = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4f, 0xc2, 0x30,
+	0x00, 0x85, 0x65, 0xc8, 0x8c, 0xc5, 0xc4, 0x66, 0x47, 0x23, 0x07, 0x38, 0x7a, 0xe8, 0x0e, 0xbb,
+	0xd5, 0xd3, 0xc6, 0x2a, 0x12, 0x70, 0x5b, 0xa4, 0xcc, 0xc4, 0x2c, 0x31, 0x93, 0x2e, 0x75, 0x09,
+	0xb4, 0x84, 0xc2, 0x7e, 0x90, 0x47, 0x7f, 0x8a, 0xbf, 0xc2, 0xb3, 0xbf, 0xc2, 0xb4, 0x95, 0xdd,
+	0xf4, 0xb2, 0xbc, 0xf5, 0x7d, 0x7d, 0x79, 0x7d, 0xe0, 0x86, 0x4b, 0xc9, 0xd7, 0x95, 0x5f, 0x32,
+	0xe5, 0x5b, 0xa9, 0x55, 0x13, 0xf8, 0x95, 0x38, 0x6c, 0x94, 0xcf, 0xaa, 0xa6, 0x5e, 0x55, 0x68,
+	0xbb, 0x93, 0x7b, 0xe9, 0x0d, 0x2c, 0x80, 0x4a, 0xa6, 0x50, 0xcb, 0xa2, 0x26, 0x40, 0x86, 0xbd,
+	0xba, 0x3e, 0x46, 0x6d, 0x6b, 0xbf, 0x14, 0x42, 0xee, 0xcb, 0x7d, 0x2d, 0x85, 0xb2, 0x97, 0x47,
+	0x0d, 0x00, 0xb1, 0x09, 0x23, 0xe2, 0xb0, 0x19, 0xbd, 0x01, 0xd7, 0xfe, 0x79, 0x97, 0xa0, 0xbf,
+	0x4c, 0x16, 0x19, 0x19, 0x4f, 0xef, 0xa6, 0x24, 0x86, 0x27, 0x5e, 0x1f, 0x9c, 0x2d, 0x93, 0x59,
+	0x92, 0x3e, 0x25, 0xb0, 0xe3, 0x01, 0xe0, 0x3e, 0xa4, 0xd1, 0x74, 0x4e, 0xa0, 0xa3, 0x35, 0x0d,
+	0xa3, 0x39, 0xa1, 0xb0, 0xab, 0xa1, 0x98, 0x2c, 0x66, 0x34, 0xcd, 0xe0, 0xa9, 0x07, 0xc1, 0xc5,
+	0x38, 0x4d, 0x12, 0x32, 0xa6, 0x24, 0x7e, 0xa1, 0x39, 0x74, 0xbd, 0x73, 0xd0, 0x4b, 0xe9, 0x3d,
+	0x79, 0x84, 0xbd, 0xe8, 0xab, 0x03, 0x86, 0x2b, 0xb9, 0x41, 0xff, 0x76, 0x8f, 0xfa, 0xb6, 0x4d,
+	0xa6, 0xab, 0x66, 0x9d, 0xe7, 0xe8, 0x97, 0xe6, 0x72, 0x5d, 0x0a, 0x8e, 0xe4, 0x8e, 0xfb, 0xbc,
+	0x12, 0xe6, 0x21, 0xc7, 0x95, 0xb6, 0xb5, 0xfa, 0x63, 0xb4, 0x5b, 0xf3, 0x7d, 0x77, 0xba, 0x93,
+	0x30, 0xfc, 0x70, 0x06, 0x13, 0x1b, 0x15, 0x32, 0x85, 0xac, 0xd4, 0x2a, 0x0f, 0x90, 0xde, 0x41,
+	0x7d, 0x1e, 0xfd, 0x22, 0x64, 0xaa, 0x68, 0xfd, 0x22, 0x0f, 0x0a, 0xe3, 0x7f, 0x3b, 0x43, 0x7b,
+	0x88, 0x71, 0xc8, 0x14, 0xc6, 0x2d, 0x81, 0x71, 0x1e, 0x60, 0x6c, 0x98, 0x57, 0xd7, 0x14, 0x0b,
+	0x7e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x17, 0x00, 0x7d, 0x77, 0xcc, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/display_ad_format_setting.pb.go b/googleapis/ads/googleads/v3/enums/display_ad_format_setting.pb.go
new file mode 100644
index 0000000..c9fb083
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/display_ad_format_setting.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/display_ad_format_setting.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates display ad format settings.
+type DisplayAdFormatSettingEnum_DisplayAdFormatSetting int32
+
+const (
+	// Not specified.
+	DisplayAdFormatSettingEnum_UNSPECIFIED DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 0
+	// The value is unknown in this version.
+	DisplayAdFormatSettingEnum_UNKNOWN DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 1
+	// Text, image and native formats.
+	DisplayAdFormatSettingEnum_ALL_FORMATS DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 2
+	// Text and image formats.
+	DisplayAdFormatSettingEnum_NON_NATIVE DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 3
+	// Native format, i.e. the format rendering is controlled by the publisher
+	// and not by Google.
+	DisplayAdFormatSettingEnum_NATIVE DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 4
+)
+
+var DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_FORMATS",
+	3: "NON_NATIVE",
+	4: "NATIVE",
+}
+
+var DisplayAdFormatSettingEnum_DisplayAdFormatSetting_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ALL_FORMATS": 2,
+	"NON_NATIVE":  3,
+	"NATIVE":      4,
+}
+
+func (x DisplayAdFormatSettingEnum_DisplayAdFormatSetting) String() string {
+	return proto.EnumName(DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name, int32(x))
+}
+
+func (DisplayAdFormatSettingEnum_DisplayAdFormatSetting) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fc5ae562658ce012, []int{0, 0}
+}
+
+// Container for display ad format settings.
+type DisplayAdFormatSettingEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisplayAdFormatSettingEnum) Reset()         { *m = DisplayAdFormatSettingEnum{} }
+func (m *DisplayAdFormatSettingEnum) String() string { return proto.CompactTextString(m) }
+func (*DisplayAdFormatSettingEnum) ProtoMessage()    {}
+func (*DisplayAdFormatSettingEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc5ae562658ce012, []int{0}
+}
+
+func (m *DisplayAdFormatSettingEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Unmarshal(m, b)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Marshal(b, m, deterministic)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayAdFormatSettingEnum.Merge(m, src)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Size() int {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Size(m)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayAdFormatSettingEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayAdFormatSettingEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting", DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name, DisplayAdFormatSettingEnum_DisplayAdFormatSetting_value)
+	proto.RegisterType((*DisplayAdFormatSettingEnum)(nil), "google.ads.googleads.v3.enums.DisplayAdFormatSettingEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/display_ad_format_setting.proto", fileDescriptor_fc5ae562658ce012)
+}
+
+var fileDescriptor_fc5ae562658ce012 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4f, 0xc2, 0x30,
+	0x18, 0x75, 0xc3, 0x60, 0x52, 0x12, 0x5d, 0x76, 0xf0, 0x80, 0x72, 0x80, 0x1f, 0xd0, 0x1d, 0x76,
+	0xab, 0xf1, 0x50, 0x64, 0x10, 0x22, 0x16, 0x22, 0x30, 0x13, 0xb3, 0x64, 0xa9, 0x74, 0x36, 0x4b,
+	0x58, 0xbb, 0xd0, 0x42, 0xe2, 0xd1, 0xbf, 0xe2, 0xd1, 0x9f, 0xe2, 0x4f, 0xf1, 0xe4, 0x4f, 0x30,
+	0x6b, 0x61, 0x27, 0xf4, 0xd2, 0xbc, 0xf4, 0x7d, 0xef, 0x7d, 0xdf, 0x7b, 0xe0, 0x96, 0x4b, 0xc9,
+	0xd7, 0x59, 0x40, 0x99, 0x0a, 0x2c, 0xac, 0xd0, 0x2e, 0x0c, 0x32, 0xb1, 0x2d, 0x54, 0xc0, 0x72,
+	0x55, 0xae, 0xe9, 0x5b, 0x4a, 0x59, 0xfa, 0x2a, 0x37, 0x05, 0xd5, 0xa9, 0xca, 0xb4, 0xce, 0x05,
+	0x87, 0xe5, 0x46, 0x6a, 0xe9, 0x77, 0xac, 0x06, 0x52, 0xa6, 0x60, 0x2d, 0x87, 0xbb, 0x10, 0x1a,
+	0x79, 0xfb, 0xfa, 0xe0, 0x5e, 0xe6, 0x01, 0x15, 0x42, 0x6a, 0xaa, 0x73, 0x29, 0x94, 0x15, 0xf7,
+	0xde, 0x1d, 0xd0, 0x1e, 0xd8, 0x05, 0x98, 0x0d, 0x8d, 0xfd, 0xdc, 0xba, 0x47, 0x62, 0x5b, 0xf4,
+	0x56, 0xe0, 0xf2, 0x38, 0xeb, 0x5f, 0x80, 0xd6, 0x92, 0xcc, 0x67, 0xd1, 0xdd, 0x78, 0x38, 0x8e,
+	0x06, 0xde, 0x89, 0xdf, 0x02, 0x67, 0x4b, 0x72, 0x4f, 0xa6, 0x4f, 0xc4, 0x73, 0x2a, 0x16, 0x4f,
+	0x26, 0xe9, 0x70, 0xfa, 0xf8, 0x80, 0x17, 0x73, 0xcf, 0xf5, 0xcf, 0x01, 0x20, 0x53, 0x92, 0x12,
+	0xbc, 0x18, 0xc7, 0x91, 0xd7, 0xf0, 0x01, 0x68, 0xee, 0xf1, 0x69, 0xff, 0xc7, 0x01, 0xdd, 0x95,
+	0x2c, 0xe0, 0xbf, 0x39, 0xfa, 0x57, 0xc7, 0x0f, 0x99, 0x55, 0x31, 0x66, 0xce, 0x73, 0x7f, 0xaf,
+	0xe6, 0x72, 0x4d, 0x05, 0x87, 0x72, 0xc3, 0x03, 0x9e, 0x09, 0x13, 0xf2, 0x50, 0x6a, 0x99, 0xab,
+	0x3f, 0x3a, 0xbe, 0x31, 0xef, 0x87, 0xdb, 0x18, 0x61, 0xfc, 0xe9, 0x76, 0x46, 0xd6, 0x0a, 0x33,
+	0x05, 0x2d, 0xac, 0x50, 0x1c, 0xc2, 0xaa, 0x12, 0xf5, 0x75, 0xe0, 0x13, 0xcc, 0x54, 0x52, 0xf3,
+	0x49, 0x1c, 0x26, 0x86, 0xff, 0x76, 0xbb, 0xf6, 0x13, 0x21, 0xcc, 0x14, 0x42, 0xf5, 0x04, 0x42,
+	0x71, 0x88, 0x90, 0x99, 0x79, 0x69, 0x9a, 0xc3, 0xc2, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6,
+	0x8f, 0x92, 0x5b, 0xfb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/display_upload_product_type.pb.go b/googleapis/ads/googleads/v3/enums/display_upload_product_type.pb.go
new file mode 100644
index 0000000..1aff4b6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/display_upload_product_type.pb.go
@@ -0,0 +1,187 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/display_upload_product_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates display upload product types.
+type DisplayUploadProductTypeEnum_DisplayUploadProductType int32
+
+const (
+	// Not specified.
+	DisplayUploadProductTypeEnum_UNSPECIFIED DisplayUploadProductTypeEnum_DisplayUploadProductType = 0
+	// The value is unknown in this version.
+	DisplayUploadProductTypeEnum_UNKNOWN DisplayUploadProductTypeEnum_DisplayUploadProductType = 1
+	// HTML5 upload ad. This product type requires the upload_media_bundle
+	// field in DisplayUploadAdInfo to be set.
+	DisplayUploadProductTypeEnum_HTML5_UPLOAD_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 2
+	// Dynamic HTML5 education ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in an education campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_EDUCATION_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 3
+	// Dynamic HTML5 flight ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a flight campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_FLIGHT_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 4
+	// Dynamic HTML5 hotel and rental ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a hotel campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_HOTEL_RENTAL_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 5
+	// Dynamic HTML5 job ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a job campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_JOB_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 6
+	// Dynamic HTML5 local ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a local campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_LOCAL_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 7
+	// Dynamic HTML5 real estate ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a real estate campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_REAL_ESTATE_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 8
+	// Dynamic HTML5 custom ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a custom campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_CUSTOM_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 9
+	// Dynamic HTML5 travel ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a travel campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_TRAVEL_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 10
+	// Dynamic HTML5 hotel ad. This product type requires the
+	// upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be
+	// used in a hotel campaign.
+	DisplayUploadProductTypeEnum_DYNAMIC_HTML5_HOTEL_AD DisplayUploadProductTypeEnum_DisplayUploadProductType = 11
+)
+
+var DisplayUploadProductTypeEnum_DisplayUploadProductType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "HTML5_UPLOAD_AD",
+	3:  "DYNAMIC_HTML5_EDUCATION_AD",
+	4:  "DYNAMIC_HTML5_FLIGHT_AD",
+	5:  "DYNAMIC_HTML5_HOTEL_RENTAL_AD",
+	6:  "DYNAMIC_HTML5_JOB_AD",
+	7:  "DYNAMIC_HTML5_LOCAL_AD",
+	8:  "DYNAMIC_HTML5_REAL_ESTATE_AD",
+	9:  "DYNAMIC_HTML5_CUSTOM_AD",
+	10: "DYNAMIC_HTML5_TRAVEL_AD",
+	11: "DYNAMIC_HTML5_HOTEL_AD",
+}
+
+var DisplayUploadProductTypeEnum_DisplayUploadProductType_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"HTML5_UPLOAD_AD":               2,
+	"DYNAMIC_HTML5_EDUCATION_AD":    3,
+	"DYNAMIC_HTML5_FLIGHT_AD":       4,
+	"DYNAMIC_HTML5_HOTEL_RENTAL_AD": 5,
+	"DYNAMIC_HTML5_JOB_AD":          6,
+	"DYNAMIC_HTML5_LOCAL_AD":        7,
+	"DYNAMIC_HTML5_REAL_ESTATE_AD":  8,
+	"DYNAMIC_HTML5_CUSTOM_AD":       9,
+	"DYNAMIC_HTML5_TRAVEL_AD":       10,
+	"DYNAMIC_HTML5_HOTEL_AD":        11,
+}
+
+func (x DisplayUploadProductTypeEnum_DisplayUploadProductType) String() string {
+	return proto.EnumName(DisplayUploadProductTypeEnum_DisplayUploadProductType_name, int32(x))
+}
+
+func (DisplayUploadProductTypeEnum_DisplayUploadProductType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_167ffb3f75d13ef8, []int{0, 0}
+}
+
+// Container for display upload product types. Product types that have the word
+// "DYNAMIC" in them must be associated with a campaign that has a dynamic
+// remarketing feed. See https://support.google.com/google-ads/answer/6053288
+// for more info about dynamic remarketing. Other product types are regarded
+// as "static" and do not have this requirement.
+type DisplayUploadProductTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisplayUploadProductTypeEnum) Reset()         { *m = DisplayUploadProductTypeEnum{} }
+func (m *DisplayUploadProductTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*DisplayUploadProductTypeEnum) ProtoMessage()    {}
+func (*DisplayUploadProductTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_167ffb3f75d13ef8, []int{0}
+}
+
+func (m *DisplayUploadProductTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayUploadProductTypeEnum.Unmarshal(m, b)
+}
+func (m *DisplayUploadProductTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayUploadProductTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *DisplayUploadProductTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayUploadProductTypeEnum.Merge(m, src)
+}
+func (m *DisplayUploadProductTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_DisplayUploadProductTypeEnum.Size(m)
+}
+func (m *DisplayUploadProductTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayUploadProductTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayUploadProductTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DisplayUploadProductTypeEnum_DisplayUploadProductType", DisplayUploadProductTypeEnum_DisplayUploadProductType_name, DisplayUploadProductTypeEnum_DisplayUploadProductType_value)
+	proto.RegisterType((*DisplayUploadProductTypeEnum)(nil), "google.ads.googleads.v3.enums.DisplayUploadProductTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/display_upload_product_type.proto", fileDescriptor_167ffb3f75d13ef8)
+}
+
+var fileDescriptor_167ffb3f75d13ef8 = []byte{
+	// 440 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8e, 0xd3, 0x30,
+	0x14, 0x86, 0x69, 0x06, 0x66, 0xc0, 0x5d, 0x4c, 0x65, 0x10, 0x8c, 0x4a, 0x8b, 0xe8, 0x1c, 0xc0,
+	0x59, 0x44, 0x6c, 0xc2, 0x02, 0xb9, 0x89, 0xa7, 0x0d, 0xa4, 0x49, 0xd4, 0x3a, 0x45, 0xa0, 0x4a,
+	0x51, 0x18, 0x47, 0x51, 0xa5, 0x36, 0xb6, 0xea, 0xb4, 0x52, 0xaf, 0xc3, 0x92, 0xa3, 0x70, 0x05,
+	0x6e, 0xc0, 0x92, 0x35, 0x0b, 0x64, 0x9b, 0x56, 0x8a, 0xaa, 0xce, 0xc6, 0x7a, 0xf2, 0xf7, 0xbf,
+	0xff, 0x3d, 0xe9, 0x7f, 0xe0, 0x43, 0xc9, 0x79, 0xb9, 0x2a, 0xec, 0x9c, 0x49, 0xdb, 0x94, 0xaa,
+	0xda, 0x39, 0x76, 0x51, 0x6d, 0xd7, 0xd2, 0x66, 0x4b, 0x29, 0x56, 0xf9, 0x3e, 0xdb, 0x8a, 0x15,
+	0xcf, 0x59, 0x26, 0x36, 0x9c, 0x6d, 0xef, 0xeb, 0xac, 0xde, 0x8b, 0x02, 0x89, 0x0d, 0xaf, 0x39,
+	0xec, 0x9b, 0x2e, 0x94, 0x33, 0x89, 0x8e, 0x06, 0x68, 0xe7, 0x20, 0x6d, 0xd0, 0xed, 0x1d, 0xfc,
+	0xc5, 0xd2, 0xce, 0xab, 0x8a, 0xd7, 0x79, 0xbd, 0xe4, 0x95, 0x34, 0xcd, 0xb7, 0x7f, 0x2d, 0xd0,
+	0xf3, 0xcd, 0x88, 0x54, 0x4f, 0x48, 0xcc, 0x00, 0xba, 0x17, 0x05, 0xa9, 0xb6, 0xeb, 0xdb, 0x5f,
+	0x16, 0xb8, 0x39, 0x27, 0x80, 0xd7, 0xa0, 0x9d, 0x46, 0xb3, 0x84, 0x78, 0xc1, 0x5d, 0x40, 0xfc,
+	0xce, 0x23, 0xd8, 0x06, 0x57, 0x69, 0xf4, 0x29, 0x8a, 0x3f, 0x47, 0x9d, 0x16, 0x7c, 0x0e, 0xae,
+	0xc7, 0x74, 0x12, 0xbe, 0xcb, 0xd2, 0x24, 0x8c, 0xb1, 0x9f, 0x61, 0xbf, 0x63, 0xc1, 0x37, 0xa0,
+	0xeb, 0x7f, 0x89, 0xf0, 0x24, 0xf0, 0x32, 0x03, 0x89, 0x9f, 0x7a, 0x98, 0x06, 0x71, 0xa4, 0xf8,
+	0x05, 0x7c, 0x0d, 0x5e, 0x35, 0xf9, 0x5d, 0x18, 0x8c, 0xc6, 0x54, 0xc1, 0xc7, 0x70, 0x00, 0xfa,
+	0x4d, 0x38, 0x8e, 0x29, 0x09, 0xb3, 0x29, 0x89, 0x28, 0x0e, 0x95, 0xe4, 0x09, 0xbc, 0x01, 0x2f,
+	0x9a, 0x92, 0x8f, 0xf1, 0x50, 0x91, 0x4b, 0xd8, 0x05, 0x2f, 0x9b, 0x24, 0x8c, 0x3d, 0xd3, 0x75,
+	0x05, 0xdf, 0x82, 0x5e, 0x93, 0x4d, 0x09, 0x0e, 0x33, 0x32, 0xa3, 0x98, 0x12, 0xa5, 0x78, 0x7a,
+	0xba, 0x97, 0x97, 0xce, 0x68, 0x3c, 0x51, 0xf0, 0xd9, 0x29, 0xa4, 0x53, 0x3c, 0x27, 0xda, 0x1b,
+	0x9c, 0xce, 0x35, 0x4b, 0x63, 0xbf, 0xd3, 0x1e, 0xfe, 0x69, 0x81, 0xc1, 0x3d, 0x5f, 0xa3, 0x07,
+	0x23, 0x1c, 0xf6, 0xcf, 0x05, 0x90, 0xa8, 0x0c, 0x93, 0xd6, 0xd7, 0xe1, 0xff, 0xfe, 0x92, 0xaf,
+	0xf2, 0xaa, 0x44, 0x7c, 0x53, 0xda, 0x65, 0x51, 0xe9, 0x84, 0x0f, 0x37, 0x25, 0x96, 0xf2, 0xcc,
+	0x89, 0xbd, 0xd7, 0xef, 0x77, 0xeb, 0x62, 0x84, 0xf1, 0x0f, 0xab, 0x3f, 0x32, 0x56, 0x98, 0x49,
+	0x64, 0x4a, 0x55, 0xcd, 0x1d, 0xa4, 0xae, 0x41, 0xfe, 0x3c, 0xf0, 0x05, 0x66, 0x72, 0x71, 0xe4,
+	0x8b, 0xb9, 0xb3, 0xd0, 0xfc, 0xb7, 0x35, 0x30, 0x9f, 0xae, 0x8b, 0x99, 0x74, 0xdd, 0xa3, 0xc2,
+	0x75, 0xe7, 0x8e, 0xeb, 0x6a, 0xcd, 0xb7, 0x4b, 0xbd, 0x98, 0xf3, 0x2f, 0x00, 0x00, 0xff, 0xff,
+	0x2b, 0xce, 0x78, 0x56, 0xfa, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/distance_bucket.pb.go b/googleapis/ads/googleads/v3/enums/distance_bucket.pb.go
new file mode 100644
index 0000000..3b40baa
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/distance_bucket.pb.go
@@ -0,0 +1,235 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/distance_bucket.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The distance bucket for a user’s distance from an advertiser’s location
+// extension.
+type DistanceBucketEnum_DistanceBucket int32
+
+const (
+	// Not specified.
+	DistanceBucketEnum_UNSPECIFIED DistanceBucketEnum_DistanceBucket = 0
+	// Used for return value only. Represents value unknown in this version.
+	DistanceBucketEnum_UNKNOWN DistanceBucketEnum_DistanceBucket = 1
+	// User was within 700m of the location.
+	DistanceBucketEnum_WITHIN_700M DistanceBucketEnum_DistanceBucket = 2
+	// User was within 1KM of the location.
+	DistanceBucketEnum_WITHIN_1KM DistanceBucketEnum_DistanceBucket = 3
+	// User was within 5KM of the location.
+	DistanceBucketEnum_WITHIN_5KM DistanceBucketEnum_DistanceBucket = 4
+	// User was within 10KM of the location.
+	DistanceBucketEnum_WITHIN_10KM DistanceBucketEnum_DistanceBucket = 5
+	// User was within 15KM of the location.
+	DistanceBucketEnum_WITHIN_15KM DistanceBucketEnum_DistanceBucket = 6
+	// User was within 20KM of the location.
+	DistanceBucketEnum_WITHIN_20KM DistanceBucketEnum_DistanceBucket = 7
+	// User was within 25KM of the location.
+	DistanceBucketEnum_WITHIN_25KM DistanceBucketEnum_DistanceBucket = 8
+	// User was within 30KM of the location.
+	DistanceBucketEnum_WITHIN_30KM DistanceBucketEnum_DistanceBucket = 9
+	// User was within 35KM of the location.
+	DistanceBucketEnum_WITHIN_35KM DistanceBucketEnum_DistanceBucket = 10
+	// User was within 40KM of the location.
+	DistanceBucketEnum_WITHIN_40KM DistanceBucketEnum_DistanceBucket = 11
+	// User was within 45KM of the location.
+	DistanceBucketEnum_WITHIN_45KM DistanceBucketEnum_DistanceBucket = 12
+	// User was within 50KM of the location.
+	DistanceBucketEnum_WITHIN_50KM DistanceBucketEnum_DistanceBucket = 13
+	// User was within 55KM of the location.
+	DistanceBucketEnum_WITHIN_55KM DistanceBucketEnum_DistanceBucket = 14
+	// User was within 60KM of the location.
+	DistanceBucketEnum_WITHIN_60KM DistanceBucketEnum_DistanceBucket = 15
+	// User was within 65KM of the location.
+	DistanceBucketEnum_WITHIN_65KM DistanceBucketEnum_DistanceBucket = 16
+	// User was beyond 65KM of the location.
+	DistanceBucketEnum_BEYOND_65KM DistanceBucketEnum_DistanceBucket = 17
+	// User was within 0.7 miles of the location.
+	DistanceBucketEnum_WITHIN_0_7MILES DistanceBucketEnum_DistanceBucket = 18
+	// User was within 1 mile of the location.
+	DistanceBucketEnum_WITHIN_1MILE DistanceBucketEnum_DistanceBucket = 19
+	// User was within 5 miles of the location.
+	DistanceBucketEnum_WITHIN_5MILES DistanceBucketEnum_DistanceBucket = 20
+	// User was within 10 miles of the location.
+	DistanceBucketEnum_WITHIN_10MILES DistanceBucketEnum_DistanceBucket = 21
+	// User was within 15 miles of the location.
+	DistanceBucketEnum_WITHIN_15MILES DistanceBucketEnum_DistanceBucket = 22
+	// User was within 20 miles of the location.
+	DistanceBucketEnum_WITHIN_20MILES DistanceBucketEnum_DistanceBucket = 23
+	// User was within 25 miles of the location.
+	DistanceBucketEnum_WITHIN_25MILES DistanceBucketEnum_DistanceBucket = 24
+	// User was within 30 miles of the location.
+	DistanceBucketEnum_WITHIN_30MILES DistanceBucketEnum_DistanceBucket = 25
+	// User was within 35 miles of the location.
+	DistanceBucketEnum_WITHIN_35MILES DistanceBucketEnum_DistanceBucket = 26
+	// User was within 40 miles of the location.
+	DistanceBucketEnum_WITHIN_40MILES DistanceBucketEnum_DistanceBucket = 27
+	// User was beyond 40 miles of the location.
+	DistanceBucketEnum_BEYOND_40MILES DistanceBucketEnum_DistanceBucket = 28
+)
+
+var DistanceBucketEnum_DistanceBucket_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "WITHIN_700M",
+	3:  "WITHIN_1KM",
+	4:  "WITHIN_5KM",
+	5:  "WITHIN_10KM",
+	6:  "WITHIN_15KM",
+	7:  "WITHIN_20KM",
+	8:  "WITHIN_25KM",
+	9:  "WITHIN_30KM",
+	10: "WITHIN_35KM",
+	11: "WITHIN_40KM",
+	12: "WITHIN_45KM",
+	13: "WITHIN_50KM",
+	14: "WITHIN_55KM",
+	15: "WITHIN_60KM",
+	16: "WITHIN_65KM",
+	17: "BEYOND_65KM",
+	18: "WITHIN_0_7MILES",
+	19: "WITHIN_1MILE",
+	20: "WITHIN_5MILES",
+	21: "WITHIN_10MILES",
+	22: "WITHIN_15MILES",
+	23: "WITHIN_20MILES",
+	24: "WITHIN_25MILES",
+	25: "WITHIN_30MILES",
+	26: "WITHIN_35MILES",
+	27: "WITHIN_40MILES",
+	28: "BEYOND_40MILES",
+}
+
+var DistanceBucketEnum_DistanceBucket_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"WITHIN_700M":     2,
+	"WITHIN_1KM":      3,
+	"WITHIN_5KM":      4,
+	"WITHIN_10KM":     5,
+	"WITHIN_15KM":     6,
+	"WITHIN_20KM":     7,
+	"WITHIN_25KM":     8,
+	"WITHIN_30KM":     9,
+	"WITHIN_35KM":     10,
+	"WITHIN_40KM":     11,
+	"WITHIN_45KM":     12,
+	"WITHIN_50KM":     13,
+	"WITHIN_55KM":     14,
+	"WITHIN_60KM":     15,
+	"WITHIN_65KM":     16,
+	"BEYOND_65KM":     17,
+	"WITHIN_0_7MILES": 18,
+	"WITHIN_1MILE":    19,
+	"WITHIN_5MILES":   20,
+	"WITHIN_10MILES":  21,
+	"WITHIN_15MILES":  22,
+	"WITHIN_20MILES":  23,
+	"WITHIN_25MILES":  24,
+	"WITHIN_30MILES":  25,
+	"WITHIN_35MILES":  26,
+	"WITHIN_40MILES":  27,
+	"BEYOND_40MILES":  28,
+}
+
+func (x DistanceBucketEnum_DistanceBucket) String() string {
+	return proto.EnumName(DistanceBucketEnum_DistanceBucket_name, int32(x))
+}
+
+func (DistanceBucketEnum_DistanceBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4666d419e0011116, []int{0, 0}
+}
+
+// Container for distance buckets of a user’s distance from an advertiser’s
+// location extension.
+type DistanceBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DistanceBucketEnum) Reset()         { *m = DistanceBucketEnum{} }
+func (m *DistanceBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*DistanceBucketEnum) ProtoMessage()    {}
+func (*DistanceBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4666d419e0011116, []int{0}
+}
+
+func (m *DistanceBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DistanceBucketEnum.Unmarshal(m, b)
+}
+func (m *DistanceBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DistanceBucketEnum.Marshal(b, m, deterministic)
+}
+func (m *DistanceBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DistanceBucketEnum.Merge(m, src)
+}
+func (m *DistanceBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_DistanceBucketEnum.Size(m)
+}
+func (m *DistanceBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DistanceBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DistanceBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DistanceBucketEnum_DistanceBucket", DistanceBucketEnum_DistanceBucket_name, DistanceBucketEnum_DistanceBucket_value)
+	proto.RegisterType((*DistanceBucketEnum)(nil), "google.ads.googleads.v3.enums.DistanceBucketEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/distance_bucket.proto", fileDescriptor_4666d419e0011116)
+}
+
+var fileDescriptor_4666d419e0011116 = []byte{
+	// 456 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdf, 0x4e, 0xdb, 0x30,
+	0x14, 0x87, 0xd7, 0xd2, 0xc1, 0xe6, 0x42, 0x6b, 0xdc, 0xfd, 0x65, 0x70, 0x01, 0x0f, 0xe0, 0x14,
+	0x0c, 0x43, 0xca, 0xae, 0x92, 0x35, 0x63, 0x51, 0x97, 0x50, 0x89, 0x51, 0xb4, 0xa9, 0x52, 0x15,
+	0x9a, 0x28, 0xaa, 0x46, 0xed, 0x0a, 0xa7, 0x3c, 0xca, 0x1e, 0x60, 0x97, 0x93, 0xf6, 0x22, 0x7b,
+	0x92, 0x69, 0x4f, 0x31, 0x9d, 0xd8, 0x89, 0x0e, 0x17, 0xe3, 0x26, 0x3a, 0xf9, 0xce, 0x77, 0x4e,
+	0x62, 0xeb, 0x47, 0x44, 0xae, 0x54, 0x7e, 0x93, 0x39, 0x49, 0xaa, 0x1d, 0x53, 0x42, 0x75, 0x27,
+	0x9c, 0x4c, 0xae, 0x16, 0xda, 0x49, 0xe7, 0xba, 0x48, 0xe4, 0x2c, 0x9b, 0x5e, 0xaf, 0x66, 0xdf,
+	0xb2, 0x82, 0x2f, 0x6f, 0x55, 0xa1, 0xd8, 0x9e, 0x31, 0x79, 0x92, 0x6a, 0x5e, 0x0f, 0xf1, 0x3b,
+	0xc1, 0xcb, 0xa1, 0x9d, 0xdd, 0x6a, 0xe7, 0x72, 0xee, 0x24, 0x52, 0xaa, 0x22, 0x29, 0xe6, 0x4a,
+	0x6a, 0x33, 0x7c, 0xf0, 0xab, 0x45, 0xd8, 0xc0, 0xae, 0xf5, 0xcb, 0xad, 0x81, 0x5c, 0x2d, 0x0e,
+	0xbe, 0xb7, 0x48, 0xe7, 0x3e, 0x66, 0x5d, 0xd2, 0xbe, 0x8c, 0x2f, 0x46, 0xc1, 0xfb, 0xf0, 0x43,
+	0x18, 0x0c, 0xe8, 0x23, 0xd6, 0x26, 0x1b, 0x97, 0xf1, 0x30, 0x3e, 0xbf, 0x8a, 0x69, 0x03, 0xba,
+	0x57, 0xe1, 0xe7, 0x8f, 0x61, 0x3c, 0x3d, 0xed, 0xf7, 0x23, 0xda, 0x64, 0x1d, 0x42, 0x2c, 0x38,
+	0x1c, 0x46, 0x74, 0x0d, 0xbd, 0x9f, 0x0c, 0x23, 0xda, 0x42, 0x03, 0x87, 0xfd, 0x61, 0x44, 0x1f,
+	0x63, 0x00, 0xc6, 0x3a, 0x02, 0x47, 0x60, 0x6c, 0x60, 0x00, 0xc6, 0x13, 0x04, 0x04, 0x18, 0x4f,
+	0x31, 0x00, 0x83, 0x20, 0x70, 0x0c, 0x46, 0x1b, 0x03, 0x30, 0x36, 0x11, 0x38, 0x01, 0x63, 0x0b,
+	0x03, 0x30, 0x3a, 0x08, 0xbc, 0x05, 0xa3, 0x8b, 0x01, 0x18, 0x14, 0x80, 0x1f, 0x7c, 0x39, 0x8f,
+	0x07, 0x06, 0x6c, 0xb3, 0x1e, 0xe9, 0x5a, 0xa3, 0x3f, 0x3d, 0x8d, 0xc2, 0x4f, 0xc1, 0x05, 0x65,
+	0x8c, 0x92, 0xcd, 0xea, 0x80, 0x80, 0x68, 0x8f, 0x6d, 0x93, 0xad, 0xea, 0x53, 0x46, 0x7a, 0xc6,
+	0x18, 0xe9, 0xd4, 0xd7, 0x62, 0xd8, 0x73, 0xcc, 0xac, 0xf7, 0x02, 0xb1, 0x23, 0xeb, 0xbd, 0xc4,
+	0xcc, 0x7a, 0xaf, 0x10, 0x13, 0xd6, 0x7b, 0x8d, 0x99, 0xf5, 0x76, 0x10, 0x3b, 0xb6, 0xde, 0x1b,
+	0x60, 0xf6, 0x58, 0x15, 0xdb, 0xf5, 0xff, 0x34, 0xc8, 0xfe, 0x4c, 0x2d, 0xf8, 0x83, 0x99, 0xf3,
+	0x7b, 0xf7, 0xb3, 0x33, 0x82, 0xa8, 0x8d, 0x1a, 0x5f, 0x7d, 0x3b, 0x95, 0xab, 0x9b, 0x44, 0xe6,
+	0x5c, 0xdd, 0xe6, 0x4e, 0x9e, 0xc9, 0x32, 0x88, 0x55, 0xdc, 0x97, 0x73, 0xfd, 0x9f, 0xf4, 0xbf,
+	0x2b, 0x9f, 0x3f, 0x9a, 0x6b, 0x67, 0x9e, 0xf7, 0xb3, 0xb9, 0x77, 0x66, 0x56, 0x79, 0xa9, 0xe6,
+	0xa6, 0x84, 0x6a, 0x2c, 0x38, 0xc4, 0x57, 0xff, 0xae, 0xfa, 0x13, 0x2f, 0xd5, 0x93, 0xba, 0x3f,
+	0x19, 0x8b, 0x49, 0xd9, 0xff, 0xdb, 0xdc, 0x37, 0xd0, 0x75, 0xbd, 0x54, 0xbb, 0x6e, 0x6d, 0xb8,
+	0xee, 0x58, 0xb8, 0x6e, 0xe9, 0x5c, 0xaf, 0x97, 0x3f, 0x26, 0xfe, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x98, 0xa9, 0x3d, 0xe9, 0x95, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/dsa_page_feed_criterion_field.pb.go b/googleapis/ads/googleads/v3/enums/dsa_page_feed_criterion_field.pb.go
new file mode 100644
index 0000000..40f3749
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/dsa_page_feed_criterion_field.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/dsa_page_feed_criterion_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Dynamic Search Ad Page Feed criterion fields.
+type DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField int32
+
+const (
+	// Not specified.
+	DsaPageFeedCriterionFieldEnum_UNSPECIFIED DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField = 0
+	// Used for return value only. Represents value unknown in this version.
+	DsaPageFeedCriterionFieldEnum_UNKNOWN DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField = 1
+	// Data Type: URL or URL_LIST. URL of the web page you want to target.
+	DsaPageFeedCriterionFieldEnum_PAGE_URL DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField = 2
+	// Data Type: STRING_LIST. The labels that will help you target ads within
+	// your page feed.
+	DsaPageFeedCriterionFieldEnum_LABEL DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField = 3
+)
+
+var DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PAGE_URL",
+	3: "LABEL",
+}
+
+var DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PAGE_URL":    2,
+	"LABEL":       3,
+}
+
+func (x DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField) String() string {
+	return proto.EnumName(DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField_name, int32(x))
+}
+
+func (DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_084fbedb240e0f43, []int{0, 0}
+}
+
+// Values for Dynamic Search Ad Page Feed criterion fields.
+type DsaPageFeedCriterionFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DsaPageFeedCriterionFieldEnum) Reset()         { *m = DsaPageFeedCriterionFieldEnum{} }
+func (m *DsaPageFeedCriterionFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*DsaPageFeedCriterionFieldEnum) ProtoMessage()    {}
+func (*DsaPageFeedCriterionFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_084fbedb240e0f43, []int{0}
+}
+
+func (m *DsaPageFeedCriterionFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DsaPageFeedCriterionFieldEnum.Unmarshal(m, b)
+}
+func (m *DsaPageFeedCriterionFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DsaPageFeedCriterionFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *DsaPageFeedCriterionFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DsaPageFeedCriterionFieldEnum.Merge(m, src)
+}
+func (m *DsaPageFeedCriterionFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_DsaPageFeedCriterionFieldEnum.Size(m)
+}
+func (m *DsaPageFeedCriterionFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DsaPageFeedCriterionFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DsaPageFeedCriterionFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField", DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField_name, DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField_value)
+	proto.RegisterType((*DsaPageFeedCriterionFieldEnum)(nil), "google.ads.googleads.v3.enums.DsaPageFeedCriterionFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/dsa_page_feed_criterion_field.proto", fileDescriptor_084fbedb240e0f43)
+}
+
+var fileDescriptor_084fbedb240e0f43 = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x6a, 0xeb, 0x30,
+	0x18, 0x7c, 0x71, 0x78, 0xfd, 0x51, 0x0a, 0x35, 0xde, 0xb5, 0x34, 0x85, 0xe4, 0x00, 0xf2, 0xc2,
+	0x3b, 0x75, 0x25, 0x27, 0x4e, 0x08, 0x0d, 0xae, 0x49, 0x49, 0x0a, 0xc5, 0x60, 0xd4, 0x48, 0x11,
+	0x82, 0x44, 0x32, 0xfe, 0x9c, 0x1c, 0xa8, 0xcb, 0x1e, 0xa5, 0x47, 0xe9, 0xb6, 0x17, 0x28, 0x96,
+	0xea, 0xec, 0xd2, 0x8d, 0x19, 0x3c, 0xf3, 0xcd, 0x8c, 0x06, 0x51, 0x69, 0x8c, 0xdc, 0x8a, 0x90,
+	0x71, 0x08, 0x1d, 0x6c, 0xd0, 0x21, 0x0a, 0x85, 0xde, 0xef, 0x20, 0xe4, 0xc0, 0x8a, 0x92, 0x49,
+	0x51, 0x6c, 0x84, 0xe0, 0xc5, 0xba, 0x52, 0xb5, 0xa8, 0x94, 0xd1, 0xc5, 0x46, 0x89, 0x2d, 0xc7,
+	0x65, 0x65, 0x6a, 0x13, 0xf4, 0xdd, 0x1d, 0x66, 0x1c, 0xf0, 0xd1, 0x02, 0x1f, 0x22, 0x6c, 0x2d,
+	0x6e, 0xef, 0xda, 0x84, 0x52, 0x85, 0x4c, 0x6b, 0x53, 0xb3, 0x5a, 0x19, 0x0d, 0xee, 0x78, 0x08,
+	0xa8, 0x3f, 0x06, 0x96, 0x31, 0x29, 0x26, 0x42, 0xf0, 0x51, 0x1b, 0x30, 0x69, 0xfc, 0x13, 0xbd,
+	0xdf, 0x0d, 0x17, 0xe8, 0xe6, 0xa4, 0x20, 0xb8, 0x46, 0xbd, 0x65, 0xfa, 0x9c, 0x25, 0xa3, 0xd9,
+	0x64, 0x96, 0x8c, 0xfd, 0x7f, 0x41, 0x0f, 0x9d, 0x2f, 0xd3, 0xc7, 0xf4, 0xe9, 0x25, 0xf5, 0x3b,
+	0xc1, 0x15, 0xba, 0xc8, 0xe8, 0x34, 0x29, 0x96, 0x8b, 0xb9, 0xef, 0x05, 0x97, 0xe8, 0xff, 0x9c,
+	0xc6, 0xc9, 0xdc, 0xef, 0xc6, 0xdf, 0x1d, 0x34, 0x58, 0x9b, 0x1d, 0xfe, 0xb3, 0x78, 0x7c, 0x7f,
+	0x32, 0x37, 0x6b, 0xaa, 0x67, 0x9d, 0xd7, 0xf8, 0xd7, 0x40, 0x9a, 0x2d, 0xd3, 0x12, 0x9b, 0x4a,
+	0x86, 0x52, 0x68, 0xfb, 0xb0, 0x76, 0xcc, 0x52, 0xc1, 0x89, 0x6d, 0x1f, 0xec, 0xf7, 0xdd, 0xeb,
+	0x4e, 0x29, 0xfd, 0xf0, 0xfa, 0x53, 0x67, 0x45, 0x39, 0x60, 0x07, 0x1b, 0xb4, 0x8a, 0x70, 0x33,
+	0x02, 0x7c, 0xb6, 0x7c, 0x4e, 0x39, 0xe4, 0x47, 0x3e, 0x5f, 0x45, 0xb9, 0xe5, 0xbf, 0xbc, 0x81,
+	0xfb, 0x49, 0x08, 0xe5, 0x40, 0xc8, 0x51, 0x41, 0xc8, 0x2a, 0x22, 0xc4, 0x6a, 0xde, 0xce, 0x6c,
+	0xb1, 0xe8, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf1, 0xc0, 0x0d, 0xd4, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/education_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/education_placeholder_field.pb.go
new file mode 100644
index 0000000..111b5da
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/education_placeholder_field.pb.go
@@ -0,0 +1,213 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/education_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Education placeholder fields.
+type EducationPlaceholderFieldEnum_EducationPlaceholderField int32
+
+const (
+	// Not specified.
+	EducationPlaceholderFieldEnum_UNSPECIFIED EducationPlaceholderFieldEnum_EducationPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	EducationPlaceholderFieldEnum_UNKNOWN EducationPlaceholderFieldEnum_EducationPlaceholderField = 1
+	// Data Type: STRING. Required. Combination of PROGRAM ID and LOCATION ID
+	// must be unique per offer.
+	EducationPlaceholderFieldEnum_PROGRAM_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 2
+	// Data Type: STRING. Combination of PROGRAM ID and LOCATION ID must be
+	// unique per offer.
+	EducationPlaceholderFieldEnum_LOCATION_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with program name to be shown
+	// in dynamic ad.
+	EducationPlaceholderFieldEnum_PROGRAM_NAME EducationPlaceholderFieldEnum_EducationPlaceholderField = 4
+	// Data Type: STRING. Area of study that can be shown in dynamic ad.
+	EducationPlaceholderFieldEnum_AREA_OF_STUDY EducationPlaceholderFieldEnum_EducationPlaceholderField = 5
+	// Data Type: STRING. Description of program that can be shown in dynamic
+	// ad.
+	EducationPlaceholderFieldEnum_PROGRAM_DESCRIPTION EducationPlaceholderFieldEnum_EducationPlaceholderField = 6
+	// Data Type: STRING. Name of school that can be shown in dynamic ad.
+	EducationPlaceholderFieldEnum_SCHOOL_NAME EducationPlaceholderFieldEnum_EducationPlaceholderField = 7
+	// Data Type: STRING. Complete school address, including postal code.
+	EducationPlaceholderFieldEnum_ADDRESS EducationPlaceholderFieldEnum_EducationPlaceholderField = 8
+	// Data Type: URL. Image to be displayed in ads.
+	EducationPlaceholderFieldEnum_THUMBNAIL_IMAGE_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 9
+	// Data Type: URL. Alternative hosted file of image to be used in the ad.
+	EducationPlaceholderFieldEnum_ALTERNATIVE_THUMBNAIL_IMAGE_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 10
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific program and its location).
+	EducationPlaceholderFieldEnum_FINAL_URLS EducationPlaceholderFieldEnum_EducationPlaceholderField = 11
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	EducationPlaceholderFieldEnum_FINAL_MOBILE_URLS EducationPlaceholderFieldEnum_EducationPlaceholderField = 12
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	EducationPlaceholderFieldEnum_TRACKING_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 13
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	EducationPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS EducationPlaceholderFieldEnum_EducationPlaceholderField = 14
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	EducationPlaceholderFieldEnum_ANDROID_APP_LINK EducationPlaceholderFieldEnum_EducationPlaceholderField = 15
+	// Data Type: STRING_LIST. List of recommended program IDs to show together
+	// with this item.
+	EducationPlaceholderFieldEnum_SIMILAR_PROGRAM_IDS EducationPlaceholderFieldEnum_EducationPlaceholderField = 16
+	// Data Type: STRING. iOS app link.
+	EducationPlaceholderFieldEnum_IOS_APP_LINK EducationPlaceholderFieldEnum_EducationPlaceholderField = 17
+	// Data Type: INT64. iOS app store ID.
+	EducationPlaceholderFieldEnum_IOS_APP_STORE_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 18
+)
+
+var EducationPlaceholderFieldEnum_EducationPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROGRAM_ID",
+	3:  "LOCATION_ID",
+	4:  "PROGRAM_NAME",
+	5:  "AREA_OF_STUDY",
+	6:  "PROGRAM_DESCRIPTION",
+	7:  "SCHOOL_NAME",
+	8:  "ADDRESS",
+	9:  "THUMBNAIL_IMAGE_URL",
+	10: "ALTERNATIVE_THUMBNAIL_IMAGE_URL",
+	11: "FINAL_URLS",
+	12: "FINAL_MOBILE_URLS",
+	13: "TRACKING_URL",
+	14: "CONTEXTUAL_KEYWORDS",
+	15: "ANDROID_APP_LINK",
+	16: "SIMILAR_PROGRAM_IDS",
+	17: "IOS_APP_LINK",
+	18: "IOS_APP_STORE_ID",
+}
+
+var EducationPlaceholderFieldEnum_EducationPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"PROGRAM_ID":                      2,
+	"LOCATION_ID":                     3,
+	"PROGRAM_NAME":                    4,
+	"AREA_OF_STUDY":                   5,
+	"PROGRAM_DESCRIPTION":             6,
+	"SCHOOL_NAME":                     7,
+	"ADDRESS":                         8,
+	"THUMBNAIL_IMAGE_URL":             9,
+	"ALTERNATIVE_THUMBNAIL_IMAGE_URL": 10,
+	"FINAL_URLS":                      11,
+	"FINAL_MOBILE_URLS":               12,
+	"TRACKING_URL":                    13,
+	"CONTEXTUAL_KEYWORDS":             14,
+	"ANDROID_APP_LINK":                15,
+	"SIMILAR_PROGRAM_IDS":             16,
+	"IOS_APP_LINK":                    17,
+	"IOS_APP_STORE_ID":                18,
+}
+
+func (x EducationPlaceholderFieldEnum_EducationPlaceholderField) String() string {
+	return proto.EnumName(EducationPlaceholderFieldEnum_EducationPlaceholderField_name, int32(x))
+}
+
+func (EducationPlaceholderFieldEnum_EducationPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_13bff7ba698c75f1, []int{0, 0}
+}
+
+// Values for Education placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type EducationPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EducationPlaceholderFieldEnum) Reset()         { *m = EducationPlaceholderFieldEnum{} }
+func (m *EducationPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*EducationPlaceholderFieldEnum) ProtoMessage()    {}
+func (*EducationPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_13bff7ba698c75f1, []int{0}
+}
+
+func (m *EducationPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EducationPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Size(m)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_EducationPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EducationPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.EducationPlaceholderFieldEnum_EducationPlaceholderField", EducationPlaceholderFieldEnum_EducationPlaceholderField_name, EducationPlaceholderFieldEnum_EducationPlaceholderField_value)
+	proto.RegisterType((*EducationPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.EducationPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/education_placeholder_field.proto", fileDescriptor_13bff7ba698c75f1)
+}
+
+var fileDescriptor_13bff7ba698c75f1 = []byte{
+	// 514 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x8e, 0xd3, 0x3c,
+	0x14, 0xc5, 0xbf, 0xb6, 0x1f, 0x33, 0xe0, 0xce, 0x1f, 0xd7, 0x80, 0x10, 0x88, 0x82, 0x66, 0xd8,
+	0x27, 0x8b, 0xec, 0xc2, 0x02, 0xb9, 0x89, 0xdb, 0xb1, 0x9a, 0xd8, 0x91, 0x9d, 0x74, 0x18, 0x54,
+	0xc9, 0x0a, 0x4d, 0x08, 0x95, 0xd2, 0xa4, 0x6a, 0xda, 0x79, 0x1b, 0x36, 0x2c, 0x79, 0x09, 0xf6,
+	0x3c, 0x0a, 0x5b, 0x5e, 0x00, 0x39, 0x21, 0xed, 0x86, 0xb2, 0xa9, 0xae, 0xef, 0x3d, 0xf7, 0x77,
+	0x5c, 0xe7, 0x80, 0x77, 0x59, 0x59, 0x66, 0x79, 0x6a, 0xc6, 0x49, 0x65, 0x36, 0xa5, 0xae, 0xee,
+	0x2d, 0x33, 0x2d, 0x76, 0xab, 0xca, 0x4c, 0x93, 0xdd, 0x22, 0xde, 0x2e, 0xcb, 0x42, 0xad, 0xf3,
+	0x78, 0x91, 0x7e, 0x2e, 0xf3, 0x24, 0xdd, 0xa8, 0x4f, 0xcb, 0x34, 0x4f, 0x8c, 0xf5, 0xa6, 0xdc,
+	0x96, 0x68, 0xd8, 0x6c, 0x19, 0x71, 0x52, 0x19, 0x7b, 0x80, 0x71, 0x6f, 0x19, 0x35, 0xe0, 0xc5,
+	0xcb, 0x96, 0xbf, 0x5e, 0x9a, 0x71, 0x51, 0x94, 0xdb, 0x9a, 0x56, 0x35, 0xcb, 0xd7, 0xdf, 0x7b,
+	0x60, 0x48, 0x5a, 0x8b, 0xe0, 0xe0, 0x30, 0xd6, 0x06, 0xa4, 0xd8, 0xad, 0xae, 0xbf, 0xf4, 0xc0,
+	0xf3, 0xa3, 0x0a, 0x74, 0x09, 0xfa, 0x11, 0x93, 0x01, 0x71, 0xe8, 0x98, 0x12, 0x17, 0xfe, 0x87,
+	0xfa, 0xe0, 0x34, 0x62, 0x53, 0xc6, 0x6f, 0x19, 0xec, 0xa0, 0x0b, 0x00, 0x02, 0xc1, 0x27, 0x02,
+	0xfb, 0x8a, 0xba, 0xb0, 0xab, 0xd5, 0x1e, 0x77, 0x70, 0x48, 0x39, 0xd3, 0x8d, 0x1e, 0x82, 0xe0,
+	0xac, 0x15, 0x30, 0xec, 0x13, 0xf8, 0x3f, 0x1a, 0x80, 0x73, 0x2c, 0x08, 0x56, 0x7c, 0xac, 0x64,
+	0x18, 0xb9, 0x77, 0xf0, 0x01, 0x7a, 0x06, 0x1e, 0xb7, 0x22, 0x97, 0x48, 0x47, 0xd0, 0x40, 0x03,
+	0xe0, 0x89, 0xc6, 0x49, 0xe7, 0x86, 0x73, 0xaf, 0x59, 0x3e, 0xd5, 0xe6, 0xd8, 0x75, 0x05, 0x91,
+	0x12, 0x3e, 0xd4, 0x6b, 0xe1, 0x4d, 0xe4, 0x8f, 0x18, 0xa6, 0x9e, 0xa2, 0x3e, 0x9e, 0x10, 0x15,
+	0x09, 0x0f, 0x3e, 0x42, 0x6f, 0xc0, 0x6b, 0xec, 0x85, 0x44, 0x30, 0x1c, 0xd2, 0x19, 0x51, 0x7f,
+	0x13, 0x01, 0x7d, 0xf5, 0x31, 0x65, 0xd8, 0xd3, 0x47, 0x09, 0xfb, 0xe8, 0x29, 0x18, 0x34, 0x67,
+	0x9f, 0x8f, 0xa8, 0x47, 0x9a, 0xf6, 0x99, 0xfe, 0x03, 0xa1, 0xc0, 0xce, 0x94, 0xb2, 0x49, 0xbd,
+	0x78, 0xae, 0x6d, 0x1d, 0xce, 0x42, 0xf2, 0x3e, 0x8c, 0xb0, 0xa7, 0xa6, 0xe4, 0xee, 0x96, 0x0b,
+	0x57, 0xc2, 0x0b, 0xf4, 0x04, 0x40, 0xcc, 0x5c, 0xc1, 0xa9, 0xab, 0x70, 0x10, 0x28, 0x8f, 0xb2,
+	0x29, 0xbc, 0xd4, 0x72, 0x49, 0x7d, 0xea, 0x61, 0xa1, 0x0e, 0x4f, 0x25, 0x21, 0xd4, 0x64, 0xca,
+	0xe5, 0x41, 0x3a, 0xd0, 0x80, 0xb6, 0x23, 0x43, 0x2e, 0x88, 0x7e, 0x42, 0x34, 0xfa, 0xd5, 0x01,
+	0x57, 0x8b, 0x72, 0x65, 0xfc, 0x33, 0x05, 0xa3, 0x57, 0x47, 0x3f, 0x61, 0xa0, 0x73, 0x10, 0x74,
+	0x3e, 0x8c, 0xfe, 0x00, 0xb2, 0x32, 0x8f, 0x8b, 0xcc, 0x28, 0x37, 0x99, 0x99, 0xa5, 0x45, 0x9d,
+	0x92, 0x36, 0x97, 0xeb, 0x65, 0x75, 0x24, 0xa6, 0x6f, 0xeb, 0xdf, 0xaf, 0xdd, 0xde, 0x04, 0xe3,
+	0x6f, 0xdd, 0xe1, 0xa4, 0x41, 0xe1, 0xa4, 0x32, 0x9a, 0x52, 0x57, 0x33, 0xcb, 0xd0, 0x81, 0xaa,
+	0x7e, 0xb4, 0xf3, 0x39, 0x4e, 0xaa, 0xf9, 0x7e, 0x3e, 0x9f, 0x59, 0xf3, 0x7a, 0xfe, 0xb3, 0x7b,
+	0xd5, 0x34, 0x6d, 0x1b, 0x27, 0x95, 0x6d, 0xef, 0x15, 0xb6, 0x3d, 0xb3, 0x6c, 0xbb, 0xd6, 0x7c,
+	0x3c, 0xa9, 0x2f, 0x66, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xc1, 0xd0, 0x2d, 0x3e, 0x03,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/extension_setting_device.pb.go b/googleapis/ads/googleads/v3/enums/extension_setting_device.pb.go
new file mode 100644
index 0000000..4a6e0cd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/extension_setting_device.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/extension_setting_device.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possbile device types for an extension setting.
+type ExtensionSettingDeviceEnum_ExtensionSettingDevice int32
+
+const (
+	// Not specified.
+	ExtensionSettingDeviceEnum_UNSPECIFIED ExtensionSettingDeviceEnum_ExtensionSettingDevice = 0
+	// The value is unknown in this version.
+	ExtensionSettingDeviceEnum_UNKNOWN ExtensionSettingDeviceEnum_ExtensionSettingDevice = 1
+	// Mobile. The extensions in the extension setting will only serve on
+	// mobile devices.
+	ExtensionSettingDeviceEnum_MOBILE ExtensionSettingDeviceEnum_ExtensionSettingDevice = 2
+	// Desktop. The extensions in the extension setting will only serve on
+	// desktop devices.
+	ExtensionSettingDeviceEnum_DESKTOP ExtensionSettingDeviceEnum_ExtensionSettingDevice = 3
+)
+
+var ExtensionSettingDeviceEnum_ExtensionSettingDevice_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MOBILE",
+	3: "DESKTOP",
+}
+
+var ExtensionSettingDeviceEnum_ExtensionSettingDevice_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MOBILE":      2,
+	"DESKTOP":     3,
+}
+
+func (x ExtensionSettingDeviceEnum_ExtensionSettingDevice) String() string {
+	return proto.EnumName(ExtensionSettingDeviceEnum_ExtensionSettingDevice_name, int32(x))
+}
+
+func (ExtensionSettingDeviceEnum_ExtensionSettingDevice) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d12dc0a0593aa785, []int{0, 0}
+}
+
+// Container for enum describing extension setting device types.
+type ExtensionSettingDeviceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ExtensionSettingDeviceEnum) Reset()         { *m = ExtensionSettingDeviceEnum{} }
+func (m *ExtensionSettingDeviceEnum) String() string { return proto.CompactTextString(m) }
+func (*ExtensionSettingDeviceEnum) ProtoMessage()    {}
+func (*ExtensionSettingDeviceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d12dc0a0593aa785, []int{0}
+}
+
+func (m *ExtensionSettingDeviceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionSettingDeviceEnum.Unmarshal(m, b)
+}
+func (m *ExtensionSettingDeviceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionSettingDeviceEnum.Marshal(b, m, deterministic)
+}
+func (m *ExtensionSettingDeviceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionSettingDeviceEnum.Merge(m, src)
+}
+func (m *ExtensionSettingDeviceEnum) XXX_Size() int {
+	return xxx_messageInfo_ExtensionSettingDeviceEnum.Size(m)
+}
+func (m *ExtensionSettingDeviceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionSettingDeviceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionSettingDeviceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice", ExtensionSettingDeviceEnum_ExtensionSettingDevice_name, ExtensionSettingDeviceEnum_ExtensionSettingDevice_value)
+	proto.RegisterType((*ExtensionSettingDeviceEnum)(nil), "google.ads.googleads.v3.enums.ExtensionSettingDeviceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/extension_setting_device.proto", fileDescriptor_d12dc0a0593aa785)
+}
+
+var fileDescriptor_d12dc0a0593aa785 = []byte{
+	// 309 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x07, 0x13, 0xb2, 0x83, 0xa5, 0x07, 0x0f, 0xd3, 0x1d, 0xb6, 0x07, 0x48, 0x0e,
+	0xb9, 0x45, 0x2f, 0xad, 0x8b, 0x63, 0x4c, 0xdb, 0xc2, 0xdc, 0x04, 0x29, 0x8c, 0xba, 0x84, 0x10,
+	0x58, 0x93, 0xb1, 0x64, 0xc3, 0xe7, 0xf1, 0xe8, 0xa3, 0xf8, 0x28, 0x9e, 0x7c, 0x04, 0x69, 0x62,
+	0x7b, 0x9a, 0x5e, 0xca, 0x47, 0xbf, 0xff, 0xf7, 0xcb, 0xf7, 0xff, 0x83, 0x5b, 0xa1, 0xb5, 0xd8,
+	0x72, 0x54, 0x32, 0x83, 0xbc, 0xac, 0xd5, 0x11, 0x23, 0xae, 0x0e, 0x95, 0x41, 0xfc, 0xcd, 0x72,
+	0x65, 0xa4, 0x56, 0x6b, 0xc3, 0xad, 0x95, 0x4a, 0xac, 0x19, 0x3f, 0xca, 0x0d, 0x87, 0xbb, 0xbd,
+	0xb6, 0x3a, 0x1a, 0xfa, 0x08, 0x2c, 0x99, 0x81, 0x6d, 0x1a, 0x1e, 0x31, 0x74, 0xe9, 0xc1, 0x75,
+	0x03, 0xdf, 0x49, 0x54, 0x2a, 0xa5, 0x6d, 0x69, 0xa5, 0x56, 0xc6, 0x87, 0xc7, 0x15, 0x18, 0xd0,
+	0x06, 0xbf, 0xf0, 0xf4, 0x89, 0x83, 0x53, 0x75, 0xa8, 0xc6, 0x19, 0xb8, 0x3c, 0xed, 0x46, 0x17,
+	0xa0, 0xbf, 0x4c, 0x17, 0x39, 0xbd, 0x9b, 0xdd, 0xcf, 0xe8, 0x24, 0x3c, 0x8b, 0xfa, 0xe0, 0x7c,
+	0x99, 0xce, 0xd3, 0xec, 0x39, 0x0d, 0x3b, 0x11, 0x00, 0xbd, 0xc7, 0x2c, 0x99, 0x3d, 0xd0, 0x30,
+	0xa8, 0x8d, 0x09, 0x5d, 0xcc, 0x9f, 0xb2, 0x3c, 0xec, 0x26, 0xdf, 0x1d, 0x30, 0xda, 0xe8, 0x0a,
+	0xfe, 0x5b, 0x39, 0xb9, 0x3a, 0xfd, 0x68, 0x5e, 0x37, 0xce, 0x3b, 0x2f, 0xc9, 0x6f, 0x5a, 0xe8,
+	0x6d, 0xa9, 0x04, 0xd4, 0x7b, 0x81, 0x04, 0x57, 0x6e, 0x9f, 0xe6, 0x7c, 0x3b, 0x69, 0xfe, 0xb8,
+	0xe6, 0x8d, 0xfb, 0xbe, 0x07, 0xdd, 0x69, 0x1c, 0x7f, 0x04, 0xc3, 0xa9, 0x47, 0xc5, 0xcc, 0x40,
+	0x2f, 0x6b, 0xb5, 0xc2, 0xb0, 0x5e, 0xdf, 0x7c, 0x36, 0x7e, 0x11, 0x33, 0x53, 0xb4, 0x7e, 0xb1,
+	0xc2, 0x85, 0xf3, 0xbf, 0x82, 0x91, 0xff, 0x49, 0x48, 0xcc, 0x0c, 0x21, 0xed, 0x04, 0x21, 0x2b,
+	0x4c, 0x88, 0x9b, 0x79, 0xed, 0xb9, 0x62, 0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0x15, 0xea, 0xb4,
+	0x28, 0xe5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/extension_type.pb.go b/googleapis/ads/googleads/v3/enums/extension_type.pb.go
new file mode 100644
index 0000000..b56bc0c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/extension_type.pb.go
@@ -0,0 +1,171 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/extension_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible data types for an extension in an extension setting.
+type ExtensionTypeEnum_ExtensionType int32
+
+const (
+	// Not specified.
+	ExtensionTypeEnum_UNSPECIFIED ExtensionTypeEnum_ExtensionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ExtensionTypeEnum_UNKNOWN ExtensionTypeEnum_ExtensionType = 1
+	// None.
+	ExtensionTypeEnum_NONE ExtensionTypeEnum_ExtensionType = 2
+	// App.
+	ExtensionTypeEnum_APP ExtensionTypeEnum_ExtensionType = 3
+	// Call.
+	ExtensionTypeEnum_CALL ExtensionTypeEnum_ExtensionType = 4
+	// Callout.
+	ExtensionTypeEnum_CALLOUT ExtensionTypeEnum_ExtensionType = 5
+	// Message.
+	ExtensionTypeEnum_MESSAGE ExtensionTypeEnum_ExtensionType = 6
+	// Price.
+	ExtensionTypeEnum_PRICE ExtensionTypeEnum_ExtensionType = 7
+	// Promotion.
+	ExtensionTypeEnum_PROMOTION ExtensionTypeEnum_ExtensionType = 8
+	// Sitelink.
+	ExtensionTypeEnum_SITELINK ExtensionTypeEnum_ExtensionType = 10
+	// Structured snippet.
+	ExtensionTypeEnum_STRUCTURED_SNIPPET ExtensionTypeEnum_ExtensionType = 11
+	// Location.
+	ExtensionTypeEnum_LOCATION ExtensionTypeEnum_ExtensionType = 12
+	// Affiliate location.
+	ExtensionTypeEnum_AFFILIATE_LOCATION ExtensionTypeEnum_ExtensionType = 13
+	// Hotel callout
+	ExtensionTypeEnum_HOTEL_CALLOUT ExtensionTypeEnum_ExtensionType = 15
+)
+
+var ExtensionTypeEnum_ExtensionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "NONE",
+	3:  "APP",
+	4:  "CALL",
+	5:  "CALLOUT",
+	6:  "MESSAGE",
+	7:  "PRICE",
+	8:  "PROMOTION",
+	10: "SITELINK",
+	11: "STRUCTURED_SNIPPET",
+	12: "LOCATION",
+	13: "AFFILIATE_LOCATION",
+	15: "HOTEL_CALLOUT",
+}
+
+var ExtensionTypeEnum_ExtensionType_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"NONE":               2,
+	"APP":                3,
+	"CALL":               4,
+	"CALLOUT":            5,
+	"MESSAGE":            6,
+	"PRICE":              7,
+	"PROMOTION":          8,
+	"SITELINK":           10,
+	"STRUCTURED_SNIPPET": 11,
+	"LOCATION":           12,
+	"AFFILIATE_LOCATION": 13,
+	"HOTEL_CALLOUT":      15,
+}
+
+func (x ExtensionTypeEnum_ExtensionType) String() string {
+	return proto.EnumName(ExtensionTypeEnum_ExtensionType_name, int32(x))
+}
+
+func (ExtensionTypeEnum_ExtensionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_db17f887bbab658a, []int{0, 0}
+}
+
+// Container for enum describing possible data types for an extension in an
+// extension setting.
+type ExtensionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ExtensionTypeEnum) Reset()         { *m = ExtensionTypeEnum{} }
+func (m *ExtensionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ExtensionTypeEnum) ProtoMessage()    {}
+func (*ExtensionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_db17f887bbab658a, []int{0}
+}
+
+func (m *ExtensionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionTypeEnum.Unmarshal(m, b)
+}
+func (m *ExtensionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ExtensionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionTypeEnum.Merge(m, src)
+}
+func (m *ExtensionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ExtensionTypeEnum.Size(m)
+}
+func (m *ExtensionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ExtensionTypeEnum_ExtensionType", ExtensionTypeEnum_ExtensionType_name, ExtensionTypeEnum_ExtensionType_value)
+	proto.RegisterType((*ExtensionTypeEnum)(nil), "google.ads.googleads.v3.enums.ExtensionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/extension_type.proto", fileDescriptor_db17f887bbab658a)
+}
+
+var fileDescriptor_db17f887bbab658a = []byte{
+	// 409 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x41, 0x6b, 0xdb, 0x30,
+	0x18, 0x9d, 0x93, 0xb6, 0x49, 0x95, 0x86, 0xaa, 0x3a, 0xec, 0x30, 0xd6, 0x43, 0xfb, 0x03, 0x64,
+	0x98, 0x6f, 0xda, 0x49, 0x71, 0x95, 0x4c, 0xd4, 0x95, 0x44, 0x2c, 0x67, 0x30, 0x02, 0xc1, 0x9b,
+	0x8d, 0x09, 0x34, 0x92, 0xa9, 0xdc, 0xb2, 0xfe, 0x9d, 0x1d, 0xf7, 0x53, 0xf6, 0x1f, 0x76, 0x1e,
+	0xec, 0xba, 0x3f, 0x30, 0x64, 0xcf, 0x81, 0x1c, 0xd6, 0x8b, 0x78, 0x7a, 0xdf, 0x7b, 0x1f, 0x1f,
+	0xef, 0x81, 0x77, 0x95, 0xb5, 0xd5, 0x7d, 0x19, 0xe6, 0x85, 0x0b, 0x3b, 0xe8, 0xd1, 0x53, 0x14,
+	0x96, 0xe6, 0x71, 0xe7, 0xc2, 0xf2, 0x6b, 0x53, 0x1a, 0xb7, 0xb5, 0x66, 0xd3, 0x3c, 0xd7, 0x25,
+	0xae, 0x1f, 0x6c, 0x63, 0xd1, 0x65, 0x27, 0xc4, 0x79, 0xe1, 0xf0, 0xde, 0x83, 0x9f, 0x22, 0xdc,
+	0x7a, 0xde, 0xbc, 0xed, 0x57, 0xd6, 0xdb, 0x30, 0x37, 0xc6, 0x36, 0x79, 0xb3, 0xb5, 0xc6, 0x75,
+	0xe6, 0xeb, 0x3f, 0x01, 0xb8, 0x60, 0xfd, 0x56, 0xfd, 0x5c, 0x97, 0xcc, 0x3c, 0xee, 0xae, 0x7f,
+	0x06, 0x60, 0x7a, 0xc0, 0xa2, 0x73, 0x30, 0xc9, 0x44, 0xaa, 0x58, 0xcc, 0xe7, 0x9c, 0xdd, 0xc0,
+	0x57, 0x68, 0x02, 0x46, 0x99, 0xb8, 0x15, 0xf2, 0xa3, 0x80, 0x01, 0x1a, 0x83, 0x23, 0x21, 0x05,
+	0x83, 0x03, 0x34, 0x02, 0x43, 0xaa, 0x14, 0x1c, 0x7a, 0x2a, 0xa6, 0x49, 0x02, 0x8f, 0xbc, 0xd2,
+	0x23, 0x99, 0x69, 0x78, 0xec, 0x3f, 0x77, 0x2c, 0x4d, 0xe9, 0x82, 0xc1, 0x13, 0x74, 0x0a, 0x8e,
+	0xd5, 0x92, 0xc7, 0x0c, 0x8e, 0xd0, 0x14, 0x9c, 0xaa, 0xa5, 0xbc, 0x93, 0x9a, 0x4b, 0x01, 0xc7,
+	0xe8, 0x0c, 0x8c, 0x53, 0xae, 0x59, 0xc2, 0xc5, 0x2d, 0x04, 0xe8, 0x35, 0x40, 0xa9, 0x5e, 0x66,
+	0xb1, 0xce, 0x96, 0xec, 0x66, 0x93, 0x0a, 0xae, 0x14, 0xd3, 0x70, 0xe2, 0x55, 0x89, 0x8c, 0x69,
+	0xeb, 0x39, 0xf3, 0x2a, 0x3a, 0x9f, 0xf3, 0x84, 0x53, 0xcd, 0x36, 0x7b, 0x7e, 0x8a, 0x2e, 0xc0,
+	0xf4, 0x83, 0xd4, 0x2c, 0xd9, 0xf4, 0x57, 0x9c, 0xcf, 0x7e, 0x05, 0xe0, 0xea, 0x8b, 0xdd, 0xe1,
+	0x17, 0x93, 0x9b, 0xa1, 0x83, 0x08, 0x94, 0xcf, 0x4b, 0x05, 0x9f, 0x66, 0xff, 0x4c, 0x95, 0xbd,
+	0xcf, 0x4d, 0x85, 0xed, 0x43, 0x15, 0x56, 0xa5, 0x69, 0xd3, 0xec, 0x2b, 0xab, 0xb7, 0xee, 0x3f,
+	0x0d, 0xbe, 0x6f, 0xdf, 0x6f, 0x83, 0xe1, 0x82, 0xd2, 0xef, 0x83, 0xcb, 0x45, 0xb7, 0x8a, 0x16,
+	0x0e, 0x77, 0xd0, 0xa3, 0x55, 0x84, 0x7d, 0x09, 0xee, 0x47, 0x3f, 0x5f, 0xd3, 0xc2, 0xad, 0xf7,
+	0xf3, 0xf5, 0x2a, 0x5a, 0xb7, 0xf3, 0xdf, 0x83, 0xab, 0x8e, 0x24, 0x84, 0x16, 0x8e, 0x90, 0xbd,
+	0x82, 0x90, 0x55, 0x44, 0x48, 0xab, 0xf9, 0x7c, 0xd2, 0x1e, 0x16, 0xfd, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0x09, 0x27, 0xaa, 0xa1, 0x59, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/external_conversion_source.pb.go b/googleapis/ads/googleads/v3/enums/external_conversion_source.pb.go
new file mode 100644
index 0000000..040ce5a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/external_conversion_source.pb.go
@@ -0,0 +1,240 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/external_conversion_source.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The external conversion source that is associated with a ConversionAction.
+type ExternalConversionSourceEnum_ExternalConversionSource int32
+
+const (
+	// Not specified.
+	ExternalConversionSourceEnum_UNSPECIFIED ExternalConversionSourceEnum_ExternalConversionSource = 0
+	// Represents value unknown in this version.
+	ExternalConversionSourceEnum_UNKNOWN ExternalConversionSourceEnum_ExternalConversionSource = 1
+	// Conversion that occurs when a user navigates to a particular webpage
+	// after viewing an ad; Displayed in Google Ads UI as 'Website'.
+	ExternalConversionSourceEnum_WEBPAGE ExternalConversionSourceEnum_ExternalConversionSource = 2
+	// Conversion that comes from linked Google Analytics goal or transaction;
+	// Displayed in Google Ads UI as 'Analytics'.
+	ExternalConversionSourceEnum_ANALYTICS ExternalConversionSourceEnum_ExternalConversionSource = 3
+	// Website conversion that is uploaded through ConversionUploadService;
+	// Displayed in Google Ads UI as 'Import from clicks'.
+	ExternalConversionSourceEnum_UPLOAD ExternalConversionSourceEnum_ExternalConversionSource = 4
+	// Conversion that occurs when a user clicks on a call extension directly on
+	// an ad; Displayed in Google Ads UI as 'Calls from ads'.
+	ExternalConversionSourceEnum_AD_CALL_METRICS ExternalConversionSourceEnum_ExternalConversionSource = 5
+	// Conversion that occurs when a user calls a dynamically-generated phone
+	// number (by installed javascript) from an advertiser's website after
+	// clicking on an ad; Displayed in Google Ads UI as 'Calls from website'.
+	ExternalConversionSourceEnum_WEBSITE_CALL_METRICS ExternalConversionSourceEnum_ExternalConversionSource = 6
+	// Conversion that occurs when a user visits an advertiser's retail store
+	// after clicking on a Google ad;
+	// Displayed in Google Ads UI as 'Store visits'.
+	ExternalConversionSourceEnum_STORE_VISITS ExternalConversionSourceEnum_ExternalConversionSource = 7
+	// Conversion that occurs when a user takes an in-app action such as a
+	// purchase in an Android app;
+	// Displayed in Google Ads UI as 'Android in-app action'.
+	ExternalConversionSourceEnum_ANDROID_IN_APP ExternalConversionSourceEnum_ExternalConversionSource = 8
+	// Conversion that occurs when a user takes an in-app action such as a
+	// purchase in an iOS app;
+	// Displayed in Google Ads UI as 'iOS in-app action'.
+	ExternalConversionSourceEnum_IOS_IN_APP ExternalConversionSourceEnum_ExternalConversionSource = 9
+	// Conversion that occurs when a user opens an iOS app for the first time;
+	// Displayed in Google Ads UI as 'iOS app install (first open)'.
+	ExternalConversionSourceEnum_IOS_FIRST_OPEN ExternalConversionSourceEnum_ExternalConversionSource = 10
+	// Legacy app conversions that do not have an AppPlatform provided;
+	// Displayed in Google Ads UI as 'Mobile app'.
+	ExternalConversionSourceEnum_APP_UNSPECIFIED ExternalConversionSourceEnum_ExternalConversionSource = 11
+	// Conversion that occurs when a user opens an Android app for the first
+	// time; Displayed in Google Ads UI as 'Android app install (first open)'.
+	ExternalConversionSourceEnum_ANDROID_FIRST_OPEN ExternalConversionSourceEnum_ExternalConversionSource = 12
+	// Call conversion that is uploaded through ConversionUploadService;
+	// Displayed in Google Ads UI as 'Import from calls'.
+	ExternalConversionSourceEnum_UPLOAD_CALLS ExternalConversionSourceEnum_ExternalConversionSource = 13
+	// Conversion that comes from a linked Firebase event;
+	// Displayed in Google Ads UI as 'Firebase'.
+	ExternalConversionSourceEnum_FIREBASE ExternalConversionSourceEnum_ExternalConversionSource = 14
+	// Conversion that occurs when a user clicks on a mobile phone number;
+	// Displayed in Google Ads UI as 'Phone number clicks'.
+	ExternalConversionSourceEnum_CLICK_TO_CALL ExternalConversionSourceEnum_ExternalConversionSource = 15
+	// Conversion that comes from Salesforce;
+	// Displayed in Google Ads UI as 'Salesforce.com'.
+	ExternalConversionSourceEnum_SALESFORCE ExternalConversionSourceEnum_ExternalConversionSource = 16
+	// Conversion that comes from in-store purchases recorded by CRM;
+	// Displayed in Google Ads UI as 'Store sales (data partner)'.
+	ExternalConversionSourceEnum_STORE_SALES_CRM ExternalConversionSourceEnum_ExternalConversionSource = 17
+	// Conversion that comes from in-store purchases from payment network;
+	// Displayed in Google Ads UI as 'Store sales (payment network)'.
+	ExternalConversionSourceEnum_STORE_SALES_PAYMENT_NETWORK ExternalConversionSourceEnum_ExternalConversionSource = 18
+	// Codeless Google Play conversion;
+	// Displayed in Google Ads UI as 'Google Play'.
+	ExternalConversionSourceEnum_GOOGLE_PLAY ExternalConversionSourceEnum_ExternalConversionSource = 19
+	// Conversion that comes from a linked third-party app analytics event;
+	// Displayed in Google Ads UI as 'Third-party app analytics'.
+	ExternalConversionSourceEnum_THIRD_PARTY_APP_ANALYTICS ExternalConversionSourceEnum_ExternalConversionSource = 20
+	// Conversion that is controlled by Google Attribution.
+	ExternalConversionSourceEnum_GOOGLE_ATTRIBUTION ExternalConversionSourceEnum_ExternalConversionSource = 21
+	// Store Sales conversion based on first-party or third-party merchant data
+	// uploads. Displayed in Google Ads UI as 'Store sales (direct)'.
+	ExternalConversionSourceEnum_STORE_SALES_DIRECT ExternalConversionSourceEnum_ExternalConversionSource = 22
+)
+
+var ExternalConversionSourceEnum_ExternalConversionSource_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "WEBPAGE",
+	3:  "ANALYTICS",
+	4:  "UPLOAD",
+	5:  "AD_CALL_METRICS",
+	6:  "WEBSITE_CALL_METRICS",
+	7:  "STORE_VISITS",
+	8:  "ANDROID_IN_APP",
+	9:  "IOS_IN_APP",
+	10: "IOS_FIRST_OPEN",
+	11: "APP_UNSPECIFIED",
+	12: "ANDROID_FIRST_OPEN",
+	13: "UPLOAD_CALLS",
+	14: "FIREBASE",
+	15: "CLICK_TO_CALL",
+	16: "SALESFORCE",
+	17: "STORE_SALES_CRM",
+	18: "STORE_SALES_PAYMENT_NETWORK",
+	19: "GOOGLE_PLAY",
+	20: "THIRD_PARTY_APP_ANALYTICS",
+	21: "GOOGLE_ATTRIBUTION",
+	22: "STORE_SALES_DIRECT",
+}
+
+var ExternalConversionSourceEnum_ExternalConversionSource_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"WEBPAGE":                     2,
+	"ANALYTICS":                   3,
+	"UPLOAD":                      4,
+	"AD_CALL_METRICS":             5,
+	"WEBSITE_CALL_METRICS":        6,
+	"STORE_VISITS":                7,
+	"ANDROID_IN_APP":              8,
+	"IOS_IN_APP":                  9,
+	"IOS_FIRST_OPEN":              10,
+	"APP_UNSPECIFIED":             11,
+	"ANDROID_FIRST_OPEN":          12,
+	"UPLOAD_CALLS":                13,
+	"FIREBASE":                    14,
+	"CLICK_TO_CALL":               15,
+	"SALESFORCE":                  16,
+	"STORE_SALES_CRM":             17,
+	"STORE_SALES_PAYMENT_NETWORK": 18,
+	"GOOGLE_PLAY":                 19,
+	"THIRD_PARTY_APP_ANALYTICS":   20,
+	"GOOGLE_ATTRIBUTION":          21,
+	"STORE_SALES_DIRECT":          22,
+}
+
+func (x ExternalConversionSourceEnum_ExternalConversionSource) String() string {
+	return proto.EnumName(ExternalConversionSourceEnum_ExternalConversionSource_name, int32(x))
+}
+
+func (ExternalConversionSourceEnum_ExternalConversionSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b7b39ef7737c2983, []int{0, 0}
+}
+
+// Container for enum describing the external conversion source that is
+// associated with a ConversionAction.
+type ExternalConversionSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ExternalConversionSourceEnum) Reset()         { *m = ExternalConversionSourceEnum{} }
+func (m *ExternalConversionSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*ExternalConversionSourceEnum) ProtoMessage()    {}
+func (*ExternalConversionSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b7b39ef7737c2983, []int{0}
+}
+
+func (m *ExternalConversionSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExternalConversionSourceEnum.Unmarshal(m, b)
+}
+func (m *ExternalConversionSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExternalConversionSourceEnum.Marshal(b, m, deterministic)
+}
+func (m *ExternalConversionSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExternalConversionSourceEnum.Merge(m, src)
+}
+func (m *ExternalConversionSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_ExternalConversionSourceEnum.Size(m)
+}
+func (m *ExternalConversionSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExternalConversionSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExternalConversionSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ExternalConversionSourceEnum_ExternalConversionSource", ExternalConversionSourceEnum_ExternalConversionSource_name, ExternalConversionSourceEnum_ExternalConversionSource_value)
+	proto.RegisterType((*ExternalConversionSourceEnum)(nil), "google.ads.googleads.v3.enums.ExternalConversionSourceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/external_conversion_source.proto", fileDescriptor_b7b39ef7737c2983)
+}
+
+var fileDescriptor_b7b39ef7737c2983 = []byte{
+	// 551 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x6e, 0xd3, 0x30,
+	0x14, 0x66, 0xdd, 0xd8, 0x8f, 0xf7, 0xe7, 0x79, 0x63, 0x1a, 0xb0, 0x0a, 0x6d, 0x0f, 0x90, 0x5c,
+	0xe4, 0x2e, 0x48, 0x48, 0x4e, 0xe2, 0x16, 0x6b, 0x59, 0x6c, 0xd9, 0x6e, 0xab, 0xa2, 0x4a, 0x56,
+	0x58, 0xa3, 0xa8, 0xd2, 0x1a, 0x57, 0x4d, 0x5b, 0x71, 0xc9, 0xb3, 0x70, 0xc9, 0xa3, 0xf0, 0x12,
+	0xdc, 0x73, 0xc9, 0x13, 0x20, 0x27, 0x6d, 0x29, 0x17, 0xe5, 0xc6, 0x3a, 0x3f, 0xdf, 0x39, 0xdf,
+	0x77, 0xac, 0x0f, 0x7c, 0xc8, 0x8d, 0xc9, 0x9f, 0x33, 0x37, 0x1d, 0x96, 0x6e, 0x1d, 0xda, 0x68,
+	0xe1, 0xb9, 0x59, 0x31, 0x1f, 0x97, 0x6e, 0xf6, 0x65, 0x96, 0x4d, 0x8b, 0xf4, 0x59, 0x3f, 0x99,
+	0x62, 0x91, 0x4d, 0xcb, 0x91, 0x29, 0x74, 0x69, 0xe6, 0xd3, 0xa7, 0xcc, 0x99, 0x4c, 0xcd, 0xcc,
+	0xa0, 0x66, 0x3d, 0xe4, 0xa4, 0xc3, 0xd2, 0x59, 0xcf, 0x3b, 0x0b, 0xcf, 0xa9, 0xe6, 0xdf, 0xdc,
+	0xae, 0xd6, 0x4f, 0x46, 0x6e, 0x5a, 0x14, 0x66, 0x96, 0xce, 0x46, 0xa6, 0x28, 0xeb, 0xe1, 0xfb,
+	0xaf, 0x7b, 0xe0, 0x96, 0x2c, 0x19, 0xc2, 0x35, 0x81, 0xac, 0xf6, 0x93, 0x62, 0x3e, 0xbe, 0xff,
+	0xb9, 0x0b, 0x6e, 0xb6, 0x01, 0xd0, 0x39, 0x38, 0xee, 0x24, 0x92, 0x93, 0x90, 0xb6, 0x28, 0x89,
+	0xe0, 0x0b, 0x74, 0x0c, 0x0e, 0x3a, 0xc9, 0x43, 0xc2, 0x7a, 0x09, 0xdc, 0xb1, 0x49, 0x8f, 0x04,
+	0x1c, 0xb7, 0x09, 0x6c, 0xa0, 0x53, 0x70, 0x84, 0x13, 0x1c, 0xf7, 0x15, 0x0d, 0x25, 0xdc, 0x45,
+	0x00, 0xec, 0x77, 0x78, 0xcc, 0x70, 0x04, 0xf7, 0xd0, 0x25, 0x38, 0xc7, 0x91, 0x0e, 0x71, 0x1c,
+	0xeb, 0x47, 0xa2, 0x84, 0x05, 0xbc, 0x44, 0x37, 0xe0, 0xaa, 0x47, 0x02, 0x49, 0x15, 0xf9, 0xb7,
+	0xb3, 0x8f, 0x20, 0x38, 0x91, 0x8a, 0x09, 0xa2, 0xbb, 0x54, 0x52, 0x25, 0xe1, 0x01, 0x42, 0xe0,
+	0x0c, 0x27, 0x91, 0x60, 0x34, 0xd2, 0x34, 0xd1, 0x98, 0x73, 0x78, 0x88, 0xce, 0x00, 0xa0, 0x4c,
+	0xae, 0xf2, 0x23, 0x8b, 0xb1, 0x79, 0x8b, 0x0a, 0xa9, 0x34, 0xe3, 0x24, 0x81, 0xa0, 0x22, 0xe6,
+	0x5c, 0x6f, 0x9e, 0x70, 0x8c, 0xae, 0x01, 0x5a, 0x2d, 0xdb, 0x00, 0x9f, 0x58, 0xda, 0x5a, 0x71,
+	0xa5, 0x47, 0xc2, 0x53, 0x74, 0x02, 0x0e, 0x5b, 0x54, 0x90, 0x00, 0x4b, 0x02, 0xcf, 0xd0, 0x05,
+	0x38, 0x0d, 0x63, 0x1a, 0x3e, 0x68, 0xc5, 0x2a, 0x04, 0x3c, 0xb7, 0x1a, 0x24, 0x8e, 0x89, 0x6c,
+	0x31, 0x11, 0x12, 0x08, 0x2d, 0x5f, 0xad, 0xbc, 0xaa, 0xea, 0x50, 0x3c, 0xc2, 0x0b, 0xf4, 0x0e,
+	0xbc, 0xdd, 0x2c, 0x72, 0xdc, 0x7f, 0x24, 0x89, 0xd2, 0x09, 0x51, 0x3d, 0x26, 0x1e, 0x20, 0xb2,
+	0x9f, 0xdc, 0x66, 0xac, 0x1d, 0x13, 0xcd, 0x63, 0xdc, 0x87, 0x97, 0xa8, 0x09, 0x5e, 0xab, 0x8f,
+	0x54, 0x44, 0x9a, 0x63, 0xa1, 0xfa, 0xf6, 0x3e, 0xfd, 0xf7, 0x6b, 0xaf, 0xec, 0x01, 0x4b, 0x3c,
+	0x56, 0x4a, 0xd0, 0xa0, 0xa3, 0x28, 0x4b, 0xe0, 0x2b, 0x5b, 0xdf, 0x24, 0x8a, 0xa8, 0x20, 0xa1,
+	0x82, 0xd7, 0xc1, 0xef, 0x1d, 0x70, 0xf7, 0x64, 0xc6, 0xce, 0x7f, 0x6d, 0x14, 0x34, 0xb7, 0x99,
+	0x80, 0x5b, 0x1f, 0xf1, 0x9d, 0x4f, 0xc1, 0x72, 0x3e, 0x37, 0xcf, 0x69, 0x91, 0x3b, 0x66, 0x9a,
+	0xbb, 0x79, 0x56, 0x54, 0x2e, 0x5b, 0xd9, 0x7a, 0x32, 0x2a, 0xb7, 0xb8, 0xfc, 0x7d, 0xf5, 0x7e,
+	0x6b, 0xec, 0xb6, 0x31, 0xfe, 0xde, 0x68, 0xb6, 0xeb, 0x55, 0x78, 0x58, 0x3a, 0x75, 0x68, 0xa3,
+	0xae, 0xe7, 0x58, 0x47, 0x96, 0x3f, 0x56, 0xfd, 0x01, 0x1e, 0x96, 0x83, 0x75, 0x7f, 0xd0, 0xf5,
+	0x06, 0x55, 0xff, 0x57, 0xe3, 0xae, 0x2e, 0xfa, 0x3e, 0x1e, 0x96, 0xbe, 0xbf, 0x46, 0xf8, 0x7e,
+	0xd7, 0xf3, 0xfd, 0x0a, 0xf3, 0x79, 0xbf, 0x12, 0xe6, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0x93,
+	0x89, 0xa5, 0x1b, 0x7d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_attribute_type.pb.go b/googleapis/ads/googleads/v3/enums/feed_attribute_type.pb.go
new file mode 100644
index 0000000..fce71bd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_attribute_type.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_attribute_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible data types for a feed attribute.
+type FeedAttributeTypeEnum_FeedAttributeType int32
+
+const (
+	// Not specified.
+	FeedAttributeTypeEnum_UNSPECIFIED FeedAttributeTypeEnum_FeedAttributeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedAttributeTypeEnum_UNKNOWN FeedAttributeTypeEnum_FeedAttributeType = 1
+	// Int64.
+	FeedAttributeTypeEnum_INT64 FeedAttributeTypeEnum_FeedAttributeType = 2
+	// Double.
+	FeedAttributeTypeEnum_DOUBLE FeedAttributeTypeEnum_FeedAttributeType = 3
+	// String.
+	FeedAttributeTypeEnum_STRING FeedAttributeTypeEnum_FeedAttributeType = 4
+	// Boolean.
+	FeedAttributeTypeEnum_BOOLEAN FeedAttributeTypeEnum_FeedAttributeType = 5
+	// Url.
+	FeedAttributeTypeEnum_URL FeedAttributeTypeEnum_FeedAttributeType = 6
+	// Datetime.
+	FeedAttributeTypeEnum_DATE_TIME FeedAttributeTypeEnum_FeedAttributeType = 7
+	// Int64 list.
+	FeedAttributeTypeEnum_INT64_LIST FeedAttributeTypeEnum_FeedAttributeType = 8
+	// Double (8 bytes) list.
+	FeedAttributeTypeEnum_DOUBLE_LIST FeedAttributeTypeEnum_FeedAttributeType = 9
+	// String list.
+	FeedAttributeTypeEnum_STRING_LIST FeedAttributeTypeEnum_FeedAttributeType = 10
+	// Boolean list.
+	FeedAttributeTypeEnum_BOOLEAN_LIST FeedAttributeTypeEnum_FeedAttributeType = 11
+	// Url list.
+	FeedAttributeTypeEnum_URL_LIST FeedAttributeTypeEnum_FeedAttributeType = 12
+	// Datetime list.
+	FeedAttributeTypeEnum_DATE_TIME_LIST FeedAttributeTypeEnum_FeedAttributeType = 13
+	// Price.
+	FeedAttributeTypeEnum_PRICE FeedAttributeTypeEnum_FeedAttributeType = 14
+)
+
+var FeedAttributeTypeEnum_FeedAttributeType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INT64",
+	3:  "DOUBLE",
+	4:  "STRING",
+	5:  "BOOLEAN",
+	6:  "URL",
+	7:  "DATE_TIME",
+	8:  "INT64_LIST",
+	9:  "DOUBLE_LIST",
+	10: "STRING_LIST",
+	11: "BOOLEAN_LIST",
+	12: "URL_LIST",
+	13: "DATE_TIME_LIST",
+	14: "PRICE",
+}
+
+var FeedAttributeTypeEnum_FeedAttributeType_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"INT64":          2,
+	"DOUBLE":         3,
+	"STRING":         4,
+	"BOOLEAN":        5,
+	"URL":            6,
+	"DATE_TIME":      7,
+	"INT64_LIST":     8,
+	"DOUBLE_LIST":    9,
+	"STRING_LIST":    10,
+	"BOOLEAN_LIST":   11,
+	"URL_LIST":       12,
+	"DATE_TIME_LIST": 13,
+	"PRICE":          14,
+}
+
+func (x FeedAttributeTypeEnum_FeedAttributeType) String() string {
+	return proto.EnumName(FeedAttributeTypeEnum_FeedAttributeType_name, int32(x))
+}
+
+func (FeedAttributeTypeEnum_FeedAttributeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7ad66d0f530d8c45, []int{0, 0}
+}
+
+// Container for enum describing possible data types for a feed attribute.
+type FeedAttributeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedAttributeTypeEnum) Reset()         { *m = FeedAttributeTypeEnum{} }
+func (m *FeedAttributeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeTypeEnum) ProtoMessage()    {}
+func (*FeedAttributeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ad66d0f530d8c45, []int{0}
+}
+
+func (m *FeedAttributeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Unmarshal(m, b)
+}
+func (m *FeedAttributeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedAttributeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeTypeEnum.Merge(m, src)
+}
+func (m *FeedAttributeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Size(m)
+}
+func (m *FeedAttributeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedAttributeTypeEnum_FeedAttributeType", FeedAttributeTypeEnum_FeedAttributeType_name, FeedAttributeTypeEnum_FeedAttributeType_value)
+	proto.RegisterType((*FeedAttributeTypeEnum)(nil), "google.ads.googleads.v3.enums.FeedAttributeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_attribute_type.proto", fileDescriptor_7ad66d0f530d8c45)
+}
+
+var fileDescriptor_7ad66d0f530d8c45 = []byte{
+	// 406 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x6e, 0xd3, 0x40,
+	0x14, 0x24, 0x0e, 0x4d, 0x9a, 0x97, 0x34, 0x2c, 0x2b, 0xc1, 0x01, 0xd1, 0x43, 0xfb, 0x01, 0xeb,
+	0x83, 0x11, 0x48, 0xcb, 0x69, 0xdd, 0x6c, 0x23, 0x0b, 0xe3, 0x58, 0x8e, 0x1d, 0x24, 0x64, 0xc9,
+	0x72, 0xf1, 0x62, 0x59, 0x6a, 0xbc, 0x56, 0xd6, 0xa9, 0xd4, 0x3b, 0x5f, 0xc2, 0x91, 0x4f, 0xe1,
+	0x53, 0xca, 0x4f, 0xa0, 0xf5, 0xd6, 0xbe, 0x54, 0x70, 0xb1, 0xc6, 0xf3, 0x66, 0x66, 0x9f, 0xe6,
+	0xc1, 0x87, 0x52, 0xca, 0xf2, 0x56, 0xd8, 0x79, 0xa1, 0x6c, 0x03, 0x35, 0xba, 0x73, 0x6c, 0x51,
+	0x1f, 0xf7, 0xca, 0xfe, 0x2e, 0x44, 0x91, 0xe5, 0x6d, 0x7b, 0xa8, 0x6e, 0x8e, 0xad, 0xc8, 0xda,
+	0xfb, 0x46, 0x90, 0xe6, 0x20, 0x5b, 0x89, 0xcf, 0x8d, 0x9a, 0xe4, 0x85, 0x22, 0x83, 0x91, 0xdc,
+	0x39, 0xa4, 0x33, 0xbe, 0x79, 0xdb, 0xe7, 0x36, 0x95, 0x9d, 0xd7, 0xb5, 0x6c, 0xf3, 0xb6, 0x92,
+	0xb5, 0x32, 0xe6, 0xcb, 0x1f, 0x16, 0xbc, 0xba, 0x16, 0xa2, 0x60, 0x7d, 0x72, 0x7c, 0xdf, 0x08,
+	0x5e, 0x1f, 0xf7, 0x97, 0x0f, 0x23, 0x78, 0xf9, 0x64, 0x82, 0x5f, 0xc0, 0x3c, 0x09, 0xb6, 0x21,
+	0xbf, 0xf2, 0xae, 0x3d, 0xbe, 0x42, 0xcf, 0xf0, 0x1c, 0xa6, 0x49, 0xf0, 0x29, 0xd8, 0x7c, 0x09,
+	0xd0, 0x08, 0xcf, 0xe0, 0xc4, 0x0b, 0xe2, 0xf7, 0xef, 0x90, 0x85, 0x01, 0x26, 0xab, 0x4d, 0xe2,
+	0xfa, 0x1c, 0x8d, 0x35, 0xde, 0xc6, 0x91, 0x17, 0xac, 0xd1, 0x73, 0xad, 0x77, 0x37, 0x1b, 0x9f,
+	0xb3, 0x00, 0x9d, 0xe0, 0x29, 0x8c, 0x93, 0xc8, 0x47, 0x13, 0x7c, 0x06, 0xb3, 0x15, 0x8b, 0x79,
+	0x16, 0x7b, 0x9f, 0x39, 0x9a, 0xe2, 0x25, 0x40, 0x97, 0x93, 0xf9, 0xde, 0x36, 0x46, 0xa7, 0xfa,
+	0x55, 0x13, 0x66, 0x88, 0x99, 0x26, 0x4c, 0xa2, 0x21, 0x00, 0x23, 0x58, 0x3c, 0xc6, 0x1a, 0x66,
+	0x8e, 0x17, 0x70, 0x9a, 0x44, 0xbe, 0xf9, 0x5b, 0x60, 0x0c, 0xcb, 0xe1, 0x01, 0xc3, 0x9d, 0xe9,
+	0x6d, 0xc3, 0xc8, 0xbb, 0xe2, 0x68, 0xe9, 0xfe, 0x19, 0xc1, 0xc5, 0x37, 0xb9, 0x27, 0xff, 0xad,
+	0xd2, 0x7d, 0xfd, 0xa4, 0x8f, 0x50, 0x97, 0x18, 0x8e, 0xbe, 0xba, 0x8f, 0xc6, 0x52, 0xde, 0xe6,
+	0x75, 0x49, 0xe4, 0xa1, 0xb4, 0x4b, 0x51, 0x77, 0x15, 0xf7, 0xc7, 0x6c, 0x2a, 0xf5, 0x8f, 0xdb,
+	0x7e, 0xec, 0xbe, 0x3f, 0xad, 0xf1, 0x9a, 0xb1, 0x5f, 0xd6, 0xf9, 0xda, 0x44, 0xb1, 0x42, 0x11,
+	0x03, 0x35, 0xda, 0x39, 0x44, 0x5f, 0x45, 0xfd, 0xee, 0xe7, 0x29, 0x2b, 0x54, 0x3a, 0xcc, 0xd3,
+	0x9d, 0x93, 0x76, 0xf3, 0x07, 0xeb, 0xc2, 0x90, 0x94, 0xb2, 0x42, 0x51, 0x3a, 0x28, 0x28, 0xdd,
+	0x39, 0x94, 0x76, 0x9a, 0x9b, 0x49, 0xb7, 0x98, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, 0x52, 0x2c,
+	0x81, 0xd4, 0x73, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_quality_approval_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_quality_approval_status.pb.go
new file mode 100644
index 0000000..d952edd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_quality_approval_status.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_quality_approval_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible quality evaluation approval statuses of a feed item.
+type FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus int32
+
+const (
+	// No value has been specified.
+	FeedItemQualityApprovalStatusEnum_UNSPECIFIED FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemQualityApprovalStatusEnum_UNKNOWN FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus = 1
+	// Meets all quality expectations.
+	FeedItemQualityApprovalStatusEnum_APPROVED FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus = 2
+	// Does not meet some quality expectations. The specific reason is found in
+	// the quality_disapproval_reasons field.
+	FeedItemQualityApprovalStatusEnum_DISAPPROVED FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus = 3
+)
+
+var FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "APPROVED",
+	3: "DISAPPROVED",
+}
+
+var FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"APPROVED":    2,
+	"DISAPPROVED": 3,
+}
+
+func (x FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus) String() string {
+	return proto.EnumName(FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus_name, int32(x))
+}
+
+func (FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fc4171234ccf44c4, []int{0, 0}
+}
+
+// Container for enum describing possible quality evaluation approval statuses
+// of a feed item.
+type FeedItemQualityApprovalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemQualityApprovalStatusEnum) Reset()         { *m = FeedItemQualityApprovalStatusEnum{} }
+func (m *FeedItemQualityApprovalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemQualityApprovalStatusEnum) ProtoMessage()    {}
+func (*FeedItemQualityApprovalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc4171234ccf44c4, []int{0}
+}
+
+func (m *FeedItemQualityApprovalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemQualityApprovalStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedItemQualityApprovalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemQualityApprovalStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemQualityApprovalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemQualityApprovalStatusEnum.Merge(m, src)
+}
+func (m *FeedItemQualityApprovalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemQualityApprovalStatusEnum.Size(m)
+}
+func (m *FeedItemQualityApprovalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemQualityApprovalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemQualityApprovalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus", FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus_name, FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus_value)
+	proto.RegisterType((*FeedItemQualityApprovalStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedItemQualityApprovalStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_quality_approval_status.proto", fileDescriptor_fc4171234ccf44c4)
+}
+
+var fileDescriptor_fc4171234ccf44c4 = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0xb5, 0x1d, 0xa8, 0x64, 0x82, 0xa3, 0x47, 0x71, 0x87, 0xed, 0x07, 0xa4, 0x87, 0xdc, 0xe2,
+	0x29, 0x73, 0xdd, 0x28, 0x42, 0x57, 0x1d, 0xab, 0x20, 0x85, 0x12, 0x4d, 0x0c, 0x85, 0x36, 0xa9,
+	0x4b, 0x3a, 0xf0, 0xe8, 0x5f, 0xf1, 0xe8, 0x4f, 0xf1, 0xa7, 0xf8, 0x07, 0xbc, 0x4a, 0x93, 0xad,
+	0x37, 0x77, 0x09, 0x8f, 0x7c, 0xef, 0x7b, 0xef, 0x7b, 0x0f, 0x44, 0x42, 0x29, 0x51, 0xf1, 0x90,
+	0x32, 0x1d, 0x3a, 0xd8, 0xa1, 0x1d, 0x0a, 0xb9, 0x6c, 0x6b, 0x1d, 0xbe, 0x72, 0xce, 0x8a, 0xd2,
+	0xf0, 0xba, 0x78, 0x6b, 0x69, 0x55, 0x9a, 0xf7, 0x82, 0x36, 0xcd, 0x56, 0xed, 0x68, 0x55, 0x68,
+	0x43, 0x4d, 0xab, 0x61, 0xb3, 0x55, 0x46, 0x05, 0x63, 0xb7, 0x0b, 0x29, 0xd3, 0xb0, 0x97, 0x81,
+	0x3b, 0x04, 0xad, 0xcc, 0xd5, 0xf5, 0xc1, 0xa5, 0x29, 0x43, 0x2a, 0xa5, 0x32, 0xd4, 0x94, 0x4a,
+	0xee, 0x97, 0xa7, 0x1f, 0x1e, 0x98, 0x2c, 0x38, 0x67, 0xb1, 0xe1, 0xf5, 0xbd, 0xb3, 0x21, 0x7b,
+	0x97, 0xb5, 0x35, 0x89, 0x64, 0x5b, 0x4f, 0x73, 0x30, 0x3e, 0x4a, 0x0a, 0x2e, 0xc1, 0x70, 0x93,
+	0xac, 0xd3, 0xe8, 0x36, 0x5e, 0xc4, 0xd1, 0x7c, 0x74, 0x12, 0x0c, 0xc1, 0xd9, 0x26, 0xb9, 0x4b,
+	0x56, 0x8f, 0xc9, 0xc8, 0x0b, 0x2e, 0xc0, 0x39, 0x49, 0xd3, 0x87, 0x55, 0x16, 0xcd, 0x47, 0x7e,
+	0xc7, 0x9d, 0xc7, 0xeb, 0xfe, 0x63, 0x30, 0xfb, 0xf5, 0xc0, 0xe4, 0x45, 0xd5, 0xf0, 0x68, 0x8e,
+	0xd9, 0xf4, 0xe8, 0x05, 0x69, 0x97, 0x26, 0xf5, 0x9e, 0x66, 0x7b, 0x11, 0xa1, 0x2a, 0x2a, 0x05,
+	0x54, 0x5b, 0x11, 0x0a, 0x2e, 0x6d, 0xd6, 0x43, 0xc7, 0x4d, 0xa9, 0xff, 0xa9, 0xfc, 0xc6, 0xbe,
+	0x9f, 0xfe, 0x60, 0x49, 0xc8, 0x97, 0x3f, 0x5e, 0x3a, 0x29, 0xc2, 0x34, 0x74, 0xb0, 0x43, 0x19,
+	0x82, 0x5d, 0x25, 0xfa, 0xfb, 0x30, 0xcf, 0x09, 0xd3, 0x79, 0x3f, 0xcf, 0x33, 0x94, 0xdb, 0xf9,
+	0x8f, 0x3f, 0x71, 0x9f, 0x18, 0x13, 0xa6, 0x31, 0xee, 0x19, 0x18, 0x67, 0x08, 0x63, 0xcb, 0x79,
+	0x3e, 0xb5, 0x87, 0xa1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x71, 0x05, 0xda, 0x0a, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_quality_disapproval_reason.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_quality_disapproval_reason.pb.go
new file mode 100644
index 0000000..56b0f9f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_quality_disapproval_reason.pb.go
@@ -0,0 +1,209 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_quality_disapproval_reason.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible quality evaluation disapproval reasons of a feed item.
+type FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason int32
+
+const (
+	// No value has been specified.
+	FeedItemQualityDisapprovalReasonEnum_UNSPECIFIED FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemQualityDisapprovalReasonEnum_UNKNOWN FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 1
+	// Price contains repetitive headers.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_REPETITIVE_HEADERS FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 2
+	// Price contains repetitive description.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_REPETITIVE_DESCRIPTION FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 3
+	// Price contains inconsistent items.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_INCONSISTENT_ROWS FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 4
+	// Price contains qualifiers in description.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_DESCRIPTION_HAS_PRICE_QUALIFIERS FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 5
+	// Price contains an unsupported language.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_UNSUPPORTED_LANGUAGE FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 6
+	// Price item header is not relevant to the price type.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_HEADER_TABLE_TYPE_MISMATCH FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 7
+	// Price item header has promotional text.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_HEADER_HAS_PROMOTIONAL_TEXT FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 8
+	// Price item description is not relevant to the item header.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_DESCRIPTION_NOT_RELEVANT FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 9
+	// Price item description contains promotional text.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_DESCRIPTION_HAS_PROMOTIONAL_TEXT FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 10
+	// Price item header and description are repetitive.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_HEADER_DESCRIPTION_REPETITIVE FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 11
+	// Price item is in a foreign language, nonsense, or can't be rated.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_UNRATEABLE FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 12
+	// Price item price is invalid or inaccurate.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_PRICE_INVALID FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 13
+	// Price item URL is invalid or irrelevant.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_TABLE_ROW_URL_INVALID FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 14
+	// Price item header or description has price.
+	FeedItemQualityDisapprovalReasonEnum_PRICE_HEADER_OR_DESCRIPTION_HAS_PRICE FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 15
+	// Structured snippet values do not match the header.
+	FeedItemQualityDisapprovalReasonEnum_STRUCTURED_SNIPPETS_HEADER_POLICY_VIOLATED FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 16
+	// Structured snippet values are repeated.
+	FeedItemQualityDisapprovalReasonEnum_STRUCTURED_SNIPPETS_REPEATED_VALUES FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 17
+	// Structured snippet values violate editorial guidelines like punctuation.
+	FeedItemQualityDisapprovalReasonEnum_STRUCTURED_SNIPPETS_EDITORIAL_GUIDELINES FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 18
+	// Structured snippet contain promotional text.
+	FeedItemQualityDisapprovalReasonEnum_STRUCTURED_SNIPPETS_HAS_PROMOTIONAL_TEXT FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason = 19
+)
+
+var FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PRICE_TABLE_REPETITIVE_HEADERS",
+	3:  "PRICE_TABLE_REPETITIVE_DESCRIPTION",
+	4:  "PRICE_TABLE_INCONSISTENT_ROWS",
+	5:  "PRICE_DESCRIPTION_HAS_PRICE_QUALIFIERS",
+	6:  "PRICE_UNSUPPORTED_LANGUAGE",
+	7:  "PRICE_TABLE_ROW_HEADER_TABLE_TYPE_MISMATCH",
+	8:  "PRICE_TABLE_ROW_HEADER_HAS_PROMOTIONAL_TEXT",
+	9:  "PRICE_TABLE_ROW_DESCRIPTION_NOT_RELEVANT",
+	10: "PRICE_TABLE_ROW_DESCRIPTION_HAS_PROMOTIONAL_TEXT",
+	11: "PRICE_TABLE_ROW_HEADER_DESCRIPTION_REPETITIVE",
+	12: "PRICE_TABLE_ROW_UNRATEABLE",
+	13: "PRICE_TABLE_ROW_PRICE_INVALID",
+	14: "PRICE_TABLE_ROW_URL_INVALID",
+	15: "PRICE_HEADER_OR_DESCRIPTION_HAS_PRICE",
+	16: "STRUCTURED_SNIPPETS_HEADER_POLICY_VIOLATED",
+	17: "STRUCTURED_SNIPPETS_REPEATED_VALUES",
+	18: "STRUCTURED_SNIPPETS_EDITORIAL_GUIDELINES",
+	19: "STRUCTURED_SNIPPETS_HAS_PROMOTIONAL_TEXT",
+}
+
+var FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason_value = map[string]int32{
+	"UNSPECIFIED":                                      0,
+	"UNKNOWN":                                          1,
+	"PRICE_TABLE_REPETITIVE_HEADERS":                   2,
+	"PRICE_TABLE_REPETITIVE_DESCRIPTION":               3,
+	"PRICE_TABLE_INCONSISTENT_ROWS":                    4,
+	"PRICE_DESCRIPTION_HAS_PRICE_QUALIFIERS":           5,
+	"PRICE_UNSUPPORTED_LANGUAGE":                       6,
+	"PRICE_TABLE_ROW_HEADER_TABLE_TYPE_MISMATCH":       7,
+	"PRICE_TABLE_ROW_HEADER_HAS_PROMOTIONAL_TEXT":      8,
+	"PRICE_TABLE_ROW_DESCRIPTION_NOT_RELEVANT":         9,
+	"PRICE_TABLE_ROW_DESCRIPTION_HAS_PROMOTIONAL_TEXT": 10,
+	"PRICE_TABLE_ROW_HEADER_DESCRIPTION_REPETITIVE":    11,
+	"PRICE_TABLE_ROW_UNRATEABLE":                       12,
+	"PRICE_TABLE_ROW_PRICE_INVALID":                    13,
+	"PRICE_TABLE_ROW_URL_INVALID":                      14,
+	"PRICE_HEADER_OR_DESCRIPTION_HAS_PRICE":            15,
+	"STRUCTURED_SNIPPETS_HEADER_POLICY_VIOLATED":       16,
+	"STRUCTURED_SNIPPETS_REPEATED_VALUES":              17,
+	"STRUCTURED_SNIPPETS_EDITORIAL_GUIDELINES":         18,
+	"STRUCTURED_SNIPPETS_HAS_PROMOTIONAL_TEXT":         19,
+}
+
+func (x FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason) String() string {
+	return proto.EnumName(FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason_name, int32(x))
+}
+
+func (FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_f4af24b544d16aee, []int{0, 0}
+}
+
+// Container for enum describing possible quality evaluation disapproval reasons
+// of a feed item.
+type FeedItemQualityDisapprovalReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemQualityDisapprovalReasonEnum) Reset()         { *m = FeedItemQualityDisapprovalReasonEnum{} }
+func (m *FeedItemQualityDisapprovalReasonEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemQualityDisapprovalReasonEnum) ProtoMessage()    {}
+func (*FeedItemQualityDisapprovalReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f4af24b544d16aee, []int{0}
+}
+
+func (m *FeedItemQualityDisapprovalReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum.Unmarshal(m, b)
+}
+func (m *FeedItemQualityDisapprovalReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemQualityDisapprovalReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum.Merge(m, src)
+}
+func (m *FeedItemQualityDisapprovalReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum.Size(m)
+}
+func (m *FeedItemQualityDisapprovalReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemQualityDisapprovalReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason", FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason_name, FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason_value)
+	proto.RegisterType((*FeedItemQualityDisapprovalReasonEnum)(nil), "google.ads.googleads.v3.enums.FeedItemQualityDisapprovalReasonEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_quality_disapproval_reason.proto", fileDescriptor_f4af24b544d16aee)
+}
+
+var fileDescriptor_f4af24b544d16aee = []byte{
+	// 631 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcd, 0x72, 0xd3, 0x30,
+	0x10, 0xc7, 0x69, 0x0a, 0x29, 0xa8, 0x40, 0x85, 0xb8, 0x15, 0x5a, 0x68, 0xa0, 0x05, 0x0a, 0xd8,
+	0x30, 0xe1, 0x64, 0x4e, 0x8a, 0xad, 0x26, 0x1a, 0x5c, 0xd9, 0x95, 0x64, 0x97, 0x32, 0x99, 0xd1,
+	0x18, 0x6c, 0x32, 0x99, 0x49, 0xec, 0x10, 0xa7, 0x9d, 0xe1, 0x75, 0x38, 0xf2, 0x02, 0xbc, 0x03,
+	0x4f, 0xc1, 0x99, 0x47, 0xe0, 0xc4, 0xd8, 0xca, 0x17, 0x25, 0x69, 0x2f, 0x9e, 0xd5, 0xee, 0x6f,
+	0x77, 0xff, 0x5e, 0xcd, 0x0a, 0xb4, 0x3a, 0x59, 0xd6, 0xe9, 0x25, 0x66, 0x14, 0xe7, 0xa6, 0x36,
+	0x0b, 0xeb, 0xac, 0x6e, 0x26, 0xe9, 0x69, 0x3f, 0x37, 0x3f, 0x27, 0x49, 0xac, 0xba, 0xa3, 0xa4,
+	0xaf, 0xbe, 0x9c, 0x46, 0xbd, 0xee, 0xe8, 0xab, 0x8a, 0xbb, 0x79, 0x34, 0x18, 0x0c, 0xb3, 0xb3,
+	0xa8, 0xa7, 0x86, 0x49, 0x94, 0x67, 0xa9, 0x31, 0x18, 0x66, 0xa3, 0x0c, 0x6d, 0xe9, 0x74, 0x23,
+	0x8a, 0x73, 0x63, 0x5a, 0xc9, 0x38, 0xab, 0x1b, 0x65, 0xa5, 0xcd, 0xfb, 0x93, 0x46, 0x83, 0xae,
+	0x19, 0xa5, 0x69, 0x36, 0x8a, 0x46, 0xdd, 0x2c, 0xcd, 0x75, 0x72, 0xed, 0x57, 0x15, 0x3c, 0x3e,
+	0x48, 0x92, 0x98, 0x8e, 0x92, 0xfe, 0x91, 0xee, 0xe4, 0xcc, 0x1a, 0xf1, 0xb2, 0x0f, 0x49, 0x4f,
+	0xfb, 0xb5, 0x1f, 0x55, 0xf0, 0xf0, 0x32, 0x10, 0x6d, 0x80, 0xf5, 0x80, 0x09, 0x9f, 0xd8, 0xf4,
+	0x80, 0x12, 0x07, 0x5e, 0x41, 0xeb, 0x60, 0x2d, 0x60, 0xef, 0x98, 0x77, 0xcc, 0xe0, 0x0a, 0xaa,
+	0x81, 0x6d, 0x9f, 0x53, 0x9b, 0x28, 0x89, 0x1b, 0x2e, 0x51, 0x9c, 0xf8, 0x44, 0x52, 0x49, 0x43,
+	0xa2, 0x5a, 0x04, 0x3b, 0x84, 0x0b, 0x58, 0x41, 0x7b, 0xa0, 0xb6, 0x84, 0x71, 0x88, 0xb0, 0x39,
+	0xf5, 0x25, 0xf5, 0x18, 0x5c, 0x45, 0x3b, 0x60, 0x6b, 0x9e, 0xa3, 0xcc, 0xf6, 0x98, 0xa0, 0x42,
+	0x12, 0x26, 0x15, 0xf7, 0x8e, 0x05, 0xbc, 0x8a, 0xf6, 0xc1, 0x9e, 0x46, 0xe6, 0x32, 0x55, 0x0b,
+	0x0b, 0xa5, 0xbd, 0x47, 0x01, 0x76, 0x0b, 0x99, 0x5c, 0xc0, 0x6b, 0x68, 0x1b, 0x6c, 0x6a, 0x6f,
+	0xc0, 0x44, 0xe0, 0xfb, 0x1e, 0x97, 0xc4, 0x51, 0x2e, 0x66, 0xcd, 0x00, 0x37, 0x09, 0xac, 0x22,
+	0x03, 0xec, 0xff, 0x23, 0xcb, 0x3b, 0x1e, 0x6b, 0x1e, 0x3b, 0xe4, 0x89, 0x4f, 0xd4, 0x21, 0x15,
+	0x87, 0x58, 0xda, 0x2d, 0xb8, 0x86, 0x4c, 0xf0, 0x7c, 0x09, 0xaf, 0x05, 0x78, 0x87, 0x5e, 0x21,
+	0x07, 0xbb, 0x4a, 0x92, 0xf7, 0x12, 0x5e, 0x47, 0x2f, 0xc0, 0xd3, 0xf3, 0x09, 0xf3, 0xb2, 0x99,
+	0x27, 0x15, 0x27, 0x2e, 0x09, 0x31, 0x93, 0xf0, 0x06, 0x7a, 0x03, 0x5e, 0x5d, 0x44, 0x2f, 0xec,
+	0x01, 0xd0, 0x6b, 0xf0, 0x72, 0x89, 0xa8, 0xf9, 0xe4, 0xd9, 0xc8, 0xe1, 0xfa, 0x6c, 0x2e, 0xb3,
+	0x94, 0x80, 0x71, 0x2c, 0x49, 0x71, 0x84, 0x37, 0xcf, 0x5f, 0x43, 0x11, 0xd7, 0x67, 0xca, 0x42,
+	0xec, 0x52, 0x07, 0xde, 0x42, 0x0f, 0xc0, 0xbd, 0xff, 0x4a, 0x70, 0x77, 0x0a, 0xdc, 0x46, 0xcf,
+	0xc0, 0xae, 0x06, 0xc6, 0x62, 0x3c, 0xbe, 0xf8, 0xc6, 0xe0, 0x46, 0x71, 0x0d, 0x42, 0xf2, 0xc0,
+	0x96, 0x01, 0x27, 0x8e, 0x12, 0x8c, 0xfa, 0x3e, 0x91, 0x62, 0x92, 0xe8, 0x7b, 0x2e, 0xb5, 0x4f,
+	0x54, 0x48, 0x3d, 0x17, 0x4b, 0xe2, 0x40, 0x88, 0x9e, 0x80, 0x47, 0x8b, 0xf8, 0xe2, 0x17, 0x0b,
+	0x42, 0x85, 0xd8, 0x0d, 0x88, 0x80, 0x77, 0x8a, 0xf1, 0x2f, 0x02, 0x89, 0x43, 0xa5, 0xc7, 0x29,
+	0x76, 0x55, 0x33, 0xa0, 0x0e, 0x71, 0x29, 0x23, 0x02, 0xa2, 0x65, 0xf4, 0xc2, 0xb1, 0xdf, 0x6d,
+	0xfc, 0x59, 0x01, 0x3b, 0x9f, 0xb2, 0xbe, 0x71, 0xe1, 0x9a, 0x36, 0x76, 0x2f, 0x5b, 0x2e, 0xbf,
+	0xd8, 0x57, 0x7f, 0xe5, 0x43, 0x63, 0x5c, 0xa7, 0x93, 0xf5, 0xa2, 0xb4, 0x63, 0x64, 0xc3, 0x8e,
+	0xd9, 0x49, 0xd2, 0x72, 0x9b, 0x27, 0x0f, 0xc9, 0xa0, 0x9b, 0x2f, 0x79, 0x57, 0xde, 0x96, 0xdf,
+	0x6f, 0x95, 0xd5, 0x26, 0xc6, 0xdf, 0x2b, 0x5b, 0x4d, 0x5d, 0x0a, 0xc7, 0xb9, 0xa1, 0xcd, 0xc2,
+	0x0a, 0xeb, 0x46, 0xb1, 0xf1, 0xf9, 0xcf, 0x49, 0xbc, 0x8d, 0xe3, 0xbc, 0x3d, 0x8d, 0xb7, 0xc3,
+	0x7a, 0xbb, 0x8c, 0xff, 0xae, 0xec, 0x68, 0xa7, 0x65, 0xe1, 0x38, 0xb7, 0xac, 0x29, 0x61, 0x59,
+	0x61, 0xdd, 0xb2, 0x4a, 0xe6, 0x63, 0xb5, 0x14, 0x56, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xf0,
+	0xc5, 0x88, 0xec, 0xef, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_status.pb.go
new file mode 100644
index 0000000..2b11b48
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a feed item.
+type FeedItemStatusEnum_FeedItemStatus int32
+
+const (
+	// Not specified.
+	FeedItemStatusEnum_UNSPECIFIED FeedItemStatusEnum_FeedItemStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemStatusEnum_UNKNOWN FeedItemStatusEnum_FeedItemStatus = 1
+	// Feed item is enabled.
+	FeedItemStatusEnum_ENABLED FeedItemStatusEnum_FeedItemStatus = 2
+	// Feed item has been removed.
+	FeedItemStatusEnum_REMOVED FeedItemStatusEnum_FeedItemStatus = 3
+)
+
+var FeedItemStatusEnum_FeedItemStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var FeedItemStatusEnum_FeedItemStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedItemStatusEnum_FeedItemStatus) String() string {
+	return proto.EnumName(FeedItemStatusEnum_FeedItemStatus_name, int32(x))
+}
+
+func (FeedItemStatusEnum_FeedItemStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_15b96e530cd06c22, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed item.
+type FeedItemStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemStatusEnum) Reset()         { *m = FeedItemStatusEnum{} }
+func (m *FeedItemStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemStatusEnum) ProtoMessage()    {}
+func (*FeedItemStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15b96e530cd06c22, []int{0}
+}
+
+func (m *FeedItemStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedItemStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemStatusEnum.Merge(m, src)
+}
+func (m *FeedItemStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemStatusEnum.Size(m)
+}
+func (m *FeedItemStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemStatusEnum_FeedItemStatus", FeedItemStatusEnum_FeedItemStatus_name, FeedItemStatusEnum_FeedItemStatus_value)
+	proto.RegisterType((*FeedItemStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedItemStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_status.proto", fileDescriptor_15b96e530cd06c22)
+}
+
+var fileDescriptor_15b96e530cd06c22 = []byte{
+	// 301 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x1d, 0x28, 0x64, 0xa0, 0xa5, 0xde, 0xc4, 0x1d, 0xb6, 0x07, 0x48, 0x0e, 0xf1, 0x14,
+	0x4f, 0xa9, 0xcb, 0xe6, 0x50, 0xbb, 0xe1, 0x58, 0x05, 0x29, 0x8e, 0x68, 0x62, 0x28, 0xac, 0xc9,
+	0x58, 0xb2, 0x3d, 0x90, 0x47, 0x1f, 0xc5, 0x27, 0x11, 0x9f, 0x42, 0x92, 0x6e, 0x85, 0x1d, 0xf4,
+	0x52, 0x7e, 0xdf, 0xf7, 0xfb, 0xd3, 0x5f, 0x3e, 0x70, 0xa5, 0x8c, 0x51, 0x4b, 0x89, 0xb8, 0xb0,
+	0xa8, 0x86, 0x1e, 0x6d, 0x31, 0x92, 0x7a, 0x53, 0x59, 0xf4, 0x2e, 0xa5, 0x58, 0x94, 0x4e, 0x56,
+	0x0b, 0xeb, 0xb8, 0xdb, 0x58, 0xb8, 0x5a, 0x1b, 0x67, 0x92, 0x6e, 0x2d, 0x85, 0x5c, 0x58, 0xd8,
+	0xb8, 0xe0, 0x16, 0xc3, 0xe0, 0xba, 0xb8, 0xdc, 0x87, 0xae, 0x4a, 0xc4, 0xb5, 0x36, 0x8e, 0xbb,
+	0xd2, 0xe8, 0x9d, 0xb9, 0xff, 0x02, 0x92, 0xa1, 0x94, 0x62, 0xec, 0x64, 0x35, 0x0b, 0xa1, 0x4c,
+	0x6f, 0xaa, 0xfe, 0x2d, 0x38, 0x3d, 0xdc, 0x26, 0x67, 0xa0, 0x33, 0xcf, 0x66, 0x53, 0x76, 0x33,
+	0x1e, 0x8e, 0xd9, 0x20, 0x3e, 0x4a, 0x3a, 0xe0, 0x64, 0x9e, 0xdd, 0x65, 0x93, 0xa7, 0x2c, 0x6e,
+	0xf9, 0x81, 0x65, 0x34, 0xbd, 0x67, 0x83, 0x38, 0xf2, 0xc3, 0x23, 0x7b, 0x98, 0xe4, 0x6c, 0x10,
+	0xb7, 0xd3, 0xef, 0x16, 0xe8, 0xbd, 0x99, 0x0a, 0xfe, 0xdb, 0x31, 0x3d, 0x3f, 0xfc, 0xdb, 0xd4,
+	0x57, 0x9b, 0xb6, 0x9e, 0xd3, 0x9d, 0x4b, 0x99, 0x25, 0xd7, 0x0a, 0x9a, 0xb5, 0x42, 0x4a, 0xea,
+	0x50, 0x7c, 0x7f, 0x9f, 0x55, 0x69, 0xff, 0x38, 0xd7, 0x75, 0xf8, 0x7e, 0x44, 0xed, 0x11, 0xa5,
+	0x9f, 0x51, 0x77, 0x54, 0x47, 0x51, 0x61, 0x61, 0x0d, 0x3d, 0xca, 0x31, 0xf4, 0xef, 0xb5, 0x5f,
+	0x7b, 0xbe, 0xa0, 0xc2, 0x16, 0x0d, 0x5f, 0xe4, 0xb8, 0x08, 0xfc, 0x4f, 0xd4, 0xab, 0x97, 0x84,
+	0x50, 0x61, 0x09, 0x69, 0x14, 0x84, 0xe4, 0x98, 0x90, 0xa0, 0x79, 0x3d, 0x0e, 0xc5, 0xf0, 0x6f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x09, 0x71, 0x41, 0xfa, 0xc6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_target_device.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_target_device.pb.go
new file mode 100644
index 0000000..bb9077e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_target_device.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_target_device.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible data types for a feed item target device.
+type FeedItemTargetDeviceEnum_FeedItemTargetDevice int32
+
+const (
+	// Not specified.
+	FeedItemTargetDeviceEnum_UNSPECIFIED FeedItemTargetDeviceEnum_FeedItemTargetDevice = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemTargetDeviceEnum_UNKNOWN FeedItemTargetDeviceEnum_FeedItemTargetDevice = 1
+	// Mobile.
+	FeedItemTargetDeviceEnum_MOBILE FeedItemTargetDeviceEnum_FeedItemTargetDevice = 2
+)
+
+var FeedItemTargetDeviceEnum_FeedItemTargetDevice_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MOBILE",
+}
+
+var FeedItemTargetDeviceEnum_FeedItemTargetDevice_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MOBILE":      2,
+}
+
+func (x FeedItemTargetDeviceEnum_FeedItemTargetDevice) String() string {
+	return proto.EnumName(FeedItemTargetDeviceEnum_FeedItemTargetDevice_name, int32(x))
+}
+
+func (FeedItemTargetDeviceEnum_FeedItemTargetDevice) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_50a0f8cf1952a013, []int{0, 0}
+}
+
+// Container for enum describing possible data types for a feed item target
+// device.
+type FeedItemTargetDeviceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemTargetDeviceEnum) Reset()         { *m = FeedItemTargetDeviceEnum{} }
+func (m *FeedItemTargetDeviceEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTargetDeviceEnum) ProtoMessage()    {}
+func (*FeedItemTargetDeviceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_50a0f8cf1952a013, []int{0}
+}
+
+func (m *FeedItemTargetDeviceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTargetDeviceEnum.Unmarshal(m, b)
+}
+func (m *FeedItemTargetDeviceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTargetDeviceEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTargetDeviceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTargetDeviceEnum.Merge(m, src)
+}
+func (m *FeedItemTargetDeviceEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTargetDeviceEnum.Size(m)
+}
+func (m *FeedItemTargetDeviceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTargetDeviceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTargetDeviceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice", FeedItemTargetDeviceEnum_FeedItemTargetDevice_name, FeedItemTargetDeviceEnum_FeedItemTargetDevice_value)
+	proto.RegisterType((*FeedItemTargetDeviceEnum)(nil), "google.ads.googleads.v3.enums.FeedItemTargetDeviceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_target_device.proto", fileDescriptor_50a0f8cf1952a013)
+}
+
+var fileDescriptor_50a0f8cf1952a013 = []byte{
+	// 304 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0xff, 0xce, 0x0f, 0x15, 0xd2, 0x85, 0x65, 0x70, 0xa1, 0x62, 0x17, 0xed, 0x03, 0x24,
+	0x8b, 0xec, 0xd2, 0x8d, 0x33, 0x76, 0x5a, 0x06, 0x75, 0x5a, 0xd0, 0x56, 0x90, 0x81, 0x12, 0x9b,
+	0x6b, 0x18, 0xe8, 0x24, 0xa5, 0x49, 0xe7, 0x81, 0x5c, 0xfa, 0x28, 0x3e, 0x8a, 0x0b, 0x9f, 0x41,
+	0x26, 0x71, 0x66, 0x55, 0xdd, 0x84, 0x43, 0xce, 0xfd, 0x4e, 0x4e, 0x2e, 0x1a, 0x4b, 0xad, 0xe5,
+	0x16, 0x08, 0x17, 0x86, 0x78, 0x59, 0xab, 0x8a, 0x12, 0x50, 0x87, 0xd2, 0x90, 0x57, 0x00, 0xb1,
+	0x2e, 0x2c, 0x94, 0x6b, 0xcb, 0xf7, 0x12, 0xec, 0x5a, 0x40, 0x55, 0x6c, 0x00, 0xef, 0xf6, 0xda,
+	0xea, 0x70, 0xe0, 0x09, 0xcc, 0x85, 0xc1, 0x2d, 0x8c, 0x2b, 0x8a, 0x1d, 0x7c, 0x79, 0xd5, 0x64,
+	0xef, 0x0a, 0xc2, 0x95, 0xd2, 0x96, 0xdb, 0x42, 0x2b, 0xe3, 0xe1, 0x51, 0x8e, 0xce, 0xa7, 0x00,
+	0x22, 0xb5, 0x50, 0x3e, 0xba, 0xec, 0x89, 0x8b, 0x4e, 0xd4, 0xa1, 0x1c, 0x5d, 0xa3, 0xb3, 0x63,
+	0x5e, 0x78, 0x8a, 0x7a, 0xcb, 0xec, 0x61, 0x91, 0xdc, 0xa4, 0xd3, 0x34, 0x99, 0xf4, 0xff, 0x85,
+	0x3d, 0x74, 0xb2, 0xcc, 0x6e, 0xb3, 0xf9, 0x53, 0xd6, 0xef, 0x84, 0x08, 0x75, 0xef, 0xe7, 0x71,
+	0x7a, 0x97, 0xf4, 0x83, 0xf8, 0xab, 0x83, 0x86, 0x1b, 0x5d, 0xe2, 0x3f, 0x1b, 0xc6, 0x17, 0xc7,
+	0x5e, 0x59, 0xd4, 0xf5, 0x16, 0x9d, 0xe7, 0xf8, 0x87, 0x95, 0x7a, 0xcb, 0x95, 0xc4, 0x7a, 0x2f,
+	0x89, 0x04, 0xe5, 0xca, 0x37, 0xab, 0xda, 0x15, 0xe6, 0x97, 0xcd, 0x8d, 0xdd, 0xf9, 0x16, 0xfc,
+	0x9f, 0x45, 0xd1, 0x7b, 0x30, 0x98, 0xf9, 0xa8, 0x48, 0x18, 0xec, 0x65, 0xad, 0x56, 0x14, 0xd7,
+	0xbf, 0x35, 0x1f, 0x8d, 0x9f, 0x47, 0xc2, 0xe4, 0xad, 0x9f, 0xaf, 0x68, 0xee, 0xfc, 0xcf, 0x60,
+	0xe8, 0x2f, 0x19, 0x8b, 0x84, 0x61, 0xac, 0x9d, 0x60, 0x6c, 0x45, 0x19, 0x73, 0x33, 0x2f, 0x5d,
+	0x57, 0x8c, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x6e, 0x16, 0x44, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_target_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_target_status.pb.go
new file mode 100644
index 0000000..ffaed49
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_target_status.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_target_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a feed item target.
+type FeedItemTargetStatusEnum_FeedItemTargetStatus int32
+
+const (
+	// Not specified.
+	FeedItemTargetStatusEnum_UNSPECIFIED FeedItemTargetStatusEnum_FeedItemTargetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemTargetStatusEnum_UNKNOWN FeedItemTargetStatusEnum_FeedItemTargetStatus = 1
+	// Feed item target is enabled.
+	FeedItemTargetStatusEnum_ENABLED FeedItemTargetStatusEnum_FeedItemTargetStatus = 2
+	// Feed item target has been removed.
+	FeedItemTargetStatusEnum_REMOVED FeedItemTargetStatusEnum_FeedItemTargetStatus = 3
+)
+
+var FeedItemTargetStatusEnum_FeedItemTargetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var FeedItemTargetStatusEnum_FeedItemTargetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedItemTargetStatusEnum_FeedItemTargetStatus) String() string {
+	return proto.EnumName(FeedItemTargetStatusEnum_FeedItemTargetStatus_name, int32(x))
+}
+
+func (FeedItemTargetStatusEnum_FeedItemTargetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b220975402148c96, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed item target.
+type FeedItemTargetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemTargetStatusEnum) Reset()         { *m = FeedItemTargetStatusEnum{} }
+func (m *FeedItemTargetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTargetStatusEnum) ProtoMessage()    {}
+func (*FeedItemTargetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b220975402148c96, []int{0}
+}
+
+func (m *FeedItemTargetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTargetStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedItemTargetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTargetStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTargetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTargetStatusEnum.Merge(m, src)
+}
+func (m *FeedItemTargetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTargetStatusEnum.Size(m)
+}
+func (m *FeedItemTargetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTargetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTargetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemTargetStatusEnum_FeedItemTargetStatus", FeedItemTargetStatusEnum_FeedItemTargetStatus_name, FeedItemTargetStatusEnum_FeedItemTargetStatus_value)
+	proto.RegisterType((*FeedItemTargetStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedItemTargetStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_target_status.proto", fileDescriptor_b220975402148c96)
+}
+
+var fileDescriptor_b220975402148c96 = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4e, 0x2a, 0x31,
+	0x14, 0x7d, 0x0c, 0xc9, 0x33, 0x29, 0x0b, 0x27, 0xc4, 0x85, 0x1a, 0x59, 0xc0, 0x07, 0xb4, 0x8b,
+	0xee, 0xca, 0xaa, 0x23, 0x85, 0x10, 0xb5, 0x10, 0x91, 0x31, 0x31, 0x93, 0x90, 0x6a, 0x6b, 0x33,
+	0x86, 0x69, 0x09, 0x2d, 0x7c, 0x90, 0x4b, 0x3f, 0xc5, 0x4f, 0x71, 0xe1, 0x37, 0x98, 0x76, 0x80,
+	0x15, 0xba, 0x69, 0xce, 0xed, 0xb9, 0xe7, 0xdc, 0x73, 0x2f, 0xe8, 0x6b, 0x6b, 0xf5, 0x52, 0x21,
+	0x21, 0x1d, 0xaa, 0x61, 0x40, 0x5b, 0x8c, 0x94, 0xd9, 0x54, 0x0e, 0xbd, 0x2a, 0x25, 0x17, 0xa5,
+	0x57, 0xd5, 0xc2, 0x8b, 0xb5, 0x56, 0x7e, 0xe1, 0xbc, 0xf0, 0x1b, 0x07, 0x57, 0x6b, 0xeb, 0x6d,
+	0xbb, 0x53, 0x2b, 0xa0, 0x90, 0x0e, 0x1e, 0xc4, 0x70, 0x8b, 0x61, 0x14, 0x5f, 0x5e, 0xed, 0xbd,
+	0x57, 0x25, 0x12, 0xc6, 0x58, 0x2f, 0x7c, 0x69, 0xcd, 0x4e, 0xdc, 0x7b, 0x03, 0xe7, 0x43, 0xa5,
+	0xe4, 0xd8, 0xab, 0xea, 0x21, 0x7a, 0xcf, 0xa2, 0x35, 0x33, 0x9b, 0xaa, 0xc7, 0xc1, 0xd9, 0x31,
+	0xae, 0x7d, 0x0a, 0x5a, 0x73, 0x3e, 0x9b, 0xb2, 0xeb, 0xf1, 0x70, 0xcc, 0x06, 0xe9, 0xbf, 0x76,
+	0x0b, 0x9c, 0xcc, 0xf9, 0x0d, 0x9f, 0x3c, 0xf2, 0xb4, 0x11, 0x0a, 0xc6, 0x69, 0x76, 0xcb, 0x06,
+	0x69, 0x12, 0x8a, 0x7b, 0x76, 0x37, 0xc9, 0xd9, 0x20, 0x6d, 0x66, 0xdf, 0x0d, 0xd0, 0x7d, 0xb1,
+	0x15, 0xfc, 0x33, 0x6f, 0x76, 0x71, 0x6c, 0xe6, 0x34, 0x84, 0x9d, 0x36, 0x9e, 0xb2, 0x9d, 0x56,
+	0xdb, 0xa5, 0x30, 0x1a, 0xda, 0xb5, 0x46, 0x5a, 0x99, 0xb8, 0xca, 0xfe, 0x70, 0xab, 0xd2, 0xfd,
+	0x72, 0xc7, 0x7e, 0x7c, 0xdf, 0x93, 0xe6, 0x88, 0xd2, 0x8f, 0xa4, 0x33, 0xaa, 0xad, 0xa8, 0x74,
+	0xb0, 0x86, 0x01, 0xe5, 0x18, 0x86, 0xdd, 0xdd, 0xe7, 0x9e, 0x2f, 0xa8, 0x74, 0xc5, 0x81, 0x2f,
+	0x72, 0x5c, 0x44, 0xfe, 0x2b, 0xe9, 0xd6, 0x9f, 0x84, 0x50, 0xe9, 0x08, 0x39, 0x74, 0x10, 0x92,
+	0x63, 0x42, 0x62, 0xcf, 0xf3, 0xff, 0x18, 0x0c, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x8a,
+	0x68, 0x18, 0xdf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_target_type.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_target_type.pb.go
new file mode 100644
index 0000000..1386821
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_target_type.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_target_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible type of a feed item target.
+type FeedItemTargetTypeEnum_FeedItemTargetType int32
+
+const (
+	// Not specified.
+	FeedItemTargetTypeEnum_UNSPECIFIED FeedItemTargetTypeEnum_FeedItemTargetType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemTargetTypeEnum_UNKNOWN FeedItemTargetTypeEnum_FeedItemTargetType = 1
+	// Feed item targets a campaign.
+	FeedItemTargetTypeEnum_CAMPAIGN FeedItemTargetTypeEnum_FeedItemTargetType = 2
+	// Feed item targets an ad group.
+	FeedItemTargetTypeEnum_AD_GROUP FeedItemTargetTypeEnum_FeedItemTargetType = 3
+	// Feed item targets a criterion.
+	FeedItemTargetTypeEnum_CRITERION FeedItemTargetTypeEnum_FeedItemTargetType = 4
+)
+
+var FeedItemTargetTypeEnum_FeedItemTargetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CAMPAIGN",
+	3: "AD_GROUP",
+	4: "CRITERION",
+}
+
+var FeedItemTargetTypeEnum_FeedItemTargetType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CAMPAIGN":    2,
+	"AD_GROUP":    3,
+	"CRITERION":   4,
+}
+
+func (x FeedItemTargetTypeEnum_FeedItemTargetType) String() string {
+	return proto.EnumName(FeedItemTargetTypeEnum_FeedItemTargetType_name, int32(x))
+}
+
+func (FeedItemTargetTypeEnum_FeedItemTargetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d72b8d5b7777593c, []int{0, 0}
+}
+
+// Container for enum describing possible types of a feed item target.
+type FeedItemTargetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemTargetTypeEnum) Reset()         { *m = FeedItemTargetTypeEnum{} }
+func (m *FeedItemTargetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTargetTypeEnum) ProtoMessage()    {}
+func (*FeedItemTargetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d72b8d5b7777593c, []int{0}
+}
+
+func (m *FeedItemTargetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTargetTypeEnum.Unmarshal(m, b)
+}
+func (m *FeedItemTargetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTargetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTargetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTargetTypeEnum.Merge(m, src)
+}
+func (m *FeedItemTargetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTargetTypeEnum.Size(m)
+}
+func (m *FeedItemTargetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTargetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTargetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemTargetTypeEnum_FeedItemTargetType", FeedItemTargetTypeEnum_FeedItemTargetType_name, FeedItemTargetTypeEnum_FeedItemTargetType_value)
+	proto.RegisterType((*FeedItemTargetTypeEnum)(nil), "google.ads.googleads.v3.enums.FeedItemTargetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_target_type.proto", fileDescriptor_d72b8d5b7777593c)
+}
+
+var fileDescriptor_d72b8d5b7777593c = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x9d, 0xf8, 0x27, 0x53, 0x2c, 0x3d, 0x28, 0x88, 0x3b, 0x6c, 0x0f, 0x90, 0x1e, 0x7a,
+	0x32, 0x9e, 0xb2, 0xad, 0x2b, 0x45, 0xec, 0xca, 0xdc, 0x26, 0x48, 0xa5, 0x54, 0xf3, 0x33, 0x14,
+	0xd6, 0xa4, 0x2c, 0xd9, 0x64, 0xaf, 0xe3, 0xd1, 0x47, 0xf1, 0x51, 0xc4, 0x87, 0x90, 0xa6, 0x6e,
+	0x97, 0xa1, 0x97, 0xf0, 0x25, 0xdf, 0x1f, 0xbe, 0x7c, 0xe8, 0x9a, 0x4b, 0xc9, 0xe7, 0xe0, 0x66,
+	0x4c, 0xb9, 0x35, 0xac, 0xd0, 0xca, 0x73, 0x41, 0x2c, 0x0b, 0xe5, 0xbe, 0x02, 0xb0, 0x34, 0xd7,
+	0x50, 0xa4, 0x3a, 0x5b, 0x70, 0xd0, 0xa9, 0x5e, 0x97, 0x80, 0xcb, 0x85, 0xd4, 0xd2, 0x69, 0xd7,
+	0x7a, 0x9c, 0x31, 0x85, 0xb7, 0x56, 0xbc, 0xf2, 0xb0, 0xb1, 0x5e, 0x5e, 0x6d, 0x92, 0xcb, 0xdc,
+	0xcd, 0x84, 0x90, 0x3a, 0xd3, 0xb9, 0x14, 0xaa, 0x36, 0x77, 0xdf, 0xd0, 0xf9, 0x10, 0x80, 0x85,
+	0x1a, 0x8a, 0x89, 0x49, 0x9e, 0xac, 0x4b, 0xf0, 0xc5, 0xb2, 0xe8, 0x3e, 0x21, 0x67, 0x97, 0x71,
+	0xce, 0x50, 0x6b, 0x1a, 0xdd, 0xc7, 0x7e, 0x3f, 0x1c, 0x86, 0xfe, 0xc0, 0xde, 0x73, 0x5a, 0xe8,
+	0x70, 0x1a, 0xdd, 0x46, 0xa3, 0x87, 0xc8, 0x6e, 0x38, 0x27, 0xe8, 0xa8, 0x4f, 0xef, 0x62, 0x1a,
+	0x06, 0x91, 0x6d, 0x55, 0x37, 0x3a, 0x48, 0x83, 0xf1, 0x68, 0x1a, 0xdb, 0x4d, 0xe7, 0x14, 0x1d,
+	0xf7, 0xc7, 0xe1, 0xc4, 0x1f, 0x87, 0xa3, 0xc8, 0xde, 0xef, 0x7d, 0x37, 0x50, 0xe7, 0x45, 0x16,
+	0xf8, 0xdf, 0xf2, 0xbd, 0x8b, 0xdd, 0x0a, 0x71, 0xd5, 0x3b, 0x6e, 0x3c, 0xf6, 0x7e, 0x9d, 0x5c,
+	0xce, 0x33, 0xc1, 0xb1, 0x5c, 0x70, 0x97, 0x83, 0x30, 0xbf, 0xda, 0x2c, 0x58, 0xe6, 0xea, 0x8f,
+	0x41, 0x6f, 0xcc, 0xf9, 0x6e, 0x35, 0x03, 0x4a, 0x3f, 0xac, 0x76, 0x50, 0x47, 0x51, 0xa6, 0x70,
+	0x0d, 0x2b, 0x34, 0xf3, 0x70, 0x35, 0x84, 0xfa, 0xdc, 0xf0, 0x09, 0x65, 0x2a, 0xd9, 0xf2, 0xc9,
+	0xcc, 0x4b, 0x0c, 0xff, 0x65, 0x75, 0xea, 0x47, 0x42, 0x28, 0x53, 0x84, 0x6c, 0x15, 0x84, 0xcc,
+	0x3c, 0x42, 0x8c, 0xe6, 0xf9, 0xc0, 0x14, 0xf3, 0x7e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x7a,
+	0x11, 0xc7, 0xe8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_item_validation_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_item_validation_status.pb.go
new file mode 100644
index 0000000..fb96977
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_item_validation_status.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_item_validation_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible validation statuses of a feed item.
+type FeedItemValidationStatusEnum_FeedItemValidationStatus int32
+
+const (
+	// No value has been specified.
+	FeedItemValidationStatusEnum_UNSPECIFIED FeedItemValidationStatusEnum_FeedItemValidationStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemValidationStatusEnum_UNKNOWN FeedItemValidationStatusEnum_FeedItemValidationStatus = 1
+	// Validation pending.
+	FeedItemValidationStatusEnum_PENDING FeedItemValidationStatusEnum_FeedItemValidationStatus = 2
+	// An error was found.
+	FeedItemValidationStatusEnum_INVALID FeedItemValidationStatusEnum_FeedItemValidationStatus = 3
+	// Feed item is semantically well-formed.
+	FeedItemValidationStatusEnum_VALID FeedItemValidationStatusEnum_FeedItemValidationStatus = 4
+)
+
+var FeedItemValidationStatusEnum_FeedItemValidationStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "INVALID",
+	4: "VALID",
+}
+
+var FeedItemValidationStatusEnum_FeedItemValidationStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"INVALID":     3,
+	"VALID":       4,
+}
+
+func (x FeedItemValidationStatusEnum_FeedItemValidationStatus) String() string {
+	return proto.EnumName(FeedItemValidationStatusEnum_FeedItemValidationStatus_name, int32(x))
+}
+
+func (FeedItemValidationStatusEnum_FeedItemValidationStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_041aff7e33a9050d, []int{0, 0}
+}
+
+// Container for enum describing possible validation statuses of a feed item.
+type FeedItemValidationStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemValidationStatusEnum) Reset()         { *m = FeedItemValidationStatusEnum{} }
+func (m *FeedItemValidationStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemValidationStatusEnum) ProtoMessage()    {}
+func (*FeedItemValidationStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_041aff7e33a9050d, []int{0}
+}
+
+func (m *FeedItemValidationStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemValidationStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedItemValidationStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemValidationStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemValidationStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemValidationStatusEnum.Merge(m, src)
+}
+func (m *FeedItemValidationStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemValidationStatusEnum.Size(m)
+}
+func (m *FeedItemValidationStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemValidationStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemValidationStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedItemValidationStatusEnum_FeedItemValidationStatus", FeedItemValidationStatusEnum_FeedItemValidationStatus_name, FeedItemValidationStatusEnum_FeedItemValidationStatus_value)
+	proto.RegisterType((*FeedItemValidationStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedItemValidationStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_item_validation_status.proto", fileDescriptor_041aff7e33a9050d)
+}
+
+var fileDescriptor_041aff7e33a9050d = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0xff, 0x4e, 0x7f, 0x15, 0xd3, 0x85, 0xc3, 0xac, 0x44, 0xda, 0x45, 0xfb, 0x00, 0x99,
+	0xc5, 0xec, 0xe2, 0x42, 0x52, 0x3b, 0x2d, 0x41, 0x89, 0x03, 0xa5, 0x23, 0xc8, 0x48, 0x89, 0x26,
+	0x86, 0x81, 0x4e, 0x52, 0x9a, 0xb4, 0x3b, 0x5f, 0xc6, 0xa5, 0x8f, 0xe2, 0xa3, 0xb8, 0xf4, 0x09,
+	0x24, 0x49, 0x3b, 0xbb, 0xba, 0x09, 0xe7, 0xe6, 0xdc, 0xfb, 0x71, 0xef, 0x01, 0x37, 0x52, 0x6b,
+	0xb9, 0x12, 0x29, 0xe3, 0x26, 0x0d, 0xd2, 0xa9, 0x5d, 0x96, 0x0a, 0xb5, 0x6d, 0x4c, 0xfa, 0x26,
+	0x04, 0x5f, 0xd6, 0x56, 0x34, 0xcb, 0x1d, 0x5b, 0xd5, 0x9c, 0xd9, 0x5a, 0xab, 0xa5, 0xb1, 0xcc,
+	0x6e, 0x0d, 0x5c, 0x6f, 0xb4, 0xd5, 0xc9, 0x20, 0x4c, 0x41, 0xc6, 0x0d, 0x6c, 0x01, 0x70, 0x97,
+	0x41, 0x0f, 0xb8, 0xea, 0x1f, 0xf8, 0xeb, 0x3a, 0x65, 0x4a, 0x69, 0xeb, 0x11, 0xfb, 0xe1, 0xd1,
+	0x3b, 0xe8, 0x4f, 0x85, 0xe0, 0xc4, 0x8a, 0xa6, 0x6c, 0xf9, 0x73, 0x8f, 0xcf, 0xd5, 0xb6, 0x19,
+	0x3d, 0x83, 0xcb, 0x63, 0x7e, 0x72, 0x01, 0x7a, 0x0b, 0x3a, 0x2f, 0xf2, 0x5b, 0x32, 0x25, 0xf9,
+	0x24, 0xfe, 0x97, 0xf4, 0xc0, 0xd9, 0x82, 0xde, 0xd1, 0x87, 0x47, 0x1a, 0x77, 0x5c, 0x51, 0xe4,
+	0x74, 0x42, 0xe8, 0x2c, 0x8e, 0x5c, 0x41, 0x68, 0x89, 0xef, 0xc9, 0x24, 0xee, 0x26, 0xe7, 0xe0,
+	0x24, 0xc8, 0xff, 0xe3, 0x9f, 0x0e, 0x18, 0xbe, 0xea, 0x06, 0xfe, 0x79, 0xc2, 0x78, 0x70, 0x6c,
+	0x85, 0xc2, 0xdd, 0x50, 0x74, 0x9e, 0xc6, 0xfb, 0x79, 0xa9, 0x57, 0x4c, 0x49, 0xa8, 0x37, 0x32,
+	0x95, 0x42, 0xf9, 0x0b, 0x0f, 0x99, 0xae, 0x6b, 0x73, 0x24, 0xe2, 0x6b, 0xff, 0x7e, 0x44, 0xdd,
+	0x19, 0xc6, 0x9f, 0xd1, 0x60, 0x16, 0x50, 0x98, 0x1b, 0x18, 0xa4, 0x53, 0x65, 0x06, 0x5d, 0x1c,
+	0xe6, 0xeb, 0xe0, 0x57, 0x98, 0x9b, 0xaa, 0xf5, 0xab, 0x32, 0xab, 0xbc, 0xff, 0x1d, 0x0d, 0xc3,
+	0x27, 0x42, 0x98, 0x1b, 0x84, 0xda, 0x0e, 0x84, 0xca, 0x0c, 0x21, 0xdf, 0xf3, 0x72, 0xea, 0x17,
+	0xcb, 0x7e, 0x03, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x08, 0x36, 0x3c, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_link_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_link_status.pb.go
new file mode 100644
index 0000000..043140c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_link_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_link_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a feed link.
+type FeedLinkStatusEnum_FeedLinkStatus int32
+
+const (
+	// Not specified.
+	FeedLinkStatusEnum_UNSPECIFIED FeedLinkStatusEnum_FeedLinkStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedLinkStatusEnum_UNKNOWN FeedLinkStatusEnum_FeedLinkStatus = 1
+	// Feed link is enabled.
+	FeedLinkStatusEnum_ENABLED FeedLinkStatusEnum_FeedLinkStatus = 2
+	// Feed link has been removed.
+	FeedLinkStatusEnum_REMOVED FeedLinkStatusEnum_FeedLinkStatus = 3
+)
+
+var FeedLinkStatusEnum_FeedLinkStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var FeedLinkStatusEnum_FeedLinkStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedLinkStatusEnum_FeedLinkStatus) String() string {
+	return proto.EnumName(FeedLinkStatusEnum_FeedLinkStatus_name, int32(x))
+}
+
+func (FeedLinkStatusEnum_FeedLinkStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0b8273670f863712, []int{0, 0}
+}
+
+// Container for an enum describing possible statuses of a feed link.
+type FeedLinkStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedLinkStatusEnum) Reset()         { *m = FeedLinkStatusEnum{} }
+func (m *FeedLinkStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedLinkStatusEnum) ProtoMessage()    {}
+func (*FeedLinkStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b8273670f863712, []int{0}
+}
+
+func (m *FeedLinkStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedLinkStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedLinkStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedLinkStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedLinkStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedLinkStatusEnum.Merge(m, src)
+}
+func (m *FeedLinkStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedLinkStatusEnum.Size(m)
+}
+func (m *FeedLinkStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedLinkStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedLinkStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedLinkStatusEnum_FeedLinkStatus", FeedLinkStatusEnum_FeedLinkStatus_name, FeedLinkStatusEnum_FeedLinkStatus_value)
+	proto.RegisterType((*FeedLinkStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedLinkStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_link_status.proto", fileDescriptor_0b8273670f863712)
+}
+
+var fileDescriptor_0b8273670f863712 = []byte{
+	// 303 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4f, 0xfa, 0x30,
+	0x18, 0xfe, 0x31, 0x92, 0x9f, 0x49, 0x49, 0x74, 0x99, 0x37, 0x23, 0x07, 0xf8, 0x00, 0xed, 0xa1,
+	0x9e, 0xea, 0xa9, 0x93, 0x82, 0x44, 0x1c, 0x44, 0xc2, 0x4c, 0xcc, 0x22, 0xa9, 0xb6, 0x36, 0x0b,
+	0xd0, 0x12, 0xba, 0xf1, 0x81, 0x3c, 0xfa, 0x51, 0xfc, 0x24, 0xc6, 0x4f, 0x61, 0xda, 0xb1, 0x25,
+	0x1c, 0xf4, 0xb2, 0x3c, 0xef, 0xfb, 0xfc, 0xd9, 0xd3, 0x17, 0x5c, 0x29, 0x63, 0xd4, 0x5a, 0x22,
+	0x2e, 0x2c, 0xaa, 0xa0, 0x43, 0x7b, 0x8c, 0xa4, 0x2e, 0x37, 0x16, 0xbd, 0x49, 0x29, 0x96, 0xeb,
+	0x5c, 0xaf, 0x96, 0xb6, 0xe0, 0x45, 0x69, 0xe1, 0x76, 0x67, 0x0a, 0x13, 0x75, 0x2b, 0x29, 0xe4,
+	0xc2, 0xc2, 0xc6, 0x05, 0xf7, 0x18, 0x7a, 0xd7, 0xc5, 0x65, 0x1d, 0xba, 0xcd, 0x11, 0xd7, 0xda,
+	0x14, 0xbc, 0xc8, 0x8d, 0x3e, 0x98, 0xfb, 0xcf, 0x20, 0x1a, 0x4a, 0x29, 0x26, 0xb9, 0x5e, 0xcd,
+	0x7d, 0x28, 0xd3, 0xe5, 0xa6, 0x7f, 0x0b, 0x4e, 0x8f, 0xb7, 0xd1, 0x19, 0xe8, 0x2c, 0x92, 0xf9,
+	0x8c, 0xdd, 0x8c, 0x87, 0x63, 0x36, 0x08, 0xff, 0x45, 0x1d, 0x70, 0xb2, 0x48, 0xee, 0x92, 0xe9,
+	0x63, 0x12, 0xb6, 0xdc, 0xc0, 0x12, 0x1a, 0x4f, 0xd8, 0x20, 0x0c, 0xdc, 0xf0, 0xc0, 0xee, 0xa7,
+	0x29, 0x1b, 0x84, 0xed, 0xf8, 0xab, 0x05, 0x7a, 0xaf, 0x66, 0x03, 0xff, 0xec, 0x18, 0x9f, 0x1f,
+	0xff, 0x6d, 0xe6, 0xaa, 0xcd, 0x5a, 0x4f, 0xf1, 0xc1, 0xa5, 0xcc, 0x9a, 0x6b, 0x05, 0xcd, 0x4e,
+	0x21, 0x25, 0xb5, 0x2f, 0x5e, 0xdf, 0x67, 0x9b, 0xdb, 0x5f, 0xce, 0x75, 0xed, 0xbf, 0xef, 0x41,
+	0x7b, 0x44, 0xe9, 0x47, 0xd0, 0x1d, 0x55, 0x51, 0x54, 0x58, 0x58, 0x41, 0x87, 0x52, 0x0c, 0xdd,
+	0x7b, 0xed, 0x67, 0xcd, 0x67, 0x54, 0xd8, 0xac, 0xe1, 0xb3, 0x14, 0x67, 0x9e, 0xff, 0x0e, 0x7a,
+	0xd5, 0x92, 0x10, 0x2a, 0x2c, 0x21, 0x8d, 0x82, 0x90, 0x14, 0x13, 0xe2, 0x35, 0x2f, 0xff, 0x7d,
+	0x31, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x5a, 0xf6, 0xca, 0xc6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_mapping_criterion_type.pb.go b/googleapis/ads/googleads/v3/enums/feed_mapping_criterion_type.pb.go
new file mode 100644
index 0000000..e57cda1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_mapping_criterion_type.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_mapping_criterion_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible placeholder types for a feed mapping.
+type FeedMappingCriterionTypeEnum_FeedMappingCriterionType int32
+
+const (
+	// Not specified.
+	FeedMappingCriterionTypeEnum_UNSPECIFIED FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedMappingCriterionTypeEnum_UNKNOWN FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 1
+	// Allows campaign targeting at locations within a location feed.
+	FeedMappingCriterionTypeEnum_LOCATION_EXTENSION_TARGETING FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 4
+	// Allows url targeting for your dynamic search ads within a page feed.
+	FeedMappingCriterionTypeEnum_DSA_PAGE_FEED FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 3
+)
+
+var FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	4: "LOCATION_EXTENSION_TARGETING",
+	3: "DSA_PAGE_FEED",
+}
+
+var FeedMappingCriterionTypeEnum_FeedMappingCriterionType_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"LOCATION_EXTENSION_TARGETING": 4,
+	"DSA_PAGE_FEED":                3,
+}
+
+func (x FeedMappingCriterionTypeEnum_FeedMappingCriterionType) String() string {
+	return proto.EnumName(FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name, int32(x))
+}
+
+func (FeedMappingCriterionTypeEnum_FeedMappingCriterionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_14f0d190ef2adb0a, []int{0, 0}
+}
+
+// Container for enum describing possible criterion types for a feed mapping.
+type FeedMappingCriterionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingCriterionTypeEnum) Reset()         { *m = FeedMappingCriterionTypeEnum{} }
+func (m *FeedMappingCriterionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingCriterionTypeEnum) ProtoMessage()    {}
+func (*FeedMappingCriterionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_14f0d190ef2adb0a, []int{0}
+}
+
+func (m *FeedMappingCriterionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingCriterionTypeEnum.Merge(m, src)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Size(m)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingCriterionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingCriterionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType", FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name, FeedMappingCriterionTypeEnum_FeedMappingCriterionType_value)
+	proto.RegisterType((*FeedMappingCriterionTypeEnum)(nil), "google.ads.googleads.v3.enums.FeedMappingCriterionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_mapping_criterion_type.proto", fileDescriptor_14f0d190ef2adb0a)
+}
+
+var fileDescriptor_14f0d190ef2adb0a = []byte{
+	// 343 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x6a, 0xeb, 0x30,
+	0x14, 0xfc, 0x4e, 0x3e, 0xff, 0x83, 0x42, 0xa9, 0xeb, 0x55, 0x29, 0x09, 0x34, 0x39, 0x80, 0xbc,
+	0xf0, 0x4e, 0x5d, 0x14, 0x25, 0x51, 0x8c, 0x69, 0xeb, 0x98, 0xc6, 0x49, 0x4b, 0x31, 0x18, 0x37,
+	0x52, 0x85, 0x21, 0x96, 0x84, 0xe5, 0x04, 0x72, 0x88, 0x5e, 0xa2, 0xcb, 0x1e, 0xa5, 0x47, 0xe9,
+	0xb2, 0x27, 0x28, 0xb6, 0xea, 0xec, 0xd2, 0x8d, 0x18, 0x34, 0x6f, 0xe6, 0xbd, 0x19, 0x70, 0xcd,
+	0xa5, 0xe4, 0x1b, 0xe6, 0x66, 0x54, 0xbb, 0x06, 0xd6, 0x68, 0xe7, 0xb9, 0x4c, 0x6c, 0x0b, 0xed,
+	0xbe, 0x30, 0x46, 0xd3, 0x22, 0x53, 0x2a, 0x17, 0x3c, 0x5d, 0x97, 0x79, 0xc5, 0xca, 0x5c, 0x8a,
+	0xb4, 0xda, 0x2b, 0x06, 0x55, 0x29, 0x2b, 0xe9, 0x0c, 0x8c, 0x0a, 0x66, 0x54, 0xc3, 0x83, 0x01,
+	0xdc, 0x79, 0xb0, 0x31, 0xb8, 0xe8, 0xb7, 0xfe, 0x2a, 0x77, 0x33, 0x21, 0x64, 0x95, 0x55, 0xb9,
+	0x14, 0xda, 0x88, 0x47, 0xaf, 0x16, 0xe8, 0xcf, 0x18, 0xa3, 0x77, 0x66, 0xc3, 0xa4, 0x5d, 0x10,
+	0xef, 0x15, 0x23, 0x62, 0x5b, 0x8c, 0x0a, 0x70, 0x7e, 0x8c, 0x77, 0x4e, 0x41, 0x6f, 0x19, 0x2e,
+	0x22, 0x32, 0x09, 0x66, 0x01, 0x99, 0xda, 0x7f, 0x9c, 0x1e, 0xf8, 0xbf, 0x0c, 0x6f, 0xc2, 0xf9,
+	0x43, 0x68, 0x5b, 0xce, 0x25, 0xe8, 0xdf, 0xce, 0x27, 0x38, 0x0e, 0xe6, 0x61, 0x4a, 0x1e, 0x63,
+	0x12, 0x2e, 0x6a, 0x14, 0xe3, 0x7b, 0x9f, 0xc4, 0x41, 0xe8, 0xdb, 0x7f, 0x9d, 0x33, 0x70, 0x32,
+	0x5d, 0xe0, 0x34, 0xc2, 0x3e, 0x49, 0x67, 0x84, 0x4c, 0xed, 0xee, 0xf8, 0xcb, 0x02, 0xc3, 0xb5,
+	0x2c, 0xe0, 0xaf, 0x99, 0xc6, 0x83, 0x63, 0x27, 0x45, 0x75, 0xa8, 0xc8, 0x7a, 0x1a, 0xff, 0xe8,
+	0xb9, 0xdc, 0x64, 0x82, 0x43, 0x59, 0x72, 0x97, 0x33, 0xd1, 0x44, 0x6e, 0x4b, 0x56, 0xb9, 0x3e,
+	0xd2, 0xf9, 0x55, 0xf3, 0xbe, 0x75, 0xba, 0x3e, 0xc6, 0xef, 0x9d, 0x81, 0x6f, 0xac, 0x30, 0xd5,
+	0xd0, 0xc0, 0x1a, 0xad, 0x3c, 0x58, 0xd7, 0xa3, 0x3f, 0x5a, 0x3e, 0xc1, 0x54, 0x27, 0x07, 0x3e,
+	0x59, 0x79, 0x49, 0xc3, 0x7f, 0x76, 0x86, 0xe6, 0x13, 0x21, 0x4c, 0x35, 0x42, 0x87, 0x09, 0x84,
+	0x56, 0x1e, 0x42, 0xcd, 0xcc, 0xf3, 0xbf, 0xe6, 0x30, 0xef, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xbd,
+	0x6d, 0x23, 0x1a, 0x0b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_mapping_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_mapping_status.pb.go
new file mode 100644
index 0000000..938abdd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_mapping_status.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_mapping_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a feed mapping.
+type FeedMappingStatusEnum_FeedMappingStatus int32
+
+const (
+	// Not specified.
+	FeedMappingStatusEnum_UNSPECIFIED FeedMappingStatusEnum_FeedMappingStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedMappingStatusEnum_UNKNOWN FeedMappingStatusEnum_FeedMappingStatus = 1
+	// Feed mapping is enabled.
+	FeedMappingStatusEnum_ENABLED FeedMappingStatusEnum_FeedMappingStatus = 2
+	// Feed mapping has been removed.
+	FeedMappingStatusEnum_REMOVED FeedMappingStatusEnum_FeedMappingStatus = 3
+)
+
+var FeedMappingStatusEnum_FeedMappingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var FeedMappingStatusEnum_FeedMappingStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedMappingStatusEnum_FeedMappingStatus) String() string {
+	return proto.EnumName(FeedMappingStatusEnum_FeedMappingStatus_name, int32(x))
+}
+
+func (FeedMappingStatusEnum_FeedMappingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ce0d893a1df7704e, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed mapping.
+type FeedMappingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingStatusEnum) Reset()         { *m = FeedMappingStatusEnum{} }
+func (m *FeedMappingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingStatusEnum) ProtoMessage()    {}
+func (*FeedMappingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ce0d893a1df7704e, []int{0}
+}
+
+func (m *FeedMappingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedMappingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingStatusEnum.Merge(m, src)
+}
+func (m *FeedMappingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingStatusEnum.Size(m)
+}
+func (m *FeedMappingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedMappingStatusEnum_FeedMappingStatus", FeedMappingStatusEnum_FeedMappingStatus_name, FeedMappingStatusEnum_FeedMappingStatus_value)
+	proto.RegisterType((*FeedMappingStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedMappingStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_mapping_status.proto", fileDescriptor_ce0d893a1df7704e)
+}
+
+var fileDescriptor_ce0d893a1df7704e = []byte{
+	// 305 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcd, 0x4a, 0x33, 0x31,
+	0x14, 0xfd, 0x3a, 0x85, 0x4f, 0x48, 0x17, 0x8e, 0x05, 0x5d, 0x88, 0x5d, 0xb4, 0x0f, 0x90, 0x2c,
+	0xb2, 0x10, 0xe2, 0x2a, 0x63, 0xd3, 0x52, 0x6a, 0xa7, 0xc5, 0xd2, 0x11, 0x64, 0xa0, 0x44, 0x13,
+	0xc3, 0x40, 0x27, 0x19, 0x9a, 0x69, 0x1f, 0xc8, 0xa5, 0x8f, 0xe2, 0xa3, 0xe8, 0x4b, 0x48, 0x92,
+	0x76, 0x36, 0x45, 0x37, 0xc3, 0xb9, 0x73, 0x7e, 0x72, 0xee, 0x05, 0xb7, 0xca, 0x18, 0xb5, 0x91,
+	0x88, 0x0b, 0x8b, 0x02, 0x74, 0x68, 0x8f, 0x91, 0xd4, 0xbb, 0xd2, 0xa2, 0x37, 0x29, 0xc5, 0xba,
+	0xe4, 0x55, 0x55, 0x68, 0xb5, 0xb6, 0x35, 0xaf, 0x77, 0x16, 0x56, 0x5b, 0x53, 0x9b, 0x6e, 0x2f,
+	0xa8, 0x21, 0x17, 0x16, 0x36, 0x46, 0xb8, 0xc7, 0xd0, 0x1b, 0xaf, 0x6f, 0x8e, 0xb9, 0x55, 0x81,
+	0xb8, 0xd6, 0xa6, 0xe6, 0x75, 0x61, 0xf4, 0xc1, 0x3c, 0x10, 0xe0, 0x72, 0x24, 0xa5, 0x98, 0x85,
+	0xe0, 0xa5, 0xcf, 0x65, 0x7a, 0x57, 0x0e, 0xa6, 0xe0, 0xe2, 0x84, 0xe8, 0x9e, 0x83, 0xce, 0x2a,
+	0x5d, 0x2e, 0xd8, 0xfd, 0x64, 0x34, 0x61, 0xc3, 0xf8, 0x5f, 0xb7, 0x03, 0xce, 0x56, 0xe9, 0x34,
+	0x9d, 0x3f, 0xa5, 0x71, 0xcb, 0x0d, 0x2c, 0xa5, 0xc9, 0x03, 0x1b, 0xc6, 0x91, 0x1b, 0x1e, 0xd9,
+	0x6c, 0x9e, 0xb1, 0x61, 0xdc, 0x4e, 0xbe, 0x5b, 0xa0, 0xff, 0x6a, 0x4a, 0xf8, 0x67, 0xd3, 0xe4,
+	0xea, 0xe4, 0xc1, 0x85, 0xeb, 0xb8, 0x68, 0x3d, 0x27, 0x07, 0xa3, 0x32, 0x1b, 0xae, 0x15, 0x34,
+	0x5b, 0x85, 0x94, 0xd4, 0x7e, 0x83, 0xe3, 0xad, 0xaa, 0xc2, 0xfe, 0x72, 0xba, 0x3b, 0xff, 0x7d,
+	0x8f, 0xda, 0x63, 0x4a, 0x3f, 0xa2, 0xde, 0x38, 0x44, 0x51, 0x61, 0x61, 0x80, 0x0e, 0x65, 0x18,
+	0xba, 0xad, 0xed, 0xe7, 0x91, 0xcf, 0xa9, 0xb0, 0x79, 0xc3, 0xe7, 0x19, 0xce, 0x3d, 0xff, 0x15,
+	0xf5, 0xc3, 0x4f, 0x42, 0xa8, 0xb0, 0x84, 0x34, 0x0a, 0x42, 0x32, 0x4c, 0x88, 0xd7, 0xbc, 0xfc,
+	0xf7, 0xc5, 0xf0, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xe5, 0x4c, 0x93, 0xd2, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_origin.pb.go b/googleapis/ads/googleads/v3/enums/feed_origin.pb.go
new file mode 100644
index 0000000..0d8f979
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_origin.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_origin.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for a feed origin.
+type FeedOriginEnum_FeedOrigin int32
+
+const (
+	// Not specified.
+	FeedOriginEnum_UNSPECIFIED FeedOriginEnum_FeedOrigin = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedOriginEnum_UNKNOWN FeedOriginEnum_FeedOrigin = 1
+	// The FeedAttributes for this Feed are managed by the
+	// user. Users can add FeedAttributes to this Feed.
+	FeedOriginEnum_USER FeedOriginEnum_FeedOrigin = 2
+	// The FeedAttributes for an GOOGLE Feed are created by Google. A feed of
+	// this type is maintained by Google and will have the correct attributes
+	// for the placeholder type of the feed.
+	FeedOriginEnum_GOOGLE FeedOriginEnum_FeedOrigin = 3
+)
+
+var FeedOriginEnum_FeedOrigin_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "USER",
+	3: "GOOGLE",
+}
+
+var FeedOriginEnum_FeedOrigin_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"USER":        2,
+	"GOOGLE":      3,
+}
+
+func (x FeedOriginEnum_FeedOrigin) String() string {
+	return proto.EnumName(FeedOriginEnum_FeedOrigin_name, int32(x))
+}
+
+func (FeedOriginEnum_FeedOrigin) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6bf0e294be3d78df, []int{0, 0}
+}
+
+// Container for enum describing possible values for a feed origin.
+type FeedOriginEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedOriginEnum) Reset()         { *m = FeedOriginEnum{} }
+func (m *FeedOriginEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedOriginEnum) ProtoMessage()    {}
+func (*FeedOriginEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6bf0e294be3d78df, []int{0}
+}
+
+func (m *FeedOriginEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedOriginEnum.Unmarshal(m, b)
+}
+func (m *FeedOriginEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedOriginEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedOriginEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedOriginEnum.Merge(m, src)
+}
+func (m *FeedOriginEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedOriginEnum.Size(m)
+}
+func (m *FeedOriginEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedOriginEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedOriginEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedOriginEnum_FeedOrigin", FeedOriginEnum_FeedOrigin_name, FeedOriginEnum_FeedOrigin_value)
+	proto.RegisterType((*FeedOriginEnum)(nil), "google.ads.googleads.v3.enums.FeedOriginEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_origin.proto", fileDescriptor_6bf0e294be3d78df)
+}
+
+var fileDescriptor_6bf0e294be3d78df = []byte{
+	// 293 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0xb7, 0x9d, 0x4c, 0xc9, 0xc0, 0x95, 0x1e, 0xc5, 0x1d, 0xb6, 0x07, 0x48, 0x0e, 0xb9, 0xc5,
+	0x8b, 0xad, 0x76, 0x65, 0x28, 0x6d, 0xd9, 0x68, 0x05, 0x29, 0x48, 0x35, 0x31, 0x14, 0xd6, 0xa4,
+	0x34, 0xdd, 0x1e, 0xc8, 0xa3, 0x8f, 0xe2, 0x73, 0x78, 0xf2, 0x29, 0xa4, 0xc9, 0xda, 0x9d, 0xdc,
+	0x25, 0xfc, 0xf8, 0x7e, 0x7f, 0xf2, 0xfb, 0x3e, 0x80, 0xb8, 0x94, 0x7c, 0xcb, 0x50, 0x41, 0xd5,
+	0x01, 0x76, 0x68, 0x8f, 0x11, 0x13, 0xbb, 0x4a, 0xa1, 0x0f, 0xc6, 0xe8, 0xab, 0x6c, 0x4a, 0x5e,
+	0x0a, 0x58, 0x37, 0xb2, 0x95, 0xee, 0xcc, 0xa8, 0x60, 0x41, 0x15, 0x1c, 0x0c, 0x70, 0x8f, 0xa1,
+	0x36, 0x5c, 0xdf, 0xf4, 0x79, 0x75, 0x89, 0x0a, 0x21, 0x64, 0x5b, 0xb4, 0xa5, 0x14, 0xca, 0x98,
+	0x17, 0x6b, 0x70, 0xb5, 0x64, 0x8c, 0xc6, 0x3a, 0x30, 0x10, 0xbb, 0x6a, 0x71, 0x07, 0xc0, 0x71,
+	0xe2, 0x4e, 0xc1, 0x24, 0x8d, 0x36, 0x49, 0x70, 0xbf, 0x5a, 0xae, 0x82, 0x07, 0xe7, 0xcc, 0x9d,
+	0x80, 0x8b, 0x34, 0x7a, 0x8c, 0xe2, 0xe7, 0xc8, 0xb1, 0xdc, 0x4b, 0x70, 0x9e, 0x6e, 0x82, 0xb5,
+	0x63, 0xbb, 0x00, 0x8c, 0xc3, 0x38, 0x0e, 0x9f, 0x02, 0x67, 0xe4, 0xff, 0x58, 0x60, 0xfe, 0x2e,
+	0x2b, 0x78, 0xb2, 0x97, 0x3f, 0x3d, 0xfe, 0x92, 0x74, 0x55, 0x12, 0xeb, 0xc5, 0x3f, 0x38, 0xb8,
+	0xdc, 0x16, 0x82, 0x43, 0xd9, 0x70, 0xc4, 0x99, 0xd0, 0x45, 0xfb, 0x53, 0xd4, 0xa5, 0xfa, 0xe7,
+	0x32, 0xb7, 0xfa, 0xfd, 0xb4, 0x47, 0xa1, 0xe7, 0x7d, 0xd9, 0xb3, 0xd0, 0x44, 0x79, 0x54, 0x41,
+	0x03, 0x3b, 0x94, 0x61, 0xd8, 0xed, 0xa8, 0xbe, 0x7b, 0x3e, 0xf7, 0xa8, 0xca, 0x07, 0x3e, 0xcf,
+	0x70, 0xae, 0xf9, 0x5f, 0x7b, 0x6e, 0x86, 0x84, 0x78, 0x54, 0x11, 0x32, 0x28, 0x08, 0xc9, 0x30,
+	0x21, 0x5a, 0xf3, 0x36, 0xd6, 0xc5, 0xf0, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x36, 0xff, 0x11,
+	0xd4, 0xb1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/feed_status.pb.go b/googleapis/ads/googleads/v3/enums/feed_status.pb.go
new file mode 100644
index 0000000..dba7a0f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/feed_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/feed_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a feed.
+type FeedStatusEnum_FeedStatus int32
+
+const (
+	// Not specified.
+	FeedStatusEnum_UNSPECIFIED FeedStatusEnum_FeedStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedStatusEnum_UNKNOWN FeedStatusEnum_FeedStatus = 1
+	// Feed is enabled.
+	FeedStatusEnum_ENABLED FeedStatusEnum_FeedStatus = 2
+	// Feed has been removed.
+	FeedStatusEnum_REMOVED FeedStatusEnum_FeedStatus = 3
+)
+
+var FeedStatusEnum_FeedStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var FeedStatusEnum_FeedStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedStatusEnum_FeedStatus) String() string {
+	return proto.EnumName(FeedStatusEnum_FeedStatus_name, int32(x))
+}
+
+func (FeedStatusEnum_FeedStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3f6c6129d0eaf758, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed.
+type FeedStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedStatusEnum) Reset()         { *m = FeedStatusEnum{} }
+func (m *FeedStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedStatusEnum) ProtoMessage()    {}
+func (*FeedStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3f6c6129d0eaf758, []int{0}
+}
+
+func (m *FeedStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedStatusEnum.Merge(m, src)
+}
+func (m *FeedStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedStatusEnum.Size(m)
+}
+func (m *FeedStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FeedStatusEnum_FeedStatus", FeedStatusEnum_FeedStatus_name, FeedStatusEnum_FeedStatus_value)
+	proto.RegisterType((*FeedStatusEnum)(nil), "google.ads.googleads.v3.enums.FeedStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/feed_status.proto", fileDescriptor_3f6c6129d0eaf758)
+}
+
+var fileDescriptor_3f6c6129d0eaf758 = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x1d, 0x28, 0x64, 0xe0, 0xca, 0x8e, 0xe2, 0x0e, 0xdb, 0x03, 0x24, 0x87, 0xdc, 0xe2,
+	0x29, 0xb5, 0xd9, 0x18, 0x6a, 0x37, 0x1c, 0xab, 0x20, 0x05, 0x89, 0x26, 0x86, 0xc2, 0x9a, 0x94,
+	0xa5, 0xdd, 0x03, 0x79, 0xf4, 0x51, 0x7c, 0x0e, 0x4f, 0x3e, 0x85, 0x24, 0xfd, 0xb3, 0x93, 0x5e,
+	0xca, 0xef, 0xfb, 0x7e, 0x7f, 0xfa, 0xcb, 0x07, 0x90, 0x32, 0x46, 0xed, 0x25, 0xe2, 0xc2, 0xb6,
+	0xd0, 0xa1, 0x23, 0x46, 0x52, 0xd7, 0x85, 0x45, 0xef, 0x52, 0x8a, 0x17, 0x5b, 0xf1, 0xaa, 0xb6,
+	0xb0, 0x3c, 0x98, 0xca, 0x4c, 0xa6, 0x8d, 0x0a, 0x72, 0x61, 0x61, 0x6f, 0x80, 0x47, 0x0c, 0xbd,
+	0xe1, 0xea, 0xba, 0xcb, 0x2b, 0x73, 0xc4, 0xb5, 0x36, 0x15, 0xaf, 0x72, 0xa3, 0x5b, 0xf3, 0x3c,
+	0x05, 0x97, 0x0b, 0x29, 0xc5, 0xd6, 0x07, 0x32, 0x5d, 0x17, 0xf3, 0x18, 0x80, 0xd3, 0x66, 0x32,
+	0x06, 0xa3, 0x5d, 0xb2, 0xdd, 0xb0, 0xdb, 0xd5, 0x62, 0xc5, 0xe2, 0xf0, 0x6c, 0x32, 0x02, 0x17,
+	0xbb, 0xe4, 0x2e, 0x59, 0x3f, 0x25, 0xe1, 0xc0, 0x0d, 0x2c, 0xa1, 0xd1, 0x3d, 0x8b, 0xc3, 0xc0,
+	0x0d, 0x8f, 0xec, 0x61, 0x9d, 0xb2, 0x38, 0x1c, 0x46, 0xdf, 0x03, 0x30, 0x7b, 0x33, 0x05, 0xfc,
+	0xb7, 0x5b, 0x34, 0x3e, 0xfd, 0x69, 0xe3, 0xea, 0x6c, 0x06, 0xcf, 0x51, 0xeb, 0x50, 0x66, 0xcf,
+	0xb5, 0x82, 0xe6, 0xa0, 0x90, 0x92, 0xda, 0x97, 0xed, 0xce, 0x51, 0xe6, 0xf6, 0x8f, 0xeb, 0xdc,
+	0xf8, 0xef, 0x47, 0x30, 0x5c, 0x52, 0xfa, 0x19, 0x4c, 0x97, 0x4d, 0x14, 0x15, 0x16, 0x36, 0xd0,
+	0xa1, 0x14, 0x43, 0xf7, 0x4e, 0xfb, 0xd5, 0xf1, 0x19, 0x15, 0x36, 0xeb, 0xf9, 0x2c, 0xc5, 0x99,
+	0xe7, 0x7f, 0x82, 0x59, 0xb3, 0x24, 0x84, 0x0a, 0x4b, 0x48, 0xaf, 0x20, 0x24, 0xc5, 0x84, 0x78,
+	0xcd, 0xeb, 0xb9, 0x2f, 0x86, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x17, 0x99, 0xc1, 0x4f, 0xb5,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/flight_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/flight_placeholder_field.pb.go
new file mode 100644
index 0000000..868d629
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/flight_placeholder_field.pb.go
@@ -0,0 +1,218 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/flight_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Flight placeholder fields.
+type FlightPlaceholderFieldEnum_FlightPlaceholderField int32
+
+const (
+	// Not specified.
+	FlightPlaceholderFieldEnum_UNSPECIFIED FlightPlaceholderFieldEnum_FlightPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	FlightPlaceholderFieldEnum_UNKNOWN FlightPlaceholderFieldEnum_FlightPlaceholderField = 1
+	// Data Type: STRING. Required. Destination id. Example: PAR, LON.
+	// For feed items that only have destination id, destination id must be a
+	// unique key. For feed items that have both destination id and origin id,
+	// then the combination must be a unique key.
+	FlightPlaceholderFieldEnum_DESTINATION_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 2
+	// Data Type: STRING. Origin id. Example: PAR, LON.
+	// Optional. Combination of destination id and origin id must be unique per
+	// offer.
+	FlightPlaceholderFieldEnum_ORIGIN_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with product name to be shown
+	// in dynamic ad.
+	FlightPlaceholderFieldEnum_FLIGHT_DESCRIPTION FlightPlaceholderFieldEnum_FlightPlaceholderField = 4
+	// Data Type: STRING. Shorter names are recommended.
+	FlightPlaceholderFieldEnum_ORIGIN_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 5
+	// Data Type: STRING. Shorter names are recommended.
+	FlightPlaceholderFieldEnum_DESTINATION_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	FlightPlaceholderFieldEnum_FLIGHT_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	FlightPlaceholderFieldEnum_FORMATTED_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	FlightPlaceholderFieldEnum_FLIGHT_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	FlightPlaceholderFieldEnum_FORMATTED_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	FlightPlaceholderFieldEnum_IMAGE_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 11
+	// Data Type: URL_LIST. Required. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific flight for ads that show multiple
+	// flights.
+	FlightPlaceholderFieldEnum_FINAL_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 12
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	FlightPlaceholderFieldEnum_FINAL_MOBILE_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 13
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	FlightPlaceholderFieldEnum_TRACKING_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 14
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	FlightPlaceholderFieldEnum_ANDROID_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 15
+	// Data Type: STRING_LIST. List of recommended destination IDs to show
+	// together with this item.
+	FlightPlaceholderFieldEnum_SIMILAR_DESTINATION_IDS FlightPlaceholderFieldEnum_FlightPlaceholderField = 16
+	// Data Type: STRING. iOS app link.
+	FlightPlaceholderFieldEnum_IOS_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 17
+	// Data Type: INT64. iOS app store ID.
+	FlightPlaceholderFieldEnum_IOS_APP_STORE_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 18
+)
+
+var FlightPlaceholderFieldEnum_FlightPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DESTINATION_ID",
+	3:  "ORIGIN_ID",
+	4:  "FLIGHT_DESCRIPTION",
+	5:  "ORIGIN_NAME",
+	6:  "DESTINATION_NAME",
+	7:  "FLIGHT_PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "FLIGHT_SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "FINAL_URLS",
+	13: "FINAL_MOBILE_URLS",
+	14: "TRACKING_URL",
+	15: "ANDROID_APP_LINK",
+	16: "SIMILAR_DESTINATION_IDS",
+	17: "IOS_APP_LINK",
+	18: "IOS_APP_STORE_ID",
+}
+
+var FlightPlaceholderFieldEnum_FlightPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"DESTINATION_ID":          2,
+	"ORIGIN_ID":               3,
+	"FLIGHT_DESCRIPTION":      4,
+	"ORIGIN_NAME":             5,
+	"DESTINATION_NAME":        6,
+	"FLIGHT_PRICE":            7,
+	"FORMATTED_PRICE":         8,
+	"FLIGHT_SALE_PRICE":       9,
+	"FORMATTED_SALE_PRICE":    10,
+	"IMAGE_URL":               11,
+	"FINAL_URLS":              12,
+	"FINAL_MOBILE_URLS":       13,
+	"TRACKING_URL":            14,
+	"ANDROID_APP_LINK":        15,
+	"SIMILAR_DESTINATION_IDS": 16,
+	"IOS_APP_LINK":            17,
+	"IOS_APP_STORE_ID":        18,
+}
+
+func (x FlightPlaceholderFieldEnum_FlightPlaceholderField) String() string {
+	return proto.EnumName(FlightPlaceholderFieldEnum_FlightPlaceholderField_name, int32(x))
+}
+
+func (FlightPlaceholderFieldEnum_FlightPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_05562ffffd9d8d69, []int{0, 0}
+}
+
+// Values for Flight placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type FlightPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FlightPlaceholderFieldEnum) Reset()         { *m = FlightPlaceholderFieldEnum{} }
+func (m *FlightPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*FlightPlaceholderFieldEnum) ProtoMessage()    {}
+func (*FlightPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_05562ffffd9d8d69, []int{0}
+}
+
+func (m *FlightPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlightPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Size(m)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlightPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlightPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FlightPlaceholderFieldEnum_FlightPlaceholderField", FlightPlaceholderFieldEnum_FlightPlaceholderField_name, FlightPlaceholderFieldEnum_FlightPlaceholderField_value)
+	proto.RegisterType((*FlightPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.FlightPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/flight_placeholder_field.proto", fileDescriptor_05562ffffd9d8d69)
+}
+
+var fileDescriptor_05562ffffd9d8d69 = []byte{
+	// 496 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x6e, 0xd3, 0x40,
+	0x14, 0x26, 0x09, 0xb4, 0x74, 0xd2, 0x26, 0xd3, 0xa1, 0x14, 0x54, 0xda, 0x45, 0x7b, 0x00, 0x7b,
+	0xe1, 0x9d, 0x61, 0x33, 0x89, 0xc7, 0x66, 0x14, 0x7b, 0x6c, 0xd9, 0x4e, 0x90, 0x50, 0x24, 0xcb,
+	0xd4, 0xae, 0x6b, 0xc9, 0xf1, 0x44, 0x99, 0xb4, 0x17, 0xe1, 0x06, 0x2c, 0x59, 0x72, 0x0c, 0x8e,
+	0xc2, 0x8e, 0x1b, 0xa0, 0x19, 0x3b, 0x3f, 0x20, 0x60, 0x33, 0x7a, 0xef, 0xfb, 0xd3, 0xd3, 0xbc,
+	0x07, 0xde, 0x15, 0x9c, 0x17, 0x55, 0xae, 0xa7, 0x99, 0xd0, 0x9b, 0x52, 0x56, 0x8f, 0x86, 0x9e,
+	0xd7, 0x0f, 0x0b, 0xa1, 0xdf, 0x55, 0x65, 0x71, 0xbf, 0x4e, 0x96, 0x55, 0x7a, 0x9b, 0xdf, 0xf3,
+	0x2a, 0xcb, 0x57, 0xc9, 0x5d, 0x99, 0x57, 0x99, 0xb6, 0x5c, 0xf1, 0x35, 0x47, 0x57, 0x8d, 0x45,
+	0x4b, 0x33, 0xa1, 0x6d, 0xdd, 0xda, 0xa3, 0xa1, 0x29, 0xf7, 0xc5, 0xe5, 0x26, 0x7c, 0x59, 0xea,
+	0x69, 0x5d, 0xf3, 0x75, 0xba, 0x2e, 0x79, 0x2d, 0x1a, 0xf3, 0xcd, 0xb7, 0x1e, 0xb8, 0xb0, 0x55,
+	0x7e, 0xb0, 0x8b, 0xb7, 0x65, 0x3a, 0xa9, 0x1f, 0x16, 0x37, 0x9f, 0x7b, 0xe0, 0xfc, 0xef, 0x34,
+	0x1a, 0x82, 0xfe, 0x94, 0x45, 0x01, 0x19, 0x53, 0x9b, 0x12, 0x0b, 0x3e, 0x41, 0x7d, 0x70, 0x38,
+	0x65, 0x13, 0xe6, 0x7f, 0x60, 0xb0, 0x83, 0x10, 0x18, 0x58, 0x24, 0x8a, 0x29, 0xc3, 0x31, 0xf5,
+	0x59, 0x42, 0x2d, 0xd8, 0x45, 0x27, 0xe0, 0xc8, 0x0f, 0xa9, 0x43, 0x55, 0xdb, 0x43, 0xe7, 0x00,
+	0xd9, 0x2e, 0x75, 0xde, 0xc7, 0x89, 0x45, 0xa2, 0x71, 0x48, 0x03, 0xa9, 0x84, 0x4f, 0x65, 0x70,
+	0x2b, 0x63, 0xd8, 0x23, 0xf0, 0x19, 0x3a, 0x03, 0x70, 0x3f, 0x4b, 0xa1, 0x07, 0x08, 0x82, 0xe3,
+	0xd6, 0x1e, 0x84, 0x74, 0x4c, 0xe0, 0x21, 0x7a, 0x01, 0x86, 0xb6, 0x1f, 0x7a, 0x38, 0x8e, 0x89,
+	0xd5, 0x82, 0xcf, 0xd1, 0x4b, 0x70, 0xda, 0xca, 0x22, 0xec, 0x92, 0x16, 0x3e, 0x42, 0xaf, 0xc1,
+	0xd9, 0x4e, 0xbb, 0xc7, 0x00, 0x39, 0x25, 0xf5, 0xb0, 0x43, 0x92, 0x69, 0xe8, 0xc2, 0x3e, 0x1a,
+	0x00, 0x60, 0x53, 0x86, 0x5d, 0xd9, 0x46, 0xf0, 0x58, 0xe5, 0xa9, 0xde, 0xf3, 0x47, 0xd4, 0x25,
+	0x0d, 0x7c, 0x22, 0xa7, 0x89, 0x43, 0x3c, 0x9e, 0x50, 0xe6, 0x28, 0xe3, 0x40, 0x4e, 0x8d, 0x99,
+	0x15, 0xfa, 0xd4, 0x4a, 0x70, 0x10, 0x24, 0x2e, 0x65, 0x13, 0x38, 0x44, 0x6f, 0xc0, 0xab, 0x88,
+	0x7a, 0xd4, 0xc5, 0x61, 0xf2, 0xfb, 0xff, 0x44, 0x10, 0xca, 0x10, 0xea, 0x47, 0x3b, 0xf9, 0xa9,
+	0x0c, 0xd9, 0x20, 0x51, 0xec, 0x87, 0x44, 0xfe, 0x1c, 0x1a, 0xfd, 0xec, 0x80, 0xeb, 0x5b, 0xbe,
+	0xd0, 0xfe, 0xbb, 0xf8, 0xd1, 0x65, 0xb3, 0x38, 0xf1, 0xe7, 0xe6, 0x02, 0xb9, 0xf8, 0xa0, 0xf3,
+	0x71, 0xd4, 0xda, 0x0b, 0x5e, 0xa5, 0x75, 0xa1, 0xf1, 0x55, 0xa1, 0x17, 0x79, 0xad, 0xce, 0x62,
+	0x73, 0x85, 0xcb, 0x52, 0xfc, 0xe3, 0x28, 0xdf, 0xaa, 0xf7, 0x4b, 0xb7, 0xe7, 0x60, 0xfc, 0xb5,
+	0x7b, 0xe5, 0x34, 0x51, 0x38, 0x13, 0x5a, 0x53, 0xca, 0x6a, 0x66, 0x68, 0xf2, 0x88, 0xc4, 0xf7,
+	0x0d, 0x3f, 0xc7, 0x99, 0x98, 0x6f, 0xf9, 0xf9, 0xcc, 0x98, 0x2b, 0xfe, 0x47, 0xf7, 0xba, 0x01,
+	0x4d, 0x13, 0x67, 0xc2, 0x34, 0xb7, 0x0a, 0xd3, 0x9c, 0x19, 0xa6, 0xa9, 0x34, 0x9f, 0x0e, 0xd4,
+	0x60, 0xc6, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xf9, 0xca, 0x7e, 0x2c, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/frequency_cap_event_type.pb.go b/googleapis/ads/googleads/v3/enums/frequency_cap_event_type.pb.go
new file mode 100644
index 0000000..ebae6a6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/frequency_cap_event_type.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/frequency_cap_event_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of event that the cap applies to (e.g. impression).
+type FrequencyCapEventTypeEnum_FrequencyCapEventType int32
+
+const (
+	// Not specified.
+	FrequencyCapEventTypeEnum_UNSPECIFIED FrequencyCapEventTypeEnum_FrequencyCapEventType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapEventTypeEnum_UNKNOWN FrequencyCapEventTypeEnum_FrequencyCapEventType = 1
+	// The cap applies on ad impressions.
+	FrequencyCapEventTypeEnum_IMPRESSION FrequencyCapEventTypeEnum_FrequencyCapEventType = 2
+	// The cap applies on video ad views.
+	FrequencyCapEventTypeEnum_VIDEO_VIEW FrequencyCapEventTypeEnum_FrequencyCapEventType = 3
+)
+
+var FrequencyCapEventTypeEnum_FrequencyCapEventType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IMPRESSION",
+	3: "VIDEO_VIEW",
+}
+
+var FrequencyCapEventTypeEnum_FrequencyCapEventType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"IMPRESSION":  2,
+	"VIDEO_VIEW":  3,
+}
+
+func (x FrequencyCapEventTypeEnum_FrequencyCapEventType) String() string {
+	return proto.EnumName(FrequencyCapEventTypeEnum_FrequencyCapEventType_name, int32(x))
+}
+
+func (FrequencyCapEventTypeEnum_FrequencyCapEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_645006887424b23b, []int{0, 0}
+}
+
+// Container for enum describing the type of event that the cap applies to.
+type FrequencyCapEventTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapEventTypeEnum) Reset()         { *m = FrequencyCapEventTypeEnum{} }
+func (m *FrequencyCapEventTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapEventTypeEnum) ProtoMessage()    {}
+func (*FrequencyCapEventTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_645006887424b23b, []int{0}
+}
+
+func (m *FrequencyCapEventTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapEventTypeEnum.Merge(m, src)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Size(m)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapEventTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapEventTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FrequencyCapEventTypeEnum_FrequencyCapEventType", FrequencyCapEventTypeEnum_FrequencyCapEventType_name, FrequencyCapEventTypeEnum_FrequencyCapEventType_value)
+	proto.RegisterType((*FrequencyCapEventTypeEnum)(nil), "google.ads.googleads.v3.enums.FrequencyCapEventTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/frequency_cap_event_type.proto", fileDescriptor_645006887424b23b)
+}
+
+var fileDescriptor_645006887424b23b = []byte{
+	// 321 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4b, 0xfb, 0x30,
+	0x1c, 0xfd, 0xaf, 0x83, 0xbf, 0x90, 0x81, 0x96, 0x82, 0x07, 0x87, 0x3b, 0x6c, 0x1f, 0x20, 0x3d,
+	0xf4, 0x16, 0xbd, 0x74, 0x5b, 0x36, 0x82, 0xd8, 0x15, 0xe7, 0x3a, 0x90, 0x42, 0x89, 0x6b, 0x0c,
+	0x83, 0x2d, 0x89, 0x4d, 0x37, 0xd8, 0xd7, 0xf1, 0xe8, 0x47, 0xf1, 0xa3, 0x78, 0xf1, 0x2b, 0x48,
+	0x12, 0xbb, 0xd3, 0xf4, 0x12, 0x5e, 0xf2, 0x7e, 0xef, 0xe5, 0xfd, 0x1e, 0xb8, 0xe5, 0x52, 0xf2,
+	0x0d, 0x0b, 0x69, 0xa9, 0x43, 0x07, 0x0d, 0xda, 0x47, 0x21, 0x13, 0xbb, 0xad, 0x0e, 0x5f, 0x2a,
+	0xf6, 0xba, 0x63, 0x62, 0x75, 0x28, 0x56, 0x54, 0x15, 0x6c, 0xcf, 0x44, 0x5d, 0xd4, 0x07, 0xc5,
+	0xa0, 0xaa, 0x64, 0x2d, 0x83, 0x9e, 0x93, 0x40, 0x5a, 0x6a, 0x78, 0x54, 0xc3, 0x7d, 0x04, 0xad,
+	0xba, 0x7b, 0xdd, 0x98, 0xab, 0x75, 0x48, 0x85, 0x90, 0x35, 0xad, 0xd7, 0x52, 0x68, 0x27, 0x1e,
+	0x54, 0xe0, 0x6a, 0xd2, 0xd8, 0x8f, 0xa8, 0xc2, 0xc6, 0xfc, 0xf1, 0xa0, 0x18, 0x16, 0xbb, 0xed,
+	0x60, 0x01, 0x2e, 0x4f, 0x92, 0xc1, 0x05, 0xe8, 0x2c, 0x92, 0x79, 0x8a, 0x47, 0x64, 0x42, 0xf0,
+	0xd8, 0xff, 0x17, 0x74, 0xc0, 0xd9, 0x22, 0xb9, 0x4b, 0x66, 0xcb, 0xc4, 0x6f, 0x05, 0xe7, 0x00,
+	0x90, 0xfb, 0xf4, 0x01, 0xcf, 0xe7, 0x64, 0x96, 0xf8, 0x9e, 0xb9, 0x67, 0x64, 0x8c, 0x67, 0x45,
+	0x46, 0xf0, 0xd2, 0x6f, 0x0f, 0xbf, 0x5a, 0xa0, 0xbf, 0x92, 0x5b, 0xf8, 0x67, 0xee, 0x61, 0xf7,
+	0xe4, 0xd7, 0xa9, 0x49, 0x9d, 0xb6, 0x9e, 0x86, 0x3f, 0x62, 0x2e, 0x37, 0x54, 0x70, 0x28, 0x2b,
+	0x1e, 0x72, 0x26, 0xec, 0x4e, 0x4d, 0x85, 0x6a, 0xad, 0x7f, 0x69, 0xf4, 0xc6, 0x9e, 0x6f, 0x5e,
+	0x7b, 0x1a, 0xc7, 0xef, 0x5e, 0x6f, 0xea, 0xac, 0xe2, 0x52, 0x43, 0x07, 0x0d, 0xca, 0x22, 0x68,
+	0x3a, 0xd0, 0x1f, 0x0d, 0x9f, 0xc7, 0xa5, 0xce, 0x8f, 0x7c, 0x9e, 0x45, 0xb9, 0xe5, 0x3f, 0xbd,
+	0xbe, 0x7b, 0x44, 0x28, 0x2e, 0x35, 0x42, 0xc7, 0x09, 0x84, 0xb2, 0x08, 0x21, 0x3b, 0xf3, 0xfc,
+	0xdf, 0x06, 0x8b, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x6f, 0x10, 0xf2, 0xe9, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/frequency_cap_level.pb.go b/googleapis/ads/googleads/v3/enums/frequency_cap_level.pb.go
new file mode 100644
index 0000000..d645970
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/frequency_cap_level.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/frequency_cap_level.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The level on which the cap is to be applied (e.g ad group ad, ad group).
+// Cap is applied to all the resources of this level.
+type FrequencyCapLevelEnum_FrequencyCapLevel int32
+
+const (
+	// Not specified.
+	FrequencyCapLevelEnum_UNSPECIFIED FrequencyCapLevelEnum_FrequencyCapLevel = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapLevelEnum_UNKNOWN FrequencyCapLevelEnum_FrequencyCapLevel = 1
+	// The cap is applied at the ad group ad level.
+	FrequencyCapLevelEnum_AD_GROUP_AD FrequencyCapLevelEnum_FrequencyCapLevel = 2
+	// The cap is applied at the ad group level.
+	FrequencyCapLevelEnum_AD_GROUP FrequencyCapLevelEnum_FrequencyCapLevel = 3
+	// The cap is applied at the campaign level.
+	FrequencyCapLevelEnum_CAMPAIGN FrequencyCapLevelEnum_FrequencyCapLevel = 4
+)
+
+var FrequencyCapLevelEnum_FrequencyCapLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_AD",
+	3: "AD_GROUP",
+	4: "CAMPAIGN",
+}
+
+var FrequencyCapLevelEnum_FrequencyCapLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_GROUP_AD": 2,
+	"AD_GROUP":    3,
+	"CAMPAIGN":    4,
+}
+
+func (x FrequencyCapLevelEnum_FrequencyCapLevel) String() string {
+	return proto.EnumName(FrequencyCapLevelEnum_FrequencyCapLevel_name, int32(x))
+}
+
+func (FrequencyCapLevelEnum_FrequencyCapLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7591f0d13b525d9e, []int{0, 0}
+}
+
+// Container for enum describing the level on which the cap is to be applied.
+type FrequencyCapLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapLevelEnum) Reset()         { *m = FrequencyCapLevelEnum{} }
+func (m *FrequencyCapLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapLevelEnum) ProtoMessage()    {}
+func (*FrequencyCapLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7591f0d13b525d9e, []int{0}
+}
+
+func (m *FrequencyCapLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Marshal(b, m, deterministic)
+}
+func (m *FrequencyCapLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapLevelEnum.Merge(m, src)
+}
+func (m *FrequencyCapLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Size(m)
+}
+func (m *FrequencyCapLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FrequencyCapLevelEnum_FrequencyCapLevel", FrequencyCapLevelEnum_FrequencyCapLevel_name, FrequencyCapLevelEnum_FrequencyCapLevel_value)
+	proto.RegisterType((*FrequencyCapLevelEnum)(nil), "google.ads.googleads.v3.enums.FrequencyCapLevelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/frequency_cap_level.proto", fileDescriptor_7591f0d13b525d9e)
+}
+
+var fileDescriptor_7591f0d13b525d9e = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x9d, 0xa8, 0x64, 0x82, 0xb5, 0xa0, 0x07, 0x71, 0x87, 0xed, 0x01, 0x92, 0x43, 0x0e,
+	0x42, 0x3c, 0x65, 0xff, 0xca, 0x50, 0xbb, 0xa2, 0x6c, 0x82, 0x14, 0x4b, 0x5c, 0x63, 0x18, 0x74,
+	0x49, 0x5d, 0xb6, 0x8a, 0xaf, 0xe3, 0xd1, 0x47, 0xf1, 0x51, 0xf4, 0x25, 0x24, 0x89, 0xed, 0x65,
+	0xe8, 0xa5, 0x7c, 0xfd, 0x7d, 0x7f, 0xf8, 0xf2, 0x81, 0x0b, 0xa1, 0x94, 0xc8, 0x39, 0x62, 0x99,
+	0x46, 0x0e, 0x1a, 0x54, 0x62, 0xc4, 0xe5, 0x66, 0xa9, 0xd1, 0xf3, 0x8a, 0xbf, 0x6c, 0xb8, 0x9c,
+	0xbf, 0xa5, 0x73, 0x56, 0xa4, 0x39, 0x2f, 0x79, 0x0e, 0x8b, 0x95, 0x5a, 0xab, 0xa0, 0xed, 0xd4,
+	0x90, 0x65, 0x1a, 0xd6, 0x46, 0x58, 0x62, 0x68, 0x8d, 0x67, 0xe7, 0x55, 0x6e, 0xb1, 0x40, 0x4c,
+	0x4a, 0xb5, 0x66, 0xeb, 0x85, 0x92, 0xda, 0x99, 0xbb, 0xaf, 0xe0, 0x64, 0x54, 0x25, 0xf7, 0x59,
+	0x71, 0x6d, 0x72, 0x87, 0x72, 0xb3, 0xec, 0x3e, 0x82, 0xe3, 0x2d, 0x22, 0x38, 0x02, 0xad, 0x69,
+	0x74, 0x17, 0x0f, 0xfb, 0xe3, 0xd1, 0x78, 0x38, 0xf0, 0x77, 0x82, 0x16, 0xd8, 0x9f, 0x46, 0x57,
+	0xd1, 0xe4, 0x3e, 0xf2, 0x1b, 0x86, 0xa5, 0x83, 0x34, 0xbc, 0x9d, 0x4c, 0xe3, 0x94, 0x0e, 0x7c,
+	0x2f, 0x38, 0x04, 0x07, 0xd5, 0xc1, 0x6f, 0x9a, 0xbf, 0x3e, 0xbd, 0x89, 0xe9, 0x38, 0x8c, 0xfc,
+	0xdd, 0xde, 0x77, 0x03, 0x74, 0xe6, 0x6a, 0x09, 0xff, 0x2d, 0xdf, 0x3b, 0xdd, 0xea, 0x10, 0x9b,
+	0xda, 0x71, 0xe3, 0xa1, 0xf7, 0x6b, 0x14, 0x2a, 0x67, 0x52, 0x40, 0xb5, 0x12, 0x48, 0x70, 0x69,
+	0x1f, 0x55, 0xcd, 0x57, 0x2c, 0xf4, 0x1f, 0x6b, 0x5e, 0xda, 0xef, 0xbb, 0xd7, 0x0c, 0x29, 0xfd,
+	0xf0, 0xda, 0xa1, 0x8b, 0xa2, 0x99, 0x86, 0x0e, 0x1a, 0x34, 0xc3, 0xd0, 0x0c, 0xa1, 0x3f, 0x2b,
+	0x3e, 0xa1, 0x99, 0x4e, 0x6a, 0x3e, 0x99, 0xe1, 0xc4, 0xf2, 0x5f, 0x5e, 0xc7, 0x1d, 0x09, 0xa1,
+	0x99, 0x26, 0xa4, 0x56, 0x10, 0x32, 0xc3, 0x84, 0x58, 0xcd, 0xd3, 0x9e, 0x2d, 0x86, 0x7f, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xc2, 0x8b, 0x44, 0x67, 0xe5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/frequency_cap_time_unit.pb.go b/googleapis/ads/googleads/v3/enums/frequency_cap_time_unit.pb.go
new file mode 100644
index 0000000..cb655b7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/frequency_cap_time_unit.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/frequency_cap_time_unit.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Unit of time the cap is defined at (e.g. day, week).
+type FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit int32
+
+const (
+	// Not specified.
+	FrequencyCapTimeUnitEnum_UNSPECIFIED FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapTimeUnitEnum_UNKNOWN FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 1
+	// The cap would define limit per one day.
+	FrequencyCapTimeUnitEnum_DAY FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 2
+	// The cap would define limit per one week.
+	FrequencyCapTimeUnitEnum_WEEK FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 3
+	// The cap would define limit per one month.
+	FrequencyCapTimeUnitEnum_MONTH FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 4
+)
+
+var FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DAY",
+	3: "WEEK",
+	4: "MONTH",
+}
+
+var FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DAY":         2,
+	"WEEK":        3,
+	"MONTH":       4,
+}
+
+func (x FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit) String() string {
+	return proto.EnumName(FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name, int32(x))
+}
+
+func (FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0acbdb304da9e43b, []int{0, 0}
+}
+
+// Container for enum describing the unit of time the cap is defined at.
+type FrequencyCapTimeUnitEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapTimeUnitEnum) Reset()         { *m = FrequencyCapTimeUnitEnum{} }
+func (m *FrequencyCapTimeUnitEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapTimeUnitEnum) ProtoMessage()    {}
+func (*FrequencyCapTimeUnitEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0acbdb304da9e43b, []int{0}
+}
+
+func (m *FrequencyCapTimeUnitEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Marshal(b, m, deterministic)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapTimeUnitEnum.Merge(m, src)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Size(m)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapTimeUnitEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapTimeUnitEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit", FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name, FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_value)
+	proto.RegisterType((*FrequencyCapTimeUnitEnum)(nil), "google.ads.googleads.v3.enums.FrequencyCapTimeUnitEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/frequency_cap_time_unit.proto", fileDescriptor_0acbdb304da9e43b)
+}
+
+var fileDescriptor_0acbdb304da9e43b = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4f, 0xc2, 0x30,
+	0x18, 0xc6, 0x65, 0xa0, 0x68, 0x39, 0xb8, 0x2c, 0x1e, 0xd4, 0xc8, 0x01, 0x3e, 0x40, 0x77, 0xd8,
+	0xad, 0x9c, 0x0a, 0x0c, 0x24, 0xc4, 0x41, 0x94, 0x3f, 0xd1, 0x2c, 0x21, 0x95, 0xd5, 0xa6, 0x09,
+	0x6b, 0x27, 0xed, 0x48, 0xfc, 0x3a, 0x1e, 0xfd, 0x28, 0x7e, 0x14, 0x0f, 0x7e, 0x06, 0xb3, 0xd6,
+	0x71, 0x42, 0x2f, 0xcb, 0x93, 0x3d, 0xef, 0xef, 0xe9, 0xf3, 0xbe, 0xa0, 0xc3, 0xa4, 0x64, 0x1b,
+	0xea, 0x93, 0x44, 0xf9, 0x56, 0x16, 0x6a, 0x17, 0xf8, 0x54, 0xe4, 0xa9, 0xf2, 0x5f, 0xb6, 0xf4,
+	0x35, 0xa7, 0x62, 0xfd, 0xb6, 0x5a, 0x93, 0x6c, 0xa5, 0x79, 0x4a, 0x57, 0xb9, 0xe0, 0x1a, 0x66,
+	0x5b, 0xa9, 0xa5, 0xd7, 0xb4, 0x04, 0x24, 0x89, 0x82, 0x7b, 0x18, 0xee, 0x02, 0x68, 0xe0, 0xeb,
+	0x9b, 0x32, 0x3b, 0xe3, 0x3e, 0x11, 0x42, 0x6a, 0xa2, 0xb9, 0x14, 0xca, 0xc2, 0x6d, 0x01, 0x2e,
+	0x07, 0x65, 0x7a, 0x8f, 0x64, 0x33, 0x9e, 0xd2, 0xb9, 0xe0, 0x3a, 0x14, 0x79, 0xda, 0xbe, 0x07,
+	0x17, 0x87, 0x3c, 0xef, 0x1c, 0x34, 0xe6, 0xd1, 0xc3, 0x34, 0xec, 0x8d, 0x06, 0xa3, 0xb0, 0xef,
+	0x1e, 0x79, 0x0d, 0x50, 0x9f, 0x47, 0xe3, 0x68, 0xb2, 0x8c, 0xdc, 0x8a, 0x57, 0x07, 0xd5, 0x3e,
+	0x7e, 0x74, 0x1d, 0xef, 0x14, 0xd4, 0x96, 0x61, 0x38, 0x76, 0xab, 0xde, 0x19, 0x38, 0xbe, 0x9b,
+	0x44, 0xb3, 0x5b, 0xb7, 0xd6, 0xfd, 0xae, 0x80, 0xd6, 0x5a, 0xa6, 0xf0, 0xdf, 0xce, 0xdd, 0xab,
+	0x43, 0xef, 0x4e, 0x8b, 0xc2, 0xd3, 0xca, 0x53, 0xf7, 0x97, 0x65, 0x72, 0x43, 0x04, 0x83, 0x72,
+	0xcb, 0x7c, 0x46, 0x85, 0x59, 0xa7, 0x3c, 0x5e, 0xc6, 0xd5, 0x1f, 0xb7, 0xec, 0x98, 0xef, 0xbb,
+	0x53, 0x1d, 0x62, 0xfc, 0xe1, 0x34, 0x87, 0x36, 0x0a, 0x27, 0x0a, 0x5a, 0x59, 0xa8, 0x45, 0x00,
+	0x8b, 0xfd, 0xd5, 0x67, 0xe9, 0xc7, 0x38, 0x51, 0xf1, 0xde, 0x8f, 0x17, 0x41, 0x6c, 0xfc, 0x2f,
+	0xa7, 0x65, 0x7f, 0x22, 0x84, 0x13, 0x85, 0xd0, 0x7e, 0x02, 0xa1, 0x45, 0x80, 0x90, 0x99, 0x79,
+	0x3e, 0x31, 0xc5, 0x82, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x6b, 0xc4, 0x54, 0xe3, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/gender_type.pb.go b/googleapis/ads/googleads/v3/enums/gender_type.pb.go
new file mode 100644
index 0000000..feb8d5e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/gender_type.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/gender_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of demographic genders (e.g. female).
+type GenderTypeEnum_GenderType int32
+
+const (
+	// Not specified.
+	GenderTypeEnum_UNSPECIFIED GenderTypeEnum_GenderType = 0
+	// Used for return value only. Represents value unknown in this version.
+	GenderTypeEnum_UNKNOWN GenderTypeEnum_GenderType = 1
+	// Male.
+	GenderTypeEnum_MALE GenderTypeEnum_GenderType = 10
+	// Female.
+	GenderTypeEnum_FEMALE GenderTypeEnum_GenderType = 11
+	// Undetermined gender.
+	GenderTypeEnum_UNDETERMINED GenderTypeEnum_GenderType = 20
+)
+
+var GenderTypeEnum_GenderType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	10: "MALE",
+	11: "FEMALE",
+	20: "UNDETERMINED",
+}
+
+var GenderTypeEnum_GenderType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"MALE":         10,
+	"FEMALE":       11,
+	"UNDETERMINED": 20,
+}
+
+func (x GenderTypeEnum_GenderType) String() string {
+	return proto.EnumName(GenderTypeEnum_GenderType_name, int32(x))
+}
+
+func (GenderTypeEnum_GenderType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_51e52a2335997197, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic genders.
+type GenderTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenderTypeEnum) Reset()         { *m = GenderTypeEnum{} }
+func (m *GenderTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*GenderTypeEnum) ProtoMessage()    {}
+func (*GenderTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_51e52a2335997197, []int{0}
+}
+
+func (m *GenderTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderTypeEnum.Unmarshal(m, b)
+}
+func (m *GenderTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *GenderTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderTypeEnum.Merge(m, src)
+}
+func (m *GenderTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_GenderTypeEnum.Size(m)
+}
+func (m *GenderTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GenderTypeEnum_GenderType", GenderTypeEnum_GenderType_name, GenderTypeEnum_GenderType_value)
+	proto.RegisterType((*GenderTypeEnum)(nil), "google.ads.googleads.v3.enums.GenderTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/gender_type.proto", fileDescriptor_51e52a2335997197)
+}
+
+var fileDescriptor_51e52a2335997197 = []byte{
+	// 307 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4f, 0xf2, 0x30,
+	0x1c, 0x7e, 0xe1, 0x35, 0x68, 0x7e, 0x18, 0x59, 0x1a, 0x4f, 0x46, 0x0e, 0xf0, 0x01, 0xba, 0x43,
+	0x6f, 0xf5, 0x54, 0xa4, 0x10, 0xa2, 0x54, 0x82, 0x80, 0x89, 0x59, 0x62, 0xa6, 0x6d, 0x1a, 0x12,
+	0xd6, 0x2e, 0xeb, 0x20, 0xe1, 0xeb, 0x78, 0xf4, 0xa3, 0xf8, 0x39, 0x3c, 0xf9, 0x29, 0xcc, 0x3a,
+	0x36, 0x4e, 0x7a, 0x59, 0x9e, 0xfc, 0x9e, 0x3f, 0x7b, 0xfa, 0x40, 0xa8, 0xad, 0xd5, 0x1b, 0x15,
+	0xc6, 0xd2, 0x1d, 0x60, 0x81, 0x76, 0x24, 0x54, 0x66, 0x9b, 0xb8, 0x50, 0x2b, 0x23, 0x55, 0xf6,
+	0x92, 0xef, 0x53, 0x85, 0xd3, 0xcc, 0xe6, 0x16, 0x75, 0x4b, 0x15, 0x8e, 0xa5, 0xc3, 0xb5, 0x01,
+	0xef, 0x08, 0xf6, 0x86, 0xab, 0xeb, 0x2a, 0x2f, 0x5d, 0x87, 0xb1, 0x31, 0x36, 0x8f, 0xf3, 0xb5,
+	0x35, 0xae, 0x34, 0xf7, 0x25, 0x5c, 0x8c, 0x7d, 0xe2, 0x62, 0x9f, 0x2a, 0x6e, 0xb6, 0x49, 0x7f,
+	0x0e, 0x70, 0xbc, 0xa0, 0x0e, 0xb4, 0x97, 0xe2, 0x71, 0xc6, 0x6f, 0x27, 0xa3, 0x09, 0x1f, 0x06,
+	0xff, 0x50, 0x1b, 0x4e, 0x97, 0xe2, 0x4e, 0x3c, 0x3c, 0x89, 0xa0, 0x81, 0xce, 0xe0, 0x64, 0xca,
+	0xee, 0x79, 0x00, 0x08, 0xa0, 0x35, 0xe2, 0x1e, 0xb7, 0x51, 0x00, 0xe7, 0x4b, 0x31, 0xe4, 0x0b,
+	0x3e, 0x9f, 0x4e, 0x04, 0x1f, 0x06, 0x97, 0x83, 0xaf, 0x06, 0xf4, 0xde, 0x6c, 0x82, 0xff, 0x6c,
+	0x3a, 0xe8, 0x1c, 0xff, 0x3b, 0x2b, 0xca, 0xcd, 0x1a, 0xcf, 0x83, 0x83, 0x43, 0xdb, 0x4d, 0x6c,
+	0x34, 0xb6, 0x99, 0x2e, 0x06, 0xf0, 0xd5, 0xab, 0x71, 0xd2, 0xb5, 0xfb, 0x65, 0xab, 0x1b, 0xff,
+	0x7d, 0x6f, 0xfe, 0x1f, 0x33, 0xf6, 0xd1, 0xec, 0x8e, 0xcb, 0x28, 0x26, 0x1d, 0x2e, 0x61, 0x81,
+	0x56, 0x04, 0x17, 0xaf, 0x76, 0x9f, 0x15, 0x1f, 0x31, 0xe9, 0xa2, 0x9a, 0x8f, 0x56, 0x24, 0xf2,
+	0xfc, 0x77, 0xb3, 0x57, 0x1e, 0x29, 0x65, 0xd2, 0x51, 0x5a, 0x2b, 0x28, 0x5d, 0x11, 0x4a, 0xbd,
+	0xe6, 0xb5, 0xe5, 0x8b, 0x91, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x97, 0xaf, 0x35, 0x59, 0xc3,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/geo_target_constant_status.pb.go b/googleapis/ads/googleads/v3/enums/geo_target_constant_status.pb.go
new file mode 100644
index 0000000..6667e74
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/geo_target_constant_status.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/geo_target_constant_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible statuses of a geo target constant.
+type GeoTargetConstantStatusEnum_GeoTargetConstantStatus int32
+
+const (
+	// No value has been specified.
+	GeoTargetConstantStatusEnum_UNSPECIFIED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	GeoTargetConstantStatusEnum_UNKNOWN GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 1
+	// The geo target constant is valid.
+	GeoTargetConstantStatusEnum_ENABLED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 2
+	// The geo target constant is obsolete and will be removed.
+	GeoTargetConstantStatusEnum_REMOVAL_PLANNED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 3
+)
+
+var GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVAL_PLANNED",
+}
+
+var GeoTargetConstantStatusEnum_GeoTargetConstantStatus_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"ENABLED":         2,
+	"REMOVAL_PLANNED": 3,
+}
+
+func (x GeoTargetConstantStatusEnum_GeoTargetConstantStatus) String() string {
+	return proto.EnumName(GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name, int32(x))
+}
+
+func (GeoTargetConstantStatusEnum_GeoTargetConstantStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c37ed64745a799b7, []int{0, 0}
+}
+
+// Container for describing the status of a geo target constant.
+type GeoTargetConstantStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetConstantStatusEnum) Reset()         { *m = GeoTargetConstantStatusEnum{} }
+func (m *GeoTargetConstantStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantStatusEnum) ProtoMessage()    {}
+func (*GeoTargetConstantStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c37ed64745a799b7, []int{0}
+}
+
+func (m *GeoTargetConstantStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantStatusEnum.Merge(m, src)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Size(m)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus", GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name, GeoTargetConstantStatusEnum_GeoTargetConstantStatus_value)
+	proto.RegisterType((*GeoTargetConstantStatusEnum)(nil), "google.ads.googleads.v3.enums.GeoTargetConstantStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/geo_target_constant_status.proto", fileDescriptor_c37ed64745a799b7)
+}
+
+var fileDescriptor_c37ed64745a799b7 = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x6b, 0xc2, 0x30,
+	0x18, 0x9d, 0x15, 0x36, 0x88, 0x07, 0x4b, 0x77, 0x18, 0x6c, 0x7a, 0xd0, 0x1f, 0x90, 0x1e, 0x7a,
+	0xcb, 0x60, 0x90, 0x6a, 0x26, 0x32, 0x17, 0xcb, 0x9c, 0x1d, 0x1b, 0x85, 0x92, 0xd9, 0x10, 0x04,
+	0xcd, 0x27, 0x26, 0xca, 0x7e, 0xcf, 0x8e, 0xfb, 0x29, 0xfb, 0x29, 0xbb, 0xed, 0x1f, 0x8c, 0xa6,
+	0xea, 0xad, 0xbb, 0x84, 0x97, 0xbc, 0xef, 0xbd, 0xbc, 0xef, 0xa1, 0x3b, 0x05, 0xa0, 0x56, 0x32,
+	0x14, 0x85, 0x09, 0x2b, 0x58, 0xa2, 0x7d, 0x14, 0x4a, 0xbd, 0x5b, 0x9b, 0x50, 0x49, 0xc8, 0xad,
+	0xd8, 0x2a, 0x69, 0xf3, 0x05, 0x68, 0x63, 0x85, 0xb6, 0xb9, 0xb1, 0xc2, 0xee, 0x0c, 0xde, 0x6c,
+	0xc1, 0x42, 0xd0, 0xad, 0x44, 0x58, 0x14, 0x06, 0x9f, 0xf4, 0x78, 0x1f, 0x61, 0xa7, 0xbf, 0xee,
+	0x1c, 0xed, 0x37, 0xcb, 0x50, 0x68, 0x0d, 0x56, 0xd8, 0x25, 0xe8, 0x83, 0xb8, 0xff, 0x81, 0x6e,
+	0x46, 0x12, 0x9e, 0x9d, 0xff, 0xe0, 0x60, 0x3f, 0x73, 0xee, 0x4c, 0xef, 0xd6, 0xfd, 0x57, 0x74,
+	0x55, 0x43, 0x07, 0x6d, 0xd4, 0x9a, 0xf3, 0x59, 0xc2, 0x06, 0xe3, 0xfb, 0x31, 0x1b, 0xfa, 0x67,
+	0x41, 0x0b, 0x5d, 0xcc, 0xf9, 0x03, 0x9f, 0xbe, 0x70, 0xbf, 0x51, 0x5e, 0x18, 0xa7, 0xf1, 0x84,
+	0x0d, 0x7d, 0x2f, 0xb8, 0x44, 0xed, 0x27, 0xf6, 0x38, 0x4d, 0xe9, 0x24, 0x4f, 0x26, 0x94, 0x73,
+	0x36, 0xf4, 0x9b, 0xf1, 0x6f, 0x03, 0xf5, 0x16, 0xb0, 0xc6, 0xff, 0xa6, 0x8f, 0x3b, 0x35, 0xdf,
+	0x27, 0x65, 0xfa, 0xa4, 0xf1, 0x16, 0x1f, 0xe4, 0x0a, 0x56, 0x42, 0x2b, 0x0c, 0x5b, 0x15, 0x2a,
+	0xa9, 0xdd, 0x6e, 0xc7, 0x32, 0x37, 0x4b, 0x53, 0xd3, 0xed, 0xad, 0x3b, 0x3f, 0xbd, 0xe6, 0x88,
+	0xd2, 0x2f, 0xaf, 0x3b, 0xaa, 0xac, 0x68, 0x61, 0x70, 0x05, 0x4b, 0x94, 0x46, 0xb8, 0x6c, 0xc2,
+	0x7c, 0x1f, 0xf9, 0x8c, 0x16, 0x26, 0x3b, 0xf1, 0x59, 0x1a, 0x65, 0x8e, 0xff, 0xf1, 0x7a, 0xd5,
+	0x23, 0x21, 0xb4, 0x30, 0x84, 0x9c, 0x26, 0x08, 0x49, 0x23, 0x42, 0xdc, 0xcc, 0xfb, 0xb9, 0x0b,
+	0x16, 0xfd, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x6d, 0x83, 0x46, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/geo_targeting_restriction.pb.go b/googleapis/ads/googleads/v3/enums/geo_targeting_restriction.pb.go
new file mode 100644
index 0000000..f2da6f5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/geo_targeting_restriction.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/geo_targeting_restriction.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A restriction used to determine if the request context's
+// geo should be matched.
+type GeoTargetingRestrictionEnum_GeoTargetingRestriction int32
+
+const (
+	// Not specified.
+	GeoTargetingRestrictionEnum_UNSPECIFIED GeoTargetingRestrictionEnum_GeoTargetingRestriction = 0
+	// Used for return value only. Represents value unknown in this version.
+	GeoTargetingRestrictionEnum_UNKNOWN GeoTargetingRestrictionEnum_GeoTargetingRestriction = 1
+	// Indicates that request context should match the physical location of
+	// the user.
+	GeoTargetingRestrictionEnum_LOCATION_OF_PRESENCE GeoTargetingRestrictionEnum_GeoTargetingRestriction = 2
+)
+
+var GeoTargetingRestrictionEnum_GeoTargetingRestriction_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOCATION_OF_PRESENCE",
+}
+
+var GeoTargetingRestrictionEnum_GeoTargetingRestriction_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"LOCATION_OF_PRESENCE": 2,
+}
+
+func (x GeoTargetingRestrictionEnum_GeoTargetingRestriction) String() string {
+	return proto.EnumName(GeoTargetingRestrictionEnum_GeoTargetingRestriction_name, int32(x))
+}
+
+func (GeoTargetingRestrictionEnum_GeoTargetingRestriction) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4bebe6870a1193bf, []int{0, 0}
+}
+
+// Message describing feed item geo targeting restriction.
+type GeoTargetingRestrictionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetingRestrictionEnum) Reset()         { *m = GeoTargetingRestrictionEnum{} }
+func (m *GeoTargetingRestrictionEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetingRestrictionEnum) ProtoMessage()    {}
+func (*GeoTargetingRestrictionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4bebe6870a1193bf, []int{0}
+}
+
+func (m *GeoTargetingRestrictionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetingRestrictionEnum.Merge(m, src)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Size(m)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetingRestrictionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetingRestrictionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction", GeoTargetingRestrictionEnum_GeoTargetingRestriction_name, GeoTargetingRestrictionEnum_GeoTargetingRestriction_value)
+	proto.RegisterType((*GeoTargetingRestrictionEnum)(nil), "google.ads.googleads.v3.enums.GeoTargetingRestrictionEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/geo_targeting_restriction.proto", fileDescriptor_4bebe6870a1193bf)
+}
+
+var fileDescriptor_4bebe6870a1193bf = []byte{
+	// 311 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4a, 0x03, 0x31,
+	0x18, 0xc5, 0xed, 0x08, 0x0a, 0xe9, 0xc2, 0x32, 0x08, 0x8a, 0xb6, 0x8b, 0xf6, 0x00, 0x99, 0x45,
+	0x76, 0x11, 0x17, 0x69, 0x4d, 0x4b, 0x51, 0x32, 0x63, 0xff, 0x09, 0x32, 0x30, 0xc4, 0x4e, 0x08,
+	0x03, 0x6d, 0x32, 0x4c, 0xd2, 0x1e, 0xc8, 0xa5, 0x47, 0xf1, 0x28, 0xee, 0xbc, 0x81, 0x4c, 0xe2,
+	0xd4, 0x55, 0xdd, 0x84, 0x47, 0xde, 0xf7, 0x7b, 0xf9, 0xf2, 0xc0, 0xbd, 0xd4, 0x5a, 0x6e, 0x44,
+	0xc4, 0x73, 0x13, 0x79, 0x59, 0xab, 0x3d, 0x8a, 0x84, 0xda, 0x6d, 0x4d, 0x24, 0x85, 0xce, 0x2c,
+	0xaf, 0xa4, 0xb0, 0x85, 0x92, 0x59, 0x25, 0x8c, 0xad, 0x8a, 0xb5, 0x2d, 0xb4, 0x82, 0x65, 0xa5,
+	0xad, 0x0e, 0x7b, 0x9e, 0x81, 0x3c, 0x37, 0xf0, 0x80, 0xc3, 0x3d, 0x82, 0x0e, 0xbf, 0xe9, 0x36,
+	0xe9, 0x65, 0x11, 0x71, 0xa5, 0xb4, 0xe5, 0x35, 0x6b, 0x3c, 0x3c, 0x28, 0xc1, 0xed, 0x44, 0xe8,
+	0x45, 0x13, 0x3f, 0xfb, 0x4b, 0xa7, 0x6a, 0xb7, 0x1d, 0x3c, 0x83, 0xab, 0x23, 0x76, 0x78, 0x01,
+	0xda, 0x4b, 0x36, 0x4f, 0xe8, 0x68, 0x3a, 0x9e, 0xd2, 0x87, 0xce, 0x49, 0xd8, 0x06, 0xe7, 0x4b,
+	0xf6, 0xc8, 0xe2, 0x17, 0xd6, 0x69, 0x85, 0xd7, 0xe0, 0xf2, 0x29, 0x1e, 0x91, 0xc5, 0x34, 0x66,
+	0x59, 0x3c, 0xce, 0x92, 0x19, 0x9d, 0x53, 0x36, 0xa2, 0x9d, 0x60, 0xf8, 0xdd, 0x02, 0xfd, 0xb5,
+	0xde, 0xc2, 0x7f, 0xb7, 0x1e, 0x76, 0x8f, 0x3c, 0x9b, 0xd4, 0x5b, 0x27, 0xad, 0xd7, 0xe1, 0x2f,
+	0x2e, 0xf5, 0x86, 0x2b, 0x09, 0x75, 0x25, 0x23, 0x29, 0x94, 0xfb, 0x53, 0xd3, 0x61, 0x59, 0x98,
+	0x23, 0x95, 0xde, 0xb9, 0xf3, 0x3d, 0x38, 0x9d, 0x10, 0xf2, 0x11, 0xf4, 0x26, 0x3e, 0x8a, 0xe4,
+	0x06, 0x7a, 0x59, 0xab, 0x15, 0x82, 0x75, 0x03, 0xe6, 0xb3, 0xf1, 0x53, 0x92, 0x9b, 0xf4, 0xe0,
+	0xa7, 0x2b, 0x94, 0x3a, 0xff, 0x2b, 0xe8, 0xfb, 0x4b, 0x8c, 0x49, 0x6e, 0x30, 0x3e, 0x4c, 0x60,
+	0xbc, 0x42, 0x18, 0xbb, 0x99, 0xb7, 0x33, 0xb7, 0x18, 0xfa, 0x09, 0x00, 0x00, 0xff, 0xff, 0xf0,
+	0x1b, 0xb4, 0x13, 0xea, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/geo_targeting_type.pb.go b/googleapis/ads/googleads/v3/enums/geo_targeting_type.pb.go
new file mode 100644
index 0000000..79e5e5d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/geo_targeting_type.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/geo_targeting_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible geo targeting types.
+type GeoTargetingTypeEnum_GeoTargetingType int32
+
+const (
+	// Not specified.
+	GeoTargetingTypeEnum_UNSPECIFIED GeoTargetingTypeEnum_GeoTargetingType = 0
+	// The value is unknown in this version.
+	GeoTargetingTypeEnum_UNKNOWN GeoTargetingTypeEnum_GeoTargetingType = 1
+	// Location the user is interested in while making the query.
+	GeoTargetingTypeEnum_AREA_OF_INTEREST GeoTargetingTypeEnum_GeoTargetingType = 2
+	// Location of the user issuing the query.
+	GeoTargetingTypeEnum_LOCATION_OF_PRESENCE GeoTargetingTypeEnum_GeoTargetingType = 3
+)
+
+var GeoTargetingTypeEnum_GeoTargetingType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AREA_OF_INTEREST",
+	3: "LOCATION_OF_PRESENCE",
+}
+
+var GeoTargetingTypeEnum_GeoTargetingType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"AREA_OF_INTEREST":     2,
+	"LOCATION_OF_PRESENCE": 3,
+}
+
+func (x GeoTargetingTypeEnum_GeoTargetingType) String() string {
+	return proto.EnumName(GeoTargetingTypeEnum_GeoTargetingType_name, int32(x))
+}
+
+func (GeoTargetingTypeEnum_GeoTargetingType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_89674afbd6140ba4, []int{0, 0}
+}
+
+// Container for enum describing possible geo targeting types.
+type GeoTargetingTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetingTypeEnum) Reset()         { *m = GeoTargetingTypeEnum{} }
+func (m *GeoTargetingTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetingTypeEnum) ProtoMessage()    {}
+func (*GeoTargetingTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_89674afbd6140ba4, []int{0}
+}
+
+func (m *GeoTargetingTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetingTypeEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetingTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetingTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetingTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetingTypeEnum.Merge(m, src)
+}
+func (m *GeoTargetingTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetingTypeEnum.Size(m)
+}
+func (m *GeoTargetingTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetingTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetingTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GeoTargetingTypeEnum_GeoTargetingType", GeoTargetingTypeEnum_GeoTargetingType_name, GeoTargetingTypeEnum_GeoTargetingType_value)
+	proto.RegisterType((*GeoTargetingTypeEnum)(nil), "google.ads.googleads.v3.enums.GeoTargetingTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/geo_targeting_type.proto", fileDescriptor_89674afbd6140ba4)
+}
+
+var fileDescriptor_89674afbd6140ba4 = []byte{
+	// 321 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x1d, 0x28, 0x64, 0x07, 0x4b, 0x99, 0x20, 0xe2, 0x0e, 0xdb, 0x03, 0xa4, 0x87, 0x82,
+	0x87, 0x78, 0xca, 0x66, 0x36, 0x8a, 0x92, 0x96, 0xad, 0x9b, 0x20, 0x85, 0x5a, 0x6d, 0x08, 0x85,
+	0x2d, 0x29, 0x4b, 0x36, 0xdc, 0xeb, 0x78, 0xf4, 0x51, 0x7c, 0x94, 0x3d, 0x85, 0x34, 0xb1, 0x3d,
+	0x0c, 0xf4, 0x12, 0x3e, 0x7e, 0xdf, 0x1f, 0xbe, 0x7c, 0xe0, 0x8e, 0x4b, 0xc9, 0xd7, 0xcc, 0xcf,
+	0x0b, 0xe5, 0x5b, 0x58, 0xa3, 0x7d, 0xe0, 0x33, 0xb1, 0xdb, 0x28, 0x9f, 0x33, 0x99, 0xe9, 0x7c,
+	0xcb, 0x99, 0x2e, 0x05, 0xcf, 0xf4, 0xa1, 0x62, 0xb0, 0xda, 0x4a, 0x2d, 0xbd, 0x81, 0x15, 0xc3,
+	0xbc, 0x50, 0xb0, 0xf5, 0xc1, 0x7d, 0x00, 0x8d, 0xef, 0xe6, 0xb6, 0x89, 0xad, 0x4a, 0x3f, 0x17,
+	0x42, 0xea, 0x5c, 0x97, 0x52, 0x28, 0x6b, 0x1e, 0x7d, 0x80, 0xfe, 0x8c, 0xc9, 0xa4, 0xc9, 0x4d,
+	0x0e, 0x15, 0x23, 0x62, 0xb7, 0x19, 0xbd, 0x02, 0xf7, 0xf4, 0xee, 0x5d, 0x82, 0xde, 0x92, 0x2e,
+	0x62, 0x32, 0x09, 0xa7, 0x21, 0x79, 0x70, 0xcf, 0xbc, 0x1e, 0xb8, 0x58, 0xd2, 0x47, 0x1a, 0x3d,
+	0x53, 0xb7, 0xe3, 0xf5, 0x81, 0x8b, 0xe7, 0x04, 0x67, 0xd1, 0x34, 0x0b, 0x69, 0x42, 0xe6, 0x64,
+	0x91, 0xb8, 0x8e, 0x77, 0x0d, 0xfa, 0x4f, 0xd1, 0x04, 0x27, 0x61, 0x44, 0x6b, 0x26, 0x9e, 0x93,
+	0x05, 0xa1, 0x13, 0xe2, 0x76, 0xc7, 0xc7, 0x0e, 0x18, 0xbe, 0xcb, 0x0d, 0xfc, 0xb7, 0xfd, 0xf8,
+	0xea, 0xb4, 0x45, 0x5c, 0xd7, 0x8e, 0x3b, 0x2f, 0xe3, 0x5f, 0x1f, 0x97, 0xeb, 0x5c, 0x70, 0x28,
+	0xb7, 0xdc, 0xe7, 0x4c, 0x98, 0x4f, 0x35, 0xeb, 0x55, 0xa5, 0xfa, 0x63, 0xcc, 0x7b, 0xf3, 0x7e,
+	0x3a, 0xdd, 0x19, 0xc6, 0x5f, 0xce, 0x60, 0x66, 0xa3, 0x70, 0xa1, 0xa0, 0x85, 0x35, 0x5a, 0x05,
+	0xb0, 0x5e, 0x42, 0x7d, 0x37, 0x7c, 0x8a, 0x0b, 0x95, 0xb6, 0x7c, 0xba, 0x0a, 0x52, 0xc3, 0x1f,
+	0x9d, 0xa1, 0x3d, 0x22, 0x84, 0x0b, 0x85, 0x50, 0xab, 0x40, 0x68, 0x15, 0x20, 0x64, 0x34, 0x6f,
+	0xe7, 0xa6, 0x58, 0xf0, 0x13, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x2a, 0xe0, 0x62, 0xe4, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/google_ads_field_category.pb.go b/googleapis/ads/googleads/v3/enums/google_ads_field_category.pb.go
new file mode 100644
index 0000000..ca20ed0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/google_ads_field_category.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/google_ads_field_category.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The category of the artifact.
+type GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory int32
+
+const (
+	// Unspecified
+	GoogleAdsFieldCategoryEnum_UNSPECIFIED GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 0
+	// Unknown
+	GoogleAdsFieldCategoryEnum_UNKNOWN GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 1
+	// The described artifact is a resource.
+	GoogleAdsFieldCategoryEnum_RESOURCE GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 2
+	// The described artifact is a field and is an attribute of a resource.
+	// Including a resource attribute field in a query may segment the query if
+	// the resource to which it is attributed segments the resource found in
+	// the FROM clause.
+	GoogleAdsFieldCategoryEnum_ATTRIBUTE GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 3
+	// The described artifact is a field and always segments search queries.
+	GoogleAdsFieldCategoryEnum_SEGMENT GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 5
+	// The described artifact is a field and is a metric. It never segments
+	// search queries.
+	GoogleAdsFieldCategoryEnum_METRIC GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 6
+)
+
+var GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RESOURCE",
+	3: "ATTRIBUTE",
+	5: "SEGMENT",
+	6: "METRIC",
+}
+
+var GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"RESOURCE":    2,
+	"ATTRIBUTE":   3,
+	"SEGMENT":     5,
+	"METRIC":      6,
+}
+
+func (x GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory) String() string {
+	return proto.EnumName(GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name, int32(x))
+}
+
+func (GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_da64c7d50b3b5323, []int{0, 0}
+}
+
+// Container for enum that determines if the described artifact is a resource
+// or a field, and if it is a field, when it segments search queries.
+type GoogleAdsFieldCategoryEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GoogleAdsFieldCategoryEnum) Reset()         { *m = GoogleAdsFieldCategoryEnum{} }
+func (m *GoogleAdsFieldCategoryEnum) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFieldCategoryEnum) ProtoMessage()    {}
+func (*GoogleAdsFieldCategoryEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da64c7d50b3b5323, []int{0}
+}
+
+func (m *GoogleAdsFieldCategoryEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Unmarshal(m, b)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFieldCategoryEnum.Merge(m, src)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Size(m)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFieldCategoryEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFieldCategoryEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory", GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name, GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_value)
+	proto.RegisterType((*GoogleAdsFieldCategoryEnum)(nil), "google.ads.googleads.v3.enums.GoogleAdsFieldCategoryEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/google_ads_field_category.proto", fileDescriptor_da64c7d50b3b5323)
+}
+
+var fileDescriptor_da64c7d50b3b5323 = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xe3, 0x30,
+	0x14, 0x9e, 0xa4, 0x9a, 0xce, 0x8c, 0x3b, 0x88, 0x28, 0x0b, 0x16, 0x85, 0x2e, 0xda, 0x03, 0x38,
+	0x8b, 0xec, 0x8c, 0x58, 0x38, 0xc1, 0xad, 0x22, 0xd4, 0xb4, 0x4a, 0x93, 0x22, 0xa1, 0x48, 0x95,
+	0xa9, 0x83, 0x15, 0x29, 0xb5, 0xab, 0x3a, 0xad, 0xc4, 0x15, 0x38, 0x06, 0x4b, 0x8e, 0xc2, 0x51,
+	0x58, 0x71, 0x04, 0x14, 0xa7, 0xc9, 0xaa, 0xb0, 0xb1, 0xac, 0xf7, 0xfd, 0xbc, 0xf7, 0x7d, 0xe0,
+	0x86, 0x4b, 0xc9, 0x8b, 0xcc, 0xa1, 0x4c, 0x39, 0xf5, 0xb7, 0xfa, 0x1d, 0x5c, 0x27, 0x13, 0xfb,
+	0x4d, 0x33, 0x5a, 0x51, 0xa6, 0x56, 0x4f, 0x79, 0x56, 0xb0, 0xd5, 0x9a, 0x96, 0x19, 0x97, 0xbb,
+	0x67, 0xb8, 0xdd, 0xc9, 0x52, 0xda, 0x83, 0x9a, 0x00, 0x29, 0x53, 0xb0, 0x95, 0xc3, 0x83, 0x0b,
+	0xb5, 0xbc, 0x7f, 0xd5, 0xb8, 0x6f, 0x73, 0x87, 0x0a, 0x21, 0x4b, 0x5a, 0xe6, 0x52, 0xa8, 0x5a,
+	0x3c, 0x7a, 0x31, 0x40, 0x7f, 0xa2, 0x09, 0x98, 0xa9, 0x71, 0x65, 0xef, 0x1f, 0xdd, 0x89, 0xd8,
+	0x6f, 0x46, 0x05, 0xb8, 0x38, 0x8d, 0xda, 0xe7, 0xa0, 0x97, 0x84, 0x8b, 0x39, 0xf1, 0x83, 0x71,
+	0x40, 0x6e, 0xad, 0x5f, 0x76, 0x0f, 0xfc, 0x49, 0xc2, 0xbb, 0x70, 0x76, 0x1f, 0x5a, 0x86, 0xfd,
+	0x1f, 0xfc, 0x8d, 0xc8, 0x62, 0x96, 0x44, 0x3e, 0xb1, 0x4c, 0xfb, 0x0c, 0xfc, 0xc3, 0x71, 0x1c,
+	0x05, 0x5e, 0x12, 0x13, 0xab, 0x53, 0x31, 0x17, 0x64, 0x32, 0x25, 0x61, 0x6c, 0xfd, 0xb6, 0x01,
+	0xe8, 0x4e, 0x49, 0x1c, 0x05, 0xbe, 0xd5, 0xf5, 0x3e, 0x0d, 0x30, 0x5c, 0xcb, 0x0d, 0xfc, 0x31,
+	0x90, 0x77, 0x79, 0xfa, 0xa2, 0x79, 0x95, 0x67, 0x6e, 0x3c, 0x78, 0x47, 0x35, 0x97, 0x05, 0x15,
+	0x1c, 0xca, 0x1d, 0x77, 0x78, 0x26, 0x74, 0xda, 0xa6, 0xdd, 0x6d, 0xae, 0xbe, 0x29, 0xfb, 0x5a,
+	0xbf, 0xaf, 0x66, 0x67, 0x82, 0xf1, 0x9b, 0x39, 0xa8, 0x37, 0x41, 0xcc, 0x14, 0x6c, 0x97, 0xc2,
+	0xa5, 0x0b, 0xab, 0x6e, 0xd4, 0x7b, 0x83, 0xa7, 0x98, 0xa9, 0xb4, 0xc5, 0xd3, 0xa5, 0x9b, 0x6a,
+	0xfc, 0xc3, 0x1c, 0xd6, 0x43, 0x84, 0x30, 0x53, 0x08, 0xb5, 0x0c, 0x84, 0x96, 0x2e, 0x42, 0x9a,
+	0xf3, 0xd8, 0xd5, 0x87, 0xb9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x4f, 0xe4, 0x9a, 0x04,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/google_ads_field_data_type.pb.go b/googleapis/ads/googleads/v3/enums/google_ads_field_data_type.pb.go
new file mode 100644
index 0000000..9d3b483
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/google_ads_field_data_type.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/google_ads_field_data_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// These are the various types a GoogleAdsService artifact may take on.
+type GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType int32
+
+const (
+	// Unspecified
+	GoogleAdsFieldDataTypeEnum_UNSPECIFIED GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 0
+	// Unknown
+	GoogleAdsFieldDataTypeEnum_UNKNOWN GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 1
+	// Maps to google.protobuf.BoolValue
+	//
+	// Applicable operators:  =, !=
+	GoogleAdsFieldDataTypeEnum_BOOLEAN GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 2
+	// Maps to google.protobuf.StringValue. It can be compared using the set of
+	// operators specific to dates however.
+	//
+	// Applicable operators:  =, <, >, <=, >=, BETWEEN, DURING, and IN
+	GoogleAdsFieldDataTypeEnum_DATE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 3
+	// Maps to google.protobuf.DoubleValue
+	//
+	// Applicable operators:  =, !=, <, >, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_DOUBLE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 4
+	// Maps to an enum. It's specific definition can be found at type_url.
+	//
+	// Applicable operators:  =, !=, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_ENUM GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 5
+	// Maps to google.protobuf.FloatValue
+	//
+	// Applicable operators:  =, !=, <, >, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_FLOAT GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 6
+	// Maps to google.protobuf.Int32Value
+	//
+	// Applicable operators:  =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_INT32 GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 7
+	// Maps to google.protobuf.Int64Value
+	//
+	// Applicable operators:  =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_INT64 GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 8
+	// Maps to a protocol buffer message type. The data type's details can be
+	// found in type_url.
+	//
+	// No operators work with MESSAGE fields.
+	GoogleAdsFieldDataTypeEnum_MESSAGE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 9
+	// Maps to google.protobuf.StringValue. Represents the resource name
+	// (unique id) of a resource or one of its foreign keys.
+	//
+	// No operators work with RESOURCE_NAME fields.
+	GoogleAdsFieldDataTypeEnum_RESOURCE_NAME GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 10
+	// Maps to google.protobuf.StringValue.
+	//
+	// Applicable operators:  =, !=, LIKE, NOT LIKE, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_STRING GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 11
+	// Maps to google.protobuf.UInt64Value
+	//
+	// Applicable operators:  =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_UINT64 GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 12
+)
+
+var GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BOOLEAN",
+	3:  "DATE",
+	4:  "DOUBLE",
+	5:  "ENUM",
+	6:  "FLOAT",
+	7:  "INT32",
+	8:  "INT64",
+	9:  "MESSAGE",
+	10: "RESOURCE_NAME",
+	11: "STRING",
+	12: "UINT64",
+}
+
+var GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"BOOLEAN":       2,
+	"DATE":          3,
+	"DOUBLE":        4,
+	"ENUM":          5,
+	"FLOAT":         6,
+	"INT32":         7,
+	"INT64":         8,
+	"MESSAGE":       9,
+	"RESOURCE_NAME": 10,
+	"STRING":        11,
+	"UINT64":        12,
+}
+
+func (x GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType) String() string {
+	return proto.EnumName(GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name, int32(x))
+}
+
+func (GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_77e81755cfd3557b, []int{0, 0}
+}
+
+// Container holding the various data types.
+type GoogleAdsFieldDataTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GoogleAdsFieldDataTypeEnum) Reset()         { *m = GoogleAdsFieldDataTypeEnum{} }
+func (m *GoogleAdsFieldDataTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFieldDataTypeEnum) ProtoMessage()    {}
+func (*GoogleAdsFieldDataTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_77e81755cfd3557b, []int{0}
+}
+
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Unmarshal(m, b)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Merge(m, src)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Size(m)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFieldDataTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFieldDataTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType", GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name, GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_value)
+	proto.RegisterType((*GoogleAdsFieldDataTypeEnum)(nil), "google.ads.googleads.v3.enums.GoogleAdsFieldDataTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/google_ads_field_data_type.proto", fileDescriptor_77e81755cfd3557b)
+}
+
+var fileDescriptor_77e81755cfd3557b = []byte{
+	// 397 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcf, 0x8e, 0x93, 0x40,
+	0x18, 0x17, 0x76, 0xb7, 0xbb, 0x3b, 0xd5, 0x38, 0x72, 0xf0, 0xb0, 0xba, 0x87, 0xed, 0x03, 0x0c,
+	0x89, 0x18, 0x0f, 0x63, 0x62, 0x32, 0x94, 0x29, 0x21, 0xb6, 0x43, 0x53, 0xa0, 0x26, 0x86, 0x84,
+	0x8c, 0x0e, 0x12, 0x92, 0x96, 0x21, 0x1d, 0xda, 0xa4, 0xaf, 0xe3, 0xd1, 0x67, 0xf0, 0x09, 0x7c,
+	0x05, 0xdf, 0xc0, 0x93, 0x8f, 0x60, 0x06, 0x0a, 0xa7, 0xba, 0x17, 0xf2, 0xe3, 0xfb, 0xfd, 0xf9,
+	0xe0, 0xf7, 0x81, 0x0f, 0x85, 0x94, 0xc5, 0x26, 0xb7, 0xb9, 0x50, 0x76, 0x07, 0x35, 0x3a, 0x38,
+	0x76, 0x5e, 0xed, 0xb7, 0xfd, 0x28, 0xe3, 0x42, 0x65, 0xdf, 0xca, 0x7c, 0x23, 0x32, 0xc1, 0x1b,
+	0x9e, 0x35, 0xc7, 0x3a, 0x47, 0xf5, 0x4e, 0x36, 0xd2, 0xba, 0xef, 0x14, 0x88, 0x0b, 0x85, 0x06,
+	0x3f, 0x3a, 0x38, 0xa8, 0xf5, 0xdf, 0xbd, 0xee, 0xe3, 0xeb, 0xd2, 0xe6, 0x55, 0x25, 0x1b, 0xde,
+	0x94, 0xb2, 0x52, 0x9d, 0x79, 0xf2, 0xdb, 0x00, 0x77, 0x7e, 0x2b, 0x20, 0x42, 0xcd, 0x74, 0xbe,
+	0xc7, 0x1b, 0x1e, 0x1f, 0xeb, 0x9c, 0x56, 0xfb, 0xed, 0xe4, 0xa7, 0x01, 0x5e, 0x9e, 0xa7, 0xad,
+	0xe7, 0x60, 0x9c, 0xb0, 0x68, 0x49, 0xa7, 0xc1, 0x2c, 0xa0, 0x1e, 0x7c, 0x62, 0x8d, 0xc1, 0x75,
+	0xc2, 0x3e, 0xb2, 0xf0, 0x13, 0x83, 0x86, 0x7e, 0x71, 0xc3, 0x70, 0x4e, 0x09, 0x83, 0xa6, 0x75,
+	0x03, 0x2e, 0x3d, 0x12, 0x53, 0x78, 0x61, 0x01, 0x30, 0xf2, 0xc2, 0xc4, 0x9d, 0x53, 0x78, 0xa9,
+	0xa7, 0x94, 0x25, 0x0b, 0x78, 0x65, 0xdd, 0x82, 0xab, 0xd9, 0x3c, 0x24, 0x31, 0x1c, 0x69, 0x18,
+	0xb0, 0xd8, 0x79, 0x03, 0xaf, 0x4f, 0xf0, 0xdd, 0x5b, 0x78, 0xa3, 0xd3, 0x16, 0x34, 0x8a, 0x88,
+	0x4f, 0xe1, 0xad, 0xf5, 0x02, 0x3c, 0x5b, 0xd1, 0x28, 0x4c, 0x56, 0x53, 0x9a, 0x31, 0xb2, 0xa0,
+	0x10, 0xe8, 0xd8, 0x28, 0x5e, 0x05, 0xcc, 0x87, 0x63, 0x8d, 0x93, 0xce, 0xf7, 0xd4, 0xfd, 0x6b,
+	0x80, 0x87, 0xaf, 0x72, 0x8b, 0x1e, 0x6d, 0xc8, 0x7d, 0x75, 0xfe, 0x0f, 0x97, 0xba, 0xa0, 0xa5,
+	0xf1, 0xd9, 0x3d, 0xb9, 0x0b, 0xb9, 0xe1, 0x55, 0x81, 0xe4, 0xae, 0xb0, 0x8b, 0xbc, 0x6a, 0xeb,
+	0xeb, 0xef, 0x55, 0x97, 0xea, 0x3f, 0xe7, 0x7b, 0xdf, 0x3e, 0xbf, 0x9b, 0x17, 0x3e, 0x21, 0x3f,
+	0xcc, 0xfb, 0x6e, 0x13, 0x22, 0x42, 0xa1, 0x61, 0x29, 0x5a, 0x3b, 0x48, 0x97, 0xad, 0x7e, 0xf5,
+	0x7c, 0x4a, 0x84, 0x4a, 0x07, 0x3e, 0x5d, 0x3b, 0x69, 0xcb, 0xff, 0x31, 0x1f, 0xba, 0x21, 0xc6,
+	0x44, 0x28, 0x8c, 0x07, 0x05, 0xc6, 0x6b, 0x07, 0xe3, 0x56, 0xf3, 0x65, 0xd4, 0x7e, 0x98, 0xf3,
+	0x2f, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x94, 0x9b, 0x29, 0x56, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/hotel_date_selection_type.pb.go b/googleapis/ads/googleads/v3/enums/hotel_date_selection_type.pb.go
new file mode 100644
index 0000000..21bc1cd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/hotel_date_selection_type.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/hotel_date_selection_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible hotel date selection types.
+type HotelDateSelectionTypeEnum_HotelDateSelectionType int32
+
+const (
+	// Not specified.
+	HotelDateSelectionTypeEnum_UNSPECIFIED HotelDateSelectionTypeEnum_HotelDateSelectionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	HotelDateSelectionTypeEnum_UNKNOWN HotelDateSelectionTypeEnum_HotelDateSelectionType = 1
+	// Dates selected by default.
+	HotelDateSelectionTypeEnum_DEFAULT_SELECTION HotelDateSelectionTypeEnum_HotelDateSelectionType = 50
+	// Dates selected by the user.
+	HotelDateSelectionTypeEnum_USER_SELECTED HotelDateSelectionTypeEnum_HotelDateSelectionType = 51
+)
+
+var HotelDateSelectionTypeEnum_HotelDateSelectionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	50: "DEFAULT_SELECTION",
+	51: "USER_SELECTED",
+}
+
+var HotelDateSelectionTypeEnum_HotelDateSelectionType_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"DEFAULT_SELECTION": 50,
+	"USER_SELECTED":     51,
+}
+
+func (x HotelDateSelectionTypeEnum_HotelDateSelectionType) String() string {
+	return proto.EnumName(HotelDateSelectionTypeEnum_HotelDateSelectionType_name, int32(x))
+}
+
+func (HotelDateSelectionTypeEnum_HotelDateSelectionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9cc39d800b620f94, []int{0, 0}
+}
+
+// Container for enum describing possible hotel date selection types
+type HotelDateSelectionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelDateSelectionTypeEnum) Reset()         { *m = HotelDateSelectionTypeEnum{} }
+func (m *HotelDateSelectionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelDateSelectionTypeEnum) ProtoMessage()    {}
+func (*HotelDateSelectionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9cc39d800b620f94, []int{0}
+}
+
+func (m *HotelDateSelectionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Unmarshal(m, b)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelDateSelectionTypeEnum.Merge(m, src)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Size(m)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelDateSelectionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelDateSelectionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType", HotelDateSelectionTypeEnum_HotelDateSelectionType_name, HotelDateSelectionTypeEnum_HotelDateSelectionType_value)
+	proto.RegisterType((*HotelDateSelectionTypeEnum)(nil), "google.ads.googleads.v3.enums.HotelDateSelectionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/hotel_date_selection_type.proto", fileDescriptor_9cc39d800b620f94)
+}
+
+var fileDescriptor_9cc39d800b620f94 = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4a, 0xc3, 0x40,
+	0x14, 0xb4, 0x15, 0x14, 0xb6, 0x88, 0x69, 0x40, 0x0f, 0xd5, 0x1e, 0xda, 0x0f, 0xd8, 0x80, 0x7b,
+	0x5b, 0xf1, 0x90, 0x36, 0xdb, 0x5a, 0x2c, 0x69, 0x31, 0x4d, 0x05, 0x09, 0xc4, 0xb5, 0x59, 0x62,
+	0x21, 0xdd, 0x0d, 0xdd, 0x6d, 0xa1, 0x17, 0x3f, 0xc6, 0xa3, 0x9f, 0xe2, 0xa7, 0x78, 0xf2, 0x13,
+	0x24, 0xbb, 0x4d, 0x4e, 0xd5, 0xcb, 0x63, 0x78, 0xf3, 0x66, 0x78, 0x33, 0xe0, 0x2e, 0x15, 0x22,
+	0xcd, 0x98, 0x43, 0x13, 0xe9, 0x18, 0x58, 0xa0, 0x2d, 0x72, 0x18, 0xdf, 0xac, 0xa4, 0xf3, 0x26,
+	0x14, 0xcb, 0xe2, 0x84, 0x2a, 0x16, 0x4b, 0x96, 0xb1, 0x85, 0x5a, 0x0a, 0x1e, 0xab, 0x5d, 0xce,
+	0x60, 0xbe, 0x16, 0x4a, 0xd8, 0x6d, 0xa3, 0x81, 0x34, 0x91, 0xb0, 0x92, 0xc3, 0x2d, 0x82, 0x5a,
+	0xde, 0xba, 0x2e, 0xdd, 0xf3, 0xa5, 0x43, 0x39, 0x17, 0x8a, 0x16, 0x06, 0xd2, 0x88, 0xbb, 0xef,
+	0xa0, 0x75, 0x5f, 0xf8, 0x7b, 0x54, 0xb1, 0xa0, 0x74, 0x9f, 0xed, 0x72, 0x46, 0xf8, 0x66, 0xd5,
+	0x7d, 0x01, 0x97, 0x87, 0x59, 0xfb, 0x1c, 0x34, 0x42, 0x3f, 0x98, 0x92, 0xfe, 0x68, 0x30, 0x22,
+	0x9e, 0x75, 0x64, 0x37, 0xc0, 0x69, 0xe8, 0x3f, 0xf8, 0x93, 0x27, 0xdf, 0xaa, 0xd9, 0x17, 0xa0,
+	0xe9, 0x91, 0x81, 0x1b, 0x8e, 0x67, 0x71, 0x40, 0xc6, 0xa4, 0x3f, 0x1b, 0x4d, 0x7c, 0xeb, 0xc6,
+	0x6e, 0x82, 0xb3, 0x30, 0x20, 0x8f, 0xfb, 0x1d, 0xf1, 0x2c, 0xd4, 0xfb, 0xa9, 0x81, 0xce, 0x42,
+	0xac, 0xe0, 0xbf, 0x19, 0x7a, 0x57, 0x87, 0xbf, 0x98, 0x16, 0x11, 0xa6, 0xb5, 0xe7, 0xde, 0x5e,
+	0x9d, 0x8a, 0x8c, 0xf2, 0x14, 0x8a, 0x75, 0xea, 0xa4, 0x8c, 0xeb, 0x80, 0x65, 0xa1, 0xf9, 0x52,
+	0xfe, 0xd1, 0xef, 0xad, 0x9e, 0x1f, 0xf5, 0xe3, 0xa1, 0xeb, 0x7e, 0xd6, 0xdb, 0x43, 0x63, 0xe5,
+	0x26, 0x12, 0x1a, 0x58, 0xa0, 0x39, 0x82, 0x45, 0x1f, 0xf2, 0xab, 0xe4, 0x23, 0x37, 0x91, 0x51,
+	0xc5, 0x47, 0x73, 0x14, 0x69, 0xfe, 0xbb, 0xde, 0x31, 0x4b, 0x8c, 0xdd, 0x44, 0x62, 0x5c, 0x5d,
+	0x60, 0x3c, 0x47, 0x18, 0xeb, 0x9b, 0xd7, 0x13, 0xfd, 0x18, 0xfa, 0x0d, 0x00, 0x00, 0xff, 0xff,
+	0x00, 0x57, 0x9c, 0xba, 0xf7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/hotel_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/hotel_placeholder_field.pb.go
new file mode 100644
index 0000000..22c8e94
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/hotel_placeholder_field.pb.go
@@ -0,0 +1,230 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/hotel_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Hotel placeholder fields.
+type HotelPlaceholderFieldEnum_HotelPlaceholderField int32
+
+const (
+	// Not specified.
+	HotelPlaceholderFieldEnum_UNSPECIFIED HotelPlaceholderFieldEnum_HotelPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	HotelPlaceholderFieldEnum_UNKNOWN HotelPlaceholderFieldEnum_HotelPlaceholderField = 1
+	// Data Type: STRING. Required. Unique ID.
+	HotelPlaceholderFieldEnum_PROPERTY_ID HotelPlaceholderFieldEnum_HotelPlaceholderField = 2
+	// Data Type: STRING. Required. Main headline with property name to be shown
+	// in dynamic ad.
+	HotelPlaceholderFieldEnum_PROPERTY_NAME HotelPlaceholderFieldEnum_HotelPlaceholderField = 3
+	// Data Type: STRING. Name of destination to be shown in dynamic ad.
+	HotelPlaceholderFieldEnum_DESTINATION_NAME HotelPlaceholderFieldEnum_HotelPlaceholderField = 4
+	// Data Type: STRING. Description of destination to be shown in dynamic ad.
+	HotelPlaceholderFieldEnum_DESCRIPTION HotelPlaceholderFieldEnum_HotelPlaceholderField = 5
+	// Data Type: STRING. Complete property address, including postal code.
+	HotelPlaceholderFieldEnum_ADDRESS HotelPlaceholderFieldEnum_HotelPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	HotelPlaceholderFieldEnum_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	HotelPlaceholderFieldEnum_FORMATTED_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	HotelPlaceholderFieldEnum_SALE_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	HotelPlaceholderFieldEnum_FORMATTED_SALE_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	HotelPlaceholderFieldEnum_IMAGE_URL HotelPlaceholderFieldEnum_HotelPlaceholderField = 11
+	// Data Type: STRING. Category of property used to group like items together
+	// for recommendation engine.
+	HotelPlaceholderFieldEnum_CATEGORY HotelPlaceholderFieldEnum_HotelPlaceholderField = 12
+	// Data Type: INT64. Star rating (1 to 5) used to group like items
+	// together for recommendation engine.
+	HotelPlaceholderFieldEnum_STAR_RATING HotelPlaceholderFieldEnum_HotelPlaceholderField = 13
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	HotelPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS HotelPlaceholderFieldEnum_HotelPlaceholderField = 14
+	// Data Type: URL_LIST. Required. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific flight for ads that show multiple
+	// flights.
+	HotelPlaceholderFieldEnum_FINAL_URLS HotelPlaceholderFieldEnum_HotelPlaceholderField = 15
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	HotelPlaceholderFieldEnum_FINAL_MOBILE_URLS HotelPlaceholderFieldEnum_HotelPlaceholderField = 16
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	HotelPlaceholderFieldEnum_TRACKING_URL HotelPlaceholderFieldEnum_HotelPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	HotelPlaceholderFieldEnum_ANDROID_APP_LINK HotelPlaceholderFieldEnum_HotelPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended property IDs to show together
+	// with this item.
+	HotelPlaceholderFieldEnum_SIMILAR_PROPERTY_IDS HotelPlaceholderFieldEnum_HotelPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	HotelPlaceholderFieldEnum_IOS_APP_LINK HotelPlaceholderFieldEnum_HotelPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	HotelPlaceholderFieldEnum_IOS_APP_STORE_ID HotelPlaceholderFieldEnum_HotelPlaceholderField = 21
+)
+
+var HotelPlaceholderFieldEnum_HotelPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROPERTY_ID",
+	3:  "PROPERTY_NAME",
+	4:  "DESTINATION_NAME",
+	5:  "DESCRIPTION",
+	6:  "ADDRESS",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "CATEGORY",
+	13: "STAR_RATING",
+	14: "CONTEXTUAL_KEYWORDS",
+	15: "FINAL_URLS",
+	16: "FINAL_MOBILE_URLS",
+	17: "TRACKING_URL",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_PROPERTY_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+
+var HotelPlaceholderFieldEnum_HotelPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"PROPERTY_ID":          2,
+	"PROPERTY_NAME":        3,
+	"DESTINATION_NAME":     4,
+	"DESCRIPTION":          5,
+	"ADDRESS":              6,
+	"PRICE":                7,
+	"FORMATTED_PRICE":      8,
+	"SALE_PRICE":           9,
+	"FORMATTED_SALE_PRICE": 10,
+	"IMAGE_URL":            11,
+	"CATEGORY":             12,
+	"STAR_RATING":          13,
+	"CONTEXTUAL_KEYWORDS":  14,
+	"FINAL_URLS":           15,
+	"FINAL_MOBILE_URLS":    16,
+	"TRACKING_URL":         17,
+	"ANDROID_APP_LINK":     18,
+	"SIMILAR_PROPERTY_IDS": 19,
+	"IOS_APP_LINK":         20,
+	"IOS_APP_STORE_ID":     21,
+}
+
+func (x HotelPlaceholderFieldEnum_HotelPlaceholderField) String() string {
+	return proto.EnumName(HotelPlaceholderFieldEnum_HotelPlaceholderField_name, int32(x))
+}
+
+func (HotelPlaceholderFieldEnum_HotelPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_af03dec519ec03be, []int{0, 0}
+}
+
+// Values for Hotel placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type HotelPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelPlaceholderFieldEnum) Reset()         { *m = HotelPlaceholderFieldEnum{} }
+func (m *HotelPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelPlaceholderFieldEnum) ProtoMessage()    {}
+func (*HotelPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af03dec519ec03be, []int{0}
+}
+
+func (m *HotelPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Size(m)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.HotelPlaceholderFieldEnum_HotelPlaceholderField", HotelPlaceholderFieldEnum_HotelPlaceholderField_name, HotelPlaceholderFieldEnum_HotelPlaceholderField_value)
+	proto.RegisterType((*HotelPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.HotelPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/hotel_placeholder_field.proto", fileDescriptor_af03dec519ec03be)
+}
+
+var fileDescriptor_af03dec519ec03be = []byte{
+	// 532 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x8e, 0xda, 0x3c,
+	0x14, 0xfd, 0x80, 0x6f, 0x7e, 0x30, 0x30, 0x18, 0x03, 0xea, 0xef, 0x2c, 0x66, 0x1e, 0x20, 0x59,
+	0x64, 0x97, 0x59, 0x99, 0xc4, 0xa4, 0x16, 0xc1, 0x89, 0x6c, 0xc3, 0x94, 0x0a, 0x29, 0x4a, 0x27,
+	0x69, 0x06, 0x29, 0x24, 0x88, 0x30, 0xf3, 0x40, 0x5d, 0x76, 0xd3, 0xf7, 0xa8, 0xd4, 0x17, 0xe9,
+	0xaa, 0x8f, 0x50, 0x39, 0x19, 0x60, 0x54, 0xb5, 0xdd, 0x44, 0xd7, 0xe7, 0xdc, 0x73, 0x7c, 0xe3,
+	0x7b, 0xc0, 0x4d, 0x92, 0xe7, 0x49, 0x1a, 0xeb, 0x61, 0x54, 0xe8, 0x55, 0xa9, 0xaa, 0x47, 0x43,
+	0x8f, 0xb3, 0x87, 0x75, 0xa1, 0xdf, 0xe7, 0xbb, 0x38, 0x0d, 0x36, 0x69, 0x78, 0x17, 0xdf, 0xe7,
+	0x69, 0x14, 0x6f, 0x83, 0x4f, 0xab, 0x38, 0x8d, 0xb4, 0xcd, 0x36, 0xdf, 0xe5, 0xe8, 0xb2, 0x52,
+	0x68, 0x61, 0x54, 0x68, 0x07, 0xb1, 0xf6, 0x68, 0x68, 0xa5, 0xf8, 0xf5, 0xdb, 0xbd, 0xf7, 0x66,
+	0xa5, 0x87, 0x59, 0x96, 0xef, 0xc2, 0xdd, 0x2a, 0xcf, 0x8a, 0x4a, 0x7c, 0xfd, 0xbd, 0x01, 0x5e,
+	0xbd, 0x53, 0xf6, 0xfe, 0xd1, 0x7d, 0xac, 0xcc, 0x49, 0xf6, 0xb0, 0xbe, 0xfe, 0xda, 0x00, 0xc3,
+	0x3f, 0xb2, 0xa8, 0x0b, 0x5a, 0x33, 0x26, 0x7c, 0x62, 0xd1, 0x31, 0x25, 0x36, 0xfc, 0x0f, 0xb5,
+	0xc0, 0xd9, 0x8c, 0x4d, 0x98, 0x77, 0xcb, 0x60, 0x4d, 0xb1, 0x3e, 0xf7, 0x7c, 0xc2, 0xe5, 0x22,
+	0xa0, 0x36, 0xac, 0xa3, 0x1e, 0xe8, 0x1c, 0x00, 0x86, 0xa7, 0x04, 0x36, 0xd0, 0x00, 0x40, 0x9b,
+	0x08, 0x49, 0x19, 0x96, 0xd4, 0x63, 0x15, 0xfa, 0xbf, 0x52, 0xda, 0x44, 0x58, 0x9c, 0xfa, 0x0a,
+	0x85, 0x27, 0xca, 0x17, 0xdb, 0x36, 0x27, 0x42, 0xc0, 0x53, 0xd4, 0x04, 0x27, 0x3e, 0xa7, 0x16,
+	0x81, 0x67, 0xa8, 0x0f, 0xba, 0x63, 0x8f, 0x4f, 0xb1, 0x94, 0xc4, 0x0e, 0x2a, 0xf0, 0x1c, 0x5d,
+	0x00, 0x20, 0xb0, 0x4b, 0x9e, 0xce, 0x4d, 0xf4, 0x12, 0x0c, 0x8e, 0x4d, 0xcf, 0x18, 0x80, 0x3a,
+	0xa0, 0x49, 0xa7, 0xd8, 0x21, 0xc1, 0x8c, 0xbb, 0xb0, 0x85, 0xda, 0xe0, 0xdc, 0xc2, 0x92, 0x38,
+	0x1e, 0x5f, 0xc0, 0xb6, 0x1a, 0x42, 0x48, 0xcc, 0x03, 0x8e, 0x25, 0x65, 0x0e, 0xec, 0xa0, 0x17,
+	0xa0, 0x6f, 0x79, 0x4c, 0x92, 0xf7, 0x72, 0x86, 0xdd, 0x60, 0x42, 0x16, 0xb7, 0x1e, 0xb7, 0x05,
+	0xbc, 0x50, 0x17, 0x8e, 0x29, 0xc3, 0xae, 0xb2, 0x11, 0xb0, 0x8b, 0x86, 0xa0, 0x57, 0x9d, 0xa7,
+	0xde, 0x88, 0xba, 0xa4, 0x82, 0x21, 0x82, 0xa0, 0x2d, 0x39, 0xb6, 0x26, 0x94, 0x39, 0xe5, 0x85,
+	0x3d, 0xf5, 0xf7, 0x98, 0xd9, 0xdc, 0xa3, 0x76, 0x80, 0x7d, 0x3f, 0x70, 0x29, 0x9b, 0x40, 0xa4,
+	0xe6, 0x15, 0x74, 0x4a, 0x5d, 0xcc, 0x83, 0x67, 0xef, 0x27, 0x60, 0x5f, 0x39, 0x50, 0x4f, 0x1c,
+	0x7b, 0x07, 0xca, 0x61, 0x8f, 0x08, 0xe9, 0x71, 0xa2, 0x1e, 0x7a, 0x38, 0xfa, 0x59, 0x03, 0x57,
+	0x77, 0xf9, 0x5a, 0xfb, 0x67, 0x26, 0x46, 0x6f, 0xca, 0xa5, 0x16, 0xbf, 0x6f, 0xd5, 0x57, 0x91,
+	0xf0, 0x6b, 0x1f, 0x46, 0x4f, 0xea, 0x24, 0x4f, 0xc3, 0x2c, 0xd1, 0xf2, 0x6d, 0xa2, 0x27, 0x71,
+	0x56, 0x06, 0x66, 0x1f, 0xcf, 0xcd, 0xaa, 0xf8, 0x4b, 0x5a, 0x6f, 0xca, 0xef, 0xe7, 0x7a, 0xc3,
+	0xc1, 0xf8, 0x4b, 0xfd, 0xd2, 0xa9, 0xac, 0x70, 0x54, 0x68, 0x55, 0xa9, 0xaa, 0xb9, 0xa1, 0xa9,
+	0x7c, 0x15, 0xdf, 0xf6, 0xfc, 0x12, 0x47, 0xc5, 0xf2, 0xc0, 0x2f, 0xe7, 0xc6, 0xb2, 0xe4, 0x7f,
+	0xd4, 0xaf, 0x2a, 0xd0, 0x34, 0x71, 0x54, 0x98, 0xe6, 0xa1, 0xc3, 0x34, 0xe7, 0x86, 0x69, 0x96,
+	0x3d, 0x1f, 0x4f, 0xcb, 0xc1, 0x8c, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x61, 0x73, 0x43, 0x77,
+	0x45, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/hotel_price_bucket.pb.go b/googleapis/ads/googleads/v3/enums/hotel_price_bucket.pb.go
new file mode 100644
index 0000000..e93ce51
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/hotel_price_bucket.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/hotel_price_bucket.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible hotel price buckets.
+type HotelPriceBucketEnum_HotelPriceBucket int32
+
+const (
+	// Not specified.
+	HotelPriceBucketEnum_UNSPECIFIED HotelPriceBucketEnum_HotelPriceBucket = 0
+	// The value is unknown in this version.
+	HotelPriceBucketEnum_UNKNOWN HotelPriceBucketEnum_HotelPriceBucket = 1
+	// Tied for lowest price. Partner is within a small variance of the lowest
+	// price.
+	HotelPriceBucketEnum_LOWEST_TIED HotelPriceBucketEnum_HotelPriceBucket = 3
+	// Not lowest price. Partner is not within a small variance of the lowest
+	// price.
+	HotelPriceBucketEnum_NOT_LOWEST HotelPriceBucketEnum_HotelPriceBucket = 4
+)
+
+var HotelPriceBucketEnum_HotelPriceBucket_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "LOWEST_TIED",
+	4: "NOT_LOWEST",
+}
+
+var HotelPriceBucketEnum_HotelPriceBucket_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"LOWEST_TIED": 3,
+	"NOT_LOWEST":  4,
+}
+
+func (x HotelPriceBucketEnum_HotelPriceBucket) String() string {
+	return proto.EnumName(HotelPriceBucketEnum_HotelPriceBucket_name, int32(x))
+}
+
+func (HotelPriceBucketEnum_HotelPriceBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_16ae25469274b7fb, []int{0, 0}
+}
+
+// Container for enum describing hotel price bucket for a hotel itinerary.
+type HotelPriceBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelPriceBucketEnum) Reset()         { *m = HotelPriceBucketEnum{} }
+func (m *HotelPriceBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelPriceBucketEnum) ProtoMessage()    {}
+func (*HotelPriceBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_16ae25469274b7fb, []int{0}
+}
+
+func (m *HotelPriceBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelPriceBucketEnum.Unmarshal(m, b)
+}
+func (m *HotelPriceBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelPriceBucketEnum.Marshal(b, m, deterministic)
+}
+func (m *HotelPriceBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelPriceBucketEnum.Merge(m, src)
+}
+func (m *HotelPriceBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelPriceBucketEnum.Size(m)
+}
+func (m *HotelPriceBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelPriceBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelPriceBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.HotelPriceBucketEnum_HotelPriceBucket", HotelPriceBucketEnum_HotelPriceBucket_name, HotelPriceBucketEnum_HotelPriceBucket_value)
+	proto.RegisterType((*HotelPriceBucketEnum)(nil), "google.ads.googleads.v3.enums.HotelPriceBucketEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/hotel_price_bucket.proto", fileDescriptor_16ae25469274b7fb)
+}
+
+var fileDescriptor_16ae25469274b7fb = []byte{
+	// 308 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xfb, 0x30,
+	0x18, 0xfe, 0x6d, 0xfb, 0xa1, 0x90, 0x81, 0x96, 0xa2, 0x17, 0x71, 0x87, 0xed, 0x03, 0x24, 0x87,
+	0x80, 0x87, 0x78, 0x6a, 0xb5, 0xce, 0xa1, 0x74, 0x95, 0x6d, 0x1d, 0x48, 0xa1, 0x74, 0x6d, 0x88,
+	0xc5, 0x36, 0x29, 0x4d, 0xbb, 0x0f, 0xe4, 0xd1, 0x8f, 0xe2, 0x47, 0xd9, 0xa7, 0x90, 0x24, 0xb6,
+	0x87, 0x81, 0x5e, 0xc2, 0xc3, 0xfb, 0xfc, 0xc9, 0xf3, 0xbe, 0xe0, 0x86, 0x09, 0xc1, 0x0a, 0x8a,
+	0x92, 0x4c, 0x22, 0x03, 0x15, 0xda, 0x63, 0x44, 0x79, 0x5b, 0x4a, 0xf4, 0x26, 0x1a, 0x5a, 0xc4,
+	0x55, 0x9d, 0xa7, 0x34, 0xde, 0xb5, 0xe9, 0x3b, 0x6d, 0x60, 0x55, 0x8b, 0x46, 0xd8, 0x13, 0x23,
+	0x86, 0x49, 0x26, 0x61, 0xef, 0x83, 0x7b, 0x0c, 0xb5, 0xef, 0xea, 0xba, 0x8b, 0xad, 0x72, 0x94,
+	0x70, 0x2e, 0x9a, 0xa4, 0xc9, 0x05, 0x97, 0xc6, 0x3c, 0xcb, 0xc1, 0xc5, 0xa3, 0x0a, 0x0e, 0x54,
+	0xae, 0xab, 0x63, 0x3d, 0xde, 0x96, 0xb3, 0x17, 0x60, 0x1d, 0xcf, 0xed, 0x73, 0x30, 0xde, 0xf8,
+	0xab, 0xc0, 0xbb, 0x5b, 0x3c, 0x2c, 0xbc, 0x7b, 0xeb, 0x9f, 0x3d, 0x06, 0xa7, 0x1b, 0xff, 0xc9,
+	0x5f, 0x6e, 0x7d, 0x6b, 0xa0, 0xd8, 0xe7, 0xe5, 0xd6, 0x5b, 0xad, 0xe3, 0xb5, 0x62, 0x47, 0xf6,
+	0x19, 0x00, 0xfe, 0x72, 0x1d, 0x9b, 0xa1, 0xf5, 0xdf, 0x3d, 0x0c, 0xc0, 0x34, 0x15, 0x25, 0xfc,
+	0xb3, 0xae, 0x7b, 0x79, 0xfc, 0x6d, 0xa0, 0x7a, 0x06, 0x83, 0x57, 0xf7, 0xc7, 0xc7, 0x44, 0x91,
+	0x70, 0x06, 0x45, 0xcd, 0x10, 0xa3, 0x5c, 0x6f, 0xd1, 0x9d, 0xab, 0xca, 0xe5, 0x2f, 0xd7, 0xbb,
+	0xd5, 0xef, 0xc7, 0x70, 0x34, 0x77, 0x9c, 0xcf, 0xe1, 0x64, 0x6e, 0xa2, 0x9c, 0x4c, 0x42, 0x03,
+	0x15, 0x0a, 0x31, 0x54, 0xab, 0xcb, 0xaf, 0x8e, 0x8f, 0x9c, 0x4c, 0x46, 0x3d, 0x1f, 0x85, 0x38,
+	0xd2, 0xfc, 0x61, 0x38, 0x35, 0x43, 0x42, 0x9c, 0x4c, 0x12, 0xd2, 0x2b, 0x08, 0x09, 0x31, 0x21,
+	0x5a, 0xb3, 0x3b, 0xd1, 0xc5, 0xf0, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x8f, 0xdc, 0x53,
+	0xd5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/hotel_rate_type.pb.go b/googleapis/ads/googleads/v3/enums/hotel_rate_type.pb.go
new file mode 100644
index 0000000..a0569c4
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/hotel_rate_type.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/hotel_rate_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible hotel rate types.
+type HotelRateTypeEnum_HotelRateType int32
+
+const (
+	// Not specified.
+	HotelRateTypeEnum_UNSPECIFIED HotelRateTypeEnum_HotelRateType = 0
+	// The value is unknown in this version.
+	HotelRateTypeEnum_UNKNOWN HotelRateTypeEnum_HotelRateType = 1
+	// Rate type information is unavailable.
+	HotelRateTypeEnum_UNAVAILABLE HotelRateTypeEnum_HotelRateType = 2
+	// Rates available to everyone.
+	HotelRateTypeEnum_PUBLIC_RATE HotelRateTypeEnum_HotelRateType = 3
+	// A membership program rate is available and satisfies basic requirements
+	// like having a public rate available. UI treatment will strikethrough the
+	// public rate and indicate that a discount is available to the user. For
+	// more on Qualified Rates, visit
+	// https://developers.google.com/hotels/hotel-ads/dev-guide/qualified-rates
+	HotelRateTypeEnum_QUALIFIED_RATE HotelRateTypeEnum_HotelRateType = 4
+	// Rates available to users that satisfy some eligibility criteria. e.g.
+	// all signed-in users, 20% of mobile users, all mobile users in Canada,
+	// etc.
+	HotelRateTypeEnum_PRIVATE_RATE HotelRateTypeEnum_HotelRateType = 5
+)
+
+var HotelRateTypeEnum_HotelRateType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNAVAILABLE",
+	3: "PUBLIC_RATE",
+	4: "QUALIFIED_RATE",
+	5: "PRIVATE_RATE",
+}
+
+var HotelRateTypeEnum_HotelRateType_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"UNAVAILABLE":    2,
+	"PUBLIC_RATE":    3,
+	"QUALIFIED_RATE": 4,
+	"PRIVATE_RATE":   5,
+}
+
+func (x HotelRateTypeEnum_HotelRateType) String() string {
+	return proto.EnumName(HotelRateTypeEnum_HotelRateType_name, int32(x))
+}
+
+func (HotelRateTypeEnum_HotelRateType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e6359dfc1c88f2ee, []int{0, 0}
+}
+
+// Container for enum describing possible hotel rate types.
+type HotelRateTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelRateTypeEnum) Reset()         { *m = HotelRateTypeEnum{} }
+func (m *HotelRateTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelRateTypeEnum) ProtoMessage()    {}
+func (*HotelRateTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e6359dfc1c88f2ee, []int{0}
+}
+
+func (m *HotelRateTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelRateTypeEnum.Unmarshal(m, b)
+}
+func (m *HotelRateTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelRateTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *HotelRateTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelRateTypeEnum.Merge(m, src)
+}
+func (m *HotelRateTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelRateTypeEnum.Size(m)
+}
+func (m *HotelRateTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelRateTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelRateTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.HotelRateTypeEnum_HotelRateType", HotelRateTypeEnum_HotelRateType_name, HotelRateTypeEnum_HotelRateType_value)
+	proto.RegisterType((*HotelRateTypeEnum)(nil), "google.ads.googleads.v3.enums.HotelRateTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/hotel_rate_type.proto", fileDescriptor_e6359dfc1c88f2ee)
+}
+
+var fileDescriptor_e6359dfc1c88f2ee = []byte{
+	// 332 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdf, 0x4a, 0xf3, 0x30,
+	0x1c, 0xfd, 0xda, 0x7d, 0x2a, 0x64, 0xfe, 0xa9, 0xb9, 0x14, 0x77, 0xb1, 0x3d, 0x40, 0x7a, 0x91,
+	0xbb, 0x78, 0x95, 0xce, 0x3a, 0x8b, 0xa5, 0xd6, 0xb9, 0x56, 0x90, 0xc2, 0x88, 0x36, 0xd4, 0xc1,
+	0x96, 0x94, 0x25, 0x1b, 0xec, 0x15, 0x7c, 0x0c, 0x2f, 0x7d, 0x14, 0x5f, 0x44, 0xf0, 0x29, 0xa4,
+	0x89, 0x2b, 0xec, 0x42, 0x6f, 0xc2, 0xe1, 0x9c, 0xdf, 0x39, 0xe4, 0x1c, 0x80, 0x2b, 0x29, 0xab,
+	0x39, 0xf7, 0x59, 0xa9, 0x7c, 0x0b, 0x1b, 0xb4, 0xc6, 0x3e, 0x17, 0xab, 0x85, 0xf2, 0x5f, 0xa4,
+	0xe6, 0xf3, 0xe9, 0x92, 0x69, 0x3e, 0xd5, 0x9b, 0x9a, 0xa3, 0x7a, 0x29, 0xb5, 0x84, 0x3d, 0x7b,
+	0x89, 0x58, 0xa9, 0x50, 0x6b, 0x42, 0x6b, 0x8c, 0x8c, 0xe9, 0xec, 0x7c, 0x9b, 0x59, 0xcf, 0x7c,
+	0x26, 0x84, 0xd4, 0x4c, 0xcf, 0xa4, 0x50, 0xd6, 0x3c, 0x78, 0x75, 0xc0, 0xe9, 0x75, 0x13, 0x3b,
+	0x66, 0x9a, 0x4f, 0x36, 0x35, 0x0f, 0xc5, 0x6a, 0x31, 0x58, 0x81, 0xa3, 0x1d, 0x12, 0x9e, 0x80,
+	0x6e, 0x96, 0xdc, 0xa7, 0xe1, 0x30, 0xba, 0x8a, 0xc2, 0x4b, 0xef, 0x1f, 0xec, 0x82, 0x83, 0x2c,
+	0xb9, 0x49, 0x6e, 0x1f, 0x12, 0xcf, 0xb1, 0x2a, 0xcd, 0x69, 0x14, 0xd3, 0x20, 0x0e, 0x3d, 0xb7,
+	0x21, 0xd2, 0x2c, 0x88, 0xa3, 0xe1, 0x74, 0x4c, 0x27, 0xa1, 0xd7, 0x81, 0x10, 0x1c, 0xdf, 0x65,
+	0x34, 0x36, 0x6e, 0xcb, 0xfd, 0x87, 0x1e, 0x38, 0x4c, 0xc7, 0x51, 0x4e, 0x27, 0xa1, 0x65, 0xf6,
+	0x82, 0x4f, 0x07, 0xf4, 0x9f, 0xe5, 0x02, 0xfd, 0x59, 0x28, 0x80, 0x3b, 0x5f, 0x4b, 0x9b, 0x1a,
+	0xa9, 0xf3, 0x18, 0xfc, 0x98, 0x2a, 0x39, 0x67, 0xa2, 0x42, 0x72, 0x59, 0xf9, 0x15, 0x17, 0xa6,
+	0xe4, 0x76, 0xca, 0x7a, 0xa6, 0x7e, 0x59, 0xf6, 0xc2, 0xbc, 0x6f, 0x6e, 0x67, 0x44, 0xe9, 0xbb,
+	0xdb, 0x1b, 0xd9, 0x28, 0x5a, 0x2a, 0x64, 0x61, 0x83, 0x72, 0x8c, 0x9a, 0x6d, 0xd4, 0xc7, 0x56,
+	0x2f, 0x68, 0xa9, 0x8a, 0x56, 0x2f, 0x72, 0x5c, 0x18, 0xfd, 0xcb, 0xed, 0x5b, 0x92, 0x10, 0x5a,
+	0x2a, 0x42, 0xda, 0x0b, 0x42, 0x72, 0x4c, 0x88, 0xb9, 0x79, 0xda, 0x37, 0x1f, 0xc3, 0xdf, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x65, 0x27, 0xf0, 0x0f, 0xf1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/income_range_type.pb.go b/googleapis/ads/googleads/v3/enums/income_range_type.pb.go
new file mode 100644
index 0000000..494e218
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/income_range_type.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/income_range_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of demographic income ranges (e.g. between 0% to 50%).
+type IncomeRangeTypeEnum_IncomeRangeType int32
+
+const (
+	// Not specified.
+	IncomeRangeTypeEnum_UNSPECIFIED IncomeRangeTypeEnum_IncomeRangeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	IncomeRangeTypeEnum_UNKNOWN IncomeRangeTypeEnum_IncomeRangeType = 1
+	// 0%-50%.
+	IncomeRangeTypeEnum_INCOME_RANGE_0_50 IncomeRangeTypeEnum_IncomeRangeType = 510001
+	// 50% to 60%.
+	IncomeRangeTypeEnum_INCOME_RANGE_50_60 IncomeRangeTypeEnum_IncomeRangeType = 510002
+	// 60% to 70%.
+	IncomeRangeTypeEnum_INCOME_RANGE_60_70 IncomeRangeTypeEnum_IncomeRangeType = 510003
+	// 70% to 80%.
+	IncomeRangeTypeEnum_INCOME_RANGE_70_80 IncomeRangeTypeEnum_IncomeRangeType = 510004
+	// 80% to 90%.
+	IncomeRangeTypeEnum_INCOME_RANGE_80_90 IncomeRangeTypeEnum_IncomeRangeType = 510005
+	// Greater than 90%.
+	IncomeRangeTypeEnum_INCOME_RANGE_90_UP IncomeRangeTypeEnum_IncomeRangeType = 510006
+	// Undetermined income range.
+	IncomeRangeTypeEnum_INCOME_RANGE_UNDETERMINED IncomeRangeTypeEnum_IncomeRangeType = 510000
+)
+
+var IncomeRangeTypeEnum_IncomeRangeType_name = map[int32]string{
+	0:      "UNSPECIFIED",
+	1:      "UNKNOWN",
+	510001: "INCOME_RANGE_0_50",
+	510002: "INCOME_RANGE_50_60",
+	510003: "INCOME_RANGE_60_70",
+	510004: "INCOME_RANGE_70_80",
+	510005: "INCOME_RANGE_80_90",
+	510006: "INCOME_RANGE_90_UP",
+	510000: "INCOME_RANGE_UNDETERMINED",
+}
+
+var IncomeRangeTypeEnum_IncomeRangeType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"INCOME_RANGE_0_50":         510001,
+	"INCOME_RANGE_50_60":        510002,
+	"INCOME_RANGE_60_70":        510003,
+	"INCOME_RANGE_70_80":        510004,
+	"INCOME_RANGE_80_90":        510005,
+	"INCOME_RANGE_90_UP":        510006,
+	"INCOME_RANGE_UNDETERMINED": 510000,
+}
+
+func (x IncomeRangeTypeEnum_IncomeRangeType) String() string {
+	return proto.EnumName(IncomeRangeTypeEnum_IncomeRangeType_name, int32(x))
+}
+
+func (IncomeRangeTypeEnum_IncomeRangeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bf3d5076be1ea19c, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic income ranges.
+type IncomeRangeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IncomeRangeTypeEnum) Reset()         { *m = IncomeRangeTypeEnum{} }
+func (m *IncomeRangeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*IncomeRangeTypeEnum) ProtoMessage()    {}
+func (*IncomeRangeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bf3d5076be1ea19c, []int{0}
+}
+
+func (m *IncomeRangeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Unmarshal(m, b)
+}
+func (m *IncomeRangeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *IncomeRangeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IncomeRangeTypeEnum.Merge(m, src)
+}
+func (m *IncomeRangeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Size(m)
+}
+func (m *IncomeRangeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_IncomeRangeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IncomeRangeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.IncomeRangeTypeEnum_IncomeRangeType", IncomeRangeTypeEnum_IncomeRangeType_name, IncomeRangeTypeEnum_IncomeRangeType_value)
+	proto.RegisterType((*IncomeRangeTypeEnum)(nil), "google.ads.googleads.v3.enums.IncomeRangeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/income_range_type.proto", fileDescriptor_bf3d5076be1ea19c)
+}
+
+var fileDescriptor_bf3d5076be1ea19c = []byte{
+	// 384 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xdb, 0xaa, 0xd3, 0x40,
+	0x18, 0x85, 0x4d, 0x04, 0x85, 0xd9, 0x17, 0x7b, 0x8c, 0x82, 0x07, 0xdc, 0x84, 0xf6, 0x01, 0x26,
+	0x03, 0xa1, 0xa7, 0xf1, 0x2a, 0x6d, 0xc7, 0x12, 0xa4, 0xd3, 0x50, 0x9b, 0x0a, 0x12, 0x18, 0x62,
+	0x13, 0x42, 0xa0, 0x99, 0x09, 0x9d, 0xb4, 0xd0, 0x6b, 0x5f, 0xa0, 0xcf, 0xe0, 0xa5, 0x57, 0x9e,
+	0x1f, 0xc2, 0x37, 0x51, 0x5f, 0x42, 0x92, 0xd8, 0x42, 0x4b, 0xdc, 0x37, 0xc3, 0xe2, 0xff, 0xfe,
+	0xb5, 0x18, 0xd6, 0x0f, 0x3a, 0x89, 0x94, 0xc9, 0x3a, 0xb6, 0xc2, 0x48, 0x59, 0xb5, 0x2c, 0xd5,
+	0xce, 0xb6, 0x62, 0xb1, 0xcd, 0x94, 0x95, 0x8a, 0x95, 0xcc, 0x62, 0xbe, 0x09, 0x45, 0x12, 0xf3,
+	0x62, 0x9f, 0xc7, 0x28, 0xdf, 0xc8, 0x42, 0x1a, 0x37, 0xf5, 0x2e, 0x0a, 0x23, 0x85, 0x4e, 0x36,
+	0xb4, 0xb3, 0x51, 0x65, 0x7b, 0xf6, 0xfc, 0x98, 0x9a, 0xa7, 0x56, 0x28, 0x84, 0x2c, 0xc2, 0x22,
+	0x95, 0x42, 0xd5, 0xe6, 0xf6, 0x7b, 0x1d, 0x3c, 0x74, 0xab, 0xe0, 0x79, 0x99, 0xbb, 0xd8, 0xe7,
+	0x31, 0x15, 0xdb, 0xac, 0xfd, 0x47, 0x03, 0xd7, 0x17, 0x73, 0xe3, 0x1a, 0x5c, 0xf9, 0xec, 0xb5,
+	0x47, 0x47, 0xee, 0x4b, 0x97, 0x8e, 0xe1, 0x1d, 0xe3, 0x0a, 0xdc, 0xf7, 0xd9, 0x2b, 0x36, 0x7b,
+	0xc3, 0xa0, 0x66, 0x3c, 0x06, 0x0f, 0x5c, 0x36, 0x9a, 0x4d, 0x29, 0x9f, 0x3b, 0x6c, 0x42, 0x39,
+	0xe6, 0x1d, 0x0c, 0x3f, 0x1f, 0x4c, 0xe3, 0x09, 0x30, 0xce, 0x40, 0x07, 0xf3, 0x2e, 0x86, 0x5f,
+	0x1a, 0x48, 0x17, 0xf3, 0x1e, 0x86, 0x5f, 0x1b, 0x48, 0x0f, 0xf3, 0x3e, 0x86, 0xdf, 0x1a, 0x48,
+	0x1f, 0xf3, 0x01, 0x86, 0xdf, 0x1b, 0xc8, 0x00, 0x73, 0xdf, 0x83, 0x3f, 0x0e, 0xa6, 0x61, 0x82,
+	0xa7, 0x67, 0xc4, 0x67, 0x63, 0xba, 0xa0, 0xf3, 0xa9, 0xcb, 0xe8, 0x18, 0x7e, 0x3a, 0x98, 0xc3,
+	0x5f, 0x1a, 0x68, 0xad, 0x64, 0x86, 0x6e, 0x6d, 0x72, 0xf8, 0xe8, 0xa2, 0x10, 0xaf, 0x6c, 0xd0,
+	0xd3, 0xde, 0x0e, 0xff, 0xd9, 0x12, 0xb9, 0x0e, 0x45, 0x82, 0xe4, 0x26, 0xb1, 0x92, 0x58, 0x54,
+	0xfd, 0x1e, 0xef, 0x98, 0xa7, 0xea, 0x3f, 0x67, 0x7d, 0x51, 0xbd, 0x1f, 0xf4, 0xbb, 0x13, 0xc7,
+	0xf9, 0xa8, 0xdf, 0x4c, 0xea, 0x28, 0x27, 0x52, 0xa8, 0x96, 0xa5, 0x5a, 0xda, 0xa8, 0x3c, 0x8a,
+	0xfa, 0x79, 0xe4, 0x81, 0x13, 0xa9, 0xe0, 0xc4, 0x83, 0xa5, 0x1d, 0x54, 0xfc, 0xb7, 0xde, 0xaa,
+	0x87, 0x84, 0x38, 0x91, 0x22, 0xe4, 0xb4, 0x41, 0xc8, 0xd2, 0x26, 0xa4, 0xda, 0x79, 0x77, 0xaf,
+	0xfa, 0x98, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0xad, 0xd1, 0x51, 0xd6, 0x6e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/interaction_event_type.pb.go b/googleapis/ads/googleads/v3/enums/interaction_event_type.pb.go
new file mode 100644
index 0000000..07589e5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/interaction_event_type.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/interaction_event_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible types of payable and free interactions.
+type InteractionEventTypeEnum_InteractionEventType int32
+
+const (
+	// Not specified.
+	InteractionEventTypeEnum_UNSPECIFIED InteractionEventTypeEnum_InteractionEventType = 0
+	// Used for return value only. Represents value unknown in this version.
+	InteractionEventTypeEnum_UNKNOWN InteractionEventTypeEnum_InteractionEventType = 1
+	// Click to site. In most cases, this interaction navigates to an external
+	// location, usually the advertiser's landing page. This is also the default
+	// InteractionEventType for click events.
+	InteractionEventTypeEnum_CLICK InteractionEventTypeEnum_InteractionEventType = 2
+	// The user's expressed intent to engage with the ad in-place.
+	InteractionEventTypeEnum_ENGAGEMENT InteractionEventTypeEnum_InteractionEventType = 3
+	// User viewed a video ad.
+	InteractionEventTypeEnum_VIDEO_VIEW InteractionEventTypeEnum_InteractionEventType = 4
+	// The default InteractionEventType for ad conversion events.
+	// This is used when an ad conversion row does NOT indicate
+	// that the free interactions (i.e., the ad conversions)
+	// should be 'promoted' and reported as part of the core metrics.
+	// These are simply other (ad) conversions.
+	InteractionEventTypeEnum_NONE InteractionEventTypeEnum_InteractionEventType = 5
+)
+
+var InteractionEventTypeEnum_InteractionEventType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CLICK",
+	3: "ENGAGEMENT",
+	4: "VIDEO_VIEW",
+	5: "NONE",
+}
+
+var InteractionEventTypeEnum_InteractionEventType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CLICK":       2,
+	"ENGAGEMENT":  3,
+	"VIDEO_VIEW":  4,
+	"NONE":        5,
+}
+
+func (x InteractionEventTypeEnum_InteractionEventType) String() string {
+	return proto.EnumName(InteractionEventTypeEnum_InteractionEventType_name, int32(x))
+}
+
+func (InteractionEventTypeEnum_InteractionEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d3dbb1c76f569f9a, []int{0, 0}
+}
+
+// Container for enum describing types of payable and free interactions.
+type InteractionEventTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InteractionEventTypeEnum) Reset()         { *m = InteractionEventTypeEnum{} }
+func (m *InteractionEventTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*InteractionEventTypeEnum) ProtoMessage()    {}
+func (*InteractionEventTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3dbb1c76f569f9a, []int{0}
+}
+
+func (m *InteractionEventTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InteractionEventTypeEnum.Unmarshal(m, b)
+}
+func (m *InteractionEventTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InteractionEventTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *InteractionEventTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InteractionEventTypeEnum.Merge(m, src)
+}
+func (m *InteractionEventTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_InteractionEventTypeEnum.Size(m)
+}
+func (m *InteractionEventTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InteractionEventTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InteractionEventTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.InteractionEventTypeEnum_InteractionEventType", InteractionEventTypeEnum_InteractionEventType_name, InteractionEventTypeEnum_InteractionEventType_value)
+	proto.RegisterType((*InteractionEventTypeEnum)(nil), "google.ads.googleads.v3.enums.InteractionEventTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/interaction_event_type.proto", fileDescriptor_d3dbb1c76f569f9a)
+}
+
+var fileDescriptor_d3dbb1c76f569f9a = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdd, 0x4e, 0xc2, 0x30,
+	0x18, 0x75, 0x03, 0xfc, 0x29, 0x89, 0x2e, 0x8b, 0x17, 0x6a, 0xe4, 0x02, 0x1e, 0xa0, 0xbb, 0xd8,
+	0x5d, 0xbd, 0x1a, 0x50, 0x97, 0x05, 0x2d, 0x24, 0xc2, 0x48, 0xcc, 0x12, 0x32, 0x59, 0xd3, 0x2c,
+	0x81, 0x76, 0xa1, 0x85, 0x84, 0x07, 0xf0, 0x45, 0xbc, 0xf4, 0x51, 0x7c, 0x14, 0x2f, 0x7c, 0x06,
+	0xd3, 0x56, 0xf0, 0x06, 0xbd, 0x69, 0x4e, 0xbf, 0xf3, 0x9d, 0x93, 0xef, 0x1c, 0x80, 0x98, 0x10,
+	0x6c, 0x41, 0x83, 0xbc, 0x90, 0x81, 0x85, 0x1a, 0x6d, 0xc2, 0x80, 0xf2, 0xf5, 0x52, 0x06, 0x25,
+	0x57, 0x74, 0x95, 0xcf, 0x55, 0x29, 0xf8, 0x8c, 0x6e, 0x28, 0x57, 0x33, 0xb5, 0xad, 0x28, 0xac,
+	0x56, 0x42, 0x09, 0xbf, 0x65, 0x05, 0x30, 0x2f, 0x24, 0xdc, 0x6b, 0xe1, 0x26, 0x84, 0x46, 0x7b,
+	0x73, 0xbb, 0xb3, 0xae, 0xca, 0x20, 0xe7, 0x5c, 0xa8, 0x5c, 0xdb, 0x48, 0x2b, 0xee, 0xbc, 0x3a,
+	0xe0, 0x2a, 0xf9, 0x75, 0xc7, 0xda, 0x7c, 0xbc, 0xad, 0x28, 0xe6, 0xeb, 0x65, 0xa7, 0x04, 0x97,
+	0x87, 0x38, 0xff, 0x02, 0x34, 0x27, 0xe4, 0x69, 0x84, 0x7b, 0xc9, 0x7d, 0x82, 0xfb, 0xde, 0x91,
+	0xdf, 0x04, 0x27, 0x13, 0x32, 0x20, 0xc3, 0x29, 0xf1, 0x1c, 0xff, 0x0c, 0x34, 0x7a, 0x0f, 0x49,
+	0x6f, 0xe0, 0xb9, 0xfe, 0x39, 0x00, 0x98, 0xc4, 0x51, 0x8c, 0x1f, 0x31, 0x19, 0x7b, 0x35, 0xfd,
+	0x4f, 0x93, 0x3e, 0x1e, 0xce, 0xd2, 0x04, 0x4f, 0xbd, 0xba, 0x7f, 0x0a, 0xea, 0x64, 0x48, 0xb0,
+	0xd7, 0xe8, 0x7e, 0x39, 0xa0, 0x3d, 0x17, 0x4b, 0xf8, 0x6f, 0x96, 0xee, 0xf5, 0xa1, 0x73, 0x46,
+	0x3a, 0xc8, 0xc8, 0x79, 0xee, 0xfe, 0x68, 0x99, 0x58, 0xe4, 0x9c, 0x41, 0xb1, 0x62, 0x01, 0xa3,
+	0xdc, 0xc4, 0xdc, 0x75, 0x5a, 0x95, 0xf2, 0x8f, 0x8a, 0xef, 0xcc, 0xfb, 0xe6, 0xd6, 0xe2, 0x28,
+	0x7a, 0x77, 0x5b, 0xb1, 0xb5, 0x8a, 0x0a, 0x09, 0x2d, 0xd4, 0x28, 0x0d, 0xa1, 0xae, 0x45, 0x7e,
+	0xec, 0xf8, 0x2c, 0x2a, 0x64, 0xb6, 0xe7, 0xb3, 0x34, 0xcc, 0x0c, 0xff, 0xe9, 0xb6, 0xed, 0x10,
+	0xa1, 0xa8, 0x90, 0x08, 0xed, 0x37, 0x10, 0x4a, 0x43, 0x84, 0xcc, 0xce, 0xcb, 0xb1, 0x39, 0x2c,
+	0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x28, 0x56, 0xeb, 0x66, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/interaction_type.pb.go b/googleapis/ads/googleads/v3/enums/interaction_type.pb.go
new file mode 100644
index 0000000..3a07f5c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/interaction_type.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/interaction_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible interaction types.
+type InteractionTypeEnum_InteractionType int32
+
+const (
+	// Not specified.
+	InteractionTypeEnum_UNSPECIFIED InteractionTypeEnum_InteractionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	InteractionTypeEnum_UNKNOWN InteractionTypeEnum_InteractionType = 1
+	// Calls.
+	InteractionTypeEnum_CALLS InteractionTypeEnum_InteractionType = 8000
+)
+
+var InteractionTypeEnum_InteractionType_name = map[int32]string{
+	0:    "UNSPECIFIED",
+	1:    "UNKNOWN",
+	8000: "CALLS",
+}
+
+var InteractionTypeEnum_InteractionType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CALLS":       8000,
+}
+
+func (x InteractionTypeEnum_InteractionType) String() string {
+	return proto.EnumName(InteractionTypeEnum_InteractionType_name, int32(x))
+}
+
+func (InteractionTypeEnum_InteractionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8fc9fa17678200f2, []int{0, 0}
+}
+
+// Container for enum describing possible interaction types.
+type InteractionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InteractionTypeEnum) Reset()         { *m = InteractionTypeEnum{} }
+func (m *InteractionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*InteractionTypeEnum) ProtoMessage()    {}
+func (*InteractionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8fc9fa17678200f2, []int{0}
+}
+
+func (m *InteractionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InteractionTypeEnum.Unmarshal(m, b)
+}
+func (m *InteractionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InteractionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *InteractionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InteractionTypeEnum.Merge(m, src)
+}
+func (m *InteractionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_InteractionTypeEnum.Size(m)
+}
+func (m *InteractionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InteractionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InteractionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.InteractionTypeEnum_InteractionType", InteractionTypeEnum_InteractionType_name, InteractionTypeEnum_InteractionType_value)
+	proto.RegisterType((*InteractionTypeEnum)(nil), "google.ads.googleads.v3.enums.InteractionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/interaction_type.proto", fileDescriptor_8fc9fa17678200f2)
+}
+
+var fileDescriptor_8fc9fa17678200f2 = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x63, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xcc, 0xbc, 0x92, 0xd4, 0xa2, 0xc4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, 0xf8,
+	0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x52, 0xbd, 0xc4,
+	0x94, 0x62, 0x3d, 0xb8, 0x2e, 0xbd, 0x32, 0x63, 0x3d, 0xb0, 0x2e, 0x29, 0x19, 0x98, 0xa1, 0x05,
+	0x99, 0xfa, 0x89, 0x79, 0x79, 0xf9, 0x25, 0x89, 0x20, 0x03, 0x8a, 0x21, 0x9a, 0x95, 0x82, 0xb8,
+	0x84, 0x3d, 0x11, 0xc6, 0x86, 0x54, 0x16, 0xa4, 0xba, 0xe6, 0x95, 0xe6, 0x2a, 0x59, 0x73, 0xf1,
+	0xa3, 0x09, 0x0b, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8, 0x3a, 0x7b, 0xba, 0x79, 0xba,
+	0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb, 0xf9, 0x87, 0xfb, 0x09, 0x30,
+	0x0a, 0x71, 0x71, 0xb1, 0x3a, 0x3b, 0xfa, 0xf8, 0x04, 0x0b, 0x1c, 0xb0, 0x73, 0x7a, 0xc9, 0xc8,
+	0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7, 0x5d, 0x4e, 0x22, 0x68, 0x16, 0x04, 0x80, 0xdc, 0x13,
+	0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x96, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae,
+	0x9f, 0x9e, 0x9a, 0x07, 0x76, 0x2d, 0x2c, 0x50, 0x0a, 0x32, 0x8b, 0x71, 0x84, 0x91, 0x35, 0x98,
+	0x5c, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1,
+	0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xeb, 0x81, 0xfc, 0x58, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98,
+	0x52, 0x1c, 0x03, 0x97, 0x8f, 0x09, 0x33, 0x8e, 0x01, 0xcb, 0xbf, 0x62, 0x52, 0x84, 0x08, 0x5a,
+	0x59, 0x39, 0xa6, 0x14, 0x5b, 0x59, 0xc1, 0x55, 0x58, 0x59, 0x85, 0x19, 0x5b, 0x59, 0x81, 0xd5,
+	0x24, 0xb1, 0x81, 0x1d, 0x66, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0xd5, 0x2c, 0x97, 0xbb,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/invoice_type.pb.go b/googleapis/ads/googleads/v3/enums/invoice_type.pb.go
new file mode 100644
index 0000000..0883b28
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/invoice_type.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/invoice_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible type of invoices.
+type InvoiceTypeEnum_InvoiceType int32
+
+const (
+	// Not specified.
+	InvoiceTypeEnum_UNSPECIFIED InvoiceTypeEnum_InvoiceType = 0
+	// Used for return value only. Represents value unknown in this version.
+	InvoiceTypeEnum_UNKNOWN InvoiceTypeEnum_InvoiceType = 1
+	// An invoice with a negative amount. The account receives a credit.
+	InvoiceTypeEnum_CREDIT_MEMO InvoiceTypeEnum_InvoiceType = 2
+	// An invoice with a positive amount. The account owes a balance.
+	InvoiceTypeEnum_INVOICE InvoiceTypeEnum_InvoiceType = 3
+)
+
+var InvoiceTypeEnum_InvoiceType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CREDIT_MEMO",
+	3: "INVOICE",
+}
+
+var InvoiceTypeEnum_InvoiceType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CREDIT_MEMO": 2,
+	"INVOICE":     3,
+}
+
+func (x InvoiceTypeEnum_InvoiceType) String() string {
+	return proto.EnumName(InvoiceTypeEnum_InvoiceType_name, int32(x))
+}
+
+func (InvoiceTypeEnum_InvoiceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_22c008ffe76f80f6, []int{0, 0}
+}
+
+// Container for enum describing the type of invoices.
+type InvoiceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InvoiceTypeEnum) Reset()         { *m = InvoiceTypeEnum{} }
+func (m *InvoiceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*InvoiceTypeEnum) ProtoMessage()    {}
+func (*InvoiceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_22c008ffe76f80f6, []int{0}
+}
+
+func (m *InvoiceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InvoiceTypeEnum.Unmarshal(m, b)
+}
+func (m *InvoiceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InvoiceTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *InvoiceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InvoiceTypeEnum.Merge(m, src)
+}
+func (m *InvoiceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_InvoiceTypeEnum.Size(m)
+}
+func (m *InvoiceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InvoiceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InvoiceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.InvoiceTypeEnum_InvoiceType", InvoiceTypeEnum_InvoiceType_name, InvoiceTypeEnum_InvoiceType_value)
+	proto.RegisterType((*InvoiceTypeEnum)(nil), "google.ads.googleads.v3.enums.InvoiceTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/invoice_type.proto", fileDescriptor_22c008ffe76f80f6)
+}
+
+var fileDescriptor_22c008ffe76f80f6 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xbd, 0x6a, 0xf3, 0x30,
+	0x14, 0xfd, 0xe2, 0xc0, 0x57, 0x50, 0x86, 0x98, 0x8c, 0xa5, 0x19, 0x92, 0x07, 0x90, 0x0a, 0xda,
+	0xd4, 0xc9, 0x71, 0xd4, 0x20, 0x4a, 0x6c, 0xd3, 0x26, 0x2e, 0x14, 0x43, 0x70, 0x63, 0x21, 0x0c,
+	0xb1, 0x64, 0x22, 0xc7, 0x90, 0xd7, 0xe9, 0xd8, 0x47, 0xe9, 0x7b, 0x74, 0xe9, 0x53, 0x14, 0x49,
+	0xb5, 0xc9, 0xd2, 0x2e, 0xe2, 0x70, 0xcf, 0x8f, 0xce, 0xbd, 0xe0, 0x56, 0x28, 0x25, 0x0e, 0x1c,
+	0xe5, 0x85, 0x46, 0x0e, 0x1a, 0xd4, 0x62, 0xc4, 0xe5, 0xa9, 0xd2, 0xa8, 0x94, 0xad, 0x2a, 0xf7,
+	0x7c, 0xd7, 0x9c, 0x6b, 0x0e, 0xeb, 0xa3, 0x6a, 0xd4, 0x64, 0xea, 0x64, 0x30, 0x2f, 0x34, 0xec,
+	0x1d, 0xb0, 0xc5, 0xd0, 0x3a, 0xae, 0x6f, 0xba, 0xc0, 0xba, 0x44, 0xb9, 0x94, 0xaa, 0xc9, 0x9b,
+	0x52, 0x49, 0xed, 0xcc, 0xf3, 0x0c, 0x8c, 0x99, 0x8b, 0xdc, 0x9c, 0x6b, 0x4e, 0xe5, 0xa9, 0x9a,
+	0x33, 0x30, 0xba, 0x18, 0x4d, 0xc6, 0x60, 0xb4, 0x8d, 0x9e, 0x12, 0x1a, 0xb2, 0x7b, 0x46, 0x97,
+	0xfe, 0xbf, 0xc9, 0x08, 0x5c, 0x6d, 0xa3, 0x87, 0x28, 0x7e, 0x8e, 0xfc, 0x81, 0x61, 0xc3, 0x47,
+	0xba, 0x64, 0x9b, 0xdd, 0x9a, 0xae, 0x63, 0xdf, 0x33, 0x2c, 0x8b, 0xd2, 0x98, 0x85, 0xd4, 0x1f,
+	0x2e, 0x3e, 0x07, 0x60, 0xb6, 0x57, 0x15, 0xfc, 0xb3, 0xe1, 0xc2, 0xbf, 0xf8, 0x2e, 0x31, 0xad,
+	0x92, 0xc1, 0xcb, 0xe2, 0xc7, 0x22, 0xd4, 0x21, 0x97, 0x02, 0xaa, 0xa3, 0x40, 0x82, 0x4b, 0xdb,
+	0xb9, 0x3b, 0x4b, 0x5d, 0xea, 0x5f, 0xae, 0x74, 0x67, 0xdf, 0x37, 0x6f, 0xb8, 0x0a, 0x82, 0x77,
+	0x6f, 0xba, 0x72, 0x51, 0x41, 0xa1, 0xa1, 0x83, 0x06, 0xa5, 0x18, 0x9a, 0x6d, 0xf5, 0x47, 0xc7,
+	0x67, 0x41, 0xa1, 0xb3, 0x9e, 0xcf, 0x52, 0x9c, 0x59, 0xfe, 0xcb, 0x9b, 0xb9, 0x21, 0x21, 0x41,
+	0xa1, 0x09, 0xe9, 0x15, 0x84, 0xa4, 0x98, 0x10, 0xab, 0x79, 0xfd, 0x6f, 0x8b, 0xe1, 0xef, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x78, 0x11, 0xae, 0x31, 0xbd, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/job_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/job_placeholder_field.pb.go
new file mode 100644
index 0000000..2dfef89
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/job_placeholder_field.pb.go
@@ -0,0 +1,215 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/job_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Job placeholder fields.
+type JobPlaceholderFieldEnum_JobPlaceholderField int32
+
+const (
+	// Not specified.
+	JobPlaceholderFieldEnum_UNSPECIFIED JobPlaceholderFieldEnum_JobPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	JobPlaceholderFieldEnum_UNKNOWN JobPlaceholderFieldEnum_JobPlaceholderField = 1
+	// Data Type: STRING. Required. If only JOB_ID is specified, then it must be
+	// unique. If both JOB_ID and LOCATION_ID are specified, then the
+	// pair must be unique.
+	// ID) pair must be unique.
+	JobPlaceholderFieldEnum_JOB_ID JobPlaceholderFieldEnum_JobPlaceholderField = 2
+	// Data Type: STRING. Combination of JOB_ID and LOCATION_ID must be unique
+	// per offer.
+	JobPlaceholderFieldEnum_LOCATION_ID JobPlaceholderFieldEnum_JobPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with job title to be shown in
+	// dynamic ad.
+	JobPlaceholderFieldEnum_TITLE JobPlaceholderFieldEnum_JobPlaceholderField = 4
+	// Data Type: STRING. Job subtitle to be shown in dynamic ad.
+	JobPlaceholderFieldEnum_SUBTITLE JobPlaceholderFieldEnum_JobPlaceholderField = 5
+	// Data Type: STRING. Description of job to be shown in dynamic ad.
+	JobPlaceholderFieldEnum_DESCRIPTION JobPlaceholderFieldEnum_JobPlaceholderField = 6
+	// Data Type: URL. Image to be displayed in the ad. Highly recommended for
+	// image ads.
+	JobPlaceholderFieldEnum_IMAGE_URL JobPlaceholderFieldEnum_JobPlaceholderField = 7
+	// Data Type: STRING. Category of property used to group like items together
+	// for recommendation engine.
+	JobPlaceholderFieldEnum_CATEGORY JobPlaceholderFieldEnum_JobPlaceholderField = 8
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	JobPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS JobPlaceholderFieldEnum_JobPlaceholderField = 9
+	// Data Type: STRING. Complete property address, including postal code.
+	JobPlaceholderFieldEnum_ADDRESS JobPlaceholderFieldEnum_JobPlaceholderField = 10
+	// Data Type: STRING. Salary or salary range of job to be shown in dynamic
+	// ad.
+	JobPlaceholderFieldEnum_SALARY JobPlaceholderFieldEnum_JobPlaceholderField = 11
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific job and its location).
+	JobPlaceholderFieldEnum_FINAL_URLS JobPlaceholderFieldEnum_JobPlaceholderField = 12
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	JobPlaceholderFieldEnum_FINAL_MOBILE_URLS JobPlaceholderFieldEnum_JobPlaceholderField = 14
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	JobPlaceholderFieldEnum_TRACKING_URL JobPlaceholderFieldEnum_JobPlaceholderField = 15
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	JobPlaceholderFieldEnum_ANDROID_APP_LINK JobPlaceholderFieldEnum_JobPlaceholderField = 16
+	// Data Type: STRING_LIST. List of recommended job IDs to show together with
+	// this item.
+	JobPlaceholderFieldEnum_SIMILAR_JOB_IDS JobPlaceholderFieldEnum_JobPlaceholderField = 17
+	// Data Type: STRING. iOS app link.
+	JobPlaceholderFieldEnum_IOS_APP_LINK JobPlaceholderFieldEnum_JobPlaceholderField = 18
+	// Data Type: INT64. iOS app store ID.
+	JobPlaceholderFieldEnum_IOS_APP_STORE_ID JobPlaceholderFieldEnum_JobPlaceholderField = 19
+)
+
+var JobPlaceholderFieldEnum_JobPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "JOB_ID",
+	3:  "LOCATION_ID",
+	4:  "TITLE",
+	5:  "SUBTITLE",
+	6:  "DESCRIPTION",
+	7:  "IMAGE_URL",
+	8:  "CATEGORY",
+	9:  "CONTEXTUAL_KEYWORDS",
+	10: "ADDRESS",
+	11: "SALARY",
+	12: "FINAL_URLS",
+	14: "FINAL_MOBILE_URLS",
+	15: "TRACKING_URL",
+	16: "ANDROID_APP_LINK",
+	17: "SIMILAR_JOB_IDS",
+	18: "IOS_APP_LINK",
+	19: "IOS_APP_STORE_ID",
+}
+
+var JobPlaceholderFieldEnum_JobPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"JOB_ID":              2,
+	"LOCATION_ID":         3,
+	"TITLE":               4,
+	"SUBTITLE":            5,
+	"DESCRIPTION":         6,
+	"IMAGE_URL":           7,
+	"CATEGORY":            8,
+	"CONTEXTUAL_KEYWORDS": 9,
+	"ADDRESS":             10,
+	"SALARY":              11,
+	"FINAL_URLS":          12,
+	"FINAL_MOBILE_URLS":   14,
+	"TRACKING_URL":        15,
+	"ANDROID_APP_LINK":    16,
+	"SIMILAR_JOB_IDS":     17,
+	"IOS_APP_LINK":        18,
+	"IOS_APP_STORE_ID":    19,
+}
+
+func (x JobPlaceholderFieldEnum_JobPlaceholderField) String() string {
+	return proto.EnumName(JobPlaceholderFieldEnum_JobPlaceholderField_name, int32(x))
+}
+
+func (JobPlaceholderFieldEnum_JobPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a7c8492101f9a12a, []int{0, 0}
+}
+
+// Values for Job placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type JobPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobPlaceholderFieldEnum) Reset()         { *m = JobPlaceholderFieldEnum{} }
+func (m *JobPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*JobPlaceholderFieldEnum) ProtoMessage()    {}
+func (*JobPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a7c8492101f9a12a, []int{0}
+}
+
+func (m *JobPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *JobPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *JobPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *JobPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Size(m)
+}
+func (m *JobPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.JobPlaceholderFieldEnum_JobPlaceholderField", JobPlaceholderFieldEnum_JobPlaceholderField_name, JobPlaceholderFieldEnum_JobPlaceholderField_value)
+	proto.RegisterType((*JobPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.JobPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/job_placeholder_field.proto", fileDescriptor_a7c8492101f9a12a)
+}
+
+var fileDescriptor_a7c8492101f9a12a = []byte{
+	// 494 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x30,
+	0x14, 0xc7, 0x59, 0xc6, 0xba, 0xd5, 0x2d, 0xab, 0xe7, 0x82, 0x26, 0x10, 0x3b, 0x6c, 0x1f, 0x20,
+	0x39, 0xe4, 0x44, 0x38, 0x39, 0x89, 0x5b, 0xb9, 0x4d, 0xe3, 0x28, 0x4e, 0x3b, 0x8a, 0x2a, 0x45,
+	0xe9, 0x12, 0x42, 0x51, 0x1a, 0x57, 0x75, 0xb7, 0x0f, 0xc4, 0x91, 0x8f, 0xc2, 0x9d, 0x2f, 0xc1,
+	0x01, 0x89, 0x6f, 0x80, 0x1c, 0xd3, 0x4e, 0x42, 0xc0, 0x25, 0x7a, 0x7e, 0xef, 0xf7, 0xff, 0xe7,
+	0xd9, 0xef, 0x81, 0x37, 0xa5, 0x10, 0x65, 0x55, 0x58, 0x59, 0x2e, 0x2d, 0x1d, 0xaa, 0xe8, 0xc1,
+	0xb6, 0x8a, 0xfa, 0x7e, 0x2d, 0xad, 0x4f, 0x62, 0x99, 0x6e, 0xaa, 0xec, 0xae, 0xf8, 0x28, 0xaa,
+	0xbc, 0xd8, 0xa6, 0x1f, 0x56, 0x45, 0x95, 0x9b, 0x9b, 0xad, 0xd8, 0x09, 0x74, 0xa5, 0x79, 0x33,
+	0xcb, 0xa5, 0x79, 0x90, 0x9a, 0x0f, 0xb6, 0xd9, 0x48, 0x5f, 0xbd, 0xde, 0x3b, 0x6f, 0x56, 0x56,
+	0x56, 0xd7, 0x62, 0x97, 0xed, 0x56, 0xa2, 0x96, 0x5a, 0x7c, 0xf3, 0xd3, 0x00, 0x97, 0x23, 0xb1,
+	0x8c, 0x1e, 0xbd, 0x07, 0xca, 0x9a, 0xd4, 0xf7, 0xeb, 0x9b, 0x6f, 0x06, 0xe8, 0xff, 0xa5, 0x86,
+	0x7a, 0xa0, 0x33, 0x0d, 0x79, 0x44, 0x3c, 0x3a, 0xa0, 0xc4, 0x87, 0x4f, 0x50, 0x07, 0x9c, 0x4e,
+	0xc3, 0x71, 0xc8, 0x6e, 0x43, 0x78, 0x84, 0x00, 0x68, 0x8d, 0x98, 0x9b, 0x52, 0x1f, 0x1a, 0x8a,
+	0x0c, 0x98, 0x87, 0x13, 0xca, 0x42, 0x95, 0x38, 0x46, 0x6d, 0x70, 0x92, 0xd0, 0x24, 0x20, 0xf0,
+	0x29, 0xea, 0x82, 0x33, 0x3e, 0x75, 0xf5, 0xe9, 0x44, 0x91, 0x3e, 0xe1, 0x5e, 0x4c, 0x23, 0x05,
+	0xc3, 0x16, 0x7a, 0x06, 0xda, 0x74, 0x82, 0x87, 0x24, 0x9d, 0xc6, 0x01, 0x3c, 0x55, 0xb4, 0x87,
+	0x13, 0x32, 0x64, 0xf1, 0x1c, 0x9e, 0xa1, 0x4b, 0xd0, 0xf7, 0x58, 0x98, 0x90, 0x77, 0xc9, 0x14,
+	0x07, 0xe9, 0x98, 0xcc, 0x6f, 0x59, 0xec, 0x73, 0xd8, 0x56, 0x9d, 0x60, 0xdf, 0x8f, 0x09, 0xe7,
+	0x10, 0xa8, 0x4e, 0x38, 0x0e, 0x70, 0x3c, 0x87, 0x1d, 0x74, 0x0e, 0xc0, 0x80, 0x86, 0x38, 0x50,
+	0x76, 0x1c, 0x76, 0xd1, 0x0b, 0x70, 0xa1, 0xcf, 0x13, 0xe6, 0xd2, 0x80, 0xe8, 0xf4, 0x39, 0x82,
+	0xa0, 0x9b, 0xc4, 0xd8, 0x1b, 0xd3, 0x70, 0xd8, 0xfc, 0xb8, 0x87, 0x9e, 0x03, 0x88, 0x43, 0x3f,
+	0x66, 0xd4, 0x4f, 0x71, 0x14, 0xa5, 0x01, 0x0d, 0xc7, 0x10, 0xa2, 0x3e, 0xe8, 0x71, 0x3a, 0xa1,
+	0x01, 0x8e, 0x53, 0x7d, 0x59, 0x0e, 0x2f, 0x94, 0x98, 0x32, 0xfe, 0x88, 0x21, 0x25, 0xde, 0x67,
+	0x78, 0xc2, 0x62, 0xa2, 0x1e, 0xa1, 0xef, 0xfe, 0x38, 0x02, 0xd7, 0x77, 0x62, 0x6d, 0xfe, 0x77,
+	0x6e, 0xee, 0xcb, 0x91, 0x58, 0xca, 0x3f, 0xdf, 0x3e, 0x52, 0x43, 0x8b, 0x8e, 0xde, 0xbb, 0xbf,
+	0xb5, 0xa5, 0xa8, 0xb2, 0xba, 0x34, 0xc5, 0xb6, 0xb4, 0xca, 0xa2, 0x6e, 0x46, 0xba, 0x5f, 0x9f,
+	0xcd, 0x4a, 0xfe, 0x63, 0x9b, 0xde, 0x36, 0xdf, 0xcf, 0xc6, 0xf1, 0x10, 0xe3, 0x2f, 0xc6, 0xd5,
+	0x50, 0x5b, 0xe1, 0x5c, 0x9a, 0x3a, 0x54, 0xd1, 0xcc, 0x36, 0xd5, 0x0e, 0xc8, 0xaf, 0xfb, 0xfa,
+	0x02, 0xe7, 0x72, 0x71, 0xa8, 0x2f, 0x66, 0xf6, 0xa2, 0xa9, 0x7f, 0x37, 0xae, 0x75, 0xd2, 0x71,
+	0x70, 0x2e, 0x1d, 0xe7, 0x40, 0x38, 0xce, 0xcc, 0x76, 0x9c, 0x86, 0x59, 0xb6, 0x9a, 0xc6, 0xec,
+	0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x79, 0x78, 0x3b, 0xfd, 0xe5, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/keyword_match_type.pb.go b/googleapis/ads/googleads/v3/enums/keyword_match_type.pb.go
new file mode 100644
index 0000000..2be2197
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/keyword_match_type.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/keyword_match_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible Keyword match types.
+type KeywordMatchTypeEnum_KeywordMatchType int32
+
+const (
+	// Not specified.
+	KeywordMatchTypeEnum_UNSPECIFIED KeywordMatchTypeEnum_KeywordMatchType = 0
+	// Used for return value only. Represents value unknown in this version.
+	KeywordMatchTypeEnum_UNKNOWN KeywordMatchTypeEnum_KeywordMatchType = 1
+	// Exact match.
+	KeywordMatchTypeEnum_EXACT KeywordMatchTypeEnum_KeywordMatchType = 2
+	// Phrase match.
+	KeywordMatchTypeEnum_PHRASE KeywordMatchTypeEnum_KeywordMatchType = 3
+	// Broad match.
+	KeywordMatchTypeEnum_BROAD KeywordMatchTypeEnum_KeywordMatchType = 4
+)
+
+var KeywordMatchTypeEnum_KeywordMatchType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EXACT",
+	3: "PHRASE",
+	4: "BROAD",
+}
+
+var KeywordMatchTypeEnum_KeywordMatchType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EXACT":       2,
+	"PHRASE":      3,
+	"BROAD":       4,
+}
+
+func (x KeywordMatchTypeEnum_KeywordMatchType) String() string {
+	return proto.EnumName(KeywordMatchTypeEnum_KeywordMatchType_name, int32(x))
+}
+
+func (KeywordMatchTypeEnum_KeywordMatchType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_40ad762a8e7a3289, []int{0, 0}
+}
+
+// Message describing Keyword match types.
+type KeywordMatchTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordMatchTypeEnum) Reset()         { *m = KeywordMatchTypeEnum{} }
+func (m *KeywordMatchTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordMatchTypeEnum) ProtoMessage()    {}
+func (*KeywordMatchTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_40ad762a8e7a3289, []int{0}
+}
+
+func (m *KeywordMatchTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Unmarshal(m, b)
+}
+func (m *KeywordMatchTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordMatchTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordMatchTypeEnum.Merge(m, src)
+}
+func (m *KeywordMatchTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Size(m)
+}
+func (m *KeywordMatchTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordMatchTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordMatchTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType", KeywordMatchTypeEnum_KeywordMatchType_name, KeywordMatchTypeEnum_KeywordMatchType_value)
+	proto.RegisterType((*KeywordMatchTypeEnum)(nil), "google.ads.googleads.v3.enums.KeywordMatchTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/keyword_match_type.proto", fileDescriptor_40ad762a8e7a3289)
+}
+
+var fileDescriptor_40ad762a8e7a3289 = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4e, 0xc2, 0x30,
+	0x18, 0x97, 0xa1, 0x18, 0xcb, 0xc1, 0x65, 0xd1, 0x8b, 0x91, 0x03, 0x3c, 0x40, 0x77, 0x58, 0xe2,
+	0xa1, 0x9e, 0x3a, 0x98, 0x48, 0x88, 0x63, 0xe1, 0x9f, 0xc6, 0x2c, 0x21, 0x95, 0x36, 0x15, 0x65,
+	0xed, 0x42, 0x07, 0x86, 0xd7, 0xf1, 0xe8, 0xa3, 0xf8, 0x28, 0x3c, 0x85, 0x69, 0x2b, 0x3b, 0x90,
+	0xe8, 0xa5, 0xf9, 0xe5, 0xfb, 0xfd, 0xe9, 0xef, 0xfb, 0xc0, 0x0d, 0x97, 0x92, 0x2f, 0x99, 0x4f,
+	0xa8, 0xf2, 0x2d, 0xd4, 0x68, 0x13, 0xf8, 0x4c, 0xac, 0x33, 0xe5, 0xbf, 0xb3, 0xed, 0x87, 0x5c,
+	0xd1, 0x59, 0x46, 0x8a, 0xf9, 0xeb, 0xac, 0xd8, 0xe6, 0x0c, 0xe6, 0x2b, 0x59, 0x48, 0xaf, 0x61,
+	0xc5, 0x90, 0x50, 0x05, 0x4b, 0x1f, 0xdc, 0x04, 0xd0, 0xf8, 0xae, 0xae, 0xf7, 0xb1, 0xf9, 0xc2,
+	0x27, 0x42, 0xc8, 0x82, 0x14, 0x0b, 0x29, 0x94, 0x35, 0xb7, 0xde, 0xc0, 0x45, 0xdf, 0x06, 0x3f,
+	0xe8, 0xdc, 0xf1, 0x36, 0x67, 0x91, 0x58, 0x67, 0xad, 0x21, 0x70, 0x0f, 0xe7, 0xde, 0x39, 0xa8,
+	0x4f, 0xe2, 0x51, 0x12, 0xb5, 0x7b, 0x77, 0xbd, 0xa8, 0xe3, 0x1e, 0x79, 0x75, 0x70, 0x3a, 0x89,
+	0xfb, 0xf1, 0xe0, 0x31, 0x76, 0x2b, 0xde, 0x19, 0x38, 0x89, 0x9e, 0x70, 0x7b, 0xec, 0x3a, 0x1e,
+	0x00, 0xb5, 0xe4, 0x7e, 0x88, 0x47, 0x91, 0x5b, 0xd5, 0xe3, 0x70, 0x38, 0xc0, 0x1d, 0xf7, 0x38,
+	0xdc, 0x55, 0x40, 0x73, 0x2e, 0x33, 0xf8, 0x6f, 0xdf, 0xf0, 0xf2, 0xf0, 0xdf, 0x44, 0x17, 0x4d,
+	0x2a, 0xcf, 0xe1, 0xaf, 0x8f, 0xcb, 0x25, 0x11, 0x1c, 0xca, 0x15, 0xf7, 0x39, 0x13, 0x66, 0x8d,
+	0xfd, 0xbd, 0xf2, 0x85, 0xfa, 0xe3, 0x7c, 0xb7, 0xe6, 0xfd, 0x74, 0xaa, 0x5d, 0x8c, 0xbf, 0x9c,
+	0x46, 0xd7, 0x46, 0x61, 0xaa, 0xa0, 0x85, 0x1a, 0x4d, 0x03, 0xa8, 0x77, 0x57, 0xdf, 0x7b, 0x3e,
+	0xc5, 0x54, 0xa5, 0x25, 0x9f, 0x4e, 0x83, 0xd4, 0xf0, 0x3b, 0xa7, 0x69, 0x87, 0x08, 0x61, 0xaa,
+	0x10, 0x2a, 0x15, 0x08, 0x4d, 0x03, 0x84, 0x8c, 0xe6, 0xa5, 0x66, 0x8a, 0x05, 0x3f, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0xbd, 0xe1, 0xac, 0xf4, 0xd6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/keyword_plan_competition_level.pb.go b/googleapis/ads/googleads/v3/enums/keyword_plan_competition_level.pb.go
new file mode 100644
index 0000000..1ed1d24
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/keyword_plan_competition_level.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/keyword_plan_competition_level.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Competition level of a keyword.
+type KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel int32
+
+const (
+	// Not specified.
+	KeywordPlanCompetitionLevelEnum_UNSPECIFIED KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 0
+	// The value is unknown in this version.
+	KeywordPlanCompetitionLevelEnum_UNKNOWN KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 1
+	// Low competition.
+	KeywordPlanCompetitionLevelEnum_LOW KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 2
+	// Medium competition.
+	KeywordPlanCompetitionLevelEnum_MEDIUM KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 3
+	// High competition.
+	KeywordPlanCompetitionLevelEnum_HIGH KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 4
+)
+
+var KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOW",
+	3: "MEDIUM",
+	4: "HIGH",
+}
+
+var KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"LOW":         2,
+	"MEDIUM":      3,
+	"HIGH":        4,
+}
+
+func (x KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel) String() string {
+	return proto.EnumName(KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name, int32(x))
+}
+
+func (KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_aaf960a010cf6f64, []int{0, 0}
+}
+
+// Container for enumeration of keyword competition levels. The competition
+// level indicates how competitive ad placement is for a keyword and
+// is determined by the number of advertisers bidding on that keyword relative
+// to all keywords across Google. The competition level can depend on the
+// location and Search Network targeting options you've selected.
+type KeywordPlanCompetitionLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanCompetitionLevelEnum) Reset()         { *m = KeywordPlanCompetitionLevelEnum{} }
+func (m *KeywordPlanCompetitionLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCompetitionLevelEnum) ProtoMessage()    {}
+func (*KeywordPlanCompetitionLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aaf960a010cf6f64, []int{0}
+}
+
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Merge(m, src)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Size(m)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCompetitionLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCompetitionLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel", KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name, KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_value)
+	proto.RegisterType((*KeywordPlanCompetitionLevelEnum)(nil), "google.ads.googleads.v3.enums.KeywordPlanCompetitionLevelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/keyword_plan_competition_level.proto", fileDescriptor_aaf960a010cf6f64)
+}
+
+var fileDescriptor_aaf960a010cf6f64 = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xb1, 0x6e, 0xf2, 0x30,
+	0x18, 0xfc, 0x09, 0x08, 0x7e, 0x99, 0xa1, 0x51, 0xc6, 0xb6, 0xa8, 0x85, 0x07, 0x70, 0x86, 0x6c,
+	0xee, 0x14, 0x20, 0x85, 0x08, 0x08, 0x91, 0x2a, 0x40, 0x42, 0x91, 0x90, 0x8b, 0x2d, 0x2b, 0xaa,
+	0x63, 0x47, 0x38, 0x50, 0x75, 0xe8, 0xcb, 0x74, 0xec, 0xa3, 0xf4, 0x51, 0xba, 0x77, 0xaf, 0x6c,
+	0x17, 0x3a, 0x95, 0x25, 0x3a, 0xe5, 0xee, 0xbb, 0xf3, 0x1d, 0xe8, 0x33, 0x29, 0x19, 0xa7, 0x3e,
+	0x26, 0xca, 0xb7, 0x50, 0xa3, 0x43, 0xe0, 0x53, 0xb1, 0x2f, 0x94, 0xff, 0x44, 0x5f, 0x9e, 0xe5,
+	0x8e, 0x6c, 0x4a, 0x8e, 0xc5, 0x66, 0x2b, 0x8b, 0x92, 0x56, 0x79, 0x95, 0x4b, 0xb1, 0xe1, 0xf4,
+	0x40, 0x39, 0x2c, 0x77, 0xb2, 0x92, 0x5e, 0xc7, 0x1e, 0x42, 0x4c, 0x14, 0x3c, 0x79, 0xc0, 0x43,
+	0x00, 0x8d, 0xc7, 0xe5, 0xf5, 0x31, 0xa2, 0xcc, 0x7d, 0x2c, 0x84, 0xac, 0xb0, 0x76, 0x50, 0xf6,
+	0xb8, 0xf7, 0x0a, 0x6e, 0x26, 0x36, 0x24, 0xe5, 0x58, 0x0c, 0x7e, 0x23, 0xa6, 0x3a, 0x21, 0x12,
+	0xfb, 0xa2, 0xb7, 0x06, 0x57, 0x67, 0x24, 0xde, 0x05, 0x68, 0x2f, 0x92, 0x87, 0x34, 0x1a, 0xc4,
+	0xf7, 0x71, 0x34, 0x74, 0xff, 0x79, 0x6d, 0xd0, 0x5a, 0x24, 0x93, 0x64, 0xbe, 0x4a, 0xdc, 0x9a,
+	0xd7, 0x02, 0xf5, 0xe9, 0x7c, 0xe5, 0x3a, 0x1e, 0x00, 0xcd, 0x59, 0x34, 0x8c, 0x17, 0x33, 0xb7,
+	0xee, 0xfd, 0x07, 0x8d, 0x71, 0x3c, 0x1a, 0xbb, 0x8d, 0xfe, 0x57, 0x0d, 0x74, 0xb7, 0xb2, 0x80,
+	0x67, 0x2b, 0xf4, 0x6f, 0xcf, 0xe4, 0xa7, 0xba, 0x46, 0x5a, 0x5b, 0xff, 0x2c, 0x09, 0x99, 0xe4,
+	0x58, 0x30, 0x28, 0x77, 0xcc, 0x67, 0x54, 0x98, 0x92, 0xc7, 0x65, 0xcb, 0x5c, 0xfd, 0x31, 0xf4,
+	0x9d, 0xf9, 0xbe, 0x39, 0xf5, 0x51, 0x18, 0xbe, 0x3b, 0x9d, 0x91, 0xb5, 0x0a, 0x89, 0x82, 0x16,
+	0x6a, 0xb4, 0x0c, 0xa0, 0x9e, 0x43, 0x7d, 0x1c, 0xf9, 0x2c, 0x24, 0x2a, 0x3b, 0xf1, 0xd9, 0x32,
+	0xc8, 0x0c, 0xff, 0xe9, 0x74, 0xed, 0x4f, 0x84, 0x42, 0xa2, 0x10, 0x3a, 0x29, 0x10, 0x5a, 0x06,
+	0x08, 0x19, 0xcd, 0x63, 0xd3, 0x3c, 0x2c, 0xf8, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x87, 0x6a,
+	0xf6, 0x00, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/keyword_plan_forecast_interval.pb.go b/googleapis/ads/googleads/v3/enums/keyword_plan_forecast_interval.pb.go
new file mode 100644
index 0000000..16c1b96
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/keyword_plan_forecast_interval.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/keyword_plan_forecast_interval.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Forecast intervals.
+type KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval int32
+
+const (
+	// Not specified.
+	KeywordPlanForecastIntervalEnum_UNSPECIFIED KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 0
+	// The value is unknown in this version.
+	KeywordPlanForecastIntervalEnum_UNKNOWN KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 1
+	// The next week date range for keyword plan. The next week is based
+	// on the default locale of the user's account and is mostly SUN-SAT or
+	// MON-SUN.
+	// This can be different from next-7 days.
+	KeywordPlanForecastIntervalEnum_NEXT_WEEK KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 3
+	// The next month date range for keyword plan.
+	KeywordPlanForecastIntervalEnum_NEXT_MONTH KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 4
+	// The next quarter date range for keyword plan.
+	KeywordPlanForecastIntervalEnum_NEXT_QUARTER KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 5
+)
+
+var KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "NEXT_WEEK",
+	4: "NEXT_MONTH",
+	5: "NEXT_QUARTER",
+}
+
+var KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"NEXT_WEEK":    3,
+	"NEXT_MONTH":   4,
+	"NEXT_QUARTER": 5,
+}
+
+func (x KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval) String() string {
+	return proto.EnumName(KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name, int32(x))
+}
+
+func (KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7a59f184ceefa6df, []int{0, 0}
+}
+
+// Container for enumeration of forecast intervals.
+type KeywordPlanForecastIntervalEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanForecastIntervalEnum) Reset()         { *m = KeywordPlanForecastIntervalEnum{} }
+func (m *KeywordPlanForecastIntervalEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanForecastIntervalEnum) ProtoMessage()    {}
+func (*KeywordPlanForecastIntervalEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7a59f184ceefa6df, []int{0}
+}
+
+func (m *KeywordPlanForecastIntervalEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanForecastIntervalEnum.Merge(m, src)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Size(m)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanForecastIntervalEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanForecastIntervalEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval", KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name, KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_value)
+	proto.RegisterType((*KeywordPlanForecastIntervalEnum)(nil), "google.ads.googleads.v3.enums.KeywordPlanForecastIntervalEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/keyword_plan_forecast_interval.proto", fileDescriptor_7a59f184ceefa6df)
+}
+
+var fileDescriptor_7a59f184ceefa6df = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xf3, 0x30,
+	0x10, 0xfd, 0xd2, 0x7e, 0x80, 0x70, 0xf9, 0x89, 0xb2, 0x04, 0x2a, 0x68, 0x0f, 0xe0, 0x2c, 0xb2,
+	0x33, 0xab, 0x14, 0xdc, 0x52, 0x55, 0xa4, 0xa1, 0xf4, 0x07, 0xa1, 0x48, 0x91, 0x69, 0x8c, 0x15,
+	0xe1, 0xda, 0x51, 0x9c, 0x16, 0x71, 0x0a, 0xee, 0xc0, 0x92, 0xa3, 0x70, 0x14, 0xf6, 0xec, 0x51,
+	0xec, 0xb6, 0x3b, 0xb2, 0xb1, 0xde, 0x78, 0x66, 0xde, 0x9b, 0xf7, 0x40, 0x87, 0x49, 0xc9, 0x38,
+	0x75, 0x49, 0xa2, 0x5c, 0x03, 0x4b, 0xb4, 0xf2, 0x5c, 0x2a, 0x96, 0x0b, 0xe5, 0xbe, 0xd0, 0xb7,
+	0x57, 0x99, 0x27, 0x71, 0xc6, 0x89, 0x88, 0x9f, 0x65, 0x4e, 0xe7, 0x44, 0x15, 0x71, 0x2a, 0x0a,
+	0x9a, 0xaf, 0x08, 0x87, 0x59, 0x2e, 0x0b, 0xe9, 0x34, 0xcd, 0x22, 0x24, 0x89, 0x82, 0x5b, 0x0e,
+	0xb8, 0xf2, 0xa0, 0xe6, 0x38, 0x39, 0xdb, 0x48, 0x64, 0xa9, 0x4b, 0x84, 0x90, 0x05, 0x29, 0x52,
+	0x29, 0x94, 0x59, 0x6e, 0xbf, 0x5b, 0xe0, 0x7c, 0x60, 0x54, 0x42, 0x4e, 0x44, 0x77, 0xad, 0xd1,
+	0x5f, 0x4b, 0x60, 0xb1, 0x5c, 0xb4, 0x39, 0x38, 0xad, 0x18, 0x71, 0x8e, 0x41, 0x63, 0x12, 0xdc,
+	0x87, 0xf8, 0xaa, 0xdf, 0xed, 0xe3, 0x6b, 0xfb, 0x9f, 0xd3, 0x00, 0x7b, 0x93, 0x60, 0x10, 0x0c,
+	0x67, 0x81, 0x6d, 0x39, 0x87, 0x60, 0x3f, 0xc0, 0x0f, 0xe3, 0x78, 0x86, 0xf1, 0xc0, 0xae, 0x3b,
+	0x47, 0x00, 0xe8, 0xf2, 0x76, 0x18, 0x8c, 0x6f, 0xec, 0xff, 0x8e, 0x0d, 0x0e, 0x74, 0x7d, 0x37,
+	0xf1, 0x47, 0x63, 0x3c, 0xb2, 0x77, 0x3a, 0x3f, 0x16, 0x68, 0xcd, 0xe5, 0x02, 0x56, 0xba, 0xea,
+	0x5c, 0x54, 0x5c, 0x14, 0x96, 0xce, 0x42, 0xeb, 0x71, 0x1d, 0x2e, 0x64, 0x92, 0x13, 0xc1, 0xa0,
+	0xcc, 0x99, 0xcb, 0xa8, 0xd0, 0xbe, 0x37, 0x61, 0x67, 0xa9, 0xfa, 0x23, 0xfb, 0x4b, 0xfd, 0x7e,
+	0xd4, 0xea, 0x3d, 0xdf, 0xff, 0xac, 0x35, 0x7b, 0x86, 0xca, 0x4f, 0x14, 0x34, 0xb0, 0x44, 0x53,
+	0x0f, 0x96, 0x01, 0xa9, 0xaf, 0x4d, 0x3f, 0xf2, 0x13, 0x15, 0x6d, 0xfb, 0xd1, 0xd4, 0x8b, 0x74,
+	0xff, 0xbb, 0xd6, 0x32, 0x9f, 0x08, 0xf9, 0x89, 0x42, 0x68, 0x3b, 0x81, 0xd0, 0xd4, 0x43, 0x48,
+	0xcf, 0x3c, 0xed, 0xea, 0xc3, 0xbc, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x04, 0x05, 0xe3,
+	0x13, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/keyword_plan_network.pb.go b/googleapis/ads/googleads/v3/enums/keyword_plan_network.pb.go
new file mode 100644
index 0000000..7195e9a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/keyword_plan_network.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/keyword_plan_network.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates keyword plan forecastable network types.
+type KeywordPlanNetworkEnum_KeywordPlanNetwork int32
+
+const (
+	// Not specified.
+	KeywordPlanNetworkEnum_UNSPECIFIED KeywordPlanNetworkEnum_KeywordPlanNetwork = 0
+	// The value is unknown in this version.
+	KeywordPlanNetworkEnum_UNKNOWN KeywordPlanNetworkEnum_KeywordPlanNetwork = 1
+	// Google Search.
+	KeywordPlanNetworkEnum_GOOGLE_SEARCH KeywordPlanNetworkEnum_KeywordPlanNetwork = 2
+	// Google Search + Search partners.
+	KeywordPlanNetworkEnum_GOOGLE_SEARCH_AND_PARTNERS KeywordPlanNetworkEnum_KeywordPlanNetwork = 3
+)
+
+var KeywordPlanNetworkEnum_KeywordPlanNetwork_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "GOOGLE_SEARCH",
+	3: "GOOGLE_SEARCH_AND_PARTNERS",
+}
+
+var KeywordPlanNetworkEnum_KeywordPlanNetwork_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"GOOGLE_SEARCH":              2,
+	"GOOGLE_SEARCH_AND_PARTNERS": 3,
+}
+
+func (x KeywordPlanNetworkEnum_KeywordPlanNetwork) String() string {
+	return proto.EnumName(KeywordPlanNetworkEnum_KeywordPlanNetwork_name, int32(x))
+}
+
+func (KeywordPlanNetworkEnum_KeywordPlanNetwork) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_01afaeca21e51bd7, []int{0, 0}
+}
+
+// Container for enumeration of keyword plan forecastable network types.
+type KeywordPlanNetworkEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanNetworkEnum) Reset()         { *m = KeywordPlanNetworkEnum{} }
+func (m *KeywordPlanNetworkEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNetworkEnum) ProtoMessage()    {}
+func (*KeywordPlanNetworkEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01afaeca21e51bd7, []int{0}
+}
+
+func (m *KeywordPlanNetworkEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanNetworkEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanNetworkEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNetworkEnum.Merge(m, src)
+}
+func (m *KeywordPlanNetworkEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Size(m)
+}
+func (m *KeywordPlanNetworkEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNetworkEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNetworkEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork", KeywordPlanNetworkEnum_KeywordPlanNetwork_name, KeywordPlanNetworkEnum_KeywordPlanNetwork_value)
+	proto.RegisterType((*KeywordPlanNetworkEnum)(nil), "google.ads.googleads.v3.enums.KeywordPlanNetworkEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/keyword_plan_network.proto", fileDescriptor_01afaeca21e51bd7)
+}
+
+var fileDescriptor_01afaeca21e51bd7 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x1d, 0x28, 0x64, 0x88, 0xb5, 0x07, 0x85, 0xe1, 0x84, 0xed, 0x01, 0xd2, 0x43, 0x2f,
+	0x12, 0x4f, 0xd9, 0x56, 0xeb, 0x98, 0x64, 0x65, 0x73, 0x13, 0xa4, 0x50, 0xa2, 0x09, 0x61, 0xac,
+	0x4b, 0x4a, 0xd3, 0x6d, 0x78, 0xf2, 0x5d, 0x3c, 0xfa, 0x28, 0x3e, 0x8a, 0xf8, 0x10, 0xd2, 0xc4,
+	0x0d, 0x64, 0xe8, 0x25, 0x7c, 0xe4, 0xfb, 0xc3, 0xf7, 0xfb, 0xc0, 0x95, 0x50, 0x4a, 0x64, 0xdc,
+	0xa7, 0x4c, 0xfb, 0x16, 0x56, 0x68, 0x1d, 0xf8, 0x5c, 0xae, 0x96, 0xda, 0x5f, 0xf0, 0x97, 0x8d,
+	0x2a, 0x58, 0x9a, 0x67, 0x54, 0xa6, 0x92, 0x97, 0x1b, 0x55, 0x2c, 0x60, 0x5e, 0xa8, 0x52, 0x79,
+	0x2d, 0x2b, 0x87, 0x94, 0x69, 0xb8, 0x73, 0xc2, 0x75, 0x00, 0x8d, 0xb3, 0x79, 0xb1, 0x0d, 0xce,
+	0xe7, 0x3e, 0x95, 0x52, 0x95, 0xb4, 0x9c, 0x2b, 0xa9, 0xad, 0xb9, 0xf3, 0x0a, 0xce, 0x86, 0x36,
+	0x3a, 0xce, 0xa8, 0x24, 0x36, 0x38, 0x94, 0xab, 0x65, 0x87, 0x03, 0x6f, 0x9f, 0xf1, 0x4e, 0x40,
+	0x63, 0x4a, 0x26, 0x71, 0xd8, 0x1b, 0xdc, 0x0c, 0xc2, 0xbe, 0x7b, 0xe0, 0x35, 0xc0, 0xd1, 0x94,
+	0x0c, 0xc9, 0xe8, 0x81, 0xb8, 0x35, 0xef, 0x14, 0x1c, 0x47, 0xa3, 0x51, 0x74, 0x17, 0xa6, 0x93,
+	0x10, 0x8f, 0x7b, 0xb7, 0xae, 0xe3, 0x5d, 0x82, 0xe6, 0xaf, 0xaf, 0x14, 0x93, 0x7e, 0x1a, 0xe3,
+	0xf1, 0x3d, 0x09, 0xc7, 0x13, 0xb7, 0xde, 0xfd, 0xaa, 0x81, 0xf6, 0xb3, 0x5a, 0xc2, 0x7f, 0x8f,
+	0xe8, 0x9e, 0xef, 0x57, 0x89, 0xab, 0xfe, 0x71, 0xed, 0xb1, 0xfb, 0xe3, 0x14, 0x2a, 0xa3, 0x52,
+	0x40, 0x55, 0x08, 0x5f, 0x70, 0x69, 0xae, 0xdb, 0x0e, 0x99, 0xcf, 0xf5, 0x1f, 0xbb, 0x5e, 0x9b,
+	0xf7, 0xcd, 0xa9, 0x47, 0x18, 0xbf, 0x3b, 0xad, 0xc8, 0x46, 0x61, 0xa6, 0xa1, 0x85, 0x15, 0x9a,
+	0x05, 0xb0, 0x1a, 0x44, 0x7f, 0x6c, 0xf9, 0x04, 0x33, 0x9d, 0xec, 0xf8, 0x64, 0x16, 0x24, 0x86,
+	0xff, 0x74, 0xda, 0xf6, 0x13, 0x21, 0xcc, 0x34, 0x42, 0x3b, 0x05, 0x42, 0xb3, 0x00, 0x21, 0xa3,
+	0x79, 0x3a, 0x34, 0xc5, 0x82, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0x75, 0x65, 0x21, 0xef,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/label_status.pb.go b/googleapis/ads/googleads/v3/enums/label_status.pb.go
new file mode 100644
index 0000000..3156d23
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/label_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/label_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a label.
+type LabelStatusEnum_LabelStatus int32
+
+const (
+	// Not specified.
+	LabelStatusEnum_UNSPECIFIED LabelStatusEnum_LabelStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	LabelStatusEnum_UNKNOWN LabelStatusEnum_LabelStatus = 1
+	// Label is enabled.
+	LabelStatusEnum_ENABLED LabelStatusEnum_LabelStatus = 2
+	// Label is removed.
+	LabelStatusEnum_REMOVED LabelStatusEnum_LabelStatus = 3
+)
+
+var LabelStatusEnum_LabelStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var LabelStatusEnum_LabelStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x LabelStatusEnum_LabelStatus) String() string {
+	return proto.EnumName(LabelStatusEnum_LabelStatus_name, int32(x))
+}
+
+func (LabelStatusEnum_LabelStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d2f43f327476a4c8, []int{0, 0}
+}
+
+// Container for enum describing possible status of a label.
+type LabelStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LabelStatusEnum) Reset()         { *m = LabelStatusEnum{} }
+func (m *LabelStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*LabelStatusEnum) ProtoMessage()    {}
+func (*LabelStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d2f43f327476a4c8, []int{0}
+}
+
+func (m *LabelStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LabelStatusEnum.Unmarshal(m, b)
+}
+func (m *LabelStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LabelStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *LabelStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LabelStatusEnum.Merge(m, src)
+}
+func (m *LabelStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_LabelStatusEnum.Size(m)
+}
+func (m *LabelStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LabelStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabelStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LabelStatusEnum_LabelStatus", LabelStatusEnum_LabelStatus_name, LabelStatusEnum_LabelStatus_value)
+	proto.RegisterType((*LabelStatusEnum)(nil), "google.ads.googleads.v3.enums.LabelStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/label_status.proto", fileDescriptor_d2f43f327476a4c8)
+}
+
+var fileDescriptor_d2f43f327476a4c8 = []byte{
+	// 294 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x6b, 0xbb, 0x30,
+	0x18, 0xfe, 0x69, 0xe1, 0x37, 0x88, 0x87, 0x8a, 0xc7, 0xb1, 0x1e, 0xda, 0x0f, 0x90, 0x0c, 0x72,
+	0xcb, 0x4e, 0x71, 0x66, 0xa5, 0xac, 0xb3, 0xb2, 0x52, 0x37, 0x86, 0x30, 0xd2, 0x29, 0x41, 0xd0,
+	0x44, 0x1a, 0xed, 0x07, 0xda, 0x71, 0x1f, 0x65, 0xdf, 0x63, 0x97, 0x7d, 0x8a, 0x91, 0x58, 0xa5,
+	0x97, 0xed, 0x22, 0xcf, 0xfb, 0x3e, 0x7f, 0x7c, 0xf2, 0x82, 0x6b, 0xa1, 0x94, 0xa8, 0x0a, 0xc4,
+	0x73, 0x8d, 0x7a, 0x68, 0xd0, 0x11, 0xa3, 0x42, 0x76, 0xb5, 0x46, 0x15, 0xdf, 0x17, 0xd5, 0xab,
+	0x6e, 0x79, 0xdb, 0x69, 0xd8, 0x1c, 0x54, 0xab, 0x82, 0x59, 0x2f, 0x83, 0x3c, 0xd7, 0x70, 0x74,
+	0xc0, 0x23, 0x86, 0xd6, 0x71, 0x79, 0x35, 0x04, 0x36, 0x25, 0xe2, 0x52, 0xaa, 0x96, 0xb7, 0xa5,
+	0x92, 0x27, 0xf3, 0xe2, 0x19, 0x4c, 0xd7, 0x26, 0x72, 0x6b, 0x13, 0x99, 0xec, 0xea, 0x05, 0x03,
+	0xde, 0xd9, 0x2a, 0x98, 0x02, 0x6f, 0x17, 0x6f, 0x13, 0x76, 0xbb, 0xba, 0x5b, 0xb1, 0xc8, 0xff,
+	0x17, 0x78, 0xe0, 0x62, 0x17, 0xdf, 0xc7, 0x9b, 0xa7, 0xd8, 0x77, 0xcc, 0xc0, 0x62, 0x1a, 0xae,
+	0x59, 0xe4, 0xbb, 0x66, 0x78, 0x64, 0x0f, 0x9b, 0x94, 0x45, 0xfe, 0x24, 0xfc, 0x72, 0xc0, 0xfc,
+	0x4d, 0xd5, 0xf0, 0xcf, 0x76, 0xa1, 0x7f, 0xf6, 0xab, 0xc4, 0x34, 0x4a, 0x9c, 0x97, 0xf0, 0x64,
+	0x11, 0xaa, 0xe2, 0x52, 0x40, 0x75, 0x10, 0x48, 0x14, 0xd2, 0xf6, 0x1d, 0x4e, 0xd2, 0x94, 0xfa,
+	0x97, 0x0b, 0xdd, 0xd8, 0xef, 0xbb, 0x3b, 0x59, 0x52, 0xfa, 0xe1, 0xce, 0x96, 0x7d, 0x14, 0xcd,
+	0x35, 0xec, 0xa1, 0x41, 0x29, 0x86, 0xe6, 0xa5, 0xfa, 0x73, 0xe0, 0x33, 0x9a, 0xeb, 0x6c, 0xe4,
+	0xb3, 0x14, 0x67, 0x96, 0xff, 0x76, 0xe7, 0xfd, 0x92, 0x10, 0x9a, 0x6b, 0x42, 0x46, 0x05, 0x21,
+	0x29, 0x26, 0xc4, 0x6a, 0xf6, 0xff, 0x6d, 0x31, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x21, 0x43,
+	0x8c, 0x14, 0xb9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/legacy_app_install_ad_app_store.pb.go b/googleapis/ads/googleads/v3/enums/legacy_app_install_ad_app_store.pb.go
new file mode 100644
index 0000000..9db4e8e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/legacy_app_install_ad_app_store.pb.go
@@ -0,0 +1,140 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/legacy_app_install_ad_app_store.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// App store type in a legacy app install ad.
+type LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore int32
+
+const (
+	// Not specified.
+	LegacyAppInstallAdAppStoreEnum_UNSPECIFIED LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 0
+	// Used for return value only. Represents value unknown in this version.
+	LegacyAppInstallAdAppStoreEnum_UNKNOWN LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 1
+	// Apple iTunes.
+	LegacyAppInstallAdAppStoreEnum_APPLE_APP_STORE LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 2
+	// Google Play.
+	LegacyAppInstallAdAppStoreEnum_GOOGLE_PLAY LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 3
+	// Windows Store.
+	LegacyAppInstallAdAppStoreEnum_WINDOWS_STORE LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 4
+	// Windows Phone Store.
+	LegacyAppInstallAdAppStoreEnum_WINDOWS_PHONE_STORE LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 5
+	// The app is hosted in a Chinese app store.
+	LegacyAppInstallAdAppStoreEnum_CN_APP_STORE LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore = 6
+)
+
+var LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "APPLE_APP_STORE",
+	3: "GOOGLE_PLAY",
+	4: "WINDOWS_STORE",
+	5: "WINDOWS_PHONE_STORE",
+	6: "CN_APP_STORE",
+}
+
+var LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"APPLE_APP_STORE":     2,
+	"GOOGLE_PLAY":         3,
+	"WINDOWS_STORE":       4,
+	"WINDOWS_PHONE_STORE": 5,
+	"CN_APP_STORE":        6,
+}
+
+func (x LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore) String() string {
+	return proto.EnumName(LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore_name, int32(x))
+}
+
+func (LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7fbe0fcc71f1681d, []int{0, 0}
+}
+
+// Container for enum describing app store type in a legacy app install ad.
+type LegacyAppInstallAdAppStoreEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LegacyAppInstallAdAppStoreEnum) Reset()         { *m = LegacyAppInstallAdAppStoreEnum{} }
+func (m *LegacyAppInstallAdAppStoreEnum) String() string { return proto.CompactTextString(m) }
+func (*LegacyAppInstallAdAppStoreEnum) ProtoMessage()    {}
+func (*LegacyAppInstallAdAppStoreEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7fbe0fcc71f1681d, []int{0}
+}
+
+func (m *LegacyAppInstallAdAppStoreEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LegacyAppInstallAdAppStoreEnum.Unmarshal(m, b)
+}
+func (m *LegacyAppInstallAdAppStoreEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LegacyAppInstallAdAppStoreEnum.Marshal(b, m, deterministic)
+}
+func (m *LegacyAppInstallAdAppStoreEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LegacyAppInstallAdAppStoreEnum.Merge(m, src)
+}
+func (m *LegacyAppInstallAdAppStoreEnum) XXX_Size() int {
+	return xxx_messageInfo_LegacyAppInstallAdAppStoreEnum.Size(m)
+}
+func (m *LegacyAppInstallAdAppStoreEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LegacyAppInstallAdAppStoreEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LegacyAppInstallAdAppStoreEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore", LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore_name, LegacyAppInstallAdAppStoreEnum_LegacyAppInstallAdAppStore_value)
+	proto.RegisterType((*LegacyAppInstallAdAppStoreEnum)(nil), "google.ads.googleads.v3.enums.LegacyAppInstallAdAppStoreEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/legacy_app_install_ad_app_store.proto", fileDescriptor_7fbe0fcc71f1681d)
+}
+
+var fileDescriptor_7fbe0fcc71f1681d = []byte{
+	// 371 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x41, 0x6b, 0xa3, 0x40,
+	0x18, 0x5d, 0xcd, 0x6e, 0x16, 0x26, 0xbb, 0xc4, 0x35, 0x87, 0x85, 0xb0, 0xd9, 0x92, 0xfc, 0x80,
+	0xf1, 0xe0, 0x6d, 0x7a, 0x9a, 0x24, 0xd6, 0x4a, 0x45, 0x87, 0xda, 0x24, 0xb4, 0x08, 0x32, 0x8d,
+	0x22, 0x82, 0x99, 0x19, 0x32, 0x26, 0xd0, 0x3f, 0xd3, 0x43, 0x8f, 0xfd, 0x17, 0xbd, 0xf6, 0xa7,
+	0xf4, 0xdc, 0x1f, 0x50, 0x1c, 0x63, 0xe8, 0x25, 0xbd, 0xc8, 0xf3, 0x7b, 0xef, 0x7b, 0x4f, 0xdf,
+	0x07, 0x66, 0x39, 0xe7, 0x79, 0x99, 0x59, 0x34, 0x95, 0x56, 0x03, 0x6b, 0xb4, 0xb7, 0xad, 0x8c,
+	0xed, 0x36, 0xd2, 0x2a, 0xb3, 0x9c, 0xae, 0x1f, 0x12, 0x2a, 0x44, 0x52, 0x30, 0x59, 0xd1, 0xb2,
+	0x4c, 0x68, 0xaa, 0x5e, 0x65, 0xc5, 0xb7, 0x19, 0x14, 0x5b, 0x5e, 0x71, 0x73, 0xd4, 0x6c, 0x42,
+	0x9a, 0x4a, 0x78, 0x34, 0x81, 0x7b, 0x1b, 0x2a, 0x93, 0xe1, 0xbf, 0x36, 0x43, 0x14, 0x16, 0x65,
+	0x8c, 0x57, 0xb4, 0x2a, 0x38, 0x93, 0xcd, 0xf2, 0xe4, 0x45, 0x03, 0xff, 0x7d, 0x15, 0x83, 0x85,
+	0xf0, 0x9a, 0x10, 0x9c, 0x62, 0x21, 0xa2, 0x3a, 0xc1, 0x61, 0xbb, 0xcd, 0xe4, 0x51, 0x03, 0xc3,
+	0xd3, 0x12, 0xb3, 0x0f, 0x7a, 0x8b, 0x20, 0x22, 0xce, 0xcc, 0xbb, 0xf0, 0x9c, 0xb9, 0xf1, 0xcd,
+	0xec, 0x81, 0x9f, 0x8b, 0xe0, 0x2a, 0x08, 0x57, 0x81, 0xa1, 0x99, 0x03, 0xd0, 0xc7, 0x84, 0xf8,
+	0x4e, 0x82, 0x09, 0x49, 0xa2, 0x9b, 0xf0, 0xda, 0x31, 0xf4, 0x7a, 0xc5, 0x0d, 0x43, 0xd7, 0x77,
+	0x12, 0xe2, 0xe3, 0x5b, 0xa3, 0x63, 0xfe, 0x01, 0xbf, 0x57, 0x5e, 0x30, 0x0f, 0x57, 0xd1, 0x41,
+	0xf3, 0xdd, 0xfc, 0x0b, 0x06, 0xed, 0x88, 0x5c, 0x86, 0x81, 0x73, 0x20, 0x7e, 0x98, 0x06, 0xf8,
+	0x35, 0x0b, 0x3e, 0xd9, 0x75, 0xa7, 0xef, 0x1a, 0x18, 0xaf, 0xf9, 0x06, 0x7e, 0xd9, 0xc3, 0xf4,
+	0xec, 0xf4, 0x3f, 0x90, 0xba, 0x0a, 0xa2, 0xdd, 0x4d, 0x0f, 0x0e, 0x39, 0x2f, 0x29, 0xcb, 0x21,
+	0xdf, 0xe6, 0x56, 0x9e, 0x31, 0x55, 0x54, 0x7b, 0x1e, 0x51, 0xc8, 0x13, 0xd7, 0x3a, 0x57, 0xcf,
+	0x27, 0xbd, 0xe3, 0x62, 0xfc, 0xac, 0x8f, 0xdc, 0xc6, 0x0a, 0xa7, 0x12, 0x36, 0xb0, 0x46, 0x4b,
+	0x1b, 0xd6, 0x95, 0xca, 0xd7, 0x96, 0x8f, 0x71, 0x2a, 0xe3, 0x23, 0x1f, 0x2f, 0xed, 0x58, 0xf1,
+	0x6f, 0xfa, 0xb8, 0x19, 0x22, 0x84, 0x53, 0x89, 0xd0, 0x51, 0x81, 0xd0, 0xd2, 0x46, 0x48, 0x69,
+	0xee, 0xbb, 0xea, 0xc3, 0xec, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8b, 0xbf, 0x9c, 0xfa, 0x45,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/listing_custom_attribute_index.pb.go b/googleapis/ads/googleads/v3/enums/listing_custom_attribute_index.pb.go
new file mode 100644
index 0000000..8209f7f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/listing_custom_attribute_index.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/listing_custom_attribute_index.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The index of the listing custom attribute.
+type ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex int32
+
+const (
+	// Not specified.
+	ListingCustomAttributeIndexEnum_UNSPECIFIED ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 0
+	// Used for return value only. Represents value unknown in this version.
+	ListingCustomAttributeIndexEnum_UNKNOWN ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 1
+	// First listing custom attribute.
+	ListingCustomAttributeIndexEnum_INDEX0 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 7
+	// Second listing custom attribute.
+	ListingCustomAttributeIndexEnum_INDEX1 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 8
+	// Third listing custom attribute.
+	ListingCustomAttributeIndexEnum_INDEX2 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 9
+	// Fourth listing custom attribute.
+	ListingCustomAttributeIndexEnum_INDEX3 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 10
+	// Fifth listing custom attribute.
+	ListingCustomAttributeIndexEnum_INDEX4 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 11
+)
+
+var ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	7:  "INDEX0",
+	8:  "INDEX1",
+	9:  "INDEX2",
+	10: "INDEX3",
+	11: "INDEX4",
+}
+
+var ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INDEX0":      7,
+	"INDEX1":      8,
+	"INDEX2":      9,
+	"INDEX3":      10,
+	"INDEX4":      11,
+}
+
+func (x ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex) String() string {
+	return proto.EnumName(ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name, int32(x))
+}
+
+func (ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_016144a196bca518, []int{0, 0}
+}
+
+// Container for enum describing the index of the listing custom attribute.
+type ListingCustomAttributeIndexEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListingCustomAttributeIndexEnum) Reset()         { *m = ListingCustomAttributeIndexEnum{} }
+func (m *ListingCustomAttributeIndexEnum) String() string { return proto.CompactTextString(m) }
+func (*ListingCustomAttributeIndexEnum) ProtoMessage()    {}
+func (*ListingCustomAttributeIndexEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_016144a196bca518, []int{0}
+}
+
+func (m *ListingCustomAttributeIndexEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Unmarshal(m, b)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Marshal(b, m, deterministic)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingCustomAttributeIndexEnum.Merge(m, src)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Size() int {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Size(m)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingCustomAttributeIndexEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingCustomAttributeIndexEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex", ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name, ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_value)
+	proto.RegisterType((*ListingCustomAttributeIndexEnum)(nil), "google.ads.googleads.v3.enums.ListingCustomAttributeIndexEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/listing_custom_attribute_index.proto", fileDescriptor_016144a196bca518)
+}
+
+var fileDescriptor_016144a196bca518 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x14, 0xc7, 0xed, 0x84, 0x4d, 0xb3, 0x83, 0xa1, 0x47, 0x75, 0xe8, 0xf6, 0x01, 0x52, 0x35, 0x9e,
+	0xe2, 0xa9, 0xdb, 0xea, 0x28, 0x4a, 0x1d, 0xc8, 0xa6, 0x48, 0x61, 0x74, 0x4b, 0x09, 0x81, 0x35,
+	0x19, 0x4b, 0x3a, 0xfd, 0x2c, 0x1e, 0x3d, 0xfa, 0x51, 0xfc, 0x28, 0xde, 0xbd, 0x4b, 0x13, 0x9b,
+	0x9b, 0xbd, 0x94, 0x1f, 0x7d, 0xef, 0xfd, 0xff, 0xef, 0xfd, 0x03, 0x86, 0x4c, 0x4a, 0xb6, 0xce,
+	0x83, 0x8c, 0xaa, 0xc0, 0x62, 0x45, 0x3b, 0x1c, 0xe4, 0xa2, 0x2c, 0x54, 0xb0, 0xe6, 0x4a, 0x73,
+	0xc1, 0x16, 0xab, 0x52, 0x69, 0x59, 0x2c, 0x32, 0xad, 0xb7, 0x7c, 0x59, 0xea, 0x7c, 0xc1, 0x05,
+	0xcd, 0xdf, 0xd0, 0x66, 0x2b, 0xb5, 0xf4, 0x7b, 0x76, 0x10, 0x65, 0x54, 0x21, 0xa7, 0x81, 0x76,
+	0x18, 0x19, 0x8d, 0xe3, 0xd3, 0xda, 0x62, 0xc3, 0x83, 0x4c, 0x08, 0xa9, 0x33, 0xcd, 0xa5, 0x50,
+	0x76, 0x78, 0xf0, 0xee, 0x81, 0xb3, 0x7b, 0xeb, 0x32, 0x32, 0x26, 0x61, 0xed, 0x11, 0x57, 0x16,
+	0x91, 0x28, 0x8b, 0xc1, 0x2b, 0x38, 0x69, 0x68, 0xf1, 0x8f, 0x40, 0x77, 0x96, 0x3c, 0x4e, 0xa3,
+	0x51, 0x7c, 0x1b, 0x47, 0x63, 0xb8, 0xe7, 0x77, 0x41, 0x67, 0x96, 0xdc, 0x25, 0x0f, 0x4f, 0x09,
+	0xf4, 0x7c, 0x00, 0xda, 0x71, 0x32, 0x8e, 0x9e, 0x2f, 0x60, 0xc7, 0xf1, 0x25, 0x3c, 0x70, 0x7c,
+	0x05, 0x0f, 0x1d, 0x63, 0x08, 0x1c, 0x5f, 0xc3, 0xee, 0xf0, 0xc7, 0x03, 0xfd, 0x95, 0x2c, 0x50,
+	0xe3, 0x81, 0xc3, 0xf3, 0x86, 0xe5, 0xa6, 0xd5, 0x91, 0x53, 0xef, 0xe5, 0x2f, 0x67, 0xc4, 0xe4,
+	0x3a, 0x13, 0x0c, 0xc9, 0x2d, 0x0b, 0x58, 0x2e, 0x4c, 0x04, 0x75, 0xee, 0x1b, 0xae, 0xfe, 0x79,
+	0x86, 0x1b, 0xf3, 0xfd, 0x68, 0xed, 0x4f, 0xc2, 0xf0, 0xb3, 0xd5, 0x9b, 0x58, 0xa9, 0x90, 0x2a,
+	0x64, 0xb1, 0xa2, 0x39, 0x46, 0x55, 0x56, 0xea, 0xab, 0xae, 0xa7, 0x21, 0x55, 0xa9, 0xab, 0xa7,
+	0x73, 0x9c, 0x9a, 0xfa, 0x77, 0xab, 0x6f, 0x7f, 0x12, 0x12, 0x52, 0x45, 0x88, 0xeb, 0x20, 0x64,
+	0x8e, 0x09, 0x31, 0x3d, 0xcb, 0xb6, 0x59, 0x0c, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x65, 0x2e,
+	0xcc, 0x72, 0x1e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/listing_group_type.pb.go b/googleapis/ads/googleads/v3/enums/listing_group_type.pb.go
new file mode 100644
index 0000000..bd5e568
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/listing_group_type.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/listing_group_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of the listing group.
+type ListingGroupTypeEnum_ListingGroupType int32
+
+const (
+	// Not specified.
+	ListingGroupTypeEnum_UNSPECIFIED ListingGroupTypeEnum_ListingGroupType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ListingGroupTypeEnum_UNKNOWN ListingGroupTypeEnum_ListingGroupType = 1
+	// Subdivision of products along some listing dimension. These nodes
+	// are not used by serving to target listing entries, but is purely
+	// to define the structure of the tree.
+	ListingGroupTypeEnum_SUBDIVISION ListingGroupTypeEnum_ListingGroupType = 2
+	// Listing group unit that defines a bid.
+	ListingGroupTypeEnum_UNIT ListingGroupTypeEnum_ListingGroupType = 3
+)
+
+var ListingGroupTypeEnum_ListingGroupType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SUBDIVISION",
+	3: "UNIT",
+}
+
+var ListingGroupTypeEnum_ListingGroupType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"SUBDIVISION": 2,
+	"UNIT":        3,
+}
+
+func (x ListingGroupTypeEnum_ListingGroupType) String() string {
+	return proto.EnumName(ListingGroupTypeEnum_ListingGroupType_name, int32(x))
+}
+
+func (ListingGroupTypeEnum_ListingGroupType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ee9f45bd9f5ee097, []int{0, 0}
+}
+
+// Container for enum describing the type of the listing group.
+type ListingGroupTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListingGroupTypeEnum) Reset()         { *m = ListingGroupTypeEnum{} }
+func (m *ListingGroupTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ListingGroupTypeEnum) ProtoMessage()    {}
+func (*ListingGroupTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ee9f45bd9f5ee097, []int{0}
+}
+
+func (m *ListingGroupTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingGroupTypeEnum.Unmarshal(m, b)
+}
+func (m *ListingGroupTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingGroupTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ListingGroupTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingGroupTypeEnum.Merge(m, src)
+}
+func (m *ListingGroupTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ListingGroupTypeEnum.Size(m)
+}
+func (m *ListingGroupTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingGroupTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingGroupTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ListingGroupTypeEnum_ListingGroupType", ListingGroupTypeEnum_ListingGroupType_name, ListingGroupTypeEnum_ListingGroupType_value)
+	proto.RegisterType((*ListingGroupTypeEnum)(nil), "google.ads.googleads.v3.enums.ListingGroupTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/listing_group_type.proto", fileDescriptor_ee9f45bd9f5ee097)
+}
+
+var fileDescriptor_ee9f45bd9f5ee097 = []byte{
+	// 308 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xfb, 0x30,
+	0x18, 0xfe, 0xad, 0xfb, 0xa1, 0x92, 0x1d, 0x2c, 0x45, 0x2f, 0xe2, 0x0e, 0xdb, 0x07, 0x48, 0x0e,
+	0x01, 0x0f, 0xf1, 0xd4, 0xba, 0x39, 0xc2, 0x24, 0x1b, 0x6c, 0xad, 0x20, 0x85, 0x51, 0xd7, 0x12,
+	0x0a, 0x5b, 0x12, 0x9a, 0x76, 0xb0, 0xaf, 0xe3, 0xd1, 0x8f, 0xe2, 0x47, 0xd9, 0xa7, 0x90, 0x24,
+	0xb6, 0x87, 0x81, 0x5e, 0xc2, 0xc3, 0xfb, 0xfc, 0xc9, 0xf3, 0xbe, 0xe0, 0x81, 0x4b, 0xc9, 0x77,
+	0x05, 0xca, 0x72, 0x8d, 0x1c, 0x34, 0xe8, 0x80, 0x51, 0x21, 0x9a, 0xbd, 0x46, 0xbb, 0x52, 0xd7,
+	0xa5, 0xe0, 0x1b, 0x5e, 0xc9, 0x46, 0x6d, 0xea, 0xa3, 0x2a, 0xa0, 0xaa, 0x64, 0x2d, 0x83, 0xa1,
+	0x13, 0xc3, 0x2c, 0xd7, 0xb0, 0xf3, 0xc1, 0x03, 0x86, 0xd6, 0x77, 0x77, 0xdf, 0xc6, 0xaa, 0x12,
+	0x65, 0x42, 0xc8, 0x3a, 0xab, 0x4b, 0x29, 0xb4, 0x33, 0x8f, 0xb7, 0xe0, 0xe6, 0xc5, 0x05, 0xcf,
+	0x4c, 0xee, 0xfa, 0xa8, 0x8a, 0xa9, 0x68, 0xf6, 0xe3, 0x39, 0xf0, 0xcf, 0xe7, 0xc1, 0x35, 0x18,
+	0xc4, 0x6c, 0xb5, 0x9c, 0x3e, 0xd1, 0x67, 0x3a, 0x9d, 0xf8, 0xff, 0x82, 0x01, 0xb8, 0x8c, 0xd9,
+	0x9c, 0x2d, 0x5e, 0x99, 0xdf, 0x33, 0xec, 0x2a, 0x8e, 0x26, 0x34, 0xa1, 0x2b, 0xba, 0x60, 0xbe,
+	0x17, 0x5c, 0x81, 0xff, 0x31, 0xa3, 0x6b, 0xbf, 0x1f, 0x9d, 0x7a, 0x60, 0xb4, 0x95, 0x7b, 0xf8,
+	0x67, 0xd1, 0xe8, 0xf6, 0xfc, 0xc3, 0xa5, 0x69, 0xb8, 0xec, 0xbd, 0x45, 0x3f, 0x3e, 0x2e, 0x77,
+	0x99, 0xe0, 0x50, 0x56, 0x1c, 0xf1, 0x42, 0xd8, 0xfe, 0xed, 0xa1, 0x54, 0xa9, 0x7f, 0xb9, 0xdb,
+	0xa3, 0x7d, 0x3f, 0xbc, 0xfe, 0x2c, 0x0c, 0x3f, 0xbd, 0xe1, 0xcc, 0x45, 0x85, 0xb9, 0x86, 0x0e,
+	0x1a, 0x94, 0x60, 0x68, 0x96, 0xd6, 0x5f, 0x2d, 0x9f, 0x86, 0xb9, 0x4e, 0x3b, 0x3e, 0x4d, 0x70,
+	0x6a, 0xf9, 0x93, 0x37, 0x72, 0x43, 0x42, 0xc2, 0x5c, 0x13, 0xd2, 0x29, 0x08, 0x49, 0x30, 0x21,
+	0x56, 0xf3, 0x7e, 0x61, 0x8b, 0xe1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x45, 0x49, 0xb6, 0x11,
+	0xcf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/local_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/local_placeholder_field.pb.go
new file mode 100644
index 0000000..6d53ec6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/local_placeholder_field.pb.go
@@ -0,0 +1,222 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/local_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Local placeholder fields.
+type LocalPlaceholderFieldEnum_LocalPlaceholderField int32
+
+const (
+	// Not specified.
+	LocalPlaceholderFieldEnum_UNSPECIFIED LocalPlaceholderFieldEnum_LocalPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	LocalPlaceholderFieldEnum_UNKNOWN LocalPlaceholderFieldEnum_LocalPlaceholderField = 1
+	// Data Type: STRING. Required. Unique ID.
+	LocalPlaceholderFieldEnum_DEAL_ID LocalPlaceholderFieldEnum_LocalPlaceholderField = 2
+	// Data Type: STRING. Required. Main headline with local deal title to be
+	// shown in dynamic ad.
+	LocalPlaceholderFieldEnum_DEAL_NAME LocalPlaceholderFieldEnum_LocalPlaceholderField = 3
+	// Data Type: STRING. Local deal subtitle to be shown in dynamic ad.
+	LocalPlaceholderFieldEnum_SUBTITLE LocalPlaceholderFieldEnum_LocalPlaceholderField = 4
+	// Data Type: STRING. Description of local deal to be shown in dynamic ad.
+	LocalPlaceholderFieldEnum_DESCRIPTION LocalPlaceholderFieldEnum_LocalPlaceholderField = 5
+	// Data Type: STRING. Price to be shown in the ad. Highly recommended for
+	// dynamic ads. Example: "100.00 USD"
+	LocalPlaceholderFieldEnum_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 6
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	LocalPlaceholderFieldEnum_FORMATTED_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 7
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	LocalPlaceholderFieldEnum_SALE_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 8
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	LocalPlaceholderFieldEnum_FORMATTED_SALE_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 9
+	// Data Type: URL. Image to be displayed in the ad.
+	LocalPlaceholderFieldEnum_IMAGE_URL LocalPlaceholderFieldEnum_LocalPlaceholderField = 10
+	// Data Type: STRING. Complete property address, including postal code.
+	LocalPlaceholderFieldEnum_ADDRESS LocalPlaceholderFieldEnum_LocalPlaceholderField = 11
+	// Data Type: STRING. Category of local deal used to group like items
+	// together for recommendation engine.
+	LocalPlaceholderFieldEnum_CATEGORY LocalPlaceholderFieldEnum_LocalPlaceholderField = 12
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	LocalPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS LocalPlaceholderFieldEnum_LocalPlaceholderField = 13
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific local deal and its location).
+	LocalPlaceholderFieldEnum_FINAL_URLS LocalPlaceholderFieldEnum_LocalPlaceholderField = 14
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	LocalPlaceholderFieldEnum_FINAL_MOBILE_URLS LocalPlaceholderFieldEnum_LocalPlaceholderField = 15
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	LocalPlaceholderFieldEnum_TRACKING_URL LocalPlaceholderFieldEnum_LocalPlaceholderField = 16
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	LocalPlaceholderFieldEnum_ANDROID_APP_LINK LocalPlaceholderFieldEnum_LocalPlaceholderField = 17
+	// Data Type: STRING_LIST. List of recommended local deal IDs to show
+	// together with this item.
+	LocalPlaceholderFieldEnum_SIMILAR_DEAL_IDS LocalPlaceholderFieldEnum_LocalPlaceholderField = 18
+	// Data Type: STRING. iOS app link.
+	LocalPlaceholderFieldEnum_IOS_APP_LINK LocalPlaceholderFieldEnum_LocalPlaceholderField = 19
+	// Data Type: INT64. iOS app store ID.
+	LocalPlaceholderFieldEnum_IOS_APP_STORE_ID LocalPlaceholderFieldEnum_LocalPlaceholderField = 20
+)
+
+var LocalPlaceholderFieldEnum_LocalPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DEAL_ID",
+	3:  "DEAL_NAME",
+	4:  "SUBTITLE",
+	5:  "DESCRIPTION",
+	6:  "PRICE",
+	7:  "FORMATTED_PRICE",
+	8:  "SALE_PRICE",
+	9:  "FORMATTED_SALE_PRICE",
+	10: "IMAGE_URL",
+	11: "ADDRESS",
+	12: "CATEGORY",
+	13: "CONTEXTUAL_KEYWORDS",
+	14: "FINAL_URLS",
+	15: "FINAL_MOBILE_URLS",
+	16: "TRACKING_URL",
+	17: "ANDROID_APP_LINK",
+	18: "SIMILAR_DEAL_IDS",
+	19: "IOS_APP_LINK",
+	20: "IOS_APP_STORE_ID",
+}
+
+var LocalPlaceholderFieldEnum_LocalPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"DEAL_ID":              2,
+	"DEAL_NAME":            3,
+	"SUBTITLE":             4,
+	"DESCRIPTION":          5,
+	"PRICE":                6,
+	"FORMATTED_PRICE":      7,
+	"SALE_PRICE":           8,
+	"FORMATTED_SALE_PRICE": 9,
+	"IMAGE_URL":            10,
+	"ADDRESS":              11,
+	"CATEGORY":             12,
+	"CONTEXTUAL_KEYWORDS":  13,
+	"FINAL_URLS":           14,
+	"FINAL_MOBILE_URLS":    15,
+	"TRACKING_URL":         16,
+	"ANDROID_APP_LINK":     17,
+	"SIMILAR_DEAL_IDS":     18,
+	"IOS_APP_LINK":         19,
+	"IOS_APP_STORE_ID":     20,
+}
+
+func (x LocalPlaceholderFieldEnum_LocalPlaceholderField) String() string {
+	return proto.EnumName(LocalPlaceholderFieldEnum_LocalPlaceholderField_name, int32(x))
+}
+
+func (LocalPlaceholderFieldEnum_LocalPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_11210823e63e5310, []int{0, 0}
+}
+
+// Values for Local placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type LocalPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocalPlaceholderFieldEnum) Reset()         { *m = LocalPlaceholderFieldEnum{} }
+func (m *LocalPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*LocalPlaceholderFieldEnum) ProtoMessage()    {}
+func (*LocalPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_11210823e63e5310, []int{0}
+}
+
+func (m *LocalPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocalPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Size(m)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocalPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocalPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LocalPlaceholderFieldEnum_LocalPlaceholderField", LocalPlaceholderFieldEnum_LocalPlaceholderField_name, LocalPlaceholderFieldEnum_LocalPlaceholderField_value)
+	proto.RegisterType((*LocalPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.LocalPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/local_placeholder_field.proto", fileDescriptor_11210823e63e5310)
+}
+
+var fileDescriptor_11210823e63e5310 = []byte{
+	// 510 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4b, 0x6e, 0xdb, 0x30,
+	0x10, 0x6d, 0xec, 0xe6, 0x63, 0xda, 0x89, 0x19, 0xda, 0x41, 0xdb, 0xa0, 0x59, 0x24, 0x07, 0x90,
+	0x16, 0xda, 0x29, 0x2b, 0x5a, 0xa2, 0x0d, 0xc2, 0x32, 0x25, 0x90, 0x94, 0xd3, 0x14, 0x06, 0x04,
+	0xd5, 0x52, 0x55, 0x03, 0xb2, 0x68, 0x58, 0x4e, 0x0e, 0xd1, 0x63, 0x74, 0x55, 0xf4, 0x28, 0x3d,
+	0x4a, 0x37, 0xbd, 0x42, 0x41, 0xc9, 0x9f, 0x2e, 0xd2, 0x6e, 0x88, 0x99, 0x79, 0x9f, 0x19, 0x70,
+	0x06, 0xdc, 0x67, 0x4a, 0x65, 0x79, 0x6a, 0xc6, 0x49, 0x69, 0xd6, 0xa1, 0x8e, 0x9e, 0x2d, 0x33,
+	0x2d, 0x9e, 0x96, 0xa5, 0x99, 0xab, 0x79, 0x9c, 0x47, 0xab, 0x3c, 0x9e, 0xa7, 0x5f, 0x54, 0x9e,
+	0xa4, 0xeb, 0xe8, 0xf3, 0x22, 0xcd, 0x13, 0x63, 0xb5, 0x56, 0x1b, 0x85, 0x6e, 0x6a, 0x85, 0x11,
+	0x27, 0xa5, 0xb1, 0x17, 0x1b, 0xcf, 0x96, 0x51, 0x89, 0xaf, 0xdf, 0xef, 0xbc, 0x57, 0x0b, 0x33,
+	0x2e, 0x0a, 0xb5, 0x89, 0x37, 0x0b, 0x55, 0x94, 0xb5, 0xf8, 0xee, 0x7b, 0x13, 0xbc, 0xf3, 0xb4,
+	0x7d, 0x70, 0x70, 0x1f, 0x6a, 0x73, 0x52, 0x3c, 0x2d, 0xef, 0xbe, 0x36, 0xc1, 0xd5, 0x8b, 0x28,
+	0xea, 0x82, 0x76, 0xc8, 0x44, 0x40, 0x1c, 0x3a, 0xa4, 0xc4, 0x85, 0xaf, 0x50, 0x1b, 0x9c, 0x86,
+	0x6c, 0xcc, 0xfc, 0x07, 0x06, 0x8f, 0x74, 0xe2, 0x12, 0xec, 0x45, 0xd4, 0x85, 0x0d, 0x74, 0x0e,
+	0x5a, 0x55, 0xc2, 0xf0, 0x84, 0xc0, 0x26, 0xea, 0x80, 0x33, 0x11, 0x0e, 0x24, 0x95, 0x1e, 0x81,
+	0xaf, 0xb5, 0x8f, 0x4b, 0x84, 0xc3, 0x69, 0x20, 0xa9, 0xcf, 0xe0, 0x31, 0x6a, 0x81, 0xe3, 0x80,
+	0x53, 0x87, 0xc0, 0x13, 0xd4, 0x03, 0xdd, 0xa1, 0xcf, 0x27, 0x58, 0x4a, 0xe2, 0x46, 0x75, 0xf1,
+	0x14, 0x5d, 0x00, 0x20, 0xb0, 0x47, 0xb6, 0xf9, 0x19, 0x7a, 0x0b, 0xfa, 0x07, 0xd2, 0x5f, 0x48,
+	0x4b, 0xf7, 0xa5, 0x13, 0x3c, 0x22, 0x51, 0xc8, 0x3d, 0x08, 0xf4, 0x4c, 0xd8, 0x75, 0x39, 0x11,
+	0x02, 0xb6, 0xf5, 0x10, 0x0e, 0x96, 0x64, 0xe4, 0xf3, 0x47, 0xd8, 0x41, 0x6f, 0x40, 0xcf, 0xf1,
+	0x99, 0x24, 0x1f, 0x64, 0x88, 0xbd, 0x68, 0x4c, 0x1e, 0x1f, 0x7c, 0xee, 0x0a, 0x78, 0xae, 0x9b,
+	0x0d, 0x29, 0xc3, 0x9e, 0xb6, 0x10, 0xf0, 0x02, 0x5d, 0x81, 0xcb, 0x3a, 0x9f, 0xf8, 0x03, 0xea,
+	0x91, 0xba, 0xdc, 0x45, 0x10, 0x74, 0x24, 0xc7, 0xce, 0x98, 0xb2, 0x51, 0xd5, 0x0c, 0xa2, 0x3e,
+	0x80, 0x98, 0xb9, 0xdc, 0xa7, 0x6e, 0x84, 0x83, 0x20, 0xf2, 0x28, 0x1b, 0xc3, 0x4b, 0x5d, 0x15,
+	0x74, 0x42, 0x3d, 0xcc, 0xa3, 0xed, 0xf7, 0x08, 0x88, 0xb4, 0x9a, 0xfa, 0xe2, 0xc0, 0xeb, 0x69,
+	0xde, 0xae, 0x22, 0xa4, 0xcf, 0x89, 0xfe, 0xc7, 0xfe, 0xe0, 0xf7, 0x11, 0xb8, 0x9d, 0xab, 0xa5,
+	0xf1, 0xdf, 0x75, 0x0f, 0xae, 0x5f, 0xdc, 0x57, 0xa0, 0x97, 0x1d, 0x1c, 0x7d, 0x1c, 0x6c, 0xc5,
+	0x99, 0xca, 0xe3, 0x22, 0x33, 0xd4, 0x3a, 0x33, 0xb3, 0xb4, 0xa8, 0x4e, 0x61, 0x77, 0x78, 0xab,
+	0x45, 0xf9, 0x8f, 0x3b, 0xbc, 0xaf, 0xde, 0x6f, 0x8d, 0xe6, 0x08, 0xe3, 0x1f, 0x8d, 0x9b, 0x51,
+	0x6d, 0x85, 0x93, 0xd2, 0xa8, 0x43, 0x1d, 0x4d, 0x2d, 0x43, 0x5f, 0x4e, 0xf9, 0x73, 0x87, 0xcf,
+	0x70, 0x52, 0xce, 0xf6, 0xf8, 0x6c, 0x6a, 0xcd, 0x2a, 0xfc, 0x57, 0xe3, 0xb6, 0x2e, 0xda, 0x36,
+	0x4e, 0x4a, 0xdb, 0xde, 0x33, 0x6c, 0x7b, 0x6a, 0xd9, 0x76, 0xc5, 0xf9, 0x74, 0x52, 0x0d, 0x66,
+	0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0x17, 0xe8, 0x7d, 0x2f, 0x1f, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/location_extension_targeting_criterion_field.pb.go b/googleapis/ads/googleads/v3/enums/location_extension_targeting_criterion_field.pb.go
new file mode 100644
index 0000000..7b1986f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/location_extension_targeting_criterion_field.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/location_extension_targeting_criterion_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Location Extension Targeting criterion fields.
+type LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField int32
+
+const (
+	// Not specified.
+	LocationExtensionTargetingCriterionFieldEnum_UNSPECIFIED LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 0
+	// Used for return value only. Represents value unknown in this version.
+	LocationExtensionTargetingCriterionFieldEnum_UNKNOWN LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 1
+	// Data Type: STRING. Line 1 of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_ADDRESS_LINE_1 LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 2
+	// Data Type: STRING. Line 2 of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_ADDRESS_LINE_2 LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 3
+	// Data Type: STRING. City of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_CITY LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 4
+	// Data Type: STRING. Province of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_PROVINCE LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 5
+	// Data Type: STRING. Postal code of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_POSTAL_CODE LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 6
+	// Data Type: STRING. Country code of the business address.
+	LocationExtensionTargetingCriterionFieldEnum_COUNTRY_CODE LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField = 7
+)
+
+var LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADDRESS_LINE_1",
+	3: "ADDRESS_LINE_2",
+	4: "CITY",
+	5: "PROVINCE",
+	6: "POSTAL_CODE",
+	7: "COUNTRY_CODE",
+}
+
+var LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ADDRESS_LINE_1": 2,
+	"ADDRESS_LINE_2": 3,
+	"CITY":           4,
+	"PROVINCE":       5,
+	"POSTAL_CODE":    6,
+	"COUNTRY_CODE":   7,
+}
+
+func (x LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField) String() string {
+	return proto.EnumName(LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField_name, int32(x))
+}
+
+func (LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_73a9efbd1548604a, []int{0, 0}
+}
+
+// Values for Location Extension Targeting criterion fields.
+type LocationExtensionTargetingCriterionFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocationExtensionTargetingCriterionFieldEnum) Reset() {
+	*m = LocationExtensionTargetingCriterionFieldEnum{}
+}
+func (m *LocationExtensionTargetingCriterionFieldEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*LocationExtensionTargetingCriterionFieldEnum) ProtoMessage() {}
+func (*LocationExtensionTargetingCriterionFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_73a9efbd1548604a, []int{0}
+}
+
+func (m *LocationExtensionTargetingCriterionFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum.Unmarshal(m, b)
+}
+func (m *LocationExtensionTargetingCriterionFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *LocationExtensionTargetingCriterionFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum.Merge(m, src)
+}
+func (m *LocationExtensionTargetingCriterionFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum.Size(m)
+}
+func (m *LocationExtensionTargetingCriterionFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationExtensionTargetingCriterionFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField", LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField_name, LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField_value)
+	proto.RegisterType((*LocationExtensionTargetingCriterionFieldEnum)(nil), "google.ads.googleads.v3.enums.LocationExtensionTargetingCriterionFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/location_extension_targeting_criterion_field.proto", fileDescriptor_73a9efbd1548604a)
+}
+
+var fileDescriptor_73a9efbd1548604a = []byte{
+	// 383 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xc1, 0xae, 0x93, 0x40,
+	0x18, 0x85, 0x85, 0x7b, 0xbd, 0xf7, 0x66, 0xda, 0xe8, 0x64, 0x96, 0xc6, 0x2e, 0xda, 0x95, 0x0b,
+	0x1d, 0xa2, 0xec, 0xc6, 0x15, 0x85, 0x69, 0x43, 0x6c, 0x80, 0x14, 0x8a, 0xa9, 0x21, 0x21, 0x58,
+	0xc6, 0x09, 0x09, 0x9d, 0x69, 0x18, 0xda, 0xb8, 0xf6, 0x51, 0x5c, 0xea, 0x9b, 0xf8, 0x0c, 0x3e,
+	0x81, 0x4f, 0x61, 0x06, 0x4a, 0x37, 0xc6, 0x9b, 0x6e, 0xc8, 0xc9, 0xf9, 0x67, 0xbe, 0xc3, 0x9c,
+	0x1f, 0x44, 0x5c, 0x4a, 0x5e, 0x33, 0xab, 0x28, 0x95, 0xd5, 0x4b, 0xad, 0x4e, 0xb6, 0xc5, 0xc4,
+	0x71, 0xaf, 0xac, 0x5a, 0xee, 0x8a, 0xb6, 0x92, 0x22, 0x67, 0x5f, 0x5b, 0x26, 0x94, 0x56, 0x6d,
+	0xd1, 0x70, 0xd6, 0x56, 0x82, 0xe7, 0xbb, 0xa6, 0x6a, 0x59, 0xa3, 0xbd, 0x2f, 0x15, 0xab, 0x4b,
+	0x7c, 0x68, 0x64, 0x2b, 0xd1, 0xa4, 0xc7, 0xe0, 0xa2, 0x54, 0xf8, 0x42, 0xc4, 0x27, 0x1b, 0x77,
+	0xc4, 0x17, 0x2f, 0x87, 0xc0, 0x43, 0x65, 0x15, 0x42, 0xc8, 0xb6, 0xe3, 0xab, 0xfe, 0xf2, 0xec,
+	0xb7, 0x01, 0x5e, 0xaf, 0xce, 0x99, 0x74, 0x88, 0x4c, 0x86, 0x44, 0x77, 0x08, 0x5c, 0xe8, 0x3c,
+	0x2a, 0x8e, 0xfb, 0xd9, 0x4f, 0x03, 0xbc, 0xba, 0xf6, 0x02, 0x7a, 0x0e, 0x46, 0x9b, 0x20, 0x8e,
+	0xa8, 0xeb, 0x2f, 0x7c, 0xea, 0xc1, 0x27, 0x68, 0x04, 0xee, 0x37, 0xc1, 0x87, 0x20, 0xfc, 0x18,
+	0x40, 0x03, 0x21, 0xf0, 0xcc, 0xf1, 0xbc, 0x35, 0x8d, 0xe3, 0x7c, 0xe5, 0x07, 0x34, 0x7f, 0x0b,
+	0xcd, 0x7f, 0xbc, 0x77, 0xf0, 0x06, 0x3d, 0x80, 0x5b, 0xd7, 0x4f, 0xb6, 0xf0, 0x16, 0x8d, 0xc1,
+	0x43, 0xb4, 0x0e, 0x53, 0x3f, 0x70, 0x29, 0x7c, 0xaa, 0xe9, 0x51, 0x18, 0x27, 0xce, 0x2a, 0x77,
+	0x43, 0x8f, 0xc2, 0x3b, 0x04, 0xc1, 0xd8, 0x0d, 0x37, 0x41, 0xb2, 0xde, 0xf6, 0xce, 0xfd, 0xfc,
+	0x9b, 0x09, 0xa6, 0x3b, 0xb9, 0xc7, 0x8f, 0x56, 0x34, 0x7f, 0x73, 0xed, 0x83, 0x22, 0xdd, 0x59,
+	0x64, 0x7c, 0x9a, 0x9f, 0x79, 0x5c, 0xd6, 0x85, 0xe0, 0x58, 0x36, 0xdc, 0xe2, 0x4c, 0x74, 0x8d,
+	0x0e, 0x4b, 0x3d, 0x54, 0xea, 0x3f, 0x3b, 0x7e, 0xdf, 0x7d, 0xbf, 0x9b, 0x37, 0x4b, 0xc7, 0xf9,
+	0x61, 0x4e, 0x96, 0x3d, 0xca, 0x29, 0x15, 0xee, 0xa5, 0x56, 0xa9, 0x8d, 0x75, 0xdb, 0xea, 0xd7,
+	0x30, 0xcf, 0x9c, 0x52, 0x65, 0x97, 0x79, 0x96, 0xda, 0x59, 0x37, 0xff, 0x63, 0x4e, 0x7b, 0x93,
+	0x10, 0xa7, 0x54, 0x84, 0x5c, 0x4e, 0x10, 0x92, 0xda, 0x84, 0x74, 0x67, 0x3e, 0xdf, 0x75, 0x3f,
+	0x66, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x12, 0xde, 0x3f, 0xb3, 0x7b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/location_group_radius_units.pb.go b/googleapis/ads/googleads/v3/enums/location_group_radius_units.pb.go
new file mode 100644
index 0000000..025d16d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/location_group_radius_units.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/location_group_radius_units.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The unit of radius distance in location group (e.g. MILES)
+type LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits int32
+
+const (
+	// Not specified.
+	LocationGroupRadiusUnitsEnum_UNSPECIFIED LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits = 0
+	// Used for return value only. Represents value unknown in this version.
+	LocationGroupRadiusUnitsEnum_UNKNOWN LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits = 1
+	// Meters
+	LocationGroupRadiusUnitsEnum_METERS LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits = 2
+	// Miles
+	LocationGroupRadiusUnitsEnum_MILES LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits = 3
+)
+
+var LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "METERS",
+	3: "MILES",
+}
+
+var LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"METERS":      2,
+	"MILES":       3,
+}
+
+func (x LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits) String() string {
+	return proto.EnumName(LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits_name, int32(x))
+}
+
+func (LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_09c27d38d739393b, []int{0, 0}
+}
+
+// Container for enum describing unit of radius in location group.
+type LocationGroupRadiusUnitsEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocationGroupRadiusUnitsEnum) Reset()         { *m = LocationGroupRadiusUnitsEnum{} }
+func (m *LocationGroupRadiusUnitsEnum) String() string { return proto.CompactTextString(m) }
+func (*LocationGroupRadiusUnitsEnum) ProtoMessage()    {}
+func (*LocationGroupRadiusUnitsEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09c27d38d739393b, []int{0}
+}
+
+func (m *LocationGroupRadiusUnitsEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationGroupRadiusUnitsEnum.Unmarshal(m, b)
+}
+func (m *LocationGroupRadiusUnitsEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationGroupRadiusUnitsEnum.Marshal(b, m, deterministic)
+}
+func (m *LocationGroupRadiusUnitsEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationGroupRadiusUnitsEnum.Merge(m, src)
+}
+func (m *LocationGroupRadiusUnitsEnum) XXX_Size() int {
+	return xxx_messageInfo_LocationGroupRadiusUnitsEnum.Size(m)
+}
+func (m *LocationGroupRadiusUnitsEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationGroupRadiusUnitsEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationGroupRadiusUnitsEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits", LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits_name, LocationGroupRadiusUnitsEnum_LocationGroupRadiusUnits_value)
+	proto.RegisterType((*LocationGroupRadiusUnitsEnum)(nil), "google.ads.googleads.v3.enums.LocationGroupRadiusUnitsEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/location_group_radius_units.proto", fileDescriptor_09c27d38d739393b)
+}
+
+var fileDescriptor_09c27d38d739393b = []byte{
+	// 312 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xc2, 0x30,
+	0x18, 0xc7, 0x65, 0x44, 0x8c, 0xe5, 0xe0, 0xb2, 0x93, 0x31, 0x70, 0x80, 0x07, 0x68, 0x0f, 0xbd,
+	0xd5, 0x83, 0x19, 0x5a, 0x09, 0x11, 0x06, 0x01, 0xc1, 0xc4, 0x2c, 0x21, 0x95, 0x92, 0x66, 0x09,
+	0xf4, 0x5b, 0xd6, 0x8d, 0x07, 0xf2, 0xe8, 0xa3, 0xf8, 0x28, 0x1e, 0x7d, 0x02, 0xd3, 0x8e, 0xed,
+	0x36, 0x2f, 0xcb, 0x3f, 0xfb, 0x7f, 0xdf, 0xef, 0xfb, 0xf7, 0x8f, 0x1e, 0x14, 0x80, 0x3a, 0xec,
+	0x89, 0x90, 0x86, 0x94, 0xd2, 0xaa, 0x13, 0x25, 0x7b, 0x5d, 0x1c, 0x0d, 0x39, 0xc0, 0x4e, 0xe4,
+	0x09, 0xe8, 0xad, 0xca, 0xa0, 0x48, 0xb7, 0x99, 0x90, 0x49, 0x61, 0xb6, 0x85, 0x4e, 0x72, 0x83,
+	0xd3, 0x0c, 0x72, 0x08, 0xfa, 0xe5, 0x16, 0x16, 0xd2, 0xe0, 0x1a, 0x80, 0x4f, 0x14, 0x3b, 0xc0,
+	0x5d, 0xaf, 0xe2, 0xa7, 0x09, 0x11, 0x5a, 0x43, 0xee, 0x70, 0xe7, 0xe5, 0x21, 0xa0, 0xde, 0xf4,
+	0x7c, 0x61, 0x6c, 0x0f, 0x2c, 0x1d, 0x7f, 0x6d, 0xf1, 0x5c, 0x17, 0xc7, 0xe1, 0x1c, 0xdd, 0x36,
+	0xf9, 0xc1, 0x0d, 0xea, 0xae, 0xa3, 0xd5, 0x82, 0x3f, 0x4e, 0x9e, 0x27, 0xfc, 0xc9, 0xbf, 0x08,
+	0xba, 0xe8, 0x6a, 0x1d, 0xbd, 0x44, 0xf3, 0xb7, 0xc8, 0x6f, 0x05, 0x08, 0x75, 0x66, 0xfc, 0x95,
+	0x2f, 0x57, 0xbe, 0x17, 0x5c, 0xa3, 0xcb, 0xd9, 0x64, 0xca, 0x57, 0x7e, 0x7b, 0xf4, 0xdb, 0x42,
+	0x83, 0x1d, 0x1c, 0xf1, 0xbf, 0xa1, 0x47, 0xfd, 0xa6, 0xa3, 0x0b, 0x9b, 0x7a, 0xd1, 0x7a, 0x1f,
+	0x9d, 0xf7, 0x15, 0x1c, 0x84, 0x56, 0x18, 0x32, 0x45, 0xd4, 0x5e, 0xbb, 0x37, 0x55, 0x2d, 0xa6,
+	0x89, 0x69, 0x28, 0xf5, 0xde, 0x7d, 0x3f, 0xbd, 0xf6, 0x38, 0x0c, 0xbf, 0xbc, 0xfe, 0xb8, 0x44,
+	0x85, 0xd2, 0xe0, 0x52, 0x5a, 0xb5, 0xa1, 0xd8, 0x16, 0x60, 0xbe, 0x2b, 0x3f, 0x0e, 0xa5, 0x89,
+	0x6b, 0x3f, 0xde, 0xd0, 0xd8, 0xf9, 0x3f, 0xde, 0xa0, 0xfc, 0xc9, 0x58, 0x28, 0x0d, 0x63, 0xf5,
+	0x04, 0x63, 0x1b, 0xca, 0x98, 0x9b, 0xf9, 0xe8, 0xb8, 0x60, 0xf4, 0x2f, 0x00, 0x00, 0xff, 0xff,
+	0x83, 0xa1, 0xe1, 0xcd, 0xec, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/location_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/location_placeholder_field.pb.go
new file mode 100644
index 0000000..f715c5e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/location_placeholder_field.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/location_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Location placeholder fields.
+type LocationPlaceholderFieldEnum_LocationPlaceholderField int32
+
+const (
+	// Not specified.
+	LocationPlaceholderFieldEnum_UNSPECIFIED LocationPlaceholderFieldEnum_LocationPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	LocationPlaceholderFieldEnum_UNKNOWN LocationPlaceholderFieldEnum_LocationPlaceholderField = 1
+	// Data Type: STRING. The name of the business.
+	LocationPlaceholderFieldEnum_BUSINESS_NAME LocationPlaceholderFieldEnum_LocationPlaceholderField = 2
+	// Data Type: STRING. Line 1 of the business address.
+	LocationPlaceholderFieldEnum_ADDRESS_LINE_1 LocationPlaceholderFieldEnum_LocationPlaceholderField = 3
+	// Data Type: STRING. Line 2 of the business address.
+	LocationPlaceholderFieldEnum_ADDRESS_LINE_2 LocationPlaceholderFieldEnum_LocationPlaceholderField = 4
+	// Data Type: STRING. City of the business address.
+	LocationPlaceholderFieldEnum_CITY LocationPlaceholderFieldEnum_LocationPlaceholderField = 5
+	// Data Type: STRING. Province of the business address.
+	LocationPlaceholderFieldEnum_PROVINCE LocationPlaceholderFieldEnum_LocationPlaceholderField = 6
+	// Data Type: STRING. Postal code of the business address.
+	LocationPlaceholderFieldEnum_POSTAL_CODE LocationPlaceholderFieldEnum_LocationPlaceholderField = 7
+	// Data Type: STRING. Country code of the business address.
+	LocationPlaceholderFieldEnum_COUNTRY_CODE LocationPlaceholderFieldEnum_LocationPlaceholderField = 8
+	// Data Type: STRING. Phone number of the business.
+	LocationPlaceholderFieldEnum_PHONE_NUMBER LocationPlaceholderFieldEnum_LocationPlaceholderField = 9
+)
+
+var LocationPlaceholderFieldEnum_LocationPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BUSINESS_NAME",
+	3: "ADDRESS_LINE_1",
+	4: "ADDRESS_LINE_2",
+	5: "CITY",
+	6: "PROVINCE",
+	7: "POSTAL_CODE",
+	8: "COUNTRY_CODE",
+	9: "PHONE_NUMBER",
+}
+
+var LocationPlaceholderFieldEnum_LocationPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"BUSINESS_NAME":  2,
+	"ADDRESS_LINE_1": 3,
+	"ADDRESS_LINE_2": 4,
+	"CITY":           5,
+	"PROVINCE":       6,
+	"POSTAL_CODE":    7,
+	"COUNTRY_CODE":   8,
+	"PHONE_NUMBER":   9,
+}
+
+func (x LocationPlaceholderFieldEnum_LocationPlaceholderField) String() string {
+	return proto.EnumName(LocationPlaceholderFieldEnum_LocationPlaceholderField_name, int32(x))
+}
+
+func (LocationPlaceholderFieldEnum_LocationPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_06285cb96465af84, []int{0, 0}
+}
+
+// Values for Location placeholder fields.
+type LocationPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocationPlaceholderFieldEnum) Reset()         { *m = LocationPlaceholderFieldEnum{} }
+func (m *LocationPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*LocationPlaceholderFieldEnum) ProtoMessage()    {}
+func (*LocationPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_06285cb96465af84, []int{0}
+}
+
+func (m *LocationPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *LocationPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *LocationPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *LocationPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_LocationPlaceholderFieldEnum.Size(m)
+}
+func (m *LocationPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.LocationPlaceholderFieldEnum_LocationPlaceholderField", LocationPlaceholderFieldEnum_LocationPlaceholderField_name, LocationPlaceholderFieldEnum_LocationPlaceholderField_value)
+	proto.RegisterType((*LocationPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.LocationPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/location_placeholder_field.proto", fileDescriptor_06285cb96465af84)
+}
+
+var fileDescriptor_06285cb96465af84 = []byte{
+	// 392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0xae, 0x93, 0x40,
+	0x14, 0x15, 0xde, 0xf3, 0xbd, 0x3a, 0xef, 0xa9, 0xe3, 0xac, 0x8c, 0x69, 0x17, 0xed, 0x07, 0x0c,
+	0x51, 0x76, 0x63, 0x62, 0x32, 0xc0, 0xb4, 0x12, 0xdb, 0x81, 0x40, 0xc1, 0xd4, 0x90, 0x10, 0x2c,
+	0x88, 0x24, 0x94, 0x21, 0x9d, 0xb6, 0x1f, 0xe4, 0xd2, 0xaf, 0x70, 0xed, 0x5f, 0xb8, 0x75, 0xe9,
+	0x17, 0x98, 0x81, 0xb6, 0x2e, 0x4c, 0xdf, 0x86, 0x9c, 0x9c, 0x7b, 0xcf, 0x39, 0xcc, 0xb9, 0xe0,
+	0x5d, 0x29, 0x44, 0x59, 0x17, 0x46, 0x96, 0x4b, 0xa3, 0x87, 0x0a, 0x1d, 0x4c, 0xa3, 0x68, 0xf6,
+	0x1b, 0x69, 0xd4, 0x62, 0x9d, 0xed, 0x2a, 0xd1, 0xa4, 0x6d, 0x9d, 0xad, 0x8b, 0xaf, 0xa2, 0xce,
+	0x8b, 0x6d, 0xfa, 0xa5, 0x2a, 0xea, 0x1c, 0xb7, 0x5b, 0xb1, 0x13, 0x68, 0xd4, 0x8b, 0x70, 0x96,
+	0x4b, 0x7c, 0xd6, 0xe3, 0x83, 0x89, 0x3b, 0xfd, 0xab, 0xe1, 0xc9, 0xbe, 0xad, 0x8c, 0xac, 0x69,
+	0xc4, 0xae, 0x73, 0x93, 0xbd, 0x78, 0xf2, 0x4b, 0x03, 0xc3, 0xf9, 0x31, 0xc1, 0xff, 0x17, 0x30,
+	0x55, 0xfe, 0xac, 0xd9, 0x6f, 0x26, 0x3f, 0x34, 0xf0, 0xf2, 0xd2, 0x02, 0x7a, 0x0e, 0xee, 0x22,
+	0x1e, 0xfa, 0xcc, 0x76, 0xa7, 0x2e, 0x73, 0xe0, 0x23, 0x74, 0x07, 0x6e, 0x23, 0xfe, 0x81, 0x7b,
+	0x1f, 0x39, 0xd4, 0xd0, 0x0b, 0xf0, 0xd4, 0x8a, 0x42, 0x97, 0xb3, 0x30, 0x4c, 0x39, 0x5d, 0x30,
+	0xa8, 0x23, 0x04, 0x9e, 0x51, 0xc7, 0x09, 0x14, 0x33, 0x77, 0x39, 0x4b, 0x5f, 0xc3, 0xab, 0xff,
+	0xb8, 0x37, 0xf0, 0x1a, 0x0d, 0xc0, 0xb5, 0xed, 0x2e, 0x57, 0xf0, 0x31, 0xba, 0x07, 0x03, 0x3f,
+	0xf0, 0x62, 0x97, 0xdb, 0x0c, 0xde, 0xa8, 0x40, 0xdf, 0x0b, 0x97, 0x74, 0x9e, 0xda, 0x9e, 0xc3,
+	0xe0, 0x2d, 0x82, 0xe0, 0xde, 0xf6, 0x22, 0xbe, 0x0c, 0x56, 0x3d, 0x33, 0x50, 0x8c, 0xff, 0xde,
+	0xe3, 0x2c, 0xe5, 0xd1, 0xc2, 0x62, 0x01, 0x7c, 0x62, 0xfd, 0xd1, 0xc0, 0x78, 0x2d, 0x36, 0xf8,
+	0xc1, 0x9e, 0xac, 0xd1, 0xa5, 0x57, 0xfa, 0xaa, 0x28, 0x5f, 0xfb, 0x64, 0x1d, 0xf5, 0xa5, 0xa8,
+	0xb3, 0xa6, 0xc4, 0x62, 0x5b, 0x1a, 0x65, 0xd1, 0x74, 0x35, 0x9e, 0xee, 0xd6, 0x56, 0xf2, 0xc2,
+	0x19, 0xdf, 0x76, 0xdf, 0x6f, 0xfa, 0xd5, 0x8c, 0xd2, 0xef, 0xfa, 0x68, 0xd6, 0x5b, 0xd1, 0x5c,
+	0xe2, 0x1e, 0x2a, 0x14, 0x9b, 0x58, 0x55, 0x2e, 0x7f, 0x9e, 0xe6, 0x09, 0xcd, 0x65, 0x72, 0x9e,
+	0x27, 0xb1, 0x99, 0x74, 0xf3, 0xdf, 0xfa, 0xb8, 0x27, 0x09, 0xa1, 0xb9, 0x24, 0xe4, 0xbc, 0x41,
+	0x48, 0x6c, 0x12, 0xd2, 0xed, 0x7c, 0xbe, 0xe9, 0x7e, 0xcc, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff,
+	0x6c, 0x41, 0x6a, 0xaa, 0x5e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/manager_link_status.pb.go b/googleapis/ads/googleads/v3/enums/manager_link_status.pb.go
new file mode 100644
index 0000000..b19f255
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/manager_link_status.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/manager_link_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible statuses of a link.
+type ManagerLinkStatusEnum_ManagerLinkStatus int32
+
+const (
+	// Not specified.
+	ManagerLinkStatusEnum_UNSPECIFIED ManagerLinkStatusEnum_ManagerLinkStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	ManagerLinkStatusEnum_UNKNOWN ManagerLinkStatusEnum_ManagerLinkStatus = 1
+	// Indicates current in-effect relationship
+	ManagerLinkStatusEnum_ACTIVE ManagerLinkStatusEnum_ManagerLinkStatus = 2
+	// Indicates terminated relationship
+	ManagerLinkStatusEnum_INACTIVE ManagerLinkStatusEnum_ManagerLinkStatus = 3
+	// Indicates relationship has been requested by manager, but the client
+	// hasn't accepted yet.
+	ManagerLinkStatusEnum_PENDING ManagerLinkStatusEnum_ManagerLinkStatus = 4
+	// Relationship was requested by the manager, but the client has refused.
+	ManagerLinkStatusEnum_REFUSED ManagerLinkStatusEnum_ManagerLinkStatus = 5
+	// Indicates relationship has been requested by manager, but manager
+	// canceled it.
+	ManagerLinkStatusEnum_CANCELED ManagerLinkStatusEnum_ManagerLinkStatus = 6
+)
+
+var ManagerLinkStatusEnum_ManagerLinkStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ACTIVE",
+	3: "INACTIVE",
+	4: "PENDING",
+	5: "REFUSED",
+	6: "CANCELED",
+}
+
+var ManagerLinkStatusEnum_ManagerLinkStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ACTIVE":      2,
+	"INACTIVE":    3,
+	"PENDING":     4,
+	"REFUSED":     5,
+	"CANCELED":    6,
+}
+
+func (x ManagerLinkStatusEnum_ManagerLinkStatus) String() string {
+	return proto.EnumName(ManagerLinkStatusEnum_ManagerLinkStatus_name, int32(x))
+}
+
+func (ManagerLinkStatusEnum_ManagerLinkStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_00c1bfbdfc096c31, []int{0, 0}
+}
+
+// Container for enum describing possible status of a manager and client link.
+type ManagerLinkStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagerLinkStatusEnum) Reset()         { *m = ManagerLinkStatusEnum{} }
+func (m *ManagerLinkStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*ManagerLinkStatusEnum) ProtoMessage()    {}
+func (*ManagerLinkStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_00c1bfbdfc096c31, []int{0}
+}
+
+func (m *ManagerLinkStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Unmarshal(m, b)
+}
+func (m *ManagerLinkStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *ManagerLinkStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagerLinkStatusEnum.Merge(m, src)
+}
+func (m *ManagerLinkStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Size(m)
+}
+func (m *ManagerLinkStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagerLinkStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagerLinkStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ManagerLinkStatusEnum_ManagerLinkStatus", ManagerLinkStatusEnum_ManagerLinkStatus_name, ManagerLinkStatusEnum_ManagerLinkStatus_value)
+	proto.RegisterType((*ManagerLinkStatusEnum)(nil), "google.ads.googleads.v3.enums.ManagerLinkStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/manager_link_status.proto", fileDescriptor_00c1bfbdfc096c31)
+}
+
+var fileDescriptor_00c1bfbdfc096c31 = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0xb7, 0x9d, 0x4e, 0xc9, 0x04, 0x6b, 0x41, 0x0f, 0xe2, 0x0e, 0xdb, 0x03, 0xa4, 0x87, 0x1e,
+	0x84, 0x78, 0xca, 0xda, 0x6c, 0x14, 0x67, 0x2c, 0xce, 0x55, 0x90, 0xc2, 0x88, 0xb6, 0x84, 0xb2,
+	0x35, 0x19, 0x4b, 0xb7, 0xa7, 0xf0, 0x29, 0x3c, 0xfa, 0x28, 0x3e, 0x8a, 0xbe, 0x84, 0x24, 0xdd,
+	0x7a, 0x19, 0x7a, 0x09, 0xbf, 0x2f, 0xbf, 0x3f, 0x7c, 0xdf, 0x0f, 0xdc, 0x70, 0x29, 0xf9, 0x22,
+	0xf7, 0x58, 0xa6, 0xbc, 0x1a, 0x6a, 0xb4, 0xf1, 0xbd, 0x5c, 0xac, 0x4b, 0xe5, 0x95, 0x4c, 0x30,
+	0x9e, 0xaf, 0x66, 0x8b, 0x42, 0xcc, 0x67, 0xaa, 0x62, 0xd5, 0x5a, 0xc1, 0xe5, 0x4a, 0x56, 0xd2,
+	0xed, 0xd6, 0x6a, 0xc8, 0x32, 0x05, 0x1b, 0x23, 0xdc, 0xf8, 0xd0, 0x18, 0xaf, 0xae, 0x77, 0xb9,
+	0xcb, 0xc2, 0x63, 0x42, 0xc8, 0x8a, 0x55, 0x85, 0x14, 0x5b, 0x73, 0xff, 0xdd, 0x02, 0x17, 0xf7,
+	0x75, 0xf4, 0xb8, 0x10, 0xf3, 0x89, 0x09, 0x26, 0x62, 0x5d, 0xf6, 0x15, 0x38, 0xdf, 0x23, 0xdc,
+	0x33, 0xd0, 0x99, 0xd2, 0x49, 0x4c, 0x82, 0x68, 0x18, 0x91, 0xd0, 0x39, 0x70, 0x3b, 0xe0, 0x78,
+	0x4a, 0xef, 0xe8, 0xc3, 0x33, 0x75, 0x2c, 0x17, 0x80, 0x36, 0x0e, 0x9e, 0xa2, 0x84, 0x38, 0xb6,
+	0x7b, 0x0a, 0x4e, 0x22, 0xba, 0x9d, 0x5a, 0x5a, 0x16, 0x13, 0x1a, 0x46, 0x74, 0xe4, 0x1c, 0xea,
+	0xe1, 0x91, 0x0c, 0xa7, 0x13, 0x12, 0x3a, 0x47, 0x5a, 0x17, 0x60, 0x1a, 0x90, 0x31, 0x09, 0x9d,
+	0xf6, 0xe0, 0xc7, 0x02, 0xbd, 0x37, 0x59, 0xc2, 0x7f, 0x4f, 0x1a, 0x5c, 0xee, 0x2d, 0x16, 0xeb,
+	0x63, 0x62, 0xeb, 0x65, 0xb0, 0x35, 0x72, 0xb9, 0x60, 0x82, 0x43, 0xb9, 0xe2, 0x1e, 0xcf, 0x85,
+	0x39, 0x75, 0x57, 0xea, 0xb2, 0x50, 0x7f, 0x74, 0x7c, 0x6b, 0xde, 0x0f, 0xbb, 0x35, 0xc2, 0xf8,
+	0xd3, 0xee, 0x8e, 0xea, 0x28, 0x9c, 0x29, 0x58, 0x43, 0x8d, 0x12, 0x1f, 0xea, 0x76, 0xd4, 0xd7,
+	0x8e, 0x4f, 0x71, 0xa6, 0xd2, 0x86, 0x4f, 0x13, 0x3f, 0x35, 0xfc, 0xb7, 0xdd, 0xab, 0x3f, 0x11,
+	0xc2, 0x99, 0x42, 0xa8, 0x51, 0x20, 0x94, 0xf8, 0x08, 0x19, 0xcd, 0x6b, 0xdb, 0x2c, 0xe6, 0xff,
+	0x06, 0x00, 0x00, 0xff, 0xff, 0xac, 0x62, 0x97, 0x1a, 0xfb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/matching_function_context_type.pb.go b/googleapis/ads/googleads/v3/enums/matching_function_context_type.pb.go
new file mode 100644
index 0000000..6ade4d1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/matching_function_context_type.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/matching_function_context_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible context types for an operand in a matching function.
+type MatchingFunctionContextTypeEnum_MatchingFunctionContextType int32
+
+const (
+	// Not specified.
+	MatchingFunctionContextTypeEnum_UNSPECIFIED MatchingFunctionContextTypeEnum_MatchingFunctionContextType = 0
+	// Used for return value only. Represents value unknown in this version.
+	MatchingFunctionContextTypeEnum_UNKNOWN MatchingFunctionContextTypeEnum_MatchingFunctionContextType = 1
+	// Feed item id in the request context.
+	MatchingFunctionContextTypeEnum_FEED_ITEM_ID MatchingFunctionContextTypeEnum_MatchingFunctionContextType = 2
+	// The device being used (possible values are 'Desktop' or 'Mobile').
+	MatchingFunctionContextTypeEnum_DEVICE_NAME MatchingFunctionContextTypeEnum_MatchingFunctionContextType = 3
+)
+
+var MatchingFunctionContextTypeEnum_MatchingFunctionContextType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ITEM_ID",
+	3: "DEVICE_NAME",
+}
+
+var MatchingFunctionContextTypeEnum_MatchingFunctionContextType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"FEED_ITEM_ID": 2,
+	"DEVICE_NAME":  3,
+}
+
+func (x MatchingFunctionContextTypeEnum_MatchingFunctionContextType) String() string {
+	return proto.EnumName(MatchingFunctionContextTypeEnum_MatchingFunctionContextType_name, int32(x))
+}
+
+func (MatchingFunctionContextTypeEnum_MatchingFunctionContextType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_59c241b42801f559, []int{0, 0}
+}
+
+// Container for context types for an operand in a matching function.
+type MatchingFunctionContextTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MatchingFunctionContextTypeEnum) Reset()         { *m = MatchingFunctionContextTypeEnum{} }
+func (m *MatchingFunctionContextTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MatchingFunctionContextTypeEnum) ProtoMessage()    {}
+func (*MatchingFunctionContextTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_59c241b42801f559, []int{0}
+}
+
+func (m *MatchingFunctionContextTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MatchingFunctionContextTypeEnum.Unmarshal(m, b)
+}
+func (m *MatchingFunctionContextTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MatchingFunctionContextTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *MatchingFunctionContextTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MatchingFunctionContextTypeEnum.Merge(m, src)
+}
+func (m *MatchingFunctionContextTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MatchingFunctionContextTypeEnum.Size(m)
+}
+func (m *MatchingFunctionContextTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MatchingFunctionContextTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MatchingFunctionContextTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MatchingFunctionContextTypeEnum_MatchingFunctionContextType", MatchingFunctionContextTypeEnum_MatchingFunctionContextType_name, MatchingFunctionContextTypeEnum_MatchingFunctionContextType_value)
+	proto.RegisterType((*MatchingFunctionContextTypeEnum)(nil), "google.ads.googleads.v3.enums.MatchingFunctionContextTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/matching_function_context_type.proto", fileDescriptor_59c241b42801f559)
+}
+
+var fileDescriptor_59c241b42801f559 = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4b, 0xfb, 0x30,
+	0x1c, 0xfd, 0xb7, 0x83, 0xbf, 0x90, 0x09, 0x96, 0x1e, 0xd5, 0xa1, 0xdb, 0x07, 0x48, 0x0f, 0xbd,
+	0xc5, 0x53, 0xb7, 0x66, 0xa3, 0xc8, 0xea, 0xc0, 0xad, 0x82, 0x14, 0x4b, 0x6c, 0x63, 0x2c, 0xac,
+	0x49, 0x59, 0xb2, 0xe1, 0x8e, 0x7e, 0x15, 0x8f, 0x7e, 0x14, 0x3f, 0x8a, 0x77, 0xef, 0x92, 0x64,
+	0xdb, 0xcd, 0x5d, 0xc2, 0x23, 0xbf, 0xf7, 0x7b, 0xef, 0xf7, 0x1e, 0x18, 0x32, 0x21, 0xd8, 0x92,
+	0x06, 0xa4, 0x92, 0x81, 0x85, 0x1a, 0x6d, 0xc2, 0x80, 0xf2, 0x75, 0x23, 0x83, 0x86, 0xa8, 0xf2,
+	0xb5, 0xe6, 0xac, 0x78, 0x59, 0xf3, 0x52, 0xd5, 0x82, 0x17, 0xa5, 0xe0, 0x8a, 0xbe, 0xa9, 0x42,
+	0x6d, 0x5b, 0x0a, 0xdb, 0x95, 0x50, 0xc2, 0xef, 0xd9, 0x45, 0x48, 0x2a, 0x09, 0x0f, 0x1a, 0x70,
+	0x13, 0x42, 0xa3, 0x71, 0x7e, 0xb9, 0xb7, 0x68, 0xeb, 0x80, 0x70, 0x2e, 0x14, 0xd1, 0x42, 0xd2,
+	0x2e, 0x0f, 0xde, 0x1d, 0x70, 0x35, 0xdd, 0xb9, 0x8c, 0x77, 0x26, 0x23, 0xeb, 0x31, 0xdf, 0xb6,
+	0x14, 0xf3, 0x75, 0x33, 0x78, 0x02, 0x17, 0x47, 0x28, 0xfe, 0x19, 0xe8, 0x2e, 0xd2, 0xfb, 0x19,
+	0x1e, 0x25, 0xe3, 0x04, 0xc7, 0xde, 0x3f, 0xbf, 0x0b, 0x4e, 0x16, 0xe9, 0x6d, 0x7a, 0xf7, 0x90,
+	0x7a, 0x8e, 0xef, 0x81, 0xd3, 0x31, 0xc6, 0x71, 0x91, 0xcc, 0xf1, 0xb4, 0x48, 0x62, 0xcf, 0xd5,
+	0xfc, 0x18, 0x67, 0xc9, 0x08, 0x17, 0x69, 0x34, 0xc5, 0x5e, 0x67, 0xf8, 0xe3, 0x80, 0x7e, 0x29,
+	0x1a, 0x78, 0x34, 0xc7, 0xf0, 0xfa, 0xc8, 0x0d, 0x33, 0x9d, 0x65, 0xe6, 0x3c, 0xee, 0xea, 0x84,
+	0x4c, 0x2c, 0x09, 0x67, 0x50, 0xac, 0x58, 0xc0, 0x28, 0x37, 0x49, 0xf7, 0xf5, 0xb6, 0xb5, 0xfc,
+	0xa3, 0xed, 0x1b, 0xf3, 0x7e, 0xb8, 0x9d, 0x49, 0x14, 0x7d, 0xba, 0xbd, 0x89, 0x95, 0x8a, 0x2a,
+	0x09, 0x2d, 0xd4, 0x28, 0x0b, 0xa1, 0xae, 0x44, 0x7e, 0xed, 0xe7, 0x79, 0x54, 0xc9, 0xfc, 0x30,
+	0xcf, 0xb3, 0x30, 0x37, 0xf3, 0x6f, 0xb7, 0x6f, 0x3f, 0x11, 0x8a, 0x2a, 0x89, 0xd0, 0x81, 0x81,
+	0x50, 0x16, 0x22, 0x64, 0x38, 0xcf, 0xff, 0xcd, 0x61, 0xe1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x84, 0x8c, 0xc4, 0x0d, 0x05, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/matching_function_operator.pb.go b/googleapis/ads/googleads/v3/enums/matching_function_operator.pb.go
new file mode 100644
index 0000000..a0f4eca
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/matching_function_operator.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/matching_function_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible operators in a matching function.
+type MatchingFunctionOperatorEnum_MatchingFunctionOperator int32
+
+const (
+	// Not specified.
+	MatchingFunctionOperatorEnum_UNSPECIFIED MatchingFunctionOperatorEnum_MatchingFunctionOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	MatchingFunctionOperatorEnum_UNKNOWN MatchingFunctionOperatorEnum_MatchingFunctionOperator = 1
+	// The IN operator.
+	MatchingFunctionOperatorEnum_IN MatchingFunctionOperatorEnum_MatchingFunctionOperator = 2
+	// The IDENTITY operator.
+	MatchingFunctionOperatorEnum_IDENTITY MatchingFunctionOperatorEnum_MatchingFunctionOperator = 3
+	// The EQUALS operator
+	MatchingFunctionOperatorEnum_EQUALS MatchingFunctionOperatorEnum_MatchingFunctionOperator = 4
+	// Operator that takes two or more operands that are of type
+	// FunctionOperand and checks that all the operands evaluate to true.
+	// For functions related to ad formats, all the operands must be in
+	// left_operands.
+	MatchingFunctionOperatorEnum_AND MatchingFunctionOperatorEnum_MatchingFunctionOperator = 5
+	// Operator that returns true if the elements in left_operands contain any
+	// of the elements in right_operands. Otherwise, return false. The
+	// right_operands must contain at least 1 and no more than 3
+	// ConstantOperands.
+	MatchingFunctionOperatorEnum_CONTAINS_ANY MatchingFunctionOperatorEnum_MatchingFunctionOperator = 6
+)
+
+var MatchingFunctionOperatorEnum_MatchingFunctionOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IN",
+	3: "IDENTITY",
+	4: "EQUALS",
+	5: "AND",
+	6: "CONTAINS_ANY",
+}
+
+var MatchingFunctionOperatorEnum_MatchingFunctionOperator_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"IN":           2,
+	"IDENTITY":     3,
+	"EQUALS":       4,
+	"AND":          5,
+	"CONTAINS_ANY": 6,
+}
+
+func (x MatchingFunctionOperatorEnum_MatchingFunctionOperator) String() string {
+	return proto.EnumName(MatchingFunctionOperatorEnum_MatchingFunctionOperator_name, int32(x))
+}
+
+func (MatchingFunctionOperatorEnum_MatchingFunctionOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_5d607f3302220a7f, []int{0, 0}
+}
+
+// Container for enum describing matching function operator.
+type MatchingFunctionOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MatchingFunctionOperatorEnum) Reset()         { *m = MatchingFunctionOperatorEnum{} }
+func (m *MatchingFunctionOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*MatchingFunctionOperatorEnum) ProtoMessage()    {}
+func (*MatchingFunctionOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5d607f3302220a7f, []int{0}
+}
+
+func (m *MatchingFunctionOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MatchingFunctionOperatorEnum.Unmarshal(m, b)
+}
+func (m *MatchingFunctionOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MatchingFunctionOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *MatchingFunctionOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MatchingFunctionOperatorEnum.Merge(m, src)
+}
+func (m *MatchingFunctionOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_MatchingFunctionOperatorEnum.Size(m)
+}
+func (m *MatchingFunctionOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MatchingFunctionOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MatchingFunctionOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MatchingFunctionOperatorEnum_MatchingFunctionOperator", MatchingFunctionOperatorEnum_MatchingFunctionOperator_name, MatchingFunctionOperatorEnum_MatchingFunctionOperator_value)
+	proto.RegisterType((*MatchingFunctionOperatorEnum)(nil), "google.ads.googleads.v3.enums.MatchingFunctionOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/matching_function_operator.proto", fileDescriptor_5d607f3302220a7f)
+}
+
+var fileDescriptor_5d607f3302220a7f = []byte{
+	// 343 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4b, 0x4e, 0xc3, 0x30,
+	0x14, 0x24, 0x29, 0xa4, 0xc8, 0xad, 0x84, 0xe5, 0x15, 0x42, 0xed, 0xa2, 0x3d, 0x80, 0xb3, 0xc8,
+	0xce, 0x48, 0x48, 0x6e, 0x9b, 0x56, 0x11, 0xe0, 0x16, 0xf5, 0x83, 0x8a, 0x22, 0x55, 0xa6, 0x09,
+	0x26, 0x52, 0x63, 0x47, 0x71, 0xd2, 0x9b, 0x70, 0x01, 0x96, 0x1c, 0x85, 0xa3, 0xb0, 0xe4, 0x04,
+	0x28, 0x9f, 0x76, 0x57, 0x36, 0xd6, 0xc8, 0xf3, 0x66, 0xde, 0x9b, 0x01, 0x77, 0x42, 0x29, 0xb1,
+	0x0b, 0x6d, 0x1e, 0x68, 0xbb, 0x82, 0x05, 0xda, 0x3b, 0x76, 0x28, 0xf3, 0x58, 0xdb, 0x31, 0xcf,
+	0xb6, 0xef, 0x91, 0x14, 0x9b, 0xb7, 0x5c, 0x6e, 0xb3, 0x48, 0xc9, 0x8d, 0x4a, 0xc2, 0x94, 0x67,
+	0x2a, 0xc5, 0x49, 0xaa, 0x32, 0x85, 0xba, 0x95, 0x08, 0xf3, 0x40, 0xe3, 0xa3, 0x1e, 0xef, 0x1d,
+	0x5c, 0xea, 0x6f, 0x3a, 0x07, 0xfb, 0x24, 0xb2, 0xb9, 0x94, 0x2a, 0xe3, 0x85, 0x89, 0xae, 0xc4,
+	0xfd, 0x0f, 0x03, 0x74, 0x1e, 0xeb, 0x0d, 0xe3, 0x7a, 0xc1, 0xb4, 0xf6, 0x77, 0x65, 0x1e, 0xf7,
+	0x73, 0x70, 0x7d, 0x8a, 0x47, 0x57, 0xa0, 0xb5, 0x64, 0xf3, 0x99, 0x3b, 0xf4, 0xc6, 0x9e, 0x3b,
+	0x82, 0x67, 0xa8, 0x05, 0x9a, 0x4b, 0x76, 0xcf, 0xa6, 0xcf, 0x0c, 0x1a, 0xc8, 0x02, 0xa6, 0xc7,
+	0xa0, 0x89, 0xda, 0xe0, 0xd2, 0x1b, 0xb9, 0x6c, 0xe1, 0x2d, 0xd6, 0xb0, 0x81, 0x00, 0xb0, 0xdc,
+	0xa7, 0x25, 0x7d, 0x98, 0xc3, 0x73, 0xd4, 0x04, 0x0d, 0xca, 0x46, 0xf0, 0x02, 0x41, 0xd0, 0x1e,
+	0x4e, 0xd9, 0x82, 0x7a, 0x6c, 0xbe, 0xa1, 0x6c, 0x0d, 0xad, 0xc1, 0xaf, 0x01, 0x7a, 0x5b, 0x15,
+	0xe3, 0x7f, 0xb3, 0x0d, 0xba, 0xa7, 0x4e, 0x9b, 0x15, 0xe1, 0x66, 0xc6, 0xcb, 0xa0, 0xd6, 0x0b,
+	0xb5, 0xe3, 0x52, 0x60, 0x95, 0x0a, 0x5b, 0x84, 0xb2, 0x8c, 0x7e, 0xe8, 0x3a, 0x89, 0xf4, 0x89,
+	0xea, 0x6f, 0xcb, 0xf7, 0xd3, 0x6c, 0x4c, 0x28, 0xfd, 0x32, 0xbb, 0x93, 0xca, 0x8a, 0x06, 0x1a,
+	0x57, 0xb0, 0x40, 0x2b, 0x07, 0x17, 0x35, 0xe9, 0xef, 0x03, 0xef, 0xd3, 0x40, 0xfb, 0x47, 0xde,
+	0x5f, 0x39, 0x7e, 0xc9, 0xff, 0x98, 0xbd, 0xea, 0x93, 0x10, 0x1a, 0x68, 0x42, 0x8e, 0x13, 0x84,
+	0xac, 0x1c, 0x42, 0xca, 0x99, 0x57, 0xab, 0x3c, 0xcc, 0xf9, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x5d,
+	0xe8, 0x9e, 0xe0, 0x12, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/media_type.pb.go b/googleapis/ads/googleads/v3/enums/media_type.pb.go
new file mode 100644
index 0000000..60f691b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/media_type.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/media_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of media.
+type MediaTypeEnum_MediaType int32
+
+const (
+	// The media type has not been specified.
+	MediaTypeEnum_UNSPECIFIED MediaTypeEnum_MediaType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	MediaTypeEnum_UNKNOWN MediaTypeEnum_MediaType = 1
+	// Static image, used for image ad.
+	MediaTypeEnum_IMAGE MediaTypeEnum_MediaType = 2
+	// Small image, used for map ad.
+	MediaTypeEnum_ICON MediaTypeEnum_MediaType = 3
+	// ZIP file, used in fields of template ads.
+	MediaTypeEnum_MEDIA_BUNDLE MediaTypeEnum_MediaType = 4
+	// Audio file.
+	MediaTypeEnum_AUDIO MediaTypeEnum_MediaType = 5
+	// Video file.
+	MediaTypeEnum_VIDEO MediaTypeEnum_MediaType = 6
+	// Animated image, such as animated GIF.
+	MediaTypeEnum_DYNAMIC_IMAGE MediaTypeEnum_MediaType = 7
+)
+
+var MediaTypeEnum_MediaType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IMAGE",
+	3: "ICON",
+	4: "MEDIA_BUNDLE",
+	5: "AUDIO",
+	6: "VIDEO",
+	7: "DYNAMIC_IMAGE",
+}
+
+var MediaTypeEnum_MediaType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"IMAGE":         2,
+	"ICON":          3,
+	"MEDIA_BUNDLE":  4,
+	"AUDIO":         5,
+	"VIDEO":         6,
+	"DYNAMIC_IMAGE": 7,
+}
+
+func (x MediaTypeEnum_MediaType) String() string {
+	return proto.EnumName(MediaTypeEnum_MediaType_name, int32(x))
+}
+
+func (MediaTypeEnum_MediaType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6278b809e9e9ccfb, []int{0, 0}
+}
+
+// Container for enum describing the types of media.
+type MediaTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaTypeEnum) Reset()         { *m = MediaTypeEnum{} }
+func (m *MediaTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaTypeEnum) ProtoMessage()    {}
+func (*MediaTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6278b809e9e9ccfb, []int{0}
+}
+
+func (m *MediaTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaTypeEnum.Unmarshal(m, b)
+}
+func (m *MediaTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *MediaTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaTypeEnum.Merge(m, src)
+}
+func (m *MediaTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaTypeEnum.Size(m)
+}
+func (m *MediaTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MediaTypeEnum_MediaType", MediaTypeEnum_MediaType_name, MediaTypeEnum_MediaType_value)
+	proto.RegisterType((*MediaTypeEnum)(nil), "google.ads.googleads.v3.enums.MediaTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/media_type.proto", fileDescriptor_6278b809e9e9ccfb)
+}
+
+var fileDescriptor_6278b809e9e9ccfb = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4e, 0xe3, 0x30,
+	0x18, 0xc5, 0x27, 0xe9, 0xbf, 0xa9, 0x3b, 0x9d, 0xf1, 0x64, 0x89, 0xe8, 0xa2, 0x3d, 0x80, 0xb3,
+	0xc8, 0xce, 0xac, 0x9c, 0x26, 0x54, 0x16, 0xc4, 0xa9, 0x04, 0x09, 0x02, 0x45, 0xaa, 0x02, 0x89,
+	0xa2, 0x48, 0x8d, 0x1d, 0xd5, 0x69, 0xa5, 0x5e, 0x81, 0x63, 0xb0, 0xe4, 0x28, 0x5c, 0x83, 0x1d,
+	0xa7, 0x40, 0x8e, 0x69, 0x76, 0xb0, 0xb1, 0x9e, 0xfc, 0xfd, 0xbe, 0xa7, 0xef, 0x3d, 0x80, 0x0a,
+	0x21, 0x8a, 0x6d, 0x6e, 0xa7, 0x99, 0xb4, 0xb5, 0x54, 0xea, 0xe0, 0xd8, 0x39, 0xdf, 0x57, 0xd2,
+	0xae, 0xf2, 0xac, 0x4c, 0x37, 0xcd, 0xb1, 0xce, 0x51, 0xbd, 0x13, 0x8d, 0xb0, 0x66, 0x1a, 0x42,
+	0x69, 0x26, 0x51, 0xc7, 0xa3, 0x83, 0x83, 0x5a, 0xfe, 0xec, 0xfc, 0x64, 0x57, 0x97, 0x76, 0xca,
+	0xb9, 0x68, 0xd2, 0xa6, 0x14, 0x5c, 0xea, 0xe5, 0xc5, 0xb3, 0x01, 0xa6, 0x81, 0x72, 0xbc, 0x3d,
+	0xd6, 0xb9, 0xcf, 0xf7, 0xd5, 0xe2, 0x08, 0xc6, 0xdd, 0x87, 0xf5, 0x0f, 0x4c, 0x22, 0x76, 0xb3,
+	0xf6, 0x97, 0xf4, 0x92, 0xfa, 0x1e, 0xfc, 0x65, 0x4d, 0xc0, 0x28, 0x62, 0x57, 0x2c, 0xbc, 0x63,
+	0xd0, 0xb0, 0xc6, 0x60, 0x40, 0x03, 0xb2, 0xf2, 0xa1, 0x69, 0xfd, 0x06, 0x7d, 0xba, 0x0c, 0x19,
+	0xec, 0x59, 0x10, 0xfc, 0x09, 0x7c, 0x8f, 0x92, 0x8d, 0x1b, 0x31, 0xef, 0xda, 0x87, 0x7d, 0x85,
+	0x91, 0xc8, 0xa3, 0x21, 0x1c, 0x28, 0x19, 0x53, 0xcf, 0x0f, 0xe1, 0xd0, 0xfa, 0x0f, 0xa6, 0xde,
+	0x3d, 0x23, 0x01, 0x5d, 0x6e, 0xb4, 0xc9, 0xc8, 0x7d, 0x37, 0xc0, 0xfc, 0x49, 0x54, 0xe8, 0xc7,
+	0x40, 0xee, 0xdf, 0xee, 0xbc, 0xb5, 0x8a, 0xb0, 0x36, 0x1e, 0xdc, 0xaf, 0x85, 0x42, 0x6c, 0x53,
+	0x5e, 0x20, 0xb1, 0x2b, 0xec, 0x22, 0xe7, 0x6d, 0xc0, 0x53, 0x83, 0x75, 0x29, 0xbf, 0x29, 0xf4,
+	0xa2, 0x7d, 0x5f, 0xcc, 0xde, 0x8a, 0x90, 0x57, 0x73, 0xb6, 0xd2, 0x56, 0x24, 0x93, 0x48, 0x4b,
+	0xa5, 0x62, 0x07, 0xa9, 0x6e, 0xe4, 0xdb, 0x69, 0x9e, 0x90, 0x4c, 0x26, 0xdd, 0x3c, 0x89, 0x9d,
+	0xa4, 0x9d, 0x7f, 0x98, 0x73, 0xfd, 0x89, 0x31, 0xc9, 0x24, 0xc6, 0x1d, 0x81, 0x71, 0xec, 0x60,
+	0xdc, 0x32, 0x8f, 0xc3, 0xf6, 0x30, 0xe7, 0x33, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xbb, 0xa1, 0x2a,
+	0xe8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/merchant_center_link_status.pb.go b/googleapis/ads/googleads/v3/enums/merchant_center_link_status.pb.go
new file mode 100644
index 0000000..2540955
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/merchant_center_link_status.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/merchant_center_link_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Describes the possible statuses for a link between a Google Ads customer
+// and a Google Merchant Center account.
+type MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus int32
+
+const (
+	// Not specified.
+	MerchantCenterLinkStatusEnum_UNSPECIFIED MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	MerchantCenterLinkStatusEnum_UNKNOWN MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus = 1
+	// The link is enabled.
+	MerchantCenterLinkStatusEnum_ENABLED MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus = 2
+	// The link has no effect. It was proposed by the Merchant Center Account
+	// owner and hasn't been confirmed by the customer.
+	MerchantCenterLinkStatusEnum_PENDING MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus = 3
+)
+
+var MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PENDING",
+}
+
+var MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PENDING":     3,
+}
+
+func (x MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus) String() string {
+	return proto.EnumName(MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus_name, int32(x))
+}
+
+func (MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8efd1c04a55e69bb, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a Google Merchant Center
+// link.
+type MerchantCenterLinkStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MerchantCenterLinkStatusEnum) Reset()         { *m = MerchantCenterLinkStatusEnum{} }
+func (m *MerchantCenterLinkStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*MerchantCenterLinkStatusEnum) ProtoMessage()    {}
+func (*MerchantCenterLinkStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8efd1c04a55e69bb, []int{0}
+}
+
+func (m *MerchantCenterLinkStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MerchantCenterLinkStatusEnum.Unmarshal(m, b)
+}
+func (m *MerchantCenterLinkStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MerchantCenterLinkStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *MerchantCenterLinkStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MerchantCenterLinkStatusEnum.Merge(m, src)
+}
+func (m *MerchantCenterLinkStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_MerchantCenterLinkStatusEnum.Size(m)
+}
+func (m *MerchantCenterLinkStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MerchantCenterLinkStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MerchantCenterLinkStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus", MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus_name, MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus_value)
+	proto.RegisterType((*MerchantCenterLinkStatusEnum)(nil), "google.ads.googleads.v3.enums.MerchantCenterLinkStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/merchant_center_link_status.proto", fileDescriptor_8efd1c04a55e69bb)
+}
+
+var fileDescriptor_8efd1c04a55e69bb = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4e, 0x02, 0x31,
+	0x14, 0x94, 0x25, 0xd1, 0xa4, 0x1c, 0xdc, 0x70, 0x32, 0x06, 0x0e, 0xf0, 0x01, 0xed, 0xa1, 0xb7,
+	0x7a, 0x30, 0x5d, 0xa8, 0x84, 0x88, 0x75, 0x23, 0x01, 0x13, 0xb3, 0x09, 0xa9, 0x6c, 0x53, 0x37,
+	0xb0, 0x2d, 0xd9, 0x16, 0x3e, 0xc8, 0xa3, 0x9f, 0xe2, 0xa7, 0x78, 0xf4, 0x0b, 0x4c, 0xbb, 0xc0,
+	0x6d, 0xbd, 0x6c, 0xe6, 0xed, 0xbc, 0x37, 0x33, 0x1d, 0x70, 0xaf, 0x8c, 0x51, 0x5b, 0x89, 0x44,
+	0x6e, 0x51, 0x0d, 0x3d, 0x3a, 0x60, 0x24, 0xf5, 0xbe, 0xb4, 0xa8, 0x94, 0xd5, 0xfa, 0x43, 0x68,
+	0xb7, 0x5a, 0x4b, 0xed, 0x64, 0xb5, 0xda, 0x16, 0x7a, 0xb3, 0xb2, 0x4e, 0xb8, 0xbd, 0x85, 0xbb,
+	0xca, 0x38, 0xd3, 0xed, 0xd7, 0x57, 0x50, 0xe4, 0x16, 0x9e, 0x05, 0xe0, 0x01, 0xc3, 0x20, 0x70,
+	0xdb, 0x3b, 0xe9, 0xef, 0x0a, 0x24, 0xb4, 0x36, 0x4e, 0xb8, 0xc2, 0xe8, 0xe3, 0xf1, 0xb0, 0x02,
+	0xbd, 0xa7, 0xa3, 0xc3, 0x28, 0x18, 0xcc, 0x0a, 0xbd, 0x99, 0x07, 0x79, 0xa6, 0xf7, 0xe5, 0xf0,
+	0x05, 0xdc, 0x34, 0xf1, 0xdd, 0x6b, 0xd0, 0x59, 0xf0, 0x79, 0xca, 0x46, 0xd3, 0x87, 0x29, 0x1b,
+	0xc7, 0x17, 0xdd, 0x0e, 0xb8, 0x5a, 0xf0, 0x47, 0xfe, 0xfc, 0xca, 0xe3, 0x96, 0x1f, 0x18, 0xa7,
+	0xc9, 0x8c, 0x8d, 0xe3, 0xc8, 0x0f, 0x29, 0xe3, 0xe3, 0x29, 0x9f, 0xc4, 0xed, 0xe4, 0xb7, 0x05,
+	0x06, 0x6b, 0x53, 0xc2, 0x7f, 0x73, 0x27, 0xfd, 0x26, 0xdf, 0xd4, 0x07, 0x4f, 0x5b, 0x6f, 0xc9,
+	0xf1, 0x5e, 0x99, 0xad, 0xd0, 0x0a, 0x9a, 0x4a, 0x21, 0x25, 0x75, 0x78, 0xd6, 0xa9, 0xc8, 0x5d,
+	0x61, 0x1b, 0x7a, 0xbd, 0x0b, 0xdf, 0xcf, 0xa8, 0x3d, 0xa1, 0xf4, 0x2b, 0xea, 0x4f, 0x6a, 0x29,
+	0x9a, 0x5b, 0x58, 0x43, 0x8f, 0x96, 0x18, 0xfa, 0x0e, 0xec, 0xf7, 0x89, 0xcf, 0x68, 0x6e, 0xb3,
+	0x33, 0x9f, 0x2d, 0x71, 0x16, 0xf8, 0x9f, 0x68, 0x50, 0xff, 0x24, 0x84, 0xe6, 0x96, 0x90, 0xf3,
+	0x06, 0x21, 0x4b, 0x4c, 0x48, 0xd8, 0x79, 0xbf, 0x0c, 0xc1, 0xf0, 0x5f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x86, 0x38, 0x4f, 0x57, 0xef, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/message_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/message_placeholder_field.pb.go
new file mode 100644
index 0000000..3e5269c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/message_placeholder_field.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/message_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Message placeholder fields.
+type MessagePlaceholderFieldEnum_MessagePlaceholderField int32
+
+const (
+	// Not specified.
+	MessagePlaceholderFieldEnum_UNSPECIFIED MessagePlaceholderFieldEnum_MessagePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	MessagePlaceholderFieldEnum_UNKNOWN MessagePlaceholderFieldEnum_MessagePlaceholderField = 1
+	// Data Type: STRING. The name of your business.
+	MessagePlaceholderFieldEnum_BUSINESS_NAME MessagePlaceholderFieldEnum_MessagePlaceholderField = 2
+	// Data Type: STRING. Country code of phone number.
+	MessagePlaceholderFieldEnum_COUNTRY_CODE MessagePlaceholderFieldEnum_MessagePlaceholderField = 3
+	// Data Type: STRING. A phone number that's capable of sending and receiving
+	// text messages.
+	MessagePlaceholderFieldEnum_PHONE_NUMBER MessagePlaceholderFieldEnum_MessagePlaceholderField = 4
+	// Data Type: STRING. The text that will go in your click-to-message ad.
+	MessagePlaceholderFieldEnum_MESSAGE_EXTENSION_TEXT MessagePlaceholderFieldEnum_MessagePlaceholderField = 5
+	// Data Type: STRING. The message text automatically shows in people's
+	// messaging apps when they tap to send you a message.
+	MessagePlaceholderFieldEnum_MESSAGE_TEXT MessagePlaceholderFieldEnum_MessagePlaceholderField = 6
+)
+
+var MessagePlaceholderFieldEnum_MessagePlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BUSINESS_NAME",
+	3: "COUNTRY_CODE",
+	4: "PHONE_NUMBER",
+	5: "MESSAGE_EXTENSION_TEXT",
+	6: "MESSAGE_TEXT",
+}
+
+var MessagePlaceholderFieldEnum_MessagePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"BUSINESS_NAME":          2,
+	"COUNTRY_CODE":           3,
+	"PHONE_NUMBER":           4,
+	"MESSAGE_EXTENSION_TEXT": 5,
+	"MESSAGE_TEXT":           6,
+}
+
+func (x MessagePlaceholderFieldEnum_MessagePlaceholderField) String() string {
+	return proto.EnumName(MessagePlaceholderFieldEnum_MessagePlaceholderField_name, int32(x))
+}
+
+func (MessagePlaceholderFieldEnum_MessagePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dfd7bbc8830233e3, []int{0, 0}
+}
+
+// Values for Message placeholder fields.
+type MessagePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MessagePlaceholderFieldEnum) Reset()         { *m = MessagePlaceholderFieldEnum{} }
+func (m *MessagePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*MessagePlaceholderFieldEnum) ProtoMessage()    {}
+func (*MessagePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dfd7bbc8830233e3, []int{0}
+}
+
+func (m *MessagePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MessagePlaceholderFieldEnum.Merge(m, src)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Size(m)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MessagePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MessagePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MessagePlaceholderFieldEnum_MessagePlaceholderField", MessagePlaceholderFieldEnum_MessagePlaceholderField_name, MessagePlaceholderFieldEnum_MessagePlaceholderField_value)
+	proto.RegisterType((*MessagePlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.MessagePlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/message_placeholder_field.proto", fileDescriptor_dfd7bbc8830233e3)
+}
+
+var fileDescriptor_dfd7bbc8830233e3 = []byte{
+	// 368 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcf, 0x4e, 0x83, 0x30,
+	0x1c, 0x16, 0xa6, 0x33, 0xe9, 0x34, 0x22, 0x07, 0x4d, 0xe6, 0x76, 0xd8, 0x1e, 0xa0, 0x1c, 0xb8,
+	0xd5, 0x78, 0x80, 0xad, 0x9b, 0xc4, 0x50, 0xc8, 0x80, 0x39, 0x0d, 0x09, 0xc1, 0x51, 0x91, 0x04,
+	0x28, 0x59, 0xb7, 0x3d, 0x8d, 0x27, 0x8f, 0x3e, 0x83, 0x4f, 0xe0, 0xa3, 0x78, 0xf3, 0x0d, 0x0c,
+	0x20, 0xf3, 0x34, 0x2f, 0xcd, 0x97, 0xdf, 0xf7, 0xa7, 0xed, 0xf7, 0x03, 0x37, 0x31, 0x63, 0x71,
+	0x4a, 0x95, 0x30, 0xe2, 0x4a, 0x0d, 0x4b, 0xb4, 0x55, 0x15, 0x9a, 0x6f, 0x32, 0xae, 0x64, 0x94,
+	0xf3, 0x30, 0xa6, 0x41, 0x91, 0x86, 0x4b, 0xfa, 0xc2, 0xd2, 0x88, 0xae, 0x82, 0xe7, 0x84, 0xa6,
+	0x11, 0x2c, 0x56, 0x6c, 0xcd, 0xe4, 0x7e, 0xed, 0x81, 0x61, 0xc4, 0xe1, 0xce, 0x0e, 0xb7, 0x2a,
+	0xac, 0xec, 0xdd, 0x5e, 0x93, 0x5e, 0x24, 0x4a, 0x98, 0xe7, 0x6c, 0x1d, 0xae, 0x13, 0x96, 0xf3,
+	0xda, 0x3c, 0xfc, 0x10, 0xc0, 0x95, 0x59, 0x5f, 0x60, 0xff, 0xe5, 0x4f, 0xca, 0x78, 0x9c, 0x6f,
+	0xb2, 0xe1, 0xab, 0x00, 0x2e, 0xf7, 0xf0, 0xf2, 0x19, 0xe8, 0x78, 0xc4, 0xb1, 0xf1, 0xc8, 0x98,
+	0x18, 0x78, 0x2c, 0x1d, 0xc8, 0x1d, 0x70, 0xec, 0x91, 0x3b, 0x62, 0xdd, 0x13, 0x49, 0x90, 0xcf,
+	0xc1, 0xa9, 0xee, 0x39, 0x06, 0xc1, 0x8e, 0x13, 0x10, 0xcd, 0xc4, 0x92, 0x28, 0x4b, 0xe0, 0x64,
+	0x64, 0x79, 0xc4, 0x9d, 0x3d, 0x04, 0x23, 0x6b, 0x8c, 0xa5, 0x56, 0x39, 0xb1, 0x6f, 0x2d, 0x82,
+	0x03, 0xe2, 0x99, 0x3a, 0x9e, 0x49, 0x87, 0x72, 0x17, 0x5c, 0x98, 0xd8, 0x71, 0xb4, 0x29, 0x0e,
+	0xf0, 0xc2, 0xc5, 0xc4, 0x31, 0x2c, 0x12, 0xb8, 0x78, 0xe1, 0x4a, 0x47, 0xa5, 0xba, 0xe1, 0xaa,
+	0x49, 0x5b, 0xff, 0x16, 0xc0, 0x60, 0xc9, 0x32, 0xf8, 0x6f, 0x05, 0x7a, 0x6f, 0xcf, 0x0f, 0xec,
+	0xb2, 0x02, 0x5b, 0x78, 0xd4, 0x7f, 0xed, 0x31, 0x4b, 0xc3, 0x3c, 0x86, 0x6c, 0x15, 0x2b, 0x31,
+	0xcd, 0xab, 0x82, 0x9a, 0x85, 0x14, 0x09, 0xdf, 0xb3, 0x9f, 0xeb, 0xea, 0x7c, 0x13, 0x5b, 0x53,
+	0x4d, 0x7b, 0x17, 0xfb, 0xd3, 0x3a, 0x4a, 0x8b, 0x38, 0xac, 0x61, 0x89, 0xe6, 0x2a, 0x2c, 0xdb,
+	0xe4, 0x9f, 0x0d, 0xef, 0x6b, 0x11, 0xf7, 0x77, 0xbc, 0x3f, 0x57, 0xfd, 0x8a, 0xff, 0x12, 0x07,
+	0xf5, 0x10, 0x21, 0x2d, 0xe2, 0x08, 0xed, 0x14, 0x08, 0xcd, 0x55, 0x84, 0x2a, 0xcd, 0x53, 0xbb,
+	0x7a, 0x98, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0x01, 0x89, 0xc8, 0xac, 0x37, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/mime_type.pb.go b/googleapis/ads/googleads/v3/enums/mime_type.pb.go
new file mode 100644
index 0000000..253d418
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/mime_type.pb.go
@@ -0,0 +1,171 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/mime_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The mime type
+type MimeTypeEnum_MimeType int32
+
+const (
+	// The mime type has not been specified.
+	MimeTypeEnum_UNSPECIFIED MimeTypeEnum_MimeType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	MimeTypeEnum_UNKNOWN MimeTypeEnum_MimeType = 1
+	// MIME type of image/jpeg.
+	MimeTypeEnum_IMAGE_JPEG MimeTypeEnum_MimeType = 2
+	// MIME type of image/gif.
+	MimeTypeEnum_IMAGE_GIF MimeTypeEnum_MimeType = 3
+	// MIME type of image/png.
+	MimeTypeEnum_IMAGE_PNG MimeTypeEnum_MimeType = 4
+	// MIME type of application/x-shockwave-flash.
+	MimeTypeEnum_FLASH MimeTypeEnum_MimeType = 5
+	// MIME type of text/html.
+	MimeTypeEnum_TEXT_HTML MimeTypeEnum_MimeType = 6
+	// MIME type of application/pdf.
+	MimeTypeEnum_PDF MimeTypeEnum_MimeType = 7
+	// MIME type of application/msword.
+	MimeTypeEnum_MSWORD MimeTypeEnum_MimeType = 8
+	// MIME type of application/vnd.ms-excel.
+	MimeTypeEnum_MSEXCEL MimeTypeEnum_MimeType = 9
+	// MIME type of application/rtf.
+	MimeTypeEnum_RTF MimeTypeEnum_MimeType = 10
+	// MIME type of audio/wav.
+	MimeTypeEnum_AUDIO_WAV MimeTypeEnum_MimeType = 11
+	// MIME type of audio/mp3.
+	MimeTypeEnum_AUDIO_MP3 MimeTypeEnum_MimeType = 12
+	// MIME type of application/x-html5-ad-zip.
+	MimeTypeEnum_HTML5_AD_ZIP MimeTypeEnum_MimeType = 13
+)
+
+var MimeTypeEnum_MimeType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "IMAGE_JPEG",
+	3:  "IMAGE_GIF",
+	4:  "IMAGE_PNG",
+	5:  "FLASH",
+	6:  "TEXT_HTML",
+	7:  "PDF",
+	8:  "MSWORD",
+	9:  "MSEXCEL",
+	10: "RTF",
+	11: "AUDIO_WAV",
+	12: "AUDIO_MP3",
+	13: "HTML5_AD_ZIP",
+}
+
+var MimeTypeEnum_MimeType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"IMAGE_JPEG":   2,
+	"IMAGE_GIF":    3,
+	"IMAGE_PNG":    4,
+	"FLASH":        5,
+	"TEXT_HTML":    6,
+	"PDF":          7,
+	"MSWORD":       8,
+	"MSEXCEL":      9,
+	"RTF":          10,
+	"AUDIO_WAV":    11,
+	"AUDIO_MP3":    12,
+	"HTML5_AD_ZIP": 13,
+}
+
+func (x MimeTypeEnum_MimeType) String() string {
+	return proto.EnumName(MimeTypeEnum_MimeType_name, int32(x))
+}
+
+func (MimeTypeEnum_MimeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a00e9a6c94fbfc0a, []int{0, 0}
+}
+
+// Container for enum describing the mime types.
+type MimeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MimeTypeEnum) Reset()         { *m = MimeTypeEnum{} }
+func (m *MimeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MimeTypeEnum) ProtoMessage()    {}
+func (*MimeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a00e9a6c94fbfc0a, []int{0}
+}
+
+func (m *MimeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MimeTypeEnum.Unmarshal(m, b)
+}
+func (m *MimeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MimeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *MimeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MimeTypeEnum.Merge(m, src)
+}
+func (m *MimeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MimeTypeEnum.Size(m)
+}
+func (m *MimeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MimeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MimeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MimeTypeEnum_MimeType", MimeTypeEnum_MimeType_name, MimeTypeEnum_MimeType_value)
+	proto.RegisterType((*MimeTypeEnum)(nil), "google.ads.googleads.v3.enums.MimeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/mime_type.proto", fileDescriptor_a00e9a6c94fbfc0a)
+}
+
+var fileDescriptor_a00e9a6c94fbfc0a = []byte{
+	// 395 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x8f, 0x93, 0x40,
+	0x14, 0xc7, 0x85, 0xba, 0xed, 0x76, 0xda, 0xea, 0x64, 0x8e, 0xc6, 0x3d, 0xec, 0xde, 0x1d, 0x0e,
+	0xc4, 0xcb, 0x78, 0x9a, 0x2e, 0x03, 0x8b, 0x16, 0x3a, 0x59, 0x28, 0xdd, 0x6c, 0x48, 0x08, 0x0a,
+	0x21, 0x24, 0x85, 0x21, 0x1d, 0xda, 0xa4, 0x5f, 0xc7, 0xa3, 0x1f, 0x45, 0xbf, 0x82, 0x27, 0x8f,
+	0x7e, 0x0a, 0x33, 0x20, 0xed, 0x49, 0x2f, 0xe4, 0xff, 0xde, 0xff, 0xf7, 0x1e, 0xf0, 0x7f, 0xe0,
+	0x5d, 0x21, 0x44, 0xb1, 0xcb, 0x8d, 0x34, 0x93, 0x46, 0x2f, 0x95, 0x3a, 0x9a, 0x46, 0x5e, 0x1f,
+	0x2a, 0x69, 0x54, 0x65, 0x95, 0x27, 0xed, 0xa9, 0xc9, 0x71, 0xb3, 0x17, 0xad, 0x40, 0x37, 0x3d,
+	0x83, 0xd3, 0x4c, 0xe2, 0x33, 0x8e, 0x8f, 0x26, 0xee, 0xf0, 0x37, 0x6f, 0x87, 0x6d, 0x4d, 0x69,
+	0xa4, 0x75, 0x2d, 0xda, 0xb4, 0x2d, 0x45, 0x2d, 0xfb, 0xe1, 0xbb, 0x9f, 0x1a, 0x98, 0x7b, 0x65,
+	0x95, 0x87, 0xa7, 0x26, 0x67, 0xf5, 0xa1, 0xba, 0xfb, 0xa1, 0x81, 0xeb, 0xa1, 0x81, 0x5e, 0x83,
+	0xd9, 0xc6, 0x0f, 0x38, 0xbb, 0x77, 0x6d, 0x97, 0x59, 0xf0, 0x05, 0x9a, 0x81, 0xc9, 0xc6, 0xff,
+	0xe4, 0xaf, 0xb7, 0x3e, 0xd4, 0xd0, 0x2b, 0x00, 0x5c, 0x8f, 0x3a, 0x2c, 0xf9, 0xc8, 0x99, 0x03,
+	0x75, 0xb4, 0x00, 0xd3, 0xbe, 0x76, 0x5c, 0x1b, 0x8e, 0x2e, 0x25, 0xf7, 0x1d, 0xf8, 0x12, 0x4d,
+	0xc1, 0x95, 0xbd, 0xa2, 0xc1, 0x03, 0xbc, 0x52, 0x4e, 0xc8, 0x9e, 0xc2, 0xe4, 0x21, 0xf4, 0x56,
+	0x70, 0x8c, 0x26, 0x60, 0xc4, 0x2d, 0x1b, 0x4e, 0x10, 0x00, 0x63, 0x2f, 0xd8, 0xae, 0x1f, 0x2d,
+	0x78, 0xad, 0xde, 0xe4, 0x05, 0xec, 0xe9, 0x9e, 0xad, 0xe0, 0x54, 0x11, 0x8f, 0xa1, 0x0d, 0x81,
+	0x9a, 0xa4, 0x1b, 0xcb, 0x5d, 0x27, 0x5b, 0x1a, 0xc1, 0xd9, 0xa5, 0xf4, 0xb8, 0x09, 0xe7, 0x08,
+	0x82, 0xb9, 0x5a, 0xf9, 0x3e, 0xa1, 0x56, 0xf2, 0xec, 0x72, 0xb8, 0x58, 0xfe, 0xd2, 0xc0, 0xed,
+	0x17, 0x51, 0xe1, 0xff, 0x46, 0xb4, 0x5c, 0x0c, 0x3f, 0xcc, 0x55, 0x26, 0x5c, 0x7b, 0x5e, 0xfe,
+	0xe5, 0x0b, 0xb1, 0x4b, 0xeb, 0x02, 0x8b, 0x7d, 0x61, 0x14, 0x79, 0xdd, 0x25, 0x36, 0x5c, 0xa4,
+	0x29, 0xe5, 0x3f, 0x0e, 0xf4, 0xa1, 0x7b, 0x7e, 0xd5, 0x47, 0x0e, 0xa5, 0xdf, 0xf4, 0x1b, 0xa7,
+	0x5f, 0x45, 0x33, 0x89, 0x7b, 0xa9, 0x54, 0x64, 0x62, 0x95, 0xb6, 0xfc, 0x3e, 0xf8, 0x31, 0xcd,
+	0x64, 0x7c, 0xf6, 0xe3, 0xc8, 0x8c, 0x3b, 0xff, 0xb7, 0x7e, 0xdb, 0x37, 0x09, 0xa1, 0x99, 0x24,
+	0xe4, 0x4c, 0x10, 0x12, 0x99, 0x84, 0x74, 0xcc, 0xe7, 0x71, 0xf7, 0x61, 0xe6, 0x9f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x90, 0x56, 0x3c, 0x57, 0x38, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/minute_of_hour.pb.go b/googleapis/ads/googleads/v3/enums/minute_of_hour.pb.go
new file mode 100644
index 0000000..7f00f4b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/minute_of_hour.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/minute_of_hour.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates of quarter-hours. E.g. "FIFTEEN"
+type MinuteOfHourEnum_MinuteOfHour int32
+
+const (
+	// Not specified.
+	MinuteOfHourEnum_UNSPECIFIED MinuteOfHourEnum_MinuteOfHour = 0
+	// The value is unknown in this version.
+	MinuteOfHourEnum_UNKNOWN MinuteOfHourEnum_MinuteOfHour = 1
+	// Zero minutes past the hour.
+	MinuteOfHourEnum_ZERO MinuteOfHourEnum_MinuteOfHour = 2
+	// Fifteen minutes past the hour.
+	MinuteOfHourEnum_FIFTEEN MinuteOfHourEnum_MinuteOfHour = 3
+	// Thirty minutes past the hour.
+	MinuteOfHourEnum_THIRTY MinuteOfHourEnum_MinuteOfHour = 4
+	// Forty-five minutes past the hour.
+	MinuteOfHourEnum_FORTY_FIVE MinuteOfHourEnum_MinuteOfHour = 5
+)
+
+var MinuteOfHourEnum_MinuteOfHour_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ZERO",
+	3: "FIFTEEN",
+	4: "THIRTY",
+	5: "FORTY_FIVE",
+}
+
+var MinuteOfHourEnum_MinuteOfHour_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ZERO":        2,
+	"FIFTEEN":     3,
+	"THIRTY":      4,
+	"FORTY_FIVE":  5,
+}
+
+func (x MinuteOfHourEnum_MinuteOfHour) String() string {
+	return proto.EnumName(MinuteOfHourEnum_MinuteOfHour_name, int32(x))
+}
+
+func (MinuteOfHourEnum_MinuteOfHour) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cd84aaf261dcd483, []int{0, 0}
+}
+
+// Container for enumeration of quarter-hours.
+type MinuteOfHourEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MinuteOfHourEnum) Reset()         { *m = MinuteOfHourEnum{} }
+func (m *MinuteOfHourEnum) String() string { return proto.CompactTextString(m) }
+func (*MinuteOfHourEnum) ProtoMessage()    {}
+func (*MinuteOfHourEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cd84aaf261dcd483, []int{0}
+}
+
+func (m *MinuteOfHourEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MinuteOfHourEnum.Unmarshal(m, b)
+}
+func (m *MinuteOfHourEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MinuteOfHourEnum.Marshal(b, m, deterministic)
+}
+func (m *MinuteOfHourEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MinuteOfHourEnum.Merge(m, src)
+}
+func (m *MinuteOfHourEnum) XXX_Size() int {
+	return xxx_messageInfo_MinuteOfHourEnum.Size(m)
+}
+func (m *MinuteOfHourEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MinuteOfHourEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MinuteOfHourEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MinuteOfHourEnum_MinuteOfHour", MinuteOfHourEnum_MinuteOfHour_name, MinuteOfHourEnum_MinuteOfHour_value)
+	proto.RegisterType((*MinuteOfHourEnum)(nil), "google.ads.googleads.v3.enums.MinuteOfHourEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/minute_of_hour.proto", fileDescriptor_cd84aaf261dcd483)
+}
+
+var fileDescriptor_cd84aaf261dcd483 = []byte{
+	// 321 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xc2, 0x40,
+	0x18, 0x95, 0x82, 0x68, 0x06, 0xa3, 0x63, 0x97, 0x46, 0x16, 0x70, 0x80, 0x69, 0x62, 0x77, 0xe3,
+	0xaa, 0xe8, 0x14, 0x1a, 0x63, 0x4b, 0xb0, 0xd4, 0x40, 0x9a, 0x34, 0xd5, 0x96, 0xda, 0x84, 0xce,
+	0x47, 0x3a, 0x2d, 0x07, 0x72, 0xe9, 0x51, 0x3c, 0x88, 0x0b, 0x4f, 0x61, 0x3a, 0x23, 0x84, 0x8d,
+	0x6e, 0x26, 0x2f, 0xdf, 0xfb, 0xc9, 0x9b, 0x87, 0x6e, 0x32, 0x80, 0x6c, 0x9d, 0x1a, 0x71, 0x22,
+	0x0c, 0x05, 0x1b, 0xb4, 0x35, 0x8d, 0x94, 0xd7, 0x85, 0x30, 0x8a, 0x9c, 0xd7, 0x55, 0x1a, 0xc1,
+	0x2a, 0x7a, 0x83, 0xba, 0x24, 0x9b, 0x12, 0x2a, 0xd0, 0xfb, 0x4a, 0x48, 0xe2, 0x44, 0x90, 0xbd,
+	0x87, 0x6c, 0x4d, 0x22, 0x3d, 0x57, 0xd7, 0xbb, 0xc8, 0x4d, 0x6e, 0xc4, 0x9c, 0x43, 0x15, 0x57,
+	0x39, 0x70, 0xa1, 0xcc, 0x43, 0x81, 0xf0, 0xa3, 0x0c, 0xf5, 0x56, 0x13, 0xa8, 0x4b, 0xc6, 0xeb,
+	0x62, 0x18, 0xa1, 0xb3, 0xc3, 0x9b, 0x7e, 0x81, 0x7a, 0x73, 0xf7, 0x69, 0xca, 0xee, 0x1c, 0xdb,
+	0x61, 0xf7, 0xf8, 0x48, 0xef, 0xa1, 0x93, 0xb9, 0xfb, 0xe0, 0x7a, 0xcf, 0x2e, 0x6e, 0xe9, 0xa7,
+	0xa8, 0xb3, 0x64, 0x33, 0x0f, 0x6b, 0xcd, 0xd9, 0x76, 0x6c, 0x9f, 0x31, 0x17, 0xb7, 0x75, 0x84,
+	0xba, 0xfe, 0xc4, 0x99, 0xf9, 0x0b, 0xdc, 0xd1, 0xcf, 0x11, 0xb2, 0xbd, 0x99, 0xbf, 0x88, 0x6c,
+	0x27, 0x60, 0xf8, 0x78, 0xf4, 0xd5, 0x42, 0x83, 0x57, 0x28, 0xc8, 0xbf, 0xc5, 0x47, 0x97, 0x87,
+	0x25, 0xa6, 0x4d, 0xdb, 0x69, 0x6b, 0x39, 0xfa, 0xf5, 0x64, 0xb0, 0x8e, 0x79, 0x46, 0xa0, 0xcc,
+	0x8c, 0x2c, 0xe5, 0xf2, 0x2f, 0xbb, 0xc1, 0x36, 0xb9, 0xf8, 0x63, 0xbf, 0x5b, 0xf9, 0xbe, 0x6b,
+	0xed, 0xb1, 0x65, 0x7d, 0x68, 0xfd, 0xb1, 0x8a, 0xb2, 0x12, 0x41, 0x14, 0x6c, 0x50, 0x60, 0x92,
+	0x66, 0x04, 0xf1, 0xb9, 0xe3, 0x43, 0x2b, 0x11, 0xe1, 0x9e, 0x0f, 0x03, 0x33, 0x94, 0xfc, 0xb7,
+	0x36, 0x50, 0x47, 0x4a, 0xad, 0x44, 0x50, 0xba, 0x57, 0x50, 0x1a, 0x98, 0x94, 0x4a, 0xcd, 0x4b,
+	0x57, 0x16, 0x33, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x87, 0xad, 0xe8, 0xbd, 0xd7, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/mobile_device_type.pb.go b/googleapis/ads/googleads/v3/enums/mobile_device_type.pb.go
new file mode 100644
index 0000000..2259ffa
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/mobile_device_type.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/mobile_device_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of mobile device.
+type MobileDeviceTypeEnum_MobileDeviceType int32
+
+const (
+	// Not specified.
+	MobileDeviceTypeEnum_UNSPECIFIED MobileDeviceTypeEnum_MobileDeviceType = 0
+	// Used for return value only. Represents value unknown in this version.
+	MobileDeviceTypeEnum_UNKNOWN MobileDeviceTypeEnum_MobileDeviceType = 1
+	// Mobile phones.
+	MobileDeviceTypeEnum_MOBILE MobileDeviceTypeEnum_MobileDeviceType = 2
+	// Tablets.
+	MobileDeviceTypeEnum_TABLET MobileDeviceTypeEnum_MobileDeviceType = 3
+)
+
+var MobileDeviceTypeEnum_MobileDeviceType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MOBILE",
+	3: "TABLET",
+}
+
+var MobileDeviceTypeEnum_MobileDeviceType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MOBILE":      2,
+	"TABLET":      3,
+}
+
+func (x MobileDeviceTypeEnum_MobileDeviceType) String() string {
+	return proto.EnumName(MobileDeviceTypeEnum_MobileDeviceType_name, int32(x))
+}
+
+func (MobileDeviceTypeEnum_MobileDeviceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1217305e9fde61b1, []int{0, 0}
+}
+
+// Container for enum describing the types of mobile device.
+type MobileDeviceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MobileDeviceTypeEnum) Reset()         { *m = MobileDeviceTypeEnum{} }
+func (m *MobileDeviceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MobileDeviceTypeEnum) ProtoMessage()    {}
+func (*MobileDeviceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1217305e9fde61b1, []int{0}
+}
+
+func (m *MobileDeviceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileDeviceTypeEnum.Unmarshal(m, b)
+}
+func (m *MobileDeviceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileDeviceTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *MobileDeviceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileDeviceTypeEnum.Merge(m, src)
+}
+func (m *MobileDeviceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MobileDeviceTypeEnum.Size(m)
+}
+func (m *MobileDeviceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileDeviceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileDeviceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MobileDeviceTypeEnum_MobileDeviceType", MobileDeviceTypeEnum_MobileDeviceType_name, MobileDeviceTypeEnum_MobileDeviceType_value)
+	proto.RegisterType((*MobileDeviceTypeEnum)(nil), "google.ads.googleads.v3.enums.MobileDeviceTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/mobile_device_type.proto", fileDescriptor_1217305e9fde61b1)
+}
+
+var fileDescriptor_1217305e9fde61b1 = []byte{
+	// 304 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x18, 0x77, 0x1d, 0x4c, 0xc8, 0x0e, 0x96, 0xa2, 0x17, 0x71, 0x87, 0xed, 0x01, 0x92, 0x43, 0xc0,
+	0x43, 0x3c, 0xa5, 0xae, 0xce, 0xe1, 0xd6, 0x0d, 0xdc, 0x2a, 0x48, 0x61, 0x76, 0x4b, 0x08, 0x85,
+	0x36, 0x29, 0x4b, 0x57, 0xd8, 0xeb, 0x78, 0xf4, 0x51, 0x7c, 0x94, 0x3d, 0x85, 0x34, 0xb1, 0x3d,
+	0x0c, 0xf4, 0x12, 0x7e, 0x7c, 0xbf, 0x3f, 0xf9, 0x7d, 0x1f, 0xb8, 0x17, 0x4a, 0x89, 0x8c, 0xa3,
+	0x84, 0x69, 0x64, 0x61, 0x8d, 0x2a, 0x8c, 0xb8, 0x3c, 0xe4, 0x1a, 0xe5, 0x6a, 0x9b, 0x66, 0x7c,
+	0xc3, 0x78, 0x95, 0xee, 0xf8, 0xa6, 0x3c, 0x16, 0x1c, 0x16, 0x7b, 0x55, 0x2a, 0x6f, 0x60, 0xc5,
+	0x30, 0x61, 0x1a, 0xb6, 0x3e, 0x58, 0x61, 0x68, 0x7c, 0xb7, 0x77, 0x4d, 0x6c, 0x91, 0xa2, 0x44,
+	0x4a, 0x55, 0x26, 0x65, 0xaa, 0xa4, 0xb6, 0xe6, 0xd1, 0x07, 0xb8, 0x9e, 0x9b, 0xe0, 0xb1, 0xc9,
+	0x5d, 0x1d, 0x0b, 0x1e, 0xc8, 0x43, 0x3e, 0x7a, 0x06, 0xee, 0xf9, 0xdc, 0xbb, 0x02, 0xfd, 0x75,
+	0xf8, 0xba, 0x0c, 0x1e, 0xa7, 0x4f, 0xd3, 0x60, 0xec, 0x5e, 0x78, 0x7d, 0x70, 0xb9, 0x0e, 0x5f,
+	0xc2, 0xc5, 0x5b, 0xe8, 0x76, 0x3c, 0x00, 0x7a, 0xf3, 0x85, 0x3f, 0x9d, 0x05, 0xae, 0x53, 0xe3,
+	0x15, 0xf5, 0x67, 0xc1, 0xca, 0xed, 0xfa, 0xa7, 0x0e, 0x18, 0xee, 0x54, 0x0e, 0xff, 0x6d, 0xe9,
+	0xdf, 0x9c, 0xff, 0xb6, 0xac, 0xeb, 0x2d, 0x3b, 0xef, 0xfe, 0xaf, 0x4f, 0xa8, 0x2c, 0x91, 0x02,
+	0xaa, 0xbd, 0x40, 0x82, 0x4b, 0x53, 0xbe, 0xb9, 0x52, 0x91, 0xea, 0x3f, 0x8e, 0xf6, 0x60, 0xde,
+	0x4f, 0xa7, 0x3b, 0xa1, 0xf4, 0xcb, 0x19, 0x4c, 0x6c, 0x14, 0x65, 0x1a, 0x5a, 0x58, 0xa3, 0x08,
+	0xc3, 0x7a, 0x63, 0xfd, 0xdd, 0xf0, 0x31, 0x65, 0x3a, 0x6e, 0xf9, 0x38, 0xc2, 0xb1, 0xe1, 0x4f,
+	0xce, 0xd0, 0x0e, 0x09, 0xa1, 0x4c, 0x13, 0xd2, 0x2a, 0x08, 0x89, 0x30, 0x21, 0x46, 0xb3, 0xed,
+	0x99, 0x62, 0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0x20, 0x5e, 0x3e, 0x66, 0xcc, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/month_of_year.pb.go b/googleapis/ads/googleads/v3/enums/month_of_year.pb.go
new file mode 100644
index 0000000..f6c904d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/month_of_year.pb.go
@@ -0,0 +1,169 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/month_of_year.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates months of the year, e.g., "January".
+type MonthOfYearEnum_MonthOfYear int32
+
+const (
+	// Not specified.
+	MonthOfYearEnum_UNSPECIFIED MonthOfYearEnum_MonthOfYear = 0
+	// The value is unknown in this version.
+	MonthOfYearEnum_UNKNOWN MonthOfYearEnum_MonthOfYear = 1
+	// January.
+	MonthOfYearEnum_JANUARY MonthOfYearEnum_MonthOfYear = 2
+	// February.
+	MonthOfYearEnum_FEBRUARY MonthOfYearEnum_MonthOfYear = 3
+	// March.
+	MonthOfYearEnum_MARCH MonthOfYearEnum_MonthOfYear = 4
+	// April.
+	MonthOfYearEnum_APRIL MonthOfYearEnum_MonthOfYear = 5
+	// May.
+	MonthOfYearEnum_MAY MonthOfYearEnum_MonthOfYear = 6
+	// June.
+	MonthOfYearEnum_JUNE MonthOfYearEnum_MonthOfYear = 7
+	// July.
+	MonthOfYearEnum_JULY MonthOfYearEnum_MonthOfYear = 8
+	// August.
+	MonthOfYearEnum_AUGUST MonthOfYearEnum_MonthOfYear = 9
+	// September.
+	MonthOfYearEnum_SEPTEMBER MonthOfYearEnum_MonthOfYear = 10
+	// October.
+	MonthOfYearEnum_OCTOBER MonthOfYearEnum_MonthOfYear = 11
+	// November.
+	MonthOfYearEnum_NOVEMBER MonthOfYearEnum_MonthOfYear = 12
+	// December.
+	MonthOfYearEnum_DECEMBER MonthOfYearEnum_MonthOfYear = 13
+)
+
+var MonthOfYearEnum_MonthOfYear_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "JANUARY",
+	3:  "FEBRUARY",
+	4:  "MARCH",
+	5:  "APRIL",
+	6:  "MAY",
+	7:  "JUNE",
+	8:  "JULY",
+	9:  "AUGUST",
+	10: "SEPTEMBER",
+	11: "OCTOBER",
+	12: "NOVEMBER",
+	13: "DECEMBER",
+}
+
+var MonthOfYearEnum_MonthOfYear_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"JANUARY":     2,
+	"FEBRUARY":    3,
+	"MARCH":       4,
+	"APRIL":       5,
+	"MAY":         6,
+	"JUNE":        7,
+	"JULY":        8,
+	"AUGUST":      9,
+	"SEPTEMBER":   10,
+	"OCTOBER":     11,
+	"NOVEMBER":    12,
+	"DECEMBER":    13,
+}
+
+func (x MonthOfYearEnum_MonthOfYear) String() string {
+	return proto.EnumName(MonthOfYearEnum_MonthOfYear_name, int32(x))
+}
+
+func (MonthOfYearEnum_MonthOfYear) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9fad203756f7601c, []int{0, 0}
+}
+
+// Container for enumeration of months of the year, e.g., "January".
+type MonthOfYearEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MonthOfYearEnum) Reset()         { *m = MonthOfYearEnum{} }
+func (m *MonthOfYearEnum) String() string { return proto.CompactTextString(m) }
+func (*MonthOfYearEnum) ProtoMessage()    {}
+func (*MonthOfYearEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9fad203756f7601c, []int{0}
+}
+
+func (m *MonthOfYearEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MonthOfYearEnum.Unmarshal(m, b)
+}
+func (m *MonthOfYearEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MonthOfYearEnum.Marshal(b, m, deterministic)
+}
+func (m *MonthOfYearEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MonthOfYearEnum.Merge(m, src)
+}
+func (m *MonthOfYearEnum) XXX_Size() int {
+	return xxx_messageInfo_MonthOfYearEnum.Size(m)
+}
+func (m *MonthOfYearEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MonthOfYearEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MonthOfYearEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MonthOfYearEnum_MonthOfYear", MonthOfYearEnum_MonthOfYear_name, MonthOfYearEnum_MonthOfYear_value)
+	proto.RegisterType((*MonthOfYearEnum)(nil), "google.ads.googleads.v3.enums.MonthOfYearEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/month_of_year.proto", fileDescriptor_9fad203756f7601c)
+}
+
+var fileDescriptor_9fad203756f7601c = []byte{
+	// 389 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcb, 0x8e, 0xd3, 0x30,
+	0x14, 0x25, 0xe9, 0x4c, 0x1f, 0xce, 0x8c, 0xc6, 0xf2, 0x12, 0x31, 0x8b, 0x99, 0x0f, 0x70, 0x84,
+	0xb2, 0x33, 0x2b, 0x27, 0xe3, 0x29, 0x2d, 0xcd, 0x43, 0x69, 0x13, 0x14, 0x14, 0xa9, 0x0a, 0x24,
+	0x0d, 0x95, 0x1a, 0xbb, 0x8a, 0xd3, 0x4a, 0xfc, 0x0e, 0x4b, 0xfe, 0x81, 0x1f, 0x60, 0xc7, 0x47,
+	0xb0, 0xe1, 0x2b, 0x90, 0x63, 0x5a, 0x75, 0x03, 0x9b, 0xe8, 0x9c, 0x7b, 0xee, 0xb9, 0x37, 0x3e,
+	0x17, 0xbc, 0xae, 0x85, 0xa8, 0x77, 0x95, 0x5d, 0x94, 0xd2, 0xd6, 0x50, 0xa1, 0xa3, 0x63, 0x57,
+	0xfc, 0xd0, 0x48, 0xbb, 0x11, 0xbc, 0xfb, 0xbc, 0x16, 0x9b, 0xf5, 0x97, 0xaa, 0x68, 0xf1, 0xbe,
+	0x15, 0x9d, 0x40, 0xf7, 0xba, 0x0f, 0x17, 0xa5, 0xc4, 0x67, 0x0b, 0x3e, 0x3a, 0xb8, 0xb7, 0xbc,
+	0x7c, 0x75, 0x9a, 0xb8, 0xdf, 0xda, 0x05, 0xe7, 0xa2, 0x2b, 0xba, 0xad, 0xe0, 0x52, 0x9b, 0x1f,
+	0x7f, 0x1a, 0xe0, 0xce, 0x57, 0x43, 0xc3, 0x4d, 0x56, 0x15, 0x2d, 0xe3, 0x87, 0xe6, 0xf1, 0xbb,
+	0x01, 0xac, 0x8b, 0x1a, 0xba, 0x03, 0x56, 0x12, 0x2c, 0x23, 0xe6, 0xcd, 0x9e, 0x67, 0xec, 0x09,
+	0xbe, 0x40, 0x16, 0x18, 0x25, 0xc1, 0xbb, 0x20, 0x7c, 0x1f, 0x40, 0x43, 0x91, 0x39, 0x0d, 0x12,
+	0x1a, 0x67, 0xd0, 0x44, 0x37, 0x60, 0xfc, 0xcc, 0xdc, 0xb8, 0x67, 0x03, 0x34, 0x01, 0xd7, 0x3e,
+	0x8d, 0xbd, 0xb7, 0xf0, 0x4a, 0x41, 0x1a, 0xc5, 0xb3, 0x05, 0xbc, 0x46, 0x23, 0x30, 0xf0, 0x69,
+	0x06, 0x87, 0x68, 0x0c, 0xae, 0xe6, 0x49, 0xc0, 0xe0, 0x48, 0xa3, 0x45, 0x06, 0xc7, 0x08, 0x80,
+	0x21, 0x4d, 0xa6, 0xc9, 0x72, 0x05, 0x27, 0xe8, 0x16, 0x4c, 0x96, 0x2c, 0x5a, 0x31, 0xdf, 0x65,
+	0x31, 0x04, 0x6a, 0x51, 0xe8, 0xad, 0x42, 0x45, 0x2c, 0xb5, 0x28, 0x08, 0x53, 0x2d, 0xdd, 0x28,
+	0xf6, 0xc4, 0x3c, 0xcd, 0x6e, 0xdd, 0x5f, 0x06, 0x78, 0xf8, 0x24, 0x1a, 0xfc, 0xdf, 0x5c, 0x5c,
+	0x78, 0xf1, 0xc4, 0x48, 0x65, 0x11, 0x19, 0x1f, 0xdc, 0xbf, 0x96, 0x5a, 0xec, 0x0a, 0x5e, 0x63,
+	0xd1, 0xd6, 0x76, 0x5d, 0xf1, 0x3e, 0xa9, 0xd3, 0x35, 0xf6, 0x5b, 0xf9, 0x8f, 0xe3, 0xbc, 0xe9,
+	0xbf, 0x5f, 0xcd, 0xc1, 0x94, 0xd2, 0x6f, 0xe6, 0xfd, 0x54, 0x8f, 0xa2, 0xa5, 0xc4, 0x1a, 0x2a,
+	0x94, 0x3a, 0x58, 0x45, 0x2c, 0x7f, 0x9c, 0xf4, 0x9c, 0x96, 0x32, 0x3f, 0xeb, 0x79, 0xea, 0xe4,
+	0xbd, 0xfe, 0xdb, 0x7c, 0xd0, 0x45, 0x42, 0x68, 0x29, 0x09, 0x39, 0x77, 0x10, 0x92, 0x3a, 0x84,
+	0xf4, 0x3d, 0x1f, 0x87, 0xfd, 0x8f, 0x39, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x68, 0x60, 0x63,
+	0xea, 0x34, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/mutate_job_status.pb.go b/googleapis/ads/googleads/v3/enums/mutate_job_status.pb.go
new file mode 100644
index 0000000..f3ebcb9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/mutate_job_status.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/mutate_job_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The mutate job statuses.
+type MutateJobStatusEnum_MutateJobStatus int32
+
+const (
+	// Not specified.
+	MutateJobStatusEnum_UNSPECIFIED MutateJobStatusEnum_MutateJobStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	MutateJobStatusEnum_UNKNOWN MutateJobStatusEnum_MutateJobStatus = 1
+	// The job is not currently running.
+	MutateJobStatusEnum_PENDING MutateJobStatusEnum_MutateJobStatus = 2
+	// The job is running.
+	MutateJobStatusEnum_RUNNING MutateJobStatusEnum_MutateJobStatus = 3
+	// The job is done.
+	MutateJobStatusEnum_DONE MutateJobStatusEnum_MutateJobStatus = 4
+)
+
+var MutateJobStatusEnum_MutateJobStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "RUNNING",
+	4: "DONE",
+}
+
+var MutateJobStatusEnum_MutateJobStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"RUNNING":     3,
+	"DONE":        4,
+}
+
+func (x MutateJobStatusEnum_MutateJobStatus) String() string {
+	return proto.EnumName(MutateJobStatusEnum_MutateJobStatus_name, int32(x))
+}
+
+func (MutateJobStatusEnum_MutateJobStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_52c7990b70abb227, []int{0, 0}
+}
+
+// Container for enum describing possible mutate job statuses.
+type MutateJobStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateJobStatusEnum) Reset()         { *m = MutateJobStatusEnum{} }
+func (m *MutateJobStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*MutateJobStatusEnum) ProtoMessage()    {}
+func (*MutateJobStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_52c7990b70abb227, []int{0}
+}
+
+func (m *MutateJobStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateJobStatusEnum.Unmarshal(m, b)
+}
+func (m *MutateJobStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateJobStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *MutateJobStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateJobStatusEnum.Merge(m, src)
+}
+func (m *MutateJobStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_MutateJobStatusEnum.Size(m)
+}
+func (m *MutateJobStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateJobStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateJobStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.MutateJobStatusEnum_MutateJobStatus", MutateJobStatusEnum_MutateJobStatus_name, MutateJobStatusEnum_MutateJobStatus_value)
+	proto.RegisterType((*MutateJobStatusEnum)(nil), "google.ads.googleads.v3.enums.MutateJobStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/mutate_job_status.proto", fileDescriptor_52c7990b70abb227)
+}
+
+var fileDescriptor_52c7990b70abb227 = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4e, 0xeb, 0x30,
+	0x10, 0xfd, 0x4d, 0xab, 0x0f, 0x72, 0x17, 0x8d, 0x02, 0x2b, 0x44, 0x17, 0xed, 0x01, 0xec, 0x85,
+	0xc5, 0xc6, 0xac, 0x52, 0x1a, 0xaa, 0x82, 0x70, 0x23, 0xaa, 0x04, 0x09, 0x45, 0xaa, 0x1c, 0x12,
+	0x59, 0xa9, 0x1a, 0x3b, 0xaa, 0x9d, 0x1e, 0x88, 0x25, 0x47, 0xe1, 0x26, 0x70, 0x0a, 0x64, 0xa7,
+	0xc9, 0xa2, 0x12, 0x6c, 0xac, 0x37, 0x33, 0xef, 0x3d, 0xbf, 0x19, 0x70, 0xc3, 0xa5, 0xe4, 0xbb,
+	0x1c, 0xb1, 0x4c, 0xa1, 0x06, 0x1a, 0x74, 0xc0, 0x28, 0x17, 0x75, 0xa9, 0x50, 0x59, 0x6b, 0xa6,
+	0xf3, 0xcd, 0x56, 0xa6, 0x1b, 0xa5, 0x99, 0xae, 0x15, 0xac, 0xf6, 0x52, 0x4b, 0x6f, 0xdc, 0x70,
+	0x21, 0xcb, 0x14, 0xec, 0x64, 0xf0, 0x80, 0xa1, 0x95, 0x5d, 0x5d, 0xb7, 0xae, 0x55, 0x81, 0x98,
+	0x10, 0x52, 0x33, 0x5d, 0x48, 0x71, 0x14, 0x4f, 0xb7, 0xe0, 0xe2, 0xc9, 0xfa, 0x3e, 0xc8, 0x74,
+	0x6d, 0x5d, 0x03, 0x51, 0x97, 0xd3, 0x35, 0x18, 0x9d, 0xb4, 0xbd, 0x11, 0x18, 0x46, 0x74, 0x1d,
+	0x06, 0x77, 0xcb, 0xfb, 0x65, 0x30, 0x77, 0xff, 0x79, 0x43, 0x70, 0x16, 0xd1, 0x47, 0xba, 0x7a,
+	0xa1, 0x6e, 0xcf, 0x14, 0x61, 0x40, 0xe7, 0x4b, 0xba, 0x70, 0x1d, 0x53, 0x3c, 0x47, 0x94, 0x9a,
+	0xa2, 0xef, 0x9d, 0x83, 0xc1, 0x7c, 0x45, 0x03, 0x77, 0x30, 0xfb, 0xea, 0x81, 0xc9, 0x9b, 0x2c,
+	0xe1, 0x9f, 0x79, 0x67, 0x97, 0x27, 0x1f, 0x87, 0x26, 0x67, 0xd8, 0x7b, 0x9d, 0x1d, 0x65, 0x5c,
+	0xee, 0x98, 0xe0, 0x50, 0xee, 0x39, 0xe2, 0xb9, 0xb0, 0x5b, 0xb4, 0xd7, 0xaa, 0x0a, 0xf5, 0xcb,
+	0xf1, 0x6e, 0xed, 0xfb, 0xee, 0xf4, 0x17, 0xbe, 0xff, 0xe1, 0x8c, 0x17, 0x8d, 0x95, 0x9f, 0x29,
+	0xd8, 0x40, 0x83, 0x62, 0x0c, 0xcd, 0xee, 0xea, 0xb3, 0x9d, 0x27, 0x7e, 0xa6, 0x92, 0x6e, 0x9e,
+	0xc4, 0x38, 0xb1, 0xf3, 0x6f, 0x67, 0xd2, 0x34, 0x09, 0xf1, 0x33, 0x45, 0x48, 0xc7, 0x20, 0x24,
+	0xc6, 0x84, 0x58, 0x4e, 0xfa, 0xdf, 0x06, 0xc3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xc6,
+	0xee, 0xec, 0xd4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/negative_geo_target_type.pb.go b/googleapis/ads/googleads/v3/enums/negative_geo_target_type.pb.go
new file mode 100644
index 0000000..6fe4a02
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/negative_geo_target_type.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/negative_geo_target_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible negative geo target types.
+type NegativeGeoTargetTypeEnum_NegativeGeoTargetType int32
+
+const (
+	// Not specified.
+	NegativeGeoTargetTypeEnum_UNSPECIFIED NegativeGeoTargetTypeEnum_NegativeGeoTargetType = 0
+	// The value is unknown in this version.
+	NegativeGeoTargetTypeEnum_UNKNOWN NegativeGeoTargetTypeEnum_NegativeGeoTargetType = 1
+	// Specifies that a user is excluded from seeing the ad if they
+	// are in, or show interest in, advertiser's excluded locations.
+	NegativeGeoTargetTypeEnum_PRESENCE_OR_INTEREST NegativeGeoTargetTypeEnum_NegativeGeoTargetType = 4
+	// Specifies that a user is excluded from seeing the ad if they
+	// are in advertiser's excluded locations.
+	NegativeGeoTargetTypeEnum_PRESENCE NegativeGeoTargetTypeEnum_NegativeGeoTargetType = 5
+)
+
+var NegativeGeoTargetTypeEnum_NegativeGeoTargetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	4: "PRESENCE_OR_INTEREST",
+	5: "PRESENCE",
+}
+
+var NegativeGeoTargetTypeEnum_NegativeGeoTargetType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"PRESENCE_OR_INTEREST": 4,
+	"PRESENCE":             5,
+}
+
+func (x NegativeGeoTargetTypeEnum_NegativeGeoTargetType) String() string {
+	return proto.EnumName(NegativeGeoTargetTypeEnum_NegativeGeoTargetType_name, int32(x))
+}
+
+func (NegativeGeoTargetTypeEnum_NegativeGeoTargetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_145bd44f7b043ddc, []int{0, 0}
+}
+
+// Container for enum describing possible negative geo target types.
+type NegativeGeoTargetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NegativeGeoTargetTypeEnum) Reset()         { *m = NegativeGeoTargetTypeEnum{} }
+func (m *NegativeGeoTargetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*NegativeGeoTargetTypeEnum) ProtoMessage()    {}
+func (*NegativeGeoTargetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_145bd44f7b043ddc, []int{0}
+}
+
+func (m *NegativeGeoTargetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NegativeGeoTargetTypeEnum.Unmarshal(m, b)
+}
+func (m *NegativeGeoTargetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NegativeGeoTargetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *NegativeGeoTargetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NegativeGeoTargetTypeEnum.Merge(m, src)
+}
+func (m *NegativeGeoTargetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_NegativeGeoTargetTypeEnum.Size(m)
+}
+func (m *NegativeGeoTargetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NegativeGeoTargetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NegativeGeoTargetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.NegativeGeoTargetTypeEnum_NegativeGeoTargetType", NegativeGeoTargetTypeEnum_NegativeGeoTargetType_name, NegativeGeoTargetTypeEnum_NegativeGeoTargetType_value)
+	proto.RegisterType((*NegativeGeoTargetTypeEnum)(nil), "google.ads.googleads.v3.enums.NegativeGeoTargetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/negative_geo_target_type.proto", fileDescriptor_145bd44f7b043ddc)
+}
+
+var fileDescriptor_145bd44f7b043ddc = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xfb, 0x30,
+	0x1c, 0xc5, 0x7f, 0xdb, 0xcf, 0x7f, 0x64, 0x82, 0xa5, 0x28, 0xe8, 0x70, 0x17, 0xdb, 0x03, 0xa4,
+	0x17, 0xb9, 0x8b, 0xde, 0x74, 0x33, 0x8e, 0x21, 0x64, 0x65, 0xeb, 0x26, 0x48, 0xa5, 0x44, 0x1b,
+	0x42, 0x61, 0x4b, 0xca, 0x92, 0x0d, 0xe6, 0xe3, 0x78, 0xe9, 0xa3, 0xf8, 0x28, 0xde, 0xf8, 0x0a,
+	0xd2, 0x64, 0xed, 0xd5, 0xf4, 0xa6, 0x1c, 0x7a, 0xbe, 0x9f, 0xc3, 0xc9, 0x01, 0xb7, 0x42, 0x29,
+	0xb1, 0xe0, 0x01, 0xcb, 0x74, 0xe0, 0x64, 0xa9, 0x36, 0x28, 0xe0, 0x72, 0xbd, 0xd4, 0x81, 0xe4,
+	0x82, 0x99, 0x7c, 0xc3, 0x53, 0xc1, 0x55, 0x6a, 0xd8, 0x4a, 0x70, 0x93, 0x9a, 0x6d, 0xc1, 0x61,
+	0xb1, 0x52, 0x46, 0xf9, 0x1d, 0x87, 0x40, 0x96, 0x69, 0x58, 0xd3, 0x70, 0x83, 0xa0, 0xa5, 0xdb,
+	0xd7, 0x55, 0x78, 0x91, 0x07, 0x4c, 0x4a, 0x65, 0x98, 0xc9, 0x95, 0xd4, 0x0e, 0xee, 0xbd, 0x81,
+	0x2b, 0xba, 0x8b, 0x1f, 0x72, 0x15, 0xdb, 0xf0, 0x78, 0x5b, 0x70, 0x22, 0xd7, 0xcb, 0xde, 0x33,
+	0xb8, 0xd8, 0x6b, 0xfa, 0x67, 0xa0, 0x35, 0xa3, 0xd3, 0x88, 0x0c, 0x46, 0xf7, 0x23, 0x72, 0xe7,
+	0xfd, 0xf3, 0x5b, 0xe0, 0x78, 0x46, 0x1f, 0xe8, 0xf8, 0x91, 0x7a, 0x0d, 0xff, 0x12, 0x9c, 0x47,
+	0x13, 0x32, 0x25, 0x74, 0x40, 0xd2, 0xf1, 0x24, 0x1d, 0xd1, 0x98, 0x4c, 0xc8, 0x34, 0xf6, 0x0e,
+	0xfc, 0x53, 0x70, 0x52, 0x39, 0xde, 0x61, 0xff, 0xbb, 0x01, 0xba, 0xaf, 0x6a, 0x09, 0xff, 0xec,
+	0xdf, 0x6f, 0xef, 0xad, 0x10, 0x95, 0xed, 0xa3, 0xc6, 0x53, 0x7f, 0x07, 0x0b, 0xb5, 0x60, 0x52,
+	0x40, 0xb5, 0x12, 0x81, 0xe0, 0xd2, 0xbe, 0xad, 0x9a, 0xb2, 0xc8, 0xf5, 0x2f, 0xcb, 0xde, 0xd8,
+	0xef, 0x7b, 0xf3, 0xff, 0x30, 0x0c, 0x3f, 0x9a, 0x9d, 0xa1, 0x8b, 0x0a, 0x33, 0x0d, 0x9d, 0x2c,
+	0xd5, 0x1c, 0xc1, 0x72, 0x0b, 0xfd, 0x59, 0xf9, 0x49, 0x98, 0xe9, 0xa4, 0xf6, 0x93, 0x39, 0x4a,
+	0xac, 0xff, 0xd5, 0xec, 0xba, 0x9f, 0x18, 0x87, 0x99, 0xc6, 0xb8, 0xbe, 0xc0, 0x78, 0x8e, 0x30,
+	0xb6, 0x37, 0x2f, 0x47, 0xb6, 0x18, 0xfa, 0x09, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x8c, 0x63, 0x22,
+	0xf1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/operating_system_version_operator_type.pb.go b/googleapis/ads/googleads/v3/enums/operating_system_version_operator_type.pb.go
new file mode 100644
index 0000000..6663681
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/operating_system_version_operator_type.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/operating_system_version_operator_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of operating system version.
+type OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType int32
+
+const (
+	// Not specified.
+	OperatingSystemVersionOperatorTypeEnum_UNSPECIFIED OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType = 0
+	// Used for return value only. Represents value unknown in this version.
+	OperatingSystemVersionOperatorTypeEnum_UNKNOWN OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType = 1
+	// Equals to the specified version.
+	OperatingSystemVersionOperatorTypeEnum_EQUALS_TO OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType = 2
+	// Greater than or equals to the specified version.
+	OperatingSystemVersionOperatorTypeEnum_GREATER_THAN_EQUALS_TO OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType = 4
+)
+
+var OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EQUALS_TO",
+	4: "GREATER_THAN_EQUALS_TO",
+}
+
+var OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"EQUALS_TO":              2,
+	"GREATER_THAN_EQUALS_TO": 4,
+}
+
+func (x OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType) String() string {
+	return proto.EnumName(OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType_name, int32(x))
+}
+
+func (OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a9a8e9ce9b3332be, []int{0, 0}
+}
+
+// Container for enum describing the type of OS operators.
+type OperatingSystemVersionOperatorTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperatingSystemVersionOperatorTypeEnum) Reset() {
+	*m = OperatingSystemVersionOperatorTypeEnum{}
+}
+func (m *OperatingSystemVersionOperatorTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*OperatingSystemVersionOperatorTypeEnum) ProtoMessage()    {}
+func (*OperatingSystemVersionOperatorTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a9a8e9ce9b3332be, []int{0}
+}
+
+func (m *OperatingSystemVersionOperatorTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum.Unmarshal(m, b)
+}
+func (m *OperatingSystemVersionOperatorTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *OperatingSystemVersionOperatorTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum.Merge(m, src)
+}
+func (m *OperatingSystemVersionOperatorTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum.Size(m)
+}
+func (m *OperatingSystemVersionOperatorTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperatingSystemVersionOperatorTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType", OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType_name, OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType_value)
+	proto.RegisterType((*OperatingSystemVersionOperatorTypeEnum)(nil), "google.ads.googleads.v3.enums.OperatingSystemVersionOperatorTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/operating_system_version_operator_type.proto", fileDescriptor_a9a8e9ce9b3332be)
+}
+
+var fileDescriptor_a9a8e9ce9b3332be = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x51, 0xbf, 0x4e, 0xf3, 0x30,
+	0x1c, 0xfc, 0x92, 0x0f, 0x81, 0x70, 0x85, 0xa8, 0x32, 0x30, 0x54, 0x74, 0x68, 0x07, 0xd8, 0x9c,
+	0x21, 0x9b, 0x99, 0x5c, 0x08, 0xa5, 0x80, 0x92, 0xd2, 0xa6, 0x41, 0x42, 0x91, 0xac, 0x40, 0x2c,
+	0x2b, 0x52, 0x63, 0x47, 0xb1, 0x5b, 0xa9, 0x4f, 0xc2, 0xce, 0xc8, 0xa3, 0xf0, 0x28, 0x3c, 0x03,
+	0x03, 0x8a, 0xdd, 0x84, 0x09, 0xba, 0x58, 0x27, 0xdf, 0xfd, 0xee, 0x7e, 0x7f, 0xc0, 0x2d, 0x13,
+	0x82, 0x2d, 0xa9, 0x9b, 0x66, 0xd2, 0x35, 0xb0, 0x46, 0x6b, 0xcf, 0xa5, 0x7c, 0x55, 0x48, 0x57,
+	0x94, 0xb4, 0x4a, 0x55, 0xce, 0x19, 0x91, 0x1b, 0xa9, 0x68, 0x41, 0xd6, 0xb4, 0x92, 0xb9, 0xe0,
+	0xc4, 0x10, 0xa2, 0x22, 0x6a, 0x53, 0x52, 0x58, 0x56, 0x42, 0x09, 0xa7, 0x6f, 0x0c, 0x60, 0x9a,
+	0x49, 0xd8, 0x7a, 0xc1, 0xb5, 0x07, 0xb5, 0x57, 0xef, 0xb4, 0x89, 0x2a, 0x73, 0x37, 0xe5, 0x5c,
+	0xa8, 0x54, 0xe5, 0x82, 0x4b, 0x53, 0x3c, 0x7c, 0xb5, 0xc0, 0x59, 0xd8, 0xa4, 0xcd, 0x75, 0x58,
+	0x6c, 0xb2, 0xc2, 0x6d, 0x54, 0xb4, 0x29, 0xa9, 0xcf, 0x57, 0xc5, 0xb0, 0x00, 0xc3, 0xdd, 0x4a,
+	0xe7, 0x18, 0x74, 0x16, 0xc1, 0x7c, 0xea, 0x5f, 0x4e, 0xae, 0x27, 0xfe, 0x55, 0xf7, 0x9f, 0xd3,
+	0x01, 0x07, 0x8b, 0xe0, 0x2e, 0x08, 0x1f, 0x83, 0xae, 0xe5, 0x1c, 0x81, 0x43, 0xff, 0x61, 0x81,
+	0xef, 0xe7, 0x24, 0x0a, 0xbb, 0xb6, 0xd3, 0x03, 0x27, 0xe3, 0x99, 0x8f, 0x23, 0x7f, 0x46, 0xa2,
+	0x1b, 0x1c, 0x90, 0x1f, 0x6e, 0x6f, 0xf4, 0x65, 0x81, 0xc1, 0x8b, 0x28, 0xe0, 0x9f, 0xd3, 0x8d,
+	0xce, 0x77, 0xb7, 0x34, 0xad, 0x07, 0x9d, 0x5a, 0x4f, 0xa3, 0xad, 0x13, 0x13, 0xcb, 0x94, 0x33,
+	0x28, 0x2a, 0xe6, 0x32, 0xca, 0xf5, 0x1a, 0x9a, 0x1b, 0x94, 0xb9, 0xfc, 0xe5, 0x24, 0x17, 0xfa,
+	0x7d, 0xb3, 0xff, 0x8f, 0x31, 0x7e, 0xb7, 0xfb, 0x63, 0x63, 0x85, 0x33, 0x09, 0x0d, 0xac, 0x51,
+	0xec, 0xc1, 0x7a, 0x51, 0xf2, 0xa3, 0xe1, 0x13, 0x9c, 0xc9, 0xa4, 0xe5, 0x93, 0xd8, 0x4b, 0x34,
+	0xff, 0x69, 0x0f, 0xcc, 0x27, 0x42, 0x38, 0x93, 0x08, 0xb5, 0x0a, 0x84, 0x62, 0x0f, 0x21, 0xad,
+	0x79, 0xde, 0xd7, 0x8d, 0x79, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x36, 0x63, 0xa6, 0x2b, 0x2a,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/page_one_promoted_strategy_goal.pb.go b/googleapis/ads/googleads/v3/enums/page_one_promoted_strategy_goal.pb.go
new file mode 100644
index 0000000..a606ae9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/page_one_promoted_strategy_goal.pb.go
@@ -0,0 +1,47 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/page_one_promoted_strategy_goal.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/page_one_promoted_strategy_goal.proto", fileDescriptor_c64613aa3985b1f2)
+}
+
+var fileDescriptor_c64613aa3985b1f2 = []byte{
+	// 248 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0xb1, 0x4a, 0xc5, 0x30,
+	0x14, 0x86, 0xb9, 0x15, 0x1c, 0xee, 0xe8, 0x28, 0x5e, 0xf0, 0xbe, 0x40, 0x32, 0x64, 0x8b, 0x53,
+	0x2a, 0xd2, 0xd1, 0x82, 0xd0, 0x41, 0x0a, 0xe5, 0x68, 0xc2, 0xa1, 0xd0, 0xe6, 0x84, 0x9e, 0x58,
+	0xf0, 0x75, 0x1c, 0x7d, 0x14, 0x1f, 0xc5, 0xdd, 0x5d, 0x9a, 0xb4, 0xdd, 0x74, 0x09, 0x3f, 0xf9,
+	0xff, 0xf3, 0x9d, 0xff, 0x1c, 0xef, 0x91, 0x08, 0x07, 0x27, 0xc1, 0xb2, 0xcc, 0x72, 0x51, 0xb3,
+	0x92, 0xce, 0xbf, 0x8d, 0x2c, 0x03, 0xa0, 0xeb, 0xc8, 0xbb, 0x2e, 0x4c, 0x34, 0x52, 0x74, 0xb6,
+	0xe3, 0x38, 0x41, 0x74, 0xf8, 0xde, 0x21, 0xc1, 0x20, 0xc2, 0x44, 0x91, 0xae, 0x4e, 0x79, 0x52,
+	0x80, 0x65, 0xb1, 0x43, 0xc4, 0xac, 0x44, 0x82, 0x5c, 0xdf, 0x6c, 0x3b, 0x42, 0x2f, 0xc1, 0x7b,
+	0x8a, 0x10, 0x7b, 0xf2, 0x9c, 0x87, 0xcb, 0x9f, 0xc3, 0xf1, 0xfc, 0x4a, 0xa3, 0xf8, 0x97, 0x51,
+	0xde, 0xd6, 0x80, 0xee, 0xd1, 0xbb, 0x7a, 0xed, 0xf1, 0xb4, 0xd6, 0xa8, 0x08, 0x86, 0x7a, 0xe1,
+	0xd4, 0x87, 0xe7, 0x72, 0x45, 0x20, 0x0d, 0xe0, 0x51, 0xd0, 0x84, 0x12, 0x9d, 0x4f, 0x5b, 0xb6,
+	0xdb, 0x42, 0xcf, 0x7f, 0x9c, 0x7a, 0x97, 0xde, 0x8f, 0xe2, 0xa2, 0x32, 0xe6, 0xb3, 0x38, 0x55,
+	0x19, 0x65, 0x2c, 0x8b, 0x2c, 0x17, 0xd5, 0x28, 0xf1, 0xb0, 0xa4, 0xbe, 0x36, 0xbf, 0x35, 0x96,
+	0xdb, 0xdd, 0x6f, 0x1b, 0xd5, 0x26, 0xff, 0xbb, 0x38, 0xe7, 0x4f, 0xad, 0x8d, 0x65, 0xad, 0xf7,
+	0x84, 0xd6, 0x8d, 0xd2, 0x3a, 0x65, 0x5e, 0x2e, 0x53, 0x31, 0xf5, 0x1b, 0x00, 0x00, 0xff, 0xff,
+	0xe5, 0x14, 0xfb, 0x5c, 0x82, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/parental_status_type.pb.go b/googleapis/ads/googleads/v3/enums/parental_status_type.pb.go
new file mode 100644
index 0000000..63212e3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/parental_status_type.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/parental_status_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of parental statuses (e.g. not a parent).
+type ParentalStatusTypeEnum_ParentalStatusType int32
+
+const (
+	// Not specified.
+	ParentalStatusTypeEnum_UNSPECIFIED ParentalStatusTypeEnum_ParentalStatusType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ParentalStatusTypeEnum_UNKNOWN ParentalStatusTypeEnum_ParentalStatusType = 1
+	// Parent.
+	ParentalStatusTypeEnum_PARENT ParentalStatusTypeEnum_ParentalStatusType = 300
+	// Not a parent.
+	ParentalStatusTypeEnum_NOT_A_PARENT ParentalStatusTypeEnum_ParentalStatusType = 301
+	// Undetermined parental status.
+	ParentalStatusTypeEnum_UNDETERMINED ParentalStatusTypeEnum_ParentalStatusType = 302
+)
+
+var ParentalStatusTypeEnum_ParentalStatusType_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	300: "PARENT",
+	301: "NOT_A_PARENT",
+	302: "UNDETERMINED",
+}
+
+var ParentalStatusTypeEnum_ParentalStatusType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"PARENT":       300,
+	"NOT_A_PARENT": 301,
+	"UNDETERMINED": 302,
+}
+
+func (x ParentalStatusTypeEnum_ParentalStatusType) String() string {
+	return proto.EnumName(ParentalStatusTypeEnum_ParentalStatusType_name, int32(x))
+}
+
+func (ParentalStatusTypeEnum_ParentalStatusType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_377126a50dfd61e5, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic parental statuses.
+type ParentalStatusTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParentalStatusTypeEnum) Reset()         { *m = ParentalStatusTypeEnum{} }
+func (m *ParentalStatusTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusTypeEnum) ProtoMessage()    {}
+func (*ParentalStatusTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_377126a50dfd61e5, []int{0}
+}
+
+func (m *ParentalStatusTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Unmarshal(m, b)
+}
+func (m *ParentalStatusTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ParentalStatusTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusTypeEnum.Merge(m, src)
+}
+func (m *ParentalStatusTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Size(m)
+}
+func (m *ParentalStatusTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ParentalStatusTypeEnum_ParentalStatusType", ParentalStatusTypeEnum_ParentalStatusType_name, ParentalStatusTypeEnum_ParentalStatusType_value)
+	proto.RegisterType((*ParentalStatusTypeEnum)(nil), "google.ads.googleads.v3.enums.ParentalStatusTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/parental_status_type.proto", fileDescriptor_377126a50dfd61e5)
+}
+
+var fileDescriptor_377126a50dfd61e5 = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x15, 0x26, 0x64, 0x82, 0xb5, 0x07, 0x05, 0x71, 0x87, 0xed, 0x01, 0xd2, 0x43, 0x2f,
+	0x12, 0x4f, 0x99, 0x8b, 0x63, 0x88, 0x59, 0xd9, 0xba, 0x09, 0x52, 0x28, 0xd1, 0x86, 0x30, 0xd8,
+	0x92, 0xb0, 0x64, 0x83, 0x9d, 0x7c, 0x17, 0x8f, 0xa2, 0x3e, 0x88, 0x8f, 0x22, 0x3e, 0x84, 0x34,
+	0xd9, 0x76, 0x19, 0x7a, 0x09, 0x1f, 0xbf, 0xef, 0x0f, 0x5f, 0x3e, 0x70, 0x25, 0x94, 0x12, 0x33,
+	0x1e, 0xb3, 0xd2, 0xc4, 0x1e, 0x56, 0x68, 0x95, 0xc4, 0x5c, 0x2e, 0xe7, 0x26, 0xd6, 0x6c, 0xc1,
+	0xa5, 0x65, 0xb3, 0xc2, 0x58, 0x66, 0x97, 0xa6, 0xb0, 0x6b, 0xcd, 0xa1, 0x5e, 0x28, 0xab, 0xa2,
+	0xa6, 0x97, 0x43, 0x56, 0x1a, 0xb8, 0x73, 0xc2, 0x55, 0x02, 0x9d, 0xf3, 0xe2, 0x72, 0x1b, 0xac,
+	0xa7, 0x31, 0x93, 0x52, 0x59, 0x66, 0xa7, 0x4a, 0x1a, 0x6f, 0x6e, 0xbf, 0x80, 0xb3, 0x74, 0x13,
+	0x3d, 0x72, 0xc9, 0xd9, 0x5a, 0x73, 0x22, 0x97, 0xf3, 0x36, 0x07, 0xd1, 0x3e, 0x13, 0x9d, 0x80,
+	0xc6, 0x98, 0x8e, 0x52, 0x72, 0xd3, 0xbf, 0xed, 0x93, 0x6e, 0x78, 0x10, 0x35, 0xc0, 0xd1, 0x98,
+	0xde, 0xd1, 0xc1, 0x03, 0x0d, 0x6b, 0x51, 0x03, 0xd4, 0x53, 0x3c, 0x24, 0x34, 0x0b, 0xdf, 0x83,
+	0xe8, 0x14, 0x1c, 0xd3, 0x41, 0x56, 0xe0, 0x62, 0x73, 0xfa, 0x70, 0xa7, 0x31, 0xed, 0x92, 0x8c,
+	0x0c, 0xef, 0xfb, 0x94, 0x74, 0xc3, 0xcf, 0xa0, 0xf3, 0x53, 0x03, 0xad, 0x67, 0x35, 0x87, 0xff,
+	0x7e, 0xa2, 0x73, 0xbe, 0x5f, 0x25, 0xad, 0xfa, 0xa7, 0xb5, 0xc7, 0xce, 0xc6, 0x29, 0xd4, 0x8c,
+	0x49, 0x01, 0xd5, 0x42, 0xc4, 0x82, 0x4b, 0xf7, 0xbb, 0xed, 0x90, 0x7a, 0x6a, 0xfe, 0xd8, 0xf5,
+	0xda, 0xbd, 0xaf, 0xc1, 0x61, 0x0f, 0xe3, 0xb7, 0xa0, 0xd9, 0xf3, 0x51, 0xb8, 0x34, 0xd0, 0xc3,
+	0x0a, 0x4d, 0x12, 0x58, 0x0d, 0x62, 0xbe, 0xb6, 0x7c, 0x8e, 0x4b, 0x93, 0xef, 0xf8, 0x7c, 0x92,
+	0xe4, 0x8e, 0xff, 0x0e, 0x5a, 0xfe, 0x88, 0x10, 0x2e, 0x0d, 0x42, 0x3b, 0x05, 0x42, 0x93, 0x04,
+	0x21, 0xa7, 0x79, 0xaa, 0xbb, 0x62, 0xc9, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x6e, 0xfd,
+	0xab, 0xef, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/payment_mode.pb.go b/googleapis/ads/googleads/v3/enums/payment_mode.pb.go
new file mode 100644
index 0000000..af7938d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/payment_mode.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/payment_mode.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible payment modes.
+type PaymentModeEnum_PaymentMode int32
+
+const (
+	// Not specified.
+	PaymentModeEnum_UNSPECIFIED PaymentModeEnum_PaymentMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	PaymentModeEnum_UNKNOWN PaymentModeEnum_PaymentMode = 1
+	// Pay per click.
+	PaymentModeEnum_CLICKS PaymentModeEnum_PaymentMode = 4
+	// Pay per conversion value. This mode is only supported by campaigns with
+	// AdvertisingChannelType.HOTEL, BiddingStrategyType.COMMISSION, and
+	// BudgetType.HOTEL_ADS_COMMISSION.
+	PaymentModeEnum_CONVERSION_VALUE PaymentModeEnum_PaymentMode = 5
+	// Pay per conversion. This mode is only supported by campaigns with
+	// AdvertisingChannelType.DISPLAY (excluding
+	// AdvertisingChannelSubType.DISPLAY_GMAIL), BiddingStrategyType.TARGET_CPA,
+	// and BudgetType.FIXED_CPA. The customer must also be eligible for this
+	// mode. See Customer.eligibility_failure_reasons for details.
+	PaymentModeEnum_CONVERSIONS PaymentModeEnum_PaymentMode = 6
+	// Pay per guest stay value. This mode is only supported by campaigns with
+	// AdvertisingChannelType.HOTEL, BiddingStrategyType.COMMISSION, and
+	// BudgetType.HOTEL_ADS_COMMISSION.
+	PaymentModeEnum_GUEST_STAY PaymentModeEnum_PaymentMode = 7
+)
+
+var PaymentModeEnum_PaymentMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	4: "CLICKS",
+	5: "CONVERSION_VALUE",
+	6: "CONVERSIONS",
+	7: "GUEST_STAY",
+}
+
+var PaymentModeEnum_PaymentMode_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"CLICKS":           4,
+	"CONVERSION_VALUE": 5,
+	"CONVERSIONS":      6,
+	"GUEST_STAY":       7,
+}
+
+func (x PaymentModeEnum_PaymentMode) String() string {
+	return proto.EnumName(PaymentModeEnum_PaymentMode_name, int32(x))
+}
+
+func (PaymentModeEnum_PaymentMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7bf76f63298a9af6, []int{0, 0}
+}
+
+// Container for enum describing possible payment modes.
+type PaymentModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PaymentModeEnum) Reset()         { *m = PaymentModeEnum{} }
+func (m *PaymentModeEnum) String() string { return proto.CompactTextString(m) }
+func (*PaymentModeEnum) ProtoMessage()    {}
+func (*PaymentModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7bf76f63298a9af6, []int{0}
+}
+
+func (m *PaymentModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentModeEnum.Unmarshal(m, b)
+}
+func (m *PaymentModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentModeEnum.Marshal(b, m, deterministic)
+}
+func (m *PaymentModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentModeEnum.Merge(m, src)
+}
+func (m *PaymentModeEnum) XXX_Size() int {
+	return xxx_messageInfo_PaymentModeEnum.Size(m)
+}
+func (m *PaymentModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaymentModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PaymentModeEnum_PaymentMode", PaymentModeEnum_PaymentMode_name, PaymentModeEnum_PaymentMode_value)
+	proto.RegisterType((*PaymentModeEnum)(nil), "google.ads.googleads.v3.enums.PaymentModeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/payment_mode.proto", fileDescriptor_7bf76f63298a9af6)
+}
+
+var fileDescriptor_7bf76f63298a9af6 = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xf3, 0x30,
+	0x1c, 0x7e, 0xbb, 0x57, 0x37, 0xc8, 0xc0, 0x85, 0xe2, 0x49, 0xdc, 0x61, 0xfb, 0x00, 0xa9, 0xd0,
+	0x5b, 0x3c, 0x65, 0xb5, 0x8e, 0xb2, 0xd9, 0x15, 0xbb, 0x56, 0x94, 0xc2, 0x88, 0x26, 0x84, 0xc1,
+	0x9a, 0x94, 0xa5, 0x1b, 0x78, 0xf4, 0xab, 0x78, 0xf4, 0xa3, 0xf8, 0x3d, 0xbc, 0xf8, 0x29, 0xa4,
+	0x89, 0x9b, 0xbb, 0xe8, 0x25, 0x3c, 0xfc, 0x9e, 0x3f, 0x3c, 0x79, 0xc0, 0x85, 0x50, 0x4a, 0xac,
+	0xb8, 0x47, 0x99, 0xf6, 0x2c, 0x6c, 0xd0, 0xd6, 0xf7, 0xb8, 0xdc, 0x94, 0xda, 0xab, 0xe8, 0x73,
+	0xc9, 0x65, 0xbd, 0x28, 0x15, 0xe3, 0xa8, 0x5a, 0xab, 0x5a, 0xb9, 0x7d, 0x2b, 0x43, 0x94, 0x69,
+	0xb4, 0x77, 0xa0, 0xad, 0x8f, 0x8c, 0xe3, 0xec, 0x7c, 0x17, 0x58, 0x2d, 0x3d, 0x2a, 0xa5, 0xaa,
+	0x69, 0xbd, 0x54, 0x52, 0x5b, 0xf3, 0xf0, 0xc5, 0x01, 0xbd, 0xc4, 0x66, 0xde, 0x28, 0xc6, 0x43,
+	0xb9, 0x29, 0x87, 0x12, 0x74, 0x0f, 0x4e, 0x6e, 0x0f, 0x74, 0xb3, 0x38, 0x4d, 0xc2, 0x20, 0xba,
+	0x8e, 0xc2, 0x2b, 0xf8, 0xcf, 0xed, 0x82, 0x4e, 0x16, 0x4f, 0xe2, 0xd9, 0x5d, 0x0c, 0x1d, 0x17,
+	0x80, 0x76, 0x30, 0x8d, 0x82, 0x49, 0x0a, 0x8f, 0xdc, 0x53, 0x00, 0x83, 0x59, 0x9c, 0x87, 0xb7,
+	0x69, 0x34, 0x8b, 0x17, 0x39, 0x99, 0x66, 0x21, 0x3c, 0x6e, 0xfc, 0x3f, 0xd7, 0x14, 0xb6, 0xdd,
+	0x13, 0x00, 0xc6, 0x59, 0x98, 0xce, 0x17, 0xe9, 0x9c, 0xdc, 0xc3, 0xce, 0xe8, 0xc3, 0x01, 0x83,
+	0x27, 0x55, 0xa2, 0x3f, 0xff, 0x31, 0x82, 0x07, 0x9d, 0x92, 0xa6, 0x7b, 0xe2, 0x3c, 0x8c, 0xbe,
+	0x2d, 0x42, 0xad, 0xa8, 0x14, 0x48, 0xad, 0x85, 0x27, 0xb8, 0x34, 0x3f, 0xdb, 0x8d, 0x57, 0x2d,
+	0xf5, 0x2f, 0x5b, 0x5e, 0x9a, 0xf7, 0xb5, 0xf5, 0x7f, 0x4c, 0xc8, 0x5b, 0xab, 0x3f, 0xb6, 0x51,
+	0x84, 0x69, 0x64, 0x61, 0x83, 0x72, 0x1f, 0x35, 0x93, 0xe8, 0xf7, 0x1d, 0x5f, 0x10, 0xa6, 0x8b,
+	0x3d, 0x5f, 0xe4, 0x7e, 0x61, 0xf8, 0xcf, 0xd6, 0xc0, 0x1e, 0x31, 0x26, 0x4c, 0x63, 0xbc, 0x57,
+	0x60, 0x9c, 0xfb, 0x18, 0x1b, 0xcd, 0x63, 0xdb, 0x14, 0xf3, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff,
+	0x62, 0x70, 0x40, 0x8a, 0xe3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/placeholder_type.pb.go b/googleapis/ads/googleads/v3/enums/placeholder_type.pb.go
new file mode 100644
index 0000000..c919b86
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/placeholder_type.pb.go
@@ -0,0 +1,223 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/placeholder_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible placeholder types for a feed mapping.
+type PlaceholderTypeEnum_PlaceholderType int32
+
+const (
+	// Not specified.
+	PlaceholderTypeEnum_UNSPECIFIED PlaceholderTypeEnum_PlaceholderType = 0
+	// Used for return value only. Represents value unknown in this version.
+	PlaceholderTypeEnum_UNKNOWN PlaceholderTypeEnum_PlaceholderType = 1
+	// Lets you show links in your ad to pages from your website, including the
+	// main landing page.
+	PlaceholderTypeEnum_SITELINK PlaceholderTypeEnum_PlaceholderType = 2
+	// Lets you attach a phone number to an ad, allowing customers to call
+	// directly from the ad.
+	PlaceholderTypeEnum_CALL PlaceholderTypeEnum_PlaceholderType = 3
+	// Lets you provide users with a link that points to a mobile app in
+	// addition to a website.
+	PlaceholderTypeEnum_APP PlaceholderTypeEnum_PlaceholderType = 4
+	// Lets you show locations of businesses from your Google My Business
+	// account in your ad. This helps people find your locations by showing your
+	// ads with your address, a map to your location, or the distance to your
+	// business. This extension type is useful to draw customers to your
+	// brick-and-mortar location.
+	PlaceholderTypeEnum_LOCATION PlaceholderTypeEnum_PlaceholderType = 5
+	// If you sell your product through retail chains, affiliate location
+	// extensions let you show nearby stores that carry your products.
+	PlaceholderTypeEnum_AFFILIATE_LOCATION PlaceholderTypeEnum_PlaceholderType = 6
+	// Lets you include additional text with your search ads that provide
+	// detailed information about your business, including products and services
+	// you offer. Callouts appear in ads at the top and bottom of Google search
+	// results.
+	PlaceholderTypeEnum_CALLOUT PlaceholderTypeEnum_PlaceholderType = 7
+	// Lets you add more info to your ad, specific to some predefined categories
+	// such as types, brands, styles, etc. A minimum of 3 text (SNIPPETS) values
+	// are required.
+	PlaceholderTypeEnum_STRUCTURED_SNIPPET PlaceholderTypeEnum_PlaceholderType = 8
+	// Allows users to see your ad, click an icon, and contact you directly by
+	// text message. With one tap on your ad, people can contact you to book an
+	// appointment, get a quote, ask for information, or request a service.
+	PlaceholderTypeEnum_MESSAGE PlaceholderTypeEnum_PlaceholderType = 9
+	// Lets you display prices for a list of items along with your ads. A price
+	// feed is composed of three to eight price table rows.
+	PlaceholderTypeEnum_PRICE PlaceholderTypeEnum_PlaceholderType = 10
+	// Allows you to highlight sales and other promotions that let users see how
+	// they can save by buying now.
+	PlaceholderTypeEnum_PROMOTION PlaceholderTypeEnum_PlaceholderType = 11
+	// Lets you dynamically inject custom data into the title and description
+	// of your ads.
+	PlaceholderTypeEnum_AD_CUSTOMIZER PlaceholderTypeEnum_PlaceholderType = 12
+	// Indicates that this feed is for education dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_EDUCATION PlaceholderTypeEnum_PlaceholderType = 13
+	// Indicates that this feed is for flight dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_FLIGHT PlaceholderTypeEnum_PlaceholderType = 14
+	// Indicates that this feed is for a custom dynamic remarketing type. Use
+	// this only if the other business types don't apply to your products or
+	// services.
+	PlaceholderTypeEnum_DYNAMIC_CUSTOM PlaceholderTypeEnum_PlaceholderType = 15
+	// Indicates that this feed is for hotels and rentals dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_HOTEL PlaceholderTypeEnum_PlaceholderType = 16
+	// Indicates that this feed is for real estate dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_REAL_ESTATE PlaceholderTypeEnum_PlaceholderType = 17
+	// Indicates that this feed is for travel dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_TRAVEL PlaceholderTypeEnum_PlaceholderType = 18
+	// Indicates that this feed is for local deals dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_LOCAL PlaceholderTypeEnum_PlaceholderType = 19
+	// Indicates that this feed is for job dynamic remarketing.
+	PlaceholderTypeEnum_DYNAMIC_JOB PlaceholderTypeEnum_PlaceholderType = 20
+)
+
+var PlaceholderTypeEnum_PlaceholderType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SITELINK",
+	3:  "CALL",
+	4:  "APP",
+	5:  "LOCATION",
+	6:  "AFFILIATE_LOCATION",
+	7:  "CALLOUT",
+	8:  "STRUCTURED_SNIPPET",
+	9:  "MESSAGE",
+	10: "PRICE",
+	11: "PROMOTION",
+	12: "AD_CUSTOMIZER",
+	13: "DYNAMIC_EDUCATION",
+	14: "DYNAMIC_FLIGHT",
+	15: "DYNAMIC_CUSTOM",
+	16: "DYNAMIC_HOTEL",
+	17: "DYNAMIC_REAL_ESTATE",
+	18: "DYNAMIC_TRAVEL",
+	19: "DYNAMIC_LOCAL",
+	20: "DYNAMIC_JOB",
+}
+
+var PlaceholderTypeEnum_PlaceholderType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"SITELINK":            2,
+	"CALL":                3,
+	"APP":                 4,
+	"LOCATION":            5,
+	"AFFILIATE_LOCATION":  6,
+	"CALLOUT":             7,
+	"STRUCTURED_SNIPPET":  8,
+	"MESSAGE":             9,
+	"PRICE":               10,
+	"PROMOTION":           11,
+	"AD_CUSTOMIZER":       12,
+	"DYNAMIC_EDUCATION":   13,
+	"DYNAMIC_FLIGHT":      14,
+	"DYNAMIC_CUSTOM":      15,
+	"DYNAMIC_HOTEL":       16,
+	"DYNAMIC_REAL_ESTATE": 17,
+	"DYNAMIC_TRAVEL":      18,
+	"DYNAMIC_LOCAL":       19,
+	"DYNAMIC_JOB":         20,
+}
+
+func (x PlaceholderTypeEnum_PlaceholderType) String() string {
+	return proto.EnumName(PlaceholderTypeEnum_PlaceholderType_name, int32(x))
+}
+
+func (PlaceholderTypeEnum_PlaceholderType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_60d966f72e921afd, []int{0, 0}
+}
+
+// Container for enum describing possible placeholder types for a feed mapping.
+type PlaceholderTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PlaceholderTypeEnum) Reset()         { *m = PlaceholderTypeEnum{} }
+func (m *PlaceholderTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PlaceholderTypeEnum) ProtoMessage()    {}
+func (*PlaceholderTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_60d966f72e921afd, []int{0}
+}
+
+func (m *PlaceholderTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlaceholderTypeEnum.Unmarshal(m, b)
+}
+func (m *PlaceholderTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlaceholderTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PlaceholderTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlaceholderTypeEnum.Merge(m, src)
+}
+func (m *PlaceholderTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PlaceholderTypeEnum.Size(m)
+}
+func (m *PlaceholderTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlaceholderTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlaceholderTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType", PlaceholderTypeEnum_PlaceholderType_name, PlaceholderTypeEnum_PlaceholderType_value)
+	proto.RegisterType((*PlaceholderTypeEnum)(nil), "google.ads.googleads.v3.enums.PlaceholderTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/placeholder_type.proto", fileDescriptor_60d966f72e921afd)
+}
+
+var fileDescriptor_60d966f72e921afd = []byte{
+	// 490 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6e, 0x9b, 0x30,
+	0x14, 0x86, 0x17, 0xd2, 0x36, 0x89, 0xd3, 0x34, 0x8e, 0xd3, 0x6d, 0xd2, 0xb4, 0x5e, 0xb4, 0x0f,
+	0x00, 0x17, 0xec, 0x8a, 0x5d, 0x39, 0xe0, 0xa4, 0x5e, 0x1d, 0xb0, 0xc0, 0x64, 0x5a, 0x15, 0x09,
+	0xb1, 0x82, 0x58, 0xa4, 0x04, 0xa3, 0x90, 0x56, 0xea, 0x5b, 0xec, 0x19, 0x76, 0xb9, 0x47, 0xd9,
+	0x9b, 0x6c, 0x4f, 0xb0, 0xcb, 0xc9, 0x50, 0xb2, 0xa8, 0xd2, 0x76, 0x83, 0x8e, 0xbe, 0xf3, 0xff,
+	0x3f, 0xb6, 0xcf, 0x01, 0xef, 0x32, 0x29, 0xb3, 0x75, 0x6a, 0xc4, 0x49, 0x69, 0xd4, 0xa5, 0xaa,
+	0x1e, 0x4c, 0x23, 0xcd, 0xef, 0x37, 0xa5, 0x51, 0xac, 0xe3, 0xbb, 0xf4, 0x8b, 0x5c, 0x27, 0xe9,
+	0x36, 0xda, 0x3d, 0x16, 0xa9, 0x5e, 0x6c, 0xe5, 0x4e, 0xa2, 0x8b, 0x5a, 0xaa, 0xc7, 0x49, 0xa9,
+	0xef, 0x5d, 0xfa, 0x83, 0xa9, 0x57, 0xae, 0x37, 0x6f, 0x9b, 0xd0, 0x62, 0x65, 0xc4, 0x79, 0x2e,
+	0x77, 0xf1, 0x6e, 0x25, 0xf3, 0xb2, 0x36, 0x5f, 0x7d, 0x6d, 0x83, 0x31, 0xff, 0x9b, 0x2b, 0x1e,
+	0x8b, 0x94, 0xe4, 0xf7, 0x9b, 0xab, 0xdf, 0x1a, 0x18, 0x3e, 0xe3, 0x68, 0x08, 0xfa, 0xa1, 0x1b,
+	0x70, 0x62, 0xd3, 0x29, 0x25, 0x0e, 0x7c, 0x81, 0xfa, 0xa0, 0x13, 0xba, 0x37, 0xae, 0xf7, 0xd1,
+	0x85, 0x2d, 0x74, 0x0a, 0xba, 0x01, 0x15, 0x84, 0x51, 0xf7, 0x06, 0x6a, 0xa8, 0x0b, 0x8e, 0x6c,
+	0xcc, 0x18, 0x6c, 0xa3, 0x0e, 0x68, 0x63, 0xce, 0xe1, 0x91, 0x12, 0x30, 0xcf, 0xc6, 0x82, 0x7a,
+	0x2e, 0x3c, 0x46, 0xaf, 0x00, 0xc2, 0xd3, 0x29, 0x65, 0x14, 0x0b, 0x12, 0xed, 0xf9, 0x89, 0xca,
+	0x54, 0x46, 0x2f, 0x14, 0xb0, 0xa3, 0x44, 0x81, 0xf0, 0x43, 0x5b, 0x84, 0x3e, 0x71, 0xa2, 0xc0,
+	0xa5, 0x9c, 0x13, 0x01, 0xbb, 0x4a, 0x34, 0x27, 0x41, 0x80, 0x67, 0x04, 0xf6, 0x50, 0x0f, 0x1c,
+	0x73, 0x9f, 0xda, 0x04, 0x02, 0x34, 0x00, 0x3d, 0xee, 0x7b, 0x73, 0xaf, 0xca, 0xea, 0xa3, 0x11,
+	0x18, 0x60, 0x27, 0xb2, 0xc3, 0x40, 0x78, 0x73, 0x7a, 0x4b, 0x7c, 0x78, 0x8a, 0x5e, 0x82, 0x91,
+	0xf3, 0xc9, 0xc5, 0x73, 0x6a, 0x47, 0xc4, 0x09, 0x9f, 0xfe, 0x3a, 0x40, 0x08, 0x9c, 0x35, 0x78,
+	0xca, 0xe8, 0xec, 0x5a, 0xc0, 0xb3, 0x43, 0x56, 0x47, 0xc0, 0xa1, 0x4a, 0x6c, 0xd8, 0xb5, 0x27,
+	0x08, 0x83, 0x10, 0xbd, 0x06, 0xe3, 0x06, 0xf9, 0x04, 0xb3, 0x88, 0x04, 0x02, 0x0b, 0x02, 0x47,
+	0x87, 0x7e, 0xe1, 0xe3, 0x05, 0x61, 0x10, 0x1d, 0xfa, 0xd5, 0x9d, 0x19, 0x1c, 0xab, 0x57, 0x6d,
+	0xd0, 0x07, 0x6f, 0x02, 0xcf, 0x27, 0x3f, 0x5b, 0xe0, 0xf2, 0x4e, 0x6e, 0xf4, 0xff, 0x8e, 0x75,
+	0x72, 0xfe, 0x6c, 0x3a, 0x5c, 0x8d, 0x93, 0xb7, 0x6e, 0x27, 0x4f, 0xb6, 0x4c, 0xae, 0xe3, 0x3c,
+	0xd3, 0xe5, 0x36, 0x33, 0xb2, 0x34, 0xaf, 0x86, 0xdd, 0xec, 0x54, 0xb1, 0x2a, 0xff, 0xb1, 0x62,
+	0xef, 0xab, 0xef, 0x37, 0xad, 0x3d, 0xc3, 0xf8, 0xbb, 0x76, 0x31, 0xab, 0xa3, 0x70, 0x52, 0xea,
+	0x75, 0xa9, 0xaa, 0x85, 0xa9, 0xab, 0x0d, 0x29, 0x7f, 0x34, 0xfd, 0x25, 0x4e, 0xca, 0xe5, 0xbe,
+	0xbf, 0x5c, 0x98, 0xcb, 0xaa, 0xff, 0x4b, 0xbb, 0xac, 0xa1, 0x65, 0xe1, 0xa4, 0xb4, 0xac, 0xbd,
+	0xc2, 0xb2, 0x16, 0xa6, 0x65, 0x55, 0x9a, 0xcf, 0x27, 0xd5, 0xc1, 0xcc, 0x3f, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0x00, 0xfe, 0x7a, 0x86, 0xfa, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/placement_type.pb.go b/googleapis/ads/googleads/v3/enums/placement_type.pb.go
new file mode 100644
index 0000000..4dc05b7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/placement_type.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/placement_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible placement types for a feed mapping.
+type PlacementTypeEnum_PlacementType int32
+
+const (
+	// Not specified.
+	PlacementTypeEnum_UNSPECIFIED PlacementTypeEnum_PlacementType = 0
+	// Used for return value only. Represents value unknown in this version.
+	PlacementTypeEnum_UNKNOWN PlacementTypeEnum_PlacementType = 1
+	// Websites(e.g. 'www.flowers4sale.com').
+	PlacementTypeEnum_WEBSITE PlacementTypeEnum_PlacementType = 2
+	// Mobile application categories(e.g. 'Games').
+	PlacementTypeEnum_MOBILE_APP_CATEGORY PlacementTypeEnum_PlacementType = 3
+	// mobile applications(e.g. 'mobileapp::2-com.whatsthewordanswers').
+	PlacementTypeEnum_MOBILE_APPLICATION PlacementTypeEnum_PlacementType = 4
+	// YouTube videos(e.g. 'youtube.com/video/wtLJPvx7-ys').
+	PlacementTypeEnum_YOUTUBE_VIDEO PlacementTypeEnum_PlacementType = 5
+	// YouTube channels(e.g. 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').
+	PlacementTypeEnum_YOUTUBE_CHANNEL PlacementTypeEnum_PlacementType = 6
+)
+
+var PlacementTypeEnum_PlacementType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "WEBSITE",
+	3: "MOBILE_APP_CATEGORY",
+	4: "MOBILE_APPLICATION",
+	5: "YOUTUBE_VIDEO",
+	6: "YOUTUBE_CHANNEL",
+}
+
+var PlacementTypeEnum_PlacementType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"WEBSITE":             2,
+	"MOBILE_APP_CATEGORY": 3,
+	"MOBILE_APPLICATION":  4,
+	"YOUTUBE_VIDEO":       5,
+	"YOUTUBE_CHANNEL":     6,
+}
+
+func (x PlacementTypeEnum_PlacementType) String() string {
+	return proto.EnumName(PlacementTypeEnum_PlacementType_name, int32(x))
+}
+
+func (PlacementTypeEnum_PlacementType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_05b9db770804c8f7, []int{0, 0}
+}
+
+// Container for enum describing possible placement types.
+type PlacementTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PlacementTypeEnum) Reset()         { *m = PlacementTypeEnum{} }
+func (m *PlacementTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PlacementTypeEnum) ProtoMessage()    {}
+func (*PlacementTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_05b9db770804c8f7, []int{0}
+}
+
+func (m *PlacementTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlacementTypeEnum.Unmarshal(m, b)
+}
+func (m *PlacementTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlacementTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PlacementTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlacementTypeEnum.Merge(m, src)
+}
+func (m *PlacementTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PlacementTypeEnum.Size(m)
+}
+func (m *PlacementTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlacementTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlacementTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PlacementTypeEnum_PlacementType", PlacementTypeEnum_PlacementType_name, PlacementTypeEnum_PlacementType_value)
+	proto.RegisterType((*PlacementTypeEnum)(nil), "google.ads.googleads.v3.enums.PlacementTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/placement_type.proto", fileDescriptor_05b9db770804c8f7)
+}
+
+var fileDescriptor_05b9db770804c8f7 = []byte{
+	// 359 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x5d, 0x6a, 0xab, 0x40,
+	0x14, 0xbe, 0x9a, 0x7b, 0x73, 0x61, 0x42, 0x88, 0x99, 0xc0, 0xbd, 0x50, 0x9a, 0x87, 0x64, 0x01,
+	0x23, 0xd4, 0xb7, 0xe9, 0xd3, 0x68, 0xa6, 0xa9, 0x34, 0x55, 0x69, 0xd4, 0x90, 0x22, 0x88, 0x8d,
+	0x22, 0x81, 0x38, 0x23, 0x19, 0x13, 0xc8, 0x3a, 0xba, 0x83, 0xbe, 0xb5, 0x4b, 0xe9, 0x46, 0x0a,
+	0x5d, 0x45, 0x51, 0x6b, 0x4a, 0x1e, 0xda, 0x97, 0xe1, 0x9b, 0xf3, 0xfd, 0x70, 0xce, 0x07, 0x2e,
+	0x52, 0xce, 0xd3, 0x4d, 0xa2, 0x46, 0xb1, 0x50, 0x6b, 0x58, 0xa2, 0xbd, 0xa6, 0x26, 0x6c, 0x97,
+	0x09, 0x35, 0xdf, 0x44, 0xab, 0x24, 0x4b, 0x58, 0x11, 0x16, 0x87, 0x3c, 0x41, 0xf9, 0x96, 0x17,
+	0x1c, 0x0e, 0x6b, 0x21, 0x8a, 0x62, 0x81, 0x8e, 0x1e, 0xb4, 0xd7, 0x50, 0xe5, 0x39, 0x3b, 0x6f,
+	0x22, 0xf3, 0xb5, 0x1a, 0x31, 0xc6, 0x8b, 0xa8, 0x58, 0x73, 0x26, 0x6a, 0xf3, 0xf8, 0x59, 0x02,
+	0x7d, 0xa7, 0x49, 0x75, 0x0f, 0x79, 0x42, 0xd9, 0x2e, 0x1b, 0x3f, 0x4a, 0xa0, 0x7b, 0x32, 0x85,
+	0x3d, 0xd0, 0xf1, 0xac, 0xb9, 0x43, 0x0d, 0xf3, 0xca, 0xa4, 0x13, 0xe5, 0x17, 0xec, 0x80, 0xbf,
+	0x9e, 0x75, 0x63, 0xd9, 0x0b, 0x4b, 0x91, 0xca, 0xcf, 0x82, 0xea, 0x73, 0xd3, 0xa5, 0x8a, 0x0c,
+	0xff, 0x83, 0xc1, 0xad, 0xad, 0x9b, 0x33, 0x1a, 0x12, 0xc7, 0x09, 0x0d, 0xe2, 0xd2, 0xa9, 0x7d,
+	0xb7, 0x54, 0x5a, 0xf0, 0x1f, 0x80, 0x5f, 0xc4, 0xcc, 0x34, 0x88, 0x6b, 0xda, 0x96, 0xf2, 0x1b,
+	0xf6, 0x41, 0x77, 0x69, 0x7b, 0xae, 0xa7, 0xd3, 0xd0, 0x37, 0x27, 0xd4, 0x56, 0xfe, 0xc0, 0x01,
+	0xe8, 0x35, 0x23, 0xe3, 0x9a, 0x58, 0x16, 0x9d, 0x29, 0x6d, 0xfd, 0x4d, 0x02, 0xa3, 0x15, 0xcf,
+	0xd0, 0x8f, 0xf7, 0xea, 0xf0, 0x64, 0x71, 0xa7, 0xbc, 0xd2, 0x91, 0xee, 0xf5, 0x4f, 0x53, 0xca,
+	0x37, 0x11, 0x4b, 0x11, 0xdf, 0xa6, 0x6a, 0x9a, 0xb0, 0xaa, 0x83, 0xa6, 0xe8, 0x7c, 0x2d, 0xbe,
+	0xe9, 0xfd, 0xb2, 0x7a, 0x9f, 0xe4, 0xd6, 0x94, 0x90, 0x17, 0x79, 0x38, 0xad, 0xa3, 0x48, 0x2c,
+	0x50, 0x0d, 0x4b, 0xe4, 0x6b, 0xa8, 0xac, 0x4e, 0xbc, 0x36, 0x7c, 0x40, 0x62, 0x11, 0x1c, 0xf9,
+	0xc0, 0xd7, 0x82, 0x8a, 0x7f, 0x97, 0x47, 0xf5, 0x10, 0x63, 0x12, 0x0b, 0x8c, 0x8f, 0x0a, 0x8c,
+	0x7d, 0x0d, 0xe3, 0x4a, 0xf3, 0xd0, 0xae, 0x16, 0xd3, 0x3e, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc,
+	0xbc, 0x0c, 0x7f, 0x0f, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_approval_status.pb.go b/googleapis/ads/googleads/v3/enums/policy_approval_status.pb.go
new file mode 100644
index 0000000..b139788
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_approval_status.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_approval_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy approval statuses. When there are several approval
+// statuses available the most severe one will be used. The order of severity
+// is DISAPPROVED, AREA_OF_INTEREST_ONLY, APPROVED_LIMITED and APPROVED.
+type PolicyApprovalStatusEnum_PolicyApprovalStatus int32
+
+const (
+	// No value has been specified.
+	PolicyApprovalStatusEnum_UNSPECIFIED PolicyApprovalStatusEnum_PolicyApprovalStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyApprovalStatusEnum_UNKNOWN PolicyApprovalStatusEnum_PolicyApprovalStatus = 1
+	// Will not serve.
+	PolicyApprovalStatusEnum_DISAPPROVED PolicyApprovalStatusEnum_PolicyApprovalStatus = 2
+	// Serves with restrictions.
+	PolicyApprovalStatusEnum_APPROVED_LIMITED PolicyApprovalStatusEnum_PolicyApprovalStatus = 3
+	// Serves without restrictions.
+	PolicyApprovalStatusEnum_APPROVED PolicyApprovalStatusEnum_PolicyApprovalStatus = 4
+	// Will not serve in targeted countries, but may serve for users who are
+	// searching for information about the targeted countries.
+	PolicyApprovalStatusEnum_AREA_OF_INTEREST_ONLY PolicyApprovalStatusEnum_PolicyApprovalStatus = 5
+)
+
+var PolicyApprovalStatusEnum_PolicyApprovalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISAPPROVED",
+	3: "APPROVED_LIMITED",
+	4: "APPROVED",
+	5: "AREA_OF_INTEREST_ONLY",
+}
+
+var PolicyApprovalStatusEnum_PolicyApprovalStatus_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"DISAPPROVED":           2,
+	"APPROVED_LIMITED":      3,
+	"APPROVED":              4,
+	"AREA_OF_INTEREST_ONLY": 5,
+}
+
+func (x PolicyApprovalStatusEnum_PolicyApprovalStatus) String() string {
+	return proto.EnumName(PolicyApprovalStatusEnum_PolicyApprovalStatus_name, int32(x))
+}
+
+func (PolicyApprovalStatusEnum_PolicyApprovalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_f111d9ed5ef13a4d, []int{0, 0}
+}
+
+// Container for enum describing possible policy approval statuses.
+type PolicyApprovalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyApprovalStatusEnum) Reset()         { *m = PolicyApprovalStatusEnum{} }
+func (m *PolicyApprovalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyApprovalStatusEnum) ProtoMessage()    {}
+func (*PolicyApprovalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f111d9ed5ef13a4d, []int{0}
+}
+
+func (m *PolicyApprovalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Unmarshal(m, b)
+}
+func (m *PolicyApprovalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyApprovalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyApprovalStatusEnum.Merge(m, src)
+}
+func (m *PolicyApprovalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Size(m)
+}
+func (m *PolicyApprovalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyApprovalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyApprovalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus", PolicyApprovalStatusEnum_PolicyApprovalStatus_name, PolicyApprovalStatusEnum_PolicyApprovalStatus_value)
+	proto.RegisterType((*PolicyApprovalStatusEnum)(nil), "google.ads.googleads.v3.enums.PolicyApprovalStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_approval_status.proto", fileDescriptor_f111d9ed5ef13a4d)
+}
+
+var fileDescriptor_f111d9ed5ef13a4d = []byte{
+	// 347 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcb, 0x4a, 0xf3, 0x40,
+	0x14, 0xfe, 0x93, 0xfe, 0x5e, 0x98, 0x0a, 0x86, 0x50, 0xc1, 0x8a, 0x5d, 0xb4, 0x0f, 0x30, 0x59,
+	0x64, 0x37, 0xae, 0xa6, 0x66, 0x5a, 0x82, 0x35, 0x09, 0x4d, 0x1b, 0x51, 0x02, 0x61, 0x6c, 0x4a,
+	0x08, 0xa4, 0x33, 0xa1, 0x93, 0x16, 0xdc, 0xfb, 0x22, 0xba, 0xf4, 0x51, 0x7c, 0x14, 0x17, 0x3e,
+	0x83, 0x64, 0x72, 0x59, 0x55, 0x37, 0xc3, 0x37, 0xe7, 0xbb, 0x70, 0xce, 0x07, 0x50, 0xc2, 0x79,
+	0x92, 0xad, 0x0d, 0x1a, 0x0b, 0xa3, 0x82, 0x25, 0xda, 0x9b, 0xc6, 0x9a, 0xed, 0x36, 0xc2, 0xc8,
+	0x79, 0x96, 0xae, 0x5e, 0x22, 0x9a, 0xe7, 0x5b, 0xbe, 0xa7, 0x59, 0x24, 0x0a, 0x5a, 0xec, 0x04,
+	0xcc, 0xb7, 0xbc, 0xe0, 0xfa, 0xa0, 0x32, 0x40, 0x1a, 0x0b, 0xd8, 0x7a, 0xe1, 0xde, 0x84, 0xd2,
+	0x7b, 0x75, 0xdd, 0x44, 0xe7, 0xa9, 0x41, 0x19, 0xe3, 0x05, 0x2d, 0x52, 0xce, 0x6a, 0xf3, 0xe8,
+	0x4d, 0x01, 0x97, 0x9e, 0x4c, 0xc7, 0x75, 0xb8, 0x2f, 0xb3, 0x09, 0xdb, 0x6d, 0x46, 0xaf, 0x0a,
+	0xe8, 0x1d, 0x22, 0xf5, 0x73, 0xd0, 0x5d, 0x3a, 0xbe, 0x47, 0x6e, 0xed, 0x89, 0x4d, 0x2c, 0xed,
+	0x9f, 0xde, 0x05, 0x27, 0x4b, 0xe7, 0xce, 0x71, 0x1f, 0x1c, 0x4d, 0x29, 0x59, 0xcb, 0xf6, 0xb1,
+	0xe7, 0xcd, 0xdd, 0x80, 0x58, 0x9a, 0xaa, 0xf7, 0x80, 0xd6, 0xfc, 0xa2, 0x99, 0x7d, 0x6f, 0x2f,
+	0x88, 0xa5, 0x75, 0xf4, 0x33, 0x70, 0xda, 0x6a, 0xfe, 0xeb, 0x7d, 0x70, 0x81, 0xe7, 0x04, 0x47,
+	0xee, 0x24, 0xb2, 0x9d, 0x05, 0x99, 0x13, 0x7f, 0x11, 0xb9, 0xce, 0xec, 0x51, 0x3b, 0x1a, 0x7f,
+	0x2b, 0x60, 0xb8, 0xe2, 0x1b, 0xf8, 0xe7, 0x9d, 0xe3, 0xfe, 0xa1, 0x4d, 0xbd, 0xf2, 0x48, 0x4f,
+	0x79, 0x1a, 0xd7, 0xde, 0x84, 0x67, 0x94, 0x25, 0x90, 0x6f, 0x13, 0x23, 0x59, 0x33, 0x59, 0x41,
+	0xd3, 0x77, 0x9e, 0x8a, 0x5f, 0xea, 0xbf, 0x91, 0xef, 0xbb, 0xda, 0x99, 0x62, 0xfc, 0xa1, 0x0e,
+	0xa6, 0x55, 0x14, 0x8e, 0x05, 0xac, 0x60, 0x89, 0x02, 0x13, 0x96, 0x95, 0x89, 0xcf, 0x86, 0x0f,
+	0x71, 0x2c, 0xc2, 0x96, 0x0f, 0x03, 0x33, 0x94, 0xfc, 0x97, 0x3a, 0xac, 0x86, 0x08, 0xe1, 0x58,
+	0x20, 0xd4, 0x2a, 0x10, 0x0a, 0x4c, 0x84, 0xa4, 0xe6, 0xf9, 0x58, 0x2e, 0x66, 0xfe, 0x04, 0x00,
+	0x00, 0xff, 0xff, 0x2f, 0x49, 0x5c, 0x3e, 0x16, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_review_status.pb.go b/googleapis/ads/googleads/v3/enums/policy_review_status.pb.go
new file mode 100644
index 0000000..ce026b9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_review_status.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_review_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy review statuses.
+type PolicyReviewStatusEnum_PolicyReviewStatus int32
+
+const (
+	// No value has been specified.
+	PolicyReviewStatusEnum_UNSPECIFIED PolicyReviewStatusEnum_PolicyReviewStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyReviewStatusEnum_UNKNOWN PolicyReviewStatusEnum_PolicyReviewStatus = 1
+	// Currently under review.
+	PolicyReviewStatusEnum_REVIEW_IN_PROGRESS PolicyReviewStatusEnum_PolicyReviewStatus = 2
+	// Primary review complete. Other reviews may be continuing.
+	PolicyReviewStatusEnum_REVIEWED PolicyReviewStatusEnum_PolicyReviewStatus = 3
+	// The resource has been resubmitted for approval or its policy decision has
+	// been appealed.
+	PolicyReviewStatusEnum_UNDER_APPEAL PolicyReviewStatusEnum_PolicyReviewStatus = 4
+	// The resource is eligible and may be serving but could still undergo
+	// further review.
+	PolicyReviewStatusEnum_ELIGIBLE_MAY_SERVE PolicyReviewStatusEnum_PolicyReviewStatus = 5
+)
+
+var PolicyReviewStatusEnum_PolicyReviewStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REVIEW_IN_PROGRESS",
+	3: "REVIEWED",
+	4: "UNDER_APPEAL",
+	5: "ELIGIBLE_MAY_SERVE",
+}
+
+var PolicyReviewStatusEnum_PolicyReviewStatus_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"REVIEW_IN_PROGRESS": 2,
+	"REVIEWED":           3,
+	"UNDER_APPEAL":       4,
+	"ELIGIBLE_MAY_SERVE": 5,
+}
+
+func (x PolicyReviewStatusEnum_PolicyReviewStatus) String() string {
+	return proto.EnumName(PolicyReviewStatusEnum_PolicyReviewStatus_name, int32(x))
+}
+
+func (PolicyReviewStatusEnum_PolicyReviewStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c693618f5306b1b3, []int{0, 0}
+}
+
+// Container for enum describing possible policy review statuses.
+type PolicyReviewStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyReviewStatusEnum) Reset()         { *m = PolicyReviewStatusEnum{} }
+func (m *PolicyReviewStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyReviewStatusEnum) ProtoMessage()    {}
+func (*PolicyReviewStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c693618f5306b1b3, []int{0}
+}
+
+func (m *PolicyReviewStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Unmarshal(m, b)
+}
+func (m *PolicyReviewStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyReviewStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyReviewStatusEnum.Merge(m, src)
+}
+func (m *PolicyReviewStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Size(m)
+}
+func (m *PolicyReviewStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyReviewStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyReviewStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyReviewStatusEnum_PolicyReviewStatus", PolicyReviewStatusEnum_PolicyReviewStatus_name, PolicyReviewStatusEnum_PolicyReviewStatus_value)
+	proto.RegisterType((*PolicyReviewStatusEnum)(nil), "google.ads.googleads.v3.enums.PolicyReviewStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_review_status.proto", fileDescriptor_c693618f5306b1b3)
+}
+
+var fileDescriptor_c693618f5306b1b3 = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4b, 0xfb, 0x30,
+	0x1c, 0xfe, 0xb7, 0xfb, 0xbf, 0x91, 0x0d, 0x2c, 0x39, 0x4c, 0x10, 0x77, 0xd8, 0x3e, 0x40, 0x7a,
+	0xe8, 0x45, 0xe2, 0x29, 0x75, 0xb1, 0x14, 0x67, 0x17, 0x5a, 0xd6, 0xa1, 0x14, 0x42, 0x5d, 0x4b,
+	0x29, 0x6c, 0x49, 0x59, 0xba, 0x89, 0x57, 0xbf, 0x87, 0x17, 0x8f, 0x7e, 0x14, 0x3f, 0x8a, 0xf8,
+	0x21, 0xa4, 0xe9, 0xb6, 0xcb, 0xd0, 0x4b, 0x78, 0xc8, 0xf3, 0xc2, 0xef, 0x79, 0xc0, 0x45, 0x21,
+	0x65, 0xb1, 0xcc, 0xed, 0x34, 0x53, 0x76, 0x0b, 0x1b, 0xb4, 0x75, 0xec, 0x5c, 0x6c, 0x56, 0xca,
+	0xae, 0xe4, 0xb2, 0x5c, 0x3c, 0xf1, 0x75, 0xbe, 0x2d, 0xf3, 0x47, 0xae, 0xea, 0xb4, 0xde, 0x28,
+	0x54, 0xad, 0x65, 0x2d, 0xe1, 0xa0, 0x95, 0xa3, 0x34, 0x53, 0xe8, 0xe0, 0x44, 0x5b, 0x07, 0x69,
+	0xe7, 0xd9, 0xf9, 0x3e, 0xb8, 0x2a, 0xed, 0x54, 0x08, 0x59, 0xa7, 0x75, 0x29, 0xc5, 0xce, 0x3c,
+	0x7a, 0x31, 0x40, 0x9f, 0xe9, 0xec, 0x50, 0x47, 0x47, 0x3a, 0x99, 0x8a, 0xcd, 0x6a, 0xf4, 0x6c,
+	0x00, 0x78, 0x4c, 0xc1, 0x13, 0xd0, 0x9d, 0x05, 0x11, 0xa3, 0x57, 0xfe, 0xb5, 0x4f, 0xc7, 0xd6,
+	0x2f, 0xd8, 0x05, 0xff, 0x66, 0xc1, 0x4d, 0x30, 0x9d, 0x07, 0x96, 0x01, 0xfb, 0x00, 0x86, 0x34,
+	0xf6, 0xe9, 0x9c, 0xfb, 0x01, 0x67, 0xe1, 0xd4, 0x0b, 0x69, 0x14, 0x59, 0x26, 0xec, 0x81, 0xff,
+	0xed, 0x3f, 0x1d, 0x5b, 0x1d, 0x68, 0x81, 0xde, 0x2c, 0x18, 0xd3, 0x90, 0x13, 0xc6, 0x28, 0x99,
+	0x58, 0xbf, 0x1b, 0x1f, 0x9d, 0xf8, 0x9e, 0xef, 0x4e, 0x28, 0xbf, 0x25, 0x77, 0x3c, 0xa2, 0x61,
+	0x4c, 0xad, 0x3f, 0xee, 0xa7, 0x01, 0x86, 0x0b, 0xb9, 0x42, 0x3f, 0x76, 0x74, 0x4f, 0x8f, 0xef,
+	0x64, 0x4d, 0x3d, 0x66, 0xdc, 0xbb, 0x3b, 0x67, 0x21, 0x97, 0xa9, 0x28, 0x90, 0x5c, 0x17, 0x76,
+	0x91, 0x0b, 0x5d, 0x7e, 0xbf, 0x73, 0x55, 0xaa, 0x6f, 0x66, 0xbf, 0xd4, 0xef, 0xab, 0xd9, 0xf1,
+	0x08, 0x79, 0x33, 0x07, 0x5e, 0x1b, 0x45, 0x32, 0x85, 0x5a, 0xd8, 0xa0, 0xd8, 0x41, 0xcd, 0x5c,
+	0xea, 0x7d, 0xcf, 0x27, 0x24, 0x53, 0xc9, 0x81, 0x4f, 0x62, 0x27, 0xd1, 0xfc, 0x87, 0x39, 0x6c,
+	0x3f, 0x31, 0x26, 0x99, 0xc2, 0xf8, 0xa0, 0xc0, 0x38, 0x76, 0x30, 0xd6, 0x9a, 0x87, 0xbf, 0xfa,
+	0x30, 0xe7, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x84, 0x21, 0x68, 0x0e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_topic_entry_type.pb.go b/googleapis/ads/googleads/v3/enums/policy_topic_entry_type.pb.go
new file mode 100644
index 0000000..ed91de0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_topic_entry_type.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_topic_entry_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy topic entry types.
+type PolicyTopicEntryTypeEnum_PolicyTopicEntryType int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEntryTypeEnum_UNSPECIFIED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEntryTypeEnum_UNKNOWN PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 1
+	// The resource will not be served.
+	PolicyTopicEntryTypeEnum_PROHIBITED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 2
+	// The resource will not be served under some circumstances.
+	PolicyTopicEntryTypeEnum_LIMITED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 4
+	// The resource cannot serve at all because of the current targeting
+	// criteria.
+	PolicyTopicEntryTypeEnum_FULLY_LIMITED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 8
+	// May be of interest, but does not limit how the resource is served.
+	PolicyTopicEntryTypeEnum_DESCRIPTIVE PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 5
+	// Could increase coverage beyond normal.
+	PolicyTopicEntryTypeEnum_BROADENING PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 6
+	// Constrained for all targeted countries, but may serve in other countries
+	// through area of interest.
+	PolicyTopicEntryTypeEnum_AREA_OF_INTEREST_ONLY PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 7
+)
+
+var PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PROHIBITED",
+	4: "LIMITED",
+	8: "FULLY_LIMITED",
+	5: "DESCRIPTIVE",
+	6: "BROADENING",
+	7: "AREA_OF_INTEREST_ONLY",
+}
+
+var PolicyTopicEntryTypeEnum_PolicyTopicEntryType_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"PROHIBITED":            2,
+	"LIMITED":               4,
+	"FULLY_LIMITED":         8,
+	"DESCRIPTIVE":           5,
+	"BROADENING":            6,
+	"AREA_OF_INTEREST_ONLY": 7,
+}
+
+func (x PolicyTopicEntryTypeEnum_PolicyTopicEntryType) String() string {
+	return proto.EnumName(PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name, int32(x))
+}
+
+func (PolicyTopicEntryTypeEnum_PolicyTopicEntryType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_19cf7ab69a275a95, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic entry types.
+type PolicyTopicEntryTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEntryTypeEnum) Reset()         { *m = PolicyTopicEntryTypeEnum{} }
+func (m *PolicyTopicEntryTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEntryTypeEnum) ProtoMessage()    {}
+func (*PolicyTopicEntryTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_19cf7ab69a275a95, []int{0}
+}
+
+func (m *PolicyTopicEntryTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEntryTypeEnum.Merge(m, src)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Size(m)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEntryTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEntryTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType", PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name, PolicyTopicEntryTypeEnum_PolicyTopicEntryType_value)
+	proto.RegisterType((*PolicyTopicEntryTypeEnum)(nil), "google.ads.googleads.v3.enums.PolicyTopicEntryTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_topic_entry_type.proto", fileDescriptor_19cf7ab69a275a95)
+}
+
+var fileDescriptor_19cf7ab69a275a95 = []byte{
+	// 379 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0xae, 0x93, 0x40,
+	0x18, 0x85, 0x05, 0xf5, 0x5e, 0x33, 0x37, 0x2a, 0x12, 0x4d, 0xbc, 0xc6, 0x2e, 0xda, 0x07, 0x18,
+	0x16, 0xec, 0xa6, 0xab, 0xa1, 0x4c, 0xeb, 0x44, 0x1c, 0x08, 0xa5, 0x98, 0x1a, 0x12, 0x82, 0x85,
+	0x10, 0x92, 0x76, 0x86, 0x74, 0x68, 0x13, 0xde, 0xc6, 0xb8, 0xf4, 0x1d, 0x7c, 0x01, 0x1f, 0xc5,
+	0x85, 0xcf, 0x60, 0x66, 0x90, 0xae, 0xea, 0xdd, 0x90, 0xc3, 0x7f, 0xfe, 0xf3, 0x05, 0xce, 0x0f,
+	0xe6, 0xb5, 0x10, 0xf5, 0xbe, 0x72, 0x8a, 0x52, 0x3a, 0x83, 0x54, 0xea, 0xec, 0x3a, 0x15, 0x3f,
+	0x1d, 0xa4, 0xd3, 0x8a, 0x7d, 0xb3, 0xeb, 0xf3, 0x4e, 0xb4, 0xcd, 0x2e, 0xaf, 0x78, 0x77, 0xec,
+	0xf3, 0xae, 0x6f, 0x2b, 0xd8, 0x1e, 0x45, 0x27, 0xec, 0xc9, 0x90, 0x80, 0x45, 0x29, 0xe1, 0x25,
+	0x0c, 0xcf, 0x2e, 0xd4, 0xe1, 0x77, 0xef, 0x47, 0x76, 0xdb, 0x38, 0x05, 0xe7, 0xa2, 0x2b, 0xba,
+	0x46, 0x70, 0x39, 0x84, 0x67, 0x3f, 0x0d, 0xf0, 0x36, 0xd2, 0xf8, 0x44, 0xd1, 0x89, 0x82, 0x27,
+	0x7d, 0x5b, 0x11, 0x7e, 0x3a, 0xcc, 0xbe, 0x19, 0xe0, 0xf5, 0x35, 0xd3, 0x7e, 0x09, 0xee, 0x36,
+	0x6c, 0x1d, 0x91, 0x05, 0x5d, 0x52, 0xe2, 0x5b, 0x8f, 0xec, 0x3b, 0x70, 0xbb, 0x61, 0x1f, 0x59,
+	0xf8, 0x99, 0x59, 0x86, 0xfd, 0x02, 0x80, 0x28, 0x0e, 0x3f, 0x50, 0x8f, 0x26, 0xc4, 0xb7, 0x4c,
+	0x65, 0x06, 0xf4, 0x93, 0x7e, 0x79, 0x62, 0xbf, 0x02, 0xcf, 0x97, 0x9b, 0x20, 0xd8, 0xe6, 0xe3,
+	0xe8, 0x99, 0xa2, 0xf9, 0x64, 0xbd, 0x88, 0x69, 0x94, 0xd0, 0x94, 0x58, 0x4f, 0x15, 0xc0, 0x8b,
+	0x43, 0xec, 0x13, 0x46, 0xd9, 0xca, 0xba, 0xb1, 0xef, 0xc1, 0x1b, 0x1c, 0x13, 0x9c, 0x87, 0xcb,
+	0x9c, 0xb2, 0x84, 0xc4, 0x64, 0x9d, 0xe4, 0x21, 0x0b, 0xb6, 0xd6, 0xad, 0xf7, 0xc7, 0x00, 0xd3,
+	0x9d, 0x38, 0xc0, 0x07, 0x3b, 0xf0, 0xee, 0xaf, 0xfd, 0x45, 0xa4, 0x0a, 0x88, 0x8c, 0x2f, 0xde,
+	0xbf, 0x6c, 0x2d, 0xf6, 0x05, 0xaf, 0xa1, 0x38, 0xd6, 0x4e, 0x5d, 0x71, 0x5d, 0xcf, 0x78, 0x8c,
+	0xb6, 0x91, 0xff, 0xb9, 0xcd, 0x5c, 0x3f, 0xbf, 0x9b, 0x8f, 0x57, 0x18, 0xff, 0x30, 0x27, 0xab,
+	0x01, 0x85, 0x4b, 0x09, 0x07, 0xa9, 0x54, 0xea, 0x42, 0x55, 0xa7, 0xfc, 0x35, 0xfa, 0x19, 0x2e,
+	0x65, 0x76, 0xf1, 0xb3, 0xd4, 0xcd, 0xb4, 0xff, 0xdb, 0x9c, 0x0e, 0x43, 0x84, 0x70, 0x29, 0x11,
+	0xba, 0x6c, 0x20, 0x94, 0xba, 0x08, 0xe9, 0x9d, 0xaf, 0x37, 0xfa, 0xc3, 0xdc, 0xbf, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x3f, 0xfa, 0x47, 0x32, 0x33, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go
new file mode 100644
index 0000000..bba0311
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_topic_evidence_destination_mismatch_url_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy topic evidence destination mismatch url types.
+type PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_UNSPECIFIED PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_UNKNOWN PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 1
+	// The display url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_DISPLAY_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 2
+	// The final url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_FINAL_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 3
+	// The final mobile url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_FINAL_MOBILE_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 4
+	// The tracking url template, with substituted desktop url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_TRACKING_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 5
+	// The tracking url template, with substituted mobile url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_MOBILE_TRACKING_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 6
+)
+
+var PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISPLAY_URL",
+	3: "FINAL_URL",
+	4: "FINAL_MOBILE_URL",
+	5: "TRACKING_URL",
+	6: "MOBILE_TRACKING_URL",
+}
+
+var PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"DISPLAY_URL":         2,
+	"FINAL_URL":           3,
+	"FINAL_MOBILE_URL":    4,
+	"TRACKING_URL":        5,
+	"MOBILE_TRACKING_URL": 6,
+}
+
+func (x PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType) String() string {
+	return proto.EnumName(PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name, int32(x))
+}
+
+func (PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1fe4244cca06d810, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic evidence destination
+// mismatch url types.
+type PolicyTopicEvidenceDestinationMismatchUrlTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) Reset() {
+	*m = PolicyTopicEvidenceDestinationMismatchUrlTypeEnum{}
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) ProtoMessage() {}
+func (*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1fe4244cca06d810, []int{0}
+}
+
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Merge(m, src)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Size(m)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType", PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name, PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_value)
+	proto.RegisterType((*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum)(nil), "google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_topic_evidence_destination_mismatch_url_type.proto", fileDescriptor_1fe4244cca06d810)
+}
+
+var fileDescriptor_1fe4244cca06d810 = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0xc1, 0xaa, 0x9b, 0x40,
+	0x14, 0xad, 0xa6, 0x4d, 0xe9, 0xa4, 0xa5, 0x62, 0x0b, 0x85, 0xd2, 0x2c, 0x92, 0x7d, 0x47, 0x5a,
+	0x77, 0xd3, 0xd5, 0x98, 0x98, 0x20, 0x31, 0x46, 0x92, 0x98, 0xd0, 0x22, 0x88, 0xd5, 0xc1, 0x0e,
+	0xe8, 0x8c, 0x38, 0x26, 0x90, 0x2f, 0xe8, 0x7f, 0x74, 0xd9, 0x45, 0x3f, 0xa4, 0xdf, 0xf1, 0x56,
+	0xef, 0x2b, 0x1e, 0x8e, 0x26, 0x8f, 0xb7, 0x78, 0x0f, 0xb2, 0x91, 0x73, 0xef, 0xb9, 0xf7, 0x1c,
+	0xe7, 0x5c, 0xb0, 0xcf, 0x38, 0xcf, 0x72, 0x62, 0xc4, 0xa9, 0x30, 0x5a, 0xd8, 0xa0, 0xa3, 0x69,
+	0x10, 0x76, 0x28, 0x84, 0x51, 0xf2, 0x9c, 0x26, 0xa7, 0xa8, 0xe6, 0x25, 0x4d, 0x22, 0x72, 0xa4,
+	0x29, 0x61, 0x09, 0x89, 0x52, 0x22, 0x6a, 0xca, 0xe2, 0x9a, 0x72, 0x16, 0x15, 0x54, 0x14, 0x71,
+	0x9d, 0xfc, 0x8a, 0x0e, 0x55, 0x1e, 0xd5, 0xa7, 0x92, 0xc0, 0xb2, 0xe2, 0x35, 0xd7, 0x87, 0xad,
+	0x1a, 0x8c, 0x53, 0x01, 0x2f, 0xc2, 0xf0, 0x68, 0x42, 0x29, 0xfc, 0xf1, 0xd3, 0xd9, 0xb7, 0xa4,
+	0x46, 0xcc, 0x18, 0xaf, 0xa5, 0x9a, 0x68, 0x97, 0xc7, 0x37, 0x0a, 0xf8, 0xe2, 0x4b, 0xeb, 0x6d,
+	0xe3, 0x6c, 0x77, 0xc6, 0xd3, 0x7b, 0xdf, 0x65, 0x67, 0x1b, 0x54, 0xf9, 0xf6, 0x54, 0x12, 0x9b,
+	0x1d, 0x8a, 0xf1, 0x3f, 0x05, 0x7c, 0xbe, 0x6a, 0x4b, 0x7f, 0x0b, 0x06, 0x81, 0xb7, 0xf1, 0xed,
+	0x89, 0x33, 0x73, 0xec, 0xa9, 0xf6, 0x4c, 0x1f, 0x80, 0x97, 0x81, 0xb7, 0xf0, 0x56, 0x7b, 0x4f,
+	0x53, 0x1a, 0x76, 0xea, 0x6c, 0x7c, 0x17, 0x7f, 0x8f, 0x82, 0xb5, 0xab, 0xa9, 0xfa, 0x1b, 0xf0,
+	0x6a, 0xe6, 0x78, 0xd8, 0x95, 0x65, 0x4f, 0x7f, 0x0f, 0xb4, 0xb6, 0x5c, 0xae, 0x2c, 0xc7, 0xb5,
+	0x65, 0xf7, 0xb9, 0xae, 0x81, 0xd7, 0xdb, 0x35, 0x9e, 0x2c, 0x1c, 0x6f, 0x2e, 0x3b, 0x2f, 0xf4,
+	0x0f, 0xe0, 0x5d, 0x37, 0xf1, 0x80, 0xe8, 0x5b, 0xbf, 0x55, 0x30, 0x4a, 0x78, 0x01, 0x9f, 0x8c,
+	0xca, 0xfa, 0x7a, 0xd5, 0x9b, 0xfc, 0x26, 0x40, 0x5f, 0xf9, 0x61, 0x75, 0xa2, 0x19, 0xcf, 0x63,
+	0x96, 0x41, 0x5e, 0x65, 0x46, 0x46, 0x98, 0x8c, 0xf7, 0x7c, 0xe8, 0x92, 0x8a, 0x47, 0xee, 0xfe,
+	0x4d, 0x7e, 0xff, 0xa8, 0xbd, 0x39, 0xc6, 0x7f, 0xd5, 0xe1, 0xbc, 0x95, 0xc2, 0xa9, 0x80, 0x2d,
+	0x6c, 0xd0, 0xce, 0x84, 0x4d, 0xea, 0xe2, 0xff, 0x99, 0x0f, 0x71, 0x2a, 0xc2, 0x0b, 0x1f, 0xee,
+	0xcc, 0x50, 0xf2, 0xb7, 0xea, 0xa8, 0x6d, 0x22, 0x84, 0x53, 0x81, 0xd0, 0x65, 0x02, 0xa1, 0x9d,
+	0x89, 0x90, 0x9c, 0xf9, 0xd9, 0x97, 0x3f, 0x66, 0xde, 0x05, 0x00, 0x00, 0xff, 0xff, 0x73, 0xb6,
+	0x6d, 0xf9, 0x8f, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_device.pb.go b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_device.pb.go
new file mode 100644
index 0000000..5ce07fb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_device.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_device.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy topic evidence destination not working devices.
+type PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_UNSPECIFIED PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_UNKNOWN PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice = 1
+	// Landing page doesn't work on desktop device.
+	PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_DESKTOP PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice = 2
+	// Landing page doesn't work on Android device.
+	PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_ANDROID PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice = 3
+	// Landing page doesn't work on iOS device.
+	PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_IOS PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice = 4
+)
+
+var PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DESKTOP",
+	3: "ANDROID",
+	4: "IOS",
+}
+
+var PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DESKTOP":     2,
+	"ANDROID":     3,
+	"IOS":         4,
+}
+
+func (x PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice) String() string {
+	return proto.EnumName(PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice_name, int32(x))
+}
+
+func (PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d11a2a3922d7bdc6, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic evidence destination not
+// working devices.
+type PolicyTopicEvidenceDestinationNotWorkingDeviceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) Reset() {
+	*m = PolicyTopicEvidenceDestinationNotWorkingDeviceEnum{}
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) ProtoMessage() {}
+func (*PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d11a2a3922d7bdc6, []int{0}
+}
+
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum.Merge(m, src)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum.Size(m)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDeviceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDeviceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice", PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice_name, PolicyTopicEvidenceDestinationNotWorkingDeviceEnum_PolicyTopicEvidenceDestinationNotWorkingDevice_value)
+	proto.RegisterType((*PolicyTopicEvidenceDestinationNotWorkingDeviceEnum)(nil), "google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDeviceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_device.proto", fileDescriptor_d11a2a3922d7bdc6)
+}
+
+var fileDescriptor_d11a2a3922d7bdc6 = []byte{
+	// 352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0x4f, 0x6a, 0xeb, 0x30,
+	0x10, 0xc6, 0x5f, 0x9c, 0xc7, 0x0b, 0x38, 0x8b, 0x67, 0xbc, 0x2c, 0xcd, 0x22, 0x39, 0x80, 0x0c,
+	0xf5, 0x4e, 0x5d, 0x39, 0xb5, 0x1b, 0x4c, 0xc0, 0x36, 0xcd, 0xbf, 0x52, 0x0c, 0xc6, 0xb5, 0x84,
+	0x11, 0x4d, 0x34, 0x6e, 0xa4, 0xb8, 0xf4, 0x06, 0x3d, 0x47, 0x37, 0x85, 0x1e, 0xa5, 0x47, 0xe9,
+	0x29, 0x8a, 0xa4, 0x24, 0x5d, 0xb5, 0x90, 0x8d, 0xf9, 0xc6, 0x33, 0xf3, 0xfd, 0x46, 0x33, 0xf6,
+	0x6d, 0x0d, 0x50, 0xaf, 0xa9, 0x57, 0x12, 0xe1, 0x19, 0xa9, 0x54, 0xeb, 0x7b, 0x94, 0xef, 0x36,
+	0xc2, 0x6b, 0x60, 0xcd, 0xaa, 0xe7, 0x42, 0x42, 0xc3, 0xaa, 0x82, 0xb6, 0x8c, 0x50, 0x5e, 0xd1,
+	0x82, 0x50, 0x21, 0x19, 0x2f, 0x25, 0x03, 0x5e, 0x70, 0x90, 0xc5, 0x13, 0x6c, 0x1f, 0x18, 0xaf,
+	0x0b, 0x42, 0x5b, 0x56, 0x51, 0xd4, 0x6c, 0x41, 0x82, 0x3b, 0x30, 0x76, 0xa8, 0x24, 0x02, 0x1d,
+	0x9d, 0x51, 0xeb, 0x23, 0xed, 0x7c, 0x76, 0x7e, 0x00, 0x37, 0xcc, 0x2b, 0x39, 0x07, 0xa9, 0xed,
+	0x84, 0x69, 0x1e, 0xbd, 0x75, 0xec, 0x8b, 0x4c, 0xb3, 0xe7, 0x0a, 0x1d, 0xed, 0xc9, 0xe1, 0x37,
+	0x38, 0x01, 0xb9, 0x32, 0xd8, 0x50, 0x53, 0x23, 0xbe, 0xdb, 0x8c, 0x1e, 0x6d, 0x74, 0x5a, 0x97,
+	0xfb, 0xdf, 0xee, 0x2f, 0x92, 0x59, 0x16, 0x5d, 0xc5, 0xd7, 0x71, 0x14, 0x3a, 0x7f, 0xdc, 0xbe,
+	0xdd, 0x5b, 0x24, 0xd3, 0x24, 0x5d, 0x25, 0x4e, 0x47, 0x05, 0x61, 0x34, 0x9b, 0xce, 0xd3, 0xcc,
+	0xb1, 0x54, 0x10, 0x24, 0xe1, 0x4d, 0x1a, 0x87, 0x4e, 0xd7, 0xed, 0xd9, 0xdd, 0x38, 0x9d, 0x39,
+	0x7f, 0xc7, 0x2f, 0x96, 0x3d, 0xac, 0x60, 0x83, 0x7e, 0x7d, 0xed, 0xd8, 0x3f, 0x6d, 0xac, 0x4c,
+	0x2d, 0x21, 0xeb, 0xdc, 0x8d, 0xf7, 0xae, 0x35, 0xac, 0x4b, 0x5e, 0x23, 0xd8, 0xd6, 0x5e, 0x4d,
+	0xb9, 0x5e, 0xd1, 0xe1, 0x5a, 0x0d, 0x13, 0x3f, 0x1c, 0xef, 0x52, 0x7f, 0x5f, 0xad, 0xee, 0x24,
+	0x08, 0xde, 0xad, 0xc1, 0xc4, 0x58, 0x05, 0x44, 0x20, 0x23, 0x95, 0x5a, 0xfa, 0x48, 0x2d, 0x4e,
+	0x7c, 0x1c, 0xf2, 0x79, 0x40, 0x44, 0x7e, 0xcc, 0xe7, 0x4b, 0x3f, 0xd7, 0xf9, 0x4f, 0x6b, 0x68,
+	0x7e, 0x62, 0x1c, 0x10, 0x81, 0xf1, 0xb1, 0x02, 0xe3, 0xa5, 0x8f, 0xb1, 0xae, 0xb9, 0xff, 0xa7,
+	0x07, 0xf3, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x32, 0xfc, 0xac, 0x9f, 0x54, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_dns_error_type.pb.go b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_dns_error_type.pb.go
new file mode 100644
index 0000000..6a133fe
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_dns_error_type.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible policy topic evidence destination not working DNS error types.
+type PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_UNSPECIFIED PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_UNKNOWN PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType = 1
+	// Host name not found in DNS when fetching landing page.
+	PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_HOSTNAME_NOT_FOUND PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType = 2
+	// Google internal crawler issue when communicating with DNS. This error
+	// doesn't mean the landing page doesn't work. Google will recrawl the
+	// landing page.
+	PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_GOOGLE_CRAWLER_DNS_ISSUE PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType = 3
+)
+
+var PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HOSTNAME_NOT_FOUND",
+	3: "GOOGLE_CRAWLER_DNS_ISSUE",
+}
+
+var PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"HOSTNAME_NOT_FOUND":       2,
+	"GOOGLE_CRAWLER_DNS_ISSUE": 3,
+}
+
+func (x PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType) String() string {
+	return proto.EnumName(PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType_name, int32(x))
+}
+
+func (PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_773e4ae416a24f1f, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic evidence destination not
+// working DNS error types.
+type PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) Reset() {
+	*m = PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum{}
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) ProtoMessage() {}
+func (*PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_773e4ae416a24f1f, []int{0}
+}
+
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum.Merge(m, src)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum.Size(m)
+}
+func (m *PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType", PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType_name, PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum_PolicyTopicEvidenceDestinationNotWorkingDnsErrorType_value)
+	proto.RegisterType((*PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum)(nil), "google.ads.googleads.v3.enums.PolicyTopicEvidenceDestinationNotWorkingDnsErrorTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto", fileDescriptor_773e4ae416a24f1f)
+}
+
+var fileDescriptor_773e4ae416a24f1f = []byte{
+	// 388 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xc1, 0xaa, 0xd3, 0x40,
+	0x18, 0x85, 0x4d, 0x2e, 0x28, 0xcc, 0x5d, 0x18, 0xb2, 0x10, 0x91, 0x7b, 0x17, 0xb7, 0x0f, 0x30,
+	0x59, 0xc4, 0x85, 0x8e, 0xab, 0xb4, 0x99, 0xc6, 0x62, 0x9d, 0x84, 0x26, 0x69, 0x41, 0x02, 0x63,
+	0xcc, 0x0c, 0x61, 0xb0, 0x9d, 0x09, 0x99, 0x69, 0xa5, 0xaf, 0xe0, 0xc2, 0x87, 0x70, 0xe9, 0x8b,
+	0x08, 0x3e, 0x8a, 0x4f, 0x21, 0x99, 0xb4, 0x75, 0xa5, 0x8b, 0x6e, 0xc2, 0x21, 0xff, 0xfc, 0xe7,
+	0x7c, 0x9c, 0x1f, 0x7c, 0x6c, 0x95, 0x6a, 0xb7, 0x3c, 0xa8, 0x99, 0x0e, 0x46, 0x39, 0xa8, 0x43,
+	0x18, 0x70, 0xb9, 0xdf, 0xe9, 0xa0, 0x53, 0x5b, 0xd1, 0x1c, 0xa9, 0x51, 0x9d, 0x68, 0x28, 0x3f,
+	0x08, 0xc6, 0x65, 0xc3, 0x29, 0xe3, 0xda, 0x08, 0x59, 0x1b, 0xa1, 0x24, 0x95, 0xca, 0xd0, 0x2f,
+	0xaa, 0xff, 0x2c, 0x64, 0x4b, 0x99, 0xd4, 0x94, 0xf7, 0xbd, 0xea, 0xa9, 0x39, 0x76, 0x1c, 0x76,
+	0xbd, 0x32, 0xca, 0xbf, 0x1f, 0x6d, 0x61, 0xcd, 0x34, 0xbc, 0x24, 0xc0, 0x43, 0x08, 0x6d, 0xc2,
+	0x8b, 0xbb, 0x33, 0x40, 0x27, 0x82, 0x5a, 0x4a, 0x65, 0xac, 0xad, 0x1e, 0x97, 0x27, 0x3f, 0x1d,
+	0xf0, 0x2a, 0xb3, 0x0c, 0xc5, 0x80, 0x80, 0x4f, 0x04, 0xf1, 0x5f, 0x00, 0xa2, 0xcc, 0x66, 0x8c,
+	0x8f, 0xa5, 0xc6, 0x43, 0x78, 0x71, 0xec, 0x38, 0x96, 0xfb, 0xdd, 0xe4, 0xab, 0x03, 0x5e, 0x5e,
+	0xb3, 0xec, 0x3f, 0x05, 0xb7, 0x25, 0xc9, 0x33, 0x3c, 0x5b, 0xcc, 0x17, 0x38, 0xf6, 0x1e, 0xf9,
+	0xb7, 0xe0, 0x49, 0x49, 0xde, 0x91, 0x74, 0x43, 0x3c, 0xc7, 0x7f, 0x06, 0xfc, 0xb7, 0x69, 0x5e,
+	0x90, 0xe8, 0x3d, 0xa6, 0x24, 0x2d, 0xe8, 0x3c, 0x2d, 0x49, 0xec, 0xb9, 0xfe, 0x1d, 0x78, 0x9e,
+	0xa4, 0x69, 0xb2, 0xc4, 0x74, 0xb6, 0x8a, 0x36, 0x4b, 0xbc, 0xa2, 0x31, 0xc9, 0xe9, 0x22, 0xcf,
+	0x4b, 0xec, 0xdd, 0x4c, 0xbf, 0xb9, 0xe0, 0xa1, 0x51, 0x3b, 0xf8, 0xdf, 0x36, 0xa6, 0xaf, 0xaf,
+	0xe1, 0xcd, 0x86, 0xaa, 0x32, 0xe7, 0xc3, 0xf4, 0xe4, 0xdd, 0xaa, 0x6d, 0x2d, 0x5b, 0xa8, 0xfa,
+	0x36, 0x68, 0xb9, 0xb4, 0x45, 0x9e, 0x6f, 0xdb, 0x09, 0xfd, 0x8f, 0x53, 0xbf, 0xb1, 0xdf, 0xef,
+	0xee, 0x4d, 0x12, 0x45, 0x3f, 0xdc, 0xfb, 0x64, 0xb4, 0x8a, 0x98, 0x86, 0xa3, 0x1c, 0xd4, 0x3a,
+	0x84, 0x43, 0xb1, 0xfa, 0xd7, 0x79, 0x5e, 0x45, 0x4c, 0x57, 0x97, 0x79, 0xb5, 0x0e, 0x2b, 0x3b,
+	0xff, 0xed, 0x3e, 0x8c, 0x3f, 0x11, 0x8a, 0x98, 0x46, 0xe8, 0xf2, 0x02, 0xa1, 0x75, 0x88, 0x90,
+	0x7d, 0xf3, 0xe9, 0xb1, 0x05, 0x0b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x16, 0x63, 0x89,
+	0x82, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/positive_geo_target_type.pb.go b/googleapis/ads/googleads/v3/enums/positive_geo_target_type.pb.go
new file mode 100644
index 0000000..c735250
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/positive_geo_target_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/positive_geo_target_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible positive geo target types.
+type PositiveGeoTargetTypeEnum_PositiveGeoTargetType int32
+
+const (
+	// Not specified.
+	PositiveGeoTargetTypeEnum_UNSPECIFIED PositiveGeoTargetTypeEnum_PositiveGeoTargetType = 0
+	// The value is unknown in this version.
+	PositiveGeoTargetTypeEnum_UNKNOWN PositiveGeoTargetTypeEnum_PositiveGeoTargetType = 1
+	// Specifies that an ad is triggered if the user is in,
+	// or shows interest in, advertiser's targeted locations.
+	PositiveGeoTargetTypeEnum_PRESENCE_OR_INTEREST PositiveGeoTargetTypeEnum_PositiveGeoTargetType = 5
+	// Specifies that an ad is triggered if the user
+	// searches for advertiser's targeted locations.
+	PositiveGeoTargetTypeEnum_SEARCH_INTEREST PositiveGeoTargetTypeEnum_PositiveGeoTargetType = 6
+	// Specifies that an ad is triggered if the user is in
+	// or regularly in advertiser's targeted locations.
+	PositiveGeoTargetTypeEnum_PRESENCE PositiveGeoTargetTypeEnum_PositiveGeoTargetType = 7
+)
+
+var PositiveGeoTargetTypeEnum_PositiveGeoTargetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	5: "PRESENCE_OR_INTEREST",
+	6: "SEARCH_INTEREST",
+	7: "PRESENCE",
+}
+
+var PositiveGeoTargetTypeEnum_PositiveGeoTargetType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"PRESENCE_OR_INTEREST": 5,
+	"SEARCH_INTEREST":      6,
+	"PRESENCE":             7,
+}
+
+func (x PositiveGeoTargetTypeEnum_PositiveGeoTargetType) String() string {
+	return proto.EnumName(PositiveGeoTargetTypeEnum_PositiveGeoTargetType_name, int32(x))
+}
+
+func (PositiveGeoTargetTypeEnum_PositiveGeoTargetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_74e8d47d77af9abc, []int{0, 0}
+}
+
+// Container for enum describing possible positive geo target types.
+type PositiveGeoTargetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PositiveGeoTargetTypeEnum) Reset()         { *m = PositiveGeoTargetTypeEnum{} }
+func (m *PositiveGeoTargetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PositiveGeoTargetTypeEnum) ProtoMessage()    {}
+func (*PositiveGeoTargetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_74e8d47d77af9abc, []int{0}
+}
+
+func (m *PositiveGeoTargetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PositiveGeoTargetTypeEnum.Unmarshal(m, b)
+}
+func (m *PositiveGeoTargetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PositiveGeoTargetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PositiveGeoTargetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PositiveGeoTargetTypeEnum.Merge(m, src)
+}
+func (m *PositiveGeoTargetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PositiveGeoTargetTypeEnum.Size(m)
+}
+func (m *PositiveGeoTargetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PositiveGeoTargetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PositiveGeoTargetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PositiveGeoTargetTypeEnum_PositiveGeoTargetType", PositiveGeoTargetTypeEnum_PositiveGeoTargetType_name, PositiveGeoTargetTypeEnum_PositiveGeoTargetType_value)
+	proto.RegisterType((*PositiveGeoTargetTypeEnum)(nil), "google.ads.googleads.v3.enums.PositiveGeoTargetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/positive_geo_target_type.proto", fileDescriptor_74e8d47d77af9abc)
+}
+
+var fileDescriptor_74e8d47d77af9abc = []byte{
+	// 337 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdf, 0x4a, 0xf3, 0x30,
+	0x1c, 0xfd, 0xba, 0x0f, 0x37, 0xc9, 0x84, 0x95, 0xaa, 0xa0, 0xc3, 0x5d, 0x6c, 0x0f, 0x90, 0x5e,
+	0xf4, 0x2e, 0x7a, 0xd3, 0xcd, 0x38, 0x87, 0xd0, 0x95, 0xb6, 0x9b, 0x20, 0x85, 0x52, 0x6d, 0x08,
+	0x85, 0x2d, 0x29, 0x4d, 0x36, 0xd8, 0x53, 0xf8, 0x0e, 0x5e, 0xfa, 0x28, 0x3e, 0x8a, 0x37, 0xbe,
+	0x82, 0x34, 0x59, 0xeb, 0xcd, 0xf4, 0x26, 0x1c, 0x72, 0xfe, 0xf0, 0x3b, 0x07, 0xdc, 0x50, 0xce,
+	0xe9, 0x8a, 0xd8, 0x69, 0x26, 0x6c, 0x0d, 0x2b, 0xb4, 0x75, 0x6c, 0xc2, 0x36, 0x6b, 0x61, 0x17,
+	0x5c, 0xe4, 0x32, 0xdf, 0x92, 0x84, 0x12, 0x9e, 0xc8, 0xb4, 0xa4, 0x44, 0x26, 0x72, 0x57, 0x10,
+	0x58, 0x94, 0x5c, 0x72, 0x6b, 0xa0, 0x2d, 0x30, 0xcd, 0x04, 0x6c, 0xdc, 0x70, 0xeb, 0x40, 0xe5,
+	0xee, 0x5f, 0xd5, 0xe1, 0x45, 0x6e, 0xa7, 0x8c, 0x71, 0x99, 0xca, 0x9c, 0x33, 0xa1, 0xcd, 0xa3,
+	0x57, 0x03, 0x5c, 0xfa, 0xfb, 0xfc, 0x29, 0xe1, 0x91, 0x4a, 0x8f, 0x76, 0x05, 0xc1, 0x6c, 0xb3,
+	0x1e, 0x95, 0xe0, 0xfc, 0x20, 0x69, 0xf5, 0x40, 0x77, 0xe1, 0x85, 0x3e, 0x9e, 0xcc, 0xee, 0x66,
+	0xf8, 0xd6, 0xfc, 0x67, 0x75, 0x41, 0x67, 0xe1, 0x3d, 0x78, 0xf3, 0x47, 0xcf, 0x34, 0xac, 0x0b,
+	0x70, 0xe6, 0x07, 0x38, 0xc4, 0xde, 0x04, 0x27, 0xf3, 0x20, 0x99, 0x79, 0x11, 0x0e, 0x70, 0x18,
+	0x99, 0x47, 0xd6, 0x29, 0xe8, 0x85, 0xd8, 0x0d, 0x26, 0xf7, 0x3f, 0x9f, 0x6d, 0xeb, 0x04, 0x1c,
+	0xd7, 0x72, 0xb3, 0x33, 0xfe, 0x32, 0xc0, 0xf0, 0x85, 0xaf, 0xe1, 0x9f, 0xad, 0xc6, 0xfd, 0x83,
+	0x77, 0xf9, 0x55, 0x27, 0xdf, 0x78, 0x1a, 0xef, 0xcd, 0x94, 0xaf, 0x52, 0x46, 0x21, 0x2f, 0xa9,
+	0x4d, 0x09, 0x53, 0x8d, 0xeb, 0x81, 0x8b, 0x5c, 0xfc, 0xb2, 0xf7, 0xb5, 0x7a, 0xdf, 0x5a, 0xff,
+	0xa7, 0xae, 0xfb, 0xde, 0x1a, 0x4c, 0x75, 0x94, 0x9b, 0x09, 0xa8, 0x61, 0x85, 0x96, 0x0e, 0xac,
+	0x06, 0x12, 0x1f, 0x35, 0x1f, 0xbb, 0x99, 0x88, 0x1b, 0x3e, 0x5e, 0x3a, 0xb1, 0xe2, 0x3f, 0x5b,
+	0x43, 0xfd, 0x89, 0x90, 0x9b, 0x09, 0x84, 0x1a, 0x05, 0x42, 0x4b, 0x07, 0x21, 0xa5, 0x79, 0x6e,
+	0xab, 0xc3, 0x9c, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x03, 0xaa, 0xe5, 0x07, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/preferred_content_type.pb.go b/googleapis/ads/googleads/v3/enums/preferred_content_type.pb.go
new file mode 100644
index 0000000..0f7d210
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/preferred_content_type.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/preferred_content_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates preferred content criterion type.
+type PreferredContentTypeEnum_PreferredContentType int32
+
+const (
+	// Not specified.
+	PreferredContentTypeEnum_UNSPECIFIED PreferredContentTypeEnum_PreferredContentType = 0
+	// The value is unknown in this version.
+	PreferredContentTypeEnum_UNKNOWN PreferredContentTypeEnum_PreferredContentType = 1
+	// Represents top content on YouTube.
+	PreferredContentTypeEnum_YOUTUBE_TOP_CONTENT PreferredContentTypeEnum_PreferredContentType = 400
+)
+
+var PreferredContentTypeEnum_PreferredContentType_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	400: "YOUTUBE_TOP_CONTENT",
+}
+
+var PreferredContentTypeEnum_PreferredContentType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"YOUTUBE_TOP_CONTENT": 400,
+}
+
+func (x PreferredContentTypeEnum_PreferredContentType) String() string {
+	return proto.EnumName(PreferredContentTypeEnum_PreferredContentType_name, int32(x))
+}
+
+func (PreferredContentTypeEnum_PreferredContentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9fb83cbeec849d46, []int{0, 0}
+}
+
+// Container for enumeration of preferred content criterion type.
+type PreferredContentTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PreferredContentTypeEnum) Reset()         { *m = PreferredContentTypeEnum{} }
+func (m *PreferredContentTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PreferredContentTypeEnum) ProtoMessage()    {}
+func (*PreferredContentTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9fb83cbeec849d46, []int{0}
+}
+
+func (m *PreferredContentTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PreferredContentTypeEnum.Unmarshal(m, b)
+}
+func (m *PreferredContentTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PreferredContentTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PreferredContentTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PreferredContentTypeEnum.Merge(m, src)
+}
+func (m *PreferredContentTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PreferredContentTypeEnum.Size(m)
+}
+func (m *PreferredContentTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PreferredContentTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PreferredContentTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PreferredContentTypeEnum_PreferredContentType", PreferredContentTypeEnum_PreferredContentType_name, PreferredContentTypeEnum_PreferredContentType_value)
+	proto.RegisterType((*PreferredContentTypeEnum)(nil), "google.ads.googleads.v3.enums.PreferredContentTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/preferred_content_type.proto", fileDescriptor_9fb83cbeec849d46)
+}
+
+var fileDescriptor_9fb83cbeec849d46 = []byte{
+	// 314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xdd, 0x06, 0x0a, 0xd9, 0xc1, 0x51, 0x3d, 0x4c, 0x71, 0x87, 0xed, 0x01, 0xd2, 0x43,
+	0x6e, 0xf1, 0xd4, 0xce, 0x3a, 0x86, 0x90, 0x16, 0x6c, 0x27, 0x4a, 0xa1, 0xd4, 0x25, 0x86, 0xc9,
+	0x96, 0x84, 0x26, 0x1b, 0xec, 0x2d, 0x7c, 0x06, 0x8f, 0x3e, 0x8a, 0x8f, 0xe2, 0xc1, 0x67, 0x90,
+	0x26, 0xb6, 0xa7, 0xe9, 0xa5, 0x7c, 0xf4, 0xfb, 0xff, 0xbe, 0x7c, 0xff, 0x3f, 0xc0, 0x5c, 0x4a,
+	0xbe, 0x66, 0x7e, 0x49, 0xb5, 0xef, 0x64, 0xad, 0x76, 0xc8, 0x67, 0x62, 0xbb, 0xd1, 0xbe, 0xaa,
+	0xd8, 0x0b, 0xab, 0x2a, 0x46, 0x8b, 0xa5, 0x14, 0x86, 0x09, 0x53, 0x98, 0xbd, 0x62, 0x50, 0x55,
+	0xd2, 0x48, 0x6f, 0xe4, 0x00, 0x58, 0x52, 0x0d, 0x5b, 0x16, 0xee, 0x10, 0xb4, 0xec, 0xe5, 0x55,
+	0x13, 0xad, 0x56, 0x7e, 0x29, 0x84, 0x34, 0xa5, 0x59, 0x49, 0xa1, 0x1d, 0x3c, 0x79, 0x05, 0xc3,
+	0xa4, 0x09, 0x9f, 0xba, 0xec, 0x74, 0xaf, 0x58, 0x24, 0xb6, 0x9b, 0x09, 0x01, 0xe7, 0x87, 0x3c,
+	0xef, 0x14, 0xf4, 0x33, 0x72, 0x9f, 0x44, 0xd3, 0xf9, 0xed, 0x3c, 0xba, 0x19, 0x1c, 0x79, 0x7d,
+	0x70, 0x92, 0x91, 0x3b, 0x12, 0x3f, 0x90, 0x41, 0xc7, 0x1b, 0x82, 0xb3, 0xc7, 0x38, 0x4b, 0xb3,
+	0x30, 0x2a, 0xd2, 0x38, 0x29, 0xa6, 0x31, 0x49, 0x23, 0x92, 0x0e, 0xde, 0x7a, 0xe1, 0x77, 0x07,
+	0x8c, 0x97, 0x72, 0x03, 0xff, 0xed, 0x1b, 0x5e, 0x1c, 0x7a, 0x33, 0xa9, 0xcb, 0x26, 0x9d, 0xa7,
+	0xf0, 0x97, 0xe5, 0x72, 0x5d, 0x0a, 0x0e, 0x65, 0xc5, 0x7d, 0xce, 0x84, 0x5d, 0xa5, 0xb9, 0x9b,
+	0x5a, 0xe9, 0x3f, 0xce, 0x78, 0x6d, 0xbf, 0xef, 0xdd, 0xde, 0x2c, 0x08, 0x3e, 0xba, 0xa3, 0x99,
+	0x8b, 0x0a, 0xa8, 0x86, 0x4e, 0xd6, 0x6a, 0x81, 0x60, 0xbd, 0xbb, 0xfe, 0x6c, 0xfc, 0x3c, 0xa0,
+	0x3a, 0x6f, 0xfd, 0x7c, 0x81, 0x72, 0xeb, 0x7f, 0x75, 0xc7, 0xee, 0x27, 0xc6, 0x01, 0xd5, 0x18,
+	0xb7, 0x13, 0x18, 0x2f, 0x10, 0xc6, 0x76, 0xe6, 0xf9, 0xd8, 0x16, 0x43, 0x3f, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0x20, 0x35, 0x49, 0x46, 0xde, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/price_extension_price_qualifier.pb.go b/googleapis/ads/googleads/v3/enums/price_extension_price_qualifier.pb.go
new file mode 100644
index 0000000..aa25fca
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/price_extension_price_qualifier.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/price_extension_price_qualifier.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enums of price extension price qualifier.
+type PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier int32
+
+const (
+	// Not specified.
+	PriceExtensionPriceQualifierEnum_UNSPECIFIED PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier = 0
+	// Used for return value only. Represents value unknown in this version.
+	PriceExtensionPriceQualifierEnum_UNKNOWN PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier = 1
+	// 'From' qualifier for the price.
+	PriceExtensionPriceQualifierEnum_FROM PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier = 2
+	// 'Up to' qualifier for the price.
+	PriceExtensionPriceQualifierEnum_UP_TO PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier = 3
+	// 'Average' qualifier for the price.
+	PriceExtensionPriceQualifierEnum_AVERAGE PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier = 4
+)
+
+var PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FROM",
+	3: "UP_TO",
+	4: "AVERAGE",
+}
+
+var PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FROM":        2,
+	"UP_TO":       3,
+	"AVERAGE":     4,
+}
+
+func (x PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier) String() string {
+	return proto.EnumName(PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier_name, int32(x))
+}
+
+func (PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa4a6b7a443225c4, []int{0, 0}
+}
+
+// Container for enum describing a price extension price qualifier.
+type PriceExtensionPriceQualifierEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PriceExtensionPriceQualifierEnum) Reset()         { *m = PriceExtensionPriceQualifierEnum{} }
+func (m *PriceExtensionPriceQualifierEnum) String() string { return proto.CompactTextString(m) }
+func (*PriceExtensionPriceQualifierEnum) ProtoMessage()    {}
+func (*PriceExtensionPriceQualifierEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa4a6b7a443225c4, []int{0}
+}
+
+func (m *PriceExtensionPriceQualifierEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PriceExtensionPriceQualifierEnum.Unmarshal(m, b)
+}
+func (m *PriceExtensionPriceQualifierEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PriceExtensionPriceQualifierEnum.Marshal(b, m, deterministic)
+}
+func (m *PriceExtensionPriceQualifierEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PriceExtensionPriceQualifierEnum.Merge(m, src)
+}
+func (m *PriceExtensionPriceQualifierEnum) XXX_Size() int {
+	return xxx_messageInfo_PriceExtensionPriceQualifierEnum.Size(m)
+}
+func (m *PriceExtensionPriceQualifierEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PriceExtensionPriceQualifierEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PriceExtensionPriceQualifierEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier", PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier_name, PriceExtensionPriceQualifierEnum_PriceExtensionPriceQualifier_value)
+	proto.RegisterType((*PriceExtensionPriceQualifierEnum)(nil), "google.ads.googleads.v3.enums.PriceExtensionPriceQualifierEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/price_extension_price_qualifier.proto", fileDescriptor_fa4a6b7a443225c4)
+}
+
+var fileDescriptor_fa4a6b7a443225c4 = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xbb, 0x4e, 0xc3, 0x30,
+	0x14, 0x25, 0x69, 0x79, 0xb9, 0x03, 0x51, 0x46, 0xd4, 0x4a, 0xb4, 0x1f, 0xe0, 0x0c, 0xd9, 0xcc,
+	0xe4, 0x96, 0xb4, 0xaa, 0x10, 0x69, 0x28, 0x34, 0x48, 0x28, 0xa2, 0x32, 0x8d, 0xb1, 0x2c, 0xb5,
+	0x76, 0x88, 0xd3, 0x8a, 0x99, 0x4f, 0x61, 0xe4, 0x53, 0xf8, 0x14, 0x3e, 0x80, 0x19, 0xd9, 0x26,
+	0xdd, 0xc8, 0x62, 0x9d, 0xeb, 0x7b, 0xee, 0xb9, 0xf7, 0x1c, 0x30, 0x62, 0x52, 0xb2, 0x35, 0x0d,
+	0x48, 0xae, 0x02, 0x0b, 0x35, 0xda, 0x85, 0x01, 0x15, 0xdb, 0x8d, 0x0a, 0x8a, 0x92, 0xaf, 0xe8,
+	0x92, 0xbe, 0x55, 0x54, 0x28, 0x2e, 0xc5, 0xd2, 0xd6, 0xaf, 0x5b, 0xb2, 0xe6, 0x2f, 0x9c, 0x96,
+	0xb0, 0x28, 0x65, 0x25, 0xfd, 0x9e, 0x9d, 0x84, 0x24, 0x57, 0x70, 0x2f, 0x02, 0x77, 0x21, 0x34,
+	0x22, 0xe7, 0xdd, 0x7a, 0x47, 0xc1, 0x03, 0x22, 0x84, 0xac, 0x48, 0xc5, 0xa5, 0x50, 0x76, 0x78,
+	0xf0, 0xee, 0x80, 0x8b, 0x44, 0xcb, 0x46, 0xf5, 0x16, 0x53, 0xdd, 0xd6, 0x3b, 0x22, 0xb1, 0xdd,
+	0x0c, 0x9e, 0x40, 0xb7, 0x89, 0xe3, 0x9f, 0x81, 0xce, 0x22, 0xbe, 0x4b, 0xa2, 0xd1, 0x74, 0x3c,
+	0x8d, 0xae, 0xbc, 0x03, 0xbf, 0x03, 0x8e, 0x17, 0xf1, 0x75, 0x3c, 0x7b, 0x88, 0x3d, 0xc7, 0x3f,
+	0x01, 0xed, 0xf1, 0x7c, 0x76, 0xe3, 0xb9, 0xfe, 0x29, 0x38, 0x5c, 0x24, 0xcb, 0xfb, 0x99, 0xd7,
+	0xd2, 0x0c, 0x9c, 0x46, 0x73, 0x3c, 0x89, 0xbc, 0xf6, 0xf0, 0xc7, 0x01, 0xfd, 0x95, 0xdc, 0xc0,
+	0x46, 0x23, 0xc3, 0x7e, 0xd3, 0x0d, 0x89, 0x76, 0x93, 0x38, 0x8f, 0xc3, 0x3f, 0x0d, 0x26, 0xd7,
+	0x44, 0x30, 0x28, 0x4b, 0x16, 0x30, 0x2a, 0x8c, 0xd7, 0x3a, 0xe1, 0x82, 0xab, 0x7f, 0x02, 0xbf,
+	0x34, 0xef, 0x87, 0xdb, 0x9a, 0x60, 0xfc, 0xe9, 0xf6, 0x26, 0x56, 0x0a, 0xe7, 0x0a, 0x5a, 0xa8,
+	0x51, 0x1a, 0x42, 0x9d, 0x89, 0xfa, 0xaa, 0xfb, 0x19, 0xce, 0x55, 0xb6, 0xef, 0x67, 0x69, 0x98,
+	0x99, 0xfe, 0xb7, 0xdb, 0xb7, 0x9f, 0x08, 0xe1, 0x5c, 0x21, 0xb4, 0x67, 0x20, 0x94, 0x86, 0x08,
+	0x19, 0xce, 0xf3, 0x91, 0x39, 0x2c, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x8d, 0x8d, 0xaf,
+	0x08, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/price_extension_price_unit.pb.go b/googleapis/ads/googleads/v3/enums/price_extension_price_unit.pb.go
new file mode 100644
index 0000000..d055e83
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/price_extension_price_unit.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/price_extension_price_unit.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Price extension price unit.
+type PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit int32
+
+const (
+	// Not specified.
+	PriceExtensionPriceUnitEnum_UNSPECIFIED PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 0
+	// Used for return value only. Represents value unknown in this version.
+	PriceExtensionPriceUnitEnum_UNKNOWN PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 1
+	// Per hour.
+	PriceExtensionPriceUnitEnum_PER_HOUR PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 2
+	// Per day.
+	PriceExtensionPriceUnitEnum_PER_DAY PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 3
+	// Per week.
+	PriceExtensionPriceUnitEnum_PER_WEEK PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 4
+	// Per month.
+	PriceExtensionPriceUnitEnum_PER_MONTH PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 5
+	// Per year.
+	PriceExtensionPriceUnitEnum_PER_YEAR PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 6
+	// Per night.
+	PriceExtensionPriceUnitEnum_PER_NIGHT PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit = 7
+)
+
+var PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PER_HOUR",
+	3: "PER_DAY",
+	4: "PER_WEEK",
+	5: "PER_MONTH",
+	6: "PER_YEAR",
+	7: "PER_NIGHT",
+}
+
+var PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PER_HOUR":    2,
+	"PER_DAY":     3,
+	"PER_WEEK":    4,
+	"PER_MONTH":   5,
+	"PER_YEAR":    6,
+	"PER_NIGHT":   7,
+}
+
+func (x PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit) String() string {
+	return proto.EnumName(PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit_name, int32(x))
+}
+
+func (PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_f56842b8a7c3806b, []int{0, 0}
+}
+
+// Container for enum describing price extension price unit.
+type PriceExtensionPriceUnitEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PriceExtensionPriceUnitEnum) Reset()         { *m = PriceExtensionPriceUnitEnum{} }
+func (m *PriceExtensionPriceUnitEnum) String() string { return proto.CompactTextString(m) }
+func (*PriceExtensionPriceUnitEnum) ProtoMessage()    {}
+func (*PriceExtensionPriceUnitEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f56842b8a7c3806b, []int{0}
+}
+
+func (m *PriceExtensionPriceUnitEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PriceExtensionPriceUnitEnum.Unmarshal(m, b)
+}
+func (m *PriceExtensionPriceUnitEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PriceExtensionPriceUnitEnum.Marshal(b, m, deterministic)
+}
+func (m *PriceExtensionPriceUnitEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PriceExtensionPriceUnitEnum.Merge(m, src)
+}
+func (m *PriceExtensionPriceUnitEnum) XXX_Size() int {
+	return xxx_messageInfo_PriceExtensionPriceUnitEnum.Size(m)
+}
+func (m *PriceExtensionPriceUnitEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PriceExtensionPriceUnitEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PriceExtensionPriceUnitEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit", PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit_name, PriceExtensionPriceUnitEnum_PriceExtensionPriceUnit_value)
+	proto.RegisterType((*PriceExtensionPriceUnitEnum)(nil), "google.ads.googleads.v3.enums.PriceExtensionPriceUnitEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/price_extension_price_unit.proto", fileDescriptor_f56842b8a7c3806b)
+}
+
+var fileDescriptor_f56842b8a7c3806b = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4e, 0xc2, 0x30,
+	0x18, 0xc7, 0xdd, 0x50, 0xd0, 0xa2, 0xb1, 0xd9, 0xc5, 0x44, 0xe1, 0x00, 0x0f, 0xd0, 0x1d, 0x76,
+	0xab, 0x89, 0xc9, 0x90, 0x0a, 0x84, 0x38, 0x16, 0x64, 0x10, 0xcc, 0x12, 0x32, 0xd9, 0xb2, 0x34,
+	0x81, 0x76, 0xa1, 0x83, 0xf8, 0x10, 0x3e, 0x85, 0x47, 0xe3, 0x93, 0xf8, 0x28, 0xde, 0x7c, 0x03,
+	0xd3, 0xd6, 0x72, 0xc3, 0xcb, 0xf2, 0xff, 0xef, 0xd7, 0xff, 0xd7, 0x7e, 0xdf, 0x07, 0xee, 0x72,
+	0xce, 0xf3, 0x55, 0xe6, 0x26, 0xa9, 0x70, 0xb5, 0x94, 0x6a, 0xe7, 0xb9, 0x19, 0xdb, 0xae, 0x85,
+	0x5b, 0x6c, 0xe8, 0x32, 0x5b, 0x64, 0xaf, 0x65, 0xc6, 0x04, 0xe5, 0x6c, 0xa1, 0xfd, 0x96, 0xd1,
+	0x12, 0x15, 0x1b, 0x5e, 0x72, 0xa7, 0xa9, 0x43, 0x28, 0x49, 0x05, 0xda, 0xe7, 0xd1, 0xce, 0x43,
+	0x2a, 0x7f, 0xdd, 0x30, 0xe5, 0x0b, 0xea, 0x26, 0x8c, 0xf1, 0x32, 0x29, 0x29, 0x67, 0x42, 0x87,
+	0xdb, 0x9f, 0x16, 0xb8, 0x09, 0x65, 0x45, 0x62, 0x2e, 0x50, 0x2e, 0x62, 0xb4, 0x24, 0x6c, 0xbb,
+	0x6e, 0xbf, 0x59, 0xe0, 0xea, 0x00, 0x77, 0x2e, 0x41, 0x3d, 0x0a, 0x9e, 0x42, 0x72, 0x3f, 0x78,
+	0x18, 0x90, 0x2e, 0x3c, 0x72, 0xea, 0xa0, 0x16, 0x05, 0xc3, 0x60, 0x34, 0x0b, 0xa0, 0xe5, 0x9c,
+	0x83, 0xd3, 0x90, 0x8c, 0x17, 0xfd, 0x51, 0x34, 0x86, 0xb6, 0x44, 0xd2, 0x75, 0xfd, 0x39, 0xac,
+	0x18, 0x34, 0x23, 0x64, 0x08, 0x8f, 0x9d, 0x0b, 0x70, 0x26, 0xdd, 0xe3, 0x28, 0x98, 0xf4, 0xe1,
+	0x89, 0x81, 0x73, 0xe2, 0x8f, 0x61, 0xd5, 0xc0, 0x60, 0xd0, 0xeb, 0x4f, 0x60, 0xad, 0xf3, 0x63,
+	0x81, 0xd6, 0x92, 0xaf, 0xd1, 0xbf, 0x2d, 0x77, 0x1a, 0x07, 0x5e, 0x1c, 0xca, 0x96, 0x43, 0xeb,
+	0xb9, 0xf3, 0x17, 0xcf, 0xf9, 0x2a, 0x61, 0x39, 0xe2, 0x9b, 0xdc, 0xcd, 0x33, 0xa6, 0x06, 0x62,
+	0x36, 0x50, 0x50, 0x71, 0x60, 0x21, 0xb7, 0xea, 0xfb, 0x6e, 0x57, 0x7a, 0xbe, 0xff, 0x61, 0x37,
+	0x7b, 0xba, 0x94, 0x9f, 0x0a, 0xa4, 0xa5, 0x54, 0x53, 0x0f, 0xc9, 0xe9, 0x89, 0x2f, 0xc3, 0x63,
+	0x3f, 0x15, 0xf1, 0x9e, 0xc7, 0x53, 0x2f, 0x56, 0xfc, 0xdb, 0x6e, 0xe9, 0x9f, 0x18, 0xfb, 0xa9,
+	0xc0, 0x78, 0x7f, 0x02, 0xe3, 0xa9, 0x87, 0xb1, 0x3a, 0xf3, 0x52, 0x55, 0x0f, 0xf3, 0x7e, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0x0f, 0x0d, 0x55, 0xd7, 0x28, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/price_extension_type.pb.go b/googleapis/ads/googleads/v3/enums/price_extension_type.pb.go
new file mode 100644
index 0000000..52e2ee2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/price_extension_type.pb.go
@@ -0,0 +1,157 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/price_extension_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Price extension type.
+type PriceExtensionTypeEnum_PriceExtensionType int32
+
+const (
+	// Not specified.
+	PriceExtensionTypeEnum_UNSPECIFIED PriceExtensionTypeEnum_PriceExtensionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	PriceExtensionTypeEnum_UNKNOWN PriceExtensionTypeEnum_PriceExtensionType = 1
+	// The type for showing a list of brands.
+	PriceExtensionTypeEnum_BRANDS PriceExtensionTypeEnum_PriceExtensionType = 2
+	// The type for showing a list of events.
+	PriceExtensionTypeEnum_EVENTS PriceExtensionTypeEnum_PriceExtensionType = 3
+	// The type for showing locations relevant to your business.
+	PriceExtensionTypeEnum_LOCATIONS PriceExtensionTypeEnum_PriceExtensionType = 4
+	// The type for showing sub-regions or districts within a city or region.
+	PriceExtensionTypeEnum_NEIGHBORHOODS PriceExtensionTypeEnum_PriceExtensionType = 5
+	// The type for showing a collection of product categories.
+	PriceExtensionTypeEnum_PRODUCT_CATEGORIES PriceExtensionTypeEnum_PriceExtensionType = 6
+	// The type for showing a collection of related product tiers.
+	PriceExtensionTypeEnum_PRODUCT_TIERS PriceExtensionTypeEnum_PriceExtensionType = 7
+	// The type for showing a collection of services offered by your business.
+	PriceExtensionTypeEnum_SERVICES PriceExtensionTypeEnum_PriceExtensionType = 8
+	// The type for showing a collection of service categories.
+	PriceExtensionTypeEnum_SERVICE_CATEGORIES PriceExtensionTypeEnum_PriceExtensionType = 9
+	// The type for showing a collection of related service tiers.
+	PriceExtensionTypeEnum_SERVICE_TIERS PriceExtensionTypeEnum_PriceExtensionType = 10
+)
+
+var PriceExtensionTypeEnum_PriceExtensionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BRANDS",
+	3:  "EVENTS",
+	4:  "LOCATIONS",
+	5:  "NEIGHBORHOODS",
+	6:  "PRODUCT_CATEGORIES",
+	7:  "PRODUCT_TIERS",
+	8:  "SERVICES",
+	9:  "SERVICE_CATEGORIES",
+	10: "SERVICE_TIERS",
+}
+
+var PriceExtensionTypeEnum_PriceExtensionType_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"BRANDS":             2,
+	"EVENTS":             3,
+	"LOCATIONS":          4,
+	"NEIGHBORHOODS":      5,
+	"PRODUCT_CATEGORIES": 6,
+	"PRODUCT_TIERS":      7,
+	"SERVICES":           8,
+	"SERVICE_CATEGORIES": 9,
+	"SERVICE_TIERS":      10,
+}
+
+func (x PriceExtensionTypeEnum_PriceExtensionType) String() string {
+	return proto.EnumName(PriceExtensionTypeEnum_PriceExtensionType_name, int32(x))
+}
+
+func (PriceExtensionTypeEnum_PriceExtensionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d28cbae1bf68a407, []int{0, 0}
+}
+
+// Container for enum describing types for a price extension.
+type PriceExtensionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PriceExtensionTypeEnum) Reset()         { *m = PriceExtensionTypeEnum{} }
+func (m *PriceExtensionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PriceExtensionTypeEnum) ProtoMessage()    {}
+func (*PriceExtensionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d28cbae1bf68a407, []int{0}
+}
+
+func (m *PriceExtensionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PriceExtensionTypeEnum.Unmarshal(m, b)
+}
+func (m *PriceExtensionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PriceExtensionTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *PriceExtensionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PriceExtensionTypeEnum.Merge(m, src)
+}
+func (m *PriceExtensionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PriceExtensionTypeEnum.Size(m)
+}
+func (m *PriceExtensionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PriceExtensionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PriceExtensionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PriceExtensionTypeEnum_PriceExtensionType", PriceExtensionTypeEnum_PriceExtensionType_name, PriceExtensionTypeEnum_PriceExtensionType_value)
+	proto.RegisterType((*PriceExtensionTypeEnum)(nil), "google.ads.googleads.v3.enums.PriceExtensionTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/price_extension_type.proto", fileDescriptor_d28cbae1bf68a407)
+}
+
+var fileDescriptor_d28cbae1bf68a407 = []byte{
+	// 394 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x6e, 0xd4, 0x30,
+	0x18, 0x85, 0xc9, 0x14, 0xa6, 0xad, 0x4b, 0x85, 0xf1, 0xa2, 0x48, 0x88, 0x2e, 0xda, 0x03, 0x38,
+	0x8b, 0x6c, 0x90, 0x59, 0x39, 0x89, 0x49, 0x23, 0x90, 0x1d, 0xc5, 0x99, 0x20, 0xa1, 0x48, 0xa3,
+	0xd0, 0x58, 0x51, 0xa4, 0x8e, 0x1d, 0x8d, 0xd3, 0x8a, 0x5e, 0x87, 0x25, 0x47, 0x61, 0xc5, 0x39,
+	0x80, 0x43, 0x20, 0x27, 0xcd, 0x08, 0x69, 0x44, 0x37, 0xd1, 0xcb, 0xff, 0xbf, 0xef, 0x29, 0x79,
+	0x3f, 0x78, 0xdb, 0x1a, 0xd3, 0xde, 0x28, 0xbf, 0x6e, 0xac, 0x3f, 0x49, 0xa7, 0xee, 0x02, 0x5f,
+	0xe9, 0xdb, 0x8d, 0xf5, 0xfb, 0x6d, 0x77, 0xad, 0xd6, 0xea, 0xeb, 0xa0, 0xb4, 0xed, 0x8c, 0x5e,
+	0x0f, 0xf7, 0xbd, 0xc2, 0xfd, 0xd6, 0x0c, 0x06, 0x9d, 0x4f, 0x76, 0x5c, 0x37, 0x16, 0xef, 0x48,
+	0x7c, 0x17, 0xe0, 0x91, 0x7c, 0xfd, 0x66, 0x0e, 0xee, 0x3b, 0xbf, 0xd6, 0xda, 0x0c, 0xf5, 0xd0,
+	0x19, 0x6d, 0x27, 0xf8, 0xf2, 0xb7, 0x07, 0xce, 0x32, 0x97, 0xcd, 0xe6, 0xe8, 0xe2, 0xbe, 0x57,
+	0x4c, 0xdf, 0x6e, 0x2e, 0x7f, 0x7a, 0x00, 0xed, 0xaf, 0xd0, 0x0b, 0x70, 0xb2, 0xe2, 0x32, 0x63,
+	0x51, 0xfa, 0x3e, 0x65, 0x31, 0x7c, 0x82, 0x4e, 0xc0, 0xe1, 0x8a, 0x7f, 0xe0, 0xe2, 0x13, 0x87,
+	0x1e, 0x02, 0x60, 0x19, 0xe6, 0x94, 0xc7, 0x12, 0x2e, 0x9c, 0x66, 0x25, 0xe3, 0x85, 0x84, 0x07,
+	0xe8, 0x14, 0x1c, 0x7f, 0x14, 0x11, 0x2d, 0x52, 0xc1, 0x25, 0x7c, 0x8a, 0x5e, 0x82, 0x53, 0xce,
+	0xd2, 0xe4, 0x2a, 0x14, 0xf9, 0x95, 0x10, 0xb1, 0x84, 0xcf, 0xd0, 0x19, 0x40, 0x59, 0x2e, 0xe2,
+	0x55, 0x54, 0xac, 0x23, 0x5a, 0xb0, 0x44, 0xe4, 0x29, 0x93, 0x70, 0xe9, 0xac, 0xf3, 0xbc, 0x48,
+	0x59, 0x2e, 0xe1, 0x21, 0x7a, 0x0e, 0x8e, 0x24, 0xcb, 0xcb, 0x34, 0x62, 0x12, 0x1e, 0x39, 0xf0,
+	0xe1, 0xed, 0x5f, 0xf0, 0xd8, 0x81, 0xf3, 0x7c, 0x02, 0x41, 0xf8, 0xc7, 0x03, 0x17, 0xd7, 0x66,
+	0x83, 0x1f, 0x6d, 0x2c, 0x7c, 0xb5, 0xff, 0xd7, 0x99, 0x2b, 0x2b, 0xf3, 0x3e, 0x87, 0x0f, 0x64,
+	0x6b, 0x6e, 0x6a, 0xdd, 0x62, 0xb3, 0x6d, 0xfd, 0x56, 0xe9, 0xb1, 0xca, 0xf9, 0x6a, 0x7d, 0x67,
+	0xff, 0x73, 0xc4, 0x77, 0xe3, 0xf3, 0xdb, 0xe2, 0x20, 0xa1, 0xf4, 0xfb, 0xe2, 0x3c, 0x99, 0xa2,
+	0x68, 0x63, 0xf1, 0x24, 0x9d, 0x2a, 0x03, 0xec, 0xca, 0xb7, 0x3f, 0xe6, 0x7d, 0x45, 0x1b, 0x5b,
+	0xed, 0xf6, 0x55, 0x19, 0x54, 0xe3, 0xfe, 0xd7, 0xe2, 0x62, 0x1a, 0x12, 0x42, 0x1b, 0x4b, 0xc8,
+	0xce, 0x41, 0x48, 0x19, 0x10, 0x32, 0x7a, 0xbe, 0x2c, 0xc7, 0x0f, 0x0b, 0xfe, 0x06, 0x00, 0x00,
+	0xff, 0xff, 0x13, 0xf3, 0xb8, 0x7a, 0x5c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/price_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/price_placeholder_field.pb.go
new file mode 100644
index 0000000..383c395
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/price_placeholder_field.pb.go
@@ -0,0 +1,391 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/price_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Price placeholder fields.
+type PricePlaceholderFieldEnum_PricePlaceholderField int32
+
+const (
+	// Not specified.
+	PricePlaceholderFieldEnum_UNSPECIFIED PricePlaceholderFieldEnum_PricePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	PricePlaceholderFieldEnum_UNKNOWN PricePlaceholderFieldEnum_PricePlaceholderField = 1
+	// Data Type: STRING. The type of your price feed. Must match one of the
+	// predefined price feed type exactly.
+	PricePlaceholderFieldEnum_TYPE PricePlaceholderFieldEnum_PricePlaceholderField = 2
+	// Data Type: STRING. The qualifier of each price. Must match one of the
+	// predefined price qualifiers exactly.
+	PricePlaceholderFieldEnum_PRICE_QUALIFIER PricePlaceholderFieldEnum_PricePlaceholderField = 3
+	// Data Type: URL. Tracking template for the price feed when using Upgraded
+	// URLs.
+	PricePlaceholderFieldEnum_TRACKING_TEMPLATE PricePlaceholderFieldEnum_PricePlaceholderField = 4
+	// Data Type: STRING. Language of the price feed. Must match one of the
+	// available available locale codes exactly.
+	PricePlaceholderFieldEnum_LANGUAGE PricePlaceholderFieldEnum_PricePlaceholderField = 5
+	// Data Type: STRING. Final URL suffix for the price feed when using
+	// parallel tracking.
+	PricePlaceholderFieldEnum_FINAL_URL_SUFFIX PricePlaceholderFieldEnum_PricePlaceholderField = 6
+	// Data Type: STRING. The header of item 1 of the table.
+	PricePlaceholderFieldEnum_ITEM_1_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 100
+	// Data Type: STRING. The description of item 1 of the table.
+	PricePlaceholderFieldEnum_ITEM_1_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 101
+	// Data Type: MONEY. The price (money with currency) of item 1 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_1_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 102
+	// Data Type: STRING. The price unit of item 1 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_1_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 103
+	// Data Type: URL_LIST. The final URLs of item 1 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_1_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 104
+	// Data Type: URL_LIST. The final mobile URLs of item 1 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_1_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 105
+	// Data Type: STRING. The header of item 2 of the table.
+	PricePlaceholderFieldEnum_ITEM_2_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 200
+	// Data Type: STRING. The description of item 2 of the table.
+	PricePlaceholderFieldEnum_ITEM_2_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 201
+	// Data Type: MONEY. The price (money with currency) of item 2 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_2_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 202
+	// Data Type: STRING. The price unit of item 2 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_2_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 203
+	// Data Type: URL_LIST. The final URLs of item 2 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_2_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 204
+	// Data Type: URL_LIST. The final mobile URLs of item 2 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_2_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 205
+	// Data Type: STRING. The header of item 3 of the table.
+	PricePlaceholderFieldEnum_ITEM_3_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 300
+	// Data Type: STRING. The description of item 3 of the table.
+	PricePlaceholderFieldEnum_ITEM_3_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 301
+	// Data Type: MONEY. The price (money with currency) of item 3 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_3_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 302
+	// Data Type: STRING. The price unit of item 3 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_3_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 303
+	// Data Type: URL_LIST. The final URLs of item 3 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_3_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 304
+	// Data Type: URL_LIST. The final mobile URLs of item 3 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_3_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 305
+	// Data Type: STRING. The header of item 4 of the table.
+	PricePlaceholderFieldEnum_ITEM_4_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 400
+	// Data Type: STRING. The description of item 4 of the table.
+	PricePlaceholderFieldEnum_ITEM_4_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 401
+	// Data Type: MONEY. The price (money with currency) of item 4 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_4_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 402
+	// Data Type: STRING. The price unit of item 4 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_4_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 403
+	// Data Type: URL_LIST. The final URLs of item 4 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_4_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 404
+	// Data Type: URL_LIST. The final mobile URLs of item 4 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_4_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 405
+	// Data Type: STRING. The header of item 5 of the table.
+	PricePlaceholderFieldEnum_ITEM_5_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 500
+	// Data Type: STRING. The description of item 5 of the table.
+	PricePlaceholderFieldEnum_ITEM_5_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 501
+	// Data Type: MONEY. The price (money with currency) of item 5 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_5_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 502
+	// Data Type: STRING. The price unit of item 5 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_5_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 503
+	// Data Type: URL_LIST. The final URLs of item 5 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_5_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 504
+	// Data Type: URL_LIST. The final mobile URLs of item 5 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_5_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 505
+	// Data Type: STRING. The header of item 6 of the table.
+	PricePlaceholderFieldEnum_ITEM_6_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 600
+	// Data Type: STRING. The description of item 6 of the table.
+	PricePlaceholderFieldEnum_ITEM_6_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 601
+	// Data Type: MONEY. The price (money with currency) of item 6 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_6_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 602
+	// Data Type: STRING. The price unit of item 6 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_6_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 603
+	// Data Type: URL_LIST. The final URLs of item 6 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_6_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 604
+	// Data Type: URL_LIST. The final mobile URLs of item 6 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_6_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 605
+	// Data Type: STRING. The header of item 7 of the table.
+	PricePlaceholderFieldEnum_ITEM_7_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 700
+	// Data Type: STRING. The description of item 7 of the table.
+	PricePlaceholderFieldEnum_ITEM_7_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 701
+	// Data Type: MONEY. The price (money with currency) of item 7 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_7_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 702
+	// Data Type: STRING. The price unit of item 7 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_7_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 703
+	// Data Type: URL_LIST. The final URLs of item 7 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_7_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 704
+	// Data Type: URL_LIST. The final mobile URLs of item 7 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_7_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 705
+	// Data Type: STRING. The header of item 8 of the table.
+	PricePlaceholderFieldEnum_ITEM_8_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 800
+	// Data Type: STRING. The description of item 8 of the table.
+	PricePlaceholderFieldEnum_ITEM_8_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 801
+	// Data Type: MONEY. The price (money with currency) of item 8 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_8_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 802
+	// Data Type: STRING. The price unit of item 8 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_8_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 803
+	// Data Type: URL_LIST. The final URLs of item 8 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_8_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 804
+	// Data Type: URL_LIST. The final mobile URLs of item 8 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_8_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 805
+)
+
+var PricePlaceholderFieldEnum_PricePlaceholderField_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	2:   "TYPE",
+	3:   "PRICE_QUALIFIER",
+	4:   "TRACKING_TEMPLATE",
+	5:   "LANGUAGE",
+	6:   "FINAL_URL_SUFFIX",
+	100: "ITEM_1_HEADER",
+	101: "ITEM_1_DESCRIPTION",
+	102: "ITEM_1_PRICE",
+	103: "ITEM_1_UNIT",
+	104: "ITEM_1_FINAL_URLS",
+	105: "ITEM_1_FINAL_MOBILE_URLS",
+	200: "ITEM_2_HEADER",
+	201: "ITEM_2_DESCRIPTION",
+	202: "ITEM_2_PRICE",
+	203: "ITEM_2_UNIT",
+	204: "ITEM_2_FINAL_URLS",
+	205: "ITEM_2_FINAL_MOBILE_URLS",
+	300: "ITEM_3_HEADER",
+	301: "ITEM_3_DESCRIPTION",
+	302: "ITEM_3_PRICE",
+	303: "ITEM_3_UNIT",
+	304: "ITEM_3_FINAL_URLS",
+	305: "ITEM_3_FINAL_MOBILE_URLS",
+	400: "ITEM_4_HEADER",
+	401: "ITEM_4_DESCRIPTION",
+	402: "ITEM_4_PRICE",
+	403: "ITEM_4_UNIT",
+	404: "ITEM_4_FINAL_URLS",
+	405: "ITEM_4_FINAL_MOBILE_URLS",
+	500: "ITEM_5_HEADER",
+	501: "ITEM_5_DESCRIPTION",
+	502: "ITEM_5_PRICE",
+	503: "ITEM_5_UNIT",
+	504: "ITEM_5_FINAL_URLS",
+	505: "ITEM_5_FINAL_MOBILE_URLS",
+	600: "ITEM_6_HEADER",
+	601: "ITEM_6_DESCRIPTION",
+	602: "ITEM_6_PRICE",
+	603: "ITEM_6_UNIT",
+	604: "ITEM_6_FINAL_URLS",
+	605: "ITEM_6_FINAL_MOBILE_URLS",
+	700: "ITEM_7_HEADER",
+	701: "ITEM_7_DESCRIPTION",
+	702: "ITEM_7_PRICE",
+	703: "ITEM_7_UNIT",
+	704: "ITEM_7_FINAL_URLS",
+	705: "ITEM_7_FINAL_MOBILE_URLS",
+	800: "ITEM_8_HEADER",
+	801: "ITEM_8_DESCRIPTION",
+	802: "ITEM_8_PRICE",
+	803: "ITEM_8_UNIT",
+	804: "ITEM_8_FINAL_URLS",
+	805: "ITEM_8_FINAL_MOBILE_URLS",
+}
+
+var PricePlaceholderFieldEnum_PricePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"TYPE":                     2,
+	"PRICE_QUALIFIER":          3,
+	"TRACKING_TEMPLATE":        4,
+	"LANGUAGE":                 5,
+	"FINAL_URL_SUFFIX":         6,
+	"ITEM_1_HEADER":            100,
+	"ITEM_1_DESCRIPTION":       101,
+	"ITEM_1_PRICE":             102,
+	"ITEM_1_UNIT":              103,
+	"ITEM_1_FINAL_URLS":        104,
+	"ITEM_1_FINAL_MOBILE_URLS": 105,
+	"ITEM_2_HEADER":            200,
+	"ITEM_2_DESCRIPTION":       201,
+	"ITEM_2_PRICE":             202,
+	"ITEM_2_UNIT":              203,
+	"ITEM_2_FINAL_URLS":        204,
+	"ITEM_2_FINAL_MOBILE_URLS": 205,
+	"ITEM_3_HEADER":            300,
+	"ITEM_3_DESCRIPTION":       301,
+	"ITEM_3_PRICE":             302,
+	"ITEM_3_UNIT":              303,
+	"ITEM_3_FINAL_URLS":        304,
+	"ITEM_3_FINAL_MOBILE_URLS": 305,
+	"ITEM_4_HEADER":            400,
+	"ITEM_4_DESCRIPTION":       401,
+	"ITEM_4_PRICE":             402,
+	"ITEM_4_UNIT":              403,
+	"ITEM_4_FINAL_URLS":        404,
+	"ITEM_4_FINAL_MOBILE_URLS": 405,
+	"ITEM_5_HEADER":            500,
+	"ITEM_5_DESCRIPTION":       501,
+	"ITEM_5_PRICE":             502,
+	"ITEM_5_UNIT":              503,
+	"ITEM_5_FINAL_URLS":        504,
+	"ITEM_5_FINAL_MOBILE_URLS": 505,
+	"ITEM_6_HEADER":            600,
+	"ITEM_6_DESCRIPTION":       601,
+	"ITEM_6_PRICE":             602,
+	"ITEM_6_UNIT":              603,
+	"ITEM_6_FINAL_URLS":        604,
+	"ITEM_6_FINAL_MOBILE_URLS": 605,
+	"ITEM_7_HEADER":            700,
+	"ITEM_7_DESCRIPTION":       701,
+	"ITEM_7_PRICE":             702,
+	"ITEM_7_UNIT":              703,
+	"ITEM_7_FINAL_URLS":        704,
+	"ITEM_7_FINAL_MOBILE_URLS": 705,
+	"ITEM_8_HEADER":            800,
+	"ITEM_8_DESCRIPTION":       801,
+	"ITEM_8_PRICE":             802,
+	"ITEM_8_UNIT":              803,
+	"ITEM_8_FINAL_URLS":        804,
+	"ITEM_8_FINAL_MOBILE_URLS": 805,
+}
+
+func (x PricePlaceholderFieldEnum_PricePlaceholderField) String() string {
+	return proto.EnumName(PricePlaceholderFieldEnum_PricePlaceholderField_name, int32(x))
+}
+
+func (PricePlaceholderFieldEnum_PricePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4bcb1bf31a53d818, []int{0, 0}
+}
+
+// Values for Price placeholder fields.
+type PricePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PricePlaceholderFieldEnum) Reset()         { *m = PricePlaceholderFieldEnum{} }
+func (m *PricePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*PricePlaceholderFieldEnum) ProtoMessage()    {}
+func (*PricePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4bcb1bf31a53d818, []int{0}
+}
+
+func (m *PricePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *PricePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *PricePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PricePlaceholderFieldEnum.Merge(m, src)
+}
+func (m *PricePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Size(m)
+}
+func (m *PricePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PricePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PricePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PricePlaceholderFieldEnum_PricePlaceholderField", PricePlaceholderFieldEnum_PricePlaceholderField_name, PricePlaceholderFieldEnum_PricePlaceholderField_value)
+	proto.RegisterType((*PricePlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.PricePlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/price_placeholder_field.proto", fileDescriptor_4bcb1bf31a53d818)
+}
+
+var fileDescriptor_4bcb1bf31a53d818 = []byte{
+	// 728 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd4, 0x49, 0x6f, 0xd3, 0x50,
+	0x10, 0x07, 0x70, 0xbc, 0xc4, 0xb4, 0xaf, 0x45, 0x7d, 0x7d, 0xd0, 0x02, 0x55, 0x7b, 0x68, 0x3f,
+	0x80, 0x23, 0xe2, 0x6c, 0x72, 0x4f, 0x4e, 0xea, 0x04, 0xab, 0xa9, 0x6b, 0xb2, 0x94, 0x45, 0x91,
+	0xac, 0x50, 0xbb, 0x69, 0xa4, 0x34, 0x8e, 0xe2, 0xb6, 0x9f, 0x83, 0xf5, 0x0e, 0x05, 0x2e, 0x88,
+	0xf5, 0xce, 0x7a, 0x83, 0x02, 0x07, 0x6e, 0xac, 0x5f, 0x80, 0x4b, 0x2f, 0xac, 0x37, 0xe4, 0xf8,
+	0x79, 0x12, 0x4b, 0x86, 0x8b, 0x35, 0x9a, 0x79, 0x33, 0xfe, 0x9d, 0xfe, 0x68, 0xb1, 0xe9, 0x38,
+	0xcd, 0xb6, 0x1d, 0x6f, 0x58, 0x6e, 0xdc, 0x2f, 0xbd, 0x6a, 0x57, 0x8a, 0xdb, 0x9d, 0x9d, 0x2d,
+	0x37, 0xde, 0xed, 0xb5, 0xd6, 0x6d, 0xb3, 0xdb, 0x6e, 0xac, 0xdb, 0x9b, 0x4e, 0xdb, 0xb2, 0x7b,
+	0xe6, 0x46, 0xcb, 0x6e, 0x5b, 0x62, 0xb7, 0xe7, 0x6c, 0x3b, 0x64, 0xce, 0xdf, 0x10, 0x1b, 0x96,
+	0x2b, 0xc2, 0xb2, 0xb8, 0x2b, 0x89, 0xfd, 0xe5, 0x99, 0xd9, 0xe0, 0x76, 0xb7, 0x15, 0x6f, 0x74,
+	0x3a, 0xce, 0x76, 0x63, 0xbb, 0xe5, 0x74, 0x5c, 0x7f, 0x79, 0xe1, 0x60, 0x14, 0x9d, 0x34, 0xbc,
+	0xf3, 0xc6, 0xe0, 0x7a, 0xc1, 0x3b, 0xae, 0x76, 0x76, 0xb6, 0x16, 0xde, 0x8f, 0xa2, 0xa9, 0xc8,
+	0x29, 0x99, 0x40, 0x63, 0x35, 0xbd, 0x62, 0xa8, 0x79, 0xad, 0xa0, 0xa9, 0x4b, 0xf8, 0x10, 0x19,
+	0x43, 0x87, 0x6b, 0xfa, 0xb2, 0xbe, 0x7a, 0x56, 0xc7, 0x0c, 0x19, 0x41, 0x7c, 0xf5, 0xbc, 0xa1,
+	0x62, 0x96, 0x1c, 0x45, 0x13, 0x46, 0x59, 0xcb, 0xab, 0xe6, 0x99, 0x9a, 0x52, 0xf2, 0xde, 0x96,
+	0x31, 0x47, 0xa6, 0xd0, 0x64, 0xb5, 0xac, 0xe4, 0x97, 0x35, 0xbd, 0x68, 0x56, 0xd5, 0x15, 0xa3,
+	0xa4, 0x54, 0x55, 0xcc, 0x93, 0x71, 0x34, 0x52, 0x52, 0xf4, 0x62, 0x4d, 0x29, 0xaa, 0x38, 0x46,
+	0x8e, 0x21, 0x5c, 0xd0, 0x74, 0xa5, 0x64, 0xd6, 0xca, 0x25, 0xb3, 0x52, 0x2b, 0x14, 0xb4, 0x73,
+	0x58, 0x20, 0x93, 0xe8, 0x88, 0x56, 0x55, 0x57, 0xcc, 0x53, 0xe6, 0x69, 0x55, 0x59, 0x52, 0xcb,
+	0xd8, 0x22, 0xd3, 0x88, 0xd0, 0xd6, 0x92, 0x5a, 0xc9, 0x97, 0x35, 0xa3, 0xaa, 0xad, 0xea, 0xd8,
+	0x26, 0x18, 0x8d, 0xd3, 0x7e, 0x5f, 0x80, 0x37, 0x3c, 0x34, 0xed, 0xd4, 0x74, 0xad, 0x8a, 0x9b,
+	0x1e, 0x84, 0x36, 0xe0, 0x57, 0x15, 0xbc, 0x49, 0x66, 0xd1, 0x89, 0x50, 0x7b, 0x65, 0x35, 0xa7,
+	0x95, 0x54, 0x7f, 0xda, 0x22, 0x84, 0x12, 0x12, 0x01, 0xe1, 0x15, 0x43, 0x8e, 0x53, 0x43, 0x22,
+	0x64, 0x78, 0xcd, 0x90, 0x49, 0x8a, 0x48, 0x50, 0xc4, 0x3e, 0x43, 0x30, 0x55, 0x24, 0x7c, 0xc5,
+	0x1b, 0x86, 0x4c, 0x53, 0x46, 0x62, 0x98, 0xf1, 0x96, 0x21, 0x73, 0xd4, 0x91, 0x88, 0x70, 0xbc,
+	0x63, 0x00, 0x22, 0x05, 0x90, 0x7b, 0x2c, 0x40, 0xa4, 0x10, 0xe4, 0x3e, 0x0b, 0x10, 0x89, 0x42,
+	0x1e, 0xb0, 0x00, 0x91, 0x7c, 0xc8, 0x43, 0x16, 0x20, 0xd2, 0x30, 0xe4, 0x11, 0x0b, 0x10, 0x29,
+	0x02, 0xf2, 0x98, 0x05, 0x48, 0x32, 0x80, 0x5c, 0xe2, 0x00, 0x92, 0x0c, 0x41, 0x2e, 0x73, 0x00,
+	0x49, 0x52, 0xc8, 0x15, 0x0e, 0x20, 0x49, 0x1f, 0x72, 0x95, 0x03, 0x48, 0x72, 0x18, 0x72, 0x8d,
+	0x03, 0x48, 0x32, 0x02, 0x72, 0x9d, 0x03, 0x48, 0x2a, 0x80, 0x7c, 0x1f, 0x40, 0x52, 0x21, 0xc8,
+	0x8f, 0x01, 0x24, 0x45, 0x21, 0x3f, 0x07, 0x90, 0x94, 0x0f, 0xf9, 0x35, 0x80, 0xa4, 0x86, 0x21,
+	0xbf, 0x07, 0x90, 0x54, 0x04, 0xe4, 0xcf, 0x00, 0x92, 0x0e, 0x20, 0x1f, 0x78, 0x80, 0xa4, 0x43,
+	0x90, 0x8f, 0x3c, 0x40, 0xd2, 0x14, 0xf2, 0x89, 0x07, 0x48, 0xda, 0x87, 0x7c, 0xe6, 0x01, 0x92,
+	0x1e, 0x86, 0x7c, 0xe1, 0x01, 0x92, 0x8e, 0x80, 0x7c, 0xe5, 0x01, 0x92, 0x09, 0x20, 0x4f, 0x62,
+	0x00, 0xc9, 0x84, 0x20, 0x4f, 0x63, 0x00, 0xc9, 0x50, 0xc8, 0xb3, 0x18, 0x40, 0x32, 0x3e, 0xe4,
+	0x79, 0x0c, 0x20, 0x99, 0x61, 0xc8, 0x8b, 0x18, 0x40, 0x32, 0x11, 0x90, 0x97, 0x31, 0x80, 0x64,
+	0x03, 0xc8, 0x0d, 0x01, 0x20, 0xd9, 0x10, 0xe4, 0xa6, 0x00, 0x90, 0x2c, 0x85, 0xec, 0x09, 0x00,
+	0xc9, 0xfa, 0x90, 0x5b, 0x02, 0x40, 0xb2, 0xc3, 0x90, 0xdb, 0x02, 0x40, 0xb2, 0x11, 0x90, 0x3b,
+	0x42, 0xee, 0x80, 0x41, 0xf3, 0xeb, 0xce, 0x96, 0xf8, 0xdf, 0xd4, 0xcc, 0xcd, 0x44, 0xc6, 0x9e,
+	0xe1, 0x65, 0xa6, 0xc1, 0x5c, 0xc8, 0xd1, 0xe5, 0xa6, 0xd3, 0x6e, 0x74, 0x9a, 0xa2, 0xd3, 0x6b,
+	0xc6, 0x9b, 0x76, 0xa7, 0x9f, 0xa8, 0x41, 0x7e, 0x77, 0x5b, 0xee, 0x3f, 0xe2, 0x7c, 0xb1, 0xff,
+	0xdd, 0x63, 0xb9, 0xa2, 0xa2, 0xdc, 0x65, 0xe7, 0x8a, 0xfe, 0x29, 0xc5, 0x72, 0x45, 0xbf, 0xf4,
+	0xaa, 0x35, 0x49, 0xf4, 0x02, 0xd8, 0xdd, 0x0f, 0xe6, 0x75, 0xc5, 0x72, 0xeb, 0x30, 0xaf, 0xaf,
+	0x49, 0xf5, 0xfe, 0xfc, 0x1b, 0x3b, 0xef, 0x37, 0x65, 0x59, 0xb1, 0x5c, 0x59, 0x86, 0x17, 0xb2,
+	0xbc, 0x26, 0xc9, 0x72, 0xff, 0xcd, 0x45, 0xa1, 0x0f, 0x93, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff,
+	0x7b, 0x39, 0x81, 0xe3, 0x66, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_bidding_category_level.pb.go b/googleapis/ads/googleads/v3/enums/product_bidding_category_level.pb.go
new file mode 100644
index 0000000..be843dd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_bidding_category_level.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_bidding_category_level.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the level of the product bidding category.
+type ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel int32
+
+const (
+	// Not specified.
+	ProductBiddingCategoryLevelEnum_UNSPECIFIED ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductBiddingCategoryLevelEnum_UNKNOWN ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 1
+	// Level 1.
+	ProductBiddingCategoryLevelEnum_LEVEL1 ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 2
+	// Level 2.
+	ProductBiddingCategoryLevelEnum_LEVEL2 ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 3
+	// Level 3.
+	ProductBiddingCategoryLevelEnum_LEVEL3 ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 4
+	// Level 4.
+	ProductBiddingCategoryLevelEnum_LEVEL4 ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 5
+	// Level 5.
+	ProductBiddingCategoryLevelEnum_LEVEL5 ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel = 6
+)
+
+var ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LEVEL1",
+	3: "LEVEL2",
+	4: "LEVEL3",
+	5: "LEVEL4",
+	6: "LEVEL5",
+}
+
+var ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"LEVEL1":      2,
+	"LEVEL2":      3,
+	"LEVEL3":      4,
+	"LEVEL4":      5,
+	"LEVEL5":      6,
+}
+
+func (x ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel) String() string {
+	return proto.EnumName(ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel_name, int32(x))
+}
+
+func (ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_086360d475e60285, []int{0, 0}
+}
+
+// Level of a product bidding category.
+type ProductBiddingCategoryLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductBiddingCategoryLevelEnum) Reset()         { *m = ProductBiddingCategoryLevelEnum{} }
+func (m *ProductBiddingCategoryLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductBiddingCategoryLevelEnum) ProtoMessage()    {}
+func (*ProductBiddingCategoryLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_086360d475e60285, []int{0}
+}
+
+func (m *ProductBiddingCategoryLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductBiddingCategoryLevelEnum.Unmarshal(m, b)
+}
+func (m *ProductBiddingCategoryLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductBiddingCategoryLevelEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductBiddingCategoryLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductBiddingCategoryLevelEnum.Merge(m, src)
+}
+func (m *ProductBiddingCategoryLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductBiddingCategoryLevelEnum.Size(m)
+}
+func (m *ProductBiddingCategoryLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductBiddingCategoryLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductBiddingCategoryLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel", ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel_name, ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel_value)
+	proto.RegisterType((*ProductBiddingCategoryLevelEnum)(nil), "google.ads.googleads.v3.enums.ProductBiddingCategoryLevelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_bidding_category_level.proto", fileDescriptor_086360d475e60285)
+}
+
+var fileDescriptor_086360d475e60285 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x14, 0xc7, 0x6d, 0xa7, 0x13, 0xb2, 0x83, 0xa1, 0x47, 0x75, 0xe8, 0xf6, 0x01, 0x52, 0x34, 0x7a,
+	0x89, 0xa7, 0x76, 0xd6, 0x31, 0x1c, 0xb5, 0x20, 0xab, 0x20, 0x85, 0xd1, 0x2d, 0x21, 0x14, 0xba,
+	0xa4, 0x34, 0xdd, 0xc4, 0xaf, 0xe2, 0xd1, 0xa3, 0x1f, 0xc5, 0x8f, 0xe2, 0xdd, 0xbb, 0x34, 0xd9,
+	0x72, 0x73, 0x97, 0xf2, 0xa3, 0xef, 0xbd, 0xff, 0xff, 0xbd, 0x7f, 0x40, 0xc8, 0xa5, 0xe4, 0x25,
+	0xf3, 0x73, 0xaa, 0x7c, 0x83, 0x2d, 0x6d, 0xb0, 0xcf, 0xc4, 0x7a, 0xa5, 0xfc, 0xaa, 0x96, 0x74,
+	0xbd, 0x6c, 0xe6, 0x8b, 0x82, 0xd2, 0x42, 0xf0, 0xf9, 0x32, 0x6f, 0x18, 0x97, 0xf5, 0xfb, 0xbc,
+	0x64, 0x1b, 0x56, 0xa2, 0xaa, 0x96, 0x8d, 0xf4, 0xfa, 0x66, 0x10, 0xe5, 0x54, 0x21, 0xab, 0x81,
+	0x36, 0x18, 0x69, 0x8d, 0xd3, 0xf3, 0x9d, 0x45, 0x55, 0xf8, 0xb9, 0x10, 0xb2, 0xc9, 0x9b, 0x42,
+	0x0a, 0x65, 0x86, 0x87, 0x1f, 0x0e, 0xb8, 0x48, 0x8c, 0x4b, 0x68, 0x4c, 0x46, 0x5b, 0x8f, 0x69,
+	0x6b, 0x11, 0x89, 0xf5, 0x6a, 0xf8, 0x06, 0xce, 0xf6, 0xb4, 0x78, 0x27, 0xa0, 0x37, 0x8b, 0x9f,
+	0x93, 0x68, 0x34, 0x79, 0x98, 0x44, 0xf7, 0xf0, 0xc0, 0xeb, 0x81, 0xe3, 0x59, 0xfc, 0x18, 0x3f,
+	0xbd, 0xc4, 0xd0, 0xf1, 0x00, 0xe8, 0x4e, 0xa3, 0x34, 0x9a, 0x5e, 0x41, 0xd7, 0xf2, 0x35, 0xec,
+	0x58, 0xc6, 0xf0, 0xd0, 0xf2, 0x0d, 0x3c, 0xb2, 0x7c, 0x0b, 0xbb, 0xe1, 0xaf, 0x03, 0x06, 0x4b,
+	0xb9, 0x42, 0x7b, 0x0f, 0x0c, 0x2f, 0xf7, 0x2c, 0x97, 0xb4, 0x47, 0x26, 0xce, 0xeb, 0x36, 0x67,
+	0xc4, 0x65, 0x99, 0x0b, 0x8e, 0x64, 0xcd, 0x7d, 0xce, 0x84, 0x8e, 0x60, 0x97, 0x7b, 0x55, 0xa8,
+	0x7f, 0x9e, 0xe1, 0x4e, 0x7f, 0x3f, 0xdd, 0xce, 0x38, 0x08, 0xbe, 0xdc, 0xfe, 0xd8, 0x48, 0x05,
+	0x54, 0x21, 0x83, 0x2d, 0xa5, 0x18, 0xb5, 0x59, 0xa9, 0xef, 0x5d, 0x3d, 0x0b, 0xa8, 0xca, 0x6c,
+	0x3d, 0x4b, 0x71, 0xa6, 0xeb, 0x3f, 0xee, 0xc0, 0xfc, 0x24, 0x24, 0xa0, 0x8a, 0x10, 0xdb, 0x41,
+	0x48, 0x8a, 0x09, 0xd1, 0x3d, 0x8b, 0xae, 0x5e, 0x0c, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x44,
+	0x4a, 0x86, 0xb8, 0x1e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_bidding_category_status.pb.go b/googleapis/ads/googleads/v3/enums/product_bidding_category_status.pb.go
new file mode 100644
index 0000000..8e16964
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_bidding_category_status.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_bidding_category_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the status of the product bidding category.
+type ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus int32
+
+const (
+	// Not specified.
+	ProductBiddingCategoryStatusEnum_UNSPECIFIED ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductBiddingCategoryStatusEnum_UNKNOWN ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus = 1
+	// The category is active and can be used for bidding.
+	ProductBiddingCategoryStatusEnum_ACTIVE ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus = 2
+	// The category is obsolete. Used only for reporting purposes.
+	ProductBiddingCategoryStatusEnum_OBSOLETE ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus = 3
+)
+
+var ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ACTIVE",
+	3: "OBSOLETE",
+}
+
+var ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ACTIVE":      2,
+	"OBSOLETE":    3,
+}
+
+func (x ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus) String() string {
+	return proto.EnumName(ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus_name, int32(x))
+}
+
+func (ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a3fa627f0e7cbddb, []int{0, 0}
+}
+
+// Status of the product bidding category.
+type ProductBiddingCategoryStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductBiddingCategoryStatusEnum) Reset()         { *m = ProductBiddingCategoryStatusEnum{} }
+func (m *ProductBiddingCategoryStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductBiddingCategoryStatusEnum) ProtoMessage()    {}
+func (*ProductBiddingCategoryStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a3fa627f0e7cbddb, []int{0}
+}
+
+func (m *ProductBiddingCategoryStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductBiddingCategoryStatusEnum.Unmarshal(m, b)
+}
+func (m *ProductBiddingCategoryStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductBiddingCategoryStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductBiddingCategoryStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductBiddingCategoryStatusEnum.Merge(m, src)
+}
+func (m *ProductBiddingCategoryStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductBiddingCategoryStatusEnum.Size(m)
+}
+func (m *ProductBiddingCategoryStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductBiddingCategoryStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductBiddingCategoryStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus", ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus_name, ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus_value)
+	proto.RegisterType((*ProductBiddingCategoryStatusEnum)(nil), "google.ads.googleads.v3.enums.ProductBiddingCategoryStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_bidding_category_status.proto", fileDescriptor_a3fa627f0e7cbddb)
+}
+
+var fileDescriptor_a3fa627f0e7cbddb = []byte{
+	// 320 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x6a, 0xf3, 0x30,
+	0x10, 0x85, 0xff, 0x38, 0x90, 0xbf, 0x28, 0x85, 0x1a, 0x2f, 0x4b, 0x02, 0x4d, 0x0e, 0x20, 0x2f,
+	0xb4, 0x53, 0x57, 0xb2, 0xab, 0x86, 0xd0, 0xe2, 0x18, 0x92, 0xb8, 0x50, 0x0c, 0x41, 0x89, 0x8c,
+	0x30, 0x24, 0x92, 0xb1, 0xe4, 0x40, 0x7b, 0x9c, 0x2e, 0x7b, 0x94, 0x1e, 0xa5, 0x07, 0xe8, 0xba,
+	0x58, 0x4a, 0xb2, 0xab, 0x37, 0xe2, 0xa1, 0x99, 0x79, 0xdf, 0xcc, 0x03, 0xb1, 0x50, 0x4a, 0xec,
+	0x8b, 0x90, 0x71, 0x1d, 0x3a, 0xd9, 0xaa, 0x23, 0x0a, 0x0b, 0xd9, 0x1c, 0x74, 0x58, 0xd5, 0x8a,
+	0x37, 0x3b, 0xb3, 0xd9, 0x96, 0x9c, 0x97, 0x52, 0x6c, 0x76, 0xcc, 0x14, 0x42, 0xd5, 0x6f, 0x1b,
+	0x6d, 0x98, 0x69, 0x34, 0xac, 0x6a, 0x65, 0x54, 0x30, 0x76, 0x93, 0x90, 0x71, 0x0d, 0x2f, 0x26,
+	0xf0, 0x88, 0xa0, 0x35, 0xb9, 0x1d, 0x9d, 0x19, 0x55, 0x19, 0x32, 0x29, 0x95, 0x61, 0xa6, 0x54,
+	0xf2, 0x34, 0x3c, 0x7d, 0x07, 0x77, 0xa9, 0xa3, 0x44, 0x0e, 0x12, 0x9f, 0x18, 0x4b, 0x8b, 0xa0,
+	0xb2, 0x39, 0x4c, 0x33, 0x30, 0xea, 0xea, 0x09, 0x6e, 0xc0, 0x70, 0x9d, 0x2c, 0x53, 0x1a, 0xcf,
+	0x1f, 0xe7, 0xf4, 0xc1, 0xff, 0x17, 0x0c, 0xc1, 0xff, 0x75, 0xf2, 0x94, 0x2c, 0x5e, 0x12, 0xbf,
+	0x17, 0x00, 0x30, 0x20, 0xf1, 0x6a, 0x9e, 0x51, 0xdf, 0x0b, 0xae, 0xc1, 0xd5, 0x22, 0x5a, 0x2e,
+	0x9e, 0xe9, 0x8a, 0xfa, 0xfd, 0xe8, 0xa7, 0x07, 0x26, 0x3b, 0x75, 0x80, 0x9d, 0xfb, 0x47, 0x93,
+	0x2e, 0x76, 0xda, 0x1e, 0x91, 0xf6, 0x5e, 0xa3, 0x93, 0x87, 0x50, 0x7b, 0x26, 0x05, 0x54, 0xb5,
+	0x08, 0x45, 0x21, 0xed, 0x89, 0xe7, 0x60, 0xab, 0x52, 0xff, 0x91, 0xf3, 0xbd, 0x7d, 0x3f, 0xbc,
+	0xfe, 0x8c, 0x90, 0x4f, 0x6f, 0x3c, 0x73, 0x56, 0x84, 0x6b, 0xe8, 0x64, 0xab, 0x32, 0x04, 0xdb,
+	0x2c, 0xf4, 0xd7, 0xb9, 0x9e, 0x13, 0xae, 0xf3, 0x4b, 0x3d, 0xcf, 0x50, 0x6e, 0xeb, 0xdf, 0xde,
+	0xc4, 0x7d, 0x62, 0x4c, 0xb8, 0xc6, 0xf8, 0xd2, 0x81, 0x71, 0x86, 0x30, 0xb6, 0x3d, 0xdb, 0x81,
+	0x5d, 0x0c, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, 0x00, 0xab, 0xd3, 0x23, 0xff, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_channel.pb.go b/googleapis/ads/googleads/v3/enums/product_channel.pb.go
new file mode 100644
index 0000000..96d19c0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_channel.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_channel.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the locality of a product offer.
+type ProductChannelEnum_ProductChannel int32
+
+const (
+	// Not specified.
+	ProductChannelEnum_UNSPECIFIED ProductChannelEnum_ProductChannel = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductChannelEnum_UNKNOWN ProductChannelEnum_ProductChannel = 1
+	// The item is sold online.
+	ProductChannelEnum_ONLINE ProductChannelEnum_ProductChannel = 2
+	// The item is sold in local stores.
+	ProductChannelEnum_LOCAL ProductChannelEnum_ProductChannel = 3
+)
+
+var ProductChannelEnum_ProductChannel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ONLINE",
+	3: "LOCAL",
+}
+
+var ProductChannelEnum_ProductChannel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ONLINE":      2,
+	"LOCAL":       3,
+}
+
+func (x ProductChannelEnum_ProductChannel) String() string {
+	return proto.EnumName(ProductChannelEnum_ProductChannel_name, int32(x))
+}
+
+func (ProductChannelEnum_ProductChannel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e9342ffcc394dc23, []int{0, 0}
+}
+
+// Locality of a product offer.
+type ProductChannelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductChannelEnum) Reset()         { *m = ProductChannelEnum{} }
+func (m *ProductChannelEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelEnum) ProtoMessage()    {}
+func (*ProductChannelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e9342ffcc394dc23, []int{0}
+}
+
+func (m *ProductChannelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelEnum.Unmarshal(m, b)
+}
+func (m *ProductChannelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductChannelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelEnum.Merge(m, src)
+}
+func (m *ProductChannelEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelEnum.Size(m)
+}
+func (m *ProductChannelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductChannelEnum_ProductChannel", ProductChannelEnum_ProductChannel_name, ProductChannelEnum_ProductChannel_value)
+	proto.RegisterType((*ProductChannelEnum)(nil), "google.ads.googleads.v3.enums.ProductChannelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_channel.proto", fileDescriptor_e9342ffcc394dc23)
+}
+
+var fileDescriptor_e9342ffcc394dc23 = []byte{
+	// 298 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4f, 0x4b, 0xfb, 0x30,
+	0x18, 0xfe, 0xad, 0xe3, 0x37, 0x31, 0x03, 0x2d, 0xf1, 0x26, 0xee, 0xb0, 0x7d, 0x80, 0xe4, 0x90,
+	0x5b, 0x3c, 0x65, 0xb3, 0x8e, 0xe1, 0xc8, 0x0a, 0xb2, 0x09, 0x5a, 0x90, 0xb8, 0x94, 0x58, 0x68,
+	0x93, 0xd2, 0xb4, 0xfb, 0x40, 0x1e, 0xfd, 0x28, 0x7e, 0x12, 0xf1, 0x53, 0x48, 0x13, 0x5b, 0xd8,
+	0x41, 0x2f, 0xe1, 0xe1, 0x7d, 0xfe, 0xe4, 0x79, 0x5f, 0x40, 0x94, 0x31, 0x2a, 0x4f, 0xb1, 0x90,
+	0x16, 0x7b, 0xd8, 0xa2, 0x03, 0xc1, 0xa9, 0x6e, 0x0a, 0x8b, 0xcb, 0xca, 0xc8, 0x66, 0x5f, 0x3f,
+	0xef, 0x5f, 0x85, 0xd6, 0x69, 0x8e, 0xca, 0xca, 0xd4, 0x06, 0x4e, 0xbc, 0x12, 0x09, 0x69, 0x51,
+	0x6f, 0x42, 0x07, 0x82, 0x9c, 0xe9, 0xf2, 0xaa, 0xcb, 0x2c, 0x33, 0x2c, 0xb4, 0x36, 0xb5, 0xa8,
+	0x33, 0xa3, 0xad, 0x37, 0xcf, 0x9e, 0x00, 0x8c, 0x7d, 0xea, 0xc2, 0x87, 0x46, 0xba, 0x29, 0x66,
+	0x11, 0x38, 0x3b, 0x9e, 0xc2, 0x73, 0x30, 0xde, 0xf2, 0xfb, 0x38, 0x5a, 0xac, 0x6e, 0x57, 0xd1,
+	0x4d, 0xf8, 0x0f, 0x8e, 0xc1, 0xc9, 0x96, 0xdf, 0xf1, 0xcd, 0x03, 0x0f, 0x07, 0x10, 0x80, 0xd1,
+	0x86, 0xaf, 0x57, 0x3c, 0x0a, 0x03, 0x78, 0x0a, 0xfe, 0xaf, 0x37, 0x0b, 0xb6, 0x0e, 0x87, 0xf3,
+	0xcf, 0x01, 0x98, 0xee, 0x4d, 0x81, 0xfe, 0x2c, 0x38, 0xbf, 0x38, 0xfe, 0x2a, 0x6e, 0x7b, 0xc5,
+	0x83, 0xc7, 0xf9, 0x8f, 0x4b, 0x99, 0x5c, 0x68, 0x85, 0x4c, 0xa5, 0xb0, 0x4a, 0xb5, 0x6b, 0xdd,
+	0xdd, 0xa6, 0xcc, 0xec, 0x2f, 0xa7, 0xba, 0x76, 0xef, 0x5b, 0x30, 0x5c, 0x32, 0xf6, 0x1e, 0x4c,
+	0x96, 0x3e, 0x8a, 0x49, 0x8b, 0x3c, 0x6c, 0xd1, 0x8e, 0xa0, 0x76, 0x59, 0xfb, 0xd1, 0xf1, 0x09,
+	0x93, 0x36, 0xe9, 0xf9, 0x64, 0x47, 0x12, 0xc7, 0x7f, 0x05, 0x53, 0x3f, 0xa4, 0x94, 0x49, 0x4b,
+	0x69, 0xaf, 0xa0, 0x74, 0x47, 0x28, 0x75, 0x9a, 0x97, 0x91, 0x2b, 0x46, 0xbe, 0x03, 0x00, 0x00,
+	0xff, 0xff, 0xea, 0x05, 0x6c, 0x93, 0xc2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_channel_exclusivity.pb.go b/googleapis/ads/googleads/v3/enums/product_channel_exclusivity.pb.go
new file mode 100644
index 0000000..832ac2b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_channel_exclusivity.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_channel_exclusivity.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the availability of a product offer.
+type ProductChannelExclusivityEnum_ProductChannelExclusivity int32
+
+const (
+	// Not specified.
+	ProductChannelExclusivityEnum_UNSPECIFIED ProductChannelExclusivityEnum_ProductChannelExclusivity = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductChannelExclusivityEnum_UNKNOWN ProductChannelExclusivityEnum_ProductChannelExclusivity = 1
+	// The item is sold through one channel only, either local stores or online
+	// as indicated by its ProductChannel.
+	ProductChannelExclusivityEnum_SINGLE_CHANNEL ProductChannelExclusivityEnum_ProductChannelExclusivity = 2
+	// The item is matched to its online or local stores counterpart, indicating
+	// it is available for purchase in both ShoppingProductChannels.
+	ProductChannelExclusivityEnum_MULTI_CHANNEL ProductChannelExclusivityEnum_ProductChannelExclusivity = 3
+)
+
+var ProductChannelExclusivityEnum_ProductChannelExclusivity_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SINGLE_CHANNEL",
+	3: "MULTI_CHANNEL",
+}
+
+var ProductChannelExclusivityEnum_ProductChannelExclusivity_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"SINGLE_CHANNEL": 2,
+	"MULTI_CHANNEL":  3,
+}
+
+func (x ProductChannelExclusivityEnum_ProductChannelExclusivity) String() string {
+	return proto.EnumName(ProductChannelExclusivityEnum_ProductChannelExclusivity_name, int32(x))
+}
+
+func (ProductChannelExclusivityEnum_ProductChannelExclusivity) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_5a8016d5df911ee6, []int{0, 0}
+}
+
+// Availability of a product offer.
+type ProductChannelExclusivityEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductChannelExclusivityEnum) Reset()         { *m = ProductChannelExclusivityEnum{} }
+func (m *ProductChannelExclusivityEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelExclusivityEnum) ProtoMessage()    {}
+func (*ProductChannelExclusivityEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5a8016d5df911ee6, []int{0}
+}
+
+func (m *ProductChannelExclusivityEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Unmarshal(m, b)
+}
+func (m *ProductChannelExclusivityEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductChannelExclusivityEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelExclusivityEnum.Merge(m, src)
+}
+func (m *ProductChannelExclusivityEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Size(m)
+}
+func (m *ProductChannelExclusivityEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelExclusivityEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelExclusivityEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity", ProductChannelExclusivityEnum_ProductChannelExclusivity_name, ProductChannelExclusivityEnum_ProductChannelExclusivity_value)
+	proto.RegisterType((*ProductChannelExclusivityEnum)(nil), "google.ads.googleads.v3.enums.ProductChannelExclusivityEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_channel_exclusivity.proto", fileDescriptor_5a8016d5df911ee6)
+}
+
+var fileDescriptor_5a8016d5df911ee6 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xd1, 0x4a, 0xf3, 0x30,
+	0x18, 0xfd, 0xdb, 0xc1, 0x2f, 0x64, 0xa8, 0xb3, 0x77, 0x8a, 0x13, 0xb6, 0x07, 0x48, 0x2f, 0x7a,
+	0x17, 0x2f, 0x24, 0x9b, 0x71, 0x16, 0x67, 0x2c, 0xcc, 0x4d, 0x90, 0xc2, 0x8c, 0x4d, 0x89, 0x85,
+	0x2e, 0x29, 0x4b, 0x3b, 0xf4, 0xd2, 0x57, 0xf1, 0xd2, 0x47, 0xf1, 0x51, 0xbc, 0xf5, 0x05, 0xa4,
+	0x89, 0xab, 0x57, 0xf5, 0x26, 0x1c, 0xf2, 0x9d, 0xef, 0x9c, 0xef, 0x1c, 0x70, 0x26, 0x94, 0x12,
+	0x79, 0xea, 0x33, 0xae, 0x7d, 0x0b, 0x6b, 0xb4, 0x09, 0xfc, 0x54, 0x56, 0x2b, 0xed, 0x17, 0x6b,
+	0xc5, 0xab, 0xa4, 0x5c, 0x26, 0x4f, 0x4c, 0xca, 0x34, 0x5f, 0xa6, 0xcf, 0x49, 0x5e, 0xe9, 0x6c,
+	0x93, 0x95, 0x2f, 0xb0, 0x58, 0xab, 0x52, 0x79, 0x7d, 0xbb, 0x05, 0x19, 0xd7, 0xb0, 0x11, 0x80,
+	0x9b, 0x00, 0x1a, 0x81, 0xa3, 0xe3, 0xad, 0x7e, 0x91, 0xf9, 0x4c, 0x4a, 0x55, 0xb2, 0x32, 0x53,
+	0x52, 0xdb, 0xe5, 0xe1, 0xab, 0x03, 0xfa, 0x91, 0xb5, 0x18, 0x5b, 0x07, 0xf2, 0x6b, 0x40, 0x64,
+	0xb5, 0x1a, 0x3e, 0x80, 0xc3, 0x56, 0x82, 0xb7, 0x0f, 0xba, 0x73, 0x3a, 0x8b, 0xc8, 0x38, 0xbc,
+	0x08, 0xc9, 0x79, 0xef, 0x9f, 0xd7, 0x05, 0x3b, 0x73, 0x7a, 0x45, 0x6f, 0xee, 0x68, 0xcf, 0xf1,
+	0x3c, 0xb0, 0x37, 0x0b, 0xe9, 0x64, 0x4a, 0x96, 0xe3, 0x4b, 0x4c, 0x29, 0x99, 0xf6, 0x5c, 0xef,
+	0x00, 0xec, 0x5e, 0xcf, 0xa7, 0xb7, 0x61, 0xf3, 0xd5, 0x19, 0x7d, 0x39, 0x60, 0x90, 0xa8, 0x15,
+	0xfc, 0x33, 0xc7, 0xe8, 0xa4, 0xf5, 0x8a, 0xa8, 0x4e, 0x12, 0x39, 0xf7, 0xa3, 0x1f, 0x01, 0xa1,
+	0x72, 0x26, 0x05, 0x54, 0x6b, 0xe1, 0x8b, 0x54, 0x9a, 0x9c, 0xdb, 0x66, 0x8b, 0x4c, 0xb7, 0x14,
+	0x7d, 0x6a, 0xde, 0x37, 0xb7, 0x33, 0xc1, 0xf8, 0xdd, 0xed, 0x4f, 0xac, 0x14, 0xe6, 0x1a, 0x5a,
+	0x58, 0xa3, 0x45, 0x00, 0xeb, 0x4a, 0xf4, 0xc7, 0x76, 0x1e, 0x63, 0xae, 0xe3, 0x66, 0x1e, 0x2f,
+	0x82, 0xd8, 0xcc, 0x3f, 0xdd, 0x81, 0xfd, 0x44, 0x08, 0x73, 0x8d, 0x50, 0xc3, 0x40, 0x68, 0x11,
+	0x20, 0x64, 0x38, 0x8f, 0xff, 0xcd, 0x61, 0xc1, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xaa,
+	0xcb, 0x16, 0x00, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_condition.pb.go b/googleapis/ads/googleads/v3/enums/product_condition.pb.go
new file mode 100644
index 0000000..51e6664
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_condition.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_condition.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the condition of a product offer.
+type ProductConditionEnum_ProductCondition int32
+
+const (
+	// Not specified.
+	ProductConditionEnum_UNSPECIFIED ProductConditionEnum_ProductCondition = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductConditionEnum_UNKNOWN ProductConditionEnum_ProductCondition = 1
+	// The product condition is new.
+	ProductConditionEnum_NEW ProductConditionEnum_ProductCondition = 3
+	// The product condition is refurbished.
+	ProductConditionEnum_REFURBISHED ProductConditionEnum_ProductCondition = 4
+	// The product condition is used.
+	ProductConditionEnum_USED ProductConditionEnum_ProductCondition = 5
+)
+
+var ProductConditionEnum_ProductCondition_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "NEW",
+	4: "REFURBISHED",
+	5: "USED",
+}
+
+var ProductConditionEnum_ProductCondition_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NEW":         3,
+	"REFURBISHED": 4,
+	"USED":        5,
+}
+
+func (x ProductConditionEnum_ProductCondition) String() string {
+	return proto.EnumName(ProductConditionEnum_ProductCondition_name, int32(x))
+}
+
+func (ProductConditionEnum_ProductCondition) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ac799eb3636d41b8, []int{0, 0}
+}
+
+// Condition of a product offer.
+type ProductConditionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductConditionEnum) Reset()         { *m = ProductConditionEnum{} }
+func (m *ProductConditionEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductConditionEnum) ProtoMessage()    {}
+func (*ProductConditionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ac799eb3636d41b8, []int{0}
+}
+
+func (m *ProductConditionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductConditionEnum.Unmarshal(m, b)
+}
+func (m *ProductConditionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductConditionEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductConditionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductConditionEnum.Merge(m, src)
+}
+func (m *ProductConditionEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductConditionEnum.Size(m)
+}
+func (m *ProductConditionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductConditionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductConditionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductConditionEnum_ProductCondition", ProductConditionEnum_ProductCondition_name, ProductConditionEnum_ProductCondition_value)
+	proto.RegisterType((*ProductConditionEnum)(nil), "google.ads.googleads.v3.enums.ProductConditionEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_condition.proto", fileDescriptor_ac799eb3636d41b8)
+}
+
+var fileDescriptor_ac799eb3636d41b8 = []byte{
+	// 309 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xbd, 0x6a, 0xf3, 0x30,
+	0x14, 0xfd, 0xf2, 0xf3, 0x35, 0x45, 0x19, 0x2a, 0x4c, 0xbb, 0x94, 0x66, 0x48, 0x1e, 0x40, 0x1a,
+	0x44, 0x17, 0x75, 0xb2, 0x13, 0x25, 0x0d, 0x05, 0xd7, 0x24, 0x75, 0x02, 0xc5, 0x50, 0xdc, 0x28,
+	0x08, 0x43, 0x2c, 0x19, 0xcb, 0xce, 0x03, 0x75, 0xec, 0xa3, 0xf4, 0x51, 0xf2, 0x14, 0x45, 0x52,
+	0xed, 0x21, 0xd0, 0x2e, 0xe2, 0x70, 0xcf, 0x8f, 0xce, 0xbd, 0xe0, 0x5e, 0x28, 0x25, 0x0e, 0x7b,
+	0x9c, 0x72, 0x8d, 0x1d, 0x34, 0xe8, 0x48, 0xf0, 0x5e, 0xd6, 0xb9, 0xc6, 0x45, 0xa9, 0x78, 0xbd,
+	0xab, 0xde, 0x76, 0x4a, 0xf2, 0xac, 0xca, 0x94, 0x44, 0x45, 0xa9, 0x2a, 0xe5, 0x8d, 0x9c, 0x16,
+	0xa5, 0x5c, 0xa3, 0xd6, 0x86, 0x8e, 0x04, 0x59, 0xdb, 0xed, 0x5d, 0x93, 0x5a, 0x64, 0x38, 0x95,
+	0x52, 0x55, 0xa9, 0xf1, 0x6a, 0x67, 0x9e, 0x1c, 0xc0, 0x75, 0xe4, 0x72, 0xa7, 0x4d, 0x2c, 0x93,
+	0x75, 0x3e, 0x79, 0x01, 0xf0, 0x7c, 0xee, 0x5d, 0x81, 0x61, 0x1c, 0xae, 0x23, 0x36, 0x5d, 0xce,
+	0x97, 0x6c, 0x06, 0xff, 0x79, 0x43, 0x30, 0x88, 0xc3, 0xa7, 0xf0, 0x79, 0x1b, 0xc2, 0x8e, 0x37,
+	0x00, 0xbd, 0x90, 0x6d, 0x61, 0xcf, 0xc8, 0x56, 0x6c, 0x1e, 0xaf, 0x82, 0xe5, 0xfa, 0x91, 0xcd,
+	0x60, 0xdf, 0xbb, 0x04, 0xfd, 0x78, 0xcd, 0x66, 0xf0, 0x7f, 0x70, 0xea, 0x80, 0xf1, 0x4e, 0xe5,
+	0xe8, 0xcf, 0xc6, 0xc1, 0xcd, 0xf9, 0xcf, 0x91, 0xa9, 0x1a, 0x75, 0x5e, 0x83, 0x1f, 0x9f, 0x50,
+	0x87, 0x54, 0x0a, 0xa4, 0x4a, 0x81, 0xc5, 0x5e, 0xda, 0x45, 0x9a, 0x83, 0x15, 0x99, 0xfe, 0xe5,
+	0x7e, 0x0f, 0xf6, 0xfd, 0xe8, 0xf6, 0x16, 0xbe, 0xff, 0xd9, 0x1d, 0x2d, 0x5c, 0x94, 0xcf, 0x35,
+	0x72, 0xd0, 0xa0, 0x0d, 0x41, 0x66, 0x7b, 0xfd, 0xd5, 0xf0, 0x89, 0xcf, 0x75, 0xd2, 0xf2, 0xc9,
+	0x86, 0x24, 0x96, 0x3f, 0x75, 0xc7, 0x6e, 0x48, 0xa9, 0xcf, 0x35, 0xa5, 0xad, 0x82, 0xd2, 0x0d,
+	0xa1, 0xd4, 0x6a, 0xde, 0x2f, 0x6c, 0x31, 0xf2, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x80, 0x3a, 0x94,
+	0xa1, 0xd7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_custom_attribute_index.pb.go b/googleapis/ads/googleads/v3/enums/product_custom_attribute_index.pb.go
new file mode 100644
index 0000000..f626363
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_custom_attribute_index.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_custom_attribute_index.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The index of the product custom attribute.
+type ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex int32
+
+const (
+	// Not specified.
+	ProductCustomAttributeIndexEnum_UNSPECIFIED ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductCustomAttributeIndexEnum_UNKNOWN ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 1
+	// First product custom attribute.
+	ProductCustomAttributeIndexEnum_INDEX0 ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 7
+	// Second product custom attribute.
+	ProductCustomAttributeIndexEnum_INDEX1 ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 8
+	// Third product custom attribute.
+	ProductCustomAttributeIndexEnum_INDEX2 ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 9
+	// Fourth product custom attribute.
+	ProductCustomAttributeIndexEnum_INDEX3 ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 10
+	// Fifth product custom attribute.
+	ProductCustomAttributeIndexEnum_INDEX4 ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex = 11
+)
+
+var ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	7:  "INDEX0",
+	8:  "INDEX1",
+	9:  "INDEX2",
+	10: "INDEX3",
+	11: "INDEX4",
+}
+
+var ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INDEX0":      7,
+	"INDEX1":      8,
+	"INDEX2":      9,
+	"INDEX3":      10,
+	"INDEX4":      11,
+}
+
+func (x ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex) String() string {
+	return proto.EnumName(ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex_name, int32(x))
+}
+
+func (ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_80f002e0af7a25fd, []int{0, 0}
+}
+
+// Container for enum describing the index of the product custom attribute.
+type ProductCustomAttributeIndexEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductCustomAttributeIndexEnum) Reset()         { *m = ProductCustomAttributeIndexEnum{} }
+func (m *ProductCustomAttributeIndexEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductCustomAttributeIndexEnum) ProtoMessage()    {}
+func (*ProductCustomAttributeIndexEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80f002e0af7a25fd, []int{0}
+}
+
+func (m *ProductCustomAttributeIndexEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductCustomAttributeIndexEnum.Unmarshal(m, b)
+}
+func (m *ProductCustomAttributeIndexEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductCustomAttributeIndexEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductCustomAttributeIndexEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductCustomAttributeIndexEnum.Merge(m, src)
+}
+func (m *ProductCustomAttributeIndexEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductCustomAttributeIndexEnum.Size(m)
+}
+func (m *ProductCustomAttributeIndexEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductCustomAttributeIndexEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductCustomAttributeIndexEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex", ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex_name, ProductCustomAttributeIndexEnum_ProductCustomAttributeIndex_value)
+	proto.RegisterType((*ProductCustomAttributeIndexEnum)(nil), "google.ads.googleads.v3.enums.ProductCustomAttributeIndexEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_custom_attribute_index.proto", fileDescriptor_80f002e0af7a25fd)
+}
+
+var fileDescriptor_80f002e0af7a25fd = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xb1, 0x4e, 0xf3, 0x30,
+	0x14, 0x85, 0xff, 0xf4, 0x97, 0x5a, 0x70, 0x07, 0xac, 0x8c, 0x40, 0x05, 0xed, 0x03, 0x38, 0x80,
+	0x99, 0xcc, 0x94, 0xb6, 0xa1, 0x8a, 0x90, 0x42, 0x24, 0xd4, 0x82, 0x50, 0xa4, 0x2a, 0xad, 0x23,
+	0x2b, 0x52, 0x63, 0x47, 0xb1, 0x53, 0x78, 0x16, 0x46, 0x46, 0x1e, 0x85, 0x47, 0x61, 0x67, 0x47,
+	0xb1, 0x89, 0x37, 0xb2, 0x44, 0x9f, 0x72, 0xef, 0x3d, 0xe7, 0xde, 0x63, 0x30, 0x65, 0x42, 0xb0,
+	0x5d, 0xe6, 0xa5, 0x54, 0x7a, 0x06, 0x1b, 0xda, 0x63, 0x2f, 0xe3, 0x75, 0x21, 0xbd, 0xb2, 0x12,
+	0xb4, 0xde, 0xaa, 0xf5, 0xb6, 0x96, 0x4a, 0x14, 0xeb, 0x54, 0xa9, 0x2a, 0xdf, 0xd4, 0x2a, 0x5b,
+	0xe7, 0x9c, 0x66, 0xaf, 0xa8, 0xac, 0x84, 0x12, 0xee, 0xc8, 0x0c, 0xa2, 0x94, 0x4a, 0x64, 0x35,
+	0xd0, 0x1e, 0x23, 0xad, 0x71, 0x7c, 0xda, 0x5a, 0x94, 0xb9, 0x97, 0x72, 0x2e, 0x54, 0xaa, 0x72,
+	0xc1, 0xa5, 0x19, 0x9e, 0xbc, 0x39, 0xe0, 0x2c, 0x36, 0x2e, 0x33, 0x6d, 0xe2, 0xb7, 0x1e, 0x61,
+	0x63, 0x11, 0xf0, 0xba, 0x98, 0xbc, 0x80, 0x93, 0x8e, 0x16, 0xf7, 0x08, 0x0c, 0x97, 0xd1, 0x43,
+	0x1c, 0xcc, 0xc2, 0xdb, 0x30, 0x98, 0xc3, 0x7f, 0xee, 0x10, 0x0c, 0x96, 0xd1, 0x5d, 0x74, 0xff,
+	0x18, 0x41, 0xc7, 0x05, 0xa0, 0x1f, 0x46, 0xf3, 0xe0, 0xe9, 0x02, 0x0e, 0x2c, 0x5f, 0xc2, 0x03,
+	0xcb, 0x57, 0xf0, 0xd0, 0x32, 0x86, 0xc0, 0xf2, 0x35, 0x1c, 0x4e, 0xbf, 0x1d, 0x30, 0xde, 0x8a,
+	0x02, 0x75, 0x1e, 0x38, 0x3d, 0xef, 0x58, 0x2e, 0x6e, 0x8e, 0x8c, 0x9d, 0xe7, 0xdf, 0x9c, 0x11,
+	0x13, 0xbb, 0x94, 0x33, 0x24, 0x2a, 0xe6, 0xb1, 0x8c, 0xeb, 0x08, 0xda, 0xdc, 0xcb, 0x5c, 0xfe,
+	0xf1, 0x0c, 0x37, 0xfa, 0xfb, 0xde, 0xfb, 0xbf, 0xf0, 0xfd, 0x8f, 0xde, 0x68, 0x61, 0xa4, 0x7c,
+	0x2a, 0x91, 0xc1, 0x86, 0x56, 0x18, 0x35, 0x59, 0xc9, 0xcf, 0xb6, 0x9e, 0xf8, 0x54, 0x26, 0xb6,
+	0x9e, 0xac, 0x70, 0xa2, 0xeb, 0x5f, 0xbd, 0xb1, 0xf9, 0x49, 0x88, 0x4f, 0x25, 0x21, 0xb6, 0x83,
+	0x90, 0x15, 0x26, 0x44, 0xf7, 0x6c, 0xfa, 0x7a, 0x31, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb1,
+	0xf0, 0x6e, 0xe3, 0x1e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/product_type_level.pb.go b/googleapis/ads/googleads/v3/enums/product_type_level.pb.go
new file mode 100644
index 0000000..994385a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/product_type_level.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/product_type_level.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the level of the type of a product offer.
+type ProductTypeLevelEnum_ProductTypeLevel int32
+
+const (
+	// Not specified.
+	ProductTypeLevelEnum_UNSPECIFIED ProductTypeLevelEnum_ProductTypeLevel = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductTypeLevelEnum_UNKNOWN ProductTypeLevelEnum_ProductTypeLevel = 1
+	// Level 1.
+	ProductTypeLevelEnum_LEVEL1 ProductTypeLevelEnum_ProductTypeLevel = 7
+	// Level 2.
+	ProductTypeLevelEnum_LEVEL2 ProductTypeLevelEnum_ProductTypeLevel = 8
+	// Level 3.
+	ProductTypeLevelEnum_LEVEL3 ProductTypeLevelEnum_ProductTypeLevel = 9
+	// Level 4.
+	ProductTypeLevelEnum_LEVEL4 ProductTypeLevelEnum_ProductTypeLevel = 10
+	// Level 5.
+	ProductTypeLevelEnum_LEVEL5 ProductTypeLevelEnum_ProductTypeLevel = 11
+)
+
+var ProductTypeLevelEnum_ProductTypeLevel_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	7:  "LEVEL1",
+	8:  "LEVEL2",
+	9:  "LEVEL3",
+	10: "LEVEL4",
+	11: "LEVEL5",
+}
+
+var ProductTypeLevelEnum_ProductTypeLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"LEVEL1":      7,
+	"LEVEL2":      8,
+	"LEVEL3":      9,
+	"LEVEL4":      10,
+	"LEVEL5":      11,
+}
+
+func (x ProductTypeLevelEnum_ProductTypeLevel) String() string {
+	return proto.EnumName(ProductTypeLevelEnum_ProductTypeLevel_name, int32(x))
+}
+
+func (ProductTypeLevelEnum_ProductTypeLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b23b5c7ad7feb34b, []int{0, 0}
+}
+
+// Level of the type of a product offer.
+type ProductTypeLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductTypeLevelEnum) Reset()         { *m = ProductTypeLevelEnum{} }
+func (m *ProductTypeLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductTypeLevelEnum) ProtoMessage()    {}
+func (*ProductTypeLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b23b5c7ad7feb34b, []int{0}
+}
+
+func (m *ProductTypeLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductTypeLevelEnum.Unmarshal(m, b)
+}
+func (m *ProductTypeLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductTypeLevelEnum.Marshal(b, m, deterministic)
+}
+func (m *ProductTypeLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductTypeLevelEnum.Merge(m, src)
+}
+func (m *ProductTypeLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductTypeLevelEnum.Size(m)
+}
+func (m *ProductTypeLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductTypeLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductTypeLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProductTypeLevelEnum_ProductTypeLevel", ProductTypeLevelEnum_ProductTypeLevel_name, ProductTypeLevelEnum_ProductTypeLevel_value)
+	proto.RegisterType((*ProductTypeLevelEnum)(nil), "google.ads.googleads.v3.enums.ProductTypeLevelEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/product_type_level.proto", fileDescriptor_b23b5c7ad7feb34b)
+}
+
+var fileDescriptor_b23b5c7ad7feb34b = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0xff, 0xe9, 0x0f, 0xad, 0xa6, 0x0b, 0xc3, 0xa0, 0x1b, 0xb1, 0x8b, 0xf6, 0x01, 0x12,
+	0x34, 0xea, 0x22, 0xae, 0xa6, 0x3a, 0x96, 0x62, 0x19, 0x07, 0xb4, 0x23, 0xc8, 0x40, 0x19, 0x9b,
+	0x10, 0x0a, 0xd3, 0x24, 0x34, 0xd3, 0x42, 0xf7, 0x3e, 0x89, 0x4b, 0x1f, 0xc5, 0x47, 0xe9, 0x53,
+	0xc8, 0x24, 0x4e, 0x16, 0x05, 0xdd, 0x84, 0x8f, 0xdc, 0x7b, 0x0e, 0xf7, 0x1c, 0x70, 0x2d, 0x94,
+	0x12, 0x25, 0xc7, 0x05, 0x33, 0xd8, 0x61, 0x4d, 0x1b, 0x82, 0xb9, 0x5c, 0x2f, 0x0d, 0xd6, 0x2b,
+	0xc5, 0xd6, 0xf3, 0x6a, 0x56, 0x6d, 0x35, 0x9f, 0x95, 0x7c, 0xc3, 0x4b, 0xa4, 0x57, 0xaa, 0x52,
+	0x61, 0xcf, 0x2d, 0xa3, 0x82, 0x19, 0xe4, 0x75, 0x68, 0x43, 0x90, 0xd5, 0x9d, 0x9e, 0x35, 0xb6,
+	0x7a, 0x81, 0x0b, 0x29, 0x55, 0x55, 0x54, 0x0b, 0x25, 0x8d, 0x13, 0x0f, 0xde, 0x03, 0x70, 0x9c,
+	0x3a, 0xe7, 0xe7, 0xad, 0xe6, 0x93, 0xda, 0x37, 0x96, 0xeb, 0xe5, 0xa0, 0x04, 0x70, 0xff, 0x3f,
+	0x3c, 0x02, 0xdd, 0x69, 0xf2, 0x94, 0xc6, 0xb7, 0xe3, 0xfb, 0x71, 0x7c, 0x07, 0xff, 0x85, 0x5d,
+	0xd0, 0x99, 0x26, 0x0f, 0xc9, 0xe3, 0x4b, 0x02, 0x83, 0x10, 0x80, 0xf6, 0x24, 0xce, 0xe2, 0xc9,
+	0x39, 0xec, 0x78, 0xbe, 0x80, 0x07, 0x9e, 0x09, 0x3c, 0xf4, 0x7c, 0x09, 0x81, 0xe7, 0x2b, 0xd8,
+	0x1d, 0xee, 0x02, 0xd0, 0x9f, 0xab, 0x25, 0xfa, 0x33, 0xca, 0xf0, 0x64, 0xff, 0xa2, 0xb4, 0xce,
+	0x90, 0x06, 0xaf, 0xc3, 0x1f, 0x9d, 0x50, 0x65, 0x21, 0x05, 0x52, 0x2b, 0x81, 0x05, 0x97, 0x36,
+	0x61, 0x53, 0xa5, 0x5e, 0x98, 0x5f, 0x9a, 0xbd, 0xb1, 0xef, 0x47, 0xeb, 0xff, 0x28, 0x8a, 0x3e,
+	0x5b, 0xbd, 0x91, 0xb3, 0x8a, 0x98, 0x41, 0x0e, 0x6b, 0xca, 0x08, 0xaa, 0x5b, 0x31, 0x5f, 0xcd,
+	0x3c, 0x8f, 0x98, 0xc9, 0xfd, 0x3c, 0xcf, 0x48, 0x6e, 0xe7, 0xbb, 0x56, 0xdf, 0x7d, 0x52, 0x1a,
+	0x31, 0x43, 0xa9, 0xdf, 0xa0, 0x34, 0x23, 0x94, 0xda, 0x9d, 0xb7, 0xb6, 0x3d, 0x8c, 0x7c, 0x07,
+	0x00, 0x00, 0xff, 0xff, 0xf5, 0xca, 0x80, 0x46, 0xf1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/promotion_extension_discount_modifier.pb.go b/googleapis/ads/googleads/v3/enums/promotion_extension_discount_modifier.pb.go
new file mode 100644
index 0000000..141527d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/promotion_extension_discount_modifier.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/promotion_extension_discount_modifier.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A promotion extension discount modifier.
+type PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier int32
+
+const (
+	// Not specified.
+	PromotionExtensionDiscountModifierEnum_UNSPECIFIED PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier = 0
+	// Used for return value only. Represents value unknown in this version.
+	PromotionExtensionDiscountModifierEnum_UNKNOWN PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier = 1
+	// 'Up to'.
+	PromotionExtensionDiscountModifierEnum_UP_TO PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier = 2
+)
+
+var PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UP_TO",
+}
+
+var PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UP_TO":       2,
+}
+
+func (x PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier) String() string {
+	return proto.EnumName(PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier_name, int32(x))
+}
+
+func (PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7b6cacf196203e5e, []int{0, 0}
+}
+
+// Container for enum describing possible a promotion extension
+// discount modifier.
+type PromotionExtensionDiscountModifierEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromotionExtensionDiscountModifierEnum) Reset() {
+	*m = PromotionExtensionDiscountModifierEnum{}
+}
+func (m *PromotionExtensionDiscountModifierEnum) String() string { return proto.CompactTextString(m) }
+func (*PromotionExtensionDiscountModifierEnum) ProtoMessage()    {}
+func (*PromotionExtensionDiscountModifierEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7b6cacf196203e5e, []int{0}
+}
+
+func (m *PromotionExtensionDiscountModifierEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromotionExtensionDiscountModifierEnum.Unmarshal(m, b)
+}
+func (m *PromotionExtensionDiscountModifierEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromotionExtensionDiscountModifierEnum.Marshal(b, m, deterministic)
+}
+func (m *PromotionExtensionDiscountModifierEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromotionExtensionDiscountModifierEnum.Merge(m, src)
+}
+func (m *PromotionExtensionDiscountModifierEnum) XXX_Size() int {
+	return xxx_messageInfo_PromotionExtensionDiscountModifierEnum.Size(m)
+}
+func (m *PromotionExtensionDiscountModifierEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromotionExtensionDiscountModifierEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromotionExtensionDiscountModifierEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier", PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier_name, PromotionExtensionDiscountModifierEnum_PromotionExtensionDiscountModifier_value)
+	proto.RegisterType((*PromotionExtensionDiscountModifierEnum)(nil), "google.ads.googleads.v3.enums.PromotionExtensionDiscountModifierEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/promotion_extension_discount_modifier.proto", fileDescriptor_7b6cacf196203e5e)
+}
+
+var fileDescriptor_7b6cacf196203e5e = []byte{
+	// 312 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xb1, 0x4e, 0xfb, 0x30,
+	0x10, 0xc6, 0xff, 0xcd, 0x5f, 0x80, 0x70, 0x07, 0xaa, 0x8c, 0x88, 0x0e, 0xed, 0x00, 0x9b, 0x3d,
+	0x78, 0x33, 0x53, 0x4a, 0x43, 0x55, 0xa1, 0xa6, 0x91, 0xa0, 0x45, 0x42, 0x91, 0xaa, 0x50, 0x1b,
+	0xcb, 0x52, 0xe3, 0x8b, 0xe2, 0xb4, 0xf0, 0x3c, 0x8c, 0x3c, 0x0a, 0x8f, 0xc2, 0x33, 0x30, 0x20,
+	0xdb, 0x4d, 0x36, 0xe8, 0x62, 0x7d, 0xf2, 0xdd, 0x7d, 0xbf, 0xbb, 0x0f, 0x4d, 0x25, 0x80, 0xdc,
+	0x08, 0x92, 0x73, 0x43, 0xbc, 0xb4, 0x6a, 0x47, 0x89, 0xd0, 0xdb, 0xc2, 0x90, 0xb2, 0x82, 0x02,
+	0x6a, 0x05, 0x7a, 0x25, 0xde, 0x6a, 0xa1, 0x8d, 0x55, 0x5c, 0x99, 0x35, 0x6c, 0x75, 0xbd, 0x2a,
+	0x80, 0xab, 0x17, 0x25, 0x2a, 0x5c, 0x56, 0x50, 0x43, 0xd8, 0xf7, 0xf3, 0x38, 0xe7, 0x06, 0xb7,
+	0x56, 0x78, 0x47, 0xb1, 0xb3, 0x3a, 0xbf, 0x68, 0x48, 0xa5, 0x22, 0xb9, 0xd6, 0x50, 0xe7, 0xd6,
+	0xd7, 0xf8, 0xe1, 0xe1, 0x2b, 0xba, 0x4c, 0x1b, 0x56, 0xdc, 0xa0, 0xc6, 0x7b, 0xd2, 0x6c, 0x0f,
+	0x8a, 0xf5, 0xb6, 0x18, 0xce, 0xd0, 0xf0, 0x70, 0x67, 0x78, 0x86, 0xba, 0x8b, 0xe4, 0x3e, 0x8d,
+	0x6f, 0xa6, 0xb7, 0xd3, 0x78, 0xdc, 0xfb, 0x17, 0x76, 0xd1, 0xc9, 0x22, 0xb9, 0x4b, 0xe6, 0x8f,
+	0x49, 0xaf, 0x13, 0x9e, 0xa2, 0xa3, 0x45, 0xba, 0x7a, 0x98, 0xf7, 0x82, 0xd1, 0x77, 0x07, 0x0d,
+	0xd6, 0x50, 0xe0, 0x3f, 0x97, 0x1f, 0x5d, 0x1d, 0x46, 0xa6, 0xf6, 0x8e, 0xb4, 0xf3, 0x34, 0xda,
+	0x3b, 0x49, 0xd8, 0xe4, 0x5a, 0x62, 0xa8, 0x24, 0x91, 0x42, 0xbb, 0x2b, 0x9b, 0x84, 0x4b, 0x65,
+	0x7e, 0x09, 0xfc, 0xda, 0xbd, 0xef, 0xc1, 0xff, 0x49, 0x14, 0x7d, 0x04, 0xfd, 0x89, 0xb7, 0x8a,
+	0xb8, 0xc1, 0x5e, 0x5a, 0xb5, 0xa4, 0xd8, 0x06, 0x61, 0x3e, 0x9b, 0x7a, 0x16, 0x71, 0x93, 0xb5,
+	0xf5, 0x6c, 0x49, 0x33, 0x57, 0xff, 0x0a, 0x06, 0xfe, 0x93, 0xb1, 0x88, 0x1b, 0xc6, 0xda, 0x0e,
+	0xc6, 0x96, 0x94, 0x31, 0xd7, 0xf3, 0x7c, 0xec, 0x16, 0xa3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x83, 0x52, 0x77, 0xd7, 0x08, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/promotion_extension_occasion.pb.go b/googleapis/ads/googleads/v3/enums/promotion_extension_occasion.pb.go
new file mode 100644
index 0000000..0a42988
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/promotion_extension_occasion.pb.go
@@ -0,0 +1,288 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/promotion_extension_occasion.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A promotion extension occasion.
+type PromotionExtensionOccasionEnum_PromotionExtensionOccasion int32
+
+const (
+	// Not specified.
+	PromotionExtensionOccasionEnum_UNSPECIFIED PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 0
+	// Used for return value only. Represents value unknown in this version.
+	PromotionExtensionOccasionEnum_UNKNOWN PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 1
+	// New Year's.
+	PromotionExtensionOccasionEnum_NEW_YEARS PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 2
+	// Chinese New Year.
+	PromotionExtensionOccasionEnum_CHINESE_NEW_YEAR PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 3
+	// Valentine's Day.
+	PromotionExtensionOccasionEnum_VALENTINES_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 4
+	// Easter.
+	PromotionExtensionOccasionEnum_EASTER PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 5
+	// Mother's Day.
+	PromotionExtensionOccasionEnum_MOTHERS_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 6
+	// Father's Day.
+	PromotionExtensionOccasionEnum_FATHERS_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 7
+	// Labor Day.
+	PromotionExtensionOccasionEnum_LABOR_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 8
+	// Back To School.
+	PromotionExtensionOccasionEnum_BACK_TO_SCHOOL PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 9
+	// Halloween.
+	PromotionExtensionOccasionEnum_HALLOWEEN PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 10
+	// Black Friday.
+	PromotionExtensionOccasionEnum_BLACK_FRIDAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 11
+	// Cyber Monday.
+	PromotionExtensionOccasionEnum_CYBER_MONDAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 12
+	// Christmas.
+	PromotionExtensionOccasionEnum_CHRISTMAS PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 13
+	// Boxing Day.
+	PromotionExtensionOccasionEnum_BOXING_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 14
+	// Independence Day in any country.
+	PromotionExtensionOccasionEnum_INDEPENDENCE_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 15
+	// National Day in any country.
+	PromotionExtensionOccasionEnum_NATIONAL_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 16
+	// End of any season.
+	PromotionExtensionOccasionEnum_END_OF_SEASON PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 17
+	// Winter Sale.
+	PromotionExtensionOccasionEnum_WINTER_SALE PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 18
+	// Summer sale.
+	PromotionExtensionOccasionEnum_SUMMER_SALE PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 19
+	// Fall Sale.
+	PromotionExtensionOccasionEnum_FALL_SALE PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 20
+	// Spring Sale.
+	PromotionExtensionOccasionEnum_SPRING_SALE PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 21
+	// Ramadan.
+	PromotionExtensionOccasionEnum_RAMADAN PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 22
+	// Eid al-Fitr.
+	PromotionExtensionOccasionEnum_EID_AL_FITR PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 23
+	// Eid al-Adha.
+	PromotionExtensionOccasionEnum_EID_AL_ADHA PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 24
+	// Singles Day.
+	PromotionExtensionOccasionEnum_SINGLES_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 25
+	// Women's Day.
+	PromotionExtensionOccasionEnum_WOMENS_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 26
+	// Holi.
+	PromotionExtensionOccasionEnum_HOLI PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 27
+	// Parent's Day.
+	PromotionExtensionOccasionEnum_PARENTS_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 28
+	// St. Nicholas Day.
+	PromotionExtensionOccasionEnum_ST_NICHOLAS_DAY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 29
+	// Carnival.
+	PromotionExtensionOccasionEnum_CARNIVAL PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 30
+	// Epiphany, also known as Three Kings' Day.
+	PromotionExtensionOccasionEnum_EPIPHANY PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 31
+	// Rosh Hashanah.
+	PromotionExtensionOccasionEnum_ROSH_HASHANAH PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 32
+	// Passover.
+	PromotionExtensionOccasionEnum_PASSOVER PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 33
+	// Hanukkah.
+	PromotionExtensionOccasionEnum_HANUKKAH PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 34
+	// Diwali.
+	PromotionExtensionOccasionEnum_DIWALI PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 35
+	// Navratri.
+	PromotionExtensionOccasionEnum_NAVRATRI PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 36
+	// Available in Thai: Songkran.
+	PromotionExtensionOccasionEnum_SONGKRAN PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 37
+	// Available in Japanese: Year-end Gift.
+	PromotionExtensionOccasionEnum_YEAR_END_GIFT PromotionExtensionOccasionEnum_PromotionExtensionOccasion = 38
+)
+
+var PromotionExtensionOccasionEnum_PromotionExtensionOccasion_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "NEW_YEARS",
+	3:  "CHINESE_NEW_YEAR",
+	4:  "VALENTINES_DAY",
+	5:  "EASTER",
+	6:  "MOTHERS_DAY",
+	7:  "FATHERS_DAY",
+	8:  "LABOR_DAY",
+	9:  "BACK_TO_SCHOOL",
+	10: "HALLOWEEN",
+	11: "BLACK_FRIDAY",
+	12: "CYBER_MONDAY",
+	13: "CHRISTMAS",
+	14: "BOXING_DAY",
+	15: "INDEPENDENCE_DAY",
+	16: "NATIONAL_DAY",
+	17: "END_OF_SEASON",
+	18: "WINTER_SALE",
+	19: "SUMMER_SALE",
+	20: "FALL_SALE",
+	21: "SPRING_SALE",
+	22: "RAMADAN",
+	23: "EID_AL_FITR",
+	24: "EID_AL_ADHA",
+	25: "SINGLES_DAY",
+	26: "WOMENS_DAY",
+	27: "HOLI",
+	28: "PARENTS_DAY",
+	29: "ST_NICHOLAS_DAY",
+	30: "CARNIVAL",
+	31: "EPIPHANY",
+	32: "ROSH_HASHANAH",
+	33: "PASSOVER",
+	34: "HANUKKAH",
+	35: "DIWALI",
+	36: "NAVRATRI",
+	37: "SONGKRAN",
+	38: "YEAR_END_GIFT",
+}
+
+var PromotionExtensionOccasionEnum_PromotionExtensionOccasion_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"NEW_YEARS":        2,
+	"CHINESE_NEW_YEAR": 3,
+	"VALENTINES_DAY":   4,
+	"EASTER":           5,
+	"MOTHERS_DAY":      6,
+	"FATHERS_DAY":      7,
+	"LABOR_DAY":        8,
+	"BACK_TO_SCHOOL":   9,
+	"HALLOWEEN":        10,
+	"BLACK_FRIDAY":     11,
+	"CYBER_MONDAY":     12,
+	"CHRISTMAS":        13,
+	"BOXING_DAY":       14,
+	"INDEPENDENCE_DAY": 15,
+	"NATIONAL_DAY":     16,
+	"END_OF_SEASON":    17,
+	"WINTER_SALE":      18,
+	"SUMMER_SALE":      19,
+	"FALL_SALE":        20,
+	"SPRING_SALE":      21,
+	"RAMADAN":          22,
+	"EID_AL_FITR":      23,
+	"EID_AL_ADHA":      24,
+	"SINGLES_DAY":      25,
+	"WOMENS_DAY":       26,
+	"HOLI":             27,
+	"PARENTS_DAY":      28,
+	"ST_NICHOLAS_DAY":  29,
+	"CARNIVAL":         30,
+	"EPIPHANY":         31,
+	"ROSH_HASHANAH":    32,
+	"PASSOVER":         33,
+	"HANUKKAH":         34,
+	"DIWALI":           35,
+	"NAVRATRI":         36,
+	"SONGKRAN":         37,
+	"YEAR_END_GIFT":    38,
+}
+
+func (x PromotionExtensionOccasionEnum_PromotionExtensionOccasion) String() string {
+	return proto.EnumName(PromotionExtensionOccasionEnum_PromotionExtensionOccasion_name, int32(x))
+}
+
+func (PromotionExtensionOccasionEnum_PromotionExtensionOccasion) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8769a8b487cba8b6, []int{0, 0}
+}
+
+// Container for enum describing a promotion extension occasion.
+// For more information about the occasions please check:
+// https://support.google.com/google-ads/answer/7367521
+type PromotionExtensionOccasionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromotionExtensionOccasionEnum) Reset()         { *m = PromotionExtensionOccasionEnum{} }
+func (m *PromotionExtensionOccasionEnum) String() string { return proto.CompactTextString(m) }
+func (*PromotionExtensionOccasionEnum) ProtoMessage()    {}
+func (*PromotionExtensionOccasionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8769a8b487cba8b6, []int{0}
+}
+
+func (m *PromotionExtensionOccasionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromotionExtensionOccasionEnum.Unmarshal(m, b)
+}
+func (m *PromotionExtensionOccasionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromotionExtensionOccasionEnum.Marshal(b, m, deterministic)
+}
+func (m *PromotionExtensionOccasionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromotionExtensionOccasionEnum.Merge(m, src)
+}
+func (m *PromotionExtensionOccasionEnum) XXX_Size() int {
+	return xxx_messageInfo_PromotionExtensionOccasionEnum.Size(m)
+}
+func (m *PromotionExtensionOccasionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromotionExtensionOccasionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromotionExtensionOccasionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PromotionExtensionOccasionEnum_PromotionExtensionOccasion", PromotionExtensionOccasionEnum_PromotionExtensionOccasion_name, PromotionExtensionOccasionEnum_PromotionExtensionOccasion_value)
+	proto.RegisterType((*PromotionExtensionOccasionEnum)(nil), "google.ads.googleads.v3.enums.PromotionExtensionOccasionEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/promotion_extension_occasion.proto", fileDescriptor_8769a8b487cba8b6)
+}
+
+var fileDescriptor_8769a8b487cba8b6 = []byte{
+	// 669 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xcb, 0x6e, 0xdb, 0x3a,
+	0x10, 0xbd, 0x71, 0xde, 0xcc, 0x8b, 0x51, 0x72, 0x5f, 0xb9, 0x79, 0xdc, 0xe4, 0xde, 0x76, 0x29,
+	0x2f, 0xbc, 0x53, 0x37, 0x1d, 0x49, 0xb4, 0x45, 0x98, 0x1e, 0x0a, 0xa4, 0x6c, 0xd7, 0x85, 0x01,
+	0xc1, 0x8d, 0x0d, 0x23, 0x40, 0x2c, 0x19, 0x91, 0x13, 0xf4, 0x57, 0xba, 0xed, 0xb2, 0xdf, 0xd0,
+	0x2f, 0xe8, 0xa7, 0x74, 0xdd, 0x0f, 0x28, 0x46, 0x8a, 0xd3, 0x6e, 0xd2, 0x8d, 0x31, 0x73, 0xce,
+	0x99, 0x73, 0x4c, 0x8a, 0xc3, 0x5e, 0x4f, 0xf3, 0x7c, 0x7a, 0x3b, 0xa9, 0x8f, 0xc6, 0x45, 0xbd,
+	0x2a, 0xa9, 0x7a, 0x68, 0xd4, 0x27, 0xd9, 0xfd, 0xac, 0xa8, 0xcf, 0xef, 0xf2, 0x59, 0xbe, 0xb8,
+	0xc9, 0xb3, 0x74, 0xf2, 0x7e, 0x31, 0xc9, 0x0a, 0xaa, 0xf2, 0xeb, 0xeb, 0x11, 0x15, 0xee, 0xfc,
+	0x2e, 0x5f, 0xe4, 0xce, 0x59, 0x35, 0xe6, 0x8e, 0xc6, 0x85, 0xfb, 0xe4, 0xe0, 0x3e, 0x34, 0xdc,
+	0xd2, 0xe1, 0xe4, 0x74, 0x19, 0x30, 0xbf, 0xa9, 0x8f, 0xb2, 0x2c, 0x5f, 0x8c, 0xc8, 0xae, 0xa8,
+	0x86, 0xaf, 0x3e, 0xaf, 0xb3, 0xf3, 0x78, 0x99, 0x21, 0x96, 0x11, 0xfa, 0x31, 0x41, 0x64, 0xf7,
+	0xb3, 0xab, 0x0f, 0xeb, 0xec, 0xe4, 0x79, 0x89, 0x73, 0xc0, 0x76, 0xba, 0x68, 0x63, 0x11, 0xc8,
+	0xa6, 0x14, 0x21, 0xff, 0xcd, 0xd9, 0x61, 0x9b, 0x5d, 0x6c, 0xa3, 0xee, 0x23, 0x5f, 0x71, 0xf6,
+	0xd8, 0x36, 0x8a, 0x7e, 0x3a, 0x10, 0x60, 0x2c, 0xaf, 0x39, 0xc7, 0x8c, 0x07, 0x91, 0x44, 0x61,
+	0x45, 0xba, 0x84, 0xf9, 0xaa, 0xe3, 0xb0, 0xfd, 0x1e, 0x28, 0x81, 0x09, 0x31, 0x69, 0x08, 0x03,
+	0xbe, 0xe6, 0x30, 0xb6, 0x21, 0xc0, 0x26, 0xc2, 0xf0, 0x75, 0x8a, 0xe8, 0xe8, 0x24, 0x12, 0xa6,
+	0x22, 0x37, 0x08, 0x68, 0xc2, 0x0f, 0x60, 0x93, 0x62, 0x14, 0xf8, 0xda, 0x94, 0xed, 0x16, 0x19,
+	0xfa, 0x10, 0xb4, 0xd3, 0x44, 0xa7, 0x36, 0x88, 0xb4, 0x56, 0x7c, 0x9b, 0x24, 0x11, 0x28, 0xa5,
+	0xfb, 0x42, 0x20, 0x67, 0x0e, 0x67, 0xbb, 0xbe, 0x22, 0x4d, 0xd3, 0x48, 0x1a, 0xda, 0x21, 0x24,
+	0x18, 0xf8, 0xc2, 0xa4, 0x1d, 0x8d, 0x84, 0xec, 0xd2, 0x48, 0x10, 0x19, 0x69, 0x93, 0x0e, 0x58,
+	0xbe, 0xe7, 0xec, 0x33, 0xe6, 0xeb, 0x37, 0x12, 0x5b, 0x65, 0xca, 0x3e, 0x1d, 0x46, 0x62, 0x28,
+	0x62, 0x81, 0xa1, 0xc0, 0x40, 0x94, 0xe8, 0x01, 0xd9, 0x20, 0x24, 0x52, 0x23, 0xa8, 0x12, 0xe1,
+	0xce, 0x21, 0xdb, 0x13, 0x18, 0xa6, 0xba, 0x99, 0x5a, 0x01, 0x56, 0x23, 0x3f, 0xa4, 0x03, 0xf4,
+	0x25, 0x26, 0xc2, 0xa4, 0x16, 0x94, 0xe0, 0x0e, 0x01, 0xb6, 0xdb, 0xe9, 0x2c, 0x81, 0x23, 0xca,
+	0x6e, 0x82, 0x52, 0x55, 0x7b, 0x5c, 0xf2, 0xb1, 0xa1, 0xec, 0x12, 0xf8, 0x9d, 0x6e, 0xd9, 0x40,
+	0x07, 0x42, 0x40, 0xfe, 0x07, 0xb1, 0x42, 0x86, 0x29, 0xa8, 0xb4, 0x29, 0x13, 0xc3, 0xff, 0xfc,
+	0x09, 0x80, 0x30, 0x02, 0xfe, 0x57, 0x39, 0x2f, 0xb1, 0xa5, 0x1e, 0xef, 0xf7, 0x6f, 0x3a, 0x4c,
+	0x5f, 0x77, 0x04, 0x56, 0xfd, 0x89, 0xb3, 0xc5, 0xd6, 0x22, 0xad, 0x24, 0xff, 0x87, 0xa4, 0x31,
+	0x18, 0x81, 0x49, 0x45, 0x9d, 0x3a, 0x47, 0xec, 0xc0, 0x26, 0x29, 0xca, 0x20, 0xd2, 0x0a, 0x2a,
+	0xf0, 0xcc, 0xd9, 0x65, 0x5b, 0x01, 0x18, 0x94, 0x3d, 0x50, 0xfc, 0x9c, 0x3a, 0x11, 0xcb, 0x38,
+	0x02, 0x1c, 0xf0, 0x0b, 0x3a, 0xb0, 0xd1, 0x36, 0x4a, 0x23, 0xb0, 0x11, 0x20, 0x44, 0xfc, 0x5f,
+	0x12, 0xc4, 0x60, 0xad, 0xee, 0x09, 0xc3, 0x2f, 0xa9, 0x8b, 0x00, 0xbb, 0xed, 0x36, 0x44, 0xfc,
+	0x8a, 0x3e, 0x75, 0x28, 0xfb, 0xa0, 0x24, 0xff, 0x8f, 0x18, 0x84, 0x9e, 0x81, 0xc4, 0x48, 0xfe,
+	0x3f, 0x75, 0x56, 0x63, 0xab, 0x6d, 0x00, 0xf9, 0x0b, 0xb2, 0xa5, 0x07, 0x93, 0xd2, 0x65, 0xb6,
+	0x64, 0x33, 0xe1, 0x2f, 0xfd, 0x6f, 0x2b, 0xec, 0xf2, 0x3a, 0x9f, 0xb9, 0xbf, 0x5c, 0x01, 0xff,
+	0xe2, 0xf9, 0xe7, 0x1b, 0xd3, 0x16, 0xc4, 0x2b, 0x6f, 0xfd, 0x47, 0x87, 0x69, 0x7e, 0x3b, 0xca,
+	0xa6, 0x6e, 0x7e, 0x37, 0xad, 0x4f, 0x27, 0x59, 0xb9, 0x23, 0xcb, 0xb5, 0x9c, 0xdf, 0x14, 0xcf,
+	0x6c, 0xe9, 0xab, 0xf2, 0xf7, 0x63, 0x6d, 0xb5, 0x05, 0xf0, 0xa9, 0x76, 0xd6, 0xaa, 0xac, 0x60,
+	0x5c, 0xb8, 0x55, 0x49, 0x55, 0xaf, 0xe1, 0xd2, 0x36, 0x15, 0x5f, 0x96, 0xfc, 0x10, 0xc6, 0xc5,
+	0xf0, 0x89, 0x1f, 0xf6, 0x1a, 0xc3, 0x92, 0xff, 0x5a, 0xbb, 0xac, 0x40, 0xcf, 0x83, 0x71, 0xe1,
+	0x79, 0x4f, 0x0a, 0xcf, 0xeb, 0x35, 0x3c, 0xaf, 0xd4, 0xbc, 0xdb, 0x28, 0xff, 0x58, 0xe3, 0x7b,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0xc4, 0xe8, 0xc4, 0x3d, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/promotion_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/promotion_placeholder_field.pb.go
new file mode 100644
index 0000000..12c9ff8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/promotion_placeholder_field.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/promotion_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Promotion placeholder fields.
+type PromotionPlaceholderFieldEnum_PromotionPlaceholderField int32
+
+const (
+	// Not specified.
+	PromotionPlaceholderFieldEnum_UNSPECIFIED PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	PromotionPlaceholderFieldEnum_UNKNOWN PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 1
+	// Data Type: STRING. The text that appears on the ad when the extension is
+	// shown.
+	PromotionPlaceholderFieldEnum_PROMOTION_TARGET PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 2
+	// Data Type: STRING. Allows you to add "up to" phrase to the promotion,
+	// in case you have variable promotion rates.
+	PromotionPlaceholderFieldEnum_DISCOUNT_MODIFIER PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 3
+	// Data Type: INT64. Takes a value in micros, where 1 million micros
+	// represents 1%, and is shown as a percentage when rendered.
+	PromotionPlaceholderFieldEnum_PERCENT_OFF PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 4
+	// Data Type: MONEY. Requires a currency and an amount of money.
+	PromotionPlaceholderFieldEnum_MONEY_AMOUNT_OFF PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 5
+	// Data Type: STRING. A string that the user enters to get the discount.
+	PromotionPlaceholderFieldEnum_PROMOTION_CODE PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 6
+	// Data Type: MONEY. A minimum spend before the user qualifies for the
+	// promotion.
+	PromotionPlaceholderFieldEnum_ORDERS_OVER_AMOUNT PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 7
+	// Data Type: DATE. The start date of the promotion.
+	PromotionPlaceholderFieldEnum_PROMOTION_START PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 8
+	// Data Type: DATE. The end date of the promotion.
+	PromotionPlaceholderFieldEnum_PROMOTION_END PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 9
+	// Data Type: STRING. Describes the associated event for the promotion using
+	// one of the PromotionExtensionOccasion enum values, for example NEW_YEARS.
+	PromotionPlaceholderFieldEnum_OCCASION PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 10
+	// Data Type: URL_LIST. Final URLs to be used in the ad when using Upgraded
+	// URLs.
+	PromotionPlaceholderFieldEnum_FINAL_URLS PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 11
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	PromotionPlaceholderFieldEnum_FINAL_MOBILE_URLS PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 12
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	PromotionPlaceholderFieldEnum_TRACKING_URL PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 13
+	// Data Type: STRING. A string represented by a language code for the
+	// promotion.
+	PromotionPlaceholderFieldEnum_LANGUAGE PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 14
+	// Data Type: STRING. Final URL suffix for the ad when using parallel
+	// tracking.
+	PromotionPlaceholderFieldEnum_FINAL_URL_SUFFIX PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 15
+)
+
+var PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROMOTION_TARGET",
+	3:  "DISCOUNT_MODIFIER",
+	4:  "PERCENT_OFF",
+	5:  "MONEY_AMOUNT_OFF",
+	6:  "PROMOTION_CODE",
+	7:  "ORDERS_OVER_AMOUNT",
+	8:  "PROMOTION_START",
+	9:  "PROMOTION_END",
+	10: "OCCASION",
+	11: "FINAL_URLS",
+	12: "FINAL_MOBILE_URLS",
+	13: "TRACKING_URL",
+	14: "LANGUAGE",
+	15: "FINAL_URL_SUFFIX",
+}
+
+var PromotionPlaceholderFieldEnum_PromotionPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"PROMOTION_TARGET":   2,
+	"DISCOUNT_MODIFIER":  3,
+	"PERCENT_OFF":        4,
+	"MONEY_AMOUNT_OFF":   5,
+	"PROMOTION_CODE":     6,
+	"ORDERS_OVER_AMOUNT": 7,
+	"PROMOTION_START":    8,
+	"PROMOTION_END":      9,
+	"OCCASION":           10,
+	"FINAL_URLS":         11,
+	"FINAL_MOBILE_URLS":  12,
+	"TRACKING_URL":       13,
+	"LANGUAGE":           14,
+	"FINAL_URL_SUFFIX":   15,
+}
+
+func (x PromotionPlaceholderFieldEnum_PromotionPlaceholderField) String() string {
+	return proto.EnumName(PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name, int32(x))
+}
+
+func (PromotionPlaceholderFieldEnum_PromotionPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3144856f64c0e58c, []int{0, 0}
+}
+
+// Values for Promotion placeholder fields.
+type PromotionPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromotionPlaceholderFieldEnum) Reset()         { *m = PromotionPlaceholderFieldEnum{} }
+func (m *PromotionPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*PromotionPlaceholderFieldEnum) ProtoMessage()    {}
+func (*PromotionPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3144856f64c0e58c, []int{0}
+}
+
+func (m *PromotionPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromotionPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Size(m)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromotionPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromotionPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField", PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name, PromotionPlaceholderFieldEnum_PromotionPlaceholderField_value)
+	proto.RegisterType((*PromotionPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.PromotionPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/promotion_placeholder_field.proto", fileDescriptor_3144856f64c0e58c)
+}
+
+var fileDescriptor_3144856f64c0e58c = []byte{
+	// 474 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x6e, 0x9b, 0x40,
+	0x10, 0xc7, 0x6b, 0xd2, 0x26, 0xe9, 0xda, 0xb1, 0x37, 0xdb, 0x0f, 0xa9, 0x55, 0x5d, 0x29, 0x79,
+	0x00, 0x38, 0x70, 0xa3, 0x87, 0x6a, 0x0d, 0x0b, 0x42, 0x31, 0xbb, 0x68, 0x01, 0xf7, 0x43, 0x96,
+	0x56, 0x34, 0x50, 0x6a, 0x09, 0xb3, 0xc8, 0xeb, 0xe4, 0x81, 0x7a, 0xec, 0xa3, 0x54, 0x7d, 0x92,
+	0x1e, 0x7a, 0xe9, 0x0b, 0x54, 0x0b, 0xb1, 0x7d, 0x72, 0x2f, 0x68, 0xf8, 0xcf, 0x7f, 0x7e, 0x33,
+	0xda, 0x19, 0xf0, 0xbe, 0x92, 0xb2, 0xaa, 0x4b, 0x2b, 0x2f, 0x94, 0xd5, 0x87, 0x3a, 0xba, 0xb7,
+	0xad, 0xb2, 0xb9, 0x5b, 0x2b, 0xab, 0xdd, 0xc8, 0xb5, 0xdc, 0xae, 0x64, 0x23, 0xda, 0x3a, 0xbf,
+	0x2d, 0xbf, 0xc9, 0xba, 0x28, 0x37, 0xe2, 0xeb, 0xaa, 0xac, 0x0b, 0xb3, 0xdd, 0xc8, 0xad, 0x44,
+	0xd3, 0xbe, 0xca, 0xcc, 0x0b, 0x65, 0xee, 0x01, 0xe6, 0xbd, 0x6d, 0x76, 0x80, 0xd7, 0x6f, 0x76,
+	0xfc, 0x76, 0x65, 0xe5, 0x4d, 0x23, 0xb7, 0xb9, 0xa6, 0xa9, 0xbe, 0xf8, 0xfa, 0x8f, 0x01, 0xa6,
+	0xf1, 0xae, 0x45, 0x7c, 0xe8, 0xe0, 0xeb, 0x06, 0xa4, 0xb9, 0x5b, 0x5f, 0xff, 0x32, 0xc0, 0xab,
+	0xa3, 0x0e, 0x34, 0x01, 0xc3, 0x8c, 0x26, 0x31, 0x71, 0x43, 0x3f, 0x24, 0x1e, 0x7c, 0x84, 0x86,
+	0xe0, 0x2c, 0xa3, 0x37, 0x94, 0x7d, 0xa0, 0x70, 0x80, 0x9e, 0x03, 0x18, 0x73, 0x16, 0xb1, 0x34,
+	0x64, 0x54, 0xa4, 0x98, 0x07, 0x24, 0x85, 0x06, 0x7a, 0x01, 0x2e, 0xbd, 0x30, 0x71, 0x59, 0x46,
+	0x53, 0x11, 0x31, 0x4f, 0x57, 0x72, 0x78, 0xa2, 0x51, 0x31, 0xe1, 0x2e, 0xa1, 0xa9, 0x60, 0xbe,
+	0x0f, 0x1f, 0xeb, 0xea, 0x88, 0x51, 0xf2, 0x49, 0xe0, 0xa8, 0xf3, 0x6a, 0xf5, 0x09, 0x42, 0x60,
+	0x7c, 0x60, 0xba, 0xcc, 0x23, 0xf0, 0x14, 0xbd, 0x04, 0x88, 0x71, 0x8f, 0xf0, 0x44, 0xb0, 0x05,
+	0xe1, 0x0f, 0x7e, 0x78, 0x86, 0x9e, 0x81, 0xc9, 0xc1, 0x9b, 0xa4, 0x98, 0xa7, 0xf0, 0x1c, 0x5d,
+	0x82, 0x8b, 0x83, 0x48, 0xa8, 0x07, 0x9f, 0xa2, 0x11, 0x38, 0x67, 0xae, 0x8b, 0x93, 0x90, 0x51,
+	0x08, 0xd0, 0x18, 0x00, 0x3f, 0xa4, 0x78, 0x2e, 0x32, 0x3e, 0x4f, 0xe0, 0x50, 0xcf, 0xdb, 0xff,
+	0x47, 0x6c, 0x16, 0xce, 0x49, 0x2f, 0x8f, 0x10, 0x04, 0xa3, 0x94, 0x63, 0xf7, 0x26, 0xa4, 0x81,
+	0x96, 0xe0, 0x85, 0xc6, 0xcc, 0x31, 0x0d, 0x32, 0x1c, 0x10, 0x38, 0xd6, 0xe3, 0xef, 0x31, 0x22,
+	0xc9, 0x7c, 0x3f, 0xfc, 0x08, 0x27, 0xb3, 0xbf, 0x03, 0x70, 0x75, 0x2b, 0xd7, 0xe6, 0x7f, 0x97,
+	0x36, 0x7b, 0x7b, 0xf4, 0xc5, 0x63, 0xbd, 0xb6, 0x78, 0xf0, 0x79, 0xf6, 0x00, 0xa8, 0x64, 0x9d,
+	0x37, 0x95, 0x29, 0x37, 0x95, 0x55, 0x95, 0x4d, 0xb7, 0xd4, 0xdd, 0x19, 0xb5, 0x2b, 0x75, 0xe4,
+	0xaa, 0xde, 0x75, 0xdf, 0xef, 0xc6, 0x49, 0x80, 0xf1, 0x0f, 0x63, 0x1a, 0xf4, 0x28, 0x5c, 0x28,
+	0xb3, 0x0f, 0x75, 0xb4, 0xb0, 0x4d, 0xbd, 0x7f, 0xf5, 0x73, 0x97, 0x5f, 0xe2, 0x42, 0x2d, 0xf7,
+	0xf9, 0xe5, 0xc2, 0x5e, 0x76, 0xf9, 0xdf, 0xc6, 0x55, 0x2f, 0x3a, 0x0e, 0x2e, 0x94, 0xe3, 0xec,
+	0x1d, 0x8e, 0xb3, 0xb0, 0x1d, 0xa7, 0xf3, 0x7c, 0x39, 0xed, 0x06, 0xb3, 0xff, 0x05, 0x00, 0x00,
+	0xff, 0xff, 0xe8, 0x56, 0xe2, 0xac, 0xed, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/proximity_radius_units.pb.go b/googleapis/ads/googleads/v3/enums/proximity_radius_units.pb.go
new file mode 100644
index 0000000..d52022c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/proximity_radius_units.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/proximity_radius_units.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The unit of radius distance in proximity (e.g. MILES)
+type ProximityRadiusUnitsEnum_ProximityRadiusUnits int32
+
+const (
+	// Not specified.
+	ProximityRadiusUnitsEnum_UNSPECIFIED ProximityRadiusUnitsEnum_ProximityRadiusUnits = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProximityRadiusUnitsEnum_UNKNOWN ProximityRadiusUnitsEnum_ProximityRadiusUnits = 1
+	// Miles
+	ProximityRadiusUnitsEnum_MILES ProximityRadiusUnitsEnum_ProximityRadiusUnits = 2
+	// Kilometers
+	ProximityRadiusUnitsEnum_KILOMETERS ProximityRadiusUnitsEnum_ProximityRadiusUnits = 3
+)
+
+var ProximityRadiusUnitsEnum_ProximityRadiusUnits_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MILES",
+	3: "KILOMETERS",
+}
+
+var ProximityRadiusUnitsEnum_ProximityRadiusUnits_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MILES":       2,
+	"KILOMETERS":  3,
+}
+
+func (x ProximityRadiusUnitsEnum_ProximityRadiusUnits) String() string {
+	return proto.EnumName(ProximityRadiusUnitsEnum_ProximityRadiusUnits_name, int32(x))
+}
+
+func (ProximityRadiusUnitsEnum_ProximityRadiusUnits) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a987958cbc0f39f4, []int{0, 0}
+}
+
+// Container for enum describing unit of radius in proximity.
+type ProximityRadiusUnitsEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProximityRadiusUnitsEnum) Reset()         { *m = ProximityRadiusUnitsEnum{} }
+func (m *ProximityRadiusUnitsEnum) String() string { return proto.CompactTextString(m) }
+func (*ProximityRadiusUnitsEnum) ProtoMessage()    {}
+func (*ProximityRadiusUnitsEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a987958cbc0f39f4, []int{0}
+}
+
+func (m *ProximityRadiusUnitsEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Unmarshal(m, b)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Marshal(b, m, deterministic)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProximityRadiusUnitsEnum.Merge(m, src)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Size() int {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Size(m)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProximityRadiusUnitsEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProximityRadiusUnitsEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits", ProximityRadiusUnitsEnum_ProximityRadiusUnits_name, ProximityRadiusUnitsEnum_ProximityRadiusUnits_value)
+	proto.RegisterType((*ProximityRadiusUnitsEnum)(nil), "google.ads.googleads.v3.enums.ProximityRadiusUnitsEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/proximity_radius_units.proto", fileDescriptor_a987958cbc0f39f4)
+}
+
+var fileDescriptor_a987958cbc0f39f4 = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x87, 0x8a, 0x19, 0x68, 0x29, 0x1e, 0x54, 0xdc, 0x61, 0x7b, 0x80, 0xe4, 0x90,
+	0x5b, 0x3c, 0x75, 0x1a, 0x47, 0xd9, 0xd6, 0x95, 0xcd, 0x4d, 0x90, 0xc2, 0x88, 0x66, 0x84, 0xe0,
+	0x9a, 0x94, 0xa6, 0x1d, 0xfa, 0x3a, 0x1e, 0x7d, 0x14, 0x1f, 0xc5, 0x83, 0xcf, 0x20, 0x4d, 0xd7,
+	0x9e, 0xa6, 0x97, 0xf2, 0xd1, 0xef, 0xff, 0xfd, 0xf2, 0xfd, 0xff, 0x80, 0x08, 0xad, 0xc5, 0x66,
+	0x8d, 0x18, 0x37, 0xa8, 0x92, 0xa5, 0xda, 0x62, 0xb4, 0x56, 0x45, 0x62, 0x50, 0x9a, 0xe9, 0x37,
+	0x99, 0xc8, 0xfc, 0x7d, 0x95, 0x31, 0x2e, 0x0b, 0xb3, 0x2a, 0x94, 0xcc, 0x0d, 0x4c, 0x33, 0x9d,
+	0x6b, 0xaf, 0x5b, 0x05, 0x20, 0xe3, 0x06, 0x36, 0x59, 0xb8, 0xc5, 0xd0, 0x66, 0xaf, 0xae, 0x6b,
+	0x74, 0x2a, 0x11, 0x53, 0x4a, 0xe7, 0x2c, 0x97, 0x5a, 0xed, 0xc2, 0xfd, 0x57, 0x70, 0x11, 0xd5,
+	0xf0, 0x99, 0x65, 0x2f, 0x4a, 0x34, 0x55, 0x45, 0xd2, 0x9f, 0x82, 0xf3, 0x7d, 0x9e, 0x77, 0x06,
+	0x3a, 0x8b, 0x70, 0x1e, 0xd1, 0xdb, 0xe0, 0x3e, 0xa0, 0x77, 0xee, 0x81, 0xd7, 0x01, 0xc7, 0x8b,
+	0x70, 0x14, 0x4e, 0x1f, 0x43, 0xb7, 0xe5, 0x9d, 0x80, 0xc3, 0x49, 0x30, 0xa6, 0x73, 0xd7, 0xf1,
+	0x4e, 0x01, 0x18, 0x05, 0xe3, 0xe9, 0x84, 0x3e, 0xd0, 0xd9, 0xdc, 0x6d, 0x0f, 0x7e, 0x5a, 0xa0,
+	0xf7, 0xa2, 0x13, 0xf8, 0x6f, 0xe1, 0xc1, 0xe5, 0xbe, 0x47, 0xa3, 0xb2, 0x6d, 0xd4, 0x7a, 0x1a,
+	0xec, 0xb2, 0x42, 0x6f, 0x98, 0x12, 0x50, 0x67, 0x02, 0x89, 0xb5, 0xb2, 0xbb, 0xd4, 0x87, 0x4b,
+	0xa5, 0xf9, 0xe3, 0x8e, 0x37, 0xf6, 0xfb, 0xe1, 0xb4, 0x87, 0xbe, 0xff, 0xe9, 0x74, 0x87, 0x15,
+	0xca, 0xe7, 0x06, 0x56, 0xb2, 0x54, 0x4b, 0x0c, 0xcb, 0xe5, 0xcd, 0x57, 0xed, 0xc7, 0x3e, 0x37,
+	0x71, 0xe3, 0xc7, 0x4b, 0x1c, 0x5b, 0xff, 0xdb, 0xe9, 0x55, 0x3f, 0x09, 0xf1, 0xb9, 0x21, 0xa4,
+	0x99, 0x20, 0x64, 0x89, 0x09, 0xb1, 0x33, 0xcf, 0x47, 0xb6, 0x18, 0xfe, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0xcc, 0x1e, 0x70, 0x1d, 0xdf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/quality_score_bucket.pb.go b/googleapis/ads/googleads/v3/enums/quality_score_bucket.pb.go
new file mode 100644
index 0000000..6c57600
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/quality_score_bucket.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/quality_score_bucket.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible quality score buckets.
+type QualityScoreBucketEnum_QualityScoreBucket int32
+
+const (
+	// Not specified.
+	QualityScoreBucketEnum_UNSPECIFIED QualityScoreBucketEnum_QualityScoreBucket = 0
+	// Used for return value only. Represents value unknown in this version.
+	QualityScoreBucketEnum_UNKNOWN QualityScoreBucketEnum_QualityScoreBucket = 1
+	// Quality of the creative is below average.
+	QualityScoreBucketEnum_BELOW_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 2
+	// Quality of the creative is average.
+	QualityScoreBucketEnum_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 3
+	// Quality of the creative is above average.
+	QualityScoreBucketEnum_ABOVE_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 4
+)
+
+var QualityScoreBucketEnum_QualityScoreBucket_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BELOW_AVERAGE",
+	3: "AVERAGE",
+	4: "ABOVE_AVERAGE",
+}
+
+var QualityScoreBucketEnum_QualityScoreBucket_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"BELOW_AVERAGE": 2,
+	"AVERAGE":       3,
+	"ABOVE_AVERAGE": 4,
+}
+
+func (x QualityScoreBucketEnum_QualityScoreBucket) String() string {
+	return proto.EnumName(QualityScoreBucketEnum_QualityScoreBucket_name, int32(x))
+}
+
+func (QualityScoreBucketEnum_QualityScoreBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_375aaff68f435146, []int{0, 0}
+}
+
+// The relative performance compared to other advertisers.
+type QualityScoreBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QualityScoreBucketEnum) Reset()         { *m = QualityScoreBucketEnum{} }
+func (m *QualityScoreBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*QualityScoreBucketEnum) ProtoMessage()    {}
+func (*QualityScoreBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_375aaff68f435146, []int{0}
+}
+
+func (m *QualityScoreBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QualityScoreBucketEnum.Unmarshal(m, b)
+}
+func (m *QualityScoreBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QualityScoreBucketEnum.Marshal(b, m, deterministic)
+}
+func (m *QualityScoreBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QualityScoreBucketEnum.Merge(m, src)
+}
+func (m *QualityScoreBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_QualityScoreBucketEnum.Size(m)
+}
+func (m *QualityScoreBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QualityScoreBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QualityScoreBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket", QualityScoreBucketEnum_QualityScoreBucket_name, QualityScoreBucketEnum_QualityScoreBucket_value)
+	proto.RegisterType((*QualityScoreBucketEnum)(nil), "google.ads.googleads.v3.enums.QualityScoreBucketEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/quality_score_bucket.proto", fileDescriptor_375aaff68f435146)
+}
+
+var fileDescriptor_375aaff68f435146 = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x27, 0x0a, 0x19, 0xe2, 0xec, 0x41, 0x41, 0xdc, 0x61, 0x7b, 0x80, 0xf4, 0x90,
+	0x8b, 0xc4, 0x53, 0xa2, 0x71, 0x0c, 0xa5, 0x9b, 0x8e, 0x75, 0x20, 0x85, 0x91, 0xad, 0x21, 0x14,
+	0xb7, 0x64, 0x2e, 0xed, 0xc0, 0x93, 0xef, 0xe2, 0xd1, 0x47, 0xf1, 0x51, 0xc4, 0x87, 0x90, 0x24,
+	0xb6, 0x97, 0xa1, 0x97, 0xf2, 0x35, 0xbf, 0xff, 0xf7, 0xf1, 0xff, 0x7f, 0xe0, 0x52, 0x6a, 0x2d,
+	0x97, 0x22, 0xe2, 0x99, 0x89, 0xbc, 0xb4, 0x6a, 0x8b, 0x22, 0xa1, 0xca, 0x95, 0x89, 0x5e, 0x4a,
+	0xbe, 0xcc, 0x8b, 0xd7, 0x99, 0x59, 0xe8, 0x8d, 0x98, 0xcd, 0xcb, 0xc5, 0xb3, 0x28, 0xe0, 0x7a,
+	0xa3, 0x0b, 0x1d, 0x76, 0xfc, 0x38, 0xe4, 0x99, 0x81, 0xb5, 0x13, 0x6e, 0x11, 0x74, 0xce, 0xf3,
+	0x8b, 0x2a, 0x78, 0x9d, 0x47, 0x5c, 0x29, 0x5d, 0xf0, 0x22, 0xd7, 0xca, 0x78, 0x73, 0xef, 0x0d,
+	0x9c, 0x3e, 0xf8, 0xe8, 0xb1, 0x4d, 0xa6, 0x2e, 0x98, 0xa9, 0x72, 0xd5, 0x13, 0x20, 0xdc, 0x25,
+	0xe1, 0x31, 0x68, 0x4d, 0xe2, 0xf1, 0x88, 0x5d, 0x0f, 0x6e, 0x07, 0xec, 0xa6, 0xbd, 0x17, 0xb6,
+	0xc0, 0xe1, 0x24, 0xbe, 0x8b, 0x87, 0xd3, 0xb8, 0xdd, 0x08, 0x4f, 0xc0, 0x11, 0x65, 0xf7, 0xc3,
+	0xe9, 0x8c, 0x24, 0xec, 0x91, 0xf4, 0x59, 0x3b, 0xb0, 0xbc, 0xfa, 0x69, 0x5a, 0x4e, 0xe8, 0x30,
+	0x61, 0x35, 0xdf, 0xa7, 0xdf, 0x0d, 0xd0, 0x5d, 0xe8, 0x15, 0xfc, 0xf7, 0x08, 0x7a, 0xb6, 0xbb,
+	0xca, 0xc8, 0xee, 0x3f, 0x6a, 0x3c, 0xd1, 0x5f, 0xa7, 0xd4, 0x4b, 0xae, 0x24, 0xd4, 0x1b, 0x19,
+	0x49, 0xa1, 0xdc, 0x75, 0x55, 0x91, 0xeb, 0xdc, 0xfc, 0xd1, 0xeb, 0x95, 0xfb, 0xbe, 0x07, 0xcd,
+	0x3e, 0x21, 0x1f, 0x41, 0xa7, 0xef, 0xa3, 0x48, 0x66, 0xa0, 0x97, 0x56, 0x25, 0x08, 0xda, 0x42,
+	0xcc, 0x67, 0xc5, 0x53, 0x92, 0x99, 0xb4, 0xe6, 0x69, 0x82, 0x52, 0xc7, 0xbf, 0x82, 0xae, 0x7f,
+	0xc4, 0x98, 0x64, 0x06, 0xe3, 0x7a, 0x02, 0xe3, 0x04, 0x61, 0xec, 0x66, 0xe6, 0x07, 0x6e, 0x31,
+	0xf4, 0x13, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xd9, 0xc1, 0x43, 0xef, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/reach_plan_ad_length.pb.go b/googleapis/ads/googleads/v3/enums/reach_plan_ad_length.pb.go
new file mode 100644
index 0000000..0f08f2a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/reach_plan_ad_length.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/reach_plan_ad_length.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible ad length values.
+type ReachPlanAdLengthEnum_ReachPlanAdLength int32
+
+const (
+	// Not specified.
+	ReachPlanAdLengthEnum_UNSPECIFIED ReachPlanAdLengthEnum_ReachPlanAdLength = 0
+	// The value is unknown in this version.
+	ReachPlanAdLengthEnum_UNKNOWN ReachPlanAdLengthEnum_ReachPlanAdLength = 1
+	// 6 seconds long ad.
+	ReachPlanAdLengthEnum_SIX_SECONDS ReachPlanAdLengthEnum_ReachPlanAdLength = 2
+	// 15 or 20 seconds long ad.
+	ReachPlanAdLengthEnum_FIFTEEN_OR_TWENTY_SECONDS ReachPlanAdLengthEnum_ReachPlanAdLength = 3
+	// More than 20 seconds long ad.
+	ReachPlanAdLengthEnum_TWENTY_SECONDS_OR_MORE ReachPlanAdLengthEnum_ReachPlanAdLength = 4
+)
+
+var ReachPlanAdLengthEnum_ReachPlanAdLength_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SIX_SECONDS",
+	3: "FIFTEEN_OR_TWENTY_SECONDS",
+	4: "TWENTY_SECONDS_OR_MORE",
+}
+
+var ReachPlanAdLengthEnum_ReachPlanAdLength_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"SIX_SECONDS":               2,
+	"FIFTEEN_OR_TWENTY_SECONDS": 3,
+	"TWENTY_SECONDS_OR_MORE":    4,
+}
+
+func (x ReachPlanAdLengthEnum_ReachPlanAdLength) String() string {
+	return proto.EnumName(ReachPlanAdLengthEnum_ReachPlanAdLength_name, int32(x))
+}
+
+func (ReachPlanAdLengthEnum_ReachPlanAdLength) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_defa8c9b250c2696, []int{0, 0}
+}
+
+// Message describing length of a plannable video ad.
+type ReachPlanAdLengthEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ReachPlanAdLengthEnum) Reset()         { *m = ReachPlanAdLengthEnum{} }
+func (m *ReachPlanAdLengthEnum) String() string { return proto.CompactTextString(m) }
+func (*ReachPlanAdLengthEnum) ProtoMessage()    {}
+func (*ReachPlanAdLengthEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_defa8c9b250c2696, []int{0}
+}
+
+func (m *ReachPlanAdLengthEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachPlanAdLengthEnum.Unmarshal(m, b)
+}
+func (m *ReachPlanAdLengthEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachPlanAdLengthEnum.Marshal(b, m, deterministic)
+}
+func (m *ReachPlanAdLengthEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachPlanAdLengthEnum.Merge(m, src)
+}
+func (m *ReachPlanAdLengthEnum) XXX_Size() int {
+	return xxx_messageInfo_ReachPlanAdLengthEnum.Size(m)
+}
+func (m *ReachPlanAdLengthEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachPlanAdLengthEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachPlanAdLengthEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ReachPlanAdLengthEnum_ReachPlanAdLength", ReachPlanAdLengthEnum_ReachPlanAdLength_name, ReachPlanAdLengthEnum_ReachPlanAdLength_value)
+	proto.RegisterType((*ReachPlanAdLengthEnum)(nil), "google.ads.googleads.v3.enums.ReachPlanAdLengthEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/reach_plan_ad_length.proto", fileDescriptor_defa8c9b250c2696)
+}
+
+var fileDescriptor_defa8c9b250c2696 = []byte{
+	// 342 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xeb, 0x40,
+	0x18, 0xc5, 0x6f, 0xd2, 0xcb, 0xbd, 0x30, 0x5d, 0x18, 0x03, 0x16, 0x2c, 0x76, 0xd1, 0x3e, 0xc0,
+	0x64, 0x91, 0x8d, 0x8c, 0xab, 0xb4, 0x9d, 0x96, 0xa0, 0x26, 0xa1, 0xe9, 0x1f, 0x95, 0x40, 0x18,
+	0x3b, 0x61, 0x5a, 0x48, 0x67, 0x42, 0x27, 0xed, 0xce, 0xd7, 0xf0, 0x01, 0x5c, 0xfa, 0x28, 0x3e,
+	0x8a, 0xbe, 0x84, 0xcc, 0xc4, 0x06, 0xa4, 0xe8, 0x66, 0x38, 0xcc, 0xef, 0x9c, 0xc3, 0xf7, 0x7d,
+	0xe0, 0x92, 0x09, 0xc1, 0xf2, 0xcc, 0x21, 0x54, 0x3a, 0x95, 0x54, 0x6a, 0xef, 0x3a, 0x19, 0xdf,
+	0x6d, 0xa4, 0xb3, 0xcd, 0xc8, 0x72, 0x95, 0x16, 0x39, 0xe1, 0x29, 0xa1, 0x69, 0x9e, 0x71, 0x56,
+	0xae, 0x60, 0xb1, 0x15, 0xa5, 0xb0, 0x3b, 0x95, 0x1d, 0x12, 0x2a, 0x61, 0x9d, 0x84, 0x7b, 0x17,
+	0xea, 0x64, 0xfb, 0xe2, 0x50, 0x5c, 0xac, 0x1d, 0xc2, 0xb9, 0x28, 0x49, 0xb9, 0x16, 0x5c, 0x56,
+	0xe1, 0xde, 0xb3, 0x01, 0xce, 0x26, 0xaa, 0x3b, 0xca, 0x09, 0xf7, 0xe8, 0x8d, 0x2e, 0xc6, 0x7c,
+	0xb7, 0xe9, 0x3d, 0x81, 0xd3, 0x23, 0x60, 0x9f, 0x80, 0xe6, 0x2c, 0x88, 0x23, 0x3c, 0xf0, 0x47,
+	0x3e, 0x1e, 0x5a, 0x7f, 0xec, 0x26, 0xf8, 0x3f, 0x0b, 0xae, 0x83, 0x70, 0x11, 0x58, 0x86, 0xa2,
+	0xb1, 0x7f, 0x97, 0xc6, 0x78, 0x10, 0x06, 0xc3, 0xd8, 0x32, 0xed, 0x0e, 0x38, 0x1f, 0xf9, 0xa3,
+	0x29, 0xc6, 0x41, 0x1a, 0x4e, 0xd2, 0xe9, 0x02, 0x07, 0xd3, 0xfb, 0x1a, 0x37, 0xec, 0x36, 0x68,
+	0x7d, 0xff, 0x53, 0xae, 0xdb, 0x70, 0x82, 0xad, 0xbf, 0xfd, 0x0f, 0x03, 0x74, 0x97, 0x62, 0x03,
+	0x7f, 0x5d, 0xae, 0xdf, 0x3a, 0x1a, 0x31, 0x52, 0x6b, 0x45, 0xc6, 0x43, 0xff, 0x2b, 0xc8, 0x44,
+	0x4e, 0x38, 0x83, 0x62, 0xcb, 0x1c, 0x96, 0x71, 0xbd, 0xf4, 0xe1, 0xbe, 0xc5, 0x5a, 0xfe, 0x70,
+	0xee, 0x2b, 0xfd, 0xbe, 0x98, 0x8d, 0xb1, 0xe7, 0xbd, 0x9a, 0x9d, 0x71, 0x55, 0xe5, 0x51, 0x09,
+	0x2b, 0xa9, 0xd4, 0xdc, 0x85, 0xea, 0x4e, 0xf2, 0xed, 0xc0, 0x13, 0x8f, 0xca, 0xa4, 0xe6, 0xc9,
+	0xdc, 0x4d, 0x34, 0x7f, 0x37, 0xbb, 0xd5, 0x27, 0x42, 0x1e, 0x95, 0x08, 0xd5, 0x0e, 0x84, 0xe6,
+	0x2e, 0x42, 0xda, 0xf3, 0xf8, 0x4f, 0x0f, 0xe6, 0x7e, 0x06, 0x00, 0x00, 0xff, 0xff, 0x16, 0xb4,
+	0x90, 0xd1, 0x06, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/reach_plan_age_range.pb.go b/googleapis/ads/googleads/v3/enums/reach_plan_age_range.pb.go
new file mode 100644
index 0000000..5faec28
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/reach_plan_age_range.pb.go
@@ -0,0 +1,230 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/reach_plan_age_range.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible plannable age range values.
+type ReachPlanAgeRangeEnum_ReachPlanAgeRange int32
+
+const (
+	// Not specified.
+	ReachPlanAgeRangeEnum_UNSPECIFIED ReachPlanAgeRangeEnum_ReachPlanAgeRange = 0
+	// The value is unknown in this version.
+	ReachPlanAgeRangeEnum_UNKNOWN ReachPlanAgeRangeEnum_ReachPlanAgeRange = 1
+	// Between 18 and 24 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_24 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503001
+	// Between 18 and 34 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_34 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 2
+	// Between 18 and 44 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_44 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 3
+	// Between 18 and 49 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_49 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 4
+	// Between 18 and 54 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_54 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 5
+	// Between 18 and 64 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_64 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 6
+	// Between 18 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_18_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 7
+	// Between 21 and 34 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_21_34 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 8
+	// Between 25 and 34 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_34 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503002
+	// Between 25 and 44 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_44 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 9
+	// Between 25 and 49 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_49 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 10
+	// Between 25 and 54 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_54 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 11
+	// Between 25 and 64 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_64 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 12
+	// Between 25 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_25_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 13
+	// Between 35 and 44 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_35_44 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503003
+	// Between 35 and 49 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_35_49 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 14
+	// Between 35 and 54 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_35_54 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 15
+	// Between 35 and 64 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_35_64 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 16
+	// Between 35 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_35_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 17
+	// Between 45 and 54 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_45_54 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503004
+	// Between 45 and 64 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_45_64 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 18
+	// Between 45 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_45_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 19
+	// Between 50 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_50_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 20
+	// Between 55 and 64 years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_55_64 ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503005
+	// Between 55 and 65+ years old.
+	ReachPlanAgeRangeEnum_AGE_RANGE_55_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 21
+	// 65 years old and beyond.
+	ReachPlanAgeRangeEnum_AGE_RANGE_65_UP ReachPlanAgeRangeEnum_ReachPlanAgeRange = 503006
+)
+
+var ReachPlanAgeRangeEnum_ReachPlanAgeRange_name = map[int32]string{
+	0:      "UNSPECIFIED",
+	1:      "UNKNOWN",
+	503001: "AGE_RANGE_18_24",
+	2:      "AGE_RANGE_18_34",
+	3:      "AGE_RANGE_18_44",
+	4:      "AGE_RANGE_18_49",
+	5:      "AGE_RANGE_18_54",
+	6:      "AGE_RANGE_18_64",
+	7:      "AGE_RANGE_18_65_UP",
+	8:      "AGE_RANGE_21_34",
+	503002: "AGE_RANGE_25_34",
+	9:      "AGE_RANGE_25_44",
+	10:     "AGE_RANGE_25_49",
+	11:     "AGE_RANGE_25_54",
+	12:     "AGE_RANGE_25_64",
+	13:     "AGE_RANGE_25_65_UP",
+	503003: "AGE_RANGE_35_44",
+	14:     "AGE_RANGE_35_49",
+	15:     "AGE_RANGE_35_54",
+	16:     "AGE_RANGE_35_64",
+	17:     "AGE_RANGE_35_65_UP",
+	503004: "AGE_RANGE_45_54",
+	18:     "AGE_RANGE_45_64",
+	19:     "AGE_RANGE_45_65_UP",
+	20:     "AGE_RANGE_50_65_UP",
+	503005: "AGE_RANGE_55_64",
+	21:     "AGE_RANGE_55_65_UP",
+	503006: "AGE_RANGE_65_UP",
+}
+
+var ReachPlanAgeRangeEnum_ReachPlanAgeRange_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"AGE_RANGE_18_24":    503001,
+	"AGE_RANGE_18_34":    2,
+	"AGE_RANGE_18_44":    3,
+	"AGE_RANGE_18_49":    4,
+	"AGE_RANGE_18_54":    5,
+	"AGE_RANGE_18_64":    6,
+	"AGE_RANGE_18_65_UP": 7,
+	"AGE_RANGE_21_34":    8,
+	"AGE_RANGE_25_34":    503002,
+	"AGE_RANGE_25_44":    9,
+	"AGE_RANGE_25_49":    10,
+	"AGE_RANGE_25_54":    11,
+	"AGE_RANGE_25_64":    12,
+	"AGE_RANGE_25_65_UP": 13,
+	"AGE_RANGE_35_44":    503003,
+	"AGE_RANGE_35_49":    14,
+	"AGE_RANGE_35_54":    15,
+	"AGE_RANGE_35_64":    16,
+	"AGE_RANGE_35_65_UP": 17,
+	"AGE_RANGE_45_54":    503004,
+	"AGE_RANGE_45_64":    18,
+	"AGE_RANGE_45_65_UP": 19,
+	"AGE_RANGE_50_65_UP": 20,
+	"AGE_RANGE_55_64":    503005,
+	"AGE_RANGE_55_65_UP": 21,
+	"AGE_RANGE_65_UP":    503006,
+}
+
+func (x ReachPlanAgeRangeEnum_ReachPlanAgeRange) String() string {
+	return proto.EnumName(ReachPlanAgeRangeEnum_ReachPlanAgeRange_name, int32(x))
+}
+
+func (ReachPlanAgeRangeEnum_ReachPlanAgeRange) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_aa9ffb3fe54db3d3, []int{0, 0}
+}
+
+// Message describing plannable age ranges.
+type ReachPlanAgeRangeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ReachPlanAgeRangeEnum) Reset()         { *m = ReachPlanAgeRangeEnum{} }
+func (m *ReachPlanAgeRangeEnum) String() string { return proto.CompactTextString(m) }
+func (*ReachPlanAgeRangeEnum) ProtoMessage()    {}
+func (*ReachPlanAgeRangeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa9ffb3fe54db3d3, []int{0}
+}
+
+func (m *ReachPlanAgeRangeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachPlanAgeRangeEnum.Unmarshal(m, b)
+}
+func (m *ReachPlanAgeRangeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachPlanAgeRangeEnum.Marshal(b, m, deterministic)
+}
+func (m *ReachPlanAgeRangeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachPlanAgeRangeEnum.Merge(m, src)
+}
+func (m *ReachPlanAgeRangeEnum) XXX_Size() int {
+	return xxx_messageInfo_ReachPlanAgeRangeEnum.Size(m)
+}
+func (m *ReachPlanAgeRangeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachPlanAgeRangeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachPlanAgeRangeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange", ReachPlanAgeRangeEnum_ReachPlanAgeRange_name, ReachPlanAgeRangeEnum_ReachPlanAgeRange_value)
+	proto.RegisterType((*ReachPlanAgeRangeEnum)(nil), "google.ads.googleads.v3.enums.ReachPlanAgeRangeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/reach_plan_age_range.proto", fileDescriptor_aa9ffb3fe54db3d3)
+}
+
+var fileDescriptor_aa9ffb3fe54db3d3 = []byte{
+	// 469 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x69, 0xf7, 0x0f, 0x5c, 0xa0, 0x5e, 0x46, 0x77, 0x81, 0x58, 0xa5, 0xed, 0x01, 0x1c,
+	0x56, 0x3b, 0xd5, 0x16, 0xae, 0x5c, 0x08, 0xd5, 0x84, 0x14, 0xa2, 0xa2, 0x16, 0x09, 0x55, 0x8a,
+	0xcc, 0x12, 0x99, 0x4a, 0xad, 0x5d, 0xd5, 0xdd, 0x5e, 0x82, 0xb7, 0xe0, 0x92, 0x47, 0xe1, 0x0d,
+	0xc2, 0xbf, 0x07, 0x80, 0x2b, 0xde, 0x00, 0xd9, 0x69, 0x2a, 0x39, 0x16, 0xdc, 0x58, 0x47, 0xbf,
+	0x73, 0xce, 0xf7, 0x7d, 0x17, 0xc7, 0xe0, 0x82, 0x4b, 0xc9, 0xe7, 0xb9, 0xcf, 0x32, 0xe5, 0x97,
+	0xa5, 0xae, 0x6e, 0xb1, 0x9f, 0x8b, 0x9b, 0x85, 0xf2, 0x57, 0x39, 0xbb, 0xfe, 0x90, 0x2e, 0xe7,
+	0x4c, 0xa4, 0x8c, 0xe7, 0xe9, 0x8a, 0x09, 0x9e, 0xa3, 0xe5, 0x4a, 0xae, 0xa5, 0x77, 0x52, 0x8e,
+	0x23, 0x96, 0x29, 0xb4, 0xdd, 0x44, 0xb7, 0x18, 0x99, 0xcd, 0xc7, 0x4f, 0x2a, 0xe1, 0xe5, 0xcc,
+	0x67, 0x42, 0xc8, 0x35, 0x5b, 0xcf, 0xa4, 0x50, 0xe5, 0xf2, 0xd9, 0xc7, 0x3d, 0xd0, 0x19, 0x69,
+	0xed, 0x64, 0xce, 0x04, 0xe5, 0xf9, 0x48, 0x0b, 0x47, 0xe2, 0x66, 0x71, 0xf6, 0x67, 0x17, 0x1c,
+	0x3a, 0x1d, 0xaf, 0x0d, 0x5a, 0xe3, 0xf8, 0x4d, 0x12, 0x3d, 0xbf, 0x7a, 0x79, 0x15, 0xbd, 0x80,
+	0x77, 0xbc, 0x16, 0x38, 0x18, 0xc7, 0xaf, 0xe2, 0xd7, 0x6f, 0x63, 0xd8, 0xf0, 0x3a, 0xa0, 0x4d,
+	0x87, 0x51, 0x3a, 0xa2, 0xf1, 0x30, 0x4a, 0xcf, 0x2f, 0xd2, 0x1e, 0x81, 0x45, 0xd1, 0xf5, 0x8e,
+	0x6a, 0x18, 0x13, 0xd8, 0x74, 0x20, 0x21, 0x70, 0xc7, 0x85, 0x97, 0x70, 0xd7, 0x81, 0x01, 0x81,
+	0x7b, 0x0e, 0xec, 0x13, 0xb8, 0xef, 0x1d, 0x03, 0xcf, 0x86, 0x41, 0x3a, 0x4e, 0xe0, 0x81, 0x3d,
+	0xdc, 0x3b, 0xd7, 0x01, 0xee, 0xda, 0x61, 0x7b, 0x81, 0x86, 0x5f, 0xeb, 0x61, 0x7b, 0x81, 0xce,
+	0x75, 0xcf, 0x85, 0x97, 0x10, 0x38, 0x30, 0x20, 0xb0, 0xe5, 0xc0, 0x3e, 0x81, 0xf7, 0xed, 0x5c,
+	0x1a, 0x9a, 0x5c, 0x0f, 0xec, 0x08, 0xd8, 0x78, 0x7d, 0xab, 0x47, 0xc0, 0xc6, 0xed, 0xa1, 0x03,
+	0x03, 0x02, 0xdb, 0x0e, 0xec, 0x13, 0x08, 0x6d, 0x37, 0x5c, 0xb9, 0x1d, 0xda, 0x6e, 0xc4, 0x28,
+	0x7c, 0xaf, 0xbb, 0x11, 0xa3, 0xe1, 0xd9, 0x1a, 0xa4, 0xd2, 0x38, 0xb2, 0x79, 0xf0, 0x74, 0xc3,
+	0x1f, 0xd9, 0xda, 0x81, 0x11, 0xf9, 0x51, 0x74, 0x6b, 0xe3, 0x95, 0x4c, 0xc7, 0x1e, 0x2f, 0xe1,
+	0xcf, 0xa2, 0x3b, 0xf8, 0xdd, 0x00, 0xa7, 0xd7, 0x72, 0x81, 0xfe, 0x7b, 0xd1, 0x83, 0x63, 0xe7,
+	0x2c, 0x13, 0x7d, 0xcb, 0x49, 0xe3, 0xdd, 0x60, 0xb3, 0xc8, 0xe5, 0x9c, 0x09, 0x8e, 0xe4, 0x8a,
+	0xfb, 0x3c, 0x17, 0xe6, 0xd2, 0xab, 0x4f, 0xb5, 0x9c, 0xa9, 0x7f, 0xfc, 0xb1, 0x67, 0xe6, 0xfd,
+	0xd4, 0xdc, 0x19, 0x52, 0xfa, 0xb9, 0x79, 0x32, 0x2c, 0xa5, 0x68, 0xa6, 0x50, 0x59, 0xea, 0x6a,
+	0x82, 0x91, 0xfe, 0x1c, 0xea, 0x4b, 0xd5, 0x9f, 0xd2, 0x4c, 0x4d, 0xb7, 0xfd, 0xe9, 0x04, 0x4f,
+	0x4d, 0xff, 0x57, 0xf3, 0xb4, 0x84, 0x61, 0x48, 0x33, 0x15, 0x86, 0xdb, 0x89, 0x30, 0x9c, 0xe0,
+	0x30, 0x34, 0x33, 0xef, 0xf7, 0x4d, 0x30, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x17, 0x4f, 0x5d,
+	0x4f, 0xfb, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/reach_plan_network.pb.go b/googleapis/ads/googleads/v3/enums/reach_plan_network.pb.go
new file mode 100644
index 0000000..00561f1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/reach_plan_network.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/reach_plan_network.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible plannable network values.
+type ReachPlanNetworkEnum_ReachPlanNetwork int32
+
+const (
+	// Not specified.
+	ReachPlanNetworkEnum_UNSPECIFIED ReachPlanNetworkEnum_ReachPlanNetwork = 0
+	// Used as a return value only. Represents value unknown in this version.
+	ReachPlanNetworkEnum_UNKNOWN ReachPlanNetworkEnum_ReachPlanNetwork = 1
+	// YouTube network.
+	ReachPlanNetworkEnum_YOUTUBE ReachPlanNetworkEnum_ReachPlanNetwork = 2
+	// Google Video Partners (GVP) network.
+	ReachPlanNetworkEnum_GOOGLE_VIDEO_PARTNERS ReachPlanNetworkEnum_ReachPlanNetwork = 3
+	// A combination of the YouTube network and the Google Video Partners
+	// network.
+	ReachPlanNetworkEnum_YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS ReachPlanNetworkEnum_ReachPlanNetwork = 4
+)
+
+var ReachPlanNetworkEnum_ReachPlanNetwork_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "YOUTUBE",
+	3: "GOOGLE_VIDEO_PARTNERS",
+	4: "YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS",
+}
+
+var ReachPlanNetworkEnum_ReachPlanNetwork_value = map[string]int32{
+	"UNSPECIFIED":                       0,
+	"UNKNOWN":                           1,
+	"YOUTUBE":                           2,
+	"GOOGLE_VIDEO_PARTNERS":             3,
+	"YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS": 4,
+}
+
+func (x ReachPlanNetworkEnum_ReachPlanNetwork) String() string {
+	return proto.EnumName(ReachPlanNetworkEnum_ReachPlanNetwork_name, int32(x))
+}
+
+func (ReachPlanNetworkEnum_ReachPlanNetwork) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_604f342e4658a385, []int{0, 0}
+}
+
+// Container for enum describing plannable networks.
+type ReachPlanNetworkEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ReachPlanNetworkEnum) Reset()         { *m = ReachPlanNetworkEnum{} }
+func (m *ReachPlanNetworkEnum) String() string { return proto.CompactTextString(m) }
+func (*ReachPlanNetworkEnum) ProtoMessage()    {}
+func (*ReachPlanNetworkEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_604f342e4658a385, []int{0}
+}
+
+func (m *ReachPlanNetworkEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachPlanNetworkEnum.Unmarshal(m, b)
+}
+func (m *ReachPlanNetworkEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachPlanNetworkEnum.Marshal(b, m, deterministic)
+}
+func (m *ReachPlanNetworkEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachPlanNetworkEnum.Merge(m, src)
+}
+func (m *ReachPlanNetworkEnum) XXX_Size() int {
+	return xxx_messageInfo_ReachPlanNetworkEnum.Size(m)
+}
+func (m *ReachPlanNetworkEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachPlanNetworkEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachPlanNetworkEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ReachPlanNetworkEnum_ReachPlanNetwork", ReachPlanNetworkEnum_ReachPlanNetwork_name, ReachPlanNetworkEnum_ReachPlanNetwork_value)
+	proto.RegisterType((*ReachPlanNetworkEnum)(nil), "google.ads.googleads.v3.enums.ReachPlanNetworkEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/reach_plan_network.proto", fileDescriptor_604f342e4658a385)
+}
+
+var fileDescriptor_604f342e4658a385 = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0xb5, 0x9d, 0x28, 0x64, 0x07, 0x4b, 0x71, 0x07, 0xc5, 0x1d, 0x36, 0xf0, 0x9a, 0x1e, 0x0a,
+	0x1e, 0xe2, 0x29, 0x75, 0xb1, 0x0c, 0x25, 0x2d, 0xdb, 0x5a, 0x51, 0x0a, 0x25, 0xae, 0xa5, 0x0e,
+	0xbb, 0xa4, 0x34, 0xdd, 0x3c, 0xfa, 0x33, 0xbc, 0x7b, 0xf4, 0xa7, 0xf8, 0x53, 0xf6, 0x2b, 0xa4,
+	0xcd, 0xd6, 0xc3, 0x50, 0x2f, 0xe1, 0xe5, 0xfb, 0xde, 0x7b, 0x7c, 0xef, 0x81, 0xab, 0x4c, 0x88,
+	0x2c, 0x4f, 0x2d, 0x96, 0x48, 0x4b, 0xc1, 0x1a, 0xad, 0x6d, 0x2b, 0xe5, 0xab, 0xa5, 0xb4, 0xca,
+	0x94, 0xcd, 0x5f, 0xe2, 0x22, 0x67, 0x3c, 0xe6, 0x69, 0xf5, 0x26, 0xca, 0x57, 0x58, 0x94, 0xa2,
+	0x12, 0x66, 0x5f, 0x91, 0x21, 0x4b, 0x24, 0x6c, 0x75, 0x70, 0x6d, 0xc3, 0x46, 0x77, 0x7e, 0xb1,
+	0xb3, 0x2d, 0x16, 0x16, 0xe3, 0x5c, 0x54, 0xac, 0x5a, 0x08, 0x2e, 0x95, 0x78, 0xf8, 0xa1, 0x81,
+	0xd3, 0x49, 0xed, 0xec, 0xe7, 0x8c, 0x53, 0xe5, 0x4b, 0xf8, 0x6a, 0x39, 0x7c, 0x07, 0xc6, 0xfe,
+	0xdc, 0x3c, 0x01, 0xdd, 0x80, 0x4e, 0x7d, 0x72, 0x33, 0xbe, 0x1d, 0x93, 0x91, 0x71, 0x60, 0x76,
+	0xc1, 0x71, 0x40, 0xef, 0xa8, 0xf7, 0x40, 0x0d, 0xad, 0xfe, 0x3c, 0x7a, 0xc1, 0x2c, 0x70, 0x88,
+	0xa1, 0x9b, 0x67, 0xa0, 0xe7, 0x7a, 0x9e, 0x7b, 0x4f, 0xe2, 0x70, 0x3c, 0x22, 0x5e, 0xec, 0xe3,
+	0xc9, 0x8c, 0x92, 0xc9, 0xd4, 0xe8, 0x98, 0x97, 0x60, 0xb0, 0xe5, 0xc5, 0x98, 0x8e, 0xe2, 0xdf,
+	0x69, 0x87, 0xce, 0x46, 0x03, 0x83, 0xb9, 0x58, 0xc2, 0x7f, 0xd3, 0x39, 0xbd, 0xfd, 0x23, 0xfd,
+	0x3a, 0x96, 0xaf, 0x3d, 0x39, 0x5b, 0x5d, 0x26, 0x72, 0xc6, 0x33, 0x28, 0xca, 0xcc, 0xca, 0x52,
+	0xde, 0x84, 0xde, 0xb5, 0x5b, 0x2c, 0xe4, 0x1f, 0x65, 0x5f, 0x37, 0xef, 0xa7, 0xde, 0x71, 0x31,
+	0xfe, 0xd2, 0xfb, 0xae, 0xb2, 0xc2, 0x89, 0x84, 0x0a, 0xd6, 0x28, 0xb4, 0x61, 0x5d, 0x94, 0xfc,
+	0xde, 0xed, 0x23, 0x9c, 0xc8, 0xa8, 0xdd, 0x47, 0xa1, 0x1d, 0x35, 0xfb, 0x8d, 0x3e, 0x50, 0x43,
+	0x84, 0x70, 0x22, 0x11, 0x6a, 0x19, 0x08, 0x85, 0x36, 0x42, 0x0d, 0xe7, 0xf9, 0xa8, 0x39, 0xcc,
+	0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xa6, 0xa9, 0x02, 0x04, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/real_estate_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/real_estate_placeholder_field.pb.go
new file mode 100644
index 0000000..c4b8871
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/real_estate_placeholder_field.pb.go
@@ -0,0 +1,217 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/real_estate_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Real Estate placeholder fields.
+type RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField int32
+
+const (
+	// Not specified.
+	RealEstatePlaceholderFieldEnum_UNSPECIFIED RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	RealEstatePlaceholderFieldEnum_UNKNOWN RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 1
+	// Data Type: STRING. Unique ID.
+	RealEstatePlaceholderFieldEnum_LISTING_ID RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 2
+	// Data Type: STRING. Main headline with listing name to be shown in dynamic
+	// ad.
+	RealEstatePlaceholderFieldEnum_LISTING_NAME RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 3
+	// Data Type: STRING. City name to be shown in dynamic ad.
+	RealEstatePlaceholderFieldEnum_CITY_NAME RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 4
+	// Data Type: STRING. Description of listing to be shown in dynamic ad.
+	RealEstatePlaceholderFieldEnum_DESCRIPTION RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 5
+	// Data Type: STRING. Complete listing address, including postal code.
+	RealEstatePlaceholderFieldEnum_ADDRESS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	RealEstatePlaceholderFieldEnum_PRICE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	RealEstatePlaceholderFieldEnum_FORMATTED_PRICE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 8
+	// Data Type: URL. Image to be displayed in the ad.
+	RealEstatePlaceholderFieldEnum_IMAGE_URL RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 9
+	// Data Type: STRING. Type of property (house, condo, apartment, etc.) used
+	// to group like items together for recommendation engine.
+	RealEstatePlaceholderFieldEnum_PROPERTY_TYPE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 10
+	// Data Type: STRING. Type of listing (resale, rental, foreclosure, etc.)
+	// used to group like items together for recommendation engine.
+	RealEstatePlaceholderFieldEnum_LISTING_TYPE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 11
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	RealEstatePlaceholderFieldEnum_CONTEXTUAL_KEYWORDS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 12
+	// Data Type: URL_LIST. Final URLs to be used in ad when using Upgraded
+	// URLs; the more specific the better (e.g. the individual URL of a specific
+	// listing and its location).
+	RealEstatePlaceholderFieldEnum_FINAL_URLS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 13
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	RealEstatePlaceholderFieldEnum_FINAL_MOBILE_URLS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 14
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	RealEstatePlaceholderFieldEnum_TRACKING_URL RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 15
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	RealEstatePlaceholderFieldEnum_ANDROID_APP_LINK RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 16
+	// Data Type: STRING_LIST. List of recommended listing IDs to show together
+	// with this item.
+	RealEstatePlaceholderFieldEnum_SIMILAR_LISTING_IDS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 17
+	// Data Type: STRING. iOS app link.
+	RealEstatePlaceholderFieldEnum_IOS_APP_LINK RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 18
+	// Data Type: INT64. iOS app store ID.
+	RealEstatePlaceholderFieldEnum_IOS_APP_STORE_ID RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 19
+)
+
+var RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "LISTING_ID",
+	3:  "LISTING_NAME",
+	4:  "CITY_NAME",
+	5:  "DESCRIPTION",
+	6:  "ADDRESS",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "IMAGE_URL",
+	10: "PROPERTY_TYPE",
+	11: "LISTING_TYPE",
+	12: "CONTEXTUAL_KEYWORDS",
+	13: "FINAL_URLS",
+	14: "FINAL_MOBILE_URLS",
+	15: "TRACKING_URL",
+	16: "ANDROID_APP_LINK",
+	17: "SIMILAR_LISTING_IDS",
+	18: "IOS_APP_LINK",
+	19: "IOS_APP_STORE_ID",
+}
+
+var RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"LISTING_ID":          2,
+	"LISTING_NAME":        3,
+	"CITY_NAME":           4,
+	"DESCRIPTION":         5,
+	"ADDRESS":             6,
+	"PRICE":               7,
+	"FORMATTED_PRICE":     8,
+	"IMAGE_URL":           9,
+	"PROPERTY_TYPE":       10,
+	"LISTING_TYPE":        11,
+	"CONTEXTUAL_KEYWORDS": 12,
+	"FINAL_URLS":          13,
+	"FINAL_MOBILE_URLS":   14,
+	"TRACKING_URL":        15,
+	"ANDROID_APP_LINK":    16,
+	"SIMILAR_LISTING_IDS": 17,
+	"IOS_APP_LINK":        18,
+	"IOS_APP_STORE_ID":    19,
+}
+
+func (x RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField) String() string {
+	return proto.EnumName(RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name, int32(x))
+}
+
+func (RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e3d5f7d0d8a31d4c, []int{0, 0}
+}
+
+// Values for Real Estate placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type RealEstatePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RealEstatePlaceholderFieldEnum) Reset()         { *m = RealEstatePlaceholderFieldEnum{} }
+func (m *RealEstatePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*RealEstatePlaceholderFieldEnum) ProtoMessage()    {}
+func (*RealEstatePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e3d5f7d0d8a31d4c, []int{0}
+}
+
+func (m *RealEstatePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RealEstatePlaceholderFieldEnum.Merge(m, src)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Size(m)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RealEstatePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RealEstatePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField", RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name, RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_value)
+	proto.RegisterType((*RealEstatePlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.RealEstatePlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/real_estate_placeholder_field.proto", fileDescriptor_e3d5f7d0d8a31d4c)
+}
+
+var fileDescriptor_e3d5f7d0d8a31d4c = []byte{
+	// 511 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8e, 0xda, 0x30,
+	0x10, 0x86, 0x0b, 0x74, 0x77, 0x8b, 0x59, 0x16, 0x63, 0x5a, 0x55, 0x5a, 0x75, 0x5b, 0xed, 0x3e,
+	0x40, 0x72, 0xc8, 0x2d, 0x3d, 0x99, 0xc4, 0x20, 0x8b, 0xe0, 0x58, 0xb6, 0x61, 0x4b, 0x85, 0x64,
+	0xa5, 0x9b, 0x34, 0x45, 0x0a, 0x09, 0x22, 0xec, 0x3e, 0x42, 0x1f, 0xa4, 0xb7, 0xf6, 0x51, 0xfa,
+	0x28, 0x3d, 0xf7, 0x01, 0x2a, 0x27, 0x05, 0x7a, 0xa1, 0x97, 0x68, 0xe6, 0x9f, 0xc9, 0xf7, 0x8f,
+	0x3c, 0x03, 0x70, 0x5a, 0x14, 0x69, 0x96, 0xd8, 0x51, 0x5c, 0xda, 0x75, 0x68, 0xa2, 0x27, 0xc7,
+	0x4e, 0xf2, 0xc7, 0x75, 0x69, 0x6f, 0x93, 0x28, 0xd3, 0x49, 0xb9, 0x8b, 0x76, 0x89, 0xde, 0x64,
+	0xd1, 0x43, 0xf2, 0xa5, 0xc8, 0xe2, 0x64, 0xab, 0x3f, 0xaf, 0x92, 0x2c, 0xb6, 0x36, 0xdb, 0x62,
+	0x57, 0xa0, 0x9b, 0xfa, 0x3f, 0x2b, 0x8a, 0x4b, 0xeb, 0x80, 0xb0, 0x9e, 0x1c, 0xab, 0x42, 0x5c,
+	0xbf, 0xd9, 0x3b, 0x6c, 0x56, 0x76, 0x94, 0xe7, 0xc5, 0x2e, 0xda, 0xad, 0x8a, 0xbc, 0xac, 0x7f,
+	0xbe, 0xfb, 0xde, 0x02, 0x6f, 0x45, 0x12, 0x65, 0xa4, 0xf2, 0xe0, 0x47, 0x8b, 0x91, 0x71, 0x20,
+	0xf9, 0xe3, 0xfa, 0xee, 0x6b, 0x0b, 0x5c, 0x9f, 0x6e, 0x41, 0x3d, 0xd0, 0x99, 0x31, 0xc9, 0x89,
+	0x47, 0x47, 0x94, 0xf8, 0xf0, 0x19, 0xea, 0x80, 0x8b, 0x19, 0x9b, 0xb0, 0xf0, 0x9e, 0xc1, 0x06,
+	0xba, 0x02, 0x20, 0xa0, 0x52, 0x51, 0x36, 0xd6, 0xd4, 0x87, 0x4d, 0x04, 0xc1, 0xe5, 0x3e, 0x67,
+	0x78, 0x4a, 0x60, 0x0b, 0x75, 0x41, 0xdb, 0xa3, 0x6a, 0x51, 0xa7, 0xcf, 0x0d, 0xce, 0x27, 0xd2,
+	0x13, 0x94, 0x2b, 0x1a, 0x32, 0x78, 0x66, 0x70, 0xd8, 0xf7, 0x05, 0x91, 0x12, 0x9e, 0xa3, 0x36,
+	0x38, 0xe3, 0x82, 0x7a, 0x04, 0x5e, 0xa0, 0x01, 0xe8, 0x8d, 0x42, 0x31, 0xc5, 0x4a, 0x11, 0x5f,
+	0xd7, 0xe2, 0x0b, 0x03, 0xa3, 0x53, 0x3c, 0x26, 0x7a, 0x26, 0x02, 0xd8, 0x46, 0x7d, 0xd0, 0xe5,
+	0x22, 0xe4, 0x44, 0xa8, 0x85, 0x56, 0x0b, 0x4e, 0x20, 0xf8, 0x77, 0x80, 0x4a, 0xe9, 0xa0, 0xd7,
+	0x60, 0xe0, 0x85, 0x4c, 0x91, 0x0f, 0x6a, 0x86, 0x03, 0x3d, 0x21, 0x8b, 0xfb, 0x50, 0xf8, 0x12,
+	0x5e, 0x9a, 0xd9, 0x47, 0x94, 0xe1, 0xc0, 0xc0, 0x24, 0xec, 0xa2, 0x57, 0xa0, 0x5f, 0xe7, 0xd3,
+	0x70, 0x48, 0x03, 0x52, 0xcb, 0x57, 0x86, 0xa8, 0x04, 0xf6, 0x26, 0x06, 0x69, 0x6c, 0x7b, 0xe8,
+	0x25, 0x80, 0x98, 0xf9, 0x22, 0xa4, 0xbe, 0xc6, 0x9c, 0xeb, 0x80, 0xb2, 0x09, 0x84, 0xc6, 0x47,
+	0xd2, 0x29, 0x0d, 0xb0, 0xd0, 0xc7, 0x27, 0x91, 0xb0, 0x6f, 0x00, 0x34, 0x94, 0xc7, 0x56, 0x64,
+	0x00, 0x7b, 0x45, 0xaa, 0x50, 0x10, 0xf3, 0x76, 0x83, 0xe1, 0xef, 0x06, 0xb8, 0x7d, 0x28, 0xd6,
+	0xd6, 0x7f, 0xf7, 0x3d, 0x7c, 0x77, 0x7a, 0x57, 0xdc, 0xac, 0x9c, 0x37, 0x3e, 0x0e, 0xff, 0x12,
+	0xd2, 0x22, 0x8b, 0xf2, 0xd4, 0x2a, 0xb6, 0xa9, 0x9d, 0x26, 0x79, 0x75, 0x10, 0xfb, 0x23, 0xdc,
+	0xac, 0xca, 0x13, 0x37, 0xf9, 0xbe, 0xfa, 0x7e, 0x6b, 0xb6, 0xc6, 0x18, 0xff, 0x68, 0xde, 0x8c,
+	0x6b, 0x14, 0x8e, 0x4b, 0xab, 0x0e, 0x4d, 0x34, 0x77, 0x2c, 0x73, 0x3a, 0xe5, 0xcf, 0x7d, 0x7d,
+	0x89, 0xe3, 0x72, 0x79, 0xa8, 0x2f, 0xe7, 0xce, 0xb2, 0xaa, 0xff, 0x6a, 0xde, 0xd6, 0xa2, 0xeb,
+	0xe2, 0xb8, 0x74, 0xdd, 0x43, 0x87, 0xeb, 0xce, 0x1d, 0xd7, 0xad, 0x7a, 0x3e, 0x9d, 0x57, 0x83,
+	0x39, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x71, 0xac, 0x18, 0xe5, 0x2b, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/recommendation_type.pb.go b/googleapis/ads/googleads/v3/enums/recommendation_type.pb.go
new file mode 100644
index 0000000..016f010
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/recommendation_type.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/recommendation_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Types of recommendations.
+type RecommendationTypeEnum_RecommendationType int32
+
+const (
+	// Not specified.
+	RecommendationTypeEnum_UNSPECIFIED RecommendationTypeEnum_RecommendationType = 0
+	// Used for return value only. Represents value unknown in this version.
+	RecommendationTypeEnum_UNKNOWN RecommendationTypeEnum_RecommendationType = 1
+	// Budget recommendation for budget constrained campaigns.
+	RecommendationTypeEnum_CAMPAIGN_BUDGET RecommendationTypeEnum_RecommendationType = 2
+	// Keyword recommendation.
+	RecommendationTypeEnum_KEYWORD RecommendationTypeEnum_RecommendationType = 3
+	// Recommendation to add a new text ad.
+	RecommendationTypeEnum_TEXT_AD RecommendationTypeEnum_RecommendationType = 4
+	// Recommendation to update a campaign to use a Target CPA bidding strategy.
+	RecommendationTypeEnum_TARGET_CPA_OPT_IN RecommendationTypeEnum_RecommendationType = 5
+	// Recommendation to update a campaign to use the Maximize Conversions
+	// bidding strategy.
+	RecommendationTypeEnum_MAXIMIZE_CONVERSIONS_OPT_IN RecommendationTypeEnum_RecommendationType = 6
+	// Recommendation to enable Enhanced Cost Per Click for a campaign.
+	RecommendationTypeEnum_ENHANCED_CPC_OPT_IN RecommendationTypeEnum_RecommendationType = 7
+	// Recommendation to start showing your campaign's ads on Google Search
+	// Partners Websites.
+	RecommendationTypeEnum_SEARCH_PARTNERS_OPT_IN RecommendationTypeEnum_RecommendationType = 8
+	// Recommendation to update a campaign to use a Maximize Clicks bidding
+	// strategy.
+	RecommendationTypeEnum_MAXIMIZE_CLICKS_OPT_IN RecommendationTypeEnum_RecommendationType = 9
+	// Recommendation to start using the "Optimize" ad rotation setting for the
+	// given ad group.
+	RecommendationTypeEnum_OPTIMIZE_AD_ROTATION RecommendationTypeEnum_RecommendationType = 10
+	// Recommendation to add callout extensions to a campaign.
+	RecommendationTypeEnum_CALLOUT_EXTENSION RecommendationTypeEnum_RecommendationType = 11
+	// Recommendation to add sitelink extensions to a campaign.
+	RecommendationTypeEnum_SITELINK_EXTENSION RecommendationTypeEnum_RecommendationType = 12
+	// Recommendation to add call extensions to a campaign.
+	RecommendationTypeEnum_CALL_EXTENSION RecommendationTypeEnum_RecommendationType = 13
+	// Recommendation to change an existing keyword from one match type to a
+	// broader match type.
+	RecommendationTypeEnum_KEYWORD_MATCH_TYPE RecommendationTypeEnum_RecommendationType = 14
+	// Recommendation to move unused budget from one budget to a constrained
+	// budget.
+	RecommendationTypeEnum_MOVE_UNUSED_BUDGET RecommendationTypeEnum_RecommendationType = 15
+)
+
+var RecommendationTypeEnum_RecommendationType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CAMPAIGN_BUDGET",
+	3:  "KEYWORD",
+	4:  "TEXT_AD",
+	5:  "TARGET_CPA_OPT_IN",
+	6:  "MAXIMIZE_CONVERSIONS_OPT_IN",
+	7:  "ENHANCED_CPC_OPT_IN",
+	8:  "SEARCH_PARTNERS_OPT_IN",
+	9:  "MAXIMIZE_CLICKS_OPT_IN",
+	10: "OPTIMIZE_AD_ROTATION",
+	11: "CALLOUT_EXTENSION",
+	12: "SITELINK_EXTENSION",
+	13: "CALL_EXTENSION",
+	14: "KEYWORD_MATCH_TYPE",
+	15: "MOVE_UNUSED_BUDGET",
+}
+
+var RecommendationTypeEnum_RecommendationType_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CAMPAIGN_BUDGET":             2,
+	"KEYWORD":                     3,
+	"TEXT_AD":                     4,
+	"TARGET_CPA_OPT_IN":           5,
+	"MAXIMIZE_CONVERSIONS_OPT_IN": 6,
+	"ENHANCED_CPC_OPT_IN":         7,
+	"SEARCH_PARTNERS_OPT_IN":      8,
+	"MAXIMIZE_CLICKS_OPT_IN":      9,
+	"OPTIMIZE_AD_ROTATION":        10,
+	"CALLOUT_EXTENSION":           11,
+	"SITELINK_EXTENSION":          12,
+	"CALL_EXTENSION":              13,
+	"KEYWORD_MATCH_TYPE":          14,
+	"MOVE_UNUSED_BUDGET":          15,
+}
+
+func (x RecommendationTypeEnum_RecommendationType) String() string {
+	return proto.EnumName(RecommendationTypeEnum_RecommendationType_name, int32(x))
+}
+
+func (RecommendationTypeEnum_RecommendationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9494f455c4c1913e, []int{0, 0}
+}
+
+// Container for enum describing types of recommendations.
+type RecommendationTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RecommendationTypeEnum) Reset()         { *m = RecommendationTypeEnum{} }
+func (m *RecommendationTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*RecommendationTypeEnum) ProtoMessage()    {}
+func (*RecommendationTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9494f455c4c1913e, []int{0}
+}
+
+func (m *RecommendationTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RecommendationTypeEnum.Unmarshal(m, b)
+}
+func (m *RecommendationTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RecommendationTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *RecommendationTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RecommendationTypeEnum.Merge(m, src)
+}
+func (m *RecommendationTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_RecommendationTypeEnum.Size(m)
+}
+func (m *RecommendationTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RecommendationTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RecommendationTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.RecommendationTypeEnum_RecommendationType", RecommendationTypeEnum_RecommendationType_name, RecommendationTypeEnum_RecommendationType_value)
+	proto.RegisterType((*RecommendationTypeEnum)(nil), "google.ads.googleads.v3.enums.RecommendationTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/recommendation_type.proto", fileDescriptor_9494f455c4c1913e)
+}
+
+var fileDescriptor_9494f455c4c1913e = []byte{
+	// 492 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x59, 0x0b, 0x1b, 0xb8, 0xb0, 0x06, 0x0f, 0x3a, 0x34, 0x98, 0xd0, 0xf6, 0x00, 0xc9,
+	0x45, 0x2e, 0x90, 0xc2, 0x95, 0xeb, 0x98, 0xd6, 0x6a, 0x6b, 0x5b, 0x89, 0xd3, 0x75, 0x53, 0x25,
+	0xab, 0x2c, 0x51, 0x54, 0x69, 0x89, 0xa3, 0xa6, 0x9b, 0xb4, 0xd7, 0xe0, 0x11, 0xb8, 0xe4, 0x51,
+	0x78, 0x14, 0xc4, 0x3d, 0xb7, 0xc8, 0xc9, 0x12, 0x86, 0x26, 0xb8, 0x89, 0x4e, 0xce, 0xf7, 0xff,
+	0xbf, 0x4e, 0x72, 0x0e, 0xf8, 0x90, 0x6a, 0x9d, 0x5e, 0x25, 0xce, 0x2a, 0x2e, 0x9d, 0xba, 0x34,
+	0xd5, 0x8d, 0xeb, 0x24, 0xf9, 0x75, 0x56, 0x3a, 0x9b, 0xe4, 0x52, 0x67, 0x59, 0x92, 0xc7, 0xab,
+	0xed, 0x5a, 0xe7, 0x6a, 0x7b, 0x5b, 0x24, 0x76, 0xb1, 0xd1, 0x5b, 0x0d, 0x8f, 0x6b, 0xb5, 0xbd,
+	0x8a, 0x4b, 0xbb, 0x35, 0xda, 0x37, 0xae, 0x5d, 0x19, 0x8f, 0xde, 0x35, 0xb9, 0xc5, 0xda, 0x59,
+	0xe5, 0xb9, 0xde, 0x56, 0x01, 0x65, 0x6d, 0x3e, 0xfd, 0xd2, 0x05, 0x83, 0xe0, 0xaf, 0x68, 0x79,
+	0x5b, 0x24, 0x24, 0xbf, 0xce, 0x4e, 0x7f, 0x75, 0x00, 0x7c, 0x88, 0x60, 0x1f, 0xf4, 0x22, 0x16,
+	0x0a, 0x82, 0xe9, 0x27, 0x4a, 0x7c, 0xeb, 0x11, 0xec, 0x81, 0xbd, 0x88, 0x4d, 0x18, 0x3f, 0x63,
+	0xd6, 0x0e, 0x3c, 0x00, 0x7d, 0x8c, 0x66, 0x02, 0xd1, 0x11, 0x53, 0xc3, 0xc8, 0x1f, 0x11, 0x69,
+	0x75, 0x8c, 0x62, 0x42, 0xce, 0xcf, 0x78, 0xe0, 0x5b, 0x5d, 0xf3, 0x22, 0xc9, 0x42, 0x2a, 0xe4,
+	0x5b, 0x8f, 0xe1, 0x6b, 0xf0, 0x52, 0xa2, 0x60, 0x44, 0xa4, 0xc2, 0x02, 0x29, 0x2e, 0xa4, 0xa2,
+	0xcc, 0x7a, 0x02, 0xdf, 0x83, 0xb7, 0x33, 0xb4, 0xa0, 0x33, 0x7a, 0x41, 0x14, 0xe6, 0x6c, 0x4e,
+	0x82, 0x90, 0x72, 0x16, 0x36, 0x82, 0x5d, 0x78, 0x08, 0x0e, 0x08, 0x1b, 0x23, 0x86, 0x89, 0xaf,
+	0xb0, 0xc0, 0x0d, 0xd8, 0x83, 0x47, 0x60, 0x10, 0x12, 0x14, 0xe0, 0xb1, 0x12, 0x28, 0x90, 0x8c,
+	0x04, 0xad, 0xe9, 0xa9, 0x61, 0x7f, 0x52, 0xa7, 0x14, 0x4f, 0x5a, 0xf6, 0x0c, 0xbe, 0x01, 0xaf,
+	0xb8, 0x90, 0x35, 0x43, 0xbe, 0x0a, 0xb8, 0x44, 0x92, 0x72, 0x66, 0x01, 0x33, 0x22, 0x46, 0xd3,
+	0x29, 0x8f, 0xa4, 0x22, 0x0b, 0x49, 0x98, 0x99, 0xc4, 0xea, 0xc1, 0x01, 0x80, 0x21, 0x95, 0x64,
+	0x4a, 0xd9, 0xe4, 0x5e, 0xff, 0x39, 0x84, 0x60, 0xdf, 0xc8, 0xef, 0xf5, 0x5e, 0x18, 0xed, 0xdd,
+	0xf7, 0xab, 0x19, 0x92, 0x78, 0xac, 0xe4, 0xb9, 0x20, 0xd6, 0xbe, 0xe9, 0xcf, 0xf8, 0x9c, 0xa8,
+	0x88, 0x45, 0x21, 0xf1, 0x9b, 0xff, 0xd5, 0x1f, 0xfe, 0xdc, 0x01, 0x27, 0x97, 0x3a, 0xb3, 0xff,
+	0xbb, 0xd8, 0xe1, 0xe1, 0xc3, 0xe5, 0x08, 0xb3, 0x53, 0xb1, 0x73, 0x31, 0xbc, 0x73, 0xa6, 0xfa,
+	0x6a, 0x95, 0xa7, 0xb6, 0xde, 0xa4, 0x4e, 0x9a, 0xe4, 0xd5, 0xc6, 0x9b, 0xdb, 0x2a, 0xd6, 0xe5,
+	0x3f, 0x4e, 0xed, 0x63, 0xf5, 0xfc, 0xda, 0xe9, 0x8e, 0x10, 0xfa, 0xd6, 0x39, 0x1e, 0xd5, 0x51,
+	0x28, 0x2e, 0xed, 0xba, 0x34, 0xd5, 0xdc, 0xb5, 0xcd, 0x8d, 0x94, 0xdf, 0x1b, 0xbe, 0x44, 0x71,
+	0xb9, 0x6c, 0xf9, 0x72, 0xee, 0x2e, 0x2b, 0xfe, 0xa3, 0x73, 0x52, 0x37, 0x3d, 0x0f, 0xc5, 0xa5,
+	0xe7, 0xb5, 0x0a, 0xcf, 0x9b, 0xbb, 0x9e, 0x57, 0x69, 0x3e, 0xef, 0x56, 0x83, 0xb9, 0xbf, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0xcd, 0x45, 0xb5, 0x80, 0x02, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/search_engine_results_page_type.pb.go b/googleapis/ads/googleads/v3/enums/search_engine_results_page_type.pb.go
new file mode 100644
index 0000000..c1881ab
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/search_engine_results_page_type.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/search_engine_results_page_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of the search engine results page.
+type SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType int32
+
+const (
+	// Not specified.
+	SearchEngineResultsPageTypeEnum_UNSPECIFIED SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SearchEngineResultsPageTypeEnum_UNKNOWN SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType = 1
+	// Only ads were contained in the search engine results page.
+	SearchEngineResultsPageTypeEnum_ADS_ONLY SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType = 2
+	// Only organic results were contained in the search engine results page.
+	SearchEngineResultsPageTypeEnum_ORGANIC_ONLY SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType = 3
+	// Both ads and organic results were contained in the search engine results
+	// page.
+	SearchEngineResultsPageTypeEnum_ADS_AND_ORGANIC SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType = 4
+)
+
+var SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADS_ONLY",
+	3: "ORGANIC_ONLY",
+	4: "ADS_AND_ORGANIC",
+}
+
+var SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"ADS_ONLY":        2,
+	"ORGANIC_ONLY":    3,
+	"ADS_AND_ORGANIC": 4,
+}
+
+func (x SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType) String() string {
+	return proto.EnumName(SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType_name, int32(x))
+}
+
+func (SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8d0c9169c79e638f, []int{0, 0}
+}
+
+// The type of the search engine results page.
+type SearchEngineResultsPageTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchEngineResultsPageTypeEnum) Reset()         { *m = SearchEngineResultsPageTypeEnum{} }
+func (m *SearchEngineResultsPageTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SearchEngineResultsPageTypeEnum) ProtoMessage()    {}
+func (*SearchEngineResultsPageTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d0c9169c79e638f, []int{0}
+}
+
+func (m *SearchEngineResultsPageTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchEngineResultsPageTypeEnum.Unmarshal(m, b)
+}
+func (m *SearchEngineResultsPageTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchEngineResultsPageTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *SearchEngineResultsPageTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchEngineResultsPageTypeEnum.Merge(m, src)
+}
+func (m *SearchEngineResultsPageTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SearchEngineResultsPageTypeEnum.Size(m)
+}
+func (m *SearchEngineResultsPageTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchEngineResultsPageTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchEngineResultsPageTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType", SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType_name, SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType_value)
+	proto.RegisterType((*SearchEngineResultsPageTypeEnum)(nil), "google.ads.googleads.v3.enums.SearchEngineResultsPageTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/search_engine_results_page_type.proto", fileDescriptor_8d0c9169c79e638f)
+}
+
+var fileDescriptor_8d0c9169c79e638f = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xd1, 0x4e, 0xf2, 0x30,
+	0x14, 0xfe, 0x37, 0xfe, 0xa8, 0x29, 0x24, 0x2c, 0xf3, 0x4e, 0x25, 0x0a, 0x0f, 0xd0, 0x5d, 0xec,
+	0xae, 0x5e, 0x15, 0x98, 0x84, 0x68, 0xca, 0x02, 0x82, 0xd1, 0x2c, 0x59, 0x2a, 0x6b, 0xea, 0x12,
+	0x68, 0x9b, 0x75, 0x90, 0xf0, 0x1c, 0xbe, 0x81, 0x97, 0x3e, 0x8a, 0x8f, 0xe2, 0xbd, 0xf7, 0x66,
+	0x2d, 0x70, 0xe7, 0x6e, 0x9a, 0x2f, 0xe7, 0x3b, 0xe7, 0xfb, 0xce, 0x77, 0x0a, 0x06, 0x5c, 0x4a,
+	0xbe, 0x62, 0x01, 0xcd, 0x74, 0x60, 0x61, 0x85, 0xb6, 0x61, 0xc0, 0xc4, 0x66, 0xad, 0x03, 0xcd,
+	0x68, 0xb1, 0x7c, 0x4b, 0x99, 0xe0, 0xb9, 0x60, 0x69, 0xc1, 0xf4, 0x66, 0x55, 0xea, 0x54, 0x51,
+	0xce, 0xd2, 0x72, 0xa7, 0x18, 0x54, 0x85, 0x2c, 0xa5, 0xdf, 0xb1, 0x93, 0x90, 0x66, 0x1a, 0x1e,
+	0x45, 0xe0, 0x36, 0x84, 0x46, 0xe4, 0xe2, 0xea, 0xe0, 0xa1, 0xf2, 0x80, 0x0a, 0x21, 0x4b, 0x5a,
+	0xe6, 0x52, 0x68, 0x3b, 0xdc, 0x7b, 0x77, 0xc0, 0xf5, 0xcc, 0xd8, 0x44, 0xc6, 0x65, 0x6a, 0x4d,
+	0x62, 0xca, 0xd9, 0xe3, 0x4e, 0xb1, 0x48, 0x6c, 0xd6, 0x3d, 0x05, 0x2e, 0x6b, 0x5a, 0xfc, 0x36,
+	0x68, 0xce, 0xc9, 0x2c, 0x8e, 0x06, 0xe3, 0xbb, 0x71, 0x34, 0xf4, 0xfe, 0xf9, 0x4d, 0x70, 0x3a,
+	0x27, 0xf7, 0x64, 0xf2, 0x44, 0x3c, 0xc7, 0x6f, 0x81, 0x33, 0x3c, 0x9c, 0xa5, 0x13, 0xf2, 0xf0,
+	0xec, 0xb9, 0xbe, 0x07, 0x5a, 0x93, 0xe9, 0x08, 0x93, 0xf1, 0xc0, 0x56, 0x1a, 0xfe, 0x39, 0x68,
+	0x57, 0x3c, 0x26, 0xc3, 0x74, 0xcf, 0x78, 0xff, 0xfb, 0x3f, 0x0e, 0xe8, 0x2e, 0xe5, 0x1a, 0xd6,
+	0x26, 0xeb, 0xdf, 0xd4, 0x6c, 0x15, 0x57, 0xe9, 0x62, 0xe7, 0xa5, 0xbf, 0x97, 0xe0, 0x72, 0x45,
+	0x05, 0x87, 0xb2, 0xe0, 0x01, 0x67, 0xc2, 0x64, 0x3f, 0x5c, 0x5c, 0xe5, 0xfa, 0x8f, 0x0f, 0xb8,
+	0x35, 0xef, 0x87, 0xdb, 0x18, 0x61, 0xfc, 0xe9, 0x76, 0x46, 0x56, 0x0a, 0x67, 0x1a, 0x5a, 0x58,
+	0xa1, 0x45, 0x08, 0xab, 0x23, 0xe9, 0xaf, 0x03, 0x9f, 0xe0, 0x4c, 0x27, 0x47, 0x3e, 0x59, 0x84,
+	0x89, 0xe1, 0xbf, 0xdd, 0xae, 0x2d, 0x22, 0x84, 0x33, 0x8d, 0xd0, 0xb1, 0x03, 0xa1, 0x45, 0x88,
+	0x90, 0xe9, 0x79, 0x3d, 0x31, 0x8b, 0x85, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xf0, 0x2c,
+	0x2c, 0x18, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/search_term_match_type.pb.go b/googleapis/ads/googleads/v3/enums/search_term_match_type.pb.go
new file mode 100644
index 0000000..9a0bd77
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/search_term_match_type.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/search_term_match_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible match types for a keyword triggering an ad, including variants.
+type SearchTermMatchTypeEnum_SearchTermMatchType int32
+
+const (
+	// Not specified.
+	SearchTermMatchTypeEnum_UNSPECIFIED SearchTermMatchTypeEnum_SearchTermMatchType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SearchTermMatchTypeEnum_UNKNOWN SearchTermMatchTypeEnum_SearchTermMatchType = 1
+	// Broad match.
+	SearchTermMatchTypeEnum_BROAD SearchTermMatchTypeEnum_SearchTermMatchType = 2
+	// Exact match.
+	SearchTermMatchTypeEnum_EXACT SearchTermMatchTypeEnum_SearchTermMatchType = 3
+	// Phrase match.
+	SearchTermMatchTypeEnum_PHRASE SearchTermMatchTypeEnum_SearchTermMatchType = 4
+	// Exact match (close variant).
+	SearchTermMatchTypeEnum_NEAR_EXACT SearchTermMatchTypeEnum_SearchTermMatchType = 5
+	// Phrase match (close variant).
+	SearchTermMatchTypeEnum_NEAR_PHRASE SearchTermMatchTypeEnum_SearchTermMatchType = 6
+)
+
+var SearchTermMatchTypeEnum_SearchTermMatchType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BROAD",
+	3: "EXACT",
+	4: "PHRASE",
+	5: "NEAR_EXACT",
+	6: "NEAR_PHRASE",
+}
+
+var SearchTermMatchTypeEnum_SearchTermMatchType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"BROAD":       2,
+	"EXACT":       3,
+	"PHRASE":      4,
+	"NEAR_EXACT":  5,
+	"NEAR_PHRASE": 6,
+}
+
+func (x SearchTermMatchTypeEnum_SearchTermMatchType) String() string {
+	return proto.EnumName(SearchTermMatchTypeEnum_SearchTermMatchType_name, int32(x))
+}
+
+func (SearchTermMatchTypeEnum_SearchTermMatchType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_37984e6ef3c9b9dd, []int{0, 0}
+}
+
+// Container for enum describing match types for a keyword triggering an ad.
+type SearchTermMatchTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchTermMatchTypeEnum) Reset()         { *m = SearchTermMatchTypeEnum{} }
+func (m *SearchTermMatchTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SearchTermMatchTypeEnum) ProtoMessage()    {}
+func (*SearchTermMatchTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37984e6ef3c9b9dd, []int{0}
+}
+
+func (m *SearchTermMatchTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Unmarshal(m, b)
+}
+func (m *SearchTermMatchTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *SearchTermMatchTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermMatchTypeEnum.Merge(m, src)
+}
+func (m *SearchTermMatchTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Size(m)
+}
+func (m *SearchTermMatchTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermMatchTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermMatchTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SearchTermMatchTypeEnum_SearchTermMatchType", SearchTermMatchTypeEnum_SearchTermMatchType_name, SearchTermMatchTypeEnum_SearchTermMatchType_value)
+	proto.RegisterType((*SearchTermMatchTypeEnum)(nil), "google.ads.googleads.v3.enums.SearchTermMatchTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/search_term_match_type.proto", fileDescriptor_37984e6ef3c9b9dd)
+}
+
+var fileDescriptor_37984e6ef3c9b9dd = []byte{
+	// 337 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x18, 0xc5, 0x6d, 0xe7, 0x26, 0x66, 0xa0, 0xa5, 0x5e, 0x28, 0xe2, 0x2e, 0xb6, 0x07, 0x48, 0x2f,
+	0x7a, 0x17, 0xaf, 0xd2, 0xad, 0xce, 0x21, 0x76, 0x65, 0xff, 0x14, 0x29, 0x8c, 0xb8, 0x86, 0x3a,
+	0x58, 0x92, 0xd2, 0x74, 0x83, 0x3d, 0x86, 0xaf, 0xe0, 0xa5, 0x8f, 0xe2, 0xa3, 0x08, 0xbe, 0x83,
+	0x24, 0xd9, 0x7a, 0x35, 0xbd, 0x29, 0xbf, 0xe6, 0x7c, 0xe7, 0xf0, 0x7d, 0x07, 0xa0, 0x4c, 0x88,
+	0x6c, 0x45, 0x3d, 0x92, 0x4a, 0xcf, 0xa0, 0xa2, 0x8d, 0xef, 0x51, 0xbe, 0x66, 0xd2, 0x93, 0x94,
+	0x14, 0x8b, 0xb7, 0x79, 0x49, 0x0b, 0x36, 0x67, 0xa4, 0x54, 0xb8, 0xcd, 0x29, 0xcc, 0x0b, 0x51,
+	0x0a, 0xb7, 0x65, 0x0c, 0x90, 0xa4, 0x12, 0x56, 0x5e, 0xb8, 0xf1, 0xa1, 0xf6, 0x5e, 0xdf, 0xec,
+	0xa3, 0xf3, 0xa5, 0x47, 0x38, 0x17, 0x25, 0x29, 0x97, 0x82, 0x4b, 0x63, 0xee, 0xbc, 0x5b, 0xe0,
+	0x72, 0xac, 0xd3, 0x27, 0xb4, 0x60, 0x8f, 0x2a, 0x7b, 0xb2, 0xcd, 0x69, 0xc8, 0xd7, 0xac, 0xb3,
+	0x01, 0x17, 0x07, 0x24, 0xf7, 0x1c, 0x34, 0xa7, 0xd1, 0x38, 0x0e, 0xbb, 0x83, 0xbb, 0x41, 0xd8,
+	0x73, 0x8e, 0xdc, 0x26, 0x38, 0x99, 0x46, 0x0f, 0xd1, 0xf0, 0x29, 0x72, 0x2c, 0xf7, 0x14, 0xd4,
+	0x83, 0xd1, 0x10, 0xf7, 0x1c, 0x5b, 0x61, 0xf8, 0x8c, 0xbb, 0x13, 0xa7, 0xe6, 0x02, 0xd0, 0x88,
+	0xef, 0x47, 0x78, 0x1c, 0x3a, 0xc7, 0xee, 0x19, 0x00, 0x51, 0x88, 0x47, 0x73, 0xa3, 0xd5, 0x55,
+	0x9e, 0xfe, 0xdf, 0x0d, 0x34, 0x82, 0x1f, 0x0b, 0xb4, 0x17, 0x82, 0xc1, 0x7f, 0xef, 0x0a, 0xae,
+	0x0e, 0xec, 0x16, 0xab, 0x9b, 0x62, 0xeb, 0x25, 0xd8, 0x59, 0x33, 0xb1, 0x22, 0x3c, 0x83, 0xa2,
+	0xc8, 0xbc, 0x8c, 0x72, 0x7d, 0xf1, 0xbe, 0xde, 0x7c, 0x29, 0xff, 0x68, 0xfb, 0x56, 0x7f, 0x3f,
+	0xec, 0x5a, 0x1f, 0xe3, 0x4f, 0xbb, 0xd5, 0x37, 0x51, 0x38, 0x95, 0xd0, 0xa0, 0xa2, 0x99, 0x0f,
+	0x55, 0x45, 0xf2, 0x6b, 0xaf, 0x27, 0x38, 0x95, 0x49, 0xa5, 0x27, 0x33, 0x3f, 0xd1, 0xfa, 0xb7,
+	0xdd, 0x36, 0x8f, 0x08, 0xe1, 0x54, 0x22, 0x54, 0x4d, 0x20, 0x34, 0xf3, 0x11, 0xd2, 0x33, 0xaf,
+	0x0d, 0xbd, 0x98, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x65, 0x16, 0xc4, 0x05, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/search_term_targeting_status.pb.go b/googleapis/ads/googleads/v3/enums/search_term_targeting_status.pb.go
new file mode 100644
index 0000000..4caaa6c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/search_term_targeting_status.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/search_term_targeting_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Indicates whether the search term is one of your targeted or excluded
+// keywords.
+type SearchTermTargetingStatusEnum_SearchTermTargetingStatus int32
+
+const (
+	// Not specified.
+	SearchTermTargetingStatusEnum_UNSPECIFIED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	SearchTermTargetingStatusEnum_UNKNOWN SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 1
+	// Search term is added to targeted keywords.
+	SearchTermTargetingStatusEnum_ADDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 2
+	// Search term matches a negative keyword.
+	SearchTermTargetingStatusEnum_EXCLUDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 3
+	// Search term has been both added and excluded.
+	SearchTermTargetingStatusEnum_ADDED_EXCLUDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 4
+	// Search term is neither targeted nor excluded.
+	SearchTermTargetingStatusEnum_NONE SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 5
+)
+
+var SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADDED",
+	3: "EXCLUDED",
+	4: "ADDED_EXCLUDED",
+	5: "NONE",
+}
+
+var SearchTermTargetingStatusEnum_SearchTermTargetingStatus_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ADDED":          2,
+	"EXCLUDED":       3,
+	"ADDED_EXCLUDED": 4,
+	"NONE":           5,
+}
+
+func (x SearchTermTargetingStatusEnum_SearchTermTargetingStatus) String() string {
+	return proto.EnumName(SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name, int32(x))
+}
+
+func (SearchTermTargetingStatusEnum_SearchTermTargetingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_da66182abbe9bacc, []int{0, 0}
+}
+
+// Container for enum indicating whether a search term is one of your targeted
+// or excluded keywords.
+type SearchTermTargetingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchTermTargetingStatusEnum) Reset()         { *m = SearchTermTargetingStatusEnum{} }
+func (m *SearchTermTargetingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*SearchTermTargetingStatusEnum) ProtoMessage()    {}
+func (*SearchTermTargetingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da66182abbe9bacc, []int{0}
+}
+
+func (m *SearchTermTargetingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Unmarshal(m, b)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermTargetingStatusEnum.Merge(m, src)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Size(m)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermTargetingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermTargetingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus", SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name, SearchTermTargetingStatusEnum_SearchTermTargetingStatus_value)
+	proto.RegisterType((*SearchTermTargetingStatusEnum)(nil), "google.ads.googleads.v3.enums.SearchTermTargetingStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/search_term_targeting_status.proto", fileDescriptor_da66182abbe9bacc)
+}
+
+var fileDescriptor_da66182abbe9bacc = []byte{
+	// 336 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x4e, 0xf3, 0x30,
+	0x10, 0xfd, 0x92, 0xb6, 0x1f, 0xc5, 0x45, 0x10, 0x79, 0x07, 0xa2, 0x48, 0xed, 0x01, 0x9c, 0x45,
+	0x76, 0x66, 0x43, 0xda, 0x84, 0xaa, 0x02, 0xa5, 0x95, 0xfa, 0x03, 0x42, 0x91, 0x22, 0xd3, 0x58,
+	0x26, 0x52, 0x63, 0x47, 0xb6, 0xdb, 0x7b, 0x70, 0x05, 0x96, 0x1c, 0x85, 0xa3, 0xb0, 0xe5, 0x02,
+	0x28, 0x4e, 0x93, 0x5d, 0xd9, 0x58, 0xcf, 0xf3, 0x66, 0xde, 0x9b, 0x79, 0xe0, 0x8e, 0x09, 0xc1,
+	0xb6, 0xd4, 0x25, 0xa9, 0x72, 0x2b, 0x58, 0xa2, 0xbd, 0xe7, 0x52, 0xbe, 0xcb, 0x95, 0xab, 0x28,
+	0x91, 0x9b, 0xb7, 0x44, 0x53, 0x99, 0x27, 0x9a, 0x48, 0x46, 0x75, 0xc6, 0x59, 0xa2, 0x34, 0xd1,
+	0x3b, 0x85, 0x0a, 0x29, 0xb4, 0x80, 0xfd, 0x6a, 0x0c, 0x91, 0x54, 0xa1, 0x46, 0x01, 0xed, 0x3d,
+	0x64, 0x14, 0xae, 0xae, 0x6b, 0x83, 0x22, 0x73, 0x09, 0xe7, 0x42, 0x13, 0x9d, 0x09, 0x7e, 0x18,
+	0x1e, 0xbe, 0x5b, 0xa0, 0xbf, 0x30, 0x1e, 0x4b, 0x2a, 0xf3, 0x65, 0xed, 0xb0, 0x30, 0x06, 0x21,
+	0xdf, 0xe5, 0xc3, 0x02, 0x5c, 0x1e, 0x6d, 0x80, 0x17, 0xa0, 0xb7, 0x8a, 0x16, 0xf3, 0x70, 0x3c,
+	0xbd, 0x9f, 0x86, 0x81, 0xf3, 0x0f, 0xf6, 0xc0, 0xc9, 0x2a, 0x7a, 0x88, 0x66, 0x4f, 0x91, 0x63,
+	0xc1, 0x53, 0xd0, 0xf1, 0x83, 0x20, 0x0c, 0x1c, 0x1b, 0x9e, 0x81, 0x6e, 0xf8, 0x3c, 0x7e, 0x5c,
+	0x95, 0xbf, 0x16, 0x84, 0xe0, 0xdc, 0x10, 0x49, 0x53, 0x6b, 0xc3, 0x2e, 0x68, 0x47, 0xb3, 0x28,
+	0x74, 0x3a, 0xa3, 0x1f, 0x0b, 0x0c, 0x36, 0x22, 0x47, 0x7f, 0xde, 0x35, 0xba, 0x39, 0xba, 0xd5,
+	0xbc, 0xbc, 0x6c, 0x6e, 0xbd, 0x8c, 0x0e, 0x02, 0x4c, 0x6c, 0x09, 0x67, 0x48, 0x48, 0xe6, 0x32,
+	0xca, 0xcd, 0xdd, 0x75, 0xd4, 0x45, 0xa6, 0x8e, 0x24, 0x7f, 0x6b, 0xde, 0x0f, 0xbb, 0x35, 0xf1,
+	0xfd, 0x4f, 0xbb, 0x3f, 0xa9, 0xa4, 0xfc, 0x54, 0xa1, 0x0a, 0x96, 0x68, 0xed, 0xa1, 0x32, 0x22,
+	0xf5, 0x55, 0xf3, 0xb1, 0x9f, 0xaa, 0xb8, 0xe1, 0xe3, 0xb5, 0x17, 0x1b, 0xfe, 0xdb, 0x1e, 0x54,
+	0x45, 0x8c, 0xfd, 0x54, 0x61, 0xdc, 0x74, 0x60, 0xbc, 0xf6, 0x30, 0x36, 0x3d, 0xaf, 0xff, 0xcd,
+	0x62, 0xde, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x19, 0x13, 0x86, 0x11, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/served_asset_field_type.pb.go b/googleapis/ads/googleads/v3/enums/served_asset_field_type.pb.go
new file mode 100644
index 0000000..ed91b92
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/served_asset_field_type.pb.go
@@ -0,0 +1,140 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/served_asset_field_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible asset field types.
+type ServedAssetFieldTypeEnum_ServedAssetFieldType int32
+
+const (
+	// No value has been specified.
+	ServedAssetFieldTypeEnum_UNSPECIFIED ServedAssetFieldTypeEnum_ServedAssetFieldType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	ServedAssetFieldTypeEnum_UNKNOWN ServedAssetFieldTypeEnum_ServedAssetFieldType = 1
+	// The asset is used in headline 1.
+	ServedAssetFieldTypeEnum_HEADLINE_1 ServedAssetFieldTypeEnum_ServedAssetFieldType = 2
+	// The asset is used in headline 2.
+	ServedAssetFieldTypeEnum_HEADLINE_2 ServedAssetFieldTypeEnum_ServedAssetFieldType = 3
+	// The asset is used in headline 3.
+	ServedAssetFieldTypeEnum_HEADLINE_3 ServedAssetFieldTypeEnum_ServedAssetFieldType = 4
+	// The asset is used in description 1.
+	ServedAssetFieldTypeEnum_DESCRIPTION_1 ServedAssetFieldTypeEnum_ServedAssetFieldType = 5
+	// The asset is used in description 2.
+	ServedAssetFieldTypeEnum_DESCRIPTION_2 ServedAssetFieldTypeEnum_ServedAssetFieldType = 6
+)
+
+var ServedAssetFieldTypeEnum_ServedAssetFieldType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HEADLINE_1",
+	3: "HEADLINE_2",
+	4: "HEADLINE_3",
+	5: "DESCRIPTION_1",
+	6: "DESCRIPTION_2",
+}
+
+var ServedAssetFieldTypeEnum_ServedAssetFieldType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"HEADLINE_1":    2,
+	"HEADLINE_2":    3,
+	"HEADLINE_3":    4,
+	"DESCRIPTION_1": 5,
+	"DESCRIPTION_2": 6,
+}
+
+func (x ServedAssetFieldTypeEnum_ServedAssetFieldType) String() string {
+	return proto.EnumName(ServedAssetFieldTypeEnum_ServedAssetFieldType_name, int32(x))
+}
+
+func (ServedAssetFieldTypeEnum_ServedAssetFieldType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_22851b573f32db7f, []int{0, 0}
+}
+
+// Container for enum describing possible asset field types.
+type ServedAssetFieldTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ServedAssetFieldTypeEnum) Reset()         { *m = ServedAssetFieldTypeEnum{} }
+func (m *ServedAssetFieldTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ServedAssetFieldTypeEnum) ProtoMessage()    {}
+func (*ServedAssetFieldTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_22851b573f32db7f, []int{0}
+}
+
+func (m *ServedAssetFieldTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServedAssetFieldTypeEnum.Unmarshal(m, b)
+}
+func (m *ServedAssetFieldTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServedAssetFieldTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *ServedAssetFieldTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServedAssetFieldTypeEnum.Merge(m, src)
+}
+func (m *ServedAssetFieldTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ServedAssetFieldTypeEnum.Size(m)
+}
+func (m *ServedAssetFieldTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServedAssetFieldTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServedAssetFieldTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.ServedAssetFieldTypeEnum_ServedAssetFieldType", ServedAssetFieldTypeEnum_ServedAssetFieldType_name, ServedAssetFieldTypeEnum_ServedAssetFieldType_value)
+	proto.RegisterType((*ServedAssetFieldTypeEnum)(nil), "google.ads.googleads.v3.enums.ServedAssetFieldTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/served_asset_field_type.proto", fileDescriptor_22851b573f32db7f)
+}
+
+var fileDescriptor_22851b573f32db7f = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xdd, 0x4a, 0xc3, 0x30,
+	0x14, 0xb6, 0x9d, 0x4e, 0xc8, 0x50, 0x63, 0xf1, 0x42, 0xc5, 0x5d, 0x6c, 0x0f, 0x90, 0xb2, 0xe5,
+	0x2e, 0xbb, 0xca, 0xb6, 0x6e, 0x16, 0xa5, 0x2b, 0xee, 0x47, 0x90, 0x42, 0xa9, 0x26, 0x96, 0xc2,
+	0x96, 0x94, 0xa5, 0x1b, 0xec, 0x15, 0x7c, 0x0c, 0x6f, 0x04, 0x1f, 0xc5, 0x47, 0xf1, 0xc2, 0x67,
+	0x90, 0xa6, 0x6e, 0x30, 0x99, 0xde, 0x84, 0xef, 0x9c, 0xef, 0x7c, 0x1f, 0xe7, 0x7c, 0x01, 0xad,
+	0x58, 0xca, 0x78, 0xca, 0xed, 0x88, 0x29, 0xbb, 0x80, 0x39, 0x5a, 0x62, 0x9b, 0x8b, 0xc5, 0x4c,
+	0xd9, 0x8a, 0xcf, 0x97, 0x9c, 0x85, 0x91, 0x52, 0x3c, 0x0b, 0x9f, 0x13, 0x3e, 0x65, 0x61, 0xb6,
+	0x4a, 0x39, 0x4a, 0xe7, 0x32, 0x93, 0x56, 0xb5, 0x50, 0xa0, 0x88, 0x29, 0xb4, 0x11, 0xa3, 0x25,
+	0x46, 0x5a, 0x7c, 0x79, 0xb5, 0xf6, 0x4e, 0x13, 0x3b, 0x12, 0x42, 0x66, 0x51, 0x96, 0x48, 0xa1,
+	0x0a, 0x71, 0xfd, 0xcd, 0x00, 0xe7, 0x43, 0x6d, 0x4f, 0x73, 0xf7, 0x5e, 0x6e, 0x3e, 0x5a, 0xa5,
+	0xdc, 0x11, 0x8b, 0x59, 0xfd, 0xc5, 0x00, 0x67, 0xbb, 0x48, 0xeb, 0x04, 0x54, 0xc6, 0xde, 0xd0,
+	0x77, 0x3a, 0x6e, 0xcf, 0x75, 0xba, 0x70, 0xcf, 0xaa, 0x80, 0xc3, 0xb1, 0x77, 0xe3, 0x0d, 0xee,
+	0x3d, 0x68, 0x58, 0xc7, 0x00, 0x5c, 0x3b, 0xb4, 0x7b, 0xeb, 0x7a, 0x4e, 0xd8, 0x80, 0xe6, 0x56,
+	0xdd, 0x84, 0xa5, 0xad, 0x1a, 0xc3, 0x7d, 0xeb, 0x14, 0x1c, 0x75, 0x9d, 0x61, 0xe7, 0xce, 0xf5,
+	0x47, 0xee, 0xc0, 0x0b, 0x1b, 0xf0, 0xe0, 0x77, 0xab, 0x09, 0xcb, 0xed, 0x2f, 0x03, 0xd4, 0x9e,
+	0xe4, 0x0c, 0xfd, 0x7b, 0x6d, 0xfb, 0x62, 0xd7, 0xbe, 0x7e, 0x7e, 0xaa, 0x6f, 0x3c, 0xb4, 0x7f,
+	0xb4, 0xb1, 0x9c, 0x46, 0x22, 0x46, 0x72, 0x1e, 0xdb, 0x31, 0x17, 0x3a, 0x88, 0x75, 0xec, 0x69,
+	0xa2, 0xfe, 0xf8, 0x85, 0x96, 0x7e, 0x5f, 0xcd, 0x52, 0x9f, 0xd2, 0x77, 0xb3, 0xda, 0x2f, 0xac,
+	0x28, 0x53, 0xa8, 0x80, 0x39, 0x9a, 0x60, 0x94, 0x07, 0xa7, 0x3e, 0xd6, 0x7c, 0x40, 0x99, 0x0a,
+	0x36, 0x7c, 0x30, 0xc1, 0x81, 0xe6, 0x3f, 0xcd, 0x5a, 0xd1, 0x24, 0x84, 0x32, 0x45, 0xc8, 0x66,
+	0x82, 0x90, 0x09, 0x26, 0x44, 0xcf, 0x3c, 0x96, 0xf5, 0x62, 0xf8, 0x3b, 0x00, 0x00, 0xff, 0xff,
+	0xed, 0xfc, 0xd1, 0x6b, 0x1d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/shared_set_status.pb.go b/googleapis/ads/googleads/v3/enums/shared_set_status.pb.go
new file mode 100644
index 0000000..1cc2ded
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/shared_set_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/shared_set_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible shared set statuses.
+type SharedSetStatusEnum_SharedSetStatus int32
+
+const (
+	// Not specified.
+	SharedSetStatusEnum_UNSPECIFIED SharedSetStatusEnum_SharedSetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	SharedSetStatusEnum_UNKNOWN SharedSetStatusEnum_SharedSetStatus = 1
+	// The shared set is enabled.
+	SharedSetStatusEnum_ENABLED SharedSetStatusEnum_SharedSetStatus = 2
+	// The shared set is removed and can no longer be used.
+	SharedSetStatusEnum_REMOVED SharedSetStatusEnum_SharedSetStatus = 3
+)
+
+var SharedSetStatusEnum_SharedSetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+
+var SharedSetStatusEnum_SharedSetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x SharedSetStatusEnum_SharedSetStatus) String() string {
+	return proto.EnumName(SharedSetStatusEnum_SharedSetStatus_name, int32(x))
+}
+
+func (SharedSetStatusEnum_SharedSetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_aa56d9c6516a1fd1, []int{0, 0}
+}
+
+// Container for enum describing types of shared set statuses.
+type SharedSetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetStatusEnum) Reset()         { *m = SharedSetStatusEnum{} }
+func (m *SharedSetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetStatusEnum) ProtoMessage()    {}
+func (*SharedSetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa56d9c6516a1fd1, []int{0}
+}
+
+func (m *SharedSetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetStatusEnum.Unmarshal(m, b)
+}
+func (m *SharedSetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *SharedSetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetStatusEnum.Merge(m, src)
+}
+func (m *SharedSetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetStatusEnum.Size(m)
+}
+func (m *SharedSetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SharedSetStatusEnum_SharedSetStatus", SharedSetStatusEnum_SharedSetStatus_name, SharedSetStatusEnum_SharedSetStatus_value)
+	proto.RegisterType((*SharedSetStatusEnum)(nil), "google.ads.googleads.v3.enums.SharedSetStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/shared_set_status.proto", fileDescriptor_aa56d9c6516a1fd1)
+}
+
+var fileDescriptor_aa56d9c6516a1fd1 = []byte{
+	// 301 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcd, 0x4e, 0x32, 0x31,
+	0x14, 0xfd, 0x18, 0x92, 0xcf, 0xa4, 0x2c, 0x98, 0xa0, 0x2b, 0x23, 0x0b, 0x78, 0x80, 0x76, 0xd1,
+	0xb8, 0xa9, 0xab, 0x8e, 0x54, 0x42, 0xd4, 0x81, 0x38, 0x61, 0x4c, 0xcc, 0x24, 0x58, 0x6d, 0x53,
+	0x49, 0xa0, 0x25, 0xdc, 0xc2, 0x03, 0xb9, 0xf4, 0x51, 0x7c, 0x13, 0x7d, 0x0a, 0xd3, 0x0e, 0xb0,
+	0x20, 0xd1, 0xcd, 0xe4, 0xdc, 0x7b, 0x7e, 0xe6, 0xf4, 0xa2, 0x4b, 0xe3, 0x9c, 0x59, 0x68, 0x22,
+	0x15, 0x90, 0x1a, 0x06, 0xb4, 0xa5, 0x44, 0xdb, 0xcd, 0x12, 0x08, 0xbc, 0xc9, 0xb5, 0x56, 0x33,
+	0xd0, 0x7e, 0x06, 0x5e, 0xfa, 0x0d, 0xe0, 0xd5, 0xda, 0x79, 0xd7, 0xe9, 0xd6, 0x5a, 0x2c, 0x15,
+	0xe0, 0x83, 0x0d, 0x6f, 0x29, 0x8e, 0xb6, 0xf3, 0x8b, 0x7d, 0xea, 0x6a, 0x4e, 0xa4, 0xb5, 0xce,
+	0x4b, 0x3f, 0x77, 0x76, 0x67, 0xee, 0x3f, 0xa3, 0xd3, 0x22, 0xe6, 0x16, 0xda, 0x17, 0x31, 0x55,
+	0xd8, 0xcd, 0xb2, 0x3f, 0x42, 0xed, 0xa3, 0x75, 0xa7, 0x8d, 0x5a, 0xd3, 0xbc, 0x98, 0x88, 0xeb,
+	0xd1, 0xcd, 0x48, 0x0c, 0xd2, 0x7f, 0x9d, 0x16, 0x3a, 0x99, 0xe6, 0xb7, 0xf9, 0xf8, 0x31, 0x4f,
+	0x1b, 0x61, 0x10, 0x39, 0xcf, 0xee, 0xc4, 0x20, 0x4d, 0xc2, 0xf0, 0x20, 0xee, 0xc7, 0xa5, 0x18,
+	0xa4, 0xcd, 0xec, 0xab, 0x81, 0x7a, 0xaf, 0x6e, 0x89, 0xff, 0x6c, 0x99, 0x9d, 0x1d, 0xfd, 0x6e,
+	0x12, 0xda, 0x4d, 0x1a, 0x4f, 0xd9, 0xce, 0x66, 0xdc, 0x42, 0x5a, 0x83, 0xdd, 0xda, 0x10, 0xa3,
+	0x6d, 0xec, 0xbe, 0xbf, 0xd1, 0x6a, 0x0e, 0xbf, 0x9c, 0xec, 0x2a, 0x7e, 0xdf, 0x93, 0xe6, 0x90,
+	0xf3, 0x8f, 0xa4, 0x3b, 0xac, 0xa3, 0xb8, 0x02, 0x5c, 0xc3, 0x80, 0x4a, 0x8a, 0xc3, 0x8b, 0xe1,
+	0x73, 0xcf, 0x57, 0x5c, 0x41, 0x75, 0xe0, 0xab, 0x92, 0x56, 0x91, 0xff, 0x4e, 0x7a, 0xf5, 0x92,
+	0x31, 0xae, 0x80, 0xb1, 0x83, 0x82, 0xb1, 0x92, 0x32, 0x16, 0x35, 0x2f, 0xff, 0x63, 0x31, 0xfa,
+	0x13, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x90, 0xf6, 0xeb, 0xca, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/shared_set_type.pb.go b/googleapis/ads/googleads/v3/enums/shared_set_type.pb.go
new file mode 100644
index 0000000..f0e3242
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/shared_set_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/shared_set_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible shared set types.
+type SharedSetTypeEnum_SharedSetType int32
+
+const (
+	// Not specified.
+	SharedSetTypeEnum_UNSPECIFIED SharedSetTypeEnum_SharedSetType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SharedSetTypeEnum_UNKNOWN SharedSetTypeEnum_SharedSetType = 1
+	// A set of keywords that can be excluded from targeting.
+	SharedSetTypeEnum_NEGATIVE_KEYWORDS SharedSetTypeEnum_SharedSetType = 2
+	// A set of placements that can be excluded from targeting.
+	SharedSetTypeEnum_NEGATIVE_PLACEMENTS SharedSetTypeEnum_SharedSetType = 3
+)
+
+var SharedSetTypeEnum_SharedSetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NEGATIVE_KEYWORDS",
+	3: "NEGATIVE_PLACEMENTS",
+}
+
+var SharedSetTypeEnum_SharedSetType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"NEGATIVE_KEYWORDS":   2,
+	"NEGATIVE_PLACEMENTS": 3,
+}
+
+func (x SharedSetTypeEnum_SharedSetType) String() string {
+	return proto.EnumName(SharedSetTypeEnum_SharedSetType_name, int32(x))
+}
+
+func (SharedSetTypeEnum_SharedSetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3f04b2780a66f344, []int{0, 0}
+}
+
+// Container for enum describing types of shared sets.
+type SharedSetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetTypeEnum) Reset()         { *m = SharedSetTypeEnum{} }
+func (m *SharedSetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetTypeEnum) ProtoMessage()    {}
+func (*SharedSetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3f04b2780a66f344, []int{0}
+}
+
+func (m *SharedSetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetTypeEnum.Unmarshal(m, b)
+}
+func (m *SharedSetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *SharedSetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetTypeEnum.Merge(m, src)
+}
+func (m *SharedSetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetTypeEnum.Size(m)
+}
+func (m *SharedSetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SharedSetTypeEnum_SharedSetType", SharedSetTypeEnum_SharedSetType_name, SharedSetTypeEnum_SharedSetType_value)
+	proto.RegisterType((*SharedSetTypeEnum)(nil), "google.ads.googleads.v3.enums.SharedSetTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/shared_set_type.proto", fileDescriptor_3f04b2780a66f344)
+}
+
+var fileDescriptor_3f04b2780a66f344 = []byte{
+	// 317 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0x76, 0x1d, 0x28, 0x64, 0x88, 0x5d, 0x45, 0x04, 0x71, 0x87, 0xed, 0x01, 0xd2, 0x43, 0x6e,
+	0xf1, 0x94, 0x6d, 0x71, 0x8c, 0x69, 0x57, 0xec, 0xd6, 0xa1, 0x54, 0x46, 0xb5, 0x21, 0x0e, 0xb6,
+	0xa4, 0x34, 0xd9, 0x60, 0xaf, 0xe3, 0xd1, 0x47, 0xf1, 0x45, 0x04, 0x9f, 0x42, 0x9a, 0xd8, 0xc2,
+	0x0e, 0x7a, 0x09, 0x1f, 0xbf, 0xef, 0x0f, 0x5f, 0x3e, 0x80, 0xb8, 0x94, 0x7c, 0xcd, 0xfc, 0x34,
+	0x53, 0xbe, 0x85, 0x25, 0xda, 0x21, 0x9f, 0x89, 0xed, 0x46, 0xf9, 0xea, 0x2d, 0x2d, 0x58, 0xb6,
+	0x54, 0x4c, 0x2f, 0xf5, 0x3e, 0x67, 0x30, 0x2f, 0xa4, 0x96, 0x5e, 0xc7, 0x2a, 0x61, 0x9a, 0x29,
+	0x58, 0x9b, 0xe0, 0x0e, 0x41, 0x63, 0xba, 0xba, 0xae, 0x32, 0xf3, 0x95, 0x9f, 0x0a, 0x21, 0x75,
+	0xaa, 0x57, 0x52, 0x28, 0x6b, 0xee, 0x15, 0xa0, 0x1d, 0x99, 0xd4, 0x88, 0xe9, 0xd9, 0x3e, 0x67,
+	0x54, 0x6c, 0x37, 0xbd, 0x67, 0x70, 0x7a, 0x70, 0xf4, 0xce, 0x40, 0x6b, 0x1e, 0x44, 0x21, 0x1d,
+	0x8c, 0x6f, 0xc7, 0x74, 0xe8, 0x1e, 0x79, 0x2d, 0x70, 0x32, 0x0f, 0x26, 0xc1, 0x74, 0x11, 0xb8,
+	0x0d, 0xef, 0x02, 0xb4, 0x03, 0x3a, 0x22, 0xb3, 0x71, 0x4c, 0x97, 0x13, 0xfa, 0xb8, 0x98, 0x3e,
+	0x0c, 0x23, 0xd7, 0xf1, 0x2e, 0xc1, 0x79, 0x7d, 0x0e, 0xef, 0xc8, 0x80, 0xde, 0xd3, 0x60, 0x16,
+	0xb9, 0xcd, 0xfe, 0x57, 0x03, 0x74, 0x5f, 0xe5, 0x06, 0xfe, 0xdb, 0xbb, 0xef, 0x1d, 0x54, 0x08,
+	0xcb, 0xb6, 0x61, 0xe3, 0xa9, 0xff, 0x6b, 0xe2, 0x72, 0x9d, 0x0a, 0x0e, 0x65, 0xc1, 0x7d, 0xce,
+	0x84, 0xf9, 0x4b, 0xb5, 0x58, 0xbe, 0x52, 0x7f, 0x0c, 0x78, 0x63, 0xde, 0x77, 0xa7, 0x39, 0x22,
+	0xe4, 0xc3, 0xe9, 0x8c, 0x6c, 0x14, 0xc9, 0x14, 0xb4, 0xb0, 0x44, 0x31, 0x82, 0xe5, 0x06, 0xea,
+	0xb3, 0xe2, 0x13, 0x92, 0xa9, 0xa4, 0xe6, 0x93, 0x18, 0x25, 0x86, 0xff, 0x76, 0xba, 0xf6, 0x88,
+	0x31, 0xc9, 0x14, 0xc6, 0xb5, 0x02, 0xe3, 0x18, 0x61, 0x6c, 0x34, 0x2f, 0xc7, 0xa6, 0x18, 0xfa,
+	0x09, 0x00, 0x00, 0xff, 0xff, 0x69, 0xb8, 0x8e, 0xf5, 0xd8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/simulation_modification_method.pb.go b/googleapis/ads/googleads/v3/enums/simulation_modification_method.pb.go
new file mode 100644
index 0000000..91f8457
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/simulation_modification_method.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/simulation_modification_method.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the method by which a simulation modifies a field.
+type SimulationModificationMethodEnum_SimulationModificationMethod int32
+
+const (
+	// Not specified.
+	SimulationModificationMethodEnum_UNSPECIFIED SimulationModificationMethodEnum_SimulationModificationMethod = 0
+	// Used for return value only. Represents value unknown in this version.
+	SimulationModificationMethodEnum_UNKNOWN SimulationModificationMethodEnum_SimulationModificationMethod = 1
+	// The values in a simulation were applied to all children of a given
+	// resource uniformly. Overrides on child resources were not respected.
+	SimulationModificationMethodEnum_UNIFORM SimulationModificationMethodEnum_SimulationModificationMethod = 2
+	// The values in a simulation were applied to the given resource.
+	// Overrides on child resources were respected, and traffic estimates
+	// do not include these resources.
+	SimulationModificationMethodEnum_DEFAULT SimulationModificationMethodEnum_SimulationModificationMethod = 3
+)
+
+var SimulationModificationMethodEnum_SimulationModificationMethod_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNIFORM",
+	3: "DEFAULT",
+}
+
+var SimulationModificationMethodEnum_SimulationModificationMethod_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UNIFORM":     2,
+	"DEFAULT":     3,
+}
+
+func (x SimulationModificationMethodEnum_SimulationModificationMethod) String() string {
+	return proto.EnumName(SimulationModificationMethodEnum_SimulationModificationMethod_name, int32(x))
+}
+
+func (SimulationModificationMethodEnum_SimulationModificationMethod) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cfaf85ba3d548b87, []int{0, 0}
+}
+
+// Container for enum describing the method by which a simulation modifies
+// a field.
+type SimulationModificationMethodEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SimulationModificationMethodEnum) Reset()         { *m = SimulationModificationMethodEnum{} }
+func (m *SimulationModificationMethodEnum) String() string { return proto.CompactTextString(m) }
+func (*SimulationModificationMethodEnum) ProtoMessage()    {}
+func (*SimulationModificationMethodEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cfaf85ba3d548b87, []int{0}
+}
+
+func (m *SimulationModificationMethodEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SimulationModificationMethodEnum.Unmarshal(m, b)
+}
+func (m *SimulationModificationMethodEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SimulationModificationMethodEnum.Marshal(b, m, deterministic)
+}
+func (m *SimulationModificationMethodEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SimulationModificationMethodEnum.Merge(m, src)
+}
+func (m *SimulationModificationMethodEnum) XXX_Size() int {
+	return xxx_messageInfo_SimulationModificationMethodEnum.Size(m)
+}
+func (m *SimulationModificationMethodEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SimulationModificationMethodEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SimulationModificationMethodEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SimulationModificationMethodEnum_SimulationModificationMethod", SimulationModificationMethodEnum_SimulationModificationMethod_name, SimulationModificationMethodEnum_SimulationModificationMethod_value)
+	proto.RegisterType((*SimulationModificationMethodEnum)(nil), "google.ads.googleads.v3.enums.SimulationModificationMethodEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/simulation_modification_method.proto", fileDescriptor_cfaf85ba3d548b87)
+}
+
+var fileDescriptor_cfaf85ba3d548b87 = []byte{
+	// 309 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xb1, 0x4e, 0xeb, 0x30,
+	0x14, 0x7d, 0x4d, 0xa5, 0x87, 0xe4, 0x0e, 0x44, 0x1d, 0x51, 0x2b, 0xd1, 0x7e, 0x80, 0x3d, 0x78,
+	0x33, 0x93, 0x4b, 0xd3, 0xaa, 0x82, 0xa4, 0x11, 0x25, 0x41, 0x42, 0x91, 0x50, 0xa8, 0x83, 0xb1,
+	0x94, 0xd8, 0x51, 0x9d, 0x74, 0xe0, 0x73, 0x18, 0xf9, 0x14, 0x3e, 0x85, 0x0f, 0x60, 0x46, 0xb1,
+	0x9b, 0x88, 0x85, 0x2c, 0xd6, 0xb9, 0xbe, 0xe7, 0x9e, 0x73, 0xef, 0x01, 0x0b, 0xae, 0x14, 0xcf,
+	0x33, 0x94, 0x32, 0x8d, 0x2c, 0x6c, 0xd0, 0x11, 0xa3, 0x4c, 0xd6, 0x85, 0x46, 0x5a, 0x14, 0x75,
+	0x9e, 0x56, 0x42, 0xc9, 0xa7, 0x42, 0x31, 0xf1, 0x22, 0xf6, 0xa7, 0x22, 0xab, 0x5e, 0x15, 0x83,
+	0xe5, 0x41, 0x55, 0x6a, 0x3c, 0xb5, 0x83, 0x30, 0x65, 0x1a, 0x76, 0x1a, 0xf0, 0x88, 0xa1, 0xd1,
+	0xb8, 0x98, 0xb4, 0x16, 0xa5, 0x40, 0xa9, 0x94, 0xaa, 0x32, 0x12, 0xda, 0x0e, 0xcf, 0xdf, 0xc0,
+	0xe5, 0xae, 0x33, 0xf1, 0x7f, 0x79, 0xf8, 0xc6, 0xc2, 0x93, 0x75, 0x31, 0x8f, 0xc1, 0xa4, 0x8f,
+	0x33, 0x3e, 0x07, 0xa3, 0x28, 0xd8, 0x85, 0xde, 0xf5, 0x66, 0xb5, 0xf1, 0x96, 0xee, 0xbf, 0xf1,
+	0x08, 0x9c, 0x45, 0xc1, 0x4d, 0xb0, 0x7d, 0x08, 0xdc, 0x81, 0x2d, 0x36, 0xab, 0xed, 0x9d, 0xef,
+	0x3a, 0x4d, 0xb1, 0xf4, 0x56, 0x34, 0xba, 0xbd, 0x77, 0x87, 0x8b, 0xef, 0x01, 0x98, 0xed, 0x55,
+	0x01, 0x7b, 0xf7, 0x5f, 0xcc, 0xfa, 0xbc, 0xc3, 0xe6, 0x88, 0x70, 0xf0, 0x78, 0xca, 0x11, 0x72,
+	0x95, 0xa7, 0x92, 0x43, 0x75, 0xe0, 0x88, 0x67, 0xd2, 0x9c, 0xd8, 0xe6, 0x5a, 0x0a, 0xfd, 0x47,
+	0xcc, 0x57, 0xe6, 0x7d, 0x77, 0x86, 0x6b, 0x4a, 0x3f, 0x9c, 0xe9, 0xda, 0x4a, 0x51, 0xa6, 0xa1,
+	0x85, 0x0d, 0x8a, 0x31, 0x6c, 0xb2, 0xd0, 0x9f, 0x6d, 0x3f, 0xa1, 0x4c, 0x27, 0x5d, 0x3f, 0x89,
+	0x71, 0x62, 0xfa, 0x5f, 0xce, 0xcc, 0x7e, 0x12, 0x42, 0x99, 0x26, 0xa4, 0x63, 0x10, 0x12, 0x63,
+	0x42, 0x0c, 0xe7, 0xf9, 0xbf, 0x59, 0x0c, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x08, 0xda, 0x85,
+	0xbb, 0xfe, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/simulation_type.pb.go b/googleapis/ads/googleads/v3/enums/simulation_type.pb.go
new file mode 100644
index 0000000..4dc425a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/simulation_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/simulation_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing the field a simulation modifies.
+type SimulationTypeEnum_SimulationType int32
+
+const (
+	// Not specified.
+	SimulationTypeEnum_UNSPECIFIED SimulationTypeEnum_SimulationType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SimulationTypeEnum_UNKNOWN SimulationTypeEnum_SimulationType = 1
+	// The simulation is for a cpc bid.
+	SimulationTypeEnum_CPC_BID SimulationTypeEnum_SimulationType = 2
+	// The simulation is for a cpv bid.
+	SimulationTypeEnum_CPV_BID SimulationTypeEnum_SimulationType = 3
+	// The simulation is for a cpa target.
+	SimulationTypeEnum_TARGET_CPA SimulationTypeEnum_SimulationType = 4
+	// The simulation is for a bid modifier.
+	SimulationTypeEnum_BID_MODIFIER SimulationTypeEnum_SimulationType = 5
+)
+
+var SimulationTypeEnum_SimulationType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CPC_BID",
+	3: "CPV_BID",
+	4: "TARGET_CPA",
+	5: "BID_MODIFIER",
+}
+
+var SimulationTypeEnum_SimulationType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"CPC_BID":      2,
+	"CPV_BID":      3,
+	"TARGET_CPA":   4,
+	"BID_MODIFIER": 5,
+}
+
+func (x SimulationTypeEnum_SimulationType) String() string {
+	return proto.EnumName(SimulationTypeEnum_SimulationType_name, int32(x))
+}
+
+func (SimulationTypeEnum_SimulationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d1c7182d7b109649, []int{0, 0}
+}
+
+// Container for enum describing the field a simulation modifies.
+type SimulationTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SimulationTypeEnum) Reset()         { *m = SimulationTypeEnum{} }
+func (m *SimulationTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SimulationTypeEnum) ProtoMessage()    {}
+func (*SimulationTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1c7182d7b109649, []int{0}
+}
+
+func (m *SimulationTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SimulationTypeEnum.Unmarshal(m, b)
+}
+func (m *SimulationTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SimulationTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *SimulationTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SimulationTypeEnum.Merge(m, src)
+}
+func (m *SimulationTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SimulationTypeEnum.Size(m)
+}
+func (m *SimulationTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SimulationTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SimulationTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SimulationTypeEnum_SimulationType", SimulationTypeEnum_SimulationType_name, SimulationTypeEnum_SimulationType_value)
+	proto.RegisterType((*SimulationTypeEnum)(nil), "google.ads.googleads.v3.enums.SimulationTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/simulation_type.proto", fileDescriptor_d1c7182d7b109649)
+}
+
+var fileDescriptor_d1c7182d7b109649 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcd, 0x4a, 0xf3, 0x40,
+	0x14, 0xfd, 0x92, 0x7e, 0x2a, 0x4c, 0xa5, 0x86, 0xb8, 0x13, 0xbb, 0x68, 0x1f, 0x60, 0xb2, 0x98,
+	0xdd, 0xb8, 0x9a, 0xfc, 0x58, 0x82, 0x98, 0x86, 0xfe, 0x44, 0x90, 0x40, 0x88, 0x26, 0x0c, 0x91,
+	0x66, 0x26, 0x74, 0xd2, 0x42, 0x77, 0x3e, 0x8b, 0x4b, 0x1f, 0xc5, 0x27, 0x11, 0x9f, 0x42, 0x66,
+	0xc6, 0x04, 0xba, 0xd0, 0xcd, 0x70, 0xee, 0xdc, 0x73, 0x0e, 0xe7, 0x1e, 0x80, 0x28, 0xe7, 0x74,
+	0x53, 0x3a, 0x79, 0x21, 0x1c, 0x0d, 0x25, 0xda, 0x23, 0xa7, 0x64, 0xbb, 0x5a, 0x38, 0xa2, 0xaa,
+	0x77, 0x9b, 0xbc, 0xad, 0x38, 0xcb, 0xda, 0x43, 0x53, 0xc2, 0x66, 0xcb, 0x5b, 0x6e, 0x8f, 0x35,
+	0x13, 0xe6, 0x85, 0x80, 0xbd, 0x08, 0xee, 0x11, 0x54, 0xa2, 0xab, 0xeb, 0xce, 0xb3, 0xa9, 0x9c,
+	0x9c, 0x31, 0xde, 0x2a, 0x03, 0xa1, 0xc5, 0xd3, 0x57, 0x03, 0xd8, 0xcb, 0xde, 0x76, 0x75, 0x68,
+	0xca, 0x80, 0xed, 0xea, 0xe9, 0x0b, 0x18, 0x1d, 0xff, 0xda, 0x17, 0x60, 0xb8, 0x8e, 0x96, 0x71,
+	0xe0, 0x85, 0xb7, 0x61, 0xe0, 0x5b, 0xff, 0xec, 0x21, 0x38, 0x5b, 0x47, 0x77, 0xd1, 0xfc, 0x21,
+	0xb2, 0x0c, 0x39, 0x78, 0xb1, 0x97, 0xb9, 0xa1, 0x6f, 0x99, 0x7a, 0x48, 0xd4, 0x30, 0xb0, 0x47,
+	0x00, 0xac, 0xc8, 0x62, 0x16, 0xac, 0x32, 0x2f, 0x26, 0xd6, 0x7f, 0xdb, 0x02, 0xe7, 0x6e, 0xe8,
+	0x67, 0xf7, 0x73, 0x5f, 0x1a, 0x2d, 0xac, 0x13, 0xf7, 0xd3, 0x00, 0x93, 0x67, 0x5e, 0xc3, 0x3f,
+	0xcf, 0x70, 0x2f, 0x8f, 0xf3, 0xc4, 0x32, 0x7d, 0x6c, 0x3c, 0xba, 0x3f, 0x2a, 0xca, 0x37, 0x39,
+	0xa3, 0x90, 0x6f, 0xa9, 0x43, 0x4b, 0xa6, 0x6e, 0xeb, 0x1a, 0x6c, 0x2a, 0xf1, 0x4b, 0xa1, 0x37,
+	0xea, 0x7d, 0x33, 0x07, 0x33, 0x42, 0xde, 0xcd, 0xf1, 0x4c, 0x5b, 0x91, 0x42, 0x40, 0x0d, 0x25,
+	0x4a, 0x10, 0x94, 0x8d, 0x88, 0x8f, 0x6e, 0x9f, 0x92, 0x42, 0xa4, 0xfd, 0x3e, 0x4d, 0x50, 0xaa,
+	0xf6, 0x5f, 0xe6, 0x44, 0x7f, 0x62, 0x4c, 0x0a, 0x81, 0x71, 0xcf, 0xc0, 0x38, 0x41, 0x18, 0x2b,
+	0xce, 0xd3, 0xa9, 0x0a, 0x86, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x56, 0xbb, 0x64, 0x6f, 0xe8,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/sitelink_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/sitelink_placeholder_field.pb.go
new file mode 100644
index 0000000..8b1aaf1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/sitelink_placeholder_field.pb.go
@@ -0,0 +1,152 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/sitelink_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Sitelink placeholder fields.
+type SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField int32
+
+const (
+	// Not specified.
+	SitelinkPlaceholderFieldEnum_UNSPECIFIED SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	SitelinkPlaceholderFieldEnum_UNKNOWN SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 1
+	// Data Type: STRING. The link text for your sitelink.
+	SitelinkPlaceholderFieldEnum_TEXT SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 2
+	// Data Type: STRING. First line of the sitelink description.
+	SitelinkPlaceholderFieldEnum_LINE_1 SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 3
+	// Data Type: STRING. Second line of the sitelink description.
+	SitelinkPlaceholderFieldEnum_LINE_2 SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 4
+	// Data Type: URL_LIST. Final URLs for the sitelink when using Upgraded
+	// URLs.
+	SitelinkPlaceholderFieldEnum_FINAL_URLS SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 5
+	// Data Type: URL_LIST. Final Mobile URLs for the sitelink when using
+	// Upgraded URLs.
+	SitelinkPlaceholderFieldEnum_FINAL_MOBILE_URLS SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 6
+	// Data Type: URL. Tracking template for the sitelink when using Upgraded
+	// URLs.
+	SitelinkPlaceholderFieldEnum_TRACKING_URL SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 7
+	// Data Type: STRING. Final URL suffix for sitelink when using parallel
+	// tracking.
+	SitelinkPlaceholderFieldEnum_FINAL_URL_SUFFIX SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 8
+)
+
+var SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TEXT",
+	3: "LINE_1",
+	4: "LINE_2",
+	5: "FINAL_URLS",
+	6: "FINAL_MOBILE_URLS",
+	7: "TRACKING_URL",
+	8: "FINAL_URL_SUFFIX",
+}
+
+var SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"TEXT":              2,
+	"LINE_1":            3,
+	"LINE_2":            4,
+	"FINAL_URLS":        5,
+	"FINAL_MOBILE_URLS": 6,
+	"TRACKING_URL":      7,
+	"FINAL_URL_SUFFIX":  8,
+}
+
+func (x SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField) String() string {
+	return proto.EnumName(SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name, int32(x))
+}
+
+func (SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_09e6e96547734ac1, []int{0, 0}
+}
+
+// Values for Sitelink placeholder fields.
+type SitelinkPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SitelinkPlaceholderFieldEnum) Reset()         { *m = SitelinkPlaceholderFieldEnum{} }
+func (m *SitelinkPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*SitelinkPlaceholderFieldEnum) ProtoMessage()    {}
+func (*SitelinkPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09e6e96547734ac1, []int{0}
+}
+
+func (m *SitelinkPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SitelinkPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Size(m)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SitelinkPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SitelinkPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField", SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name, SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_value)
+	proto.RegisterType((*SitelinkPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.SitelinkPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/sitelink_placeholder_field.proto", fileDescriptor_09e6e96547734ac1)
+}
+
+var fileDescriptor_09e6e96547734ac1 = []byte{
+	// 377 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xd1, 0x8e, 0x9a, 0x40,
+	0x14, 0x86, 0x0b, 0x5a, 0x35, 0x63, 0xd3, 0x4e, 0x27, 0x6d, 0xd2, 0x34, 0x7a, 0xa1, 0x0f, 0x30,
+	0xa4, 0xe5, 0x6e, 0x9a, 0x34, 0x01, 0x0b, 0x86, 0x48, 0x91, 0x88, 0xb8, 0x66, 0x43, 0x42, 0x58,
+	0x61, 0x59, 0xb2, 0x38, 0x43, 0x1c, 0xf4, 0x81, 0xf6, 0x6e, 0xf7, 0x51, 0x7c, 0x94, 0xbd, 0xdc,
+	0x27, 0xd8, 0xc0, 0x28, 0x7b, 0xe5, 0xde, 0x4c, 0xfe, 0x39, 0xe7, 0x7c, 0xe7, 0xcc, 0xfc, 0x07,
+	0xfc, 0x4d, 0x19, 0x4b, 0xf3, 0x44, 0x89, 0x62, 0xae, 0x08, 0x59, 0xa9, 0x83, 0xaa, 0x24, 0x74,
+	0xbf, 0xe5, 0x0a, 0xcf, 0xca, 0x24, 0xcf, 0xe8, 0x7d, 0x58, 0xe4, 0xd1, 0x26, 0xb9, 0x63, 0x79,
+	0x9c, 0xec, 0xc2, 0xdb, 0x2c, 0xc9, 0x63, 0x5c, 0xec, 0x58, 0xc9, 0xd0, 0x50, 0x40, 0x38, 0x8a,
+	0x39, 0x6e, 0x78, 0x7c, 0x50, 0x71, 0xcd, 0xff, 0x1c, 0x9c, 0xdb, 0x17, 0x99, 0x12, 0x51, 0xca,
+	0xca, 0xa8, 0xcc, 0x18, 0xe5, 0x02, 0x1e, 0x1f, 0x25, 0x30, 0xf0, 0x4e, 0x13, 0xdc, 0xb7, 0x01,
+	0x66, 0xd5, 0xdf, 0xa0, 0xfb, 0xed, 0xf8, 0x51, 0x02, 0x3f, 0x2e, 0x15, 0xa0, 0x2f, 0xa0, 0xef,
+	0x3b, 0x9e, 0x6b, 0x4c, 0x2c, 0xd3, 0x32, 0xfe, 0xc1, 0x0f, 0xa8, 0x0f, 0xba, 0xbe, 0x33, 0x73,
+	0xe6, 0x57, 0x0e, 0x94, 0x50, 0x0f, 0xb4, 0x97, 0xc6, 0x7a, 0x09, 0x65, 0x04, 0x40, 0xc7, 0xb6,
+	0x1c, 0x23, 0xfc, 0x05, 0x5b, 0x8d, 0xfe, 0x0d, 0xdb, 0xe8, 0x33, 0x00, 0xa6, 0xe5, 0x68, 0x76,
+	0xe8, 0x2f, 0x6c, 0x0f, 0x7e, 0x44, 0xdf, 0xc1, 0x57, 0x71, 0xff, 0x3f, 0xd7, 0x2d, 0xdb, 0x10,
+	0xe1, 0x0e, 0x82, 0xe0, 0xd3, 0x72, 0xa1, 0x4d, 0x66, 0x96, 0x33, 0xad, 0x42, 0xb0, 0x8b, 0xbe,
+	0x01, 0xd8, 0x80, 0xa1, 0xe7, 0x9b, 0xa6, 0xb5, 0x86, 0x3d, 0xfd, 0x45, 0x02, 0xa3, 0x0d, 0xdb,
+	0xe2, 0x77, 0x0d, 0xd1, 0x87, 0x97, 0xbe, 0xe3, 0x56, 0x8e, 0xb8, 0xd2, 0xb5, 0x7e, 0xe2, 0x53,
+	0x96, 0x47, 0x34, 0xc5, 0x6c, 0x97, 0x2a, 0x69, 0x42, 0x6b, 0xbf, 0xce, 0x0b, 0x2a, 0x32, 0x7e,
+	0x61, 0x5f, 0x7f, 0xea, 0xf3, 0x41, 0x6e, 0x4d, 0x35, 0xed, 0x49, 0x1e, 0x4e, 0x45, 0x2b, 0x2d,
+	0xe6, 0x58, 0xc8, 0x4a, 0xad, 0x54, 0x5c, 0x79, 0xcb, 0x8f, 0xe7, 0x7c, 0xa0, 0xc5, 0x3c, 0x68,
+	0xf2, 0xc1, 0x4a, 0x0d, 0xea, 0xfc, 0xb3, 0x3c, 0x12, 0x41, 0x42, 0xb4, 0x98, 0x13, 0xd2, 0x54,
+	0x10, 0xb2, 0x52, 0x09, 0xa9, 0x6b, 0x6e, 0x3a, 0xf5, 0xc3, 0xd4, 0xd7, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xe0, 0xce, 0x53, 0x75, 0x47, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/slot.pb.go b/googleapis/ads/googleads/v3/enums/slot.pb.go
new file mode 100644
index 0000000..e7933d3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/slot.pb.go
@@ -0,0 +1,146 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/slot.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enumerates possible positions of the Ad.
+type SlotEnum_Slot int32
+
+const (
+	// Not specified.
+	SlotEnum_UNSPECIFIED SlotEnum_Slot = 0
+	// The value is unknown in this version.
+	SlotEnum_UNKNOWN SlotEnum_Slot = 1
+	// Google search: Side.
+	SlotEnum_SEARCH_SIDE SlotEnum_Slot = 2
+	// Google search: Top.
+	SlotEnum_SEARCH_TOP SlotEnum_Slot = 3
+	// Google search: Other.
+	SlotEnum_SEARCH_OTHER SlotEnum_Slot = 4
+	// Google Display Network.
+	SlotEnum_CONTENT SlotEnum_Slot = 5
+	// Search partners: Top.
+	SlotEnum_SEARCH_PARTNER_TOP SlotEnum_Slot = 6
+	// Search partners: Other.
+	SlotEnum_SEARCH_PARTNER_OTHER SlotEnum_Slot = 7
+	// Cross-network.
+	SlotEnum_MIXED SlotEnum_Slot = 8
+)
+
+var SlotEnum_Slot_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH_SIDE",
+	3: "SEARCH_TOP",
+	4: "SEARCH_OTHER",
+	5: "CONTENT",
+	6: "SEARCH_PARTNER_TOP",
+	7: "SEARCH_PARTNER_OTHER",
+	8: "MIXED",
+}
+
+var SlotEnum_Slot_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"SEARCH_SIDE":          2,
+	"SEARCH_TOP":           3,
+	"SEARCH_OTHER":         4,
+	"CONTENT":              5,
+	"SEARCH_PARTNER_TOP":   6,
+	"SEARCH_PARTNER_OTHER": 7,
+	"MIXED":                8,
+}
+
+func (x SlotEnum_Slot) String() string {
+	return proto.EnumName(SlotEnum_Slot_name, int32(x))
+}
+
+func (SlotEnum_Slot) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fef43849b89d590c, []int{0, 0}
+}
+
+// Container for enumeration of possible positions of the Ad.
+type SlotEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SlotEnum) Reset()         { *m = SlotEnum{} }
+func (m *SlotEnum) String() string { return proto.CompactTextString(m) }
+func (*SlotEnum) ProtoMessage()    {}
+func (*SlotEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fef43849b89d590c, []int{0}
+}
+
+func (m *SlotEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotEnum.Unmarshal(m, b)
+}
+func (m *SlotEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotEnum.Marshal(b, m, deterministic)
+}
+func (m *SlotEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotEnum.Merge(m, src)
+}
+func (m *SlotEnum) XXX_Size() int {
+	return xxx_messageInfo_SlotEnum.Size(m)
+}
+func (m *SlotEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SlotEnum_Slot", SlotEnum_Slot_name, SlotEnum_Slot_value)
+	proto.RegisterType((*SlotEnum)(nil), "google.ads.googleads.v3.enums.SlotEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/slot.proto", fileDescriptor_fef43849b89d590c)
+}
+
+var fileDescriptor_fef43849b89d590c = []byte{
+	// 346 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xfb, 0x40,
+	0x18, 0xfc, 0x25, 0xfd, 0xbf, 0xfd, 0xa1, 0xcb, 0x22, 0x22, 0x62, 0x0f, 0xed, 0xc9, 0xd3, 0xe6,
+	0x90, 0xdb, 0x7a, 0x4a, 0xdb, 0xb5, 0x0d, 0x62, 0x12, 0x92, 0xb4, 0x8a, 0x04, 0x24, 0x9a, 0x12,
+	0x0a, 0xe9, 0x6e, 0xe9, 0xa6, 0x7d, 0x1f, 0x3d, 0x7a, 0xf0, 0x41, 0x7c, 0x08, 0x1f, 0xc0, 0xa7,
+	0x90, 0xdd, 0x4d, 0x7b, 0x10, 0xf4, 0xb2, 0xcc, 0xf7, 0xcd, 0xcc, 0xc7, 0xce, 0x80, 0xcb, 0x9c,
+	0xf3, 0xbc, 0x58, 0x58, 0x69, 0x26, 0x2c, 0x0d, 0x25, 0xda, 0xd9, 0xd6, 0x82, 0x6d, 0x57, 0xc2,
+	0x12, 0x05, 0x2f, 0xf1, 0x7a, 0xc3, 0x4b, 0x8e, 0x7a, 0x9a, 0xc6, 0x69, 0x26, 0xf0, 0x41, 0x89,
+	0x77, 0x36, 0x56, 0xca, 0xf3, 0x8b, 0xfd, 0xa1, 0xf5, 0xd2, 0x4a, 0x19, 0xe3, 0x65, 0x5a, 0x2e,
+	0x39, 0x13, 0xda, 0x3c, 0x78, 0x37, 0x40, 0x3b, 0x2a, 0x78, 0x49, 0xd9, 0x76, 0x35, 0x78, 0x31,
+	0x40, 0x5d, 0x0e, 0xe8, 0x18, 0x74, 0x67, 0x5e, 0x14, 0xd0, 0x91, 0x7b, 0xed, 0xd2, 0x31, 0xfc,
+	0x87, 0xba, 0xa0, 0x35, 0xf3, 0x6e, 0x3c, 0xff, 0xce, 0x83, 0x86, 0x64, 0x23, 0xea, 0x84, 0xa3,
+	0xe9, 0x63, 0xe4, 0x8e, 0x29, 0x34, 0xd1, 0x11, 0x00, 0xd5, 0x22, 0xf6, 0x03, 0x58, 0x43, 0x10,
+	0xfc, 0xaf, 0x66, 0x3f, 0x9e, 0xd2, 0x10, 0xd6, 0xa5, 0x7f, 0xe4, 0x7b, 0x31, 0xf5, 0x62, 0xd8,
+	0x40, 0xa7, 0x00, 0x55, 0x74, 0xe0, 0x84, 0xb1, 0x47, 0x43, 0x65, 0x6b, 0xa2, 0x33, 0x70, 0xf2,
+	0x63, 0xaf, 0xed, 0x2d, 0xd4, 0x01, 0x8d, 0x5b, 0xf7, 0x9e, 0x8e, 0x61, 0x7b, 0xf8, 0x69, 0x80,
+	0xfe, 0x33, 0x5f, 0xe1, 0x3f, 0x43, 0x0f, 0x3b, 0x32, 0x46, 0x20, 0x13, 0x06, 0xc6, 0xc3, 0xb0,
+	0xd2, 0xe6, 0xbc, 0x48, 0x59, 0x8e, 0xf9, 0x26, 0xb7, 0xf2, 0x05, 0x53, 0xf9, 0xf7, 0xd5, 0xae,
+	0x97, 0xe2, 0x97, 0xa6, 0xaf, 0xd4, 0xfb, 0x6a, 0xd6, 0x26, 0x8e, 0xf3, 0x66, 0xf6, 0x26, 0xfa,
+	0x94, 0x93, 0x09, 0xac, 0xa1, 0x44, 0x73, 0x1b, 0xcb, 0xfe, 0xc4, 0xc7, 0x9e, 0x4f, 0x9c, 0x4c,
+	0x24, 0x07, 0x3e, 0x99, 0xdb, 0x89, 0xe2, 0xbf, 0xcc, 0xbe, 0x5e, 0x12, 0xe2, 0x64, 0x82, 0x90,
+	0x83, 0x82, 0x90, 0xb9, 0x4d, 0x88, 0xd2, 0x3c, 0x35, 0xd5, 0xc7, 0xec, 0xef, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x11, 0xde, 0x43, 0x57, 0x01, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/spending_limit_type.pb.go b/googleapis/ads/googleads/v3/enums/spending_limit_type.pb.go
new file mode 100644
index 0000000..816fd9d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/spending_limit_type.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/spending_limit_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible spending limit types used by certain resources as an
+// alternative to absolute money values in micros.
+type SpendingLimitTypeEnum_SpendingLimitType int32
+
+const (
+	// Not specified.
+	SpendingLimitTypeEnum_UNSPECIFIED SpendingLimitTypeEnum_SpendingLimitType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SpendingLimitTypeEnum_UNKNOWN SpendingLimitTypeEnum_SpendingLimitType = 1
+	// Infinite, indicates unlimited spending power.
+	SpendingLimitTypeEnum_INFINITE SpendingLimitTypeEnum_SpendingLimitType = 2
+)
+
+var SpendingLimitTypeEnum_SpendingLimitType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INFINITE",
+}
+
+var SpendingLimitTypeEnum_SpendingLimitType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INFINITE":    2,
+}
+
+func (x SpendingLimitTypeEnum_SpendingLimitType) String() string {
+	return proto.EnumName(SpendingLimitTypeEnum_SpendingLimitType_name, int32(x))
+}
+
+func (SpendingLimitTypeEnum_SpendingLimitType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_05de225243b8687a, []int{0, 0}
+}
+
+// Message describing spending limit types.
+type SpendingLimitTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SpendingLimitTypeEnum) Reset()         { *m = SpendingLimitTypeEnum{} }
+func (m *SpendingLimitTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SpendingLimitTypeEnum) ProtoMessage()    {}
+func (*SpendingLimitTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_05de225243b8687a, []int{0}
+}
+
+func (m *SpendingLimitTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Unmarshal(m, b)
+}
+func (m *SpendingLimitTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *SpendingLimitTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SpendingLimitTypeEnum.Merge(m, src)
+}
+func (m *SpendingLimitTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Size(m)
+}
+func (m *SpendingLimitTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SpendingLimitTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SpendingLimitTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType", SpendingLimitTypeEnum_SpendingLimitType_name, SpendingLimitTypeEnum_SpendingLimitType_value)
+	proto.RegisterType((*SpendingLimitTypeEnum)(nil), "google.ads.googleads.v3.enums.SpendingLimitTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/spending_limit_type.proto", fileDescriptor_05de225243b8687a)
+}
+
+var fileDescriptor_05de225243b8687a = []byte{
+	// 299 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xfb, 0x30,
+	0x00, 0xfe, 0xad, 0x3f, 0x50, 0xc9, 0x04, 0x67, 0x41, 0x0f, 0xe2, 0x0e, 0xdb, 0x03, 0x24, 0x87,
+	0x1c, 0x84, 0x78, 0x90, 0x4e, 0xbb, 0x51, 0x94, 0x38, 0xd8, 0x56, 0x45, 0x0a, 0xa3, 0x9a, 0x10,
+	0x02, 0x6d, 0x12, 0x96, 0x6e, 0xb0, 0xd7, 0xf1, 0xe8, 0xa3, 0xf8, 0x28, 0xfa, 0x12, 0xd2, 0x64,
+	0xed, 0x65, 0xe8, 0x25, 0x7c, 0xe4, 0xfb, 0x93, 0x2f, 0x1f, 0xb8, 0x12, 0x5a, 0x8b, 0x82, 0xa3,
+	0x9c, 0x59, 0xe4, 0x61, 0x8d, 0x36, 0x18, 0x71, 0xb5, 0x2e, 0x2d, 0xb2, 0x86, 0x2b, 0x26, 0x95,
+	0x58, 0x16, 0xb2, 0x94, 0xd5, 0xb2, 0xda, 0x1a, 0x0e, 0xcd, 0x4a, 0x57, 0x3a, 0xec, 0x7b, 0x35,
+	0xcc, 0x99, 0x85, 0xad, 0x11, 0x6e, 0x30, 0x74, 0xc6, 0x8b, 0xcb, 0x26, 0xd7, 0x48, 0x94, 0x2b,
+	0xa5, 0xab, 0xbc, 0x92, 0x5a, 0x59, 0x6f, 0x1e, 0x3e, 0x83, 0xb3, 0xd9, 0x2e, 0xf9, 0xa1, 0x0e,
+	0x9e, 0x6f, 0x0d, 0x8f, 0xd5, 0xba, 0x1c, 0xde, 0x80, 0xd3, 0x3d, 0x22, 0x3c, 0x01, 0xdd, 0x05,
+	0x9d, 0x4d, 0xe3, 0xdb, 0x64, 0x9c, 0xc4, 0x77, 0xbd, 0x7f, 0x61, 0x17, 0x1c, 0x2e, 0xe8, 0x3d,
+	0x7d, 0x7c, 0xa2, 0xbd, 0x4e, 0x78, 0x0c, 0x8e, 0x12, 0x3a, 0x4e, 0x68, 0x32, 0x8f, 0x7b, 0xc1,
+	0xe8, 0xbb, 0x03, 0x06, 0x6f, 0xba, 0x84, 0x7f, 0xb6, 0x1b, 0x9d, 0xef, 0x3d, 0x32, 0xad, 0x7b,
+	0x4d, 0x3b, 0x2f, 0xa3, 0x9d, 0x51, 0xe8, 0x22, 0x57, 0x02, 0xea, 0x95, 0x40, 0x82, 0x2b, 0xd7,
+	0xba, 0xd9, 0xc7, 0x48, 0xfb, 0xcb, 0x5c, 0xd7, 0xee, 0x7c, 0x0f, 0xfe, 0x4f, 0xa2, 0xe8, 0x23,
+	0xe8, 0x4f, 0x7c, 0x54, 0xc4, 0x2c, 0xf4, 0xb0, 0x46, 0x29, 0x86, 0xf5, 0x4f, 0xed, 0x67, 0xc3,
+	0x67, 0x11, 0xb3, 0x59, 0xcb, 0x67, 0x29, 0xce, 0x1c, 0xff, 0x15, 0x0c, 0xfc, 0x25, 0x21, 0x11,
+	0xb3, 0x84, 0xb4, 0x0a, 0x42, 0x52, 0x4c, 0x88, 0xd3, 0xbc, 0x1e, 0xb8, 0x62, 0xf8, 0x27, 0x00,
+	0x00, 0xff, 0xff, 0x78, 0x15, 0xb3, 0xa4, 0xc6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/structured_snippet_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/structured_snippet_placeholder_field.pb.go
new file mode 100644
index 0000000..d62185a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/structured_snippet_placeholder_field.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/structured_snippet_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Structured Snippet placeholder fields.
+type StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField int32
+
+const (
+	// Not specified.
+	StructuredSnippetPlaceholderFieldEnum_UNSPECIFIED StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	StructuredSnippetPlaceholderFieldEnum_UNKNOWN StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 1
+	// Data Type: STRING. The category of snippet of your products/services.
+	// Must match exactly one of the predefined structured snippets headers.
+	// For a list, visit
+	// https://developers.google.com/adwords/api/docs/appendix/structured-snippet-headers
+	StructuredSnippetPlaceholderFieldEnum_HEADER StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 2
+	// Data Type: STRING_LIST. Text values that describe your products/services.
+	// All text must be family safe. Special or non-ASCII characters are not
+	// permitted. A snippet can be at most 25 characters.
+	StructuredSnippetPlaceholderFieldEnum_SNIPPETS StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 3
+)
+
+var StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HEADER",
+	3: "SNIPPETS",
+}
+
+var StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"HEADER":      2,
+	"SNIPPETS":    3,
+}
+
+func (x StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField) String() string {
+	return proto.EnumName(StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name, int32(x))
+}
+
+func (StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_96b948df16ee6043, []int{0, 0}
+}
+
+// Values for Structured Snippet placeholder fields.
+type StructuredSnippetPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StructuredSnippetPlaceholderFieldEnum) Reset()         { *m = StructuredSnippetPlaceholderFieldEnum{} }
+func (m *StructuredSnippetPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*StructuredSnippetPlaceholderFieldEnum) ProtoMessage()    {}
+func (*StructuredSnippetPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_96b948df16ee6043, []int{0}
+}
+
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Size(m)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField", StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name, StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_value)
+	proto.RegisterType((*StructuredSnippetPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.StructuredSnippetPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/structured_snippet_placeholder_field.proto", fileDescriptor_96b948df16ee6043)
+}
+
+var fileDescriptor_96b948df16ee6043 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x50, 0xbd, 0x4e, 0xc3, 0x30,
+	0x18, 0x24, 0xa9, 0x54, 0x90, 0x8b, 0x44, 0x94, 0x11, 0xd1, 0xa1, 0x95, 0x60, 0x74, 0x86, 0x6c,
+	0x66, 0x4a, 0x69, 0xfa, 0x23, 0xa4, 0x10, 0x11, 0x5a, 0x24, 0x88, 0x54, 0x99, 0xda, 0x98, 0x48,
+	0xa9, 0x6d, 0xc5, 0x4e, 0x9f, 0x80, 0x27, 0x61, 0xe4, 0x51, 0x78, 0x14, 0x5e, 0x81, 0x05, 0xc5,
+	0xa6, 0x61, 0x82, 0x2e, 0xd6, 0xc9, 0xdf, 0x7d, 0x77, 0xdf, 0x1d, 0x98, 0x31, 0x21, 0x58, 0x49,
+	0x03, 0x4c, 0x54, 0x60, 0x61, 0x83, 0xb6, 0x61, 0x40, 0x79, 0xbd, 0x51, 0x81, 0xd2, 0x55, 0xbd,
+	0xd6, 0x75, 0x45, 0xc9, 0x4a, 0xf1, 0x42, 0x4a, 0xaa, 0x57, 0xb2, 0xc4, 0x6b, 0xfa, 0x22, 0x4a,
+	0x42, 0xab, 0xd5, 0x73, 0x41, 0x4b, 0x02, 0x65, 0x25, 0xb4, 0xf0, 0xfb, 0x76, 0x1d, 0x62, 0xa2,
+	0x60, 0xab, 0x04, 0xb7, 0x21, 0x34, 0x4a, 0xa7, 0x67, 0x3b, 0x23, 0x59, 0x04, 0x98, 0x73, 0xa1,
+	0xb1, 0x2e, 0x04, 0x57, 0x76, 0x79, 0xf8, 0xea, 0x80, 0xf3, 0xac, 0xf5, 0xca, 0xac, 0x55, 0xfa,
+	0xeb, 0x34, 0x69, 0x8c, 0x62, 0x5e, 0x6f, 0x86, 0x8f, 0x60, 0xb0, 0x97, 0xe8, 0x9f, 0x80, 0xde,
+	0x22, 0xc9, 0xd2, 0xf8, 0x6a, 0x3e, 0x99, 0xc7, 0x63, 0xef, 0xc0, 0xef, 0x81, 0xc3, 0x45, 0x72,
+	0x9d, 0xdc, 0xdc, 0x27, 0x9e, 0xe3, 0x03, 0xd0, 0x9d, 0xc5, 0xd1, 0x38, 0xbe, 0xf5, 0x5c, 0xff,
+	0x18, 0x1c, 0x65, 0xc9, 0x3c, 0x4d, 0xe3, 0xbb, 0xcc, 0xeb, 0x8c, 0xbe, 0x1c, 0x30, 0x58, 0x8b,
+	0x0d, 0xfc, 0x37, 0xca, 0xe8, 0x62, 0xef, 0x01, 0x69, 0x13, 0x2a, 0x75, 0x1e, 0x46, 0x3f, 0x42,
+	0x4c, 0x94, 0x98, 0x33, 0x28, 0x2a, 0x16, 0x30, 0xca, 0x4d, 0xe4, 0x5d, 0xdb, 0xb2, 0x50, 0x7f,
+	0x94, 0x7f, 0x69, 0xde, 0x37, 0xb7, 0x33, 0x8d, 0xa2, 0x77, 0xb7, 0x3f, 0xb5, 0x52, 0x11, 0x51,
+	0xd0, 0xc2, 0x06, 0x2d, 0x43, 0xd8, 0xb4, 0xa2, 0x3e, 0x76, 0xf3, 0x3c, 0x22, 0x2a, 0x6f, 0xe7,
+	0xf9, 0x32, 0xcc, 0xcd, 0xfc, 0xd3, 0x1d, 0xd8, 0x4f, 0x84, 0x22, 0xa2, 0x10, 0x6a, 0x19, 0x08,
+	0x2d, 0x43, 0x84, 0x0c, 0xe7, 0xa9, 0x6b, 0x0e, 0x0b, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd6,
+	0x0d, 0x39, 0x40, 0x14, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/summary_row_setting.pb.go b/googleapis/ads/googleads/v3/enums/summary_row_setting.pb.go
new file mode 100644
index 0000000..a312914
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/summary_row_setting.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/summary_row_setting.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing return summary row settings.
+type SummaryRowSettingEnum_SummaryRowSetting int32
+
+const (
+	// Not specified.
+	SummaryRowSettingEnum_UNSPECIFIED SummaryRowSettingEnum_SummaryRowSetting = 0
+	// Represent unknown values of return summary row.
+	SummaryRowSettingEnum_UNKNOWN SummaryRowSettingEnum_SummaryRowSetting = 1
+	// Do not return summary row.
+	SummaryRowSettingEnum_NO_SUMMARY_ROW SummaryRowSettingEnum_SummaryRowSetting = 2
+	// Return summary row along with results. The summary row will be returned
+	// in the last batch alone (last batch will contain no results).
+	SummaryRowSettingEnum_SUMMARY_ROW_WITH_RESULTS SummaryRowSettingEnum_SummaryRowSetting = 3
+	// Return summary row only and return no results.
+	SummaryRowSettingEnum_SUMMARY_ROW_ONLY SummaryRowSettingEnum_SummaryRowSetting = 4
+)
+
+var SummaryRowSettingEnum_SummaryRowSetting_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NO_SUMMARY_ROW",
+	3: "SUMMARY_ROW_WITH_RESULTS",
+	4: "SUMMARY_ROW_ONLY",
+}
+
+var SummaryRowSettingEnum_SummaryRowSetting_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"NO_SUMMARY_ROW":           2,
+	"SUMMARY_ROW_WITH_RESULTS": 3,
+	"SUMMARY_ROW_ONLY":         4,
+}
+
+func (x SummaryRowSettingEnum_SummaryRowSetting) String() string {
+	return proto.EnumName(SummaryRowSettingEnum_SummaryRowSetting_name, int32(x))
+}
+
+func (SummaryRowSettingEnum_SummaryRowSetting) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b824b08816a03176, []int{0, 0}
+}
+
+// Indicates summary row setting in request parameter.
+type SummaryRowSettingEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SummaryRowSettingEnum) Reset()         { *m = SummaryRowSettingEnum{} }
+func (m *SummaryRowSettingEnum) String() string { return proto.CompactTextString(m) }
+func (*SummaryRowSettingEnum) ProtoMessage()    {}
+func (*SummaryRowSettingEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b824b08816a03176, []int{0}
+}
+
+func (m *SummaryRowSettingEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SummaryRowSettingEnum.Unmarshal(m, b)
+}
+func (m *SummaryRowSettingEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SummaryRowSettingEnum.Marshal(b, m, deterministic)
+}
+func (m *SummaryRowSettingEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SummaryRowSettingEnum.Merge(m, src)
+}
+func (m *SummaryRowSettingEnum) XXX_Size() int {
+	return xxx_messageInfo_SummaryRowSettingEnum.Size(m)
+}
+func (m *SummaryRowSettingEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SummaryRowSettingEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SummaryRowSettingEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SummaryRowSettingEnum_SummaryRowSetting", SummaryRowSettingEnum_SummaryRowSetting_name, SummaryRowSettingEnum_SummaryRowSetting_value)
+	proto.RegisterType((*SummaryRowSettingEnum)(nil), "google.ads.googleads.v3.enums.SummaryRowSettingEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/summary_row_setting.proto", fileDescriptor_b824b08816a03176)
+}
+
+var fileDescriptor_b824b08816a03176 = []byte{
+	// 335 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x5f, 0x4a, 0xc3, 0x30,
+	0x1c, 0xb6, 0x9d, 0x28, 0x64, 0xa0, 0x35, 0xa8, 0x88, 0x6c, 0x0f, 0xdb, 0x01, 0xd2, 0x87, 0x3e,
+	0x08, 0xf1, 0xa9, 0xd3, 0x3a, 0x87, 0x5b, 0x3b, 0xda, 0x75, 0x63, 0x52, 0x28, 0xd1, 0x96, 0x50,
+	0x58, 0x93, 0xd1, 0x74, 0x1b, 0xbb, 0x86, 0x47, 0xf0, 0xd1, 0xa3, 0x78, 0x14, 0xbd, 0x84, 0x34,
+	0x71, 0x63, 0x30, 0xf4, 0x25, 0x7c, 0xe4, 0xfb, 0xc3, 0xef, 0xfb, 0xc0, 0x0d, 0xe5, 0x9c, 0xce,
+	0x52, 0x93, 0x24, 0xc2, 0x54, 0xb0, 0x42, 0x4b, 0xcb, 0x4c, 0xd9, 0x22, 0x17, 0xa6, 0x58, 0xe4,
+	0x39, 0x29, 0xd6, 0x71, 0xc1, 0x57, 0xb1, 0x48, 0xcb, 0x32, 0x63, 0x14, 0xcd, 0x0b, 0x5e, 0x72,
+	0xd8, 0x54, 0x6a, 0x44, 0x12, 0x81, 0xb6, 0x46, 0xb4, 0xb4, 0x90, 0x34, 0x5e, 0x37, 0x36, 0xb9,
+	0xf3, 0xcc, 0x24, 0x8c, 0xf1, 0x92, 0x94, 0x19, 0x67, 0x42, 0x99, 0xdb, 0x6f, 0x1a, 0xb8, 0x08,
+	0x54, 0xb4, 0xcf, 0x57, 0x81, 0x0a, 0x76, 0xd8, 0x22, 0x6f, 0xaf, 0xc1, 0xd9, 0x1e, 0x01, 0x4f,
+	0x41, 0x3d, 0x74, 0x83, 0xa1, 0x73, 0xd7, 0x7b, 0xe8, 0x39, 0xf7, 0xc6, 0x01, 0xac, 0x83, 0xe3,
+	0xd0, 0x7d, 0x72, 0xbd, 0x89, 0x6b, 0x68, 0x10, 0x82, 0x13, 0xd7, 0x8b, 0x83, 0x70, 0x30, 0xb0,
+	0xfd, 0x69, 0xec, 0x7b, 0x13, 0x43, 0x87, 0x0d, 0x70, 0xb5, 0xf3, 0x11, 0x4f, 0x7a, 0xa3, 0xc7,
+	0xd8, 0x77, 0x82, 0xb0, 0x3f, 0x0a, 0x8c, 0x1a, 0x3c, 0x07, 0xc6, 0x2e, 0xeb, 0xb9, 0xfd, 0xa9,
+	0x71, 0xd8, 0xf9, 0xd6, 0x40, 0xeb, 0x95, 0xe7, 0xe8, 0xdf, 0x62, 0x9d, 0xcb, 0xbd, 0xf3, 0x86,
+	0x55, 0xa5, 0xa1, 0xf6, 0xdc, 0xf9, 0x35, 0x52, 0x3e, 0x23, 0x8c, 0x22, 0x5e, 0x50, 0x93, 0xa6,
+	0x4c, 0x16, 0xde, 0x4c, 0x3b, 0xcf, 0xc4, 0x1f, 0x4b, 0xdf, 0xca, 0xf7, 0x5d, 0xaf, 0x75, 0x6d,
+	0xfb, 0x43, 0x6f, 0x76, 0x55, 0x94, 0x9d, 0x08, 0xa4, 0x60, 0x85, 0xc6, 0x16, 0xaa, 0x36, 0x12,
+	0x9f, 0x1b, 0x3e, 0xb2, 0x13, 0x11, 0x6d, 0xf9, 0x68, 0x6c, 0x45, 0x92, 0xff, 0xd2, 0x5b, 0xea,
+	0x13, 0x63, 0x3b, 0x11, 0x18, 0x6f, 0x15, 0x18, 0x8f, 0x2d, 0x8c, 0xa5, 0xe6, 0xe5, 0x48, 0x1e,
+	0x66, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcb, 0x4d, 0xab, 0x2a, 0x01, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/system_managed_entity_source.pb.go b/googleapis/ads/googleads/v3/enums/system_managed_entity_source.pb.go
new file mode 100644
index 0000000..4f92d38
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/system_managed_entity_source.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/system_managed_entity_source.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum listing the possible system managed entity sources.
+type SystemManagedResourceSourceEnum_SystemManagedResourceSource int32
+
+const (
+	// Not specified.
+	SystemManagedResourceSourceEnum_UNSPECIFIED SystemManagedResourceSourceEnum_SystemManagedResourceSource = 0
+	// Used for return value only. Represents value unknown in this version.
+	SystemManagedResourceSourceEnum_UNKNOWN SystemManagedResourceSourceEnum_SystemManagedResourceSource = 1
+	// Generated ad variations experiment ad.
+	SystemManagedResourceSourceEnum_AD_VARIATIONS SystemManagedResourceSourceEnum_SystemManagedResourceSource = 2
+)
+
+var SystemManagedResourceSourceEnum_SystemManagedResourceSource_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_VARIATIONS",
+}
+
+var SystemManagedResourceSourceEnum_SystemManagedResourceSource_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"AD_VARIATIONS": 2,
+}
+
+func (x SystemManagedResourceSourceEnum_SystemManagedResourceSource) String() string {
+	return proto.EnumName(SystemManagedResourceSourceEnum_SystemManagedResourceSource_name, int32(x))
+}
+
+func (SystemManagedResourceSourceEnum_SystemManagedResourceSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a5fe06dec8282bd9, []int{0, 0}
+}
+
+// Container for enum describing possible system managed entity sources.
+type SystemManagedResourceSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SystemManagedResourceSourceEnum) Reset()         { *m = SystemManagedResourceSourceEnum{} }
+func (m *SystemManagedResourceSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*SystemManagedResourceSourceEnum) ProtoMessage()    {}
+func (*SystemManagedResourceSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a5fe06dec8282bd9, []int{0}
+}
+
+func (m *SystemManagedResourceSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SystemManagedResourceSourceEnum.Unmarshal(m, b)
+}
+func (m *SystemManagedResourceSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SystemManagedResourceSourceEnum.Marshal(b, m, deterministic)
+}
+func (m *SystemManagedResourceSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SystemManagedResourceSourceEnum.Merge(m, src)
+}
+func (m *SystemManagedResourceSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_SystemManagedResourceSourceEnum.Size(m)
+}
+func (m *SystemManagedResourceSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SystemManagedResourceSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SystemManagedResourceSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.SystemManagedResourceSourceEnum_SystemManagedResourceSource", SystemManagedResourceSourceEnum_SystemManagedResourceSource_name, SystemManagedResourceSourceEnum_SystemManagedResourceSource_value)
+	proto.RegisterType((*SystemManagedResourceSourceEnum)(nil), "google.ads.googleads.v3.enums.SystemManagedResourceSourceEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/system_managed_entity_source.proto", fileDescriptor_a5fe06dec8282bd9)
+}
+
+var fileDescriptor_a5fe06dec8282bd9 = []byte{
+	// 317 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xd1, 0x4a, 0xc3, 0x30,
+	0x14, 0x75, 0x15, 0x14, 0x32, 0xc4, 0xd9, 0x47, 0x75, 0xca, 0xf6, 0x01, 0xe9, 0x43, 0xdf, 0xe2,
+	0x8b, 0x99, 0xab, 0xa3, 0x88, 0xdd, 0x58, 0x5d, 0x05, 0x29, 0x94, 0xb8, 0x84, 0x50, 0x58, 0x93,
+	0xb9, 0x9b, 0x0d, 0xf6, 0x3b, 0x3e, 0xfa, 0x29, 0x7e, 0x8a, 0xaf, 0xfe, 0x80, 0x34, 0x71, 0x05,
+	0x1f, 0xdc, 0x4b, 0x38, 0xe4, 0x9e, 0x7b, 0xce, 0xb9, 0x07, 0xdd, 0x4a, 0xad, 0xe5, 0x42, 0x04,
+	0x8c, 0x43, 0xe0, 0x60, 0x8d, 0x36, 0x61, 0x20, 0xd4, 0xba, 0x82, 0x00, 0xb6, 0x60, 0x44, 0x55,
+	0x54, 0x4c, 0x31, 0x29, 0x78, 0x21, 0x94, 0x29, 0xcd, 0xb6, 0x00, 0xbd, 0x5e, 0xcd, 0x05, 0x5e,
+	0xae, 0xb4, 0xd1, 0x7e, 0xd7, 0xad, 0x61, 0xc6, 0x01, 0x37, 0x0a, 0x78, 0x13, 0x62, 0xab, 0x70,
+	0x7e, 0xb9, 0x33, 0x58, 0x96, 0x01, 0x53, 0x4a, 0x1b, 0x66, 0x4a, 0xad, 0xc0, 0x2d, 0xf7, 0xdf,
+	0xd0, 0x75, 0x6a, 0x2d, 0x1e, 0x9d, 0xc3, 0x54, 0x38, 0xed, 0xd4, 0xbe, 0x91, 0x5a, 0x57, 0xfd,
+	0x04, 0x5d, 0xec, 0xa1, 0xf8, 0xa7, 0xa8, 0x3d, 0x4b, 0xd2, 0x49, 0x74, 0x17, 0xdf, 0xc7, 0xd1,
+	0xb0, 0x73, 0xe0, 0xb7, 0xd1, 0xf1, 0x2c, 0x79, 0x48, 0xc6, 0xcf, 0x49, 0xa7, 0xe5, 0x9f, 0xa1,
+	0x13, 0x3a, 0x2c, 0x32, 0x3a, 0x8d, 0xe9, 0x53, 0x3c, 0x4e, 0xd2, 0x8e, 0x37, 0xf8, 0x6e, 0xa1,
+	0xde, 0x5c, 0x57, 0x78, 0x6f, 0xec, 0xc1, 0xd5, 0x1f, 0xcf, 0xc8, 0xde, 0xed, 0x1c, 0x27, 0x75,
+	0xf0, 0x49, 0xeb, 0x65, 0xf0, 0x2b, 0x20, 0xf5, 0x82, 0x29, 0x89, 0xf5, 0x4a, 0x06, 0x52, 0x28,
+	0x7b, 0xd6, 0xae, 0xc9, 0x65, 0x09, 0xff, 0x14, 0x7b, 0x63, 0xdf, 0x77, 0xef, 0x70, 0x44, 0xe9,
+	0x87, 0xd7, 0x1d, 0x39, 0x29, 0xca, 0x01, 0x3b, 0x58, 0xa3, 0x2c, 0xc4, 0x75, 0x01, 0xf0, 0xb9,
+	0x9b, 0xe7, 0x94, 0x43, 0xde, 0xcc, 0xf3, 0x2c, 0xcc, 0xed, 0xfc, 0xcb, 0xeb, 0xb9, 0x4f, 0x42,
+	0x28, 0x07, 0x42, 0x1a, 0x06, 0x21, 0x59, 0x48, 0x88, 0xe5, 0xbc, 0x1e, 0xd9, 0x60, 0xe1, 0x4f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x46, 0x13, 0x02, 0xf0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/target_cpa_opt_in_recommendation_goal.pb.go b/googleapis/ads/googleads/v3/enums/target_cpa_opt_in_recommendation_goal.pb.go
new file mode 100644
index 0000000..17bcecb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/target_cpa_opt_in_recommendation_goal.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/target_cpa_opt_in_recommendation_goal.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Goal of TargetCpaOptIn recommendation.
+type TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal int32
+
+const (
+	// Not specified.
+	TargetCpaOptInRecommendationGoalEnum_UNSPECIFIED TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetCpaOptInRecommendationGoalEnum_UNKNOWN TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 1
+	// Recommendation to set Target CPA to maintain the same cost.
+	TargetCpaOptInRecommendationGoalEnum_SAME_COST TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 2
+	// Recommendation to set Target CPA to maintain the same conversions.
+	TargetCpaOptInRecommendationGoalEnum_SAME_CONVERSIONS TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 3
+	// Recommendation to set Target CPA to maintain the same CPA.
+	TargetCpaOptInRecommendationGoalEnum_SAME_CPA TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 4
+	// Recommendation to set Target CPA to a value that is as close as possible
+	// to, yet lower than, the actual CPA (computed for past 28 days).
+	TargetCpaOptInRecommendationGoalEnum_CLOSEST_CPA TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 5
+)
+
+var TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SAME_COST",
+	3: "SAME_CONVERSIONS",
+	4: "SAME_CPA",
+	5: "CLOSEST_CPA",
+}
+
+var TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"SAME_COST":        2,
+	"SAME_CONVERSIONS": 3,
+	"SAME_CPA":         4,
+	"CLOSEST_CPA":      5,
+}
+
+func (x TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal) String() string {
+	return proto.EnumName(TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name, int32(x))
+}
+
+func (TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b31eca895470b68a, []int{0, 0}
+}
+
+// Container for enum describing goals for TargetCpaOptIn recommendation.
+type TargetCpaOptInRecommendationGoalEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetCpaOptInRecommendationGoalEnum) Reset()         { *m = TargetCpaOptInRecommendationGoalEnum{} }
+func (m *TargetCpaOptInRecommendationGoalEnum) String() string { return proto.CompactTextString(m) }
+func (*TargetCpaOptInRecommendationGoalEnum) ProtoMessage()    {}
+func (*TargetCpaOptInRecommendationGoalEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b31eca895470b68a, []int{0}
+}
+
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Unmarshal(m, b)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Marshal(b, m, deterministic)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Merge(m, src)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Size() int {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Size(m)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal", TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name, TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_value)
+	proto.RegisterType((*TargetCpaOptInRecommendationGoalEnum)(nil), "google.ads.googleads.v3.enums.TargetCpaOptInRecommendationGoalEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/target_cpa_opt_in_recommendation_goal.proto", fileDescriptor_b31eca895470b68a)
+}
+
+var fileDescriptor_b31eca895470b68a = []byte{
+	// 358 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcb, 0x4a, 0xeb, 0x40,
+	0x18, 0xc7, 0x4f, 0xd2, 0x73, 0x8e, 0x3a, 0x55, 0x0c, 0xc1, 0x95, 0x58, 0xb0, 0x45, 0xb7, 0x93,
+	0x45, 0x76, 0xe3, 0x2a, 0x8d, 0xb1, 0x04, 0x35, 0x09, 0x4d, 0x1b, 0x41, 0x02, 0x61, 0x6c, 0xc2,
+	0x10, 0x48, 0x66, 0x42, 0x66, 0xda, 0x27, 0xf0, 0x49, 0x5c, 0x0a, 0xbe, 0x88, 0x8f, 0xe2, 0x23,
+	0xb8, 0x92, 0xcc, 0xb4, 0x05, 0x17, 0xda, 0xcd, 0xf0, 0x9f, 0xef, 0xf2, 0xfb, 0x6e, 0xc0, 0x27,
+	0x8c, 0x91, 0xaa, 0xb0, 0x70, 0xce, 0x2d, 0x25, 0x3b, 0xb5, 0xb2, 0xad, 0x82, 0x2e, 0x6b, 0x6e,
+	0x09, 0xdc, 0x92, 0x42, 0x64, 0x8b, 0x06, 0x67, 0xac, 0x11, 0x59, 0x49, 0xb3, 0xb6, 0x58, 0xb0,
+	0xba, 0x2e, 0x68, 0x8e, 0x45, 0xc9, 0x68, 0x46, 0x18, 0xae, 0x60, 0xd3, 0x32, 0xc1, 0xcc, 0x81,
+	0xca, 0x87, 0x38, 0xe7, 0x70, 0x8b, 0x82, 0x2b, 0x1b, 0x4a, 0xd4, 0xe9, 0xd9, 0xa6, 0x52, 0x53,
+	0x5a, 0x98, 0x52, 0x26, 0x24, 0x80, 0xab, 0xe4, 0xd1, 0x9b, 0x06, 0x2e, 0x66, 0xb2, 0x98, 0xdb,
+	0xe0, 0xb0, 0x11, 0x3e, 0x9d, 0x7e, 0x2b, 0x34, 0x61, 0xb8, 0xf2, 0xe8, 0xb2, 0x1e, 0x3d, 0x6b,
+	0xe0, 0x7c, 0x57, 0xa0, 0x79, 0x0c, 0xfa, 0xf3, 0x20, 0x8e, 0x3c, 0xd7, 0xbf, 0xf1, 0xbd, 0x6b,
+	0xe3, 0x8f, 0xd9, 0x07, 0x7b, 0xf3, 0xe0, 0x36, 0x08, 0x1f, 0x02, 0x43, 0x33, 0x8f, 0xc0, 0x41,
+	0xec, 0xdc, 0x7b, 0x99, 0x1b, 0xc6, 0x33, 0x43, 0x37, 0x4f, 0x80, 0xb1, 0xfe, 0x06, 0x89, 0x37,
+	0x8d, 0xfd, 0x30, 0x88, 0x8d, 0x9e, 0x79, 0x08, 0xf6, 0x95, 0x35, 0x72, 0x8c, 0xbf, 0x1d, 0xd0,
+	0xbd, 0x0b, 0x63, 0x2f, 0x9e, 0x49, 0xc3, 0xbf, 0xf1, 0xa7, 0x06, 0x86, 0x0b, 0x56, 0xc3, 0x5f,
+	0x67, 0x1e, 0x5f, 0xee, 0xea, 0x34, 0xea, 0x86, 0x8f, 0xb4, 0xc7, 0xf1, 0x9a, 0x43, 0x58, 0x85,
+	0x29, 0x81, 0xac, 0x25, 0x16, 0x29, 0xa8, 0x5c, 0xcd, 0xe6, 0x2c, 0x4d, 0xc9, 0x7f, 0xb8, 0xd2,
+	0x95, 0x7c, 0x5f, 0xf4, 0xde, 0xc4, 0x71, 0x5e, 0xf5, 0xc1, 0x44, 0xa1, 0x9c, 0x9c, 0x43, 0x25,
+	0x3b, 0x95, 0xd8, 0xb0, 0x5b, 0x1f, 0x7f, 0xdf, 0xf8, 0x53, 0x27, 0xe7, 0xe9, 0xd6, 0x9f, 0x26,
+	0x76, 0x2a, 0xfd, 0x1f, 0xfa, 0x50, 0x19, 0x11, 0x72, 0x72, 0x8e, 0xd0, 0x36, 0x02, 0xa1, 0xc4,
+	0x46, 0x48, 0xc6, 0x3c, 0xfd, 0x97, 0x8d, 0xd9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x49,
+	0x6a, 0x72, 0x3d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/target_impression_share_location.pb.go b/googleapis/ads/googleads/v3/enums/target_impression_share_location.pb.go
new file mode 100644
index 0000000..7da6cc4
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/target_impression_share_location.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/target_impression_share_location.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible goals.
+type TargetImpressionShareLocationEnum_TargetImpressionShareLocation int32
+
+const (
+	// Not specified.
+	TargetImpressionShareLocationEnum_UNSPECIFIED TargetImpressionShareLocationEnum_TargetImpressionShareLocation = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetImpressionShareLocationEnum_UNKNOWN TargetImpressionShareLocationEnum_TargetImpressionShareLocation = 1
+	// Any location on the web page.
+	TargetImpressionShareLocationEnum_ANYWHERE_ON_PAGE TargetImpressionShareLocationEnum_TargetImpressionShareLocation = 2
+	// Top box of ads.
+	TargetImpressionShareLocationEnum_TOP_OF_PAGE TargetImpressionShareLocationEnum_TargetImpressionShareLocation = 3
+	// Top slot in the top box of ads.
+	TargetImpressionShareLocationEnum_ABSOLUTE_TOP_OF_PAGE TargetImpressionShareLocationEnum_TargetImpressionShareLocation = 4
+)
+
+var TargetImpressionShareLocationEnum_TargetImpressionShareLocation_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ANYWHERE_ON_PAGE",
+	3: "TOP_OF_PAGE",
+	4: "ABSOLUTE_TOP_OF_PAGE",
+}
+
+var TargetImpressionShareLocationEnum_TargetImpressionShareLocation_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"ANYWHERE_ON_PAGE":     2,
+	"TOP_OF_PAGE":          3,
+	"ABSOLUTE_TOP_OF_PAGE": 4,
+}
+
+func (x TargetImpressionShareLocationEnum_TargetImpressionShareLocation) String() string {
+	return proto.EnumName(TargetImpressionShareLocationEnum_TargetImpressionShareLocation_name, int32(x))
+}
+
+func (TargetImpressionShareLocationEnum_TargetImpressionShareLocation) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_de25f6d6d05843a7, []int{0, 0}
+}
+
+// Container for enum describing where on the first search results page the
+// automated bidding system should target impressions for the
+// TargetImpressionShare bidding strategy.
+type TargetImpressionShareLocationEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetImpressionShareLocationEnum) Reset()         { *m = TargetImpressionShareLocationEnum{} }
+func (m *TargetImpressionShareLocationEnum) String() string { return proto.CompactTextString(m) }
+func (*TargetImpressionShareLocationEnum) ProtoMessage()    {}
+func (*TargetImpressionShareLocationEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_de25f6d6d05843a7, []int{0}
+}
+
+func (m *TargetImpressionShareLocationEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetImpressionShareLocationEnum.Unmarshal(m, b)
+}
+func (m *TargetImpressionShareLocationEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetImpressionShareLocationEnum.Marshal(b, m, deterministic)
+}
+func (m *TargetImpressionShareLocationEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetImpressionShareLocationEnum.Merge(m, src)
+}
+func (m *TargetImpressionShareLocationEnum) XXX_Size() int {
+	return xxx_messageInfo_TargetImpressionShareLocationEnum.Size(m)
+}
+func (m *TargetImpressionShareLocationEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetImpressionShareLocationEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetImpressionShareLocationEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TargetImpressionShareLocationEnum_TargetImpressionShareLocation", TargetImpressionShareLocationEnum_TargetImpressionShareLocation_name, TargetImpressionShareLocationEnum_TargetImpressionShareLocation_value)
+	proto.RegisterType((*TargetImpressionShareLocationEnum)(nil), "google.ads.googleads.v3.enums.TargetImpressionShareLocationEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/target_impression_share_location.proto", fileDescriptor_de25f6d6d05843a7)
+}
+
+var fileDescriptor_de25f6d6d05843a7 = []byte{
+	// 342 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xbb, 0x4e, 0xf3, 0x30,
+	0x18, 0xfd, 0x93, 0xfe, 0x02, 0xc9, 0x1d, 0x88, 0xa2, 0x0e, 0x08, 0xd1, 0xa1, 0x7d, 0x00, 0x67,
+	0xc8, 0x66, 0x26, 0x87, 0xba, 0xa5, 0xa2, 0x4a, 0x22, 0x7a, 0x13, 0x28, 0x92, 0x65, 0x9a, 0xc8,
+	0x44, 0x6a, 0xec, 0x28, 0x4e, 0x3b, 0xf2, 0x30, 0xb0, 0xf1, 0x28, 0x3c, 0x0a, 0x2f, 0xc0, 0x8a,
+	0x62, 0xb7, 0x11, 0x0b, 0x5d, 0xac, 0x23, 0x9f, 0xef, 0x9c, 0xf3, 0x5d, 0xc0, 0x88, 0x4b, 0xc9,
+	0xb7, 0x99, 0xc7, 0x52, 0xe5, 0x19, 0xd8, 0xa0, 0xbd, 0xef, 0x65, 0x62, 0x57, 0x28, 0xaf, 0x66,
+	0x15, 0xcf, 0x6a, 0x9a, 0x17, 0x65, 0x95, 0x29, 0x95, 0x4b, 0x41, 0xd5, 0x0b, 0xab, 0x32, 0xba,
+	0x95, 0x1b, 0x56, 0xe7, 0x52, 0xc0, 0xb2, 0x92, 0xb5, 0x74, 0xfb, 0x46, 0x0a, 0x59, 0xaa, 0x60,
+	0xeb, 0x02, 0xf7, 0x3e, 0xd4, 0x2e, 0x57, 0xd7, 0xc7, 0x90, 0x32, 0xf7, 0x98, 0x10, 0xb2, 0xd6,
+	0x5a, 0x65, 0xc4, 0xc3, 0x77, 0x0b, 0x0c, 0x16, 0x3a, 0x67, 0xda, 0xc6, 0xcc, 0x9b, 0x94, 0xd9,
+	0x21, 0x84, 0x88, 0x5d, 0x31, 0x7c, 0x05, 0xfd, 0x93, 0x45, 0xee, 0x05, 0xe8, 0x2e, 0xc3, 0x79,
+	0x4c, 0x6e, 0xa7, 0xe3, 0x29, 0x19, 0x39, 0xff, 0xdc, 0x2e, 0x38, 0x5f, 0x86, 0xf7, 0x61, 0xb4,
+	0x0e, 0x1d, 0xcb, 0xed, 0x01, 0x07, 0x87, 0x8f, 0xeb, 0x3b, 0xf2, 0x40, 0x68, 0x14, 0xd2, 0x18,
+	0x4f, 0x88, 0x63, 0x37, 0x9a, 0x45, 0x14, 0xd3, 0x68, 0x6c, 0x3e, 0x3a, 0xee, 0x25, 0xe8, 0xe1,
+	0x60, 0x1e, 0xcd, 0x96, 0x0b, 0x42, 0x7f, 0x33, 0xff, 0x83, 0x6f, 0x0b, 0x0c, 0x36, 0xb2, 0x80,
+	0x27, 0x27, 0x0d, 0x86, 0x27, 0x7b, 0x8c, 0x9b, 0x79, 0x63, 0xeb, 0x29, 0x38, 0x98, 0x70, 0xb9,
+	0x65, 0x82, 0x43, 0x59, 0x71, 0x8f, 0x67, 0x42, 0x6f, 0xe3, 0x78, 0x84, 0x32, 0x57, 0x7f, 0xdc,
+	0xe4, 0x46, 0xbf, 0x6f, 0x76, 0x67, 0x82, 0xf1, 0x87, 0xdd, 0x9f, 0x18, 0x2b, 0x9c, 0x2a, 0x68,
+	0x60, 0x83, 0x56, 0x3e, 0x6c, 0x96, 0xa6, 0x3e, 0x8f, 0x7c, 0x82, 0x53, 0x95, 0xb4, 0x7c, 0xb2,
+	0xf2, 0x13, 0xcd, 0x7f, 0xd9, 0x03, 0xf3, 0x89, 0x10, 0x4e, 0x15, 0x42, 0x6d, 0x05, 0x42, 0x2b,
+	0x1f, 0x21, 0x5d, 0xf3, 0x7c, 0xa6, 0x1b, 0xf3, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x23,
+	0x39, 0x09, 0x2b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/targeting_dimension.pb.go b/googleapis/ads/googleads/v3/enums/targeting_dimension.pb.go
new file mode 100644
index 0000000..21a925b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/targeting_dimension.pb.go
@@ -0,0 +1,158 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/targeting_dimension.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible targeting dimensions.
+type TargetingDimensionEnum_TargetingDimension int32
+
+const (
+	// Not specified.
+	TargetingDimensionEnum_UNSPECIFIED TargetingDimensionEnum_TargetingDimension = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetingDimensionEnum_UNKNOWN TargetingDimensionEnum_TargetingDimension = 1
+	// Keyword criteria, e.g. 'mars cruise'. KEYWORD may be used as a custom bid
+	// dimension. Keywords are always a targeting dimension, so may not be set
+	// as a target "ALL" dimension with TargetRestriction.
+	TargetingDimensionEnum_KEYWORD TargetingDimensionEnum_TargetingDimension = 2
+	// Audience criteria, which include user list, user interest, custom
+	// affinity,  and custom in market.
+	TargetingDimensionEnum_AUDIENCE TargetingDimensionEnum_TargetingDimension = 3
+	// Topic criteria for targeting categories of content, e.g.
+	// 'category::Animals>Pets' Used for Display and Video targeting.
+	TargetingDimensionEnum_TOPIC TargetingDimensionEnum_TargetingDimension = 4
+	// Criteria for targeting gender.
+	TargetingDimensionEnum_GENDER TargetingDimensionEnum_TargetingDimension = 5
+	// Criteria for targeting age ranges.
+	TargetingDimensionEnum_AGE_RANGE TargetingDimensionEnum_TargetingDimension = 6
+	// Placement criteria, which include websites like 'www.flowers4sale.com',
+	// as well as mobile applications, mobile app categories, YouTube videos,
+	// and YouTube channels.
+	TargetingDimensionEnum_PLACEMENT TargetingDimensionEnum_TargetingDimension = 7
+	// Criteria for parental status targeting.
+	TargetingDimensionEnum_PARENTAL_STATUS TargetingDimensionEnum_TargetingDimension = 8
+	// Criteria for income range targeting.
+	TargetingDimensionEnum_INCOME_RANGE TargetingDimensionEnum_TargetingDimension = 9
+)
+
+var TargetingDimensionEnum_TargetingDimension_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "KEYWORD",
+	3: "AUDIENCE",
+	4: "TOPIC",
+	5: "GENDER",
+	6: "AGE_RANGE",
+	7: "PLACEMENT",
+	8: "PARENTAL_STATUS",
+	9: "INCOME_RANGE",
+}
+
+var TargetingDimensionEnum_TargetingDimension_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"KEYWORD":         2,
+	"AUDIENCE":        3,
+	"TOPIC":           4,
+	"GENDER":          5,
+	"AGE_RANGE":       6,
+	"PLACEMENT":       7,
+	"PARENTAL_STATUS": 8,
+	"INCOME_RANGE":    9,
+}
+
+func (x TargetingDimensionEnum_TargetingDimension) String() string {
+	return proto.EnumName(TargetingDimensionEnum_TargetingDimension_name, int32(x))
+}
+
+func (TargetingDimensionEnum_TargetingDimension) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e42413d270777352, []int{0, 0}
+}
+
+// The dimensions that can be targeted.
+type TargetingDimensionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetingDimensionEnum) Reset()         { *m = TargetingDimensionEnum{} }
+func (m *TargetingDimensionEnum) String() string { return proto.CompactTextString(m) }
+func (*TargetingDimensionEnum) ProtoMessage()    {}
+func (*TargetingDimensionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e42413d270777352, []int{0}
+}
+
+func (m *TargetingDimensionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetingDimensionEnum.Unmarshal(m, b)
+}
+func (m *TargetingDimensionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetingDimensionEnum.Marshal(b, m, deterministic)
+}
+func (m *TargetingDimensionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetingDimensionEnum.Merge(m, src)
+}
+func (m *TargetingDimensionEnum) XXX_Size() int {
+	return xxx_messageInfo_TargetingDimensionEnum.Size(m)
+}
+func (m *TargetingDimensionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetingDimensionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetingDimensionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TargetingDimensionEnum_TargetingDimension", TargetingDimensionEnum_TargetingDimension_name, TargetingDimensionEnum_TargetingDimension_value)
+	proto.RegisterType((*TargetingDimensionEnum)(nil), "google.ads.googleads.v3.enums.TargetingDimensionEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/targeting_dimension.proto", fileDescriptor_e42413d270777352)
+}
+
+var fileDescriptor_e42413d270777352 = []byte{
+	// 377 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x4f, 0xcb, 0xd3, 0x30,
+	0x1c, 0xb6, 0x7d, 0x7d, 0xf7, 0x6e, 0xd9, 0x64, 0x21, 0x82, 0x82, 0xb8, 0xc3, 0xf6, 0x01, 0xd2,
+	0x43, 0x0f, 0x42, 0x3c, 0x65, 0x6d, 0x2c, 0x65, 0x5b, 0x5a, 0xba, 0x76, 0x43, 0x29, 0x8c, 0x6a,
+	0x4b, 0x28, 0xac, 0xc9, 0x58, 0xba, 0x7d, 0x20, 0x6f, 0xfa, 0x39, 0x3c, 0xf9, 0x51, 0xc4, 0x0f,
+	0x21, 0x6d, 0xed, 0x2e, 0x43, 0x2f, 0xe1, 0xf9, 0xe5, 0xf9, 0x43, 0xf2, 0xfc, 0xc0, 0x3b, 0xa1,
+	0x94, 0x38, 0x16, 0x56, 0x96, 0x6b, 0xab, 0x83, 0x0d, 0xba, 0xda, 0x56, 0x21, 0x2f, 0x95, 0xb6,
+	0xea, 0xec, 0x2c, 0x8a, 0xba, 0x94, 0xe2, 0x90, 0x97, 0x55, 0x21, 0x75, 0xa9, 0x24, 0x3e, 0x9d,
+	0x55, 0xad, 0xd0, 0xac, 0x53, 0xe3, 0x2c, 0xd7, 0xf8, 0x66, 0xc4, 0x57, 0x1b, 0xb7, 0xc6, 0x37,
+	0x6f, 0xfb, 0xdc, 0x53, 0x69, 0x65, 0x52, 0xaa, 0x3a, 0xab, 0x4b, 0x25, 0x75, 0x67, 0x5e, 0xfc,
+	0x30, 0xc0, 0xab, 0xb8, 0x8f, 0x76, 0xfb, 0x64, 0x26, 0x2f, 0xd5, 0xe2, 0x9b, 0x01, 0xd0, 0x3d,
+	0x85, 0xa6, 0x60, 0x9c, 0xf0, 0x6d, 0xc8, 0x1c, 0xff, 0x83, 0xcf, 0x5c, 0xf8, 0x0c, 0x8d, 0xc1,
+	0x53, 0xc2, 0x57, 0x3c, 0xd8, 0x73, 0x68, 0x34, 0xc3, 0x8a, 0x7d, 0xdc, 0x07, 0x91, 0x0b, 0x4d,
+	0x34, 0x01, 0x43, 0x9a, 0xb8, 0x3e, 0xe3, 0x0e, 0x83, 0x0f, 0x68, 0x04, 0x1e, 0xe3, 0x20, 0xf4,
+	0x1d, 0xf8, 0x1c, 0x01, 0x30, 0xf0, 0x18, 0x77, 0x59, 0x04, 0x1f, 0xd1, 0x0b, 0x30, 0xa2, 0x1e,
+	0x3b, 0x44, 0x94, 0x7b, 0x0c, 0x0e, 0x9a, 0x31, 0x5c, 0x53, 0x87, 0x6d, 0x18, 0x8f, 0xe1, 0x13,
+	0x7a, 0x09, 0xa6, 0x21, 0x8d, 0x18, 0x8f, 0xe9, 0xfa, 0xb0, 0x8d, 0x69, 0x9c, 0x6c, 0xe1, 0x10,
+	0x41, 0x30, 0xf1, 0xb9, 0x13, 0x6c, 0x7a, 0xd7, 0x68, 0xf9, 0xdb, 0x00, 0xf3, 0x2f, 0xaa, 0xc2,
+	0xff, 0xad, 0x62, 0xf9, 0xfa, 0xfe, 0x3b, 0x61, 0xd3, 0x42, 0x68, 0x7c, 0x5a, 0xfe, 0x75, 0x0a,
+	0x75, 0xcc, 0xa4, 0xc0, 0xea, 0x2c, 0x2c, 0x51, 0xc8, 0xb6, 0xa3, 0x7e, 0x1b, 0xa7, 0x52, 0xff,
+	0x63, 0x39, 0xef, 0xdb, 0xf3, 0xab, 0xf9, 0xe0, 0x51, 0xfa, 0xdd, 0x9c, 0x79, 0x5d, 0x14, 0xcd,
+	0x35, 0xee, 0x60, 0x83, 0x76, 0x36, 0x6e, 0x5a, 0xd5, 0x3f, 0x7b, 0x3e, 0xa5, 0xb9, 0x4e, 0x6f,
+	0x7c, 0xba, 0xb3, 0xd3, 0x96, 0xff, 0x65, 0xce, 0xbb, 0x4b, 0x42, 0x68, 0xae, 0x09, 0xb9, 0x29,
+	0x08, 0xd9, 0xd9, 0x84, 0xb4, 0x9a, 0xcf, 0x83, 0xf6, 0x61, 0xf6, 0x9f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x45, 0xef, 0xff, 0xbe, 0x34, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/time_type.pb.go b/googleapis/ads/googleads/v3/enums/time_type.pb.go
new file mode 100644
index 0000000..13ec05e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/time_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/time_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible time types used by certain resources as an alternative to
+// absolute timestamps.
+type TimeTypeEnum_TimeType int32
+
+const (
+	// Not specified.
+	TimeTypeEnum_UNSPECIFIED TimeTypeEnum_TimeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	TimeTypeEnum_UNKNOWN TimeTypeEnum_TimeType = 1
+	// As soon as possible.
+	TimeTypeEnum_NOW TimeTypeEnum_TimeType = 2
+	// An infinite point in the future.
+	TimeTypeEnum_FOREVER TimeTypeEnum_TimeType = 3
+)
+
+var TimeTypeEnum_TimeType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOW",
+	3: "FOREVER",
+}
+
+var TimeTypeEnum_TimeType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NOW":         2,
+	"FOREVER":     3,
+}
+
+func (x TimeTypeEnum_TimeType) String() string {
+	return proto.EnumName(TimeTypeEnum_TimeType_name, int32(x))
+}
+
+func (TimeTypeEnum_TimeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2bcb6847913a5158, []int{0, 0}
+}
+
+// Message describing time types.
+type TimeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TimeTypeEnum) Reset()         { *m = TimeTypeEnum{} }
+func (m *TimeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*TimeTypeEnum) ProtoMessage()    {}
+func (*TimeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2bcb6847913a5158, []int{0}
+}
+
+func (m *TimeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimeTypeEnum.Unmarshal(m, b)
+}
+func (m *TimeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *TimeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeTypeEnum.Merge(m, src)
+}
+func (m *TimeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_TimeTypeEnum.Size(m)
+}
+func (m *TimeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TimeTypeEnum_TimeType", TimeTypeEnum_TimeType_name, TimeTypeEnum_TimeType_value)
+	proto.RegisterType((*TimeTypeEnum)(nil), "google.ads.googleads.v3.enums.TimeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/time_type.proto", fileDescriptor_2bcb6847913a5158)
+}
+
+var fileDescriptor_2bcb6847913a5158 = []byte{
+	// 293 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x5d, 0x0b, 0x4e, 0x32, 0xc5, 0xd2, 0xa3, 0xb8, 0xc3, 0x76, 0x37, 0x39, 0xe4, 0x16,
+	0x41, 0x68, 0xb5, 0x1b, 0x43, 0x48, 0xcb, 0xdc, 0x3a, 0x90, 0x82, 0x54, 0x1b, 0x42, 0x61, 0x4d,
+	0xca, 0xd2, 0x0d, 0xf6, 0x3a, 0x1e, 0x7d, 0x14, 0x1f, 0xc3, 0xa3, 0x4f, 0x21, 0x49, 0x4c, 0x6f,
+	0x7a, 0x09, 0xff, 0x7c, 0xff, 0x5f, 0xbe, 0xfc, 0xbf, 0x0f, 0xdc, 0x70, 0x29, 0xf9, 0x96, 0xa1,
+	0xb2, 0x52, 0xc8, 0x4a, 0xad, 0x0e, 0x18, 0x31, 0xb1, 0x6f, 0x14, 0xea, 0xea, 0x86, 0xbd, 0x74,
+	0xc7, 0x96, 0xc1, 0x76, 0x27, 0x3b, 0x19, 0x8e, 0x2d, 0x03, 0xcb, 0x4a, 0xc1, 0x1e, 0x87, 0x07,
+	0x0c, 0x0d, 0x7e, 0x75, 0xed, 0xba, 0xb5, 0x35, 0x2a, 0x85, 0x90, 0x5d, 0xd9, 0xd5, 0x52, 0x28,
+	0xfb, 0x78, 0x4a, 0xc1, 0xf9, 0xaa, 0x6e, 0xd8, 0xea, 0xd8, 0xb2, 0x44, 0xec, 0x9b, 0xe9, 0x1d,
+	0x38, 0x73, 0xf7, 0xf0, 0x12, 0x8c, 0xd6, 0xf4, 0x29, 0x4b, 0xee, 0x17, 0xb3, 0x45, 0xf2, 0x10,
+	0x9c, 0x84, 0x23, 0x30, 0x5c, 0xd3, 0x47, 0x9a, 0x6e, 0x68, 0x30, 0x08, 0x87, 0xc0, 0xa7, 0xe9,
+	0x26, 0xf0, 0x74, 0x75, 0x96, 0x2e, 0x93, 0x3c, 0x59, 0x06, 0x7e, 0xfc, 0x35, 0x00, 0x93, 0x37,
+	0xd9, 0xc0, 0x7f, 0x33, 0xc5, 0x17, 0xee, 0x8f, 0x4c, 0x87, 0xc8, 0x06, 0xcf, 0xf1, 0x2f, 0xcf,
+	0xe5, 0xb6, 0x14, 0x1c, 0xca, 0x1d, 0x47, 0x9c, 0x09, 0x13, 0xd1, 0xad, 0xa0, 0xad, 0xd5, 0x1f,
+	0x1b, 0xb9, 0x35, 0xe7, 0xbb, 0xe7, 0xcf, 0xa3, 0xe8, 0xc3, 0x1b, 0xcf, 0x6d, 0xab, 0xa8, 0x52,
+	0xd0, 0x4a, 0xad, 0x72, 0x0c, 0xf5, 0x7c, 0xea, 0xd3, 0xf9, 0x45, 0x54, 0xa9, 0xa2, 0xf7, 0x8b,
+	0x1c, 0x17, 0xc6, 0xff, 0xf6, 0x26, 0xb6, 0x48, 0x48, 0x54, 0x29, 0x42, 0x7a, 0x82, 0x90, 0x1c,
+	0x13, 0x62, 0x98, 0xd7, 0x53, 0x13, 0x0c, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x16, 0x18, 0x32,
+	0xc9, 0xa9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/tracking_code_page_format.pb.go b/googleapis/ads/googleads/v3/enums/tracking_code_page_format.pb.go
new file mode 100644
index 0000000..1782987
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/tracking_code_page_format.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/tracking_code_page_format.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The format of the web page where the tracking tag and snippet will be
+// installed.
+type TrackingCodePageFormatEnum_TrackingCodePageFormat int32
+
+const (
+	// Not specified.
+	TrackingCodePageFormatEnum_UNSPECIFIED TrackingCodePageFormatEnum_TrackingCodePageFormat = 0
+	// Used for return value only. Represents value unknown in this version.
+	TrackingCodePageFormatEnum_UNKNOWN TrackingCodePageFormatEnum_TrackingCodePageFormat = 1
+	// Standard HTML page format.
+	TrackingCodePageFormatEnum_HTML TrackingCodePageFormatEnum_TrackingCodePageFormat = 2
+	// Google AMP page format.
+	TrackingCodePageFormatEnum_AMP TrackingCodePageFormatEnum_TrackingCodePageFormat = 3
+)
+
+var TrackingCodePageFormatEnum_TrackingCodePageFormat_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HTML",
+	3: "AMP",
+}
+
+var TrackingCodePageFormatEnum_TrackingCodePageFormat_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"HTML":        2,
+	"AMP":         3,
+}
+
+func (x TrackingCodePageFormatEnum_TrackingCodePageFormat) String() string {
+	return proto.EnumName(TrackingCodePageFormatEnum_TrackingCodePageFormat_name, int32(x))
+}
+
+func (TrackingCodePageFormatEnum_TrackingCodePageFormat) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e3a23c7c2a2a42f2, []int{0, 0}
+}
+
+// Container for enum describing the format of the web page where the tracking
+// tag and snippet will be installed.
+type TrackingCodePageFormatEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TrackingCodePageFormatEnum) Reset()         { *m = TrackingCodePageFormatEnum{} }
+func (m *TrackingCodePageFormatEnum) String() string { return proto.CompactTextString(m) }
+func (*TrackingCodePageFormatEnum) ProtoMessage()    {}
+func (*TrackingCodePageFormatEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e3a23c7c2a2a42f2, []int{0}
+}
+
+func (m *TrackingCodePageFormatEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Unmarshal(m, b)
+}
+func (m *TrackingCodePageFormatEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Marshal(b, m, deterministic)
+}
+func (m *TrackingCodePageFormatEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TrackingCodePageFormatEnum.Merge(m, src)
+}
+func (m *TrackingCodePageFormatEnum) XXX_Size() int {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Size(m)
+}
+func (m *TrackingCodePageFormatEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TrackingCodePageFormatEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TrackingCodePageFormatEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TrackingCodePageFormatEnum_TrackingCodePageFormat", TrackingCodePageFormatEnum_TrackingCodePageFormat_name, TrackingCodePageFormatEnum_TrackingCodePageFormat_value)
+	proto.RegisterType((*TrackingCodePageFormatEnum)(nil), "google.ads.googleads.v3.enums.TrackingCodePageFormatEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/tracking_code_page_format.proto", fileDescriptor_e3a23c7c2a2a42f2)
+}
+
+var fileDescriptor_e3a23c7c2a2a42f2 = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xf2, 0x40,
+	0x14, 0x85, 0x7f, 0xca, 0x1f, 0x31, 0xc3, 0xc2, 0xa6, 0x0b, 0x17, 0x28, 0x0b, 0x78, 0x80, 0xe9,
+	0x62, 0x76, 0x63, 0x5c, 0x0c, 0x08, 0x48, 0x94, 0xda, 0x44, 0xc0, 0xc4, 0x34, 0x21, 0x23, 0x33,
+	0x4e, 0x1a, 0xe9, 0xdc, 0xa6, 0x53, 0x78, 0x20, 0x97, 0x3e, 0x8a, 0x8f, 0xe2, 0xca, 0x47, 0x30,
+	0x9d, 0x81, 0xae, 0xd0, 0x4d, 0x73, 0xd2, 0x73, 0xbf, 0x33, 0xe7, 0x5e, 0x74, 0xad, 0x00, 0xd4,
+	0x46, 0x86, 0x5c, 0x98, 0xd0, 0xc9, 0x4a, 0xed, 0x48, 0x28, 0xf5, 0x36, 0x33, 0x61, 0x59, 0xf0,
+	0xf5, 0x5b, 0xaa, 0xd5, 0x6a, 0x0d, 0x42, 0xae, 0x72, 0xae, 0xe4, 0xea, 0x15, 0x8a, 0x8c, 0x97,
+	0x38, 0x2f, 0xa0, 0x84, 0xa0, 0xeb, 0x18, 0xcc, 0x85, 0xc1, 0x35, 0x8e, 0x77, 0x04, 0x5b, 0xbc,
+	0x73, 0x79, 0x48, 0xcf, 0xd3, 0x90, 0x6b, 0x0d, 0x25, 0x2f, 0x53, 0xd0, 0xc6, 0xc1, 0x7d, 0x85,
+	0x3a, 0xf3, 0x7d, 0xfe, 0x10, 0x84, 0x8c, 0xb9, 0x92, 0x63, 0x1b, 0x3e, 0xd2, 0xdb, 0xac, 0x3f,
+	0x45, 0xe7, 0xc7, 0xdd, 0xe0, 0x0c, 0xb5, 0x17, 0xd1, 0x63, 0x3c, 0x1a, 0x4e, 0xc7, 0xd3, 0xd1,
+	0x8d, 0xff, 0x2f, 0x68, 0xa3, 0xd6, 0x22, 0xba, 0x8b, 0x1e, 0x9e, 0x22, 0xbf, 0x11, 0x9c, 0xa2,
+	0xff, 0xb7, 0xf3, 0xd9, 0xbd, 0xef, 0x05, 0x2d, 0xd4, 0x64, 0xb3, 0xd8, 0x6f, 0x0e, 0xbe, 0x1b,
+	0xa8, 0xb7, 0x86, 0x0c, 0xff, 0x59, 0x76, 0x70, 0x71, 0xfc, 0xb9, 0xb8, 0xea, 0x1a, 0x37, 0x9e,
+	0x07, 0x7b, 0x5a, 0xc1, 0x86, 0x6b, 0x85, 0xa1, 0x50, 0xa1, 0x92, 0xda, 0x6e, 0x72, 0xb8, 0x5c,
+	0x9e, 0x9a, 0x5f, 0x0e, 0x79, 0x65, 0xbf, 0xef, 0x5e, 0x73, 0xc2, 0xd8, 0x87, 0xd7, 0x9d, 0xb8,
+	0x28, 0x26, 0x0c, 0x76, 0xb2, 0x52, 0x4b, 0x82, 0xab, 0xc5, 0xcd, 0xe7, 0xc1, 0x4f, 0x98, 0x30,
+	0x49, 0xed, 0x27, 0x4b, 0x92, 0x58, 0xff, 0xcb, 0xeb, 0xb9, 0x9f, 0x94, 0x32, 0x61, 0x28, 0xad,
+	0x27, 0x28, 0x5d, 0x12, 0x4a, 0xed, 0xcc, 0xcb, 0x89, 0x2d, 0x46, 0x7e, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0x9e, 0x0d, 0x97, 0x9e, 0xe0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/tracking_code_type.pb.go b/googleapis/ads/googleads/v3/enums/tracking_code_type.pb.go
new file mode 100644
index 0000000..18b93c0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/tracking_code_type.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/tracking_code_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The type of the generated tag snippets for tracking conversions.
+type TrackingCodeTypeEnum_TrackingCodeType int32
+
+const (
+	// Not specified.
+	TrackingCodeTypeEnum_UNSPECIFIED TrackingCodeTypeEnum_TrackingCodeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	TrackingCodeTypeEnum_UNKNOWN TrackingCodeTypeEnum_TrackingCodeType = 1
+	// The snippet that is fired as a result of a website page loading.
+	TrackingCodeTypeEnum_WEBPAGE TrackingCodeTypeEnum_TrackingCodeType = 2
+	// The snippet contains a JavaScript function which fires the tag. This
+	// function is typically called from an onClick handler added to a link or
+	// button element on the page.
+	TrackingCodeTypeEnum_WEBPAGE_ONCLICK TrackingCodeTypeEnum_TrackingCodeType = 3
+	// For embedding on a mobile webpage. The snippet contains a JavaScript
+	// function which fires the tag.
+	TrackingCodeTypeEnum_CLICK_TO_CALL TrackingCodeTypeEnum_TrackingCodeType = 4
+	// The snippet that is used to replace the phone number on your website with
+	// a Google forwarding number for call tracking purposes.
+	TrackingCodeTypeEnum_WEBSITE_CALL TrackingCodeTypeEnum_TrackingCodeType = 5
+)
+
+var TrackingCodeTypeEnum_TrackingCodeType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "WEBPAGE",
+	3: "WEBPAGE_ONCLICK",
+	4: "CLICK_TO_CALL",
+	5: "WEBSITE_CALL",
+}
+
+var TrackingCodeTypeEnum_TrackingCodeType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"WEBPAGE":         2,
+	"WEBPAGE_ONCLICK": 3,
+	"CLICK_TO_CALL":   4,
+	"WEBSITE_CALL":    5,
+}
+
+func (x TrackingCodeTypeEnum_TrackingCodeType) String() string {
+	return proto.EnumName(TrackingCodeTypeEnum_TrackingCodeType_name, int32(x))
+}
+
+func (TrackingCodeTypeEnum_TrackingCodeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d7ecffb311479e90, []int{0, 0}
+}
+
+// Container for enum describing the type of the generated tag snippets for
+// tracking conversions.
+type TrackingCodeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TrackingCodeTypeEnum) Reset()         { *m = TrackingCodeTypeEnum{} }
+func (m *TrackingCodeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*TrackingCodeTypeEnum) ProtoMessage()    {}
+func (*TrackingCodeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d7ecffb311479e90, []int{0}
+}
+
+func (m *TrackingCodeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Unmarshal(m, b)
+}
+func (m *TrackingCodeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *TrackingCodeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TrackingCodeTypeEnum.Merge(m, src)
+}
+func (m *TrackingCodeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Size(m)
+}
+func (m *TrackingCodeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TrackingCodeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TrackingCodeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TrackingCodeTypeEnum_TrackingCodeType", TrackingCodeTypeEnum_TrackingCodeType_name, TrackingCodeTypeEnum_TrackingCodeType_value)
+	proto.RegisterType((*TrackingCodeTypeEnum)(nil), "google.ads.googleads.v3.enums.TrackingCodeTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/tracking_code_type.proto", fileDescriptor_d7ecffb311479e90)
+}
+
+var fileDescriptor_d7ecffb311479e90 = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xdd, 0x6a, 0xc2, 0x30,
+	0x18, 0x5d, 0xeb, 0x7e, 0x20, 0x6e, 0xd8, 0x75, 0xdb, 0xcd, 0x98, 0x17, 0xfa, 0x00, 0xe9, 0x45,
+	0x61, 0x17, 0xd9, 0x55, 0xdb, 0x65, 0x52, 0x94, 0x5a, 0xb0, 0x2a, 0x8c, 0x42, 0xe9, 0x4c, 0x08,
+	0x65, 0x9a, 0x14, 0x53, 0x1d, 0x3e, 0xc5, 0xde, 0x61, 0x97, 0x7b, 0x94, 0x3d, 0x8a, 0x4f, 0x31,
+	0x9a, 0xa8, 0x17, 0xc2, 0x76, 0x13, 0x4e, 0xbe, 0xef, 0x9c, 0xc3, 0x77, 0x0e, 0x78, 0x64, 0x42,
+	0xb0, 0x39, 0x75, 0x72, 0x22, 0x1d, 0x0d, 0x6b, 0xb4, 0x76, 0x1d, 0xca, 0x57, 0x0b, 0xe9, 0x54,
+	0xcb, 0x7c, 0xf6, 0x5e, 0x70, 0x96, 0xcd, 0x04, 0xa1, 0x59, 0xb5, 0x29, 0x29, 0x2c, 0x97, 0xa2,
+	0x12, 0x76, 0x5b, 0x93, 0x61, 0x4e, 0x24, 0x3c, 0xe8, 0xe0, 0xda, 0x85, 0x4a, 0x77, 0xff, 0xb0,
+	0xb7, 0x2d, 0x0b, 0x27, 0xe7, 0x5c, 0x54, 0x79, 0x55, 0x08, 0x2e, 0xb5, 0xb8, 0xfb, 0x69, 0x80,
+	0xdb, 0x64, 0xe7, 0x1c, 0x08, 0x42, 0x93, 0x4d, 0x49, 0x31, 0x5f, 0x2d, 0xba, 0x1f, 0xc0, 0x3a,
+	0x9e, 0xdb, 0x2d, 0xd0, 0x1c, 0x47, 0xa3, 0x18, 0x07, 0xe1, 0x4b, 0x88, 0x9f, 0xad, 0x13, 0xbb,
+	0x09, 0x2e, 0xc6, 0x51, 0x3f, 0x1a, 0x4e, 0x23, 0xcb, 0xa8, 0x3f, 0x53, 0xec, 0xc7, 0x5e, 0x0f,
+	0x5b, 0xa6, 0x7d, 0x03, 0x5a, 0xbb, 0x4f, 0x36, 0x8c, 0x82, 0x41, 0x18, 0xf4, 0xad, 0x86, 0x7d,
+	0x0d, 0xae, 0x14, 0xcc, 0x92, 0x61, 0x16, 0x78, 0x83, 0x81, 0x75, 0x6a, 0x5b, 0xe0, 0x72, 0x8a,
+	0xfd, 0x51, 0x98, 0x60, 0x3d, 0x39, 0xf3, 0xb7, 0x06, 0xe8, 0xcc, 0xc4, 0x02, 0xfe, 0x9b, 0xca,
+	0xbf, 0x3b, 0x3e, 0x2e, 0xae, 0xe3, 0xc4, 0xc6, 0xab, 0xbf, 0xd3, 0x31, 0x31, 0xcf, 0x39, 0x83,
+	0x62, 0xc9, 0x1c, 0x46, 0xb9, 0x0a, 0xbb, 0x6f, 0xb5, 0x2c, 0xe4, 0x1f, 0x25, 0x3f, 0xa9, 0xf7,
+	0xcb, 0x6c, 0xf4, 0x3c, 0xef, 0xdb, 0x6c, 0xf7, 0xb4, 0x95, 0x47, 0x24, 0xd4, 0xb0, 0x46, 0x13,
+	0x17, 0xd6, 0x05, 0xc9, 0x9f, 0xfd, 0x3e, 0xf5, 0x88, 0x4c, 0x0f, 0xfb, 0x74, 0xe2, 0xa6, 0x6a,
+	0xbf, 0x35, 0x3b, 0x7a, 0x88, 0x90, 0x47, 0x24, 0x42, 0x07, 0x06, 0x42, 0x13, 0x17, 0x21, 0xc5,
+	0x79, 0x3b, 0x57, 0x87, 0xb9, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x73, 0x76, 0x2d, 0xfc,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/travel_placeholder_field.pb.go b/googleapis/ads/googleads/v3/enums/travel_placeholder_field.pb.go
new file mode 100644
index 0000000..60a6160
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/travel_placeholder_field.pb.go
@@ -0,0 +1,233 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/travel_placeholder_field.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Possible values for Travel placeholder fields.
+type TravelPlaceholderFieldEnum_TravelPlaceholderField int32
+
+const (
+	// Not specified.
+	TravelPlaceholderFieldEnum_UNSPECIFIED TravelPlaceholderFieldEnum_TravelPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	TravelPlaceholderFieldEnum_UNKNOWN TravelPlaceholderFieldEnum_TravelPlaceholderField = 1
+	// Data Type: STRING. Required. Destination id. Example: PAR, LON.
+	// For feed items that only have destination id, destination id must be a
+	// unique key. For feed items that have both destination id and origin id,
+	// then the combination must be a unique key.
+	TravelPlaceholderFieldEnum_DESTINATION_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 2
+	// Data Type: STRING. Origin id. Example: PAR, LON.
+	// Combination of DESTINATION_ID and ORIGIN_ID must be
+	// unique per offer.
+	TravelPlaceholderFieldEnum_ORIGIN_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with name to be shown in
+	// dynamic ad.
+	TravelPlaceholderFieldEnum_TITLE TravelPlaceholderFieldEnum_TravelPlaceholderField = 4
+	// Data Type: STRING. The destination name. Shorter names are recommended.
+	TravelPlaceholderFieldEnum_DESTINATION_NAME TravelPlaceholderFieldEnum_TravelPlaceholderField = 5
+	// Data Type: STRING. Origin name. Shorter names are recommended.
+	TravelPlaceholderFieldEnum_ORIGIN_NAME TravelPlaceholderFieldEnum_TravelPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad. Highly recommended for
+	// dynamic ads.
+	// Example: "100.00 USD"
+	TravelPlaceholderFieldEnum_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	TravelPlaceholderFieldEnum_FORMATTED_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	TravelPlaceholderFieldEnum_SALE_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	TravelPlaceholderFieldEnum_FORMATTED_SALE_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	TravelPlaceholderFieldEnum_IMAGE_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 11
+	// Data Type: STRING. Category of travel offer used to group like items
+	// together for recommendation engine.
+	TravelPlaceholderFieldEnum_CATEGORY TravelPlaceholderFieldEnum_TravelPlaceholderField = 12
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	TravelPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS TravelPlaceholderFieldEnum_TravelPlaceholderField = 13
+	// Data Type: STRING. Address of travel offer, including postal code.
+	TravelPlaceholderFieldEnum_DESTINATION_ADDRESS TravelPlaceholderFieldEnum_TravelPlaceholderField = 14
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad, when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific travel offer and its location).
+	TravelPlaceholderFieldEnum_FINAL_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 15
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	TravelPlaceholderFieldEnum_FINAL_MOBILE_URLS TravelPlaceholderFieldEnum_TravelPlaceholderField = 16
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	TravelPlaceholderFieldEnum_TRACKING_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	TravelPlaceholderFieldEnum_ANDROID_APP_LINK TravelPlaceholderFieldEnum_TravelPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended destination IDs to show
+	// together with this item.
+	TravelPlaceholderFieldEnum_SIMILAR_DESTINATION_IDS TravelPlaceholderFieldEnum_TravelPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	TravelPlaceholderFieldEnum_IOS_APP_LINK TravelPlaceholderFieldEnum_TravelPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	TravelPlaceholderFieldEnum_IOS_APP_STORE_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 21
+)
+
+var TravelPlaceholderFieldEnum_TravelPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DESTINATION_ID",
+	3:  "ORIGIN_ID",
+	4:  "TITLE",
+	5:  "DESTINATION_NAME",
+	6:  "ORIGIN_NAME",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "CATEGORY",
+	13: "CONTEXTUAL_KEYWORDS",
+	14: "DESTINATION_ADDRESS",
+	15: "FINAL_URL",
+	16: "FINAL_MOBILE_URLS",
+	17: "TRACKING_URL",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_DESTINATION_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+
+var TravelPlaceholderFieldEnum_TravelPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"DESTINATION_ID":          2,
+	"ORIGIN_ID":               3,
+	"TITLE":                   4,
+	"DESTINATION_NAME":        5,
+	"ORIGIN_NAME":             6,
+	"PRICE":                   7,
+	"FORMATTED_PRICE":         8,
+	"SALE_PRICE":              9,
+	"FORMATTED_SALE_PRICE":    10,
+	"IMAGE_URL":               11,
+	"CATEGORY":                12,
+	"CONTEXTUAL_KEYWORDS":     13,
+	"DESTINATION_ADDRESS":     14,
+	"FINAL_URL":               15,
+	"FINAL_MOBILE_URLS":       16,
+	"TRACKING_URL":            17,
+	"ANDROID_APP_LINK":        18,
+	"SIMILAR_DESTINATION_IDS": 19,
+	"IOS_APP_LINK":            20,
+	"IOS_APP_STORE_ID":        21,
+}
+
+func (x TravelPlaceholderFieldEnum_TravelPlaceholderField) String() string {
+	return proto.EnumName(TravelPlaceholderFieldEnum_TravelPlaceholderField_name, int32(x))
+}
+
+func (TravelPlaceholderFieldEnum_TravelPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c5525e64a37cd678, []int{0, 0}
+}
+
+// Values for Travel placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type TravelPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TravelPlaceholderFieldEnum) Reset()         { *m = TravelPlaceholderFieldEnum{} }
+func (m *TravelPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*TravelPlaceholderFieldEnum) ProtoMessage()    {}
+func (*TravelPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c5525e64a37cd678, []int{0}
+}
+
+func (m *TravelPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TravelPlaceholderFieldEnum.Merge(m, src)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Size(m)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TravelPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TravelPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.TravelPlaceholderFieldEnum_TravelPlaceholderField", TravelPlaceholderFieldEnum_TravelPlaceholderField_name, TravelPlaceholderFieldEnum_TravelPlaceholderField_value)
+	proto.RegisterType((*TravelPlaceholderFieldEnum)(nil), "google.ads.googleads.v3.enums.TravelPlaceholderFieldEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/travel_placeholder_field.proto", fileDescriptor_c5525e64a37cd678)
+}
+
+var fileDescriptor_c5525e64a37cd678 = []byte{
+	// 524 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x6e, 0xda, 0x30,
+	0x14, 0x1e, 0xb0, 0xfe, 0x60, 0x28, 0xb8, 0x86, 0xae, 0x53, 0xbb, 0x5e, 0xb4, 0x0f, 0x90, 0x5c,
+	0xe4, 0x2e, 0xdb, 0x8d, 0x21, 0x26, 0xb2, 0x08, 0x4e, 0x14, 0x1b, 0xba, 0x4e, 0x48, 0x51, 0xd6,
+	0x64, 0x19, 0x52, 0x48, 0x10, 0xa1, 0x3c, 0xd0, 0x2e, 0xf7, 0x02, 0x7b, 0x87, 0x3d, 0xc0, 0x1e,
+	0x62, 0x57, 0x7b, 0x84, 0xc9, 0x0e, 0x7f, 0x93, 0xba, 0xde, 0x44, 0xe7, 0x9c, 0xef, 0xc7, 0x27,
+	0xf6, 0x07, 0x3e, 0x24, 0x79, 0x9e, 0xa4, 0xb1, 0x1e, 0x46, 0x85, 0x5e, 0x96, 0xb2, 0x5a, 0x1b,
+	0x7a, 0x9c, 0x3d, 0xcd, 0x0b, 0x7d, 0xb5, 0x0c, 0xd7, 0x71, 0x1a, 0x2c, 0xd2, 0xf0, 0x31, 0xfe,
+	0x9a, 0xa7, 0x51, 0xbc, 0x0c, 0xbe, 0xcc, 0xe2, 0x34, 0xd2, 0x16, 0xcb, 0x7c, 0x95, 0xa3, 0x9b,
+	0x52, 0xa2, 0x85, 0x51, 0xa1, 0xed, 0xd4, 0xda, 0xda, 0xd0, 0x94, 0xfa, 0xea, 0xdd, 0xd6, 0x7c,
+	0x31, 0xd3, 0xc3, 0x2c, 0xcb, 0x57, 0xe1, 0x6a, 0x96, 0x67, 0x45, 0x29, 0xbe, 0xfb, 0x55, 0x03,
+	0x57, 0x42, 0xf9, 0x7b, 0x7b, 0xfb, 0x81, 0x74, 0x27, 0xd9, 0xd3, 0xfc, 0xee, 0x47, 0x0d, 0xbc,
+	0x79, 0x1e, 0x46, 0x6d, 0xd0, 0x18, 0x33, 0xee, 0x91, 0x3e, 0x1d, 0x50, 0x62, 0xc1, 0x57, 0xa8,
+	0x01, 0x4e, 0xc6, 0x6c, 0xc8, 0xdc, 0x7b, 0x06, 0x2b, 0x08, 0x81, 0x96, 0x45, 0xb8, 0xa0, 0x0c,
+	0x0b, 0xea, 0xb2, 0x80, 0x5a, 0xb0, 0x8a, 0xce, 0x40, 0xdd, 0xf5, 0xa9, 0x4d, 0x55, 0x5b, 0x43,
+	0x75, 0x70, 0x24, 0xa8, 0x70, 0x08, 0x7c, 0x8d, 0xba, 0x00, 0x1e, 0xb2, 0x19, 0x1e, 0x11, 0x78,
+	0x24, 0x4f, 0xd8, 0xf0, 0xd5, 0xe0, 0x58, 0x2a, 0x3c, 0x9f, 0xf6, 0x09, 0x3c, 0x41, 0x1d, 0xd0,
+	0x1e, 0xb8, 0xfe, 0x08, 0x0b, 0x41, 0xac, 0xa0, 0x1c, 0x9e, 0xa2, 0x16, 0x00, 0x1c, 0x3b, 0x64,
+	0xd3, 0xd7, 0xd1, 0x5b, 0xd0, 0xdd, 0x93, 0x0e, 0x10, 0x20, 0x57, 0xa1, 0x23, 0x6c, 0x93, 0x60,
+	0xec, 0x3b, 0xb0, 0x81, 0x9a, 0xe0, 0xb4, 0x8f, 0x05, 0xb1, 0x5d, 0xff, 0x01, 0x36, 0xd1, 0x25,
+	0xe8, 0xf4, 0x5d, 0x26, 0xc8, 0x47, 0x31, 0xc6, 0x4e, 0x30, 0x24, 0x0f, 0xf7, 0xae, 0x6f, 0x71,
+	0x78, 0x26, 0x81, 0xc3, 0x35, 0xb1, 0x65, 0xf9, 0x84, 0x73, 0xd8, 0x92, 0x76, 0x03, 0xca, 0xb0,
+	0xa3, 0xec, 0xda, 0xe8, 0x02, 0x9c, 0x97, 0xed, 0xc8, 0xed, 0x51, 0x47, 0x1d, 0xc2, 0x21, 0x44,
+	0x10, 0x34, 0x85, 0x8f, 0xfb, 0x43, 0xca, 0x6c, 0x45, 0x3c, 0x97, 0xff, 0x8d, 0x99, 0xe5, 0xbb,
+	0xd4, 0x0a, 0xb0, 0xe7, 0x05, 0x0e, 0x65, 0x43, 0x88, 0xd0, 0x35, 0xb8, 0xe4, 0x74, 0x44, 0x1d,
+	0xec, 0x07, 0xff, 0xde, 0x21, 0x87, 0x1d, 0x69, 0x42, 0x5d, 0xbe, 0xa7, 0x77, 0xa5, 0xc9, 0x76,
+	0xc2, 0x85, 0xeb, 0x13, 0x79, 0xbb, 0x17, 0xbd, 0x3f, 0x15, 0x70, 0xfb, 0x98, 0xcf, 0xb5, 0x17,
+	0xc3, 0xd1, 0xbb, 0x7e, 0xfe, 0x71, 0x3d, 0x99, 0x0d, 0xaf, 0xf2, 0xa9, 0xb7, 0x51, 0x27, 0x79,
+	0x1a, 0x66, 0x89, 0x96, 0x2f, 0x13, 0x3d, 0x89, 0x33, 0x95, 0x9c, 0x6d, 0x50, 0x17, 0xb3, 0xe2,
+	0x3f, 0xb9, 0x7d, 0xaf, 0xbe, 0xdf, 0xaa, 0x35, 0x1b, 0xe3, 0xef, 0xd5, 0x1b, 0xbb, 0xb4, 0xc2,
+	0x51, 0xa1, 0x95, 0xa5, 0xac, 0x26, 0x86, 0x26, 0x73, 0x56, 0xfc, 0xdc, 0xe2, 0x53, 0x1c, 0x15,
+	0xd3, 0x1d, 0x3e, 0x9d, 0x18, 0x53, 0x85, 0xff, 0xae, 0xde, 0x96, 0x43, 0xd3, 0xc4, 0x51, 0x61,
+	0x9a, 0x3b, 0x86, 0x69, 0x4e, 0x0c, 0xd3, 0x54, 0x9c, 0xcf, 0xc7, 0x6a, 0x31, 0xe3, 0x6f, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x1f, 0x98, 0x06, 0xeb, 0x4f, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_interest_taxonomy_type.pb.go b/googleapis/ads/googleads/v3/enums/user_interest_taxonomy_type.pb.go
new file mode 100644
index 0000000..d97161c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_interest_taxonomy_type.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_interest_taxonomy_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing the possible UserInterestTaxonomyTypes.
+type UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType int32
+
+const (
+	// Not specified.
+	UserInterestTaxonomyTypeEnum_UNSPECIFIED UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserInterestTaxonomyTypeEnum_UNKNOWN UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 1
+	// The affinity for this user interest.
+	UserInterestTaxonomyTypeEnum_AFFINITY UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 2
+	// The market for this user interest.
+	UserInterestTaxonomyTypeEnum_IN_MARKET UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 3
+	// Users known to have installed applications in the specified categories.
+	UserInterestTaxonomyTypeEnum_MOBILE_APP_INSTALL_USER UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 4
+	// The geographical location of the interest-based vertical.
+	UserInterestTaxonomyTypeEnum_VERTICAL_GEO UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 5
+	// User interest criteria for new smart phone users.
+	UserInterestTaxonomyTypeEnum_NEW_SMART_PHONE_USER UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 6
+)
+
+var UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AFFINITY",
+	3: "IN_MARKET",
+	4: "MOBILE_APP_INSTALL_USER",
+	5: "VERTICAL_GEO",
+	6: "NEW_SMART_PHONE_USER",
+}
+
+var UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"AFFINITY":                2,
+	"IN_MARKET":               3,
+	"MOBILE_APP_INSTALL_USER": 4,
+	"VERTICAL_GEO":            5,
+	"NEW_SMART_PHONE_USER":    6,
+}
+
+func (x UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType) String() string {
+	return proto.EnumName(UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name, int32(x))
+}
+
+func (UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_75f124a452fd711d, []int{0, 0}
+}
+
+// Message describing a UserInterestTaxonomyType.
+type UserInterestTaxonomyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserInterestTaxonomyTypeEnum) Reset()         { *m = UserInterestTaxonomyTypeEnum{} }
+func (m *UserInterestTaxonomyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserInterestTaxonomyTypeEnum) ProtoMessage()    {}
+func (*UserInterestTaxonomyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_75f124a452fd711d, []int{0}
+}
+
+func (m *UserInterestTaxonomyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Unmarshal(m, b)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterestTaxonomyTypeEnum.Merge(m, src)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Size(m)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterestTaxonomyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterestTaxonomyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType", UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name, UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_value)
+	proto.RegisterType((*UserInterestTaxonomyTypeEnum)(nil), "google.ads.googleads.v3.enums.UserInterestTaxonomyTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_interest_taxonomy_type.proto", fileDescriptor_75f124a452fd711d)
+}
+
+var fileDescriptor_75f124a452fd711d = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x4d, 0x6e, 0xd4, 0x30,
+	0x18, 0x25, 0x29, 0x14, 0x70, 0x8b, 0x88, 0x2c, 0x24, 0x2a, 0xe8, 0x2c, 0xda, 0x03, 0x38, 0x8b,
+	0xec, 0xcc, 0x02, 0x39, 0xc5, 0x33, 0x58, 0xcd, 0x38, 0x51, 0xfe, 0x2a, 0x50, 0x24, 0x2b, 0x10,
+	0x2b, 0x8a, 0xd4, 0xd8, 0x51, 0x9c, 0xa9, 0x98, 0xcb, 0xb0, 0x60, 0xc9, 0x25, 0xd8, 0x73, 0x14,
+	0x96, 0x9c, 0x00, 0x25, 0x99, 0x99, 0xdd, 0xb0, 0xb1, 0x9e, 0xfc, 0x7e, 0x3e, 0xfb, 0x7d, 0xe0,
+	0x7d, 0xad, 0x75, 0x7d, 0x2f, 0xdd, 0xb2, 0x32, 0xee, 0x0c, 0x47, 0xf4, 0xe0, 0xb9, 0x52, 0x6d,
+	0x5a, 0xe3, 0x6e, 0x8c, 0xec, 0x45, 0xa3, 0x06, 0xd9, 0x4b, 0x33, 0x88, 0xa1, 0xfc, 0xa6, 0x95,
+	0x6e, 0xb7, 0x62, 0xd8, 0x76, 0x12, 0x75, 0xbd, 0x1e, 0x34, 0x5c, 0xcc, 0x2e, 0x54, 0x56, 0x06,
+	0x1d, 0x02, 0xd0, 0x83, 0x87, 0xa6, 0x80, 0x37, 0x97, 0xfb, 0xfc, 0xae, 0x71, 0x4b, 0xa5, 0xf4,
+	0x50, 0x0e, 0x8d, 0x56, 0x66, 0x36, 0x5f, 0xff, 0xb2, 0xc0, 0x65, 0x66, 0x64, 0xcf, 0x76, 0x13,
+	0xd2, 0xdd, 0x80, 0x74, 0xdb, 0x49, 0xaa, 0x36, 0xed, 0xf5, 0x77, 0x0b, 0x5c, 0x1c, 0x13, 0xc0,
+	0x97, 0xe0, 0x2c, 0xe3, 0x49, 0x44, 0x6f, 0xd8, 0x92, 0xd1, 0x0f, 0xce, 0x23, 0x78, 0x06, 0x9e,
+	0x66, 0xfc, 0x96, 0x87, 0x77, 0xdc, 0xb1, 0xe0, 0x39, 0x78, 0x46, 0x96, 0x4b, 0xc6, 0x59, 0xfa,
+	0xc9, 0xb1, 0xe1, 0x0b, 0xf0, 0x9c, 0x71, 0xb1, 0x26, 0xf1, 0x2d, 0x4d, 0x9d, 0x13, 0xf8, 0x16,
+	0xbc, 0x5e, 0x87, 0x3e, 0x0b, 0xa8, 0x20, 0x51, 0x24, 0x18, 0x4f, 0x52, 0x12, 0x04, 0x22, 0x4b,
+	0x68, 0xec, 0x3c, 0x86, 0x0e, 0x38, 0xcf, 0x69, 0x9c, 0xb2, 0x1b, 0x12, 0x88, 0x15, 0x0d, 0x9d,
+	0x27, 0xf0, 0x02, 0xbc, 0xe2, 0xf4, 0x4e, 0x24, 0x6b, 0x12, 0xa7, 0x22, 0xfa, 0x18, 0x72, 0x3a,
+	0x6b, 0x4f, 0xfd, 0xbf, 0x16, 0xb8, 0xfa, 0xaa, 0x5b, 0xf4, 0xdf, 0x16, 0xfc, 0xc5, 0xb1, 0x3f,
+	0x44, 0x63, 0x0d, 0x91, 0xf5, 0xd9, 0xdf, 0xf9, 0x6b, 0x7d, 0x5f, 0xaa, 0x1a, 0xe9, 0xbe, 0x76,
+	0x6b, 0xa9, 0xa6, 0x92, 0xf6, 0x6b, 0xe9, 0x1a, 0x73, 0x64, 0x4b, 0xef, 0xa6, 0xf3, 0x87, 0x7d,
+	0xb2, 0x22, 0xe4, 0xa7, 0xbd, 0x58, 0xcd, 0x51, 0xa4, 0x32, 0x68, 0x86, 0x23, 0xca, 0x3d, 0x34,
+	0x16, 0x6a, 0x7e, 0xef, 0xf9, 0x82, 0x54, 0xa6, 0x38, 0xf0, 0x45, 0xee, 0x15, 0x13, 0xff, 0xc7,
+	0xbe, 0x9a, 0x2f, 0x31, 0x26, 0x95, 0xc1, 0xf8, 0xa0, 0xc0, 0x38, 0xf7, 0x30, 0x9e, 0x34, 0x5f,
+	0x4e, 0xa7, 0x87, 0x79, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x9d, 0x43, 0x8f, 0x3d, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_access_status.pb.go b/googleapis/ads/googleads/v3/enums/user_list_access_status.pb.go
new file mode 100644
index 0000000..7e0246f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_access_status.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_access_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible user list access statuses.
+type UserListAccessStatusEnum_UserListAccessStatus int32
+
+const (
+	// Not specified.
+	UserListAccessStatusEnum_UNSPECIFIED UserListAccessStatusEnum_UserListAccessStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListAccessStatusEnum_UNKNOWN UserListAccessStatusEnum_UserListAccessStatus = 1
+	// The access is enabled.
+	UserListAccessStatusEnum_ENABLED UserListAccessStatusEnum_UserListAccessStatus = 2
+	// The access is disabled.
+	UserListAccessStatusEnum_DISABLED UserListAccessStatusEnum_UserListAccessStatus = 3
+)
+
+var UserListAccessStatusEnum_UserListAccessStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "DISABLED",
+}
+
+var UserListAccessStatusEnum_UserListAccessStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"DISABLED":    3,
+}
+
+func (x UserListAccessStatusEnum_UserListAccessStatus) String() string {
+	return proto.EnumName(UserListAccessStatusEnum_UserListAccessStatus_name, int32(x))
+}
+
+func (UserListAccessStatusEnum_UserListAccessStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4c9f8c364837617, []int{0, 0}
+}
+
+// Indicates if this client still has access to the list.
+type UserListAccessStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListAccessStatusEnum) Reset()         { *m = UserListAccessStatusEnum{} }
+func (m *UserListAccessStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListAccessStatusEnum) ProtoMessage()    {}
+func (*UserListAccessStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4c9f8c364837617, []int{0}
+}
+
+func (m *UserListAccessStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListAccessStatusEnum.Unmarshal(m, b)
+}
+func (m *UserListAccessStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListAccessStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListAccessStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListAccessStatusEnum.Merge(m, src)
+}
+func (m *UserListAccessStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListAccessStatusEnum.Size(m)
+}
+func (m *UserListAccessStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListAccessStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListAccessStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListAccessStatusEnum_UserListAccessStatus", UserListAccessStatusEnum_UserListAccessStatus_name, UserListAccessStatusEnum_UserListAccessStatus_value)
+	proto.RegisterType((*UserListAccessStatusEnum)(nil), "google.ads.googleads.v3.enums.UserListAccessStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_access_status.proto", fileDescriptor_c4c9f8c364837617)
+}
+
+var fileDescriptor_c4c9f8c364837617 = []byte{
+	// 309 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4a, 0x03, 0x31,
+	0x10, 0xb5, 0x5b, 0x50, 0x49, 0x05, 0xcb, 0xe2, 0x41, 0xc5, 0x1e, 0xda, 0x0f, 0x48, 0x0e, 0xb9,
+	0xa5, 0xa7, 0xac, 0x5d, 0x4b, 0xb1, 0x6c, 0x0b, 0xa5, 0x15, 0x64, 0xa1, 0xc4, 0x6e, 0x08, 0x8b,
+	0x6d, 0x52, 0x76, 0xb2, 0xfd, 0x20, 0x8f, 0x7e, 0x8a, 0x9f, 0xe2, 0xc1, 0x6f, 0x90, 0x4d, 0xba,
+	0x7b, 0xaa, 0x5e, 0xc2, 0x9b, 0xbc, 0x79, 0x6f, 0xde, 0x0c, 0x1a, 0x2a, 0x63, 0xd4, 0x56, 0x12,
+	0x91, 0x01, 0xf1, 0xb0, 0x42, 0x07, 0x4a, 0xa4, 0x2e, 0x77, 0x40, 0x4a, 0x90, 0xc5, 0x7a, 0x9b,
+	0x83, 0x5d, 0x8b, 0xcd, 0x46, 0x02, 0xac, 0xc1, 0x0a, 0x5b, 0x02, 0xde, 0x17, 0xc6, 0x9a, 0xb0,
+	0xe7, 0x15, 0x58, 0x64, 0x80, 0x1b, 0x31, 0x3e, 0x50, 0xec, 0xc4, 0xf7, 0x0f, 0xb5, 0xf7, 0x3e,
+	0x27, 0x42, 0x6b, 0x63, 0x85, 0xcd, 0x8d, 0x3e, 0x8a, 0x07, 0xef, 0xe8, 0x76, 0x09, 0xb2, 0x98,
+	0xe6, 0x60, 0xb9, 0xf3, 0x5e, 0x38, 0xeb, 0x58, 0x97, 0xbb, 0xc1, 0x0c, 0xdd, 0x9c, 0xe2, 0xc2,
+	0x6b, 0xd4, 0x59, 0x26, 0x8b, 0x79, 0xfc, 0x38, 0x79, 0x9a, 0xc4, 0xa3, 0xee, 0x59, 0xd8, 0x41,
+	0x17, 0xcb, 0xe4, 0x39, 0x99, 0xbd, 0x24, 0xdd, 0x56, 0x55, 0xc4, 0x09, 0x8f, 0xa6, 0xf1, 0xa8,
+	0x1b, 0x84, 0x57, 0xe8, 0x72, 0x34, 0x59, 0xf8, 0xaa, 0x1d, 0xfd, 0xb4, 0x50, 0x7f, 0x63, 0x76,
+	0xf8, 0xdf, 0xc0, 0xd1, 0xdd, 0xa9, 0xa1, 0xf3, 0x2a, 0xed, 0xbc, 0xf5, 0x1a, 0x1d, 0xb5, 0xca,
+	0x6c, 0x85, 0x56, 0xd8, 0x14, 0x8a, 0x28, 0xa9, 0xdd, 0x2e, 0xf5, 0xe5, 0xf6, 0x39, 0xfc, 0x71,
+	0xc8, 0xa1, 0x7b, 0x3f, 0x82, 0xf6, 0x98, 0xf3, 0xcf, 0xa0, 0x37, 0xf6, 0x56, 0x3c, 0x03, 0xec,
+	0x61, 0x85, 0x56, 0x14, 0x57, 0xcb, 0xc3, 0x57, 0xcd, 0xa7, 0x3c, 0x83, 0xb4, 0xe1, 0xd3, 0x15,
+	0x4d, 0x1d, 0xff, 0x1d, 0xf4, 0xfd, 0x27, 0x63, 0x3c, 0x03, 0xc6, 0x9a, 0x0e, 0xc6, 0x56, 0x94,
+	0x31, 0xd7, 0xf3, 0x76, 0xee, 0x82, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0x20, 0xb6,
+	0xbb, 0xe0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_closing_reason.pb.go b/googleapis/ads/googleads/v3/enums/user_list_closing_reason.pb.go
new file mode 100644
index 0000000..f7982c6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_closing_reason.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_closing_reason.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list closing reasons.
+type UserListClosingReasonEnum_UserListClosingReason int32
+
+const (
+	// Not specified.
+	UserListClosingReasonEnum_UNSPECIFIED UserListClosingReasonEnum_UserListClosingReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListClosingReasonEnum_UNKNOWN UserListClosingReasonEnum_UserListClosingReason = 1
+	// The userlist was closed because of not being used for over one year.
+	UserListClosingReasonEnum_UNUSED UserListClosingReasonEnum_UserListClosingReason = 2
+)
+
+var UserListClosingReasonEnum_UserListClosingReason_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNUSED",
+}
+
+var UserListClosingReasonEnum_UserListClosingReason_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UNUSED":      2,
+}
+
+func (x UserListClosingReasonEnum_UserListClosingReason) String() string {
+	return proto.EnumName(UserListClosingReasonEnum_UserListClosingReason_name, int32(x))
+}
+
+func (UserListClosingReasonEnum_UserListClosingReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_77005016633d6157, []int{0, 0}
+}
+
+// Indicates the reason why the userlist was closed.
+// This enum is only used when a list is auto-closed by the system.
+type UserListClosingReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListClosingReasonEnum) Reset()         { *m = UserListClosingReasonEnum{} }
+func (m *UserListClosingReasonEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListClosingReasonEnum) ProtoMessage()    {}
+func (*UserListClosingReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_77005016633d6157, []int{0}
+}
+
+func (m *UserListClosingReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListClosingReasonEnum.Unmarshal(m, b)
+}
+func (m *UserListClosingReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListClosingReasonEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListClosingReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListClosingReasonEnum.Merge(m, src)
+}
+func (m *UserListClosingReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListClosingReasonEnum.Size(m)
+}
+func (m *UserListClosingReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListClosingReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListClosingReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListClosingReasonEnum_UserListClosingReason", UserListClosingReasonEnum_UserListClosingReason_name, UserListClosingReasonEnum_UserListClosingReason_value)
+	proto.RegisterType((*UserListClosingReasonEnum)(nil), "google.ads.googleads.v3.enums.UserListClosingReasonEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_closing_reason.proto", fileDescriptor_77005016633d6157)
+}
+
+var fileDescriptor_77005016633d6157 = []byte{
+	// 304 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xfb, 0x30,
+	0x18, 0xc6, 0xff, 0xeb, 0x1f, 0x26, 0x64, 0x07, 0x47, 0xc1, 0x83, 0xc3, 0x1d, 0xb6, 0x0f, 0x90,
+	0x1c, 0x72, 0x8b, 0x5e, 0xb2, 0xad, 0x8e, 0xa1, 0xd4, 0xe1, 0xe8, 0x04, 0x29, 0x8e, 0xb8, 0x86,
+	0x10, 0xe8, 0x92, 0xd2, 0xb7, 0xdd, 0x07, 0xf2, 0xe8, 0x47, 0xf1, 0xa3, 0x78, 0xf1, 0x2b, 0x48,
+	0x13, 0xdb, 0xd3, 0xf4, 0x12, 0x1e, 0xf2, 0xbc, 0xbf, 0x27, 0x4f, 0x5e, 0x74, 0xa3, 0xac, 0x55,
+	0xb9, 0x24, 0x22, 0x03, 0xe2, 0x65, 0xa3, 0x8e, 0x94, 0x48, 0x53, 0x1f, 0x80, 0xd4, 0x20, 0xcb,
+	0x5d, 0xae, 0xa1, 0xda, 0xed, 0x73, 0x0b, 0xda, 0xa8, 0x5d, 0x29, 0x05, 0x58, 0x83, 0x8b, 0xd2,
+	0x56, 0x36, 0x1c, 0x7b, 0x04, 0x8b, 0x0c, 0x70, 0x47, 0xe3, 0x23, 0xc5, 0x8e, 0x1e, 0x5d, 0xb5,
+	0xe1, 0x85, 0x26, 0xc2, 0x18, 0x5b, 0x89, 0x4a, 0x5b, 0x03, 0x1e, 0x9e, 0xbe, 0xa0, 0xcb, 0x04,
+	0x64, 0x79, 0xaf, 0xa1, 0x9a, 0xfb, 0xf0, 0x47, 0x97, 0x1d, 0x99, 0xfa, 0x30, 0xe5, 0xe8, 0xe2,
+	0xa4, 0x19, 0x9e, 0xa3, 0x41, 0x12, 0x6f, 0xd6, 0xd1, 0x7c, 0x75, 0xbb, 0x8a, 0x16, 0xc3, 0x7f,
+	0xe1, 0x00, 0x9d, 0x25, 0xf1, 0x5d, 0xfc, 0xf0, 0x14, 0x0f, 0x7b, 0x21, 0x42, 0xfd, 0x24, 0x4e,
+	0x36, 0xd1, 0x62, 0x18, 0xcc, 0xbe, 0x7a, 0x68, 0xb2, 0xb7, 0x07, 0xfc, 0x67, 0xc7, 0xd9, 0xe8,
+	0xe4, 0x33, 0xeb, 0xa6, 0xe1, 0xba, 0xf7, 0x3c, 0xfb, 0x81, 0x95, 0xcd, 0x85, 0x51, 0xd8, 0x96,
+	0x8a, 0x28, 0x69, 0x5c, 0xff, 0x76, 0x5d, 0x85, 0x86, 0x5f, 0xb6, 0x77, 0xed, 0xce, 0xb7, 0xe0,
+	0xff, 0x92, 0xf3, 0xf7, 0x60, 0xbc, 0xf4, 0x51, 0x3c, 0x03, 0xec, 0x65, 0xa3, 0xb6, 0x14, 0x37,
+	0xff, 0x85, 0x8f, 0xd6, 0x4f, 0x79, 0x06, 0x69, 0xe7, 0xa7, 0x5b, 0x9a, 0x3a, 0xff, 0x33, 0x98,
+	0xf8, 0x4b, 0xc6, 0x78, 0x06, 0x8c, 0x75, 0x13, 0x8c, 0x6d, 0x29, 0x63, 0x6e, 0xe6, 0xb5, 0xef,
+	0x8a, 0xd1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xb3, 0xf1, 0x36, 0xd5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_combined_rule_operator.pb.go b/googleapis/ads/googleads/v3/enums/user_list_combined_rule_operator.pb.go
new file mode 100644
index 0000000..cab11cb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_combined_rule_operator.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_combined_rule_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list combined rule operators.
+type UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator int32
+
+const (
+	// Not specified.
+	UserListCombinedRuleOperatorEnum_UNSPECIFIED UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListCombinedRuleOperatorEnum_UNKNOWN UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator = 1
+	// A AND B.
+	UserListCombinedRuleOperatorEnum_AND UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator = 2
+	// A AND NOT B.
+	UserListCombinedRuleOperatorEnum_AND_NOT UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator = 3
+)
+
+var UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AND",
+	3: "AND_NOT",
+}
+
+var UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AND":         2,
+	"AND_NOT":     3,
+}
+
+func (x UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator) String() string {
+	return proto.EnumName(UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator_name, int32(x))
+}
+
+func (UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a88176faa8d2b974, []int{0, 0}
+}
+
+// Logical operator connecting two rules.
+type UserListCombinedRuleOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListCombinedRuleOperatorEnum) Reset()         { *m = UserListCombinedRuleOperatorEnum{} }
+func (m *UserListCombinedRuleOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListCombinedRuleOperatorEnum) ProtoMessage()    {}
+func (*UserListCombinedRuleOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a88176faa8d2b974, []int{0}
+}
+
+func (m *UserListCombinedRuleOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListCombinedRuleOperatorEnum.Unmarshal(m, b)
+}
+func (m *UserListCombinedRuleOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListCombinedRuleOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListCombinedRuleOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListCombinedRuleOperatorEnum.Merge(m, src)
+}
+func (m *UserListCombinedRuleOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListCombinedRuleOperatorEnum.Size(m)
+}
+func (m *UserListCombinedRuleOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListCombinedRuleOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListCombinedRuleOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator", UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator_name, UserListCombinedRuleOperatorEnum_UserListCombinedRuleOperator_value)
+	proto.RegisterType((*UserListCombinedRuleOperatorEnum)(nil), "google.ads.googleads.v3.enums.UserListCombinedRuleOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_combined_rule_operator.proto", fileDescriptor_a88176faa8d2b974)
+}
+
+var fileDescriptor_a88176faa8d2b974 = []byte{
+	// 317 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x6a, 0xc2, 0x40,
+	0x14, 0xac, 0x11, 0x2a, 0xac, 0x87, 0x86, 0x1c, 0x8b, 0x42, 0xf5, 0x03, 0x36, 0x87, 0xdc, 0xb6,
+	0xa7, 0xd5, 0x58, 0x91, 0x96, 0x55, 0x6c, 0xb5, 0x50, 0x02, 0x21, 0x9a, 0x25, 0x04, 0x92, 0x7d,
+	0x61, 0x5f, 0xe2, 0x07, 0xf5, 0xd8, 0x4f, 0xe9, 0xa7, 0xf4, 0x03, 0x7a, 0x2e, 0xd9, 0x55, 0x6f,
+	0xcd, 0x65, 0x19, 0x76, 0xe6, 0xcd, 0xbc, 0x37, 0x24, 0xcc, 0x00, 0xb2, 0x42, 0xfa, 0x49, 0x8a,
+	0xbe, 0x85, 0x2d, 0x3a, 0x05, 0xbe, 0x54, 0x4d, 0x89, 0x7e, 0x83, 0x52, 0xc7, 0x45, 0x8e, 0x75,
+	0x7c, 0x84, 0xf2, 0x90, 0x2b, 0x99, 0xc6, 0xba, 0x29, 0x64, 0x0c, 0x95, 0xd4, 0x49, 0x0d, 0x9a,
+	0x56, 0x1a, 0x6a, 0xf0, 0xc6, 0x76, 0x94, 0x26, 0x29, 0xd2, 0xab, 0x0b, 0x3d, 0x05, 0xd4, 0xb8,
+	0xdc, 0x8f, 0x2e, 0x21, 0x55, 0xee, 0x27, 0x4a, 0x41, 0x9d, 0xd4, 0x39, 0x28, 0xb4, 0xc3, 0xd3,
+	0x13, 0x79, 0xd8, 0xa1, 0xd4, 0x2f, 0x39, 0xd6, 0xf3, 0x73, 0xc8, 0xb6, 0x29, 0xe4, 0xfa, 0x1c,
+	0xb1, 0x50, 0x4d, 0x39, 0xdd, 0x92, 0x51, 0x97, 0xc6, 0xbb, 0x23, 0xc3, 0x9d, 0x78, 0xdd, 0x2c,
+	0xe6, 0xab, 0xa7, 0xd5, 0x22, 0x74, 0x6f, 0xbc, 0x21, 0x19, 0xec, 0xc4, 0xb3, 0x58, 0xbf, 0x0b,
+	0xb7, 0xe7, 0x0d, 0x48, 0x9f, 0x8b, 0xd0, 0x75, 0xda, 0x5f, 0x2e, 0xc2, 0x58, 0xac, 0xdf, 0xdc,
+	0xfe, 0xec, 0xb7, 0x47, 0x26, 0x47, 0x28, 0x69, 0xe7, 0xee, 0xb3, 0x49, 0x57, 0xee, 0xa6, 0x3d,
+	0x60, 0xd3, 0xfb, 0x98, 0x9d, 0x3d, 0x32, 0x28, 0x12, 0x95, 0x51, 0xd0, 0x99, 0x9f, 0x49, 0x65,
+	0xce, 0xbb, 0xb4, 0x5a, 0xe5, 0xf8, 0x4f, 0xc9, 0x8f, 0xe6, 0xfd, 0x74, 0xfa, 0x4b, 0xce, 0xbf,
+	0x9c, 0xf1, 0xd2, 0x5a, 0xf1, 0x14, 0xa9, 0x85, 0x2d, 0xda, 0x07, 0xb4, 0xed, 0x01, 0xbf, 0x2f,
+	0x7c, 0xc4, 0x53, 0x8c, 0xae, 0x7c, 0xb4, 0x0f, 0x22, 0xc3, 0xff, 0x38, 0x13, 0xfb, 0xc9, 0x18,
+	0x4f, 0x91, 0xb1, 0xab, 0x82, 0xb1, 0x7d, 0xc0, 0x98, 0xd1, 0x1c, 0x6e, 0xcd, 0x62, 0xc1, 0x5f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x54, 0x69, 0x22, 0x93, 0xfc, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_crm_data_source_type.pb.go b/googleapis/ads/googleads/v3/enums/user_list_crm_data_source_type.pb.go
new file mode 100644
index 0000000..aa32f94
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_crm_data_source_type.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_crm_data_source_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list crm data source type.
+type UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType int32
+
+const (
+	// Not specified.
+	UserListCrmDataSourceTypeEnum_UNSPECIFIED UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListCrmDataSourceTypeEnum_UNKNOWN UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 1
+	// The uploaded data is first-party data.
+	UserListCrmDataSourceTypeEnum_FIRST_PARTY UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 2
+	// The uploaded data is from a third-party credit bureau.
+	UserListCrmDataSourceTypeEnum_THIRD_PARTY_CREDIT_BUREAU UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 3
+	// The uploaded data is from a third-party voter file.
+	UserListCrmDataSourceTypeEnum_THIRD_PARTY_VOTER_FILE UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 4
+)
+
+var UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FIRST_PARTY",
+	3: "THIRD_PARTY_CREDIT_BUREAU",
+	4: "THIRD_PARTY_VOTER_FILE",
+}
+
+var UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"FIRST_PARTY":               2,
+	"THIRD_PARTY_CREDIT_BUREAU": 3,
+	"THIRD_PARTY_VOTER_FILE":    4,
+}
+
+func (x UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType) String() string {
+	return proto.EnumName(UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name, int32(x))
+}
+
+func (UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_de5941dcc9ec4be9, []int{0, 0}
+}
+
+// Indicates source of Crm upload data.
+type UserListCrmDataSourceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListCrmDataSourceTypeEnum) Reset()         { *m = UserListCrmDataSourceTypeEnum{} }
+func (m *UserListCrmDataSourceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListCrmDataSourceTypeEnum) ProtoMessage()    {}
+func (*UserListCrmDataSourceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_de5941dcc9ec4be9, []int{0}
+}
+
+func (m *UserListCrmDataSourceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Unmarshal(m, b)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListCrmDataSourceTypeEnum.Merge(m, src)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Size(m)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListCrmDataSourceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListCrmDataSourceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType", UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name, UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_value)
+	proto.RegisterType((*UserListCrmDataSourceTypeEnum)(nil), "google.ads.googleads.v3.enums.UserListCrmDataSourceTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_crm_data_source_type.proto", fileDescriptor_de5941dcc9ec4be9)
+}
+
+var fileDescriptor_de5941dcc9ec4be9 = []byte{
+	// 360 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x41, 0x6a, 0x83, 0x40,
+	0x14, 0xad, 0xa6, 0xb4, 0x30, 0x59, 0x54, 0x5c, 0x14, 0x12, 0x6a, 0x21, 0x39, 0xc0, 0xb8, 0x70,
+	0x37, 0x5d, 0x69, 0x34, 0xa9, 0x34, 0x18, 0x31, 0x6a, 0x69, 0x11, 0x86, 0x69, 0x1c, 0x44, 0x88,
+	0x8e, 0x38, 0x63, 0x20, 0x07, 0xe8, 0x45, 0xba, 0x29, 0xf4, 0x28, 0x3d, 0x4a, 0xb7, 0xbd, 0x40,
+	0x51, 0x9b, 0xd0, 0x4d, 0xba, 0x19, 0x1e, 0xf3, 0xde, 0x7f, 0xff, 0xff, 0xf7, 0x81, 0x95, 0x31,
+	0x96, 0x6d, 0xa9, 0x4e, 0x52, 0xae, 0xf7, 0xb0, 0x45, 0x3b, 0x43, 0xa7, 0x65, 0x53, 0x70, 0xbd,
+	0xe1, 0xb4, 0xc6, 0xdb, 0x9c, 0x0b, 0xbc, 0xa9, 0x0b, 0x9c, 0x12, 0x41, 0x30, 0x67, 0x4d, 0xbd,
+	0xa1, 0x58, 0xec, 0x2b, 0x0a, 0xab, 0x9a, 0x09, 0xa6, 0x6a, 0x7d, 0x21, 0x24, 0x29, 0x87, 0x47,
+	0x0f, 0xb8, 0x33, 0x60, 0xe7, 0x31, 0xbe, 0x39, 0xb4, 0xa8, 0x72, 0x9d, 0x94, 0x25, 0x13, 0x44,
+	0xe4, 0xac, 0xe4, 0x7d, 0xf1, 0xf4, 0x5d, 0x02, 0x5a, 0xc4, 0x69, 0xbd, 0xcc, 0xb9, 0x98, 0xd5,
+	0x85, 0x4d, 0x04, 0x59, 0x77, 0x1d, 0xc2, 0x7d, 0x45, 0x9d, 0xb2, 0x29, 0xa6, 0xaf, 0x12, 0x18,
+	0x9d, 0x54, 0xa8, 0x57, 0x60, 0x18, 0x79, 0x6b, 0xdf, 0x99, 0xb9, 0x73, 0xd7, 0xb1, 0x95, 0x33,
+	0x75, 0x08, 0x2e, 0x23, 0xef, 0xc1, 0x5b, 0x3d, 0x7a, 0x8a, 0xd4, 0xb2, 0x73, 0x37, 0x58, 0x87,
+	0xd8, 0x37, 0x83, 0xf0, 0x49, 0x91, 0x55, 0x0d, 0x8c, 0xc2, 0x7b, 0x37, 0xb0, 0xfb, 0x0f, 0x3c,
+	0x0b, 0x1c, 0xdb, 0x0d, 0xb1, 0x15, 0x05, 0x8e, 0x19, 0x29, 0x03, 0x75, 0x0c, 0xae, 0xff, 0xd2,
+	0xf1, 0x2a, 0x74, 0x02, 0x3c, 0x77, 0x97, 0x8e, 0x72, 0x6e, 0x7d, 0x4b, 0x60, 0xb2, 0x61, 0x05,
+	0xfc, 0x77, 0x5b, 0xeb, 0xf6, 0xe4, 0xa8, 0x7e, 0xbb, 0xaf, 0x2f, 0x3d, 0xff, 0x46, 0x0e, 0x33,
+	0xb6, 0x25, 0x65, 0x06, 0x59, 0x9d, 0xe9, 0x19, 0x2d, 0xbb, 0x34, 0x0e, 0x27, 0xa8, 0x72, 0x7e,
+	0xe2, 0x22, 0x77, 0xdd, 0xfb, 0x26, 0x0f, 0x16, 0xa6, 0xf9, 0x21, 0x6b, 0x8b, 0xde, 0xca, 0x4c,
+	0x39, 0xec, 0x61, 0x8b, 0x62, 0x03, 0xb6, 0xc1, 0xf1, 0xcf, 0x03, 0x9f, 0x98, 0x29, 0x4f, 0x8e,
+	0x7c, 0x12, 0x1b, 0x49, 0xc7, 0x7f, 0xc9, 0x93, 0xfe, 0x13, 0x21, 0x33, 0xe5, 0x08, 0x1d, 0x15,
+	0x08, 0xc5, 0x06, 0x42, 0x9d, 0xe6, 0xe5, 0xa2, 0x1b, 0xcc, 0xf8, 0x09, 0x00, 0x00, 0xff, 0xff,
+	0xd1, 0x50, 0xda, 0x2a, 0x29, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_date_rule_item_operator.pb.go b/googleapis/ads/googleads/v3/enums/user_list_date_rule_item_operator.pb.go
new file mode 100644
index 0000000..506c043
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_date_rule_item_operator.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_date_rule_item_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list date rule item operators.
+type UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator int32
+
+const (
+	// Not specified.
+	UserListDateRuleItemOperatorEnum_UNSPECIFIED UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListDateRuleItemOperatorEnum_UNKNOWN UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 1
+	// Equals.
+	UserListDateRuleItemOperatorEnum_EQUALS UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 2
+	// Not Equals.
+	UserListDateRuleItemOperatorEnum_NOT_EQUALS UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 3
+	// Before.
+	UserListDateRuleItemOperatorEnum_BEFORE UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 4
+	// After.
+	UserListDateRuleItemOperatorEnum_AFTER UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator = 5
+)
+
+var UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EQUALS",
+	3: "NOT_EQUALS",
+	4: "BEFORE",
+	5: "AFTER",
+}
+
+var UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EQUALS":      2,
+	"NOT_EQUALS":  3,
+	"BEFORE":      4,
+	"AFTER":       5,
+}
+
+func (x UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator) String() string {
+	return proto.EnumName(UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator_name, int32(x))
+}
+
+func (UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_37e7b607763ee2a2, []int{0, 0}
+}
+
+// Supported rule operator for date type.
+type UserListDateRuleItemOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListDateRuleItemOperatorEnum) Reset()         { *m = UserListDateRuleItemOperatorEnum{} }
+func (m *UserListDateRuleItemOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListDateRuleItemOperatorEnum) ProtoMessage()    {}
+func (*UserListDateRuleItemOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37e7b607763ee2a2, []int{0}
+}
+
+func (m *UserListDateRuleItemOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListDateRuleItemOperatorEnum.Unmarshal(m, b)
+}
+func (m *UserListDateRuleItemOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListDateRuleItemOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListDateRuleItemOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListDateRuleItemOperatorEnum.Merge(m, src)
+}
+func (m *UserListDateRuleItemOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListDateRuleItemOperatorEnum.Size(m)
+}
+func (m *UserListDateRuleItemOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListDateRuleItemOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListDateRuleItemOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator", UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator_name, UserListDateRuleItemOperatorEnum_UserListDateRuleItemOperator_value)
+	proto.RegisterType((*UserListDateRuleItemOperatorEnum)(nil), "google.ads.googleads.v3.enums.UserListDateRuleItemOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_date_rule_item_operator.proto", fileDescriptor_37e7b607763ee2a2)
+}
+
+var fileDescriptor_37e7b607763ee2a2 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xd1, 0x4e, 0x83, 0x30,
+	0x14, 0x15, 0xe6, 0x66, 0xec, 0x12, 0x25, 0x3c, 0x9a, 0x2d, 0x71, 0xfb, 0x80, 0xf2, 0xc0, 0x5b,
+	0x7d, 0x2a, 0xae, 0x5b, 0x16, 0x17, 0x98, 0xdb, 0x98, 0x89, 0x21, 0x21, 0x55, 0x1a, 0x42, 0x02,
+	0x2d, 0x69, 0xcb, 0x7e, 0xc4, 0x3f, 0xf0, 0xd1, 0x4f, 0xf1, 0x53, 0xfc, 0x00, 0x9f, 0x0d, 0xb0,
+	0xed, 0x4d, 0x5e, 0x9a, 0xd3, 0x9e, 0x73, 0xcf, 0xbd, 0xe7, 0x16, 0x90, 0x54, 0x88, 0x34, 0x67,
+	0x0e, 0x4d, 0x94, 0xd3, 0xc2, 0x1a, 0x1d, 0x5c, 0x87, 0xf1, 0xaa, 0x50, 0x4e, 0xa5, 0x98, 0x8c,
+	0xf3, 0x4c, 0xe9, 0x38, 0xa1, 0x9a, 0xc5, 0xb2, 0xca, 0x59, 0x9c, 0x69, 0x56, 0xc4, 0xa2, 0x64,
+	0x92, 0x6a, 0x21, 0x61, 0x29, 0x85, 0x16, 0xf6, 0xb8, 0xad, 0x85, 0x34, 0x51, 0xf0, 0x6c, 0x03,
+	0x0f, 0x2e, 0x6c, 0x6c, 0xee, 0x46, 0xa7, 0x2e, 0x65, 0xe6, 0x50, 0xce, 0x85, 0xa6, 0x3a, 0x13,
+	0x5c, 0xb5, 0xc5, 0xd3, 0x0f, 0x03, 0xdc, 0x87, 0x8a, 0xc9, 0x55, 0xa6, 0xf4, 0x8c, 0x6a, 0xb6,
+	0xa9, 0x72, 0xb6, 0xd4, 0xac, 0x08, 0x8e, 0x3d, 0x08, 0xaf, 0x8a, 0xa9, 0x00, 0xa3, 0x2e, 0x8d,
+	0x7d, 0x0b, 0x86, 0xa1, 0xbf, 0x5d, 0x93, 0xc7, 0xe5, 0x7c, 0x49, 0x66, 0xd6, 0x85, 0x3d, 0x04,
+	0x57, 0xa1, 0xff, 0xe4, 0x07, 0x2f, 0xbe, 0x65, 0xd8, 0x00, 0x0c, 0xc8, 0x73, 0x88, 0x57, 0x5b,
+	0xcb, 0xb4, 0x6f, 0x00, 0xf0, 0x83, 0x5d, 0x7c, 0xbc, 0xf7, 0x6a, 0xce, 0x23, 0xf3, 0x60, 0x43,
+	0xac, 0x4b, 0xfb, 0x1a, 0xf4, 0xf1, 0x7c, 0x47, 0x36, 0x56, 0xdf, 0xfb, 0x35, 0xc0, 0xe4, 0x5d,
+	0x14, 0xb0, 0x33, 0x99, 0x37, 0xe9, 0x1a, 0x6a, 0x5d, 0xc7, 0x5b, 0x1b, 0xaf, 0xde, 0xd1, 0x23,
+	0x15, 0x39, 0xe5, 0x29, 0x14, 0x32, 0x75, 0x52, 0xc6, 0x9b, 0xf0, 0xa7, 0xa5, 0x97, 0x99, 0xfa,
+	0xe7, 0x0f, 0x1e, 0x9a, 0xf3, 0xd3, 0xec, 0x2d, 0x30, 0xfe, 0x32, 0xc7, 0x8b, 0xd6, 0x0a, 0x27,
+	0x0a, 0xb6, 0xb0, 0x46, 0x7b, 0x17, 0xd6, 0x4b, 0x52, 0xdf, 0x27, 0x3e, 0xc2, 0x89, 0x8a, 0xce,
+	0x7c, 0xb4, 0x77, 0xa3, 0x86, 0xff, 0x31, 0x27, 0xed, 0x23, 0x42, 0x38, 0x51, 0x08, 0x9d, 0x15,
+	0x08, 0xed, 0x5d, 0x84, 0x1a, 0xcd, 0xdb, 0xa0, 0x19, 0xcc, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff,
+	0xee, 0x52, 0xc4, 0xc4, 0x1b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_logical_rule_operator.pb.go b/googleapis/ads/googleads/v3/enums/user_list_logical_rule_operator.pb.go
new file mode 100644
index 0000000..4d08cea
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_logical_rule_operator.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_logical_rule_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list logical rule operators.
+type UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator int32
+
+const (
+	// Not specified.
+	UserListLogicalRuleOperatorEnum_UNSPECIFIED UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListLogicalRuleOperatorEnum_UNKNOWN UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator = 1
+	// And - all of the operands.
+	UserListLogicalRuleOperatorEnum_ALL UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator = 2
+	// Or - at least one of the operands.
+	UserListLogicalRuleOperatorEnum_ANY UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator = 3
+	// Not - none of the operands.
+	UserListLogicalRuleOperatorEnum_NONE UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator = 4
+)
+
+var UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL",
+	3: "ANY",
+	4: "NONE",
+}
+
+var UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ALL":         2,
+	"ANY":         3,
+	"NONE":        4,
+}
+
+func (x UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator) String() string {
+	return proto.EnumName(UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator_name, int32(x))
+}
+
+func (UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1f4edaf0f110fb85, []int{0, 0}
+}
+
+// The logical operator of the rule.
+type UserListLogicalRuleOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListLogicalRuleOperatorEnum) Reset()         { *m = UserListLogicalRuleOperatorEnum{} }
+func (m *UserListLogicalRuleOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListLogicalRuleOperatorEnum) ProtoMessage()    {}
+func (*UserListLogicalRuleOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1f4edaf0f110fb85, []int{0}
+}
+
+func (m *UserListLogicalRuleOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListLogicalRuleOperatorEnum.Unmarshal(m, b)
+}
+func (m *UserListLogicalRuleOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListLogicalRuleOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListLogicalRuleOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListLogicalRuleOperatorEnum.Merge(m, src)
+}
+func (m *UserListLogicalRuleOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListLogicalRuleOperatorEnum.Size(m)
+}
+func (m *UserListLogicalRuleOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListLogicalRuleOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListLogicalRuleOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator", UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator_name, UserListLogicalRuleOperatorEnum_UserListLogicalRuleOperator_value)
+	proto.RegisterType((*UserListLogicalRuleOperatorEnum)(nil), "google.ads.googleads.v3.enums.UserListLogicalRuleOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_logical_rule_operator.proto", fileDescriptor_1f4edaf0f110fb85)
+}
+
+var fileDescriptor_1f4edaf0f110fb85 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xb1, 0x6e, 0xea, 0x30,
+	0x14, 0x7d, 0x04, 0xf4, 0x78, 0x32, 0xc3, 0x8b, 0x32, 0xb6, 0x45, 0x2d, 0x7c, 0x80, 0x33, 0x64,
+	0x73, 0xa7, 0x40, 0x53, 0x84, 0x1a, 0x19, 0xd4, 0x0a, 0x50, 0xab, 0x48, 0x91, 0x4b, 0x2c, 0x2b,
+	0x92, 0xb1, 0x23, 0xdf, 0x84, 0xa1, 0x9f, 0xd3, 0xb1, 0x9f, 0xd2, 0x4f, 0xe9, 0xde, 0xbd, 0x8a,
+	0x0d, 0x6c, 0x65, 0xb1, 0x8e, 0x7c, 0xce, 0x3d, 0xe7, 0xde, 0x83, 0xa6, 0x42, 0x6b, 0x21, 0x79,
+	0xc8, 0x0a, 0x08, 0x1d, 0x6c, 0xd1, 0x3e, 0x0a, 0xb9, 0x6a, 0x76, 0x10, 0x36, 0xc0, 0x4d, 0x2e,
+	0x4b, 0xa8, 0x73, 0xa9, 0x45, 0xb9, 0x65, 0x32, 0x37, 0x8d, 0xe4, 0xb9, 0xae, 0xb8, 0x61, 0xb5,
+	0x36, 0xb8, 0x32, 0xba, 0xd6, 0xc1, 0xd0, 0x4d, 0x62, 0x56, 0x00, 0x3e, 0x99, 0xe0, 0x7d, 0x84,
+	0xad, 0xc9, 0xc5, 0xd5, 0x31, 0xa3, 0x2a, 0x43, 0xa6, 0x94, 0xae, 0x59, 0x5d, 0x6a, 0x05, 0x6e,
+	0x78, 0xfc, 0x86, 0xae, 0x57, 0xc0, 0x4d, 0x5a, 0x42, 0x9d, 0xba, 0x8c, 0xc7, 0x46, 0xf2, 0xc5,
+	0x21, 0x21, 0x51, 0xcd, 0x6e, 0xbc, 0x41, 0x97, 0x67, 0x24, 0xc1, 0x7f, 0x34, 0x58, 0xd1, 0xa7,
+	0x65, 0x32, 0x9d, 0xdf, 0xcf, 0x93, 0x3b, 0xff, 0x4f, 0x30, 0x40, 0xfd, 0x15, 0x7d, 0xa0, 0x8b,
+	0x0d, 0xf5, 0x3b, 0x41, 0x1f, 0x75, 0xe3, 0x34, 0xf5, 0x3d, 0x0b, 0xe8, 0xb3, 0xdf, 0x0d, 0xfe,
+	0xa1, 0x1e, 0x5d, 0xd0, 0xc4, 0xef, 0x4d, 0xbe, 0x3b, 0x68, 0xb4, 0xd5, 0x3b, 0x7c, 0x76, 0xff,
+	0xc9, 0xcd, 0x99, 0xf0, 0x65, 0x7b, 0xc3, 0xb2, 0xf3, 0x32, 0x39, 0x58, 0x08, 0x2d, 0x99, 0x12,
+	0x58, 0x1b, 0x11, 0x0a, 0xae, 0xec, 0x85, 0xc7, 0x5e, 0xab, 0x12, 0x7e, 0xa9, 0xf9, 0xd6, 0xbe,
+	0xef, 0x5e, 0x77, 0x16, 0xc7, 0x1f, 0xde, 0x70, 0xe6, 0xac, 0xe2, 0x02, 0xb0, 0x83, 0x2d, 0x5a,
+	0x47, 0xb8, 0xed, 0x02, 0x3e, 0x8f, 0x7c, 0x16, 0x17, 0x90, 0x9d, 0xf8, 0x6c, 0x1d, 0x65, 0x96,
+	0xff, 0xf2, 0x46, 0xee, 0x93, 0x90, 0xb8, 0x00, 0x42, 0x4e, 0x0a, 0x42, 0xd6, 0x11, 0x21, 0x56,
+	0xf3, 0xfa, 0xd7, 0x2e, 0x16, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xcd, 0xbb, 0x94, 0xfe,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_membership_status.pb.go b/googleapis/ads/googleads/v3/enums/user_list_membership_status.pb.go
new file mode 100644
index 0000000..ca36543
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_membership_status.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_membership_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible user list membership statuses.
+type UserListMembershipStatusEnum_UserListMembershipStatus int32
+
+const (
+	// Not specified.
+	UserListMembershipStatusEnum_UNSPECIFIED UserListMembershipStatusEnum_UserListMembershipStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListMembershipStatusEnum_UNKNOWN UserListMembershipStatusEnum_UserListMembershipStatus = 1
+	// Open status - List is accruing members and can be targeted to.
+	UserListMembershipStatusEnum_OPEN UserListMembershipStatusEnum_UserListMembershipStatus = 2
+	// Closed status - No new members being added. Cannot be used for targeting.
+	UserListMembershipStatusEnum_CLOSED UserListMembershipStatusEnum_UserListMembershipStatus = 3
+)
+
+var UserListMembershipStatusEnum_UserListMembershipStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPEN",
+	3: "CLOSED",
+}
+
+var UserListMembershipStatusEnum_UserListMembershipStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"OPEN":        2,
+	"CLOSED":      3,
+}
+
+func (x UserListMembershipStatusEnum_UserListMembershipStatus) String() string {
+	return proto.EnumName(UserListMembershipStatusEnum_UserListMembershipStatus_name, int32(x))
+}
+
+func (UserListMembershipStatusEnum_UserListMembershipStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0ef275e742537128, []int{0, 0}
+}
+
+// Membership status of this user list. Indicates whether a user list is open
+// or active. Only open user lists can accumulate more users and can be used for
+// targeting.
+type UserListMembershipStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListMembershipStatusEnum) Reset()         { *m = UserListMembershipStatusEnum{} }
+func (m *UserListMembershipStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListMembershipStatusEnum) ProtoMessage()    {}
+func (*UserListMembershipStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ef275e742537128, []int{0}
+}
+
+func (m *UserListMembershipStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Unmarshal(m, b)
+}
+func (m *UserListMembershipStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListMembershipStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListMembershipStatusEnum.Merge(m, src)
+}
+func (m *UserListMembershipStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Size(m)
+}
+func (m *UserListMembershipStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListMembershipStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListMembershipStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListMembershipStatusEnum_UserListMembershipStatus", UserListMembershipStatusEnum_UserListMembershipStatus_name, UserListMembershipStatusEnum_UserListMembershipStatus_value)
+	proto.RegisterType((*UserListMembershipStatusEnum)(nil), "google.ads.googleads.v3.enums.UserListMembershipStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_membership_status.proto", fileDescriptor_0ef275e742537128)
+}
+
+var fileDescriptor_0ef275e742537128 = []byte{
+	// 314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0xf2, 0x40,
+	0x14, 0x85, 0x7f, 0xe3, 0x8f, 0x2d, 0xe3, 0xa2, 0x21, 0xab, 0x52, 0x74, 0xa1, 0x0f, 0x30, 0x59,
+	0xcc, 0x6e, 0xba, 0x28, 0x51, 0x53, 0x91, 0xda, 0x31, 0x20, 0x5a, 0x28, 0x01, 0x19, 0x9b, 0x61,
+	0x3a, 0x60, 0x66, 0x42, 0xee, 0xc4, 0x07, 0xea, 0xb2, 0x8f, 0xd2, 0x47, 0xe9, 0xb2, 0x4f, 0x50,
+	0x32, 0xd1, 0xec, 0xec, 0x26, 0x1c, 0x72, 0xee, 0xf9, 0xe6, 0xdc, 0x8b, 0x1e, 0xa4, 0x31, 0xf2,
+	0x20, 0x42, 0x9e, 0x41, 0xd8, 0xc8, 0x5a, 0x1d, 0x49, 0x28, 0x74, 0x95, 0x43, 0x58, 0x81, 0x28,
+	0x77, 0x07, 0x05, 0x76, 0x97, 0x8b, 0x7c, 0x2f, 0x4a, 0x78, 0x57, 0xc5, 0x0e, 0x2c, 0xb7, 0x15,
+	0xe0, 0xa2, 0x34, 0xd6, 0x04, 0xc3, 0x26, 0x85, 0x79, 0x06, 0xb8, 0x05, 0xe0, 0x23, 0xc1, 0x0e,
+	0x70, 0x37, 0x38, 0xf3, 0x0b, 0x15, 0x72, 0xad, 0x8d, 0xe5, 0x56, 0x19, 0x7d, 0x0a, 0x8f, 0x35,
+	0x1a, 0x6c, 0x40, 0x94, 0x4b, 0x05, 0xf6, 0xb9, 0xe5, 0xaf, 0x1d, 0x3e, 0xd6, 0x55, 0x3e, 0x66,
+	0xe8, 0xf6, 0x92, 0x1f, 0xdc, 0xa0, 0xfe, 0x86, 0xad, 0x93, 0x78, 0xba, 0x78, 0x5c, 0xc4, 0x33,
+	0xff, 0x5f, 0xd0, 0x47, 0x57, 0x1b, 0xf6, 0xc4, 0x56, 0x2f, 0xcc, 0xef, 0x04, 0xd7, 0xe8, 0xff,
+	0x2a, 0x89, 0x99, 0xef, 0x05, 0x08, 0xf5, 0xa6, 0xcb, 0xd5, 0x3a, 0x9e, 0xf9, 0xdd, 0xc9, 0x4f,
+	0x07, 0x8d, 0xde, 0x4c, 0x8e, 0xff, 0xec, 0x3c, 0x19, 0x5e, 0x7a, 0x33, 0xa9, 0x4b, 0x27, 0x9d,
+	0xd7, 0xc9, 0x29, 0x2f, 0xcd, 0x81, 0x6b, 0x89, 0x4d, 0x29, 0x43, 0x29, 0xb4, 0x5b, 0xe9, 0x7c,
+	0xc4, 0x42, 0xc1, 0x85, 0x9b, 0xde, 0xbb, 0xef, 0x87, 0xd7, 0x9d, 0x47, 0xd1, 0xa7, 0x37, 0x9c,
+	0x37, 0xa8, 0x28, 0x03, 0xdc, 0xc8, 0x5a, 0x6d, 0x09, 0xae, 0xf7, 0x87, 0xaf, 0xb3, 0x9f, 0x46,
+	0x19, 0xa4, 0xad, 0x9f, 0x6e, 0x49, 0xea, 0xfc, 0x6f, 0x6f, 0xd4, 0xfc, 0xa4, 0x34, 0xca, 0x80,
+	0xd2, 0x76, 0x82, 0xd2, 0x2d, 0xa1, 0xd4, 0xcd, 0xec, 0x7b, 0xae, 0x18, 0xf9, 0x0d, 0x00, 0x00,
+	0xff, 0xff, 0xe7, 0x7e, 0x6b, 0x54, 0xeb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_number_rule_item_operator.pb.go b/googleapis/ads/googleads/v3/enums/user_list_number_rule_item_operator.pb.go
new file mode 100644
index 0000000..4264133
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_number_rule_item_operator.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_number_rule_item_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list number rule item operators.
+type UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator int32
+
+const (
+	// Not specified.
+	UserListNumberRuleItemOperatorEnum_UNSPECIFIED UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListNumberRuleItemOperatorEnum_UNKNOWN UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 1
+	// Greater than.
+	UserListNumberRuleItemOperatorEnum_GREATER_THAN UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 2
+	// Greater than or equal.
+	UserListNumberRuleItemOperatorEnum_GREATER_THAN_OR_EQUAL UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 3
+	// Equals.
+	UserListNumberRuleItemOperatorEnum_EQUALS UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 4
+	// Not equals.
+	UserListNumberRuleItemOperatorEnum_NOT_EQUALS UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 5
+	// Less than.
+	UserListNumberRuleItemOperatorEnum_LESS_THAN UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 6
+	// Less than or equal.
+	UserListNumberRuleItemOperatorEnum_LESS_THAN_OR_EQUAL UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator = 7
+)
+
+var UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "GREATER_THAN",
+	3: "GREATER_THAN_OR_EQUAL",
+	4: "EQUALS",
+	5: "NOT_EQUALS",
+	6: "LESS_THAN",
+	7: "LESS_THAN_OR_EQUAL",
+}
+
+var UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"GREATER_THAN":          2,
+	"GREATER_THAN_OR_EQUAL": 3,
+	"EQUALS":                4,
+	"NOT_EQUALS":            5,
+	"LESS_THAN":             6,
+	"LESS_THAN_OR_EQUAL":    7,
+}
+
+func (x UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator) String() string {
+	return proto.EnumName(UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator_name, int32(x))
+}
+
+func (UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dabed540aeb56a56, []int{0, 0}
+}
+
+// Supported rule operator for number type.
+type UserListNumberRuleItemOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListNumberRuleItemOperatorEnum) Reset()         { *m = UserListNumberRuleItemOperatorEnum{} }
+func (m *UserListNumberRuleItemOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListNumberRuleItemOperatorEnum) ProtoMessage()    {}
+func (*UserListNumberRuleItemOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dabed540aeb56a56, []int{0}
+}
+
+func (m *UserListNumberRuleItemOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListNumberRuleItemOperatorEnum.Unmarshal(m, b)
+}
+func (m *UserListNumberRuleItemOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListNumberRuleItemOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListNumberRuleItemOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListNumberRuleItemOperatorEnum.Merge(m, src)
+}
+func (m *UserListNumberRuleItemOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListNumberRuleItemOperatorEnum.Size(m)
+}
+func (m *UserListNumberRuleItemOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListNumberRuleItemOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListNumberRuleItemOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator", UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator_name, UserListNumberRuleItemOperatorEnum_UserListNumberRuleItemOperator_value)
+	proto.RegisterType((*UserListNumberRuleItemOperatorEnum)(nil), "google.ads.googleads.v3.enums.UserListNumberRuleItemOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_number_rule_item_operator.proto", fileDescriptor_dabed540aeb56a56)
+}
+
+var fileDescriptor_dabed540aeb56a56 = []byte{
+	// 379 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcd, 0xae, 0x93, 0x40,
+	0x14, 0xc7, 0x85, 0x6a, 0x1b, 0xa7, 0x7e, 0x90, 0x49, 0x34, 0xd1, 0x58, 0x93, 0xd6, 0xfd, 0xb0,
+	0x60, 0x37, 0xae, 0xa6, 0x8a, 0xd8, 0xd8, 0x40, 0x85, 0x52, 0x13, 0x43, 0x32, 0xa1, 0x32, 0x21,
+	0x24, 0x30, 0x43, 0x66, 0x86, 0x3e, 0x90, 0x4b, 0x17, 0x3e, 0x88, 0x7b, 0x5f, 0xc2, 0x27, 0x70,
+	0x79, 0xc3, 0xd0, 0x72, 0xef, 0xe6, 0x76, 0x43, 0xfe, 0xe7, 0xeb, 0x77, 0x98, 0xff, 0x01, 0x41,
+	0x29, 0x44, 0x59, 0x33, 0x37, 0x2f, 0x94, 0x3b, 0xc8, 0x5e, 0x9d, 0x3c, 0x97, 0xf1, 0xae, 0x51,
+	0x6e, 0xa7, 0x98, 0xa4, 0x75, 0xa5, 0x34, 0xe5, 0x5d, 0x73, 0x64, 0x92, 0xca, 0xae, 0x66, 0xb4,
+	0xd2, 0xac, 0xa1, 0xa2, 0x65, 0x32, 0xd7, 0x42, 0xa2, 0x56, 0x0a, 0x2d, 0xe0, 0x62, 0x98, 0x46,
+	0x79, 0xa1, 0xd0, 0x08, 0x42, 0x27, 0x0f, 0x19, 0xd0, 0xeb, 0x37, 0x97, 0x3d, 0x6d, 0xe5, 0xe6,
+	0x9c, 0x0b, 0x9d, 0xeb, 0x4a, 0x70, 0x35, 0x0c, 0xaf, 0xfe, 0x5a, 0x60, 0x95, 0x2a, 0x26, 0xb7,
+	0x95, 0xd2, 0xa1, 0x59, 0x14, 0x77, 0x35, 0xdb, 0x68, 0xd6, 0x44, 0xe7, 0x2d, 0x3e, 0xef, 0x9a,
+	0xd5, 0x6f, 0x0b, 0xbc, 0xbd, 0xde, 0x06, 0x9f, 0x83, 0x79, 0x1a, 0x26, 0x3b, 0xff, 0xc3, 0xe6,
+	0xd3, 0xc6, 0xff, 0xe8, 0x3c, 0x80, 0x73, 0x30, 0x4b, 0xc3, 0x2f, 0x61, 0xf4, 0x2d, 0x74, 0x2c,
+	0xe8, 0x80, 0x27, 0x41, 0xec, 0x93, 0xbd, 0x1f, 0xd3, 0xfd, 0x67, 0x12, 0x3a, 0x36, 0x7c, 0x05,
+	0x5e, 0xdc, 0xcd, 0xd0, 0x28, 0xa6, 0xfe, 0xd7, 0x94, 0x6c, 0x9d, 0x09, 0x04, 0x60, 0x6a, 0x64,
+	0xe2, 0x3c, 0x84, 0xcf, 0x00, 0x08, 0xa3, 0x3d, 0x3d, 0xc7, 0x8f, 0xe0, 0x53, 0xf0, 0x78, 0xeb,
+	0x27, 0xc9, 0x40, 0x99, 0xc2, 0x97, 0x00, 0x8e, 0xe1, 0x2d, 0x62, 0xb6, 0xfe, 0x6f, 0x81, 0xe5,
+	0x0f, 0xd1, 0xa0, 0xab, 0xde, 0xac, 0xdf, 0x5d, 0x7f, 0xd3, 0xae, 0xb7, 0x68, 0x67, 0x7d, 0x5f,
+	0x9f, 0x29, 0xa5, 0xa8, 0x73, 0x5e, 0x22, 0x21, 0x4b, 0xb7, 0x64, 0xdc, 0x18, 0x78, 0x39, 0x5d,
+	0x5b, 0xa9, 0x7b, 0x2e, 0xf9, 0xde, 0x7c, 0x7f, 0xda, 0x93, 0x80, 0x90, 0x5f, 0xf6, 0x22, 0x18,
+	0x50, 0xa4, 0x50, 0x68, 0x90, 0xbd, 0x3a, 0x78, 0xa8, 0xb7, 0x59, 0xfd, 0xb9, 0xd4, 0x33, 0x52,
+	0xa8, 0x6c, 0xac, 0x67, 0x07, 0x2f, 0x33, 0xf5, 0x7f, 0xf6, 0x72, 0x48, 0x62, 0x4c, 0x0a, 0x85,
+	0xf1, 0xd8, 0x81, 0xf1, 0xc1, 0xc3, 0xd8, 0xf4, 0x1c, 0xa7, 0xe6, 0xc7, 0xbc, 0x9b, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x5d, 0xbb, 0xa1, 0x0e, 0x61, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_prepopulation_status.pb.go b/googleapis/ads/googleads/v3/enums/user_list_prepopulation_status.pb.go
new file mode 100644
index 0000000..b02414f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_prepopulation_status.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_prepopulation_status.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list prepopulation status.
+type UserListPrepopulationStatusEnum_UserListPrepopulationStatus int32
+
+const (
+	// Not specified.
+	UserListPrepopulationStatusEnum_UNSPECIFIED UserListPrepopulationStatusEnum_UserListPrepopulationStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListPrepopulationStatusEnum_UNKNOWN UserListPrepopulationStatusEnum_UserListPrepopulationStatus = 1
+	// Prepopoulation is being requested.
+	UserListPrepopulationStatusEnum_REQUESTED UserListPrepopulationStatusEnum_UserListPrepopulationStatus = 2
+	// Prepopulation is finished.
+	UserListPrepopulationStatusEnum_FINISHED UserListPrepopulationStatusEnum_UserListPrepopulationStatus = 3
+	// Prepopulation failed.
+	UserListPrepopulationStatusEnum_FAILED UserListPrepopulationStatusEnum_UserListPrepopulationStatus = 4
+)
+
+var UserListPrepopulationStatusEnum_UserListPrepopulationStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REQUESTED",
+	3: "FINISHED",
+	4: "FAILED",
+}
+
+var UserListPrepopulationStatusEnum_UserListPrepopulationStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"REQUESTED":   2,
+	"FINISHED":    3,
+	"FAILED":      4,
+}
+
+func (x UserListPrepopulationStatusEnum_UserListPrepopulationStatus) String() string {
+	return proto.EnumName(UserListPrepopulationStatusEnum_UserListPrepopulationStatus_name, int32(x))
+}
+
+func (UserListPrepopulationStatusEnum_UserListPrepopulationStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e9b6e6af973a186e, []int{0, 0}
+}
+
+// Indicates status of prepopulation based on the rule.
+type UserListPrepopulationStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListPrepopulationStatusEnum) Reset()         { *m = UserListPrepopulationStatusEnum{} }
+func (m *UserListPrepopulationStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListPrepopulationStatusEnum) ProtoMessage()    {}
+func (*UserListPrepopulationStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e9b6e6af973a186e, []int{0}
+}
+
+func (m *UserListPrepopulationStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListPrepopulationStatusEnum.Unmarshal(m, b)
+}
+func (m *UserListPrepopulationStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListPrepopulationStatusEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListPrepopulationStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListPrepopulationStatusEnum.Merge(m, src)
+}
+func (m *UserListPrepopulationStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListPrepopulationStatusEnum.Size(m)
+}
+func (m *UserListPrepopulationStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListPrepopulationStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListPrepopulationStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListPrepopulationStatusEnum_UserListPrepopulationStatus", UserListPrepopulationStatusEnum_UserListPrepopulationStatus_name, UserListPrepopulationStatusEnum_UserListPrepopulationStatus_value)
+	proto.RegisterType((*UserListPrepopulationStatusEnum)(nil), "google.ads.googleads.v3.enums.UserListPrepopulationStatusEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_prepopulation_status.proto", fileDescriptor_e9b6e6af973a186e)
+}
+
+var fileDescriptor_e9b6e6af973a186e = []byte{
+	// 331 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x4e, 0x83, 0x40,
+	0x14, 0x14, 0x6a, 0xaa, 0x6e, 0x35, 0x12, 0x8e, 0x6a, 0xa3, 0xed, 0x07, 0x2c, 0x07, 0x6e, 0xeb,
+	0x89, 0xca, 0xb6, 0x12, 0x1b, 0x44, 0x91, 0x9a, 0x18, 0x92, 0x06, 0x85, 0x10, 0x12, 0xba, 0xbb,
+	0xe1, 0x2d, 0xfd, 0x05, 0xff, 0xc3, 0xa3, 0x9f, 0xe2, 0xa7, 0x78, 0xf7, 0x6e, 0x58, 0xda, 0xc6,
+	0x8b, 0x5c, 0x36, 0x93, 0x7d, 0xf3, 0x66, 0xde, 0x0c, 0x9a, 0xe4, 0x9c, 0xe7, 0x65, 0x66, 0x25,
+	0x29, 0x58, 0x2d, 0x6c, 0xd0, 0xda, 0xb6, 0x32, 0x56, 0xaf, 0xc0, 0xaa, 0x21, 0xab, 0x96, 0x65,
+	0x01, 0x72, 0x29, 0xaa, 0x4c, 0x70, 0x51, 0x97, 0x89, 0x2c, 0x38, 0x5b, 0x82, 0x4c, 0x64, 0x0d,
+	0x58, 0x54, 0x5c, 0x72, 0x73, 0xd8, 0x2e, 0xe2, 0x24, 0x05, 0xbc, 0xd3, 0xc0, 0x6b, 0x1b, 0x2b,
+	0x8d, 0xb3, 0x8b, 0xad, 0x85, 0x28, 0xac, 0x84, 0x31, 0x2e, 0x95, 0xc4, 0x66, 0x79, 0xfc, 0xae,
+	0xa1, 0xcb, 0x08, 0xb2, 0x6a, 0x5e, 0x80, 0x0c, 0xfe, 0x7a, 0x84, 0xca, 0x82, 0xb2, 0x7a, 0x35,
+	0x4e, 0xd1, 0x79, 0x07, 0xc5, 0x3c, 0x45, 0x83, 0xc8, 0x0f, 0x03, 0x7a, 0xe3, 0x4d, 0x3d, 0xea,
+	0x1a, 0x7b, 0xe6, 0x00, 0x1d, 0x44, 0xfe, 0x9d, 0x7f, 0xff, 0xec, 0x1b, 0x9a, 0x79, 0x82, 0x8e,
+	0x1e, 0xe9, 0x43, 0x44, 0xc3, 0x27, 0xea, 0x1a, 0xba, 0x79, 0x8c, 0x0e, 0xa7, 0x9e, 0xef, 0x85,
+	0xb7, 0xd4, 0x35, 0x7a, 0x26, 0x42, 0xfd, 0xa9, 0xe3, 0xcd, 0xa9, 0x6b, 0xec, 0x4f, 0x7e, 0x34,
+	0x34, 0x7a, 0xe3, 0x2b, 0xdc, 0x99, 0x66, 0x72, 0xd5, 0x71, 0x49, 0xd0, 0x24, 0x0a, 0xb4, 0x97,
+	0x4d, 0xa9, 0x38, 0xe7, 0x65, 0xc2, 0x72, 0xcc, 0xab, 0xdc, 0xca, 0x33, 0xa6, 0xf2, 0x6e, 0x4b,
+	0x16, 0x05, 0xfc, 0xd3, 0xf9, 0xb5, 0x7a, 0x3f, 0xf4, 0xde, 0xcc, 0x71, 0x3e, 0xf5, 0xe1, 0xac,
+	0x95, 0x72, 0x52, 0xc0, 0x2d, 0x6c, 0xd0, 0xc2, 0xc6, 0x4d, 0x31, 0xf0, 0xb5, 0x9d, 0xc7, 0x4e,
+	0x0a, 0xf1, 0x6e, 0x1e, 0x2f, 0xec, 0x58, 0xcd, 0xbf, 0xf5, 0x51, 0xfb, 0x49, 0x88, 0x93, 0x02,
+	0x21, 0x3b, 0x06, 0x21, 0x0b, 0x9b, 0x10, 0xc5, 0x79, 0xed, 0xab, 0xc3, 0xec, 0xdf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xae, 0x3e, 0xc9, 0xbe, 0x0b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_rule_type.pb.go b/googleapis/ads/googleads/v3/enums/user_list_rule_type.pb.go
new file mode 100644
index 0000000..5af3ed0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_rule_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_rule_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list rule types.
+type UserListRuleTypeEnum_UserListRuleType int32
+
+const (
+	// Not specified.
+	UserListRuleTypeEnum_UNSPECIFIED UserListRuleTypeEnum_UserListRuleType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListRuleTypeEnum_UNKNOWN UserListRuleTypeEnum_UserListRuleType = 1
+	// Conjunctive normal form.
+	UserListRuleTypeEnum_AND_OF_ORS UserListRuleTypeEnum_UserListRuleType = 2
+	// Disjunctive normal form.
+	UserListRuleTypeEnum_OR_OF_ANDS UserListRuleTypeEnum_UserListRuleType = 3
+)
+
+var UserListRuleTypeEnum_UserListRuleType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AND_OF_ORS",
+	3: "OR_OF_ANDS",
+}
+
+var UserListRuleTypeEnum_UserListRuleType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AND_OF_ORS":  2,
+	"OR_OF_ANDS":  3,
+}
+
+func (x UserListRuleTypeEnum_UserListRuleType) String() string {
+	return proto.EnumName(UserListRuleTypeEnum_UserListRuleType_name, int32(x))
+}
+
+func (UserListRuleTypeEnum_UserListRuleType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_445e52642a4c2209, []int{0, 0}
+}
+
+// Rule based user list rule type.
+type UserListRuleTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListRuleTypeEnum) Reset()         { *m = UserListRuleTypeEnum{} }
+func (m *UserListRuleTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListRuleTypeEnum) ProtoMessage()    {}
+func (*UserListRuleTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_445e52642a4c2209, []int{0}
+}
+
+func (m *UserListRuleTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListRuleTypeEnum.Unmarshal(m, b)
+}
+func (m *UserListRuleTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListRuleTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListRuleTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListRuleTypeEnum.Merge(m, src)
+}
+func (m *UserListRuleTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListRuleTypeEnum.Size(m)
+}
+func (m *UserListRuleTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListRuleTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListRuleTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListRuleTypeEnum_UserListRuleType", UserListRuleTypeEnum_UserListRuleType_name, UserListRuleTypeEnum_UserListRuleType_value)
+	proto.RegisterType((*UserListRuleTypeEnum)(nil), "google.ads.googleads.v3.enums.UserListRuleTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_rule_type.proto", fileDescriptor_445e52642a4c2209)
+}
+
+var fileDescriptor_445e52642a4c2209 = []byte{
+	// 316 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x4d, 0x6a, 0xf3, 0x30,
+	0x10, 0xfd, 0xe2, 0xc0, 0x57, 0x50, 0xa0, 0x35, 0xa6, 0xdd, 0x94, 0x66, 0x91, 0x1c, 0x40, 0x5e,
+	0x78, 0x51, 0x50, 0x57, 0x4a, 0xf3, 0x43, 0x68, 0x91, 0x4d, 0xd2, 0xa4, 0x50, 0x0c, 0xc6, 0xad,
+	0x85, 0x6a, 0x70, 0x24, 0xe3, 0x91, 0x03, 0xb9, 0x4e, 0x97, 0x3d, 0x4a, 0x8f, 0x92, 0x53, 0x14,
+	0x49, 0x4d, 0x16, 0x81, 0x76, 0x23, 0xde, 0xcc, 0x7b, 0x6f, 0xf4, 0x66, 0xd0, 0xad, 0x50, 0x4a,
+	0x54, 0x3c, 0xcc, 0x0b, 0x08, 0x1d, 0x34, 0x68, 0x1b, 0x85, 0x5c, 0xb6, 0x1b, 0x08, 0x5b, 0xe0,
+	0x4d, 0x56, 0x95, 0xa0, 0xb3, 0xa6, 0xad, 0x78, 0xa6, 0x77, 0x35, 0xc7, 0x75, 0xa3, 0xb4, 0x0a,
+	0xfa, 0x4e, 0x8d, 0xf3, 0x02, 0xf0, 0xd1, 0x88, 0xb7, 0x11, 0xb6, 0xc6, 0xeb, 0x9b, 0xc3, 0xdc,
+	0xba, 0x0c, 0x73, 0x29, 0x95, 0xce, 0x75, 0xa9, 0x24, 0x38, 0xf3, 0xf0, 0x1d, 0x5d, 0xae, 0x80,
+	0x37, 0x8f, 0x25, 0xe8, 0x45, 0x5b, 0xf1, 0xa7, 0x5d, 0xcd, 0x27, 0xb2, 0xdd, 0x0c, 0x13, 0xe4,
+	0x9f, 0xf6, 0x83, 0x0b, 0xd4, 0x5b, 0xb1, 0x65, 0x32, 0xb9, 0x9f, 0x4f, 0xe7, 0x93, 0xb1, 0xff,
+	0x2f, 0xe8, 0xa1, 0xb3, 0x15, 0x7b, 0x60, 0xf1, 0x33, 0xf3, 0x3b, 0xc1, 0x39, 0x42, 0x94, 0x8d,
+	0xb3, 0x78, 0x9a, 0xc5, 0x8b, 0xa5, 0xef, 0x99, 0x3a, 0x5e, 0x98, 0x92, 0xb2, 0xf1, 0xd2, 0xef,
+	0x8e, 0xf6, 0x1d, 0x34, 0x78, 0x53, 0x1b, 0xfc, 0x67, 0xda, 0xd1, 0xd5, 0xe9, 0xaf, 0x89, 0x89,
+	0x99, 0x74, 0x5e, 0x46, 0x3f, 0x3e, 0xa1, 0xaa, 0x5c, 0x0a, 0xac, 0x1a, 0x11, 0x0a, 0x2e, 0xed,
+	0x12, 0x87, 0x73, 0xd5, 0x25, 0xfc, 0x72, 0xbd, 0x3b, 0xfb, 0x7e, 0x78, 0xdd, 0x19, 0xa5, 0x9f,
+	0x5e, 0x7f, 0xe6, 0x46, 0xd1, 0x02, 0xb0, 0x83, 0x06, 0xad, 0x23, 0x6c, 0x36, 0x87, 0xaf, 0x03,
+	0x9f, 0xd2, 0x02, 0xd2, 0x23, 0x9f, 0xae, 0xa3, 0xd4, 0xf2, 0x7b, 0x6f, 0xe0, 0x9a, 0x84, 0xd0,
+	0x02, 0x08, 0x39, 0x2a, 0x08, 0x59, 0x47, 0x84, 0x58, 0xcd, 0xeb, 0x7f, 0x1b, 0x2c, 0xfa, 0x0e,
+	0x00, 0x00, 0xff, 0xff, 0xf4, 0xca, 0x25, 0x39, 0xd5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_size_range.pb.go b/googleapis/ads/googleads/v3/enums/user_list_size_range.pb.go
new file mode 100644
index 0000000..be007db
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_size_range.pb.go
@@ -0,0 +1,192 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_size_range.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible user list size ranges.
+type UserListSizeRangeEnum_UserListSizeRange int32
+
+const (
+	// Not specified.
+	UserListSizeRangeEnum_UNSPECIFIED UserListSizeRangeEnum_UserListSizeRange = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListSizeRangeEnum_UNKNOWN UserListSizeRangeEnum_UserListSizeRange = 1
+	// User list has less than 500 users.
+	UserListSizeRangeEnum_LESS_THAN_FIVE_HUNDRED UserListSizeRangeEnum_UserListSizeRange = 2
+	// User list has number of users in range of 500 to 1000.
+	UserListSizeRangeEnum_LESS_THAN_ONE_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 3
+	// User list has number of users in range of 1000 to 10000.
+	UserListSizeRangeEnum_ONE_THOUSAND_TO_TEN_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 4
+	// User list has number of users in range of 10000 to 50000.
+	UserListSizeRangeEnum_TEN_THOUSAND_TO_FIFTY_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 5
+	// User list has number of users in range of 50000 to 100000.
+	UserListSizeRangeEnum_FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 6
+	// User list has number of users in range of 100000 to 300000.
+	UserListSizeRangeEnum_ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 7
+	// User list has number of users in range of 300000 to 500000.
+	UserListSizeRangeEnum_THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 8
+	// User list has number of users in range of 500000 to 1 million.
+	UserListSizeRangeEnum_FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION UserListSizeRangeEnum_UserListSizeRange = 9
+	// User list has number of users in range of 1 to 2 millions.
+	UserListSizeRangeEnum_ONE_MILLION_TO_TWO_MILLION UserListSizeRangeEnum_UserListSizeRange = 10
+	// User list has number of users in range of 2 to 3 millions.
+	UserListSizeRangeEnum_TWO_MILLION_TO_THREE_MILLION UserListSizeRangeEnum_UserListSizeRange = 11
+	// User list has number of users in range of 3 to 5 millions.
+	UserListSizeRangeEnum_THREE_MILLION_TO_FIVE_MILLION UserListSizeRangeEnum_UserListSizeRange = 12
+	// User list has number of users in range of 5 to 10 millions.
+	UserListSizeRangeEnum_FIVE_MILLION_TO_TEN_MILLION UserListSizeRangeEnum_UserListSizeRange = 13
+	// User list has number of users in range of 10 to 20 millions.
+	UserListSizeRangeEnum_TEN_MILLION_TO_TWENTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 14
+	// User list has number of users in range of 20 to 30 millions.
+	UserListSizeRangeEnum_TWENTY_MILLION_TO_THIRTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 15
+	// User list has number of users in range of 30 to 50 millions.
+	UserListSizeRangeEnum_THIRTY_MILLION_TO_FIFTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 16
+	// User list has over 50 million users.
+	UserListSizeRangeEnum_OVER_FIFTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 17
+)
+
+var UserListSizeRangeEnum_UserListSizeRange_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "LESS_THAN_FIVE_HUNDRED",
+	3:  "LESS_THAN_ONE_THOUSAND",
+	4:  "ONE_THOUSAND_TO_TEN_THOUSAND",
+	5:  "TEN_THOUSAND_TO_FIFTY_THOUSAND",
+	6:  "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND",
+	7:  "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND",
+	8:  "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND",
+	9:  "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION",
+	10: "ONE_MILLION_TO_TWO_MILLION",
+	11: "TWO_MILLION_TO_THREE_MILLION",
+	12: "THREE_MILLION_TO_FIVE_MILLION",
+	13: "FIVE_MILLION_TO_TEN_MILLION",
+	14: "TEN_MILLION_TO_TWENTY_MILLION",
+	15: "TWENTY_MILLION_TO_THIRTY_MILLION",
+	16: "THIRTY_MILLION_TO_FIFTY_MILLION",
+	17: "OVER_FIFTY_MILLION",
+}
+
+var UserListSizeRangeEnum_UserListSizeRange_value = map[string]int32{
+	"UNSPECIFIED":                                     0,
+	"UNKNOWN":                                         1,
+	"LESS_THAN_FIVE_HUNDRED":                          2,
+	"LESS_THAN_ONE_THOUSAND":                          3,
+	"ONE_THOUSAND_TO_TEN_THOUSAND":                    4,
+	"TEN_THOUSAND_TO_FIFTY_THOUSAND":                  5,
+	"FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND":          6,
+	"ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND":  7,
+	"THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND": 8,
+	"FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION":            9,
+	"ONE_MILLION_TO_TWO_MILLION":                      10,
+	"TWO_MILLION_TO_THREE_MILLION":                    11,
+	"THREE_MILLION_TO_FIVE_MILLION":                   12,
+	"FIVE_MILLION_TO_TEN_MILLION":                     13,
+	"TEN_MILLION_TO_TWENTY_MILLION":                   14,
+	"TWENTY_MILLION_TO_THIRTY_MILLION":                15,
+	"THIRTY_MILLION_TO_FIFTY_MILLION":                 16,
+	"OVER_FIFTY_MILLION":                              17,
+}
+
+func (x UserListSizeRangeEnum_UserListSizeRange) String() string {
+	return proto.EnumName(UserListSizeRangeEnum_UserListSizeRange_name, int32(x))
+}
+
+func (UserListSizeRangeEnum_UserListSizeRange) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_288127de0922904a, []int{0, 0}
+}
+
+// Size range in terms of number of users of a UserList.
+type UserListSizeRangeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListSizeRangeEnum) Reset()         { *m = UserListSizeRangeEnum{} }
+func (m *UserListSizeRangeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListSizeRangeEnum) ProtoMessage()    {}
+func (*UserListSizeRangeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_288127de0922904a, []int{0}
+}
+
+func (m *UserListSizeRangeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListSizeRangeEnum.Unmarshal(m, b)
+}
+func (m *UserListSizeRangeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListSizeRangeEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListSizeRangeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListSizeRangeEnum.Merge(m, src)
+}
+func (m *UserListSizeRangeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListSizeRangeEnum.Size(m)
+}
+func (m *UserListSizeRangeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListSizeRangeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListSizeRangeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListSizeRangeEnum_UserListSizeRange", UserListSizeRangeEnum_UserListSizeRange_name, UserListSizeRangeEnum_UserListSizeRange_value)
+	proto.RegisterType((*UserListSizeRangeEnum)(nil), "google.ads.googleads.v3.enums.UserListSizeRangeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_size_range.proto", fileDescriptor_288127de0922904a)
+}
+
+var fileDescriptor_288127de0922904a = []byte{
+	// 504 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xcb, 0x6e, 0xd3, 0x40,
+	0x14, 0x86, 0x69, 0x7a, 0x83, 0x13, 0xa0, 0xee, 0x48, 0x64, 0x11, 0x9a, 0xb6, 0x09, 0x15, 0x42,
+	0x2c, 0xc6, 0x12, 0xde, 0x20, 0xb3, 0x72, 0xc8, 0xa4, 0xb1, 0x08, 0xe3, 0xc8, 0xb7, 0xaa, 0x28,
+	0x92, 0x65, 0xb0, 0x65, 0x59, 0x4a, 0xec, 0xc8, 0xe3, 0x74, 0xd1, 0xe7, 0xe0, 0x09, 0x58, 0xf2,
+	0x28, 0x3c, 0x0a, 0xbc, 0x01, 0x2b, 0x64, 0xbb, 0xe3, 0x0b, 0x35, 0x6c, 0xa2, 0xa3, 0xff, 0xff,
+	0xce, 0xc9, 0xaf, 0xf1, 0x39, 0xf0, 0x36, 0x88, 0xe3, 0x60, 0xe5, 0x8b, 0xae, 0xc7, 0xc4, 0xa2,
+	0xcc, 0xaa, 0x1b, 0x49, 0xf4, 0xa3, 0xed, 0x9a, 0x89, 0x5b, 0xe6, 0x27, 0xce, 0x2a, 0x64, 0xa9,
+	0xc3, 0xc2, 0x5b, 0xdf, 0x49, 0xdc, 0x28, 0xf0, 0xf1, 0x26, 0x89, 0xd3, 0x18, 0x0d, 0x0a, 0x1c,
+	0xbb, 0x1e, 0xc3, 0x65, 0x27, 0xbe, 0x91, 0x70, 0xde, 0xd9, 0x3f, 0xe1, 0x83, 0x37, 0xa1, 0xe8,
+	0x46, 0x51, 0x9c, 0xba, 0x69, 0x18, 0x47, 0xac, 0x68, 0x1e, 0x7d, 0xdd, 0x87, 0x67, 0x16, 0xf3,
+	0x93, 0x79, 0xc8, 0x52, 0x23, 0xbc, 0xf5, 0xf5, 0x6c, 0x30, 0x89, 0xb6, 0xeb, 0xd1, 0xef, 0x3d,
+	0x38, 0xbe, 0xe7, 0xa0, 0x23, 0xe8, 0x5a, 0xd4, 0x58, 0x90, 0xf7, 0xea, 0x54, 0x25, 0x13, 0xe1,
+	0x01, 0xea, 0xc2, 0xa1, 0x45, 0x3f, 0x50, 0xed, 0x8a, 0x0a, 0x3b, 0xa8, 0x0f, 0xbd, 0x39, 0x31,
+	0x0c, 0xc7, 0x9c, 0x29, 0xd4, 0x99, 0xaa, 0x36, 0x71, 0x66, 0x16, 0x9d, 0xe8, 0x64, 0x22, 0x74,
+	0x9a, 0x9e, 0x46, 0x89, 0x63, 0xce, 0x34, 0xcb, 0x50, 0xe8, 0x44, 0xd8, 0x45, 0xe7, 0x70, 0x52,
+	0x57, 0x1c, 0x53, 0x73, 0x4c, 0x42, 0x2b, 0x62, 0x0f, 0x8d, 0xe0, 0xb4, 0xae, 0x64, 0xc4, 0x54,
+	0x9d, 0x9a, 0xd7, 0x15, 0xb3, 0x8f, 0x5e, 0xc3, 0xcb, 0xa6, 0x96, 0x51, 0xd9, 0xdc, 0xbb, 0x10,
+	0x15, 0x7b, 0x80, 0xde, 0x00, 0x6e, 0x73, 0xf2, 0x7f, 0x9e, 0xe9, 0xa4, 0xa5, 0xe7, 0x10, 0x49,
+	0x20, 0xb6, 0x7b, 0x45, 0x1a, 0xbb, 0xa5, 0xe9, 0x21, 0x7a, 0x05, 0x17, 0xad, 0x16, 0xcf, 0xf6,
+	0x51, 0x9d, 0xcf, 0x55, 0x8d, 0x0a, 0x8f, 0xd0, 0x29, 0xf4, 0x6b, 0x42, 0x9e, 0xe4, 0x4a, 0x2b,
+	0x7d, 0xc8, 0x1e, 0xa9, 0x26, 0x54, 0x49, 0x39, 0xd1, 0x45, 0x43, 0x18, 0x34, 0xa4, 0x32, 0x17,
+	0x47, 0x1e, 0xa3, 0x33, 0x78, 0x5e, 0x57, 0xf8, 0x4b, 0x73, 0xe0, 0x49, 0x3e, 0xa3, 0x12, 0x8a,
+	0x14, 0x84, 0x9a, 0xd7, 0x25, 0xf2, 0x14, 0x5d, 0xc0, 0x79, 0x53, 0x2b, 0xb2, 0xa8, 0x7a, 0x8d,
+	0x3a, 0x42, 0x2f, 0xe0, 0xac, 0xa9, 0x55, 0xdf, 0x8c, 0x43, 0x02, 0xea, 0x01, 0xd2, 0x6c, 0xa2,
+	0xff, 0xa5, 0x1f, 0x8f, 0x7f, 0xed, 0xc0, 0xf0, 0x4b, 0xbc, 0xc6, 0xff, 0x5d, 0xed, 0x71, 0xef,
+	0xde, 0x7e, 0x2e, 0xb2, 0xa5, 0x5e, 0xec, 0x7c, 0x1a, 0xdf, 0x35, 0x06, 0xf1, 0xca, 0x8d, 0x02,
+	0x1c, 0x27, 0x81, 0x18, 0xf8, 0x51, 0xbe, 0xf2, 0xfc, 0xba, 0x36, 0x21, 0xfb, 0xc7, 0xb1, 0xbd,
+	0xcb, 0x7f, 0xbf, 0x75, 0x76, 0x2f, 0x15, 0xe5, 0x7b, 0x67, 0x70, 0x59, 0x8c, 0x52, 0x3c, 0x86,
+	0x8b, 0x32, 0xab, 0x6c, 0x09, 0x67, 0x57, 0xc2, 0x7e, 0x70, 0x7f, 0xa9, 0x78, 0x6c, 0x59, 0xfa,
+	0x4b, 0x5b, 0x5a, 0xe6, 0xfe, 0xcf, 0xce, 0xb0, 0x10, 0x65, 0x59, 0xf1, 0x98, 0x2c, 0x97, 0x84,
+	0x2c, 0xdb, 0x92, 0x2c, 0xe7, 0xcc, 0xe7, 0x83, 0x3c, 0x98, 0xf4, 0x27, 0x00, 0x00, 0xff, 0xff,
+	0xdf, 0xdc, 0x48, 0x4a, 0x04, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_string_rule_item_operator.pb.go b/googleapis/ads/googleads/v3/enums/user_list_string_rule_item_operator.pb.go
new file mode 100644
index 0000000..0e534cb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_string_rule_item_operator.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_string_rule_item_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list string rule item operators.
+type UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator int32
+
+const (
+	// Not specified.
+	UserListStringRuleItemOperatorEnum_UNSPECIFIED UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListStringRuleItemOperatorEnum_UNKNOWN UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 1
+	// Contains.
+	UserListStringRuleItemOperatorEnum_CONTAINS UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 2
+	// Equals.
+	UserListStringRuleItemOperatorEnum_EQUALS UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 3
+	// Starts with.
+	UserListStringRuleItemOperatorEnum_STARTS_WITH UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 4
+	// Ends with.
+	UserListStringRuleItemOperatorEnum_ENDS_WITH UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 5
+	// Not equals.
+	UserListStringRuleItemOperatorEnum_NOT_EQUALS UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 6
+	// Not contains.
+	UserListStringRuleItemOperatorEnum_NOT_CONTAINS UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 7
+	// Not starts with.
+	UserListStringRuleItemOperatorEnum_NOT_STARTS_WITH UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 8
+	// Not ends with.
+	UserListStringRuleItemOperatorEnum_NOT_ENDS_WITH UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator = 9
+)
+
+var UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CONTAINS",
+	3: "EQUALS",
+	4: "STARTS_WITH",
+	5: "ENDS_WITH",
+	6: "NOT_EQUALS",
+	7: "NOT_CONTAINS",
+	8: "NOT_STARTS_WITH",
+	9: "NOT_ENDS_WITH",
+}
+
+var UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"CONTAINS":        2,
+	"EQUALS":          3,
+	"STARTS_WITH":     4,
+	"ENDS_WITH":       5,
+	"NOT_EQUALS":      6,
+	"NOT_CONTAINS":    7,
+	"NOT_STARTS_WITH": 8,
+	"NOT_ENDS_WITH":   9,
+}
+
+func (x UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator) String() string {
+	return proto.EnumName(UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator_name, int32(x))
+}
+
+func (UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_31510c4974875989, []int{0, 0}
+}
+
+// Supported rule operator for string type.
+type UserListStringRuleItemOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListStringRuleItemOperatorEnum) Reset()         { *m = UserListStringRuleItemOperatorEnum{} }
+func (m *UserListStringRuleItemOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListStringRuleItemOperatorEnum) ProtoMessage()    {}
+func (*UserListStringRuleItemOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_31510c4974875989, []int{0}
+}
+
+func (m *UserListStringRuleItemOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListStringRuleItemOperatorEnum.Unmarshal(m, b)
+}
+func (m *UserListStringRuleItemOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListStringRuleItemOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListStringRuleItemOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListStringRuleItemOperatorEnum.Merge(m, src)
+}
+func (m *UserListStringRuleItemOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListStringRuleItemOperatorEnum.Size(m)
+}
+func (m *UserListStringRuleItemOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListStringRuleItemOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListStringRuleItemOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator", UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator_name, UserListStringRuleItemOperatorEnum_UserListStringRuleItemOperator_value)
+	proto.RegisterType((*UserListStringRuleItemOperatorEnum)(nil), "google.ads.googleads.v3.enums.UserListStringRuleItemOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_string_rule_item_operator.proto", fileDescriptor_31510c4974875989)
+}
+
+var fileDescriptor_31510c4974875989 = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x8e, 0xd3, 0x30,
+	0x10, 0x25, 0x59, 0xe8, 0xee, 0x7a, 0x77, 0xd9, 0x60, 0x6e, 0x88, 0x45, 0xda, 0x72, 0x77, 0x0e,
+	0xb9, 0x99, 0x93, 0xdb, 0x86, 0x12, 0x51, 0x39, 0xa5, 0x49, 0x5a, 0x09, 0x45, 0x8a, 0x02, 0xb1,
+	0xa2, 0x48, 0x89, 0x1d, 0xd9, 0x4e, 0x3f, 0x88, 0x23, 0x9f, 0xc1, 0x91, 0x3f, 0x81, 0x2f, 0xe0,
+	0x88, 0xe2, 0xa4, 0x11, 0x17, 0x7a, 0x89, 0xde, 0xcc, 0xbc, 0xf7, 0x26, 0x7e, 0x03, 0xd6, 0xa5,
+	0x10, 0x65, 0xcd, 0xdc, 0xbc, 0x50, 0xee, 0x00, 0x7b, 0x74, 0xf4, 0x5c, 0xc6, 0xbb, 0x46, 0xb9,
+	0x9d, 0x62, 0x32, 0xab, 0x2b, 0xa5, 0x33, 0xa5, 0x65, 0xc5, 0xcb, 0x4c, 0x76, 0x35, 0xcb, 0x2a,
+	0xcd, 0x9a, 0x4c, 0xb4, 0x4c, 0xe6, 0x5a, 0x48, 0xd4, 0x4a, 0xa1, 0x05, 0x7c, 0x18, 0xd4, 0x28,
+	0x2f, 0x14, 0x9a, 0x8c, 0xd0, 0xd1, 0x43, 0xc6, 0xe8, 0xd5, 0xeb, 0xd3, 0x9e, 0xb6, 0x72, 0x73,
+	0xce, 0x85, 0xce, 0x75, 0x25, 0xb8, 0x1a, 0xc4, 0xf3, 0x5f, 0x16, 0x98, 0x27, 0x8a, 0xc9, 0x4d,
+	0xa5, 0x74, 0x64, 0x16, 0xed, 0xba, 0x9a, 0x05, 0x9a, 0x35, 0xe1, 0xb8, 0xc5, 0xe7, 0x5d, 0x33,
+	0xff, 0x61, 0x81, 0x37, 0xe7, 0x69, 0xf0, 0x1e, 0xdc, 0x24, 0x34, 0xda, 0xfa, 0xcb, 0xe0, 0x7d,
+	0xe0, 0xaf, 0x9c, 0x27, 0xf0, 0x06, 0x5c, 0x26, 0xf4, 0x23, 0x0d, 0x0f, 0xd4, 0xb1, 0xe0, 0x2d,
+	0xb8, 0x5a, 0x86, 0x34, 0x26, 0x01, 0x8d, 0x1c, 0x1b, 0x02, 0x30, 0xf3, 0x3f, 0x25, 0x64, 0x13,
+	0x39, 0x17, 0xbd, 0x2e, 0x8a, 0xc9, 0x2e, 0x8e, 0xb2, 0x43, 0x10, 0x7f, 0x70, 0x9e, 0xc2, 0x3b,
+	0x70, 0xed, 0xd3, 0xd5, 0x58, 0x3e, 0x83, 0xcf, 0x01, 0xa0, 0x61, 0x9c, 0x8d, 0xfc, 0x19, 0x74,
+	0xc0, 0x6d, 0x5f, 0x4f, 0x6e, 0x97, 0xf0, 0x25, 0xb8, 0xef, 0x3b, 0xff, 0xba, 0x5c, 0xc1, 0x17,
+	0xe0, 0xce, 0xc8, 0x26, 0xa7, 0xeb, 0xc5, 0x1f, 0x0b, 0x3c, 0x7e, 0x15, 0x0d, 0x3a, 0x9b, 0xd7,
+	0xe2, 0xed, 0xf9, 0x77, 0x6e, 0xfb, 0xd8, 0xb6, 0xd6, 0xe7, 0xc5, 0xe8, 0x52, 0x8a, 0x3a, 0xe7,
+	0x25, 0x12, 0xb2, 0x74, 0x4b, 0xc6, 0x4d, 0xa8, 0xa7, 0x73, 0xb6, 0x95, 0xfa, 0xcf, 0x75, 0xdf,
+	0x99, 0xef, 0x37, 0xfb, 0x62, 0x4d, 0xc8, 0x77, 0xfb, 0x61, 0x3d, 0x58, 0x91, 0x42, 0xa1, 0x01,
+	0xf6, 0x68, 0xef, 0xa1, 0x3e, 0x7a, 0xf5, 0xf3, 0x34, 0x4f, 0x49, 0xa1, 0xd2, 0x69, 0x9e, 0xee,
+	0xbd, 0xd4, 0xcc, 0x7f, 0xdb, 0x8f, 0x43, 0x13, 0x63, 0x52, 0x28, 0x8c, 0x27, 0x06, 0xc6, 0x7b,
+	0x0f, 0x63, 0xc3, 0xf9, 0x32, 0x33, 0x3f, 0xe6, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x64, 0xad,
+	0x35, 0xa5, 0x75, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/user_list_type.pb.go b/googleapis/ads/googleads/v3/enums/user_list_type.pb.go
new file mode 100644
index 0000000..d0d18b3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/user_list_type.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/user_list_type.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum containing possible user list types.
+type UserListTypeEnum_UserListType int32
+
+const (
+	// Not specified.
+	UserListTypeEnum_UNSPECIFIED UserListTypeEnum_UserListType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListTypeEnum_UNKNOWN UserListTypeEnum_UserListType = 1
+	// UserList represented as a collection of conversion types.
+	UserListTypeEnum_REMARKETING UserListTypeEnum_UserListType = 2
+	// UserList represented as a combination of other user lists/interests.
+	UserListTypeEnum_LOGICAL UserListTypeEnum_UserListType = 3
+	// UserList created in the Google Ad Manager platform.
+	UserListTypeEnum_EXTERNAL_REMARKETING UserListTypeEnum_UserListType = 4
+	// UserList associated with a rule.
+	UserListTypeEnum_RULE_BASED UserListTypeEnum_UserListType = 5
+	// UserList with users similar to users of another UserList.
+	UserListTypeEnum_SIMILAR UserListTypeEnum_UserListType = 6
+	// UserList of first-party CRM data provided by advertiser in the form of
+	// emails or other formats.
+	UserListTypeEnum_CRM_BASED UserListTypeEnum_UserListType = 7
+)
+
+var UserListTypeEnum_UserListType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REMARKETING",
+	3: "LOGICAL",
+	4: "EXTERNAL_REMARKETING",
+	5: "RULE_BASED",
+	6: "SIMILAR",
+	7: "CRM_BASED",
+}
+
+var UserListTypeEnum_UserListType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"REMARKETING":          2,
+	"LOGICAL":              3,
+	"EXTERNAL_REMARKETING": 4,
+	"RULE_BASED":           5,
+	"SIMILAR":              6,
+	"CRM_BASED":            7,
+}
+
+func (x UserListTypeEnum_UserListType) String() string {
+	return proto.EnumName(UserListTypeEnum_UserListType_name, int32(x))
+}
+
+func (UserListTypeEnum_UserListType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a7a482e427775cd4, []int{0, 0}
+}
+
+// The user list types.
+type UserListTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListTypeEnum) Reset()         { *m = UserListTypeEnum{} }
+func (m *UserListTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListTypeEnum) ProtoMessage()    {}
+func (*UserListTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a7a482e427775cd4, []int{0}
+}
+
+func (m *UserListTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListTypeEnum.Unmarshal(m, b)
+}
+func (m *UserListTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListTypeEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListTypeEnum.Merge(m, src)
+}
+func (m *UserListTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListTypeEnum.Size(m)
+}
+func (m *UserListTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.UserListTypeEnum_UserListType", UserListTypeEnum_UserListType_name, UserListTypeEnum_UserListType_value)
+	proto.RegisterType((*UserListTypeEnum)(nil), "google.ads.googleads.v3.enums.UserListTypeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/user_list_type.proto", fileDescriptor_a7a482e427775cd4)
+}
+
+var fileDescriptor_a7a482e427775cd4 = []byte{
+	// 358 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0xbf, 0xa4, 0x9f, 0x2d, 0x4e, 0xfd, 0x13, 0x83, 0x0b, 0x11, 0xbb, 0x68, 0x1f, 0x60,
+	0x02, 0x66, 0x37, 0xae, 0x26, 0xed, 0x18, 0x42, 0xd3, 0xb4, 0xa4, 0x4d, 0x15, 0x09, 0x84, 0x68,
+	0x86, 0x10, 0x68, 0x67, 0x42, 0x26, 0x2d, 0xf4, 0x2d, 0x7c, 0x06, 0xc1, 0x8d, 0x8f, 0xe2, 0x83,
+	0xb8, 0xf0, 0x29, 0x64, 0x92, 0xb6, 0x74, 0xa3, 0x9b, 0xe1, 0x30, 0xbf, 0x73, 0x2e, 0xf7, 0x1e,
+	0x70, 0x9b, 0x72, 0x9e, 0x2e, 0xa8, 0x11, 0x27, 0xc2, 0xa8, 0xa5, 0x54, 0x6b, 0xd3, 0xa0, 0x6c,
+	0xb5, 0x14, 0xc6, 0x4a, 0xd0, 0x22, 0x5a, 0x64, 0xa2, 0x8c, 0xca, 0x4d, 0x4e, 0x61, 0x5e, 0xf0,
+	0x92, 0xeb, 0x9d, 0xda, 0x08, 0xe3, 0x44, 0xc0, 0x7d, 0x06, 0xae, 0x4d, 0x58, 0x65, 0xae, 0x6f,
+	0x76, 0x23, 0xf3, 0xcc, 0x88, 0x19, 0xe3, 0x65, 0x5c, 0x66, 0x9c, 0x89, 0x3a, 0xdc, 0x7b, 0x57,
+	0x80, 0x16, 0x08, 0x5a, 0xb8, 0x99, 0x28, 0x67, 0x9b, 0x9c, 0x12, 0xb6, 0x5a, 0xf6, 0x5e, 0x15,
+	0x70, 0x72, 0xf8, 0xa9, 0x9f, 0x83, 0x76, 0xe0, 0x4d, 0x27, 0xa4, 0xef, 0xdc, 0x3b, 0x64, 0xa0,
+	0xfd, 0xd3, 0xdb, 0xa0, 0x15, 0x78, 0x43, 0x6f, 0xfc, 0xe0, 0x69, 0x8a, 0xa4, 0x3e, 0x19, 0x61,
+	0x7f, 0x48, 0x66, 0x8e, 0x67, 0x6b, 0xaa, 0xa4, 0xee, 0xd8, 0x76, 0xfa, 0xd8, 0xd5, 0x1a, 0xfa,
+	0x15, 0xb8, 0x24, 0x8f, 0x33, 0xe2, 0x7b, 0xd8, 0x8d, 0x0e, 0x6d, 0xff, 0xf5, 0x33, 0x00, 0xfc,
+	0xc0, 0x25, 0x91, 0x85, 0xa7, 0x64, 0xa0, 0x1d, 0xc9, 0xd8, 0xd4, 0x19, 0x39, 0x2e, 0xf6, 0xb5,
+	0xa6, 0x7e, 0x0a, 0x8e, 0xfb, 0xfe, 0x68, 0xcb, 0x5a, 0xd6, 0x97, 0x02, 0xba, 0x2f, 0x7c, 0x09,
+	0xff, 0xbc, 0xd5, 0xba, 0x38, 0xdc, 0x7a, 0x22, 0x0f, 0x9c, 0x28, 0x4f, 0xd6, 0x36, 0x93, 0xf2,
+	0x45, 0xcc, 0x52, 0xc8, 0x8b, 0xd4, 0x48, 0x29, 0xab, 0xce, 0xdf, 0x75, 0x9c, 0x67, 0xe2, 0x97,
+	0xca, 0xef, 0xaa, 0xf7, 0x4d, 0x6d, 0xd8, 0x18, 0x7f, 0xa8, 0x1d, 0xbb, 0x1e, 0x85, 0x13, 0x01,
+	0x6b, 0x29, 0xd5, 0xdc, 0x84, 0xb2, 0x36, 0xf1, 0xb9, 0xe3, 0x21, 0x4e, 0x44, 0xb8, 0xe7, 0xe1,
+	0xdc, 0x0c, 0x2b, 0xfe, 0xad, 0x76, 0xeb, 0x4f, 0x84, 0x70, 0x22, 0x10, 0xda, 0x3b, 0x10, 0x9a,
+	0x9b, 0x08, 0x55, 0x9e, 0xe7, 0x66, 0xb5, 0x98, 0xf9, 0x13, 0x00, 0x00, 0xff, 0xff, 0x88, 0xce,
+	0x94, 0x82, 0x0a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/vanity_pharma_display_url_mode.pb.go b/googleapis/ads/googleads/v3/enums/vanity_pharma_display_url_mode.pb.go
new file mode 100644
index 0000000..432d0b3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/vanity_pharma_display_url_mode.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/vanity_pharma_display_url_mode.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible display modes for vanity pharma URLs.
+type VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode int32
+
+const (
+	// Not specified.
+	VanityPharmaDisplayUrlModeEnum_UNSPECIFIED VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	VanityPharmaDisplayUrlModeEnum_UNKNOWN VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode = 1
+	// Replace vanity pharma URL with manufacturer website url.
+	VanityPharmaDisplayUrlModeEnum_MANUFACTURER_WEBSITE_URL VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode = 2
+	// Replace vanity pharma URL with description of the website.
+	VanityPharmaDisplayUrlModeEnum_WEBSITE_DESCRIPTION VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode = 3
+)
+
+var VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MANUFACTURER_WEBSITE_URL",
+	3: "WEBSITE_DESCRIPTION",
+}
+
+var VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"MANUFACTURER_WEBSITE_URL": 2,
+	"WEBSITE_DESCRIPTION":      3,
+}
+
+func (x VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode) String() string {
+	return proto.EnumName(VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode_name, int32(x))
+}
+
+func (VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9a51a1ab460d19ab, []int{0, 0}
+}
+
+// The display mode for vanity pharma URLs.
+type VanityPharmaDisplayUrlModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VanityPharmaDisplayUrlModeEnum) Reset()         { *m = VanityPharmaDisplayUrlModeEnum{} }
+func (m *VanityPharmaDisplayUrlModeEnum) String() string { return proto.CompactTextString(m) }
+func (*VanityPharmaDisplayUrlModeEnum) ProtoMessage()    {}
+func (*VanityPharmaDisplayUrlModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9a51a1ab460d19ab, []int{0}
+}
+
+func (m *VanityPharmaDisplayUrlModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VanityPharmaDisplayUrlModeEnum.Unmarshal(m, b)
+}
+func (m *VanityPharmaDisplayUrlModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VanityPharmaDisplayUrlModeEnum.Marshal(b, m, deterministic)
+}
+func (m *VanityPharmaDisplayUrlModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VanityPharmaDisplayUrlModeEnum.Merge(m, src)
+}
+func (m *VanityPharmaDisplayUrlModeEnum) XXX_Size() int {
+	return xxx_messageInfo_VanityPharmaDisplayUrlModeEnum.Size(m)
+}
+func (m *VanityPharmaDisplayUrlModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_VanityPharmaDisplayUrlModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VanityPharmaDisplayUrlModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode", VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode_name, VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode_value)
+	proto.RegisterType((*VanityPharmaDisplayUrlModeEnum)(nil), "google.ads.googleads.v3.enums.VanityPharmaDisplayUrlModeEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/vanity_pharma_display_url_mode.proto", fileDescriptor_9a51a1ab460d19ab)
+}
+
+var fileDescriptor_9a51a1ab460d19ab = []byte{
+	// 345 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0x41, 0x4e, 0x83, 0x40,
+	0x14, 0x15, 0x9a, 0x68, 0x32, 0x5d, 0x48, 0x70, 0xa1, 0x69, 0x5a, 0x4d, 0x7b, 0x80, 0x61, 0xc1,
+	0x6e, 0x5c, 0x41, 0x4b, 0x1b, 0xa2, 0xa5, 0x84, 0x16, 0x9a, 0x18, 0x12, 0x32, 0x3a, 0x04, 0x49,
+	0x60, 0x06, 0x19, 0xda, 0xa4, 0xe7, 0xf0, 0x06, 0x2e, 0x3d, 0x8a, 0x47, 0x71, 0xed, 0x01, 0x0c,
+	0x33, 0xd2, 0x5d, 0xdd, 0x4c, 0x5e, 0xe6, 0xbf, 0xff, 0xde, 0x7f, 0x0f, 0xd8, 0x19, 0x63, 0x59,
+	0x91, 0x1a, 0x98, 0x70, 0x43, 0xc2, 0x16, 0xed, 0x4d, 0x23, 0xa5, 0xbb, 0x92, 0x1b, 0x7b, 0x4c,
+	0xf3, 0xe6, 0x90, 0x54, 0xaf, 0xb8, 0x2e, 0x71, 0x42, 0x72, 0x5e, 0x15, 0xf8, 0x90, 0xec, 0xea,
+	0x22, 0x29, 0x19, 0x49, 0x61, 0x55, 0xb3, 0x86, 0xe9, 0x23, 0xb9, 0x08, 0x31, 0xe1, 0xf0, 0xa8,
+	0x01, 0xf7, 0x26, 0x14, 0x1a, 0x83, 0x61, 0x67, 0x51, 0xe5, 0x06, 0xa6, 0x94, 0x35, 0xb8, 0xc9,
+	0x19, 0xe5, 0x72, 0x79, 0xf2, 0xae, 0x80, 0xdb, 0x48, 0xb8, 0xf8, 0xc2, 0x64, 0x26, 0x3d, 0xc2,
+	0xba, 0x58, 0x32, 0x92, 0x3a, 0x74, 0x57, 0x4e, 0xde, 0xc0, 0xe0, 0x34, 0x43, 0xbf, 0x04, 0xfd,
+	0xd0, 0x5b, 0xfb, 0xce, 0xd4, 0x9d, 0xbb, 0xce, 0x4c, 0x3b, 0xd3, 0xfb, 0xe0, 0x22, 0xf4, 0x1e,
+	0xbc, 0xd5, 0xd6, 0xd3, 0x14, 0x7d, 0x08, 0x6e, 0x96, 0x96, 0x17, 0xce, 0xad, 0xe9, 0x26, 0x0c,
+	0x9c, 0x20, 0xd9, 0x3a, 0xf6, 0xda, 0xdd, 0x38, 0x49, 0x18, 0x3c, 0x6a, 0xaa, 0x7e, 0x0d, 0xae,
+	0xba, 0x8f, 0x99, 0xb3, 0x9e, 0x06, 0xae, 0xbf, 0x71, 0x57, 0x9e, 0xd6, 0xb3, 0x7f, 0x14, 0x30,
+	0x7e, 0x61, 0x25, 0xfc, 0x37, 0x99, 0x7d, 0x77, 0xfa, 0x2c, 0xbf, 0x0d, 0xe7, 0x2b, 0x4f, 0x7f,
+	0xfd, 0xc2, 0x8c, 0x15, 0x98, 0x66, 0x90, 0xd5, 0x99, 0x91, 0xa5, 0x54, 0x44, 0xef, 0xfa, 0xae,
+	0x72, 0x7e, 0xa2, 0xfe, 0x7b, 0xf1, 0x7e, 0xa8, 0xbd, 0x85, 0x65, 0x7d, 0xaa, 0xa3, 0x85, 0x94,
+	0xb2, 0x08, 0x87, 0x12, 0xb6, 0x28, 0x32, 0x61, 0x5b, 0x12, 0xff, 0xea, 0xe6, 0xb1, 0x45, 0x78,
+	0x7c, 0x9c, 0xc7, 0x91, 0x19, 0x8b, 0xf9, 0xb7, 0x3a, 0x96, 0x9f, 0x08, 0x59, 0x84, 0x23, 0x74,
+	0x64, 0x20, 0x14, 0x99, 0x08, 0x09, 0xce, 0xf3, 0xb9, 0x38, 0xcc, 0xfc, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0x72, 0x7b, 0xcd, 0xdf, 0x16, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/vanity_pharma_text.pb.go b/googleapis/ads/googleads/v3/enums/vanity_pharma_text.pb.go
new file mode 100644
index 0000000..83f4dc5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/vanity_pharma_text.pb.go
@@ -0,0 +1,178 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/vanity_pharma_text.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible text.
+type VanityPharmaTextEnum_VanityPharmaText int32
+
+const (
+	// Not specified.
+	VanityPharmaTextEnum_UNSPECIFIED VanityPharmaTextEnum_VanityPharmaText = 0
+	// Used for return value only. Represents value unknown in this version.
+	VanityPharmaTextEnum_UNKNOWN VanityPharmaTextEnum_VanityPharmaText = 1
+	// Prescription treatment website with website content in English.
+	VanityPharmaTextEnum_PRESCRIPTION_TREATMENT_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 2
+	// Prescription treatment website with website content in Spanish
+	// (Sitio de tratamientos con receta).
+	VanityPharmaTextEnum_PRESCRIPTION_TREATMENT_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 3
+	// Prescription device website with website content in English.
+	VanityPharmaTextEnum_PRESCRIPTION_DEVICE_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 4
+	// Prescription device website with website content in Spanish (Sitio de
+	// dispositivos con receta).
+	VanityPharmaTextEnum_PRESCRIPTION_DEVICE_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 5
+	// Medical device website with website content in English.
+	VanityPharmaTextEnum_MEDICAL_DEVICE_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 6
+	// Medical device website with website content in Spanish (Sitio de
+	// dispositivos médicos).
+	VanityPharmaTextEnum_MEDICAL_DEVICE_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 7
+	// Preventative treatment website with website content in English.
+	VanityPharmaTextEnum_PREVENTATIVE_TREATMENT_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 8
+	// Preventative treatment website with website content in Spanish (Sitio de
+	// tratamientos preventivos).
+	VanityPharmaTextEnum_PREVENTATIVE_TREATMENT_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 9
+	// Prescription contraception website with website content in English.
+	VanityPharmaTextEnum_PRESCRIPTION_CONTRACEPTION_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 10
+	// Prescription contraception website with website content in Spanish (Sitio
+	// de anticonceptivos con receta).
+	VanityPharmaTextEnum_PRESCRIPTION_CONTRACEPTION_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 11
+	// Prescription vaccine website with website content in English.
+	VanityPharmaTextEnum_PRESCRIPTION_VACCINE_WEBSITE_EN VanityPharmaTextEnum_VanityPharmaText = 12
+	// Prescription vaccine website with website content in Spanish (Sitio de
+	// vacunas con receta).
+	VanityPharmaTextEnum_PRESCRIPTION_VACCINE_WEBSITE_ES VanityPharmaTextEnum_VanityPharmaText = 13
+)
+
+var VanityPharmaTextEnum_VanityPharmaText_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PRESCRIPTION_TREATMENT_WEBSITE_EN",
+	3:  "PRESCRIPTION_TREATMENT_WEBSITE_ES",
+	4:  "PRESCRIPTION_DEVICE_WEBSITE_EN",
+	5:  "PRESCRIPTION_DEVICE_WEBSITE_ES",
+	6:  "MEDICAL_DEVICE_WEBSITE_EN",
+	7:  "MEDICAL_DEVICE_WEBSITE_ES",
+	8:  "PREVENTATIVE_TREATMENT_WEBSITE_EN",
+	9:  "PREVENTATIVE_TREATMENT_WEBSITE_ES",
+	10: "PRESCRIPTION_CONTRACEPTION_WEBSITE_EN",
+	11: "PRESCRIPTION_CONTRACEPTION_WEBSITE_ES",
+	12: "PRESCRIPTION_VACCINE_WEBSITE_EN",
+	13: "PRESCRIPTION_VACCINE_WEBSITE_ES",
+}
+
+var VanityPharmaTextEnum_VanityPharmaText_value = map[string]int32{
+	"UNSPECIFIED":                           0,
+	"UNKNOWN":                               1,
+	"PRESCRIPTION_TREATMENT_WEBSITE_EN":     2,
+	"PRESCRIPTION_TREATMENT_WEBSITE_ES":     3,
+	"PRESCRIPTION_DEVICE_WEBSITE_EN":        4,
+	"PRESCRIPTION_DEVICE_WEBSITE_ES":        5,
+	"MEDICAL_DEVICE_WEBSITE_EN":             6,
+	"MEDICAL_DEVICE_WEBSITE_ES":             7,
+	"PREVENTATIVE_TREATMENT_WEBSITE_EN":     8,
+	"PREVENTATIVE_TREATMENT_WEBSITE_ES":     9,
+	"PRESCRIPTION_CONTRACEPTION_WEBSITE_EN": 10,
+	"PRESCRIPTION_CONTRACEPTION_WEBSITE_ES": 11,
+	"PRESCRIPTION_VACCINE_WEBSITE_EN":       12,
+	"PRESCRIPTION_VACCINE_WEBSITE_ES":       13,
+}
+
+func (x VanityPharmaTextEnum_VanityPharmaText) String() string {
+	return proto.EnumName(VanityPharmaTextEnum_VanityPharmaText_name, int32(x))
+}
+
+func (VanityPharmaTextEnum_VanityPharmaText) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3ab6b0da50d44ae9, []int{0, 0}
+}
+
+// The text that will be displayed in display URL of the text ad when website
+// description is the selected display mode for vanity pharma URLs.
+type VanityPharmaTextEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VanityPharmaTextEnum) Reset()         { *m = VanityPharmaTextEnum{} }
+func (m *VanityPharmaTextEnum) String() string { return proto.CompactTextString(m) }
+func (*VanityPharmaTextEnum) ProtoMessage()    {}
+func (*VanityPharmaTextEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3ab6b0da50d44ae9, []int{0}
+}
+
+func (m *VanityPharmaTextEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VanityPharmaTextEnum.Unmarshal(m, b)
+}
+func (m *VanityPharmaTextEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VanityPharmaTextEnum.Marshal(b, m, deterministic)
+}
+func (m *VanityPharmaTextEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VanityPharmaTextEnum.Merge(m, src)
+}
+func (m *VanityPharmaTextEnum) XXX_Size() int {
+	return xxx_messageInfo_VanityPharmaTextEnum.Size(m)
+}
+func (m *VanityPharmaTextEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_VanityPharmaTextEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VanityPharmaTextEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.VanityPharmaTextEnum_VanityPharmaText", VanityPharmaTextEnum_VanityPharmaText_name, VanityPharmaTextEnum_VanityPharmaText_value)
+	proto.RegisterType((*VanityPharmaTextEnum)(nil), "google.ads.googleads.v3.enums.VanityPharmaTextEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/vanity_pharma_text.proto", fileDescriptor_3ab6b0da50d44ae9)
+}
+
+var fileDescriptor_3ab6b0da50d44ae9 = []byte{
+	// 429 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6e, 0x13, 0x31,
+	0x18, 0x85, 0x49, 0x52, 0x5a, 0x70, 0x40, 0x58, 0x23, 0x58, 0x80, 0x08, 0x28, 0x41, 0x5d, 0xb0,
+	0xf1, 0x2c, 0x46, 0x62, 0x61, 0x56, 0x8e, 0x63, 0x2a, 0x0b, 0xea, 0x8c, 0x62, 0xd7, 0x95, 0x50,
+	0xa4, 0x91, 0x61, 0x46, 0x43, 0xa4, 0xc6, 0x8e, 0xe2, 0x69, 0x54, 0xce, 0xc0, 0x2d, 0x58, 0x72,
+	0x14, 0x8e, 0xd2, 0x25, 0x27, 0x40, 0xf1, 0x34, 0x51, 0x53, 0xb5, 0x4d, 0x36, 0xa3, 0x7f, 0xfc,
+	0xbe, 0xf7, 0xf4, 0xff, 0xd2, 0x03, 0x1f, 0x4a, 0xe7, 0xca, 0xb3, 0x22, 0x36, 0xb9, 0x8f, 0xeb,
+	0x71, 0x39, 0x2d, 0x92, 0xb8, 0xb0, 0xe7, 0x53, 0x1f, 0x2f, 0x8c, 0x9d, 0x54, 0x3f, 0xb3, 0xd9,
+	0x0f, 0x33, 0x9f, 0x9a, 0xac, 0x2a, 0x2e, 0x2a, 0x34, 0x9b, 0xbb, 0xca, 0x45, 0x9d, 0x1a, 0x46,
+	0x26, 0xf7, 0x68, 0xed, 0x43, 0x8b, 0x04, 0x05, 0xdf, 0xab, 0xd7, 0xab, 0xd8, 0xd9, 0x24, 0x36,
+	0xd6, 0xba, 0xca, 0x54, 0x13, 0x67, 0x7d, 0x6d, 0xee, 0xfd, 0xda, 0x03, 0xcf, 0x75, 0x48, 0x4e,
+	0x43, 0xb0, 0x2a, 0x2e, 0x2a, 0x66, 0xcf, 0xa7, 0xbd, 0x7f, 0x2d, 0x00, 0x6f, 0x0a, 0xd1, 0x33,
+	0xd0, 0x3e, 0x11, 0x32, 0x65, 0x94, 0x7f, 0xe2, 0x6c, 0x00, 0x1f, 0x44, 0x6d, 0x70, 0x70, 0x22,
+	0x3e, 0x8b, 0xe1, 0xa9, 0x80, 0x8d, 0xe8, 0x10, 0x74, 0xd3, 0x11, 0x93, 0x74, 0xc4, 0x53, 0xc5,
+	0x87, 0x22, 0x53, 0x23, 0x46, 0xd4, 0x31, 0x13, 0x2a, 0x3b, 0x65, 0x7d, 0xc9, 0x15, 0xcb, 0x98,
+	0x80, 0xcd, 0x5d, 0x30, 0x09, 0x5b, 0x51, 0x0f, 0xbc, 0xd9, 0xc0, 0x06, 0x4c, 0x73, 0xca, 0xae,
+	0x47, 0xed, 0x6d, 0x65, 0x24, 0x7c, 0x18, 0x75, 0xc0, 0xcb, 0x63, 0x36, 0xe0, 0x94, 0x7c, 0xb9,
+	0x25, 0x62, 0xff, 0x3e, 0x59, 0xc2, 0x83, 0xab, 0x65, 0x35, 0x13, 0x8a, 0x28, 0xae, 0xd9, 0xed,
+	0x37, 0x3d, 0xda, 0x05, 0x93, 0xf0, 0x71, 0xf4, 0x1e, 0x1c, 0x6e, 0xec, 0x4b, 0x87, 0x42, 0x8d,
+	0x08, 0x65, 0xf5, 0xdf, 0xb5, 0x44, 0xb0, 0x2b, 0x2a, 0x61, 0x3b, 0x7a, 0x07, 0xde, 0x6e, 0xa0,
+	0x9a, 0x50, 0xca, 0xc5, 0xc6, 0x9d, 0x4f, 0xb6, 0x43, 0x12, 0x3e, 0xed, 0x5f, 0x36, 0x40, 0xf7,
+	0xbb, 0x9b, 0xa2, 0x7b, 0x1b, 0xd5, 0x7f, 0x71, 0xb3, 0x17, 0xe9, 0xb2, 0x4a, 0x69, 0xe3, 0x6b,
+	0xff, 0xca, 0x57, 0xba, 0x33, 0x63, 0x4b, 0xe4, 0xe6, 0x65, 0x5c, 0x16, 0x36, 0x14, 0x6d, 0xd5,
+	0xe8, 0xd9, 0xc4, 0xdf, 0x51, 0xf0, 0x8f, 0xe1, 0xfb, 0xbb, 0xd9, 0x3a, 0x22, 0xe4, 0x4f, 0xb3,
+	0x73, 0x54, 0x47, 0x91, 0xdc, 0xa3, 0x7a, 0x5c, 0x4e, 0x3a, 0x41, 0xcb, 0x72, 0xfa, 0xbf, 0x2b,
+	0x7d, 0x4c, 0x72, 0x3f, 0x5e, 0xeb, 0x63, 0x9d, 0x8c, 0x83, 0x7e, 0xd9, 0xec, 0xd6, 0x8f, 0x18,
+	0x93, 0xdc, 0x63, 0xbc, 0x26, 0x30, 0xd6, 0x09, 0xc6, 0x81, 0xf9, 0xb6, 0x1f, 0x16, 0x4b, 0xfe,
+	0x07, 0x00, 0x00, 0xff, 0xff, 0x34, 0x69, 0x54, 0xfc, 0x78, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/webpage_condition_operand.pb.go b/googleapis/ads/googleads/v3/enums/webpage_condition_operand.pb.go
new file mode 100644
index 0000000..e964ce3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/webpage_condition_operand.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/webpage_condition_operand.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The webpage condition operand in webpage criterion.
+type WebpageConditionOperandEnum_WebpageConditionOperand int32
+
+const (
+	// Not specified.
+	WebpageConditionOperandEnum_UNSPECIFIED WebpageConditionOperandEnum_WebpageConditionOperand = 0
+	// Used for return value only. Represents value unknown in this version.
+	WebpageConditionOperandEnum_UNKNOWN WebpageConditionOperandEnum_WebpageConditionOperand = 1
+	// Operand denoting a webpage URL targeting condition.
+	WebpageConditionOperandEnum_URL WebpageConditionOperandEnum_WebpageConditionOperand = 2
+	// Operand denoting a webpage category targeting condition.
+	WebpageConditionOperandEnum_CATEGORY WebpageConditionOperandEnum_WebpageConditionOperand = 3
+	// Operand denoting a webpage title targeting condition.
+	WebpageConditionOperandEnum_PAGE_TITLE WebpageConditionOperandEnum_WebpageConditionOperand = 4
+	// Operand denoting a webpage content targeting condition.
+	WebpageConditionOperandEnum_PAGE_CONTENT WebpageConditionOperandEnum_WebpageConditionOperand = 5
+	// Operand denoting a webpage custom label targeting condition.
+	WebpageConditionOperandEnum_CUSTOM_LABEL WebpageConditionOperandEnum_WebpageConditionOperand = 6
+)
+
+var WebpageConditionOperandEnum_WebpageConditionOperand_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "URL",
+	3: "CATEGORY",
+	4: "PAGE_TITLE",
+	5: "PAGE_CONTENT",
+	6: "CUSTOM_LABEL",
+}
+
+var WebpageConditionOperandEnum_WebpageConditionOperand_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"URL":          2,
+	"CATEGORY":     3,
+	"PAGE_TITLE":   4,
+	"PAGE_CONTENT": 5,
+	"CUSTOM_LABEL": 6,
+}
+
+func (x WebpageConditionOperandEnum_WebpageConditionOperand) String() string {
+	return proto.EnumName(WebpageConditionOperandEnum_WebpageConditionOperand_name, int32(x))
+}
+
+func (WebpageConditionOperandEnum_WebpageConditionOperand) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_32e8eb751efc1016, []int{0, 0}
+}
+
+// Container for enum describing webpage condition operand in webpage criterion.
+type WebpageConditionOperandEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *WebpageConditionOperandEnum) Reset()         { *m = WebpageConditionOperandEnum{} }
+func (m *WebpageConditionOperandEnum) String() string { return proto.CompactTextString(m) }
+func (*WebpageConditionOperandEnum) ProtoMessage()    {}
+func (*WebpageConditionOperandEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_32e8eb751efc1016, []int{0}
+}
+
+func (m *WebpageConditionOperandEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WebpageConditionOperandEnum.Unmarshal(m, b)
+}
+func (m *WebpageConditionOperandEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WebpageConditionOperandEnum.Marshal(b, m, deterministic)
+}
+func (m *WebpageConditionOperandEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WebpageConditionOperandEnum.Merge(m, src)
+}
+func (m *WebpageConditionOperandEnum) XXX_Size() int {
+	return xxx_messageInfo_WebpageConditionOperandEnum.Size(m)
+}
+func (m *WebpageConditionOperandEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_WebpageConditionOperandEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WebpageConditionOperandEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.WebpageConditionOperandEnum_WebpageConditionOperand", WebpageConditionOperandEnum_WebpageConditionOperand_name, WebpageConditionOperandEnum_WebpageConditionOperand_value)
+	proto.RegisterType((*WebpageConditionOperandEnum)(nil), "google.ads.googleads.v3.enums.WebpageConditionOperandEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/webpage_condition_operand.proto", fileDescriptor_32e8eb751efc1016)
+}
+
+var fileDescriptor_32e8eb751efc1016 = []byte{
+	// 352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xc1, 0x4e, 0xc2, 0x30,
+	0x18, 0x76, 0x43, 0xc1, 0x14, 0xa2, 0xcd, 0x2e, 0x26, 0x0a, 0x07, 0x78, 0x80, 0xee, 0xb0, 0x5b,
+	0x8d, 0x87, 0x6e, 0xd6, 0x85, 0x38, 0xb7, 0x05, 0x36, 0x88, 0x66, 0xc9, 0x32, 0xd8, 0xb2, 0x2c,
+	0x81, 0x76, 0xa1, 0x80, 0x77, 0x1f, 0x85, 0xa3, 0x8f, 0xe2, 0xa3, 0x78, 0xf3, 0x0d, 0xcc, 0x56,
+	0xc7, 0x0d, 0x2f, 0xcd, 0xd7, 0xff, 0xfb, 0xbf, 0xaf, 0xff, 0xff, 0x15, 0x3c, 0xe4, 0x9c, 0xe7,
+	0xab, 0x4c, 0x4f, 0x52, 0xa1, 0x4b, 0x58, 0xa1, 0xbd, 0xa1, 0x67, 0x6c, 0xb7, 0x16, 0xfa, 0x7b,
+	0xb6, 0x28, 0x93, 0x3c, 0x8b, 0x97, 0x9c, 0xa5, 0xc5, 0xb6, 0xe0, 0x2c, 0xe6, 0x65, 0xb6, 0x49,
+	0x58, 0x8a, 0xca, 0x0d, 0xdf, 0x72, 0x6d, 0x20, 0x35, 0x28, 0x49, 0x05, 0x3a, 0xca, 0xd1, 0xde,
+	0x40, 0xb5, 0xfc, 0xb6, 0xdf, 0xb8, 0x97, 0x85, 0x9e, 0x30, 0xc6, 0xb7, 0x49, 0xe5, 0x21, 0xa4,
+	0x78, 0x74, 0x50, 0xc0, 0xdd, 0x5c, 0x3e, 0x60, 0x35, 0xfe, 0x9e, 0xb4, 0xa7, 0x6c, 0xb7, 0x1e,
+	0x7d, 0x28, 0xe0, 0xe6, 0x04, 0xaf, 0x5d, 0x83, 0x6e, 0xe8, 0x4e, 0x7d, 0x6a, 0x8d, 0x9f, 0xc6,
+	0xf4, 0x11, 0x9e, 0x69, 0x5d, 0xd0, 0x09, 0xdd, 0x67, 0xd7, 0x9b, 0xbb, 0x50, 0xd1, 0x3a, 0xa0,
+	0x15, 0x4e, 0x1c, 0xa8, 0x6a, 0x3d, 0x70, 0x69, 0x91, 0x80, 0xda, 0xde, 0xe4, 0x15, 0xb6, 0xb4,
+	0x2b, 0x00, 0x7c, 0x62, 0xd3, 0x38, 0x18, 0x07, 0x0e, 0x85, 0xe7, 0x1a, 0x04, 0xbd, 0xfa, 0x6e,
+	0x79, 0x6e, 0x40, 0xdd, 0x00, 0x5e, 0x54, 0x15, 0x2b, 0x9c, 0x06, 0xde, 0x4b, 0xec, 0x10, 0x93,
+	0x3a, 0xb0, 0x6d, 0xfe, 0x28, 0x60, 0xb8, 0xe4, 0x6b, 0xf4, 0xef, 0xa2, 0x66, 0xff, 0xc4, 0x9c,
+	0x7e, 0xb5, 0xa8, 0xaf, 0xbc, 0x99, 0x7f, 0xf2, 0x9c, 0xaf, 0x12, 0x96, 0x23, 0xbe, 0xc9, 0xf5,
+	0x3c, 0x63, 0x75, 0x0c, 0x4d, 0xec, 0x65, 0x21, 0x4e, 0xfc, 0xc2, 0x7d, 0x7d, 0x1e, 0xd4, 0x96,
+	0x4d, 0xc8, 0xa7, 0x3a, 0xb0, 0xa5, 0x15, 0x49, 0x05, 0x92, 0xb0, 0x42, 0x33, 0x03, 0x55, 0x99,
+	0x89, 0xaf, 0x86, 0x8f, 0x48, 0x2a, 0xa2, 0x23, 0x1f, 0xcd, 0x8c, 0xa8, 0xe6, 0xbf, 0xd5, 0xa1,
+	0x2c, 0x62, 0x4c, 0x52, 0x81, 0xf1, 0xb1, 0x03, 0xe3, 0x99, 0x81, 0x71, 0xdd, 0xb3, 0x68, 0xd7,
+	0x83, 0x19, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x62, 0x35, 0x73, 0x1d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/enums/webpage_condition_operator.pb.go b/googleapis/ads/googleads/v3/enums/webpage_condition_operator.pb.go
new file mode 100644
index 0000000..f6f4ed5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/enums/webpage_condition_operator.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/enums/webpage_condition_operator.proto
+
+package enums
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The webpage condition operator in webpage criterion.
+type WebpageConditionOperatorEnum_WebpageConditionOperator int32
+
+const (
+	// Not specified.
+	WebpageConditionOperatorEnum_UNSPECIFIED WebpageConditionOperatorEnum_WebpageConditionOperator = 0
+	// Used for return value only. Represents value unknown in this version.
+	WebpageConditionOperatorEnum_UNKNOWN WebpageConditionOperatorEnum_WebpageConditionOperator = 1
+	// The argument web condition is equal to the compared web condition.
+	WebpageConditionOperatorEnum_EQUALS WebpageConditionOperatorEnum_WebpageConditionOperator = 2
+	// The argument web condition is part of the compared web condition.
+	WebpageConditionOperatorEnum_CONTAINS WebpageConditionOperatorEnum_WebpageConditionOperator = 3
+)
+
+var WebpageConditionOperatorEnum_WebpageConditionOperator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EQUALS",
+	3: "CONTAINS",
+}
+
+var WebpageConditionOperatorEnum_WebpageConditionOperator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EQUALS":      2,
+	"CONTAINS":    3,
+}
+
+func (x WebpageConditionOperatorEnum_WebpageConditionOperator) String() string {
+	return proto.EnumName(WebpageConditionOperatorEnum_WebpageConditionOperator_name, int32(x))
+}
+
+func (WebpageConditionOperatorEnum_WebpageConditionOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b4b44426ec5939a0, []int{0, 0}
+}
+
+// Container for enum describing webpage condition operator in webpage
+// criterion.
+type WebpageConditionOperatorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *WebpageConditionOperatorEnum) Reset()         { *m = WebpageConditionOperatorEnum{} }
+func (m *WebpageConditionOperatorEnum) String() string { return proto.CompactTextString(m) }
+func (*WebpageConditionOperatorEnum) ProtoMessage()    {}
+func (*WebpageConditionOperatorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b44426ec5939a0, []int{0}
+}
+
+func (m *WebpageConditionOperatorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WebpageConditionOperatorEnum.Unmarshal(m, b)
+}
+func (m *WebpageConditionOperatorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WebpageConditionOperatorEnum.Marshal(b, m, deterministic)
+}
+func (m *WebpageConditionOperatorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WebpageConditionOperatorEnum.Merge(m, src)
+}
+func (m *WebpageConditionOperatorEnum) XXX_Size() int {
+	return xxx_messageInfo_WebpageConditionOperatorEnum.Size(m)
+}
+func (m *WebpageConditionOperatorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_WebpageConditionOperatorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WebpageConditionOperatorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.enums.WebpageConditionOperatorEnum_WebpageConditionOperator", WebpageConditionOperatorEnum_WebpageConditionOperator_name, WebpageConditionOperatorEnum_WebpageConditionOperator_value)
+	proto.RegisterType((*WebpageConditionOperatorEnum)(nil), "google.ads.googleads.v3.enums.WebpageConditionOperatorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/enums/webpage_condition_operator.proto", fileDescriptor_b4b44426ec5939a0)
+}
+
+var fileDescriptor_b4b44426ec5939a0 = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xc1, 0x6a, 0x32, 0x31,
+	0x18, 0xfc, 0x5d, 0xc1, 0xbf, 0xc4, 0x42, 0x97, 0x3d, 0x95, 0xa2, 0x07, 0x7d, 0x80, 0xec, 0x21,
+	0xb7, 0x14, 0x0a, 0xd1, 0x6e, 0x45, 0x5a, 0xa2, 0xad, 0x55, 0xa1, 0x2c, 0x48, 0x34, 0x21, 0x2c,
+	0x68, 0xbe, 0x65, 0xb3, 0xda, 0xf7, 0xe9, 0xb1, 0x8f, 0xd2, 0x47, 0xe9, 0xb1, 0x4f, 0x50, 0x36,
+	0x71, 0xbd, 0xd9, 0x4b, 0x18, 0x32, 0xdf, 0xcc, 0x37, 0xdf, 0xa0, 0x3b, 0x0d, 0xa0, 0xb7, 0x2a,
+	0x16, 0xd2, 0xc6, 0x1e, 0x56, 0xe8, 0x40, 0x62, 0x65, 0xf6, 0x3b, 0x1b, 0xbf, 0xab, 0x75, 0x2e,
+	0xb4, 0x5a, 0x6d, 0xc0, 0xc8, 0xac, 0xcc, 0xc0, 0xac, 0x20, 0x57, 0x85, 0x28, 0xa1, 0xc0, 0x79,
+	0x01, 0x25, 0x44, 0x5d, 0x2f, 0xc2, 0x42, 0x5a, 0x7c, 0xd2, 0xe3, 0x03, 0xc1, 0x4e, 0x7f, 0xd3,
+	0xa9, 0xed, 0xf3, 0x2c, 0x16, 0xc6, 0x40, 0x29, 0x2a, 0x13, 0xeb, 0xc5, 0xfd, 0x02, 0x75, 0x96,
+	0x7e, 0xc1, 0xb0, 0xf6, 0x9f, 0x1c, 0xed, 0x13, 0xb3, 0xdf, 0xf5, 0x5f, 0xd0, 0xf5, 0x39, 0x3e,
+	0xba, 0x42, 0xed, 0x39, 0x9f, 0x4d, 0x93, 0xe1, 0xf8, 0x61, 0x9c, 0xdc, 0x87, 0xff, 0xa2, 0x36,
+	0xfa, 0x3f, 0xe7, 0x8f, 0x7c, 0xb2, 0xe4, 0x61, 0x23, 0x42, 0xa8, 0x95, 0x3c, 0xcf, 0xd9, 0xd3,
+	0x2c, 0x0c, 0xa2, 0x4b, 0x74, 0x31, 0x9c, 0xf0, 0x57, 0x36, 0xe6, 0xb3, 0xb0, 0x39, 0xf8, 0x69,
+	0xa0, 0xde, 0x06, 0x76, 0xf8, 0xcf, 0xdc, 0x83, 0xee, 0xb9, 0xbd, 0xd3, 0x2a, 0xf8, 0xb4, 0xf1,
+	0x36, 0x38, 0xea, 0x35, 0x6c, 0x85, 0xd1, 0x18, 0x0a, 0x1d, 0x6b, 0x65, 0xdc, 0x59, 0x75, 0x8f,
+	0x79, 0x66, 0xcf, 0xd4, 0x7a, 0xeb, 0xde, 0x8f, 0xa0, 0x39, 0x62, 0xec, 0x33, 0xe8, 0x8e, 0xbc,
+	0x15, 0x93, 0x16, 0x7b, 0x58, 0xa1, 0x05, 0xc1, 0x55, 0x07, 0xf6, 0xab, 0xe6, 0x53, 0x26, 0x6d,
+	0x7a, 0xe2, 0xd3, 0x05, 0x49, 0x1d, 0xff, 0x1d, 0xf4, 0xfc, 0x27, 0xa5, 0x4c, 0x5a, 0x4a, 0x4f,
+	0x13, 0x94, 0x2e, 0x08, 0xa5, 0x6e, 0x66, 0xdd, 0x72, 0xc1, 0xc8, 0x6f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xf4, 0xc4, 0x1d, 0x0e, 0xee, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/access_invitation_error.pb.go b/googleapis/ads/googleads/v3/errors/access_invitation_error.pb.go
new file mode 100644
index 0000000..a65ea18
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/access_invitation_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/access_invitation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible AccessInvitation errors.
+type AccessInvitationErrorEnum_AccessInvitationError int32
+
+const (
+	// Enum unspecified.
+	AccessInvitationErrorEnum_UNSPECIFIED AccessInvitationErrorEnum_AccessInvitationError = 0
+	// The received error code is not known in this version.
+	AccessInvitationErrorEnum_UNKNOWN AccessInvitationErrorEnum_AccessInvitationError = 1
+	// The email address is invalid for sending an invitation.
+	AccessInvitationErrorEnum_INVALID_EMAIL_ADDRESS AccessInvitationErrorEnum_AccessInvitationError = 2
+	// Email address already has access to this customer.
+	AccessInvitationErrorEnum_EMAIL_ADDRESS_ALREADY_HAS_ACCESS AccessInvitationErrorEnum_AccessInvitationError = 3
+)
+
+var AccessInvitationErrorEnum_AccessInvitationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_EMAIL_ADDRESS",
+	3: "EMAIL_ADDRESS_ALREADY_HAS_ACCESS",
+}
+
+var AccessInvitationErrorEnum_AccessInvitationError_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"INVALID_EMAIL_ADDRESS":            2,
+	"EMAIL_ADDRESS_ALREADY_HAS_ACCESS": 3,
+}
+
+func (x AccessInvitationErrorEnum_AccessInvitationError) String() string {
+	return proto.EnumName(AccessInvitationErrorEnum_AccessInvitationError_name, int32(x))
+}
+
+func (AccessInvitationErrorEnum_AccessInvitationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_83bb9ac67920b6f6, []int{0, 0}
+}
+
+// Container for enum describing possible AccessInvitation errors.
+type AccessInvitationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccessInvitationErrorEnum) Reset()         { *m = AccessInvitationErrorEnum{} }
+func (m *AccessInvitationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AccessInvitationErrorEnum) ProtoMessage()    {}
+func (*AccessInvitationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_83bb9ac67920b6f6, []int{0}
+}
+
+func (m *AccessInvitationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccessInvitationErrorEnum.Unmarshal(m, b)
+}
+func (m *AccessInvitationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccessInvitationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AccessInvitationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccessInvitationErrorEnum.Merge(m, src)
+}
+func (m *AccessInvitationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AccessInvitationErrorEnum.Size(m)
+}
+func (m *AccessInvitationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccessInvitationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccessInvitationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AccessInvitationErrorEnum_AccessInvitationError", AccessInvitationErrorEnum_AccessInvitationError_name, AccessInvitationErrorEnum_AccessInvitationError_value)
+	proto.RegisterType((*AccessInvitationErrorEnum)(nil), "google.ads.googleads.v3.errors.AccessInvitationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/access_invitation_error.proto", fileDescriptor_83bb9ac67920b6f6)
+}
+
+var fileDescriptor_83bb9ac67920b6f6 = []byte{
+	// 329 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x40,
+	0x10, 0x86, 0x4d, 0x0a, 0x0a, 0xdb, 0x83, 0x25, 0xd0, 0x43, 0x8b, 0x14, 0x09, 0x9e, 0x37, 0x87,
+	0xdc, 0x56, 0x2f, 0xd3, 0x66, 0xad, 0xc1, 0x1a, 0x4b, 0x43, 0x23, 0x4a, 0x60, 0x59, 0x9b, 0xb0,
+	0x04, 0xda, 0xdd, 0x92, 0xad, 0x79, 0x11, 0xdf, 0xc0, 0xa3, 0x8f, 0xe2, 0xa3, 0x78, 0xf7, 0x2e,
+	0xc9, 0xda, 0x80, 0x50, 0x3d, 0xed, 0xcf, 0xcc, 0xff, 0xfd, 0x3b, 0x33, 0xe8, 0x4a, 0x28, 0x25,
+	0xd6, 0xb9, 0xc7, 0x33, 0xed, 0x19, 0x59, 0xab, 0xca, 0xf7, 0xf2, 0xb2, 0x54, 0xa5, 0xf6, 0xf8,
+	0x6a, 0x95, 0x6b, 0xcd, 0x0a, 0x59, 0x15, 0x3b, 0xbe, 0x2b, 0x94, 0x64, 0x4d, 0x03, 0x6f, 0x4b,
+	0xb5, 0x53, 0xce, 0xc8, 0x20, 0x98, 0x67, 0x1a, 0xb7, 0x34, 0xae, 0x7c, 0x6c, 0xe8, 0xe1, 0xd9,
+	0x3e, 0x7d, 0x5b, 0x78, 0x5c, 0x4a, 0x65, 0x22, 0xb4, 0xa1, 0xdd, 0x57, 0x0b, 0x0d, 0xa0, 0xc9,
+	0x0f, 0xdb, 0x78, 0x5a, 0x83, 0x54, 0xbe, 0x6c, 0xdc, 0x0a, 0xf5, 0x0f, 0x36, 0x9d, 0x53, 0xd4,
+	0x5d, 0x46, 0xf1, 0x9c, 0x4e, 0xc2, 0xeb, 0x90, 0x06, 0xbd, 0x23, 0xa7, 0x8b, 0x4e, 0x96, 0xd1,
+	0x6d, 0x74, 0xff, 0x10, 0xf5, 0x2c, 0x67, 0x80, 0xfa, 0x61, 0x94, 0xc0, 0x2c, 0x0c, 0x18, 0xbd,
+	0x83, 0x70, 0xc6, 0x20, 0x08, 0x16, 0x34, 0x8e, 0x7b, 0xb6, 0x73, 0x81, 0xce, 0x7f, 0x95, 0x18,
+	0xcc, 0x16, 0x14, 0x82, 0x47, 0x76, 0x03, 0x31, 0x83, 0xc9, 0xa4, 0x76, 0x75, 0xc6, 0x5f, 0x16,
+	0x72, 0x57, 0x6a, 0x83, 0xff, 0x5f, 0x6d, 0x3c, 0x3c, 0x38, 0xdc, 0xbc, 0x5e, 0x6c, 0x6e, 0x3d,
+	0x05, 0x3f, 0xb4, 0x50, 0x6b, 0x2e, 0x05, 0x56, 0xa5, 0xf0, 0x44, 0x2e, 0x9b, 0xb5, 0xf7, 0x67,
+	0xde, 0x16, 0xfa, 0xaf, 0xab, 0x5f, 0x9a, 0xe7, 0xcd, 0xee, 0x4c, 0x01, 0xde, 0xed, 0xd1, 0xd4,
+	0x84, 0x41, 0xa6, 0xb1, 0x91, 0xb5, 0x4a, 0x7c, 0xdc, 0x7c, 0xa9, 0x3f, 0xf6, 0x86, 0x14, 0x32,
+	0x9d, 0xb6, 0x86, 0x34, 0xf1, 0x53, 0x63, 0xf8, 0xb4, 0x5d, 0x53, 0x25, 0x04, 0x32, 0x4d, 0x48,
+	0x6b, 0x21, 0x24, 0xf1, 0x09, 0x31, 0xa6, 0xe7, 0xe3, 0x66, 0x3a, 0xff, 0x3b, 0x00, 0x00, 0xff,
+	0xff, 0xd8, 0x6b, 0x44, 0xc4, 0x12, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/account_budget_proposal_error.pb.go b/googleapis/ads/googleads/v3/errors/account_budget_proposal_error.pb.go
new file mode 100644
index 0000000..acaa74b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/account_budget_proposal_error.pb.go
@@ -0,0 +1,231 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/account_budget_proposal_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible account budget proposal errors.
+type AccountBudgetProposalErrorEnum_AccountBudgetProposalError int32
+
+const (
+	// Enum unspecified.
+	AccountBudgetProposalErrorEnum_UNSPECIFIED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 0
+	// The received error code is not known in this version.
+	AccountBudgetProposalErrorEnum_UNKNOWN AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 1
+	// The field mask must be empty for create/end/remove proposals.
+	AccountBudgetProposalErrorEnum_FIELD_MASK_NOT_ALLOWED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 2
+	// The field cannot be set because of the proposal type.
+	AccountBudgetProposalErrorEnum_IMMUTABLE_FIELD AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 3
+	// The field is required because of the proposal type.
+	AccountBudgetProposalErrorEnum_REQUIRED_FIELD_MISSING AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 4
+	// Proposals that have been approved cannot be cancelled.
+	AccountBudgetProposalErrorEnum_CANNOT_CANCEL_APPROVED_PROPOSAL AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 5
+	// Budgets that haven't been approved cannot be removed.
+	AccountBudgetProposalErrorEnum_CANNOT_REMOVE_UNAPPROVED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 6
+	// Budgets that are currently running cannot be removed.
+	AccountBudgetProposalErrorEnum_CANNOT_REMOVE_RUNNING_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 7
+	// Budgets that haven't been approved cannot be truncated.
+	AccountBudgetProposalErrorEnum_CANNOT_END_UNAPPROVED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 8
+	// Only budgets that are currently running can be truncated.
+	AccountBudgetProposalErrorEnum_CANNOT_END_INACTIVE_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 9
+	// All budgets must have names.
+	AccountBudgetProposalErrorEnum_BUDGET_NAME_REQUIRED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 10
+	// Expired budgets cannot be edited after a sufficient amount of time has
+	// passed.
+	AccountBudgetProposalErrorEnum_CANNOT_UPDATE_OLD_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 11
+	// It is not permissible a propose a new budget that ends in the past.
+	AccountBudgetProposalErrorEnum_CANNOT_END_IN_PAST AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 12
+	// An expired budget cannot be extended to overlap with the running budget.
+	AccountBudgetProposalErrorEnum_CANNOT_EXTEND_END_TIME AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 13
+	// A purchase order number is required.
+	AccountBudgetProposalErrorEnum_PURCHASE_ORDER_NUMBER_REQUIRED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 14
+	// Budgets that have a pending update cannot be updated.
+	AccountBudgetProposalErrorEnum_PENDING_UPDATE_PROPOSAL_EXISTS AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 15
+	// Cannot propose more than one budget when the corresponding billing setup
+	// hasn't been approved.
+	AccountBudgetProposalErrorEnum_MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 16
+	// Cannot update the start time of a budget that has already started.
+	AccountBudgetProposalErrorEnum_CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 17
+	// Cannot update the spending limit of a budget with an amount lower than
+	// what has already been spent.
+	AccountBudgetProposalErrorEnum_SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 18
+	// Cannot propose a budget update without actually changing any fields.
+	AccountBudgetProposalErrorEnum_UPDATE_IS_NO_OP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 19
+	// The end time must come after the start time.
+	AccountBudgetProposalErrorEnum_END_TIME_MUST_FOLLOW_START_TIME AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 20
+	// The budget's date range must fall within the date range of its billing
+	// setup.
+	AccountBudgetProposalErrorEnum_BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 21
+	// The user is not authorized to mutate budgets for the given billing setup.
+	AccountBudgetProposalErrorEnum_NOT_AUTHORIZED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 22
+	// Mutates are not allowed for the given billing setup.
+	AccountBudgetProposalErrorEnum_INVALID_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 23
+)
+
+var AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "FIELD_MASK_NOT_ALLOWED",
+	3:  "IMMUTABLE_FIELD",
+	4:  "REQUIRED_FIELD_MISSING",
+	5:  "CANNOT_CANCEL_APPROVED_PROPOSAL",
+	6:  "CANNOT_REMOVE_UNAPPROVED_BUDGET",
+	7:  "CANNOT_REMOVE_RUNNING_BUDGET",
+	8:  "CANNOT_END_UNAPPROVED_BUDGET",
+	9:  "CANNOT_END_INACTIVE_BUDGET",
+	10: "BUDGET_NAME_REQUIRED",
+	11: "CANNOT_UPDATE_OLD_BUDGET",
+	12: "CANNOT_END_IN_PAST",
+	13: "CANNOT_EXTEND_END_TIME",
+	14: "PURCHASE_ORDER_NUMBER_REQUIRED",
+	15: "PENDING_UPDATE_PROPOSAL_EXISTS",
+	16: "MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP",
+	17: "CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET",
+	18: "SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED",
+	19: "UPDATE_IS_NO_OP",
+	20: "END_TIME_MUST_FOLLOW_START_TIME",
+	21: "BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP",
+	22: "NOT_AUTHORIZED",
+	23: "INVALID_BILLING_SETUP",
+}
+
+var AccountBudgetProposalErrorEnum_AccountBudgetProposalError_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"FIELD_MASK_NOT_ALLOWED":          2,
+	"IMMUTABLE_FIELD":                 3,
+	"REQUIRED_FIELD_MISSING":          4,
+	"CANNOT_CANCEL_APPROVED_PROPOSAL": 5,
+	"CANNOT_REMOVE_UNAPPROVED_BUDGET": 6,
+	"CANNOT_REMOVE_RUNNING_BUDGET":    7,
+	"CANNOT_END_UNAPPROVED_BUDGET":    8,
+	"CANNOT_END_INACTIVE_BUDGET":      9,
+	"BUDGET_NAME_REQUIRED":            10,
+	"CANNOT_UPDATE_OLD_BUDGET":        11,
+	"CANNOT_END_IN_PAST":              12,
+	"CANNOT_EXTEND_END_TIME":          13,
+	"PURCHASE_ORDER_NUMBER_REQUIRED":  14,
+	"PENDING_UPDATE_PROPOSAL_EXISTS":  15,
+	"MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP": 16,
+	"CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET":               17,
+	"SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED":        18,
+	"UPDATE_IS_NO_OP":                                   19,
+	"END_TIME_MUST_FOLLOW_START_TIME":                   20,
+	"BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP": 21,
+	"NOT_AUTHORIZED":                                    22,
+	"INVALID_BILLING_SETUP":                             23,
+}
+
+func (x AccountBudgetProposalErrorEnum_AccountBudgetProposalError) String() string {
+	return proto.EnumName(AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name, int32(x))
+}
+
+func (AccountBudgetProposalErrorEnum_AccountBudgetProposalError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_82eaf8fa240a3a68, []int{0, 0}
+}
+
+// Container for enum describing possible account budget proposal errors.
+type AccountBudgetProposalErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalErrorEnum) Reset()         { *m = AccountBudgetProposalErrorEnum{} }
+func (m *AccountBudgetProposalErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalErrorEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_82eaf8fa240a3a68, []int{0}
+}
+
+func (m *AccountBudgetProposalErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalErrorEnum.Merge(m, src)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Size(m)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AccountBudgetProposalErrorEnum_AccountBudgetProposalError", AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name, AccountBudgetProposalErrorEnum_AccountBudgetProposalError_value)
+	proto.RegisterType((*AccountBudgetProposalErrorEnum)(nil), "google.ads.googleads.v3.errors.AccountBudgetProposalErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/account_budget_proposal_error.proto", fileDescriptor_82eaf8fa240a3a68)
+}
+
+var fileDescriptor_82eaf8fa240a3a68 = []byte{
+	// 686 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcb, 0x6e, 0x13, 0x3d,
+	0x14, 0xfe, 0x9b, 0xfe, 0xa4, 0xe0, 0x42, 0x6b, 0xdc, 0x0b, 0x25, 0xaa, 0x52, 0x14, 0x96, 0x48,
+	0x13, 0x41, 0x04, 0x12, 0x83, 0x58, 0x38, 0x33, 0x4e, 0x62, 0x75, 0xc6, 0x36, 0xbe, 0xa4, 0x55,
+	0x15, 0xc9, 0x4a, 0x9b, 0x28, 0xaa, 0xd4, 0x66, 0xa2, 0x4c, 0xda, 0x07, 0x62, 0xc9, 0x8e, 0xd7,
+	0x60, 0xcd, 0x53, 0xf0, 0x08, 0xac, 0x90, 0x67, 0x32, 0x69, 0x52, 0x51, 0x16, 0x51, 0xce, 0xd8,
+	0xdf, 0xe5, 0x9c, 0x63, 0x1f, 0x83, 0xe6, 0x28, 0x49, 0x46, 0x57, 0xc3, 0x7a, 0x7f, 0x90, 0xd6,
+	0xf3, 0xd0, 0x45, 0xb7, 0x8d, 0xfa, 0x70, 0x3a, 0x4d, 0xa6, 0x69, 0xbd, 0x7f, 0x71, 0x91, 0xdc,
+	0x8c, 0x67, 0xf6, 0xfc, 0x66, 0x30, 0x1a, 0xce, 0xec, 0x64, 0x9a, 0x4c, 0x92, 0xb4, 0x7f, 0x65,
+	0xb3, 0x6d, 0x6f, 0x32, 0x4d, 0x66, 0x09, 0xaa, 0xe6, 0x44, 0xaf, 0x3f, 0x48, 0xbd, 0x85, 0x86,
+	0x77, 0xdb, 0xf0, 0x72, 0x8d, 0xca, 0x61, 0xe1, 0x31, 0xb9, 0xac, 0xf7, 0xc7, 0xe3, 0x64, 0xd6,
+	0x9f, 0x5d, 0x26, 0xe3, 0x34, 0x67, 0xd7, 0x7e, 0x96, 0x41, 0x15, 0xe7, 0x2e, 0xcd, 0xcc, 0x44,
+	0xcc, 0x3d, 0x88, 0x63, 0x93, 0xf1, 0xcd, 0x75, 0xed, 0x7b, 0x19, 0x54, 0x1e, 0x86, 0xa0, 0x6d,
+	0xb0, 0x69, 0x98, 0x12, 0x24, 0xa0, 0x2d, 0x4a, 0x42, 0xf8, 0x1f, 0xda, 0x04, 0x1b, 0x86, 0x1d,
+	0x33, 0x7e, 0xc2, 0xe0, 0x1a, 0xaa, 0x80, 0xfd, 0x16, 0x25, 0x51, 0x68, 0x63, 0xac, 0x8e, 0x2d,
+	0xe3, 0xda, 0xe2, 0x28, 0xe2, 0x27, 0x24, 0x84, 0x25, 0xb4, 0x03, 0xb6, 0x69, 0x1c, 0x1b, 0x8d,
+	0x9b, 0x11, 0xb1, 0x19, 0x0a, 0xae, 0x3b, 0x82, 0x24, 0x5f, 0x0c, 0x95, 0x24, 0xb4, 0x73, 0x26,
+	0x55, 0x8a, 0xb2, 0x36, 0xfc, 0x1f, 0xbd, 0x06, 0x47, 0x01, 0x66, 0x4e, 0x24, 0xc0, 0x2c, 0x20,
+	0x91, 0xc5, 0x42, 0x48, 0xde, 0x25, 0xa1, 0x15, 0x92, 0x0b, 0xae, 0x70, 0x04, 0x1f, 0x2d, 0x81,
+	0x24, 0x89, 0x79, 0x97, 0x58, 0xc3, 0x16, 0xb0, 0xa6, 0x09, 0xdb, 0x44, 0xc3, 0x32, 0x7a, 0x05,
+	0x0e, 0x57, 0x41, 0xd2, 0x30, 0x46, 0x59, 0xbb, 0x40, 0x6c, 0x2c, 0x21, 0x08, 0x0b, 0xff, 0xa2,
+	0xf1, 0x18, 0x55, 0x41, 0x65, 0x09, 0x41, 0x19, 0x0e, 0x34, 0xed, 0x92, 0x62, 0xff, 0x09, 0x3a,
+	0x00, 0xbb, 0x79, 0x6c, 0x19, 0x8e, 0x89, 0x2d, 0xaa, 0x82, 0x00, 0x1d, 0x82, 0x83, 0x39, 0xd3,
+	0x88, 0x10, 0x6b, 0x62, 0x79, 0xb4, 0xd0, 0xdd, 0x44, 0xfb, 0x00, 0xad, 0xe8, 0x5a, 0x81, 0x95,
+	0x86, 0x4f, 0x5d, 0x67, 0x8a, 0xf5, 0x53, 0xed, 0xb6, 0xdc, 0x4f, 0xd3, 0x98, 0xc0, 0x67, 0xa8,
+	0x06, 0xaa, 0xc2, 0xc8, 0xa0, 0x83, 0x15, 0xb1, 0x5c, 0x86, 0x44, 0x5a, 0x66, 0xe2, 0x26, 0x91,
+	0x77, 0xae, 0x5b, 0x19, 0x86, 0xb0, 0xd0, 0x55, 0x39, 0xb7, 0x2d, 0xba, 0x66, 0xc9, 0x29, 0x55,
+	0x5a, 0xc1, 0x6d, 0xf4, 0x19, 0x7c, 0x8c, 0x4d, 0xa4, 0xa9, 0x88, 0x8a, 0x42, 0xd4, 0xf2, 0xa1,
+	0xd9, 0x16, 0x97, 0x2b, 0xbd, 0xa0, 0x51, 0xe4, 0xf4, 0x14, 0xd1, 0x46, 0x40, 0x88, 0xea, 0xe0,
+	0xcd, 0x6a, 0x61, 0x4a, 0x63, 0xa9, 0xb3, 0x24, 0x33, 0x6a, 0xf6, 0x79, 0xd7, 0xc3, 0xe7, 0xe8,
+	0x03, 0x78, 0xa7, 0x8a, 0xa4, 0x22, 0x1a, 0x53, 0x6d, 0x9d, 0x8f, 0xb4, 0xba, 0x83, 0x99, 0xc5,
+	0x41, 0x20, 0x0d, 0x09, 0x6d, 0xc0, 0x95, 0x5e, 0xb9, 0x3a, 0xc8, 0x5d, 0x9d, 0xb9, 0x03, 0x75,
+	0x09, 0x5a, 0x2e, 0xe0, 0x8e, 0x3b, 0xf9, 0xa2, 0x25, 0x36, 0x36, 0x4a, 0xdb, 0x16, 0x77, 0x84,
+	0xa5, 0x24, 0xe0, 0x2e, 0x7a, 0x0f, 0xde, 0xce, 0x4f, 0x25, 0xa3, 0x4b, 0xcc, 0xda, 0xc4, 0x52,
+	0x16, 0xf0, 0x58, 0x60, 0x4d, 0xdd, 0x4d, 0x3c, 0xa1, 0xba, 0x73, 0xaf, 0xb2, 0x3d, 0x84, 0xc0,
+	0x56, 0x96, 0x81, 0xd1, 0x1d, 0x2e, 0xe9, 0x19, 0x09, 0xe1, 0x3e, 0x7a, 0x09, 0xf6, 0x28, 0xeb,
+	0xe2, 0x88, 0xde, 0x6f, 0xc4, 0x8b, 0xe6, 0xef, 0x35, 0x50, 0xbb, 0x48, 0xae, 0xbd, 0x7f, 0xcf,
+	0x66, 0xf3, 0xe8, 0xe1, 0xb9, 0x12, 0x6e, 0x3c, 0xc5, 0xda, 0x59, 0x38, 0x97, 0x18, 0x25, 0x57,
+	0xfd, 0xf1, 0xc8, 0x4b, 0xa6, 0xa3, 0xfa, 0x68, 0x38, 0xce, 0x86, 0xb7, 0x78, 0x32, 0x26, 0x97,
+	0xe9, 0x43, 0x2f, 0xc8, 0xa7, 0xfc, 0xef, 0x6b, 0x69, 0xbd, 0x8d, 0xf1, 0xb7, 0x52, 0xb5, 0x9d,
+	0x8b, 0xe1, 0x41, 0xea, 0xe5, 0xa1, 0x8b, 0xba, 0x0d, 0x2f, 0xb3, 0x4c, 0x7f, 0x14, 0x80, 0x1e,
+	0x1e, 0xa4, 0xbd, 0x05, 0xa0, 0xd7, 0x6d, 0xf4, 0x72, 0xc0, 0xaf, 0x52, 0x2d, 0x5f, 0xf5, 0x7d,
+	0x3c, 0x48, 0x7d, 0x7f, 0x01, 0xf1, 0xfd, 0x6e, 0xc3, 0xf7, 0x73, 0xd0, 0x79, 0x39, 0xcb, 0xae,
+	0xf1, 0x27, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xfc, 0x4e, 0x26, 0xde, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_customizer_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_customizer_error.pb.go
new file mode 100644
index 0000000..3312504
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_customizer_error.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_customizer_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad customizer errors.
+type AdCustomizerErrorEnum_AdCustomizerError int32
+
+const (
+	// Enum unspecified.
+	AdCustomizerErrorEnum_UNSPECIFIED AdCustomizerErrorEnum_AdCustomizerError = 0
+	// The received error code is not known in this version.
+	AdCustomizerErrorEnum_UNKNOWN AdCustomizerErrorEnum_AdCustomizerError = 1
+	// Invalid date argument in countdown function.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_DATE_FORMAT AdCustomizerErrorEnum_AdCustomizerError = 2
+	// Countdown end date is in the past.
+	AdCustomizerErrorEnum_COUNTDOWN_DATE_IN_PAST AdCustomizerErrorEnum_AdCustomizerError = 3
+	// Invalid locale string in countdown function.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_LOCALE AdCustomizerErrorEnum_AdCustomizerError = 4
+	// Days-before argument to countdown function is not positive.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_START_DAYS_BEFORE AdCustomizerErrorEnum_AdCustomizerError = 5
+	// A user list referenced in an IF function does not exist.
+	AdCustomizerErrorEnum_UNKNOWN_USER_LIST AdCustomizerErrorEnum_AdCustomizerError = 6
+)
+
+var AdCustomizerErrorEnum_AdCustomizerError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "COUNTDOWN_INVALID_DATE_FORMAT",
+	3: "COUNTDOWN_DATE_IN_PAST",
+	4: "COUNTDOWN_INVALID_LOCALE",
+	5: "COUNTDOWN_INVALID_START_DAYS_BEFORE",
+	6: "UNKNOWN_USER_LIST",
+}
+
+var AdCustomizerErrorEnum_AdCustomizerError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"COUNTDOWN_INVALID_DATE_FORMAT":       2,
+	"COUNTDOWN_DATE_IN_PAST":              3,
+	"COUNTDOWN_INVALID_LOCALE":            4,
+	"COUNTDOWN_INVALID_START_DAYS_BEFORE": 5,
+	"UNKNOWN_USER_LIST":                   6,
+}
+
+func (x AdCustomizerErrorEnum_AdCustomizerError) String() string {
+	return proto.EnumName(AdCustomizerErrorEnum_AdCustomizerError_name, int32(x))
+}
+
+func (AdCustomizerErrorEnum_AdCustomizerError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_83f4cb4ac17f0827, []int{0, 0}
+}
+
+// Container for enum describing possible ad customizer errors.
+type AdCustomizerErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdCustomizerErrorEnum) Reset()         { *m = AdCustomizerErrorEnum{} }
+func (m *AdCustomizerErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdCustomizerErrorEnum) ProtoMessage()    {}
+func (*AdCustomizerErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_83f4cb4ac17f0827, []int{0}
+}
+
+func (m *AdCustomizerErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Unmarshal(m, b)
+}
+func (m *AdCustomizerErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdCustomizerErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdCustomizerErrorEnum.Merge(m, src)
+}
+func (m *AdCustomizerErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Size(m)
+}
+func (m *AdCustomizerErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdCustomizerErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdCustomizerErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdCustomizerErrorEnum_AdCustomizerError", AdCustomizerErrorEnum_AdCustomizerError_name, AdCustomizerErrorEnum_AdCustomizerError_value)
+	proto.RegisterType((*AdCustomizerErrorEnum)(nil), "google.ads.googleads.v3.errors.AdCustomizerErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_customizer_error.proto", fileDescriptor_83f4cb4ac17f0827)
+}
+
+var fileDescriptor_83f4cb4ac17f0827 = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcf, 0x8e, 0x94, 0x40,
+	0x10, 0xc6, 0x85, 0xd5, 0x35, 0xe9, 0x3d, 0xc8, 0x76, 0xb2, 0x1b, 0xb3, 0x59, 0x37, 0x11, 0x0f,
+	0xde, 0x9a, 0x03, 0x17, 0xd3, 0x9e, 0x7a, 0xa0, 0x67, 0x42, 0xc4, 0x86, 0xf0, 0x6f, 0xa2, 0x21,
+	0xe9, 0xe0, 0x40, 0x08, 0xc9, 0x0c, 0x3d, 0xa1, 0x99, 0x39, 0xf8, 0x38, 0x1e, 0x7d, 0x14, 0x0f,
+	0x3e, 0x87, 0xf1, 0xe6, 0x1b, 0x18, 0xe8, 0x19, 0x3c, 0x10, 0xf7, 0xc4, 0x97, 0xaa, 0xdf, 0x57,
+	0x54, 0x7f, 0x05, 0xde, 0xd5, 0x42, 0xd4, 0xdb, 0xca, 0x2a, 0x4a, 0x69, 0x29, 0x39, 0xa8, 0xa3,
+	0x6d, 0x55, 0x5d, 0x27, 0x3a, 0x69, 0x15, 0x25, 0xdf, 0x1c, 0x64, 0x2f, 0x76, 0xcd, 0xd7, 0xaa,
+	0xe3, 0x63, 0x11, 0xed, 0x3b, 0xd1, 0x0b, 0xf8, 0xa0, 0x70, 0x54, 0x94, 0x12, 0x4d, 0x4e, 0x74,
+	0xb4, 0x91, 0x72, 0xde, 0xdd, 0x9f, 0x27, 0xef, 0x1b, 0xab, 0x68, 0x5b, 0xd1, 0x17, 0x7d, 0x23,
+	0x5a, 0xa9, 0xdc, 0xe6, 0x2f, 0x0d, 0xdc, 0x90, 0xd2, 0x99, 0x46, 0xd3, 0xc1, 0x44, 0xdb, 0xc3,
+	0xce, 0xfc, 0xa9, 0x81, 0xeb, 0x59, 0x07, 0xbe, 0x00, 0x57, 0x29, 0x8b, 0x43, 0xea, 0x78, 0x4b,
+	0x8f, 0xba, 0xc6, 0x13, 0x78, 0x05, 0x9e, 0xa7, 0xec, 0x03, 0x0b, 0xd6, 0xcc, 0xd0, 0xe0, 0x6b,
+	0xf0, 0xca, 0x09, 0x52, 0x96, 0xb8, 0xc1, 0x9a, 0x71, 0x8f, 0x65, 0xc4, 0xf7, 0x5c, 0xee, 0x92,
+	0x84, 0xf2, 0x65, 0x10, 0x7d, 0x24, 0x89, 0xa1, 0xc3, 0x3b, 0x70, 0xfb, 0x0f, 0x19, 0x5b, 0x1e,
+	0xe3, 0x21, 0x89, 0x13, 0xe3, 0x02, 0xde, 0x83, 0x97, 0x73, 0xbb, 0x1f, 0x38, 0xc4, 0xa7, 0xc6,
+	0x53, 0xf8, 0x16, 0xbc, 0x99, 0x77, 0xe3, 0x84, 0x44, 0x09, 0x77, 0xc9, 0xa7, 0x98, 0x2f, 0xe8,
+	0x32, 0x88, 0xa8, 0xf1, 0x0c, 0xde, 0x80, 0xeb, 0xd3, 0x4a, 0x3c, 0x8d, 0x69, 0xc4, 0x7d, 0x2f,
+	0x4e, 0x8c, 0xcb, 0xc5, 0x1f, 0x0d, 0x98, 0x1b, 0xb1, 0x43, 0x8f, 0xe7, 0xb5, 0xb8, 0x9d, 0x3d,
+	0x3a, 0x1c, 0x92, 0x0a, 0xb5, 0xcf, 0xee, 0xc9, 0x59, 0x8b, 0x6d, 0xd1, 0xd6, 0x48, 0x74, 0xb5,
+	0x55, 0x57, 0xed, 0x98, 0xe3, 0xf9, 0x66, 0xfb, 0x46, 0xfe, 0xef, 0x84, 0xef, 0xd5, 0xe7, 0x9b,
+	0x7e, 0xb1, 0x22, 0xe4, 0xbb, 0xfe, 0xb0, 0x52, 0xc3, 0x48, 0x29, 0x91, 0x92, 0x83, 0xca, 0x6c,
+	0x34, 0xfe, 0x52, 0xfe, 0x38, 0x03, 0x39, 0x29, 0x65, 0x3e, 0x01, 0x79, 0x66, 0xe7, 0x0a, 0xf8,
+	0xad, 0x9b, 0xaa, 0x8a, 0x31, 0x29, 0x25, 0xc6, 0x13, 0x82, 0x71, 0x66, 0x63, 0xac, 0xa0, 0x2f,
+	0x97, 0xe3, 0x76, 0xf6, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xe2, 0x63, 0xa5, 0x5f, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_error.pb.go
new file mode 100644
index 0000000..0909eac
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_error.pb.go
@@ -0,0 +1,801 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad errors.
+type AdErrorEnum_AdError int32
+
+const (
+	// Enum unspecified.
+	AdErrorEnum_UNSPECIFIED AdErrorEnum_AdError = 0
+	// The received error code is not known in this version.
+	AdErrorEnum_UNKNOWN AdErrorEnum_AdError = 1
+	// Ad customizers are not supported for ad type.
+	AdErrorEnum_AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE AdErrorEnum_AdError = 2
+	// Estimating character sizes the string is too long.
+	AdErrorEnum_APPROXIMATELY_TOO_LONG AdErrorEnum_AdError = 3
+	// Estimating character sizes the string is too short.
+	AdErrorEnum_APPROXIMATELY_TOO_SHORT AdErrorEnum_AdError = 4
+	// There is a problem with the snippet.
+	AdErrorEnum_BAD_SNIPPET AdErrorEnum_AdError = 5
+	// Cannot modify an ad.
+	AdErrorEnum_CANNOT_MODIFY_AD AdErrorEnum_AdError = 6
+	// business name and url cannot be set at the same time
+	AdErrorEnum_CANNOT_SET_BUSINESS_NAME_IF_URL_SET AdErrorEnum_AdError = 7
+	// The specified field is incompatible with this ad's type or settings.
+	AdErrorEnum_CANNOT_SET_FIELD AdErrorEnum_AdError = 8
+	// Cannot set field when originAdId is set.
+	AdErrorEnum_CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET AdErrorEnum_AdError = 9
+	// Cannot set field when an existing ad id is set for sharing.
+	AdErrorEnum_CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING AdErrorEnum_AdError = 10
+	// Cannot set allowFlexibleColor false if no color is provided by user.
+	AdErrorEnum_CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE AdErrorEnum_AdError = 11
+	// When user select native, no color control is allowed because we will
+	// always respect publisher color for native format serving.
+	AdErrorEnum_CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING AdErrorEnum_AdError = 12
+	// Cannot specify a url for the ad type
+	AdErrorEnum_CANNOT_SET_URL AdErrorEnum_AdError = 13
+	// Cannot specify a tracking or mobile url without also setting final urls
+	AdErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS AdErrorEnum_AdError = 14
+	// Cannot specify a legacy url and a final url simultaneously
+	AdErrorEnum_CANNOT_SET_WITH_FINAL_URLS AdErrorEnum_AdError = 15
+	// Cannot specify a urls in UrlData and in template fields simultaneously.
+	AdErrorEnum_CANNOT_SET_WITH_URL_DATA AdErrorEnum_AdError = 17
+	// This operator cannot be used with a subclass of Ad.
+	AdErrorEnum_CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR AdErrorEnum_AdError = 18
+	// Customer is not approved for mobile ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_MOBILEADS AdErrorEnum_AdError = 19
+	// Customer is not approved for 3PAS richmedia ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS AdErrorEnum_AdError = 20
+	// Customer is not approved for 3PAS redirect richmedia (Ad Exchange) ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS AdErrorEnum_AdError = 21
+	// Not an eligible customer
+	AdErrorEnum_CUSTOMER_NOT_ELIGIBLE AdErrorEnum_AdError = 22
+	// Customer is not eligible for updating beacon url
+	AdErrorEnum_CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL AdErrorEnum_AdError = 23
+	// There already exists an ad with the same dimensions in the union.
+	AdErrorEnum_DIMENSION_ALREADY_IN_UNION AdErrorEnum_AdError = 24
+	// Ad's dimension must be set before setting union dimension.
+	AdErrorEnum_DIMENSION_MUST_BE_SET AdErrorEnum_AdError = 25
+	// Ad's dimension must be included in the union dimensions.
+	AdErrorEnum_DIMENSION_NOT_IN_UNION AdErrorEnum_AdError = 26
+	// Display Url cannot be specified (applies to Ad Exchange Ads)
+	AdErrorEnum_DISPLAY_URL_CANNOT_BE_SPECIFIED AdErrorEnum_AdError = 27
+	// Telephone number contains invalid characters or invalid format. Please
+	// re-enter your number using digits (0-9), dashes (-), and parentheses
+	// only.
+	AdErrorEnum_DOMESTIC_PHONE_NUMBER_FORMAT AdErrorEnum_AdError = 28
+	// Emergency telephone numbers are not allowed. Please enter a valid
+	// domestic phone number to connect customers to your business.
+	AdErrorEnum_EMERGENCY_PHONE_NUMBER AdErrorEnum_AdError = 29
+	// A required field was not specified or is an empty string.
+	AdErrorEnum_EMPTY_FIELD AdErrorEnum_AdError = 30
+	// A feed attribute referenced in an ad customizer tag is not in the ad
+	// customizer mapping for the feed.
+	AdErrorEnum_FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID AdErrorEnum_AdError = 31
+	// The ad customizer field mapping for the feed attribute does not match the
+	// expected field type.
+	AdErrorEnum_FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH AdErrorEnum_AdError = 32
+	// The use of ad customizer tags in the ad text is disallowed. Details in
+	// trigger.
+	AdErrorEnum_ILLEGAL_AD_CUSTOMIZER_TAG_USE AdErrorEnum_AdError = 33
+	// Tags of the form {PH_x}, where x is a number, are disallowed in ad text.
+	AdErrorEnum_ILLEGAL_TAG_USE AdErrorEnum_AdError = 34
+	// The dimensions of the ad are specified or derived in multiple ways and
+	// are not consistent.
+	AdErrorEnum_INCONSISTENT_DIMENSIONS AdErrorEnum_AdError = 35
+	// The status cannot differ among template ads of the same union.
+	AdErrorEnum_INCONSISTENT_STATUS_IN_TEMPLATE_UNION AdErrorEnum_AdError = 36
+	// The length of the string is not valid.
+	AdErrorEnum_INCORRECT_LENGTH AdErrorEnum_AdError = 37
+	// The ad is ineligible for upgrade.
+	AdErrorEnum_INELIGIBLE_FOR_UPGRADE AdErrorEnum_AdError = 38
+	// User cannot create mobile ad for countries targeted in specified
+	// campaign.
+	AdErrorEnum_INVALID_AD_ADDRESS_CAMPAIGN_TARGET AdErrorEnum_AdError = 39
+	// Invalid Ad type. A specific type of Ad is required.
+	AdErrorEnum_INVALID_AD_TYPE AdErrorEnum_AdError = 40
+	// Headline, description or phone cannot be present when creating mobile
+	// image ad.
+	AdErrorEnum_INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE AdErrorEnum_AdError = 41
+	// Image cannot be present when creating mobile text ad.
+	AdErrorEnum_INVALID_ATTRIBUTES_FOR_MOBILE_TEXT AdErrorEnum_AdError = 42
+	// Invalid call to action text.
+	AdErrorEnum_INVALID_CALL_TO_ACTION_TEXT AdErrorEnum_AdError = 43
+	// Invalid character in URL.
+	AdErrorEnum_INVALID_CHARACTER_FOR_URL AdErrorEnum_AdError = 44
+	// Creative's country code is not valid.
+	AdErrorEnum_INVALID_COUNTRY_CODE AdErrorEnum_AdError = 45
+	// Invalid use of Expanded Dynamic Search Ads tags ({lpurl} etc.)
+	AdErrorEnum_INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG AdErrorEnum_AdError = 47
+	// An input error whose real reason was not properly mapped (should not
+	// happen).
+	AdErrorEnum_INVALID_INPUT AdErrorEnum_AdError = 48
+	// An invalid markup language was entered.
+	AdErrorEnum_INVALID_MARKUP_LANGUAGE AdErrorEnum_AdError = 49
+	// An invalid mobile carrier was entered.
+	AdErrorEnum_INVALID_MOBILE_CARRIER AdErrorEnum_AdError = 50
+	// Specified mobile carriers target a country not targeted by the campaign.
+	AdErrorEnum_INVALID_MOBILE_CARRIER_TARGET AdErrorEnum_AdError = 51
+	// Wrong number of elements for given element type
+	AdErrorEnum_INVALID_NUMBER_OF_ELEMENTS AdErrorEnum_AdError = 52
+	// The format of the telephone number is incorrect. Please re-enter the
+	// number using the correct format.
+	AdErrorEnum_INVALID_PHONE_NUMBER_FORMAT AdErrorEnum_AdError = 53
+	// The certified vendor format id is incorrect.
+	AdErrorEnum_INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID AdErrorEnum_AdError = 54
+	// The template ad data contains validation errors.
+	AdErrorEnum_INVALID_TEMPLATE_DATA AdErrorEnum_AdError = 55
+	// The template field doesn't have have the correct type.
+	AdErrorEnum_INVALID_TEMPLATE_ELEMENT_FIELD_TYPE AdErrorEnum_AdError = 56
+	// Invalid template id.
+	AdErrorEnum_INVALID_TEMPLATE_ID AdErrorEnum_AdError = 57
+	// After substituting replacement strings, the line is too wide.
+	AdErrorEnum_LINE_TOO_WIDE AdErrorEnum_AdError = 58
+	// The feed referenced must have ad customizer mapping to be used in a
+	// customizer tag.
+	AdErrorEnum_MISSING_AD_CUSTOMIZER_MAPPING AdErrorEnum_AdError = 59
+	// Missing address component in template element address field.
+	AdErrorEnum_MISSING_ADDRESS_COMPONENT AdErrorEnum_AdError = 60
+	// An ad name must be entered.
+	AdErrorEnum_MISSING_ADVERTISEMENT_NAME AdErrorEnum_AdError = 61
+	// Business name must be entered.
+	AdErrorEnum_MISSING_BUSINESS_NAME AdErrorEnum_AdError = 62
+	// Description (line 2) must be entered.
+	AdErrorEnum_MISSING_DESCRIPTION1 AdErrorEnum_AdError = 63
+	// Description (line 3) must be entered.
+	AdErrorEnum_MISSING_DESCRIPTION2 AdErrorEnum_AdError = 64
+	// The destination url must contain at least one tag (e.g. {lpurl})
+	AdErrorEnum_MISSING_DESTINATION_URL_TAG AdErrorEnum_AdError = 65
+	// The tracking url template of ExpandedDynamicSearchAd must contain at
+	// least one tag. (e.g. {lpurl})
+	AdErrorEnum_MISSING_LANDING_PAGE_URL_TAG AdErrorEnum_AdError = 66
+	// A valid dimension must be specified for this ad.
+	AdErrorEnum_MISSING_DIMENSION AdErrorEnum_AdError = 67
+	// A display URL must be entered.
+	AdErrorEnum_MISSING_DISPLAY_URL AdErrorEnum_AdError = 68
+	// Headline must be entered.
+	AdErrorEnum_MISSING_HEADLINE AdErrorEnum_AdError = 69
+	// A height must be entered.
+	AdErrorEnum_MISSING_HEIGHT AdErrorEnum_AdError = 70
+	// An image must be entered.
+	AdErrorEnum_MISSING_IMAGE AdErrorEnum_AdError = 71
+	// Marketing image or product videos are required.
+	AdErrorEnum_MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS AdErrorEnum_AdError = 72
+	// The markup language in which your site is written must be entered.
+	AdErrorEnum_MISSING_MARKUP_LANGUAGES AdErrorEnum_AdError = 73
+	// A mobile carrier must be entered.
+	AdErrorEnum_MISSING_MOBILE_CARRIER AdErrorEnum_AdError = 74
+	// Phone number must be entered.
+	AdErrorEnum_MISSING_PHONE AdErrorEnum_AdError = 75
+	// Missing required template fields
+	AdErrorEnum_MISSING_REQUIRED_TEMPLATE_FIELDS AdErrorEnum_AdError = 76
+	// Missing a required field value
+	AdErrorEnum_MISSING_TEMPLATE_FIELD_VALUE AdErrorEnum_AdError = 77
+	// The ad must have text.
+	AdErrorEnum_MISSING_TEXT AdErrorEnum_AdError = 78
+	// A visible URL must be entered.
+	AdErrorEnum_MISSING_VISIBLE_URL AdErrorEnum_AdError = 79
+	// A width must be entered.
+	AdErrorEnum_MISSING_WIDTH AdErrorEnum_AdError = 80
+	// Only 1 feed can be used as the source of ad customizer substitutions in a
+	// single ad.
+	AdErrorEnum_MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED AdErrorEnum_AdError = 81
+	// TempAdUnionId must be use when adding template ads.
+	AdErrorEnum_MUST_USE_TEMP_AD_UNION_ID_ON_ADD AdErrorEnum_AdError = 82
+	// The string has too many characters.
+	AdErrorEnum_TOO_LONG AdErrorEnum_AdError = 83
+	// The string has too few characters.
+	AdErrorEnum_TOO_SHORT AdErrorEnum_AdError = 84
+	// Ad union dimensions cannot change for saved ads.
+	AdErrorEnum_UNION_DIMENSIONS_CANNOT_CHANGE AdErrorEnum_AdError = 85
+	// Address component is not {country, lat, lng}.
+	AdErrorEnum_UNKNOWN_ADDRESS_COMPONENT AdErrorEnum_AdError = 86
+	// Unknown unique field name
+	AdErrorEnum_UNKNOWN_FIELD_NAME AdErrorEnum_AdError = 87
+	// Unknown unique name (template element type specifier)
+	AdErrorEnum_UNKNOWN_UNIQUE_NAME AdErrorEnum_AdError = 88
+	// Unsupported ad dimension
+	AdErrorEnum_UNSUPPORTED_DIMENSIONS AdErrorEnum_AdError = 89
+	// URL starts with an invalid scheme.
+	AdErrorEnum_URL_INVALID_SCHEME AdErrorEnum_AdError = 90
+	// URL ends with an invalid top-level domain name.
+	AdErrorEnum_URL_INVALID_TOP_LEVEL_DOMAIN AdErrorEnum_AdError = 91
+	// URL contains illegal characters.
+	AdErrorEnum_URL_MALFORMED AdErrorEnum_AdError = 92
+	// URL must contain a host name.
+	AdErrorEnum_URL_NO_HOST AdErrorEnum_AdError = 93
+	// URL not equivalent during upgrade.
+	AdErrorEnum_URL_NOT_EQUIVALENT AdErrorEnum_AdError = 94
+	// URL host name too long to be stored as visible URL (applies to Ad
+	// Exchange ads)
+	AdErrorEnum_URL_HOST_NAME_TOO_LONG AdErrorEnum_AdError = 95
+	// URL must start with a scheme.
+	AdErrorEnum_URL_NO_SCHEME AdErrorEnum_AdError = 96
+	// URL should end in a valid domain extension, such as .com or .net.
+	AdErrorEnum_URL_NO_TOP_LEVEL_DOMAIN AdErrorEnum_AdError = 97
+	// URL must not end with a path.
+	AdErrorEnum_URL_PATH_NOT_ALLOWED AdErrorEnum_AdError = 98
+	// URL must not specify a port.
+	AdErrorEnum_URL_PORT_NOT_ALLOWED AdErrorEnum_AdError = 99
+	// URL must not contain a query.
+	AdErrorEnum_URL_QUERY_NOT_ALLOWED AdErrorEnum_AdError = 100
+	// A url scheme is not allowed in front of tag in tracking url template
+	// (e.g. http://{lpurl})
+	AdErrorEnum_URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG AdErrorEnum_AdError = 102
+	// The user does not have permissions to create a template ad for the given
+	// template.
+	AdErrorEnum_USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE AdErrorEnum_AdError = 103
+	// Expandable setting is inconsistent/wrong. For example, an AdX ad is
+	// invalid if it has a expandable vendor format but no expanding directions
+	// specified, or expanding directions is specified, but the vendor format is
+	// not expandable.
+	AdErrorEnum_INCONSISTENT_EXPANDABLE_SETTINGS AdErrorEnum_AdError = 104
+	// Format is invalid
+	AdErrorEnum_INVALID_FORMAT AdErrorEnum_AdError = 105
+	// The text of this field did not match a pattern of allowed values.
+	AdErrorEnum_INVALID_FIELD_TEXT AdErrorEnum_AdError = 106
+	// Template element is mising
+	AdErrorEnum_ELEMENT_NOT_PRESENT AdErrorEnum_AdError = 107
+	// Error occurred during image processing
+	AdErrorEnum_IMAGE_ERROR AdErrorEnum_AdError = 108
+	// The value is not within the valid range
+	AdErrorEnum_VALUE_NOT_IN_RANGE AdErrorEnum_AdError = 109
+	// Template element field is not present
+	AdErrorEnum_FIELD_NOT_PRESENT AdErrorEnum_AdError = 110
+	// Address is incomplete
+	AdErrorEnum_ADDRESS_NOT_COMPLETE AdErrorEnum_AdError = 111
+	// Invalid address
+	AdErrorEnum_ADDRESS_INVALID AdErrorEnum_AdError = 112
+	// Error retrieving specified video
+	AdErrorEnum_VIDEO_RETRIEVAL_ERROR AdErrorEnum_AdError = 113
+	// Error processing audio
+	AdErrorEnum_AUDIO_ERROR AdErrorEnum_AdError = 114
+	// Display URL is incorrect for YouTube PYV ads
+	AdErrorEnum_INVALID_YOUTUBE_DISPLAY_URL AdErrorEnum_AdError = 115
+	// Too many product Images in GmailAd
+	AdErrorEnum_TOO_MANY_PRODUCT_IMAGES AdErrorEnum_AdError = 116
+	// Too many product Videos in GmailAd
+	AdErrorEnum_TOO_MANY_PRODUCT_VIDEOS AdErrorEnum_AdError = 117
+	// The device preference is not compatible with the ad type
+	AdErrorEnum_INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE AdErrorEnum_AdError = 118
+	// Call tracking is not supported for specified country.
+	AdErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY AdErrorEnum_AdError = 119
+	// Carrier specific short number is not allowed.
+	AdErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 120
+	// Specified phone number type is disallowed.
+	AdErrorEnum_DISALLOWED_NUMBER_TYPE AdErrorEnum_AdError = 121
+	// Phone number not supported for country.
+	AdErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY AdErrorEnum_AdError = 122
+	// Phone number not supported with call tracking enabled for country.
+	AdErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY AdErrorEnum_AdError = 123
+	// Premium rate phone number is not allowed.
+	AdErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 124
+	// Vanity phone number is not allowed.
+	AdErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 125
+	// Invalid call conversion type id.
+	AdErrorEnum_INVALID_CALL_CONVERSION_TYPE_ID AdErrorEnum_AdError = 126
+	// Cannot disable call conversion and set conversion type id.
+	AdErrorEnum_CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID AdErrorEnum_AdError = 127
+	// Cannot set path2 without path1.
+	AdErrorEnum_CANNOT_SET_PATH2_WITHOUT_PATH1 AdErrorEnum_AdError = 128
+	// Missing domain name in campaign setting when adding expanded dynamic
+	// search ad.
+	AdErrorEnum_MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME AdErrorEnum_AdError = 129
+	// The associated ad is not compatible with restriction type.
+	AdErrorEnum_INCOMPATIBLE_WITH_RESTRICTION_TYPE AdErrorEnum_AdError = 130
+	// Consent for call recording is required for creating/updating call only
+	// ads. Please see https://support.google.com/google-ads/answer/7412639.
+	AdErrorEnum_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED AdErrorEnum_AdError = 131
+	// Either an image or a media bundle is required in a display upload ad.
+	AdErrorEnum_MISSING_IMAGE_OR_MEDIA_BUNDLE AdErrorEnum_AdError = 132
+	// The display upload product type is not supported in this campaign.
+	AdErrorEnum_PRODUCT_TYPE_NOT_SUPPORTED_IN_THIS_CAMPAIGN AdErrorEnum_AdError = 133
+	// The default value of an ad placeholder can not be the empty string.
+	AdErrorEnum_PLACEHOLDER_CANNOT_HAVE_EMPTY_DEFAULT_VALUE AdErrorEnum_AdError = 134
+	// Ad placeholders with countdown functions must not have a default value.
+	AdErrorEnum_PLACEHOLDER_COUNTDOWN_FUNCTION_CANNOT_HAVE_DEFAULT_VALUE AdErrorEnum_AdError = 135
+	// A previous ad placeholder that had a default value was found which means
+	// that all (non-countdown) placeholders must have a default value. This
+	// ad placeholder does not have a default value.
+	AdErrorEnum_PLACEHOLDER_DEFAULT_VALUE_MISSING AdErrorEnum_AdError = 136
+	// A previous ad placeholder that did not have a default value was found
+	// which means that no placeholders may have a default value. This
+	// ad placeholder does have a default value.
+	AdErrorEnum_UNEXPECTED_PLACEHOLDER_DEFAULT_VALUE AdErrorEnum_AdError = 137
+	// Two ad customizers may not be directly adjacent in an ad text. They must
+	// be separated by at least one character.
+	AdErrorEnum_AD_CUSTOMIZERS_MAY_NOT_BE_ADJACENT AdErrorEnum_AdError = 138
+	// The ad is not associated with any enabled AdGroupAd, and cannot be
+	// updated.
+	AdErrorEnum_UPDATING_AD_WITH_NO_ENABLED_ASSOCIATION AdErrorEnum_AdError = 139
+)
+
+var AdErrorEnum_AdError_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	2:   "AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE",
+	3:   "APPROXIMATELY_TOO_LONG",
+	4:   "APPROXIMATELY_TOO_SHORT",
+	5:   "BAD_SNIPPET",
+	6:   "CANNOT_MODIFY_AD",
+	7:   "CANNOT_SET_BUSINESS_NAME_IF_URL_SET",
+	8:   "CANNOT_SET_FIELD",
+	9:   "CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET",
+	10:  "CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING",
+	11:  "CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE",
+	12:  "CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING",
+	13:  "CANNOT_SET_URL",
+	14:  "CANNOT_SET_WITHOUT_FINAL_URLS",
+	15:  "CANNOT_SET_WITH_FINAL_URLS",
+	17:  "CANNOT_SET_WITH_URL_DATA",
+	18:  "CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR",
+	19:  "CUSTOMER_NOT_APPROVED_MOBILEADS",
+	20:  "CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS",
+	21:  "CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS",
+	22:  "CUSTOMER_NOT_ELIGIBLE",
+	23:  "CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL",
+	24:  "DIMENSION_ALREADY_IN_UNION",
+	25:  "DIMENSION_MUST_BE_SET",
+	26:  "DIMENSION_NOT_IN_UNION",
+	27:  "DISPLAY_URL_CANNOT_BE_SPECIFIED",
+	28:  "DOMESTIC_PHONE_NUMBER_FORMAT",
+	29:  "EMERGENCY_PHONE_NUMBER",
+	30:  "EMPTY_FIELD",
+	31:  "FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID",
+	32:  "FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH",
+	33:  "ILLEGAL_AD_CUSTOMIZER_TAG_USE",
+	34:  "ILLEGAL_TAG_USE",
+	35:  "INCONSISTENT_DIMENSIONS",
+	36:  "INCONSISTENT_STATUS_IN_TEMPLATE_UNION",
+	37:  "INCORRECT_LENGTH",
+	38:  "INELIGIBLE_FOR_UPGRADE",
+	39:  "INVALID_AD_ADDRESS_CAMPAIGN_TARGET",
+	40:  "INVALID_AD_TYPE",
+	41:  "INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE",
+	42:  "INVALID_ATTRIBUTES_FOR_MOBILE_TEXT",
+	43:  "INVALID_CALL_TO_ACTION_TEXT",
+	44:  "INVALID_CHARACTER_FOR_URL",
+	45:  "INVALID_COUNTRY_CODE",
+	47:  "INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
+	48:  "INVALID_INPUT",
+	49:  "INVALID_MARKUP_LANGUAGE",
+	50:  "INVALID_MOBILE_CARRIER",
+	51:  "INVALID_MOBILE_CARRIER_TARGET",
+	52:  "INVALID_NUMBER_OF_ELEMENTS",
+	53:  "INVALID_PHONE_NUMBER_FORMAT",
+	54:  "INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID",
+	55:  "INVALID_TEMPLATE_DATA",
+	56:  "INVALID_TEMPLATE_ELEMENT_FIELD_TYPE",
+	57:  "INVALID_TEMPLATE_ID",
+	58:  "LINE_TOO_WIDE",
+	59:  "MISSING_AD_CUSTOMIZER_MAPPING",
+	60:  "MISSING_ADDRESS_COMPONENT",
+	61:  "MISSING_ADVERTISEMENT_NAME",
+	62:  "MISSING_BUSINESS_NAME",
+	63:  "MISSING_DESCRIPTION1",
+	64:  "MISSING_DESCRIPTION2",
+	65:  "MISSING_DESTINATION_URL_TAG",
+	66:  "MISSING_LANDING_PAGE_URL_TAG",
+	67:  "MISSING_DIMENSION",
+	68:  "MISSING_DISPLAY_URL",
+	69:  "MISSING_HEADLINE",
+	70:  "MISSING_HEIGHT",
+	71:  "MISSING_IMAGE",
+	72:  "MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS",
+	73:  "MISSING_MARKUP_LANGUAGES",
+	74:  "MISSING_MOBILE_CARRIER",
+	75:  "MISSING_PHONE",
+	76:  "MISSING_REQUIRED_TEMPLATE_FIELDS",
+	77:  "MISSING_TEMPLATE_FIELD_VALUE",
+	78:  "MISSING_TEXT",
+	79:  "MISSING_VISIBLE_URL",
+	80:  "MISSING_WIDTH",
+	81:  "MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED",
+	82:  "MUST_USE_TEMP_AD_UNION_ID_ON_ADD",
+	83:  "TOO_LONG",
+	84:  "TOO_SHORT",
+	85:  "UNION_DIMENSIONS_CANNOT_CHANGE",
+	86:  "UNKNOWN_ADDRESS_COMPONENT",
+	87:  "UNKNOWN_FIELD_NAME",
+	88:  "UNKNOWN_UNIQUE_NAME",
+	89:  "UNSUPPORTED_DIMENSIONS",
+	90:  "URL_INVALID_SCHEME",
+	91:  "URL_INVALID_TOP_LEVEL_DOMAIN",
+	92:  "URL_MALFORMED",
+	93:  "URL_NO_HOST",
+	94:  "URL_NOT_EQUIVALENT",
+	95:  "URL_HOST_NAME_TOO_LONG",
+	96:  "URL_NO_SCHEME",
+	97:  "URL_NO_TOP_LEVEL_DOMAIN",
+	98:  "URL_PATH_NOT_ALLOWED",
+	99:  "URL_PORT_NOT_ALLOWED",
+	100: "URL_QUERY_NOT_ALLOWED",
+	102: "URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
+	103: "USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE",
+	104: "INCONSISTENT_EXPANDABLE_SETTINGS",
+	105: "INVALID_FORMAT",
+	106: "INVALID_FIELD_TEXT",
+	107: "ELEMENT_NOT_PRESENT",
+	108: "IMAGE_ERROR",
+	109: "VALUE_NOT_IN_RANGE",
+	110: "FIELD_NOT_PRESENT",
+	111: "ADDRESS_NOT_COMPLETE",
+	112: "ADDRESS_INVALID",
+	113: "VIDEO_RETRIEVAL_ERROR",
+	114: "AUDIO_ERROR",
+	115: "INVALID_YOUTUBE_DISPLAY_URL",
+	116: "TOO_MANY_PRODUCT_IMAGES",
+	117: "TOO_MANY_PRODUCT_VIDEOS",
+	118: "INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE",
+	119: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	120: "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
+	121: "DISALLOWED_NUMBER_TYPE",
+	122: "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
+	123: "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
+	124: "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
+	125: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
+	126: "INVALID_CALL_CONVERSION_TYPE_ID",
+	127: "CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID",
+	128: "CANNOT_SET_PATH2_WITHOUT_PATH1",
+	129: "MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME",
+	130: "INCOMPATIBLE_WITH_RESTRICTION_TYPE",
+	131: "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
+	132: "MISSING_IMAGE_OR_MEDIA_BUNDLE",
+	133: "PRODUCT_TYPE_NOT_SUPPORTED_IN_THIS_CAMPAIGN",
+	134: "PLACEHOLDER_CANNOT_HAVE_EMPTY_DEFAULT_VALUE",
+	135: "PLACEHOLDER_COUNTDOWN_FUNCTION_CANNOT_HAVE_DEFAULT_VALUE",
+	136: "PLACEHOLDER_DEFAULT_VALUE_MISSING",
+	137: "UNEXPECTED_PLACEHOLDER_DEFAULT_VALUE",
+	138: "AD_CUSTOMIZERS_MAY_NOT_BE_ADJACENT",
+	139: "UPDATING_AD_WITH_NO_ENABLED_ASSOCIATION",
+}
+
+var AdErrorEnum_AdError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE":                  2,
+	"APPROXIMATELY_TOO_LONG":                                    3,
+	"APPROXIMATELY_TOO_SHORT":                                   4,
+	"BAD_SNIPPET":                                               5,
+	"CANNOT_MODIFY_AD":                                          6,
+	"CANNOT_SET_BUSINESS_NAME_IF_URL_SET":                       7,
+	"CANNOT_SET_FIELD":                                          8,
+	"CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET":                    9,
+	"CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING":               10,
+	"CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE":                     11,
+	"CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING":       12,
+	"CANNOT_SET_URL":                                            13,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                             14,
+	"CANNOT_SET_WITH_FINAL_URLS":                                15,
+	"CANNOT_SET_WITH_URL_DATA":                                  17,
+	"CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR":                       18,
+	"CUSTOMER_NOT_APPROVED_MOBILEADS":                           19,
+	"CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS":                      20,
+	"CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS":             21,
+	"CUSTOMER_NOT_ELIGIBLE":                                     22,
+	"CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL":             23,
+	"DIMENSION_ALREADY_IN_UNION":                                24,
+	"DIMENSION_MUST_BE_SET":                                     25,
+	"DIMENSION_NOT_IN_UNION":                                    26,
+	"DISPLAY_URL_CANNOT_BE_SPECIFIED":                           27,
+	"DOMESTIC_PHONE_NUMBER_FORMAT":                              28,
+	"EMERGENCY_PHONE_NUMBER":                                    29,
+	"EMPTY_FIELD":                                               30,
+	"FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID":              31,
+	"FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH":                      32,
+	"ILLEGAL_AD_CUSTOMIZER_TAG_USE":                             33,
+	"ILLEGAL_TAG_USE":                                           34,
+	"INCONSISTENT_DIMENSIONS":                                   35,
+	"INCONSISTENT_STATUS_IN_TEMPLATE_UNION":                     36,
+	"INCORRECT_LENGTH":                                          37,
+	"INELIGIBLE_FOR_UPGRADE":                                    38,
+	"INVALID_AD_ADDRESS_CAMPAIGN_TARGET":                        39,
+	"INVALID_AD_TYPE":                                           40,
+	"INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE":                       41,
+	"INVALID_ATTRIBUTES_FOR_MOBILE_TEXT":                        42,
+	"INVALID_CALL_TO_ACTION_TEXT":                               43,
+	"INVALID_CHARACTER_FOR_URL":                                 44,
+	"INVALID_COUNTRY_CODE":                                      45,
+	"INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG":                    47,
+	"INVALID_INPUT":                                             48,
+	"INVALID_MARKUP_LANGUAGE":                                   49,
+	"INVALID_MOBILE_CARRIER":                                    50,
+	"INVALID_MOBILE_CARRIER_TARGET":                             51,
+	"INVALID_NUMBER_OF_ELEMENTS":                                52,
+	"INVALID_PHONE_NUMBER_FORMAT":                               53,
+	"INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID":             54,
+	"INVALID_TEMPLATE_DATA":                                     55,
+	"INVALID_TEMPLATE_ELEMENT_FIELD_TYPE":                       56,
+	"INVALID_TEMPLATE_ID":                                       57,
+	"LINE_TOO_WIDE":                                             58,
+	"MISSING_AD_CUSTOMIZER_MAPPING":                             59,
+	"MISSING_ADDRESS_COMPONENT":                                 60,
+	"MISSING_ADVERTISEMENT_NAME":                                61,
+	"MISSING_BUSINESS_NAME":                                     62,
+	"MISSING_DESCRIPTION1":                                      63,
+	"MISSING_DESCRIPTION2":                                      64,
+	"MISSING_DESTINATION_URL_TAG":                               65,
+	"MISSING_LANDING_PAGE_URL_TAG":                              66,
+	"MISSING_DIMENSION":                                         67,
+	"MISSING_DISPLAY_URL":                                       68,
+	"MISSING_HEADLINE":                                          69,
+	"MISSING_HEIGHT":                                            70,
+	"MISSING_IMAGE":                                             71,
+	"MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS":                 72,
+	"MISSING_MARKUP_LANGUAGES":                                  73,
+	"MISSING_MOBILE_CARRIER":                                    74,
+	"MISSING_PHONE":                                             75,
+	"MISSING_REQUIRED_TEMPLATE_FIELDS":                          76,
+	"MISSING_TEMPLATE_FIELD_VALUE":                              77,
+	"MISSING_TEXT":                                              78,
+	"MISSING_VISIBLE_URL":                                       79,
+	"MISSING_WIDTH":                                             80,
+	"MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED":                       81,
+	"MUST_USE_TEMP_AD_UNION_ID_ON_ADD":                          82,
+	"TOO_LONG":                                                  83,
+	"TOO_SHORT":                                                 84,
+	"UNION_DIMENSIONS_CANNOT_CHANGE":                            85,
+	"UNKNOWN_ADDRESS_COMPONENT":                                 86,
+	"UNKNOWN_FIELD_NAME":                                        87,
+	"UNKNOWN_UNIQUE_NAME":                                       88,
+	"UNSUPPORTED_DIMENSIONS":                                    89,
+	"URL_INVALID_SCHEME":                                        90,
+	"URL_INVALID_TOP_LEVEL_DOMAIN":                              91,
+	"URL_MALFORMED":                                             92,
+	"URL_NO_HOST":                                               93,
+	"URL_NOT_EQUIVALENT":                                        94,
+	"URL_HOST_NAME_TOO_LONG":                                    95,
+	"URL_NO_SCHEME":                                             96,
+	"URL_NO_TOP_LEVEL_DOMAIN":                                   97,
+	"URL_PATH_NOT_ALLOWED":                                      98,
+	"URL_PORT_NOT_ALLOWED":                                      99,
+	"URL_QUERY_NOT_ALLOWED":                                     100,
+	"URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG":          102,
+	"USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE":                     103,
+	"INCONSISTENT_EXPANDABLE_SETTINGS":                          104,
+	"INVALID_FORMAT":                                            105,
+	"INVALID_FIELD_TEXT":                                        106,
+	"ELEMENT_NOT_PRESENT":                                       107,
+	"IMAGE_ERROR":                                               108,
+	"VALUE_NOT_IN_RANGE":                                        109,
+	"FIELD_NOT_PRESENT":                                         110,
+	"ADDRESS_NOT_COMPLETE":                                      111,
+	"ADDRESS_INVALID":                                           112,
+	"VIDEO_RETRIEVAL_ERROR":                                     113,
+	"AUDIO_ERROR":                                               114,
+	"INVALID_YOUTUBE_DISPLAY_URL":                               115,
+	"TOO_MANY_PRODUCT_IMAGES":                                   116,
+	"TOO_MANY_PRODUCT_VIDEOS":                                   117,
+	"INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE":                118,
+	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                    119,
+	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                 120,
+	"DISALLOWED_NUMBER_TYPE":                                    121,
+	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                    122,
+	"PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY":  123,
+	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                           124,
+	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                           125,
+	"INVALID_CALL_CONVERSION_TYPE_ID":                           126,
+	"CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID": 127,
+	"CANNOT_SET_PATH2_WITHOUT_PATH1":                            128,
+	"MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME":            129,
+	"INCOMPATIBLE_WITH_RESTRICTION_TYPE":                        130,
+	"CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED":              131,
+	"MISSING_IMAGE_OR_MEDIA_BUNDLE":                             132,
+	"PRODUCT_TYPE_NOT_SUPPORTED_IN_THIS_CAMPAIGN":               133,
+	"PLACEHOLDER_CANNOT_HAVE_EMPTY_DEFAULT_VALUE":               134,
+	"PLACEHOLDER_COUNTDOWN_FUNCTION_CANNOT_HAVE_DEFAULT_VALUE":  135,
+	"PLACEHOLDER_DEFAULT_VALUE_MISSING":                         136,
+	"UNEXPECTED_PLACEHOLDER_DEFAULT_VALUE":                      137,
+	"AD_CUSTOMIZERS_MAY_NOT_BE_ADJACENT":                        138,
+	"UPDATING_AD_WITH_NO_ENABLED_ASSOCIATION":                   139,
+}
+
+func (x AdErrorEnum_AdError) String() string {
+	return proto.EnumName(AdErrorEnum_AdError_name, int32(x))
+}
+
+func (AdErrorEnum_AdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_55578c5f7a565f9a, []int{0, 0}
+}
+
+// Container for enum describing possible ad errors.
+type AdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdErrorEnum) Reset()         { *m = AdErrorEnum{} }
+func (m *AdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdErrorEnum) ProtoMessage()    {}
+func (*AdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_55578c5f7a565f9a, []int{0}
+}
+
+func (m *AdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdErrorEnum.Unmarshal(m, b)
+}
+func (m *AdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdErrorEnum.Merge(m, src)
+}
+func (m *AdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdErrorEnum.Size(m)
+}
+func (m *AdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdErrorEnum_AdError", AdErrorEnum_AdError_name, AdErrorEnum_AdError_value)
+	proto.RegisterType((*AdErrorEnum)(nil), "google.ads.googleads.v3.errors.AdErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_error.proto", fileDescriptor_55578c5f7a565f9a)
+}
+
+var fileDescriptor_55578c5f7a565f9a = []byte{
+	// 2174 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x58, 0x6b, 0x7b, 0x14, 0xb7,
+	0x15, 0xee, 0x92, 0x36, 0x24, 0x02, 0x82, 0x10, 0xf7, 0x9b, 0x01, 0x43, 0xb8, 0xb3, 0x06, 0x9c,
+	0x36, 0xc4, 0x09, 0x6d, 0xb5, 0xa3, 0xb3, 0xbb, 0x0a, 0x1a, 0x69, 0x90, 0x34, 0x6b, 0x2f, 0xa5,
+	0x55, 0x9d, 0x98, 0xba, 0xb4, 0xe0, 0xa5, 0x36, 0xa1, 0xf7, 0xfb, 0xbd, 0xf9, 0x17, 0xfd, 0xd8,
+	0x9f, 0xd2, 0x3f, 0xd2, 0xe7, 0xe9, 0x5f, 0xe8, 0x97, 0x3e, 0x47, 0x9a, 0x99, 0x9d, 0xb5, 0x4d,
+	0xf2, 0xc9, 0x6b, 0x9d, 0x57, 0x97, 0xf3, 0xea, 0x3d, 0x17, 0x0d, 0xb9, 0xb5, 0x3e, 0x99, 0xac,
+	0x3f, 0x7b, 0xb2, 0xb0, 0xba, 0xb6, 0xb5, 0x90, 0x7e, 0xe2, 0xaf, 0x57, 0x8b, 0x0b, 0x4f, 0x36,
+	0x37, 0x27, 0x9b, 0x5b, 0x0b, 0xab, 0x6b, 0x21, 0xfe, 0xea, 0xbe, 0xd8, 0x9c, 0xbc, 0x9c, 0xb0,
+	0xb9, 0x84, 0xe9, 0xae, 0xae, 0x6d, 0x75, 0x1b, 0x78, 0xf7, 0xd5, 0x62, 0x37, 0xc1, 0x4f, 0x9d,
+	0xa9, 0x97, 0x7b, 0xf1, 0x74, 0x61, 0x75, 0x63, 0x63, 0xf2, 0x72, 0xf5, 0xe5, 0xd3, 0xc9, 0xc6,
+	0x56, 0x9a, 0x3d, 0xff, 0xf9, 0x45, 0xb2, 0x8f, 0xaf, 0x01, 0x42, 0x61, 0xe3, 0xb3, 0xe7, 0xf3,
+	0xff, 0x9b, 0x27, 0x7b, 0xab, 0xff, 0xd9, 0x41, 0xb2, 0xaf, 0xd4, 0xae, 0x80, 0x4c, 0xf6, 0x25,
+	0x08, 0xfa, 0x15, 0xb6, 0x8f, 0xec, 0x2d, 0xf5, 0x03, 0x6d, 0x96, 0x35, 0xed, 0xb0, 0x9b, 0xe4,
+	0x2a, 0x17, 0x21, 0x2b, 0x9d, 0x37, 0xb9, 0x7c, 0x04, 0xd6, 0x05, 0x6d, 0x7c, 0x70, 0x65, 0x51,
+	0x18, 0xeb, 0x41, 0x84, 0xbe, 0xb1, 0x81, 0x8b, 0xe0, 0xc7, 0x05, 0xd0, 0x3d, 0xec, 0x14, 0x39,
+	0xc6, 0x8b, 0xc2, 0x9a, 0x15, 0x99, 0x73, 0x0f, 0x6a, 0x1c, 0xbc, 0x31, 0x41, 0x19, 0x3d, 0xa0,
+	0x6f, 0xb0, 0xd3, 0xe4, 0xf8, 0x4e, 0x9b, 0x1b, 0x1a, 0xeb, 0xe9, 0x57, 0xf1, 0x10, 0x3d, 0x2e,
+	0x82, 0xd3, 0xb2, 0x28, 0xc0, 0xd3, 0xaf, 0xb1, 0x23, 0x84, 0x66, 0x5c, 0xe3, 0x5e, 0xb9, 0x11,
+	0xb2, 0x3f, 0x0e, 0x5c, 0xd0, 0x37, 0xd9, 0x15, 0x72, 0xb1, 0x1a, 0x75, 0xe0, 0x43, 0xaf, 0x74,
+	0x52, 0x83, 0x73, 0x41, 0xf3, 0x1c, 0x82, 0xec, 0x87, 0xd2, 0x2a, 0x34, 0xd0, 0xbd, 0xad, 0xe9,
+	0x08, 0xec, 0x4b, 0x50, 0x82, 0xbe, 0xc5, 0xae, 0x93, 0xcb, 0xdb, 0x47, 0xc3, 0xb2, 0xf4, 0xc3,
+	0x60, 0xac, 0x1c, 0x48, 0x8d, 0x8e, 0x48, 0x11, 0x57, 0x78, 0x9b, 0x2d, 0x90, 0x1b, 0xbb, 0x63,
+	0x1b, 0x50, 0xf4, 0xdd, 0x0d, 0xb9, 0x95, 0x7a, 0x40, 0x09, 0xbb, 0x46, 0xde, 0x6d, 0x4d, 0xe0,
+	0x4a, 0x99, 0xe5, 0xd0, 0x57, 0xb0, 0x22, 0x7b, 0x0a, 0x42, 0x66, 0x94, 0xb1, 0xa1, 0xcf, 0x95,
+	0x03, 0xba, 0x8f, 0xbd, 0x4f, 0x16, 0x5b, 0xd0, 0x64, 0xcb, 0x8c, 0xf6, 0xd6, 0xa8, 0xb0, 0x3c,
+	0x04, 0x1d, 0x34, 0xf7, 0x72, 0x04, 0xb8, 0x41, 0xce, 0x23, 0xc8, 0xe3, 0x1e, 0xfb, 0x19, 0x23,
+	0xef, 0xb4, 0x26, 0x96, 0x56, 0xd1, 0x03, 0xec, 0x02, 0x39, 0xdb, 0x1a, 0xc3, 0x23, 0x9a, 0x12,
+	0x0f, 0xac, 0xb9, 0x42, 0x84, 0xa3, 0xef, 0xb0, 0x39, 0x72, 0x6a, 0x1b, 0xa4, 0x6d, 0x3f, 0xc8,
+	0xce, 0x90, 0x13, 0xdb, 0xed, 0x48, 0xa5, 0xe0, 0x9e, 0xd3, 0x43, 0x2d, 0xd2, 0x4b, 0x07, 0xe8,
+	0xbe, 0x2b, 0x7b, 0x99, 0xe2, 0xce, 0x45, 0x02, 0x4c, 0x01, 0x96, 0x7b, 0x63, 0x29, 0x63, 0x17,
+	0xc9, 0xb9, 0x24, 0x14, 0xb0, 0x51, 0x25, 0xf1, 0xba, 0x47, 0x20, 0x42, 0x6e, 0x7a, 0x52, 0x01,
+	0x17, 0x8e, 0x1e, 0x66, 0x57, 0xc9, 0xa5, 0xdd, 0x41, 0x7e, 0x28, 0xad, 0x28, 0xb8, 0xf5, 0x78,
+	0xd7, 0x8e, 0x1e, 0x61, 0x77, 0xc8, 0xad, 0x2f, 0x45, 0x5a, 0x10, 0xd2, 0x42, 0xe6, 0xe3, 0x94,
+	0xa3, 0xec, 0x24, 0x39, 0x3a, 0x33, 0x05, 0x94, 0x1c, 0x20, 0xff, 0xf4, 0xd8, 0x8e, 0xd5, 0x6a,
+	0x53, 0x74, 0xa2, 0x2c, 0x04, 0x47, 0x8a, 0x43, 0x0f, 0x78, 0x66, 0x74, 0x64, 0xf6, 0x38, 0xd2,
+	0x26, 0x64, 0x0e, 0xda, 0x49, 0xa3, 0x03, 0x57, 0x16, 0xb8, 0x18, 0x07, 0xa9, 0x43, 0xa9, 0xa5,
+	0xd1, 0xf4, 0x04, 0xee, 0x36, 0xb5, 0xe7, 0xa5, 0xf3, 0xa1, 0x07, 0x51, 0x3d, 0x27, 0x31, 0x10,
+	0xa6, 0x26, 0xdc, 0xae, 0x99, 0x76, 0x0a, 0x69, 0x12, 0xd2, 0x15, 0x8a, 0x8f, 0x23, 0xcb, 0x15,
+	0xb7, 0x38, 0xb5, 0x09, 0xc2, 0xd3, 0xec, 0x3c, 0x39, 0x23, 0x4c, 0x0e, 0xce, 0xcb, 0x2c, 0x14,
+	0x43, 0xa3, 0x21, 0xe8, 0x32, 0xef, 0x81, 0xad, 0x34, 0x41, 0xcf, 0xe0, 0x16, 0x90, 0x83, 0x1d,
+	0x80, 0xce, 0xc6, 0x33, 0x10, 0x7a, 0x16, 0xc3, 0x09, 0xf2, 0xc2, 0x8f, 0x2b, 0xe5, 0xcf, 0xb1,
+	0xdb, 0xe4, 0x66, 0x1f, 0x40, 0x04, 0xee, 0xbd, 0x95, 0xbd, 0xd2, 0x43, 0x3a, 0xef, 0x90, 0x8f,
+	0x20, 0xe4, 0xbc, 0x28, 0xd0, 0x77, 0x24, 0x02, 0xe3, 0x38, 0x48, 0x41, 0xcf, 0xe1, 0x3d, 0x6d,
+	0x9f, 0x51, 0xe1, 0x22, 0x26, 0x97, 0x2e, 0xe7, 0x3e, 0x1b, 0xd2, 0xf3, 0x28, 0x40, 0xa9, 0x14,
+	0x0c, 0xb8, 0x0a, 0x33, 0xa9, 0x22, 0x78, 0x3e, 0x40, 0xc9, 0xd0, 0x0b, 0xec, 0x30, 0x39, 0x58,
+	0x43, 0xea, 0xc1, 0x79, 0x4c, 0x08, 0x52, 0x67, 0x46, 0x3b, 0xe9, 0x3c, 0x68, 0x1f, 0x1a, 0xc2,
+	0x1c, 0xbd, 0x88, 0xd1, 0x34, 0x63, 0x74, 0x9e, 0xfb, 0xd2, 0x21, 0x8d, 0x1e, 0xf2, 0x42, 0x71,
+	0x0f, 0x15, 0x9f, 0x97, 0x30, 0xd6, 0x11, 0x6a, 0xa3, 0x0e, 0x14, 0xe8, 0x81, 0x1f, 0xd2, 0x77,
+	0x91, 0x1e, 0xa9, 0xb7, 0x5d, 0xf2, 0xc0, 0x72, 0x01, 0xf4, 0x32, 0xbb, 0x4c, 0xe6, 0xa5, 0x1e,
+	0x71, 0x25, 0x05, 0x9e, 0x98, 0x0b, 0x61, 0x31, 0x8b, 0x64, 0x3c, 0x2f, 0xb8, 0x1c, 0xe8, 0xe0,
+	0xb9, 0x1d, 0x80, 0xa7, 0x57, 0xe2, 0xb1, 0xa7, 0xb8, 0x98, 0xe3, 0xae, 0x62, 0x38, 0x34, 0x83,
+	0x35, 0x37, 0x29, 0x14, 0x92, 0xcc, 0x83, 0xcc, 0xf9, 0x00, 0xe8, 0xb5, 0x99, 0x5d, 0x76, 0x05,
+	0x7a, 0x58, 0xf1, 0xf4, 0x3a, 0x3b, 0x47, 0x4e, 0xd7, 0xb8, 0x8c, 0x2b, 0x15, 0xbc, 0x09, 0x3c,
+	0xf3, 0x28, 0x9c, 0x08, 0xb8, 0xc1, 0xce, 0x92, 0x93, 0x0d, 0x60, 0xc8, 0x2d, 0xcf, 0x7c, 0xd2,
+	0x41, 0x94, 0xe9, 0x4d, 0x76, 0x82, 0x1c, 0x69, 0xcc, 0xa6, 0xd4, 0xde, 0x8e, 0x43, 0x66, 0x04,
+	0xd0, 0x5b, 0x98, 0xef, 0x6a, 0x0b, 0xac, 0x14, 0x5c, 0x0b, 0x10, 0x41, 0x8c, 0x35, 0xcf, 0x65,
+	0x16, 0x1c, 0x70, 0x9b, 0xc5, 0x6c, 0xe6, 0xf9, 0x80, 0x2e, 0xb0, 0x43, 0xe4, 0x40, 0x8d, 0x95,
+	0xba, 0x28, 0x3d, 0xbd, 0x9d, 0x2e, 0x28, 0x0d, 0xe5, 0xdc, 0x3e, 0x28, 0x8b, 0xa0, 0xb8, 0x1e,
+	0x94, 0xe8, 0xdd, 0x9d, 0xc4, 0x6f, 0x65, 0x4c, 0xee, 0x64, 0xdc, 0x5a, 0x09, 0x96, 0xde, 0x8d,
+	0x8a, 0xd8, 0xd5, 0x56, 0x53, 0xbb, 0x88, 0xb1, 0x55, 0x43, 0x2a, 0x61, 0x9b, 0x7e, 0x00, 0x05,
+	0x39, 0x68, 0xef, 0xe8, 0x7b, 0x6d, 0x52, 0x76, 0x93, 0xff, 0xd7, 0x31, 0x9e, 0x6b, 0x80, 0x95,
+	0xd9, 0x30, 0xe4, 0x20, 0x24, 0x0f, 0x19, 0x58, 0x1f, 0x43, 0x28, 0x8c, 0x40, 0x0b, 0x53, 0xe3,
+	0x51, 0xd2, 0xdf, 0xc0, 0x78, 0xad, 0xa7, 0x34, 0x22, 0x8a, 0x39, 0xee, 0xfd, 0xf6, 0xa5, 0x36,
+	0xa6, 0xea, 0x34, 0x55, 0xee, 0x8f, 0xb7, 0x7f, 0x8f, 0x1d, 0x27, 0x87, 0x77, 0x00, 0xa5, 0xa0,
+	0x1f, 0x20, 0x7f, 0x4a, 0x6a, 0x88, 0x55, 0x6d, 0x59, 0x0a, 0xa0, 0x4b, 0x48, 0x43, 0x2e, 0x9d,
+	0xc3, 0x98, 0x99, 0x0d, 0x8c, 0x2a, 0x92, 0xe8, 0x87, 0x78, 0xb5, 0x53, 0x48, 0x25, 0x43, 0x93,
+	0x17, 0x46, 0x83, 0xf6, 0xf4, 0x23, 0x64, 0x69, 0x6a, 0x1e, 0xa1, 0x6f, 0x2e, 0x9d, 0x09, 0x2b,
+	0x1e, 0xbd, 0x8f, 0x1e, 0xd5, 0xf6, 0x99, 0x62, 0x48, 0xbf, 0x89, 0xaa, 0xa8, 0x4d, 0x02, 0x5c,
+	0x66, 0x65, 0x81, 0x92, 0xba, 0x43, 0xbf, 0xf5, 0x1a, 0xcb, 0x5d, 0xfa, 0x6d, 0x24, 0xbd, 0x65,
+	0xf1, 0x12, 0xcb, 0x50, 0xca, 0x86, 0x51, 0x24, 0x1c, 0xb3, 0x52, 0x0d, 0x50, 0x5c, 0x0b, 0xfc,
+	0x5b, 0xf0, 0x01, 0x34, 0x88, 0x1e, 0x3b, 0x4a, 0x0e, 0x35, 0x4b, 0xd4, 0xf1, 0x4c, 0x33, 0xa4,
+	0x6d, 0x3a, 0xdc, 0xe4, 0x3e, 0x2a, 0x30, 0x78, 0x6b, 0xc3, 0x10, 0xb8, 0x40, 0x0a, 0x29, 0x60,
+	0x9d, 0x9b, 0x8e, 0xca, 0xc1, 0xd0, 0xd3, 0x3e, 0x12, 0x5c, 0x8f, 0xa5, 0x08, 0x1b, 0xb0, 0x5b,
+	0xe4, 0x5a, 0x3d, 0x84, 0x02, 0x05, 0xdf, 0x18, 0x83, 0xb1, 0xa1, 0xb0, 0x46, 0x94, 0x99, 0x0f,
+	0x23, 0x29, 0xc0, 0x38, 0x3a, 0xc4, 0x32, 0xd7, 0x86, 0xb7, 0xf4, 0xec, 0xa8, 0x44, 0x41, 0x37,
+	0xd6, 0x59, 0x41, 0x7f, 0xdc, 0xde, 0x3b, 0xaa, 0x91, 0x3e, 0x60, 0x97, 0xc8, 0xf9, 0x7a, 0xc8,
+	0xc2, 0xc3, 0x52, 0x5a, 0x68, 0x29, 0x22, 0x4a, 0xc6, 0x51, 0xd5, 0x26, 0x6c, 0xd6, 0x18, 0x46,
+	0x5c, 0x95, 0x40, 0x73, 0x46, 0xc9, 0xfe, 0x29, 0x62, 0xc5, 0x53, 0xdd, 0xe6, 0x6a, 0x24, 0x5d,
+	0x4c, 0x5f, 0xc8, 0x95, 0x69, 0x9f, 0x62, 0x59, 0x0a, 0x3f, 0xa4, 0x05, 0xea, 0x36, 0x2f, 0x95,
+	0x97, 0x85, 0x02, 0x24, 0xd6, 0x4b, 0x9d, 0xf9, 0x80, 0x79, 0xdb, 0x85, 0x52, 0x37, 0x5d, 0x1a,
+	0x7d, 0x18, 0x8f, 0x8b, 0x19, 0x1f, 0x4b, 0x38, 0x9e, 0x04, 0x15, 0x19, 0x13, 0x28, 0x36, 0x33,
+	0x58, 0xde, 0x84, 0xa0, 0x96, 0xed, 0x27, 0x6f, 0x35, 0x1d, 0x9b, 0x63, 0x07, 0xc8, 0xdb, 0xd3,
+	0x1e, 0xcd, 0xb3, 0x79, 0x32, 0x97, 0x66, 0x4c, 0x13, 0x75, 0x5d, 0xbc, 0xb2, 0x21, 0xd7, 0x03,
+	0xa0, 0x25, 0xea, 0xb9, 0xea, 0x1d, 0x77, 0xd1, 0xf3, 0x88, 0x1d, 0x23, 0xac, 0x36, 0x27, 0x16,
+	0xa2, 0x58, 0x97, 0xd1, 0xe5, 0x7a, 0xbc, 0xd4, 0xf2, 0x61, 0x09, 0xc9, 0xb0, 0x82, 0x97, 0xd2,
+	0xf2, 0xa3, 0x5d, 0x22, 0xc6, 0x71, 0x31, 0xab, 0x42, 0x1d, 0x8e, 0x2e, 0x1b, 0x42, 0x0e, 0xf4,
+	0x11, 0x72, 0xde, 0x1e, 0xf7, 0xa6, 0x08, 0x0a, 0x46, 0xa0, 0x82, 0x30, 0x39, 0x97, 0x9a, 0x7e,
+	0x07, 0x89, 0x44, 0x44, 0xce, 0x15, 0xa6, 0x07, 0x10, 0xf4, 0x71, 0xec, 0x82, 0xad, 0x0a, 0xda,
+	0x84, 0xa1, 0x71, 0x9e, 0x7e, 0xb7, 0x5e, 0x3d, 0xb6, 0x0a, 0x0f, 0x4b, 0x39, 0xe2, 0x0a, 0x5d,
+	0xf8, 0x5e, 0x3c, 0x91, 0x55, 0x11, 0x95, 0xfa, 0xce, 0x86, 0xb0, 0x50, 0xaf, 0xab, 0x4d, 0x7d,
+	0x98, 0xef, 0x63, 0x0e, 0xad, 0x86, 0x76, 0x9c, 0x63, 0x15, 0x23, 0x11, 0x8d, 0x05, 0xf7, 0xc3,
+	0xd4, 0xe1, 0x60, 0xd3, 0x08, 0x82, 0x7e, 0xd2, 0x58, 0x8c, 0xf5, 0x33, 0x96, 0x4f, 0x31, 0xe4,
+	0xd1, 0xf2, 0xb0, 0x04, 0x3b, 0x9e, 0x31, 0xad, 0xb1, 0xf7, 0xc8, 0xed, 0xd8, 0x01, 0xc7, 0xbd,
+	0x43, 0x0f, 0xfa, 0xc6, 0xc2, 0x97, 0x25, 0xfe, 0x1f, 0x60, 0xa5, 0x2d, 0x1d, 0xd8, 0x20, 0x0c,
+	0xa4, 0xe6, 0x3e, 0x36, 0x05, 0x3c, 0xcb, 0xf0, 0xf2, 0xbc, 0x69, 0x74, 0x4b, 0xd7, 0x51, 0x44,
+	0x33, 0x45, 0x39, 0xad, 0xcd, 0x51, 0xa1, 0x55, 0x8f, 0xea, 0xe8, 0x0f, 0x31, 0x78, 0x6b, 0xee,
+	0xab, 0x6c, 0xfd, 0x14, 0xd9, 0x6c, 0xc6, 0x52, 0x3a, 0x45, 0xad, 0xff, 0x08, 0x2f, 0xbe, 0x4e,
+	0xb3, 0xb8, 0x75, 0x61, 0xc1, 0x21, 0xcd, 0x3f, 0xc6, 0xfb, 0x48, 0x81, 0x0c, 0xd6, 0x1a, 0x4b,
+	0x9f, 0xe1, 0x0a, 0x31, 0x64, 0xea, 0x6e, 0xca, 0x46, 0xc5, 0x3d, 0xc7, 0x84, 0x53, 0x49, 0xa9,
+	0x35, 0x7f, 0x03, 0x09, 0xac, 0x05, 0x18, 0x05, 0x6a, 0xf2, 0x42, 0x81, 0x07, 0x3a, 0xc1, 0xa2,
+	0x5e, 0x5b, 0xaa, 0x23, 0xd1, 0x17, 0xc8, 0x6a, 0x4c, 0x13, 0xc1, 0x82, 0xb7, 0x12, 0x46, 0x5c,
+	0x55, 0x1b, 0xff, 0x04, 0x4f, 0xc2, 0x4b, 0x21, 0x4d, 0x35, 0xb0, 0xd9, 0x2e, 0x4d, 0x63, 0x53,
+	0xfa, 0xb2, 0x07, 0x33, 0x39, 0x6d, 0x0b, 0xef, 0x1c, 0x45, 0x91, 0x73, 0x3d, 0x6e, 0x92, 0x50,
+	0x74, 0xc6, 0xd1, 0x97, 0xbb, 0x1a, 0xab, 0x0c, 0xf5, 0x19, 0xeb, 0x92, 0xeb, 0x48, 0x70, 0x5e,
+	0x70, 0x1f, 0xe3, 0xbe, 0xea, 0x3a, 0x02, 0xd7, 0x22, 0x08, 0x18, 0xc9, 0x0c, 0xd0, 0xc5, 0x3e,
+	0x58, 0xd0, 0x19, 0xd0, 0x57, 0xe9, 0x41, 0xa3, 0x94, 0xb7, 0x3c, 0x7b, 0x80, 0x69, 0x61, 0xe7,
+	0xdb, 0xac, 0xea, 0x08, 0xe8, 0x4f, 0x31, 0x59, 0xd6, 0x55, 0xb8, 0x6a, 0x34, 0xb3, 0x14, 0xda,
+	0x75, 0x69, 0x6d, 0x8b, 0xe9, 0x67, 0xa9, 0x83, 0x75, 0xd5, 0xff, 0x35, 0x24, 0x16, 0xc1, 0x9f,
+	0xe3, 0xb6, 0x33, 0x45, 0xf9, 0xf5, 0xdb, 0xfe, 0x82, 0x7d, 0x44, 0xee, 0x7d, 0x01, 0x36, 0xbe,
+	0x35, 0x66, 0x5c, 0x68, 0xcf, 0xfe, 0x25, 0xf6, 0xca, 0x85, 0x85, 0x5c, 0x96, 0x79, 0xb0, 0x98,
+	0x3b, 0x77, 0x39, 0xea, 0xaf, 0x10, 0x34, 0xe2, 0x5a, 0xfa, 0xd9, 0x36, 0x78, 0x06, 0xf4, 0x6b,
+	0x04, 0xcd, 0x74, 0x59, 0x99, 0xd1, 0x23, 0xb0, 0xb1, 0x3f, 0xaf, 0x9b, 0xde, 0xdf, 0xb0, 0xfb,
+	0xe4, 0x83, 0x2a, 0xa3, 0xa1, 0xef, 0xf1, 0xe1, 0xb6, 0x0d, 0x8b, 0x37, 0x91, 0x1e, 0x6d, 0x3b,
+	0xa6, 0xff, 0x96, 0x5d, 0x24, 0x73, 0xad, 0x77, 0x14, 0x86, 0xf5, 0xdd, 0xe6, 0x41, 0x86, 0xff,
+	0xdd, 0xa1, 0xbf, 0xeb, 0xb0, 0x45, 0xd2, 0x6d, 0x4a, 0xe1, 0xf6, 0x90, 0x74, 0x75, 0x1c, 0x55,
+	0x39, 0x22, 0xa5, 0xc1, 0xdf, 0x77, 0xd8, 0x15, 0xec, 0x25, 0x5b, 0xc2, 0x88, 0xbc, 0x59, 0x70,
+	0xde, 0xca, 0xaa, 0x55, 0xc4, 0x9b, 0xf9, 0x43, 0x87, 0xdd, 0x21, 0x37, 0x9b, 0x67, 0x0e, 0x46,
+	0x6a, 0x6c, 0x60, 0x90, 0x52, 0xf4, 0xc3, 0x42, 0x66, 0xac, 0x68, 0x97, 0x2c, 0xfa, 0xc7, 0x0e,
+	0x9b, 0x9f, 0xb6, 0x29, 0x4d, 0xed, 0x4c, 0xdd, 0x54, 0xaf, 0xd4, 0x42, 0x01, 0xfd, 0x53, 0x87,
+	0xdd, 0x26, 0x37, 0x6a, 0xb1, 0x46, 0x77, 0x67, 0x6f, 0x11, 0xbb, 0xf2, 0xa1, 0x9c, 0x76, 0xd0,
+	0xf4, 0xcf, 0x69, 0x86, 0xe2, 0x19, 0x0c, 0x8d, 0x12, 0x78, 0x96, 0xc4, 0x4b, 0xcc, 0x2d, 0xe9,
+	0x69, 0x22, 0xa0, 0xcf, 0x4b, 0xe5, 0xab, 0x42, 0xf8, 0x97, 0x0e, 0xbb, 0x4f, 0xee, 0xcd, 0xcc,
+	0x40, 0x11, 0x88, 0x58, 0x2a, 0x4a, 0x9d, 0x9c, 0x6c, 0x2f, 0x32, 0x3b, 0xfd, 0xaf, 0x1d, 0x76,
+	0x99, 0x5c, 0x68, 0x4f, 0x9f, 0xb1, 0x87, 0xca, 0x41, 0xfa, 0xb7, 0x0e, 0xbb, 0x46, 0x2e, 0x95,
+	0x1a, 0x56, 0x0a, 0xc8, 0xf0, 0xe8, 0xaf, 0x9d, 0x42, 0xff, 0x1e, 0x59, 0xdf, 0xf6, 0xf1, 0x23,
+	0xe7, 0x29, 0xe9, 0xf6, 0x30, 0x36, 0x3f, 0xe6, 0x19, 0x26, 0x9b, 0x7f, 0x74, 0xd8, 0x4d, 0x72,
+	0xa5, 0x79, 0x42, 0xf2, 0x4a, 0xd5, 0xda, 0x04, 0xd0, 0xa8, 0x21, 0x11, 0xb8, 0x73, 0x26, 0x93,
+	0xb1, 0x99, 0xa2, 0x9f, 0x77, 0x7a, 0xff, 0xe9, 0x90, 0xf9, 0x4f, 0x27, 0xcf, 0xbb, 0x5f, 0xfc,
+	0x49, 0xa7, 0xb7, 0xbf, 0xfa, 0x42, 0x53, 0x6c, 0x4e, 0x5e, 0x4e, 0x8a, 0xce, 0x23, 0x51, 0xe1,
+	0xd7, 0x27, 0xcf, 0x56, 0x37, 0xd6, 0xbb, 0x93, 0xcd, 0xf5, 0x85, 0xf5, 0x27, 0x1b, 0xf1, 0x03,
+	0x4f, 0xfd, 0x05, 0xe9, 0xc5, 0xd3, 0xad, 0xd7, 0x7d, 0x50, 0xfa, 0x30, 0xfd, 0xf9, 0xe7, 0x9e,
+	0x37, 0x06, 0x9c, 0xff, 0x6b, 0xcf, 0xdc, 0x20, 0x2d, 0xc6, 0xd7, 0xb6, 0xba, 0xe9, 0x27, 0xfe,
+	0x1a, 0x2d, 0x76, 0xe3, 0x96, 0x5b, 0xff, 0xae, 0x01, 0x8f, 0xf9, 0xda, 0xd6, 0xe3, 0x06, 0xf0,
+	0x78, 0xb4, 0xf8, 0x38, 0x01, 0xfe, 0xbb, 0x67, 0x3e, 0x8d, 0x2e, 0x2d, 0xf1, 0xb5, 0xad, 0xa5,
+	0xa5, 0x06, 0xb2, 0xb4, 0x34, 0x5a, 0x5c, 0x5a, 0x4a, 0xa0, 0x4f, 0xde, 0x8c, 0xa7, 0x5b, 0xfc,
+	0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x60, 0x75, 0x27, 0xed, 0x12, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_group_ad_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_group_ad_error.pb.go
new file mode 100644
index 0000000..2ae3e35
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_group_ad_error.pb.go
@@ -0,0 +1,158 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_group_ad_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad group ad errors.
+type AdGroupAdErrorEnum_AdGroupAdError int32
+
+const (
+	// Enum unspecified.
+	AdGroupAdErrorEnum_UNSPECIFIED AdGroupAdErrorEnum_AdGroupAdError = 0
+	// The received error code is not known in this version.
+	AdGroupAdErrorEnum_UNKNOWN AdGroupAdErrorEnum_AdGroupAdError = 1
+	// No link found between the adgroup ad and the label.
+	AdGroupAdErrorEnum_AD_GROUP_AD_LABEL_DOES_NOT_EXIST AdGroupAdErrorEnum_AdGroupAdError = 2
+	// The label has already been attached to the adgroup ad.
+	AdGroupAdErrorEnum_AD_GROUP_AD_LABEL_ALREADY_EXISTS AdGroupAdErrorEnum_AdGroupAdError = 3
+	// The specified ad was not found in the adgroup
+	AdGroupAdErrorEnum_AD_NOT_UNDER_ADGROUP AdGroupAdErrorEnum_AdGroupAdError = 4
+	// Removed ads may not be modified
+	AdGroupAdErrorEnum_CANNOT_OPERATE_ON_REMOVED_ADGROUPAD AdGroupAdErrorEnum_AdGroupAdError = 5
+	// An ad of this type is deprecated and cannot be created. Only deletions
+	// are permitted.
+	AdGroupAdErrorEnum_CANNOT_CREATE_DEPRECATED_ADS AdGroupAdErrorEnum_AdGroupAdError = 6
+	// Text ads are deprecated and cannot be created. Use expanded text ads
+	// instead.
+	AdGroupAdErrorEnum_CANNOT_CREATE_TEXT_ADS AdGroupAdErrorEnum_AdGroupAdError = 7
+	// A required field was not specified or is an empty string.
+	AdGroupAdErrorEnum_EMPTY_FIELD AdGroupAdErrorEnum_AdGroupAdError = 8
+	// An ad may only be modified once per call
+	AdGroupAdErrorEnum_RESOURCE_REFERENCED_IN_MULTIPLE_OPS AdGroupAdErrorEnum_AdGroupAdError = 9
+)
+
+var AdGroupAdErrorEnum_AdGroupAdError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_AD_LABEL_DOES_NOT_EXIST",
+	3: "AD_GROUP_AD_LABEL_ALREADY_EXISTS",
+	4: "AD_NOT_UNDER_ADGROUP",
+	5: "CANNOT_OPERATE_ON_REMOVED_ADGROUPAD",
+	6: "CANNOT_CREATE_DEPRECATED_ADS",
+	7: "CANNOT_CREATE_TEXT_ADS",
+	8: "EMPTY_FIELD",
+	9: "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
+}
+
+var AdGroupAdErrorEnum_AdGroupAdError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"AD_GROUP_AD_LABEL_DOES_NOT_EXIST":    2,
+	"AD_GROUP_AD_LABEL_ALREADY_EXISTS":    3,
+	"AD_NOT_UNDER_ADGROUP":                4,
+	"CANNOT_OPERATE_ON_REMOVED_ADGROUPAD": 5,
+	"CANNOT_CREATE_DEPRECATED_ADS":        6,
+	"CANNOT_CREATE_TEXT_ADS":              7,
+	"EMPTY_FIELD":                         8,
+	"RESOURCE_REFERENCED_IN_MULTIPLE_OPS": 9,
+}
+
+func (x AdGroupAdErrorEnum_AdGroupAdError) String() string {
+	return proto.EnumName(AdGroupAdErrorEnum_AdGroupAdError_name, int32(x))
+}
+
+func (AdGroupAdErrorEnum_AdGroupAdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_77c412918395d9af, []int{0, 0}
+}
+
+// Container for enum describing possible ad group ad errors.
+type AdGroupAdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdErrorEnum) Reset()         { *m = AdGroupAdErrorEnum{} }
+func (m *AdGroupAdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdErrorEnum) ProtoMessage()    {}
+func (*AdGroupAdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_77c412918395d9af, []int{0}
+}
+
+func (m *AdGroupAdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdErrorEnum.Merge(m, src)
+}
+func (m *AdGroupAdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Size(m)
+}
+func (m *AdGroupAdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdGroupAdErrorEnum_AdGroupAdError", AdGroupAdErrorEnum_AdGroupAdError_name, AdGroupAdErrorEnum_AdGroupAdError_value)
+	proto.RegisterType((*AdGroupAdErrorEnum)(nil), "google.ads.googleads.v3.errors.AdGroupAdErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_group_ad_error.proto", fileDescriptor_77c412918395d9af)
+}
+
+var fileDescriptor_77c412918395d9af = []byte{
+	// 447 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0xc7, 0x6d, 0xaa, 0xad, 0x4e, 0x41, 0x43, 0x14, 0x91, 0x52, 0x4a, 0x59, 0x05, 0x6f, 0xc9,
+	0x21, 0xe0, 0x21, 0x9e, 0xde, 0x66, 0xde, 0x2e, 0xc1, 0xec, 0x64, 0x98, 0x24, 0x6b, 0x2b, 0x0b,
+	0x43, 0x74, 0x96, 0xb0, 0xd0, 0x66, 0x96, 0xcc, 0xb6, 0x1f, 0xc8, 0xa3, 0x77, 0xbf, 0x84, 0xf8,
+	0x49, 0x3c, 0xf8, 0x19, 0x64, 0x32, 0xdd, 0x85, 0x05, 0xf5, 0x34, 0x7f, 0xde, 0xfb, 0xfd, 0xdf,
+	0x9b, 0x99, 0xf7, 0xc8, 0xbb, 0x56, 0xeb, 0xf6, 0x7a, 0x19, 0x35, 0xca, 0x44, 0x4e, 0x5a, 0x75,
+	0x17, 0x47, 0xcb, 0xbe, 0xd7, 0xbd, 0x89, 0x1a, 0x25, 0xdb, 0x5e, 0xdf, 0xae, 0x65, 0xa3, 0xe4,
+	0x10, 0x0a, 0xd7, 0xbd, 0xde, 0xe8, 0xe0, 0xdc, 0xc1, 0x61, 0xa3, 0x4c, 0xb8, 0xf3, 0x85, 0x77,
+	0x71, 0xe8, 0x7c, 0xa7, 0x67, 0xdb, 0xba, 0xeb, 0x55, 0xd4, 0x74, 0x9d, 0xde, 0x34, 0x9b, 0x95,
+	0xee, 0x8c, 0x73, 0x8f, 0x7e, 0x7a, 0x24, 0x00, 0x35, 0xb5, 0x85, 0x41, 0xa1, 0x75, 0x60, 0x77,
+	0x7b, 0x33, 0xfa, 0xee, 0x91, 0xa7, 0xfb, 0xe1, 0xe0, 0x19, 0x39, 0xa9, 0x59, 0xc9, 0x31, 0xcd,
+	0x26, 0x19, 0x52, 0xff, 0x41, 0x70, 0x42, 0x8e, 0x6b, 0xf6, 0x81, 0x15, 0x1f, 0x99, 0x7f, 0x10,
+	0xbc, 0x21, 0x17, 0x40, 0xe5, 0x54, 0x14, 0x35, 0x97, 0x40, 0x65, 0x0e, 0x63, 0xcc, 0x25, 0x2d,
+	0xb0, 0x94, 0xac, 0xa8, 0x24, 0x5e, 0x66, 0x65, 0xe5, 0x7b, 0x7f, 0xa7, 0x20, 0x17, 0x08, 0xf4,
+	0xca, 0x41, 0xa5, 0x7f, 0x18, 0xbc, 0x22, 0x2f, 0x80, 0x0e, 0xbe, 0x9a, 0x51, 0x14, 0x12, 0xe8,
+	0xe0, 0xf0, 0x1f, 0x06, 0x6f, 0xc9, 0xeb, 0x14, 0x98, 0xcd, 0x14, 0x1c, 0x05, 0x54, 0x28, 0x0b,
+	0x26, 0x05, 0xce, 0x8a, 0x39, 0xd2, 0x2d, 0x06, 0xd4, 0x7f, 0x14, 0x5c, 0x90, 0xb3, 0x7b, 0x30,
+	0x15, 0x68, 0x39, 0x8a, 0x5c, 0x60, 0x0a, 0xd5, 0xc0, 0x95, 0xfe, 0x51, 0x70, 0x4a, 0x5e, 0xee,
+	0x13, 0x15, 0x5e, 0x56, 0x43, 0xee, 0xd8, 0x3e, 0x15, 0x67, 0xbc, 0xba, 0x92, 0x93, 0x0c, 0x73,
+	0xea, 0x3f, 0xb6, 0x7d, 0x05, 0x96, 0x45, 0x2d, 0x52, 0x94, 0x02, 0x27, 0x28, 0x90, 0xa5, 0x48,
+	0x65, 0xc6, 0xe4, 0xac, 0xce, 0xab, 0x8c, 0xe7, 0x28, 0x0b, 0x5e, 0xfa, 0x4f, 0xc6, 0xbf, 0x0f,
+	0xc8, 0xe8, 0x8b, 0xbe, 0x09, 0xff, 0x3f, 0x93, 0xf1, 0xf3, 0xfd, 0xbf, 0xe5, 0x76, 0x14, 0xfc,
+	0xe0, 0x13, 0xbd, 0xb7, 0xb5, 0xfa, 0xba, 0xe9, 0xda, 0x50, 0xf7, 0x6d, 0xd4, 0x2e, 0xbb, 0x61,
+	0x50, 0xdb, 0x95, 0x58, 0xaf, 0xcc, 0xbf, 0x36, 0xe4, 0xbd, 0x3b, 0xbe, 0x7a, 0x87, 0x53, 0x80,
+	0x6f, 0xde, 0xf9, 0xd4, 0x15, 0x03, 0x65, 0x42, 0x27, 0xad, 0x9a, 0xc7, 0xe1, 0xd0, 0xd2, 0xfc,
+	0xd8, 0x02, 0x0b, 0x50, 0x66, 0xb1, 0x03, 0x16, 0xf3, 0x78, 0xe1, 0x80, 0x5f, 0xde, 0xc8, 0x45,
+	0x93, 0x04, 0x94, 0x49, 0x92, 0x1d, 0x92, 0x24, 0xf3, 0x38, 0x49, 0x1c, 0xf4, 0xf9, 0x68, 0xb8,
+	0x5d, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x5e, 0xd4, 0x6a, 0xbe, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_group_bid_modifier_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_group_bid_modifier_error.pb.go
new file mode 100644
index 0000000..226484a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_group_bid_modifier_error.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_group_bid_modifier_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad group bid modifier errors.
+type AdGroupBidModifierErrorEnum_AdGroupBidModifierError int32
+
+const (
+	// Enum unspecified.
+	AdGroupBidModifierErrorEnum_UNSPECIFIED AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 0
+	// The received error code is not known in this version.
+	AdGroupBidModifierErrorEnum_UNKNOWN AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 1
+	// The criterion ID does not support bid modification.
+	AdGroupBidModifierErrorEnum_CRITERION_ID_NOT_SUPPORTED AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 2
+	// Cannot override the bid modifier for the given criterion ID if the parent
+	// campaign is opted out of the same criterion.
+	AdGroupBidModifierErrorEnum_CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 3
+)
+
+var AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CRITERION_ID_NOT_SUPPORTED",
+	3: "CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER",
+}
+
+var AdGroupBidModifierErrorEnum_AdGroupBidModifierError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"CRITERION_ID_NOT_SUPPORTED": 2,
+	"CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER": 3,
+}
+
+func (x AdGroupBidModifierErrorEnum_AdGroupBidModifierError) String() string {
+	return proto.EnumName(AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name, int32(x))
+}
+
+func (AdGroupBidModifierErrorEnum_AdGroupBidModifierError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b1dd6efa793776eb, []int{0, 0}
+}
+
+// Container for enum describing possible ad group bid modifier errors.
+type AdGroupBidModifierErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupBidModifierErrorEnum) Reset()         { *m = AdGroupBidModifierErrorEnum{} }
+func (m *AdGroupBidModifierErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifierErrorEnum) ProtoMessage()    {}
+func (*AdGroupBidModifierErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b1dd6efa793776eb, []int{0}
+}
+
+func (m *AdGroupBidModifierErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifierErrorEnum.Merge(m, src)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Size(m)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifierErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifierErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdGroupBidModifierErrorEnum_AdGroupBidModifierError", AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name, AdGroupBidModifierErrorEnum_AdGroupBidModifierError_value)
+	proto.RegisterType((*AdGroupBidModifierErrorEnum)(nil), "google.ads.googleads.v3.errors.AdGroupBidModifierErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_group_bid_modifier_error.proto", fileDescriptor_b1dd6efa793776eb)
+}
+
+var fileDescriptor_b1dd6efa793776eb = []byte{
+	// 367 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0x4f, 0xca, 0xd4, 0x30,
+	0x14, 0xb7, 0xfd, 0x40, 0x21, 0xdf, 0xc2, 0xd2, 0x8d, 0xf0, 0x39, 0xcc, 0xa2, 0x07, 0x48, 0x17,
+	0x5d, 0x19, 0x11, 0x4c, 0x9b, 0x58, 0x82, 0x4c, 0x52, 0x3a, 0x6d, 0x05, 0x29, 0x84, 0x8e, 0xa9,
+	0xa5, 0x30, 0xd3, 0x94, 0x66, 0x66, 0x8e, 0xe2, 0x01, 0x5c, 0x7a, 0x00, 0x0f, 0xe1, 0x51, 0xbc,
+	0x80, 0x5b, 0x69, 0x33, 0x33, 0xae, 0xc6, 0x55, 0x7e, 0xbc, 0xf7, 0xfb, 0xf3, 0x5e, 0x1e, 0x78,
+	0xdf, 0x69, 0xdd, 0xed, 0xdb, 0xb0, 0x51, 0x26, 0xb4, 0x70, 0x46, 0xe7, 0x28, 0x6c, 0xa7, 0x49,
+	0x4f, 0x26, 0x6c, 0x94, 0xec, 0x26, 0x7d, 0x1a, 0xe5, 0xae, 0x57, 0xf2, 0xa0, 0x55, 0xff, 0xb5,
+	0x6f, 0x27, 0xb9, 0x34, 0xe1, 0x38, 0xe9, 0xa3, 0xf6, 0xd7, 0x56, 0x06, 0x1b, 0x65, 0xe0, 0xcd,
+	0x01, 0x9e, 0x23, 0x68, 0x1d, 0x9e, 0x56, 0xd7, 0x84, 0xb1, 0x0f, 0x9b, 0x61, 0xd0, 0xc7, 0xe6,
+	0xd8, 0xeb, 0xc1, 0x58, 0x75, 0xf0, 0xd3, 0x01, 0xaf, 0xb1, 0x4a, 0xe7, 0x88, 0xb8, 0x57, 0x9b,
+	0x4b, 0x00, 0x9d, 0xa5, 0x74, 0x38, 0x1d, 0x82, 0x6f, 0x0e, 0x78, 0x75, 0xa7, 0xef, 0xbf, 0x04,
+	0x8f, 0x25, 0xdf, 0x66, 0x34, 0x61, 0x1f, 0x18, 0x25, 0xde, 0x33, 0xff, 0x11, 0xbc, 0x28, 0xf9,
+	0x47, 0x2e, 0x3e, 0x71, 0xcf, 0xf1, 0xd7, 0xe0, 0x29, 0xc9, 0x59, 0x41, 0x73, 0x26, 0xb8, 0x64,
+	0x44, 0x72, 0x51, 0xc8, 0x6d, 0x99, 0x65, 0x22, 0x2f, 0x28, 0xf1, 0x5c, 0xff, 0x1d, 0x78, 0x93,
+	0x60, 0x3e, 0x57, 0x45, 0x45, 0xf3, 0x9c, 0x11, 0x2a, 0x45, 0x56, 0x50, 0x22, 0x45, 0x59, 0xc8,
+	0x04, 0x6f, 0x32, 0xcc, 0x52, 0x2e, 0xff, 0x59, 0xc4, 0x8c, 0xc8, 0x8d, 0x20, 0x73, 0x56, 0xee,
+	0x3d, 0xc4, 0x7f, 0x1c, 0x10, 0x7c, 0xd1, 0x07, 0xf8, 0xff, 0xed, 0xe3, 0xd5, 0x9d, 0xe1, 0xb3,
+	0x79, 0xfb, 0xcc, 0xf9, 0x4c, 0x2e, 0xfa, 0x4e, 0xef, 0x9b, 0xa1, 0x83, 0x7a, 0xea, 0xc2, 0xae,
+	0x1d, 0x96, 0xbf, 0xb9, 0xde, 0x63, 0xec, 0xcd, 0xbd, 0xf3, 0xbc, 0xb5, 0xcf, 0x77, 0xf7, 0x21,
+	0xc5, 0xf8, 0x87, 0xbb, 0x4e, 0xad, 0x19, 0x56, 0x06, 0x5a, 0x38, 0xa3, 0x2a, 0x82, 0x4b, 0xa4,
+	0xf9, 0x75, 0x25, 0xd4, 0x58, 0x99, 0xfa, 0x46, 0xa8, 0xab, 0xa8, 0xb6, 0x84, 0xdf, 0x6e, 0x60,
+	0xab, 0x08, 0x61, 0x65, 0x10, 0xba, 0x51, 0x10, 0xaa, 0x22, 0x84, 0x2c, 0x69, 0xf7, 0x7c, 0x99,
+	0x2e, 0xfa, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x4d, 0x8e, 0xad, 0xe4, 0x3b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_group_criterion_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_group_criterion_error.pb.go
new file mode 100644
index 0000000..9bd53ec
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_group_criterion_error.pb.go
@@ -0,0 +1,315 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_group_criterion_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad group criterion errors.
+type AdGroupCriterionErrorEnum_AdGroupCriterionError int32
+
+const (
+	// Enum unspecified.
+	AdGroupCriterionErrorEnum_UNSPECIFIED AdGroupCriterionErrorEnum_AdGroupCriterionError = 0
+	// The received error code is not known in this version.
+	AdGroupCriterionErrorEnum_UNKNOWN AdGroupCriterionErrorEnum_AdGroupCriterionError = 1
+	// No link found between the AdGroupCriterion and the label.
+	AdGroupCriterionErrorEnum_AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 2
+	// The label has already been attached to the AdGroupCriterion.
+	AdGroupCriterionErrorEnum_AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 3
+	// Negative AdGroupCriterion cannot have labels.
+	AdGroupCriterionErrorEnum_CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION AdGroupCriterionErrorEnum_AdGroupCriterionError = 4
+	// Too many operations for a single call.
+	AdGroupCriterionErrorEnum_TOO_MANY_OPERATIONS AdGroupCriterionErrorEnum_AdGroupCriterionError = 5
+	// Negative ad group criteria are not updateable.
+	AdGroupCriterionErrorEnum_CANT_UPDATE_NEGATIVE AdGroupCriterionErrorEnum_AdGroupCriterionError = 6
+	// Concrete type of criterion (keyword v.s. placement) is required for ADD
+	// and SET operations.
+	AdGroupCriterionErrorEnum_CONCRETE_TYPE_REQUIRED AdGroupCriterionErrorEnum_AdGroupCriterionError = 7
+	// Bid is incompatible with ad group's bidding settings.
+	AdGroupCriterionErrorEnum_BID_INCOMPATIBLE_WITH_ADGROUP AdGroupCriterionErrorEnum_AdGroupCriterionError = 8
+	// Cannot target and exclude the same criterion at once.
+	AdGroupCriterionErrorEnum_CANNOT_TARGET_AND_EXCLUDE AdGroupCriterionErrorEnum_AdGroupCriterionError = 9
+	// The URL of a placement is invalid.
+	AdGroupCriterionErrorEnum_ILLEGAL_URL AdGroupCriterionErrorEnum_AdGroupCriterionError = 10
+	// Keyword text was invalid.
+	AdGroupCriterionErrorEnum_INVALID_KEYWORD_TEXT AdGroupCriterionErrorEnum_AdGroupCriterionError = 11
+	// Destination URL was invalid.
+	AdGroupCriterionErrorEnum_INVALID_DESTINATION_URL AdGroupCriterionErrorEnum_AdGroupCriterionError = 12
+	// The destination url must contain at least one tag (e.g. {lpurl})
+	AdGroupCriterionErrorEnum_MISSING_DESTINATION_URL_TAG AdGroupCriterionErrorEnum_AdGroupCriterionError = 13
+	// Keyword-level cpm bid is not supported
+	AdGroupCriterionErrorEnum_KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM AdGroupCriterionErrorEnum_AdGroupCriterionError = 14
+	// For example, cannot add a biddable ad group criterion that had been
+	// removed.
+	AdGroupCriterionErrorEnum_INVALID_USER_STATUS AdGroupCriterionErrorEnum_AdGroupCriterionError = 15
+	// Criteria type cannot be targeted for the ad group. Either the account is
+	// restricted to keywords only, the criteria type is incompatible with the
+	// campaign's bidding strategy, or the criteria type can only be applied to
+	// campaigns.
+	AdGroupCriterionErrorEnum_CANNOT_ADD_CRITERIA_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 16
+	// Criteria type cannot be excluded for the ad group. Refer to the
+	// documentation for a specific criterion to check if it is excludable.
+	AdGroupCriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 17
+	// Partial failure is not supported for shopping campaign mutate operations.
+	AdGroupCriterionErrorEnum_CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE AdGroupCriterionErrorEnum_AdGroupCriterionError = 27
+	// Operations in the mutate request changes too many shopping ad groups.
+	// Please split requests for multiple shopping ad groups across multiple
+	// requests.
+	AdGroupCriterionErrorEnum_OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS AdGroupCriterionErrorEnum_AdGroupCriterionError = 28
+	// Not allowed to modify url fields of an ad group criterion if there are
+	// duplicate elements for that ad group criterion in the request.
+	AdGroupCriterionErrorEnum_CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 29
+	// Cannot set url fields without also setting final urls.
+	AdGroupCriterionErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS AdGroupCriterionErrorEnum_AdGroupCriterionError = 30
+	// Cannot clear final urls if final mobile urls exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 31
+	// Cannot clear final urls if final app urls exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 32
+	// Cannot clear final urls if tracking url template exists.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 33
+	// Cannot clear final urls if url custom parameters exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 34
+	// Cannot set both destination url and final urls.
+	AdGroupCriterionErrorEnum_CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS AdGroupCriterionErrorEnum_AdGroupCriterionError = 35
+	// Cannot set both destination url and tracking url template.
+	AdGroupCriterionErrorEnum_CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE AdGroupCriterionErrorEnum_AdGroupCriterionError = 36
+	// Final urls are not supported for this criterion type.
+	AdGroupCriterionErrorEnum_FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 37
+	// Final mobile urls are not supported for this criterion type.
+	AdGroupCriterionErrorEnum_FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 38
+	// Ad group is invalid due to the listing groups it contains.
+	AdGroupCriterionErrorEnum_INVALID_LISTING_GROUP_HIERARCHY AdGroupCriterionErrorEnum_AdGroupCriterionError = 39
+	// Listing group unit cannot have children.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN AdGroupCriterionErrorEnum_AdGroupCriterionError = 40
+	// Subdivided listing groups must have an "others" case.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE AdGroupCriterionErrorEnum_AdGroupCriterionError = 41
+	// Dimension type of listing group must be the same as that of its siblings.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS AdGroupCriterionErrorEnum_AdGroupCriterionError = 42
+	// Listing group cannot be added to the ad group because it already exists.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_ALREADY_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 43
+	// Listing group referenced in the operation was not found in the ad group.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_DOES_NOT_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 44
+	// Recursive removal failed because listing group subdivision is being
+	// created or modified in this request.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_CANNOT_BE_REMOVED AdGroupCriterionErrorEnum_AdGroupCriterionError = 45
+	// Listing group type is not allowed for specified ad group criterion type.
+	AdGroupCriterionErrorEnum_INVALID_LISTING_GROUP_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 46
+	// Listing group in an ADD operation specifies a non temporary criterion id.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID AdGroupCriterionErrorEnum_AdGroupCriterionError = 47
+)
+
+var AdGroupCriterionErrorEnum_AdGroupCriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST",
+	3:  "AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS",
+	4:  "CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION",
+	5:  "TOO_MANY_OPERATIONS",
+	6:  "CANT_UPDATE_NEGATIVE",
+	7:  "CONCRETE_TYPE_REQUIRED",
+	8:  "BID_INCOMPATIBLE_WITH_ADGROUP",
+	9:  "CANNOT_TARGET_AND_EXCLUDE",
+	10: "ILLEGAL_URL",
+	11: "INVALID_KEYWORD_TEXT",
+	12: "INVALID_DESTINATION_URL",
+	13: "MISSING_DESTINATION_URL_TAG",
+	14: "KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM",
+	15: "INVALID_USER_STATUS",
+	16: "CANNOT_ADD_CRITERIA_TYPE",
+	17: "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	27: "CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE",
+	28: "OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS",
+	29: "CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS",
+	30: "CANNOT_SET_WITHOUT_FINAL_URLS",
+	31: "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST",
+	32: "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST",
+	33: "CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS",
+	34: "CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST",
+	35: "CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS",
+	36: "CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE",
+	37: "FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	38: "FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	39: "INVALID_LISTING_GROUP_HIERARCHY",
+	40: "LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN",
+	41: "LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE",
+	42: "LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS",
+	43: "LISTING_GROUP_ALREADY_EXISTS",
+	44: "LISTING_GROUP_DOES_NOT_EXIST",
+	45: "LISTING_GROUP_CANNOT_BE_REMOVED",
+	46: "INVALID_LISTING_GROUP_TYPE",
+	47: "LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID",
+}
+
+var AdGroupCriterionErrorEnum_AdGroupCriterionError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST":                   2,
+	"AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS":                   3,
+	"CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION":                    4,
+	"TOO_MANY_OPERATIONS":                                       5,
+	"CANT_UPDATE_NEGATIVE":                                      6,
+	"CONCRETE_TYPE_REQUIRED":                                    7,
+	"BID_INCOMPATIBLE_WITH_ADGROUP":                             8,
+	"CANNOT_TARGET_AND_EXCLUDE":                                 9,
+	"ILLEGAL_URL":                                               10,
+	"INVALID_KEYWORD_TEXT":                                      11,
+	"INVALID_DESTINATION_URL":                                   12,
+	"MISSING_DESTINATION_URL_TAG":                               13,
+	"KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM":             14,
+	"INVALID_USER_STATUS":                                       15,
+	"CANNOT_ADD_CRITERIA_TYPE":                                  16,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":                              17,
+	"CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE":         27,
+	"OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS":                 28,
+	"CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS":          29,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                             30,
+	"CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST":        31,
+	"CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST":           32,
+	"CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS":   33,
+	"CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST":    34,
+	"CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS":            35,
+	"CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE": 36,
+	"FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE":               37,
+	"FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE":        38,
+	"INVALID_LISTING_GROUP_HIERARCHY":                           39,
+	"LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN":                   40,
+	"LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE":            41,
+	"LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS":    42,
+	"LISTING_GROUP_ALREADY_EXISTS":                              43,
+	"LISTING_GROUP_DOES_NOT_EXIST":                              44,
+	"LISTING_GROUP_CANNOT_BE_REMOVED":                           45,
+	"INVALID_LISTING_GROUP_TYPE":                                46,
+	"LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID":                    47,
+}
+
+func (x AdGroupCriterionErrorEnum_AdGroupCriterionError) String() string {
+	return proto.EnumName(AdGroupCriterionErrorEnum_AdGroupCriterionError_name, int32(x))
+}
+
+func (AdGroupCriterionErrorEnum_AdGroupCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_5a28fddaeefc2376, []int{0, 0}
+}
+
+// Container for enum describing possible ad group criterion errors.
+type AdGroupCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupCriterionErrorEnum) Reset()         { *m = AdGroupCriterionErrorEnum{} }
+func (m *AdGroupCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionErrorEnum) ProtoMessage()    {}
+func (*AdGroupCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5a28fddaeefc2376, []int{0}
+}
+
+func (m *AdGroupCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionErrorEnum.Merge(m, src)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Size(m)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdGroupCriterionErrorEnum_AdGroupCriterionError", AdGroupCriterionErrorEnum_AdGroupCriterionError_name, AdGroupCriterionErrorEnum_AdGroupCriterionError_value)
+	proto.RegisterType((*AdGroupCriterionErrorEnum)(nil), "google.ads.googleads.v3.errors.AdGroupCriterionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_group_criterion_error.proto", fileDescriptor_5a28fddaeefc2376)
+}
+
+var fileDescriptor_5a28fddaeefc2376 = []byte{
+	// 976 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x72, 0x1b, 0x35,
+	0x14, 0xa6, 0x29, 0xb4, 0xa0, 0x06, 0x2a, 0xc4, 0x4f, 0xdb, 0xfc, 0xb6, 0x29, 0xb4, 0xb4, 0x21,
+	0x36, 0xad, 0xa1, 0x0c, 0xee, 0xf4, 0xe2, 0x78, 0x75, 0xbc, 0xd6, 0x44, 0x2b, 0x2d, 0x92, 0xd6,
+	0x89, 0x99, 0xcc, 0x68, 0x4c, 0x9d, 0xf1, 0x64, 0xa6, 0xf5, 0x66, 0xec, 0xb4, 0x0f, 0xc4, 0x25,
+	0x6f, 0xc0, 0x2b, 0xf0, 0x02, 0xbc, 0x03, 0xf7, 0xdc, 0x33, 0xda, 0x5d, 0x3b, 0x8e, 0x13, 0x52,
+	0xae, 0xa2, 0xf8, 0x7c, 0x9f, 0xf4, 0x9d, 0xef, 0x9c, 0x3d, 0x87, 0xbc, 0x18, 0xe6, 0xf9, 0xf0,
+	0xd5, 0x61, 0xbd, 0x3f, 0x98, 0xd4, 0xcb, 0x63, 0x38, 0xbd, 0x6d, 0xd4, 0x0f, 0xc7, 0xe3, 0x7c,
+	0x3c, 0xa9, 0xf7, 0x07, 0x7e, 0x38, 0xce, 0xdf, 0x1c, 0xfb, 0x97, 0xe3, 0xa3, 0x93, 0xc3, 0xf1,
+	0x51, 0x3e, 0xf2, 0x45, 0xa4, 0x76, 0x3c, 0xce, 0x4f, 0x72, 0xb6, 0x51, 0x72, 0x6a, 0xfd, 0xc1,
+	0xa4, 0x36, 0xa3, 0xd7, 0xde, 0x36, 0x6a, 0x25, 0x7d, 0x65, 0x6d, 0x7a, 0xfd, 0xf1, 0x51, 0xbd,
+	0x3f, 0x1a, 0xe5, 0x27, 0xfd, 0x93, 0xa3, 0x7c, 0x34, 0x29, 0xd9, 0x5b, 0x7f, 0x2d, 0x93, 0x3b,
+	0x30, 0x88, 0xc3, 0xfd, 0xd1, 0xf4, 0x7a, 0x0c, 0x44, 0x1c, 0xbd, 0x79, 0xbd, 0xf5, 0xc7, 0x32,
+	0xf9, 0xe2, 0xc2, 0x28, 0xbb, 0x49, 0x6e, 0x64, 0xca, 0xa6, 0x18, 0x89, 0xb6, 0x40, 0x4e, 0xdf,
+	0x63, 0x37, 0xc8, 0xf5, 0x4c, 0xed, 0x2a, 0xbd, 0xa7, 0xe8, 0x15, 0xb6, 0x4d, 0x1e, 0x02, 0xf7,
+	0xb1, 0xd1, 0x59, 0xea, 0x23, 0x23, 0x1c, 0x1a, 0xa1, 0x95, 0x97, 0xd0, 0x42, 0xe9, 0xb9, 0x46,
+	0xeb, 0x95, 0x76, 0x1e, 0xf7, 0x85, 0x75, 0x74, 0xe9, 0x52, 0x30, 0x48, 0x83, 0xc0, 0x7b, 0x25,
+	0xd6, 0xd2, 0xab, 0xec, 0x31, 0x79, 0x10, 0x81, 0x0a, 0x74, 0xe0, 0xbc, 0x02, 0x39, 0xed, 0x15,
+	0xc6, 0xe0, 0x44, 0x17, 0x4f, 0x2f, 0xa0, 0xef, 0xb3, 0x5b, 0xe4, 0x33, 0xa7, 0xb5, 0x4f, 0x40,
+	0xf5, 0xbc, 0x4e, 0xd1, 0x80, 0x13, 0x5a, 0x59, 0xfa, 0x01, 0xbb, 0x4d, 0x3e, 0x8f, 0x40, 0x39,
+	0x9f, 0xa5, 0x1c, 0x1c, 0xce, 0xc8, 0xf4, 0x1a, 0x5b, 0x21, 0x5f, 0x46, 0x5a, 0x45, 0x06, 0x1d,
+	0x7a, 0xd7, 0x4b, 0xd1, 0x1b, 0xfc, 0x39, 0x13, 0x06, 0x39, 0xbd, 0xce, 0xee, 0x91, 0xf5, 0x96,
+	0xe0, 0x5e, 0xa8, 0x48, 0x27, 0x29, 0x38, 0xd1, 0x92, 0xe8, 0xf7, 0x84, 0xeb, 0x78, 0xe0, 0x85,
+	0x78, 0xfa, 0x21, 0x5b, 0x27, 0x77, 0x2a, 0x75, 0x0e, 0x4c, 0x8c, 0xce, 0x83, 0xe2, 0x1e, 0xf7,
+	0x23, 0x99, 0x71, 0xa4, 0x1f, 0x05, 0xd3, 0x84, 0x94, 0x18, 0x83, 0xf4, 0x99, 0x91, 0x94, 0x04,
+	0x21, 0x42, 0x75, 0x41, 0x0a, 0xee, 0x77, 0xb1, 0xb7, 0xa7, 0x0d, 0xf7, 0x0e, 0xf7, 0x1d, 0xbd,
+	0xc1, 0x56, 0xc9, 0xad, 0x69, 0x84, 0xa3, 0x75, 0x42, 0x15, 0xe2, 0x0b, 0xda, 0x32, 0xdb, 0x24,
+	0xab, 0x89, 0xb0, 0x56, 0xa8, 0x78, 0x31, 0xe8, 0x1d, 0xc4, 0xf4, 0x63, 0xf6, 0x84, 0xec, 0x4c,
+	0xef, 0x93, 0xd8, 0x45, 0xe9, 0x83, 0xf0, 0x20, 0xcb, 0x66, 0x69, 0xaa, 0x8d, 0x43, 0xee, 0xdb,
+	0xda, 0x04, 0x67, 0x32, 0x90, 0x51, 0x9a, 0xd0, 0x4f, 0x82, 0x59, 0xd3, 0x07, 0x33, 0x8b, 0xc6,
+	0x5b, 0x07, 0x2e, 0xb3, 0xf4, 0x26, 0x5b, 0x23, 0xb7, 0xe7, 0x1c, 0xaf, 0xfc, 0x85, 0xc2, 0x1d,
+	0x4a, 0xd9, 0x5d, 0xb2, 0x56, 0x45, 0xab, 0x34, 0x17, 0x10, 0x9f, 0xb2, 0x1f, 0xc8, 0x93, 0x08,
+	0x92, 0x14, 0x44, 0xac, 0x4a, 0x4b, 0x03, 0x78, 0xd1, 0xc2, 0x14, 0x8c, 0x13, 0x20, 0x7d, 0x1b,
+	0x84, 0xcc, 0x0c, 0xd2, 0x55, 0xb6, 0x43, 0x1e, 0x9d, 0xd6, 0xac, 0x50, 0x3b, 0xab, 0xa5, 0xed,
+	0xe8, 0x34, 0x0d, 0xc9, 0x57, 0xc6, 0x5b, 0xba, 0xc6, 0xbe, 0x27, 0xdf, 0x55, 0x3a, 0x12, 0xcd,
+	0x45, 0xbb, 0x57, 0x98, 0xd1, 0x16, 0x28, 0xb9, 0x2d, 0x5f, 0xe0, 0x59, 0x2a, 0x45, 0x14, 0xca,
+	0x8d, 0x12, 0x13, 0x54, 0xce, 0xd2, 0xf5, 0x50, 0xd2, 0x8a, 0x65, 0xd1, 0x15, 0x38, 0x9d, 0x39,
+	0xdf, 0x16, 0xaa, 0xac, 0x90, 0xa5, 0x1b, 0xec, 0x19, 0x79, 0x5a, 0x41, 0x22, 0x89, 0x60, 0xe6,
+	0x82, 0x5e, 0xb4, 0xab, 0xff, 0x12, 0xdd, 0x12, 0x12, 0xcb, 0x1f, 0xcb, 0xae, 0xde, 0x64, 0x0d,
+	0x52, 0x7f, 0x27, 0x0f, 0xd2, 0x74, 0x9e, 0x74, 0x97, 0x3d, 0x27, 0x3f, 0x5e, 0x42, 0x72, 0x06,
+	0xa2, 0xdd, 0x90, 0x77, 0x51, 0x68, 0x4c, 0x52, 0x59, 0xa4, 0x53, 0x7e, 0x1a, 0xf7, 0x58, 0x93,
+	0x3c, 0xbb, 0x84, 0x1c, 0x38, 0x51, 0x66, 0x9d, 0x4e, 0x82, 0xd9, 0x90, 0xa0, 0x43, 0x33, 0x7d,
+	0x78, 0x8b, 0x3d, 0x25, 0xb5, 0x39, 0x23, 0x5a, 0x3a, 0x18, 0xb6, 0xd0, 0x59, 0xa1, 0x95, 0xe7,
+	0x9c, 0xb9, 0xcf, 0x5e, 0x90, 0x9f, 0xfe, 0x0f, 0xe7, 0x42, 0xd5, 0xf4, 0x2b, 0x56, 0x27, 0xdb,
+	0x73, 0x0a, 0xcf, 0x37, 0xe7, 0xe9, 0x28, 0x28, 0x1a, 0xe9, 0xeb, 0x50, 0x89, 0xf3, 0x76, 0xbf,
+	0x93, 0xf7, 0x80, 0xdd, 0x27, 0x9b, 0xd3, 0xce, 0x96, 0x22, 0xe8, 0x8b, 0xab, 0x61, 0xd3, 0x11,
+	0x68, 0xc0, 0x44, 0x9d, 0x1e, 0x7d, 0x18, 0x86, 0xd0, 0xd9, 0x60, 0xa6, 0x84, 0xf3, 0x55, 0x7e,
+	0x1d, 0x08, 0x93, 0xa5, 0x23, 0x24, 0x37, 0xa8, 0xe8, 0x37, 0xc1, 0xad, 0xb3, 0x60, 0x9b, 0xb5,
+	0xb8, 0xe8, 0x0a, 0x1b, 0x5e, 0xad, 0x26, 0x86, 0xf5, 0xda, 0x75, 0x82, 0xc5, 0x11, 0x58, 0xa4,
+	0x8f, 0x42, 0x75, 0xce, 0x72, 0x66, 0x38, 0x0b, 0x09, 0x7a, 0x2e, 0x12, 0x54, 0x76, 0xaa, 0xda,
+	0x83, 0xf5, 0x56, 0xb4, 0xa4, 0x50, 0xb1, 0xa5, 0x8f, 0xc3, 0x47, 0x76, 0x96, 0xbb, 0x30, 0x16,
+	0xb7, 0xcf, 0x23, 0x16, 0xa6, 0xec, 0xb7, 0xc1, 0x85, 0xb3, 0x88, 0x2a, 0xb7, 0x56, 0x98, 0x71,
+	0x89, 0xee, 0x22, 0xa7, 0x3b, 0x6c, 0x83, 0xac, 0x5c, 0x6c, 0x55, 0x61, 0x65, 0x2d, 0x4c, 0xdf,
+	0x05, 0x21, 0x9c, 0xfb, 0x04, 0x7a, 0x5e, 0x2b, 0xd9, 0x0b, 0x73, 0xa3, 0x28, 0xb0, 0x17, 0x9c,
+	0xd6, 0x5b, 0xff, 0x5c, 0x21, 0x5b, 0x2f, 0xf3, 0xd7, 0xb5, 0xcb, 0xd7, 0x53, 0x6b, 0xe5, 0xc2,
+	0xfd, 0x92, 0x86, 0xe5, 0x94, 0x5e, 0xf9, 0x85, 0x57, 0xec, 0x61, 0xfe, 0xaa, 0x3f, 0x1a, 0xd6,
+	0xf2, 0xf1, 0xb0, 0x3e, 0x3c, 0x1c, 0x15, 0xab, 0x6b, 0xba, 0x2b, 0x8f, 0x8f, 0x26, 0xff, 0xb5,
+	0x3a, 0x9f, 0x97, 0x7f, 0x7e, 0x5b, 0xba, 0x1a, 0x03, 0xfc, 0xbe, 0xb4, 0x11, 0x97, 0x97, 0xc1,
+	0x60, 0x52, 0x2b, 0x8f, 0xe1, 0xd4, 0x6d, 0xd4, 0x8a, 0x27, 0x27, 0x7f, 0x4e, 0x01, 0x07, 0x30,
+	0x98, 0x1c, 0xcc, 0x00, 0x07, 0xdd, 0xc6, 0x41, 0x09, 0xf8, 0x7b, 0x69, 0xab, 0xfc, 0xb5, 0xd9,
+	0x84, 0xc1, 0xa4, 0xd9, 0x9c, 0x41, 0x9a, 0xcd, 0x6e, 0xa3, 0xd9, 0x2c, 0x41, 0xbf, 0x5e, 0x2b,
+	0xd4, 0x35, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x70, 0x09, 0xd6, 0x0f, 0xd7, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_group_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_group_error.pb.go
new file mode 100644
index 0000000..b78a230
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_group_error.pb.go
@@ -0,0 +1,182 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_group_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad group errors.
+type AdGroupErrorEnum_AdGroupError int32
+
+const (
+	// Enum unspecified.
+	AdGroupErrorEnum_UNSPECIFIED AdGroupErrorEnum_AdGroupError = 0
+	// The received error code is not known in this version.
+	AdGroupErrorEnum_UNKNOWN AdGroupErrorEnum_AdGroupError = 1
+	// AdGroup with the same name already exists for the campaign.
+	AdGroupErrorEnum_DUPLICATE_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 2
+	// AdGroup name is not valid.
+	AdGroupErrorEnum_INVALID_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 3
+	// Advertiser is not allowed to target sites or set site bids that are not
+	// on the Google Search Network.
+	AdGroupErrorEnum_ADVERTISER_NOT_ON_CONTENT_NETWORK AdGroupErrorEnum_AdGroupError = 5
+	// Bid amount is too big.
+	AdGroupErrorEnum_BID_TOO_BIG AdGroupErrorEnum_AdGroupError = 6
+	// AdGroup bid does not match the campaign's bidding strategy.
+	AdGroupErrorEnum_BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH AdGroupErrorEnum_AdGroupError = 7
+	// AdGroup name is required for Add.
+	AdGroupErrorEnum_MISSING_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 8
+	// No link found between the ad group and the label.
+	AdGroupErrorEnum_ADGROUP_LABEL_DOES_NOT_EXIST AdGroupErrorEnum_AdGroupError = 9
+	// The label has already been attached to the ad group.
+	AdGroupErrorEnum_ADGROUP_LABEL_ALREADY_EXISTS AdGroupErrorEnum_AdGroupError = 10
+	// The CriterionTypeGroup is not supported for the content bid dimension.
+	AdGroupErrorEnum_INVALID_CONTENT_BID_CRITERION_TYPE_GROUP AdGroupErrorEnum_AdGroupError = 11
+	// The ad group type is not compatible with the campaign channel type.
+	AdGroupErrorEnum_AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE AdGroupErrorEnum_AdGroupError = 12
+	// The ad group type is not supported in the country of sale of the
+	// campaign.
+	AdGroupErrorEnum_ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY AdGroupErrorEnum_AdGroupError = 13
+	// Ad groups of AdGroupType.SEARCH_DYNAMIC_ADS can only be added to
+	// campaigns that have DynamicSearchAdsSetting attached.
+	AdGroupErrorEnum_CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING AdGroupErrorEnum_AdGroupError = 14
+)
+
+var AdGroupErrorEnum_AdGroupError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DUPLICATE_ADGROUP_NAME",
+	3:  "INVALID_ADGROUP_NAME",
+	5:  "ADVERTISER_NOT_ON_CONTENT_NETWORK",
+	6:  "BID_TOO_BIG",
+	7:  "BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH",
+	8:  "MISSING_ADGROUP_NAME",
+	9:  "ADGROUP_LABEL_DOES_NOT_EXIST",
+	10: "ADGROUP_LABEL_ALREADY_EXISTS",
+	11: "INVALID_CONTENT_BID_CRITERION_TYPE_GROUP",
+	12: "AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE",
+	13: "ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY",
+	14: "CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING",
+}
+
+var AdGroupErrorEnum_AdGroupError_value = map[string]int32{
+	"UNSPECIFIED":                                                    0,
+	"UNKNOWN":                                                        1,
+	"DUPLICATE_ADGROUP_NAME":                                         2,
+	"INVALID_ADGROUP_NAME":                                           3,
+	"ADVERTISER_NOT_ON_CONTENT_NETWORK":                              5,
+	"BID_TOO_BIG":                                                    6,
+	"BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH":                         7,
+	"MISSING_ADGROUP_NAME":                                           8,
+	"ADGROUP_LABEL_DOES_NOT_EXIST":                                   9,
+	"ADGROUP_LABEL_ALREADY_EXISTS":                                   10,
+	"INVALID_CONTENT_BID_CRITERION_TYPE_GROUP":                       11,
+	"AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE":           12,
+	"ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY":          13,
+	"CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING": 14,
+}
+
+func (x AdGroupErrorEnum_AdGroupError) String() string {
+	return proto.EnumName(AdGroupErrorEnum_AdGroupError_name, int32(x))
+}
+
+func (AdGroupErrorEnum_AdGroupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e609153f44ae1ab8, []int{0, 0}
+}
+
+// Container for enum describing possible ad group errors.
+type AdGroupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupErrorEnum) Reset()         { *m = AdGroupErrorEnum{} }
+func (m *AdGroupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupErrorEnum) ProtoMessage()    {}
+func (*AdGroupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e609153f44ae1ab8, []int{0}
+}
+
+func (m *AdGroupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupErrorEnum.Merge(m, src)
+}
+func (m *AdGroupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupErrorEnum.Size(m)
+}
+func (m *AdGroupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdGroupErrorEnum_AdGroupError", AdGroupErrorEnum_AdGroupError_name, AdGroupErrorEnum_AdGroupError_value)
+	proto.RegisterType((*AdGroupErrorEnum)(nil), "google.ads.googleads.v3.errors.AdGroupErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_group_error.proto", fileDescriptor_e609153f44ae1ab8)
+}
+
+var fileDescriptor_e609153f44ae1ab8 = []byte{
+	// 553 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6a, 0xd4, 0x40,
+	0x14, 0x86, 0xed, 0xb6, 0xb6, 0x3a, 0xad, 0x3a, 0x0e, 0x22, 0x52, 0x4a, 0xd1, 0x05, 0x45, 0x44,
+	0xb2, 0x17, 0x51, 0xd0, 0x08, 0xc2, 0x49, 0x66, 0x9a, 0x0e, 0xcd, 0xce, 0x84, 0xcc, 0x64, 0xeb,
+	0xca, 0xc2, 0xb0, 0x9a, 0x12, 0x0a, 0x6d, 0xb2, 0x24, 0x6d, 0x5f, 0xc2, 0x97, 0x10, 0x2f, 0x7d,
+	0x14, 0x1f, 0x45, 0x7c, 0x08, 0x99, 0x8c, 0xd9, 0xb6, 0x88, 0x5e, 0xe5, 0xcc, 0x99, 0xef, 0x3f,
+	0xe7, 0x4f, 0xf2, 0x23, 0xbf, 0xac, 0xeb, 0xf2, 0xe4, 0x68, 0x34, 0x2f, 0xda, 0x91, 0x2b, 0x6d,
+	0x75, 0xe1, 0x8f, 0x8e, 0x9a, 0xa6, 0x6e, 0xda, 0xd1, 0xbc, 0x30, 0x65, 0x53, 0x9f, 0x2f, 0x4c,
+	0x77, 0xf6, 0x16, 0x4d, 0x7d, 0x56, 0x93, 0x5d, 0x47, 0x7a, 0xf3, 0xa2, 0xf5, 0x96, 0x22, 0xef,
+	0xc2, 0xf7, 0x9c, 0x68, 0x7b, 0xa7, 0x1f, 0xba, 0x38, 0x1e, 0xcd, 0xab, 0xaa, 0x3e, 0x9b, 0x9f,
+	0x1d, 0xd7, 0x55, 0xeb, 0xd4, 0xc3, 0xaf, 0x6b, 0x08, 0x43, 0x11, 0xdb, 0xa9, 0xcc, 0xf2, 0xac,
+	0x3a, 0x3f, 0x1d, 0x7e, 0x59, 0x43, 0x5b, 0x57, 0x9b, 0xe4, 0x1e, 0xda, 0xcc, 0x85, 0x4a, 0x59,
+	0xc4, 0xf7, 0x38, 0xa3, 0xf8, 0x06, 0xd9, 0x44, 0x1b, 0xb9, 0x38, 0x10, 0xf2, 0x50, 0xe0, 0x15,
+	0xb2, 0x8d, 0x1e, 0xd2, 0x3c, 0x4d, 0x78, 0x04, 0x9a, 0x19, 0xa0, 0x71, 0x26, 0xf3, 0xd4, 0x08,
+	0x18, 0x33, 0x3c, 0x20, 0x8f, 0xd0, 0x03, 0x2e, 0x26, 0x90, 0x70, 0x7a, 0xfd, 0x66, 0x95, 0x3c,
+	0x45, 0x4f, 0x80, 0x4e, 0x58, 0xa6, 0xb9, 0x62, 0x99, 0x11, 0x52, 0x1b, 0x29, 0x4c, 0x24, 0x85,
+	0x66, 0x42, 0x1b, 0xc1, 0xf4, 0xa1, 0xcc, 0x0e, 0xf0, 0x4d, 0xbb, 0x3a, 0xe4, 0xd4, 0x68, 0x29,
+	0x4d, 0xc8, 0x63, 0xbc, 0x4e, 0x5e, 0xa0, 0x67, 0x5d, 0x63, 0x9a, 0x32, 0x03, 0x82, 0x9a, 0x90,
+	0x53, 0xca, 0x45, 0x6c, 0x94, 0xce, 0x40, 0xb3, 0x78, 0x6a, 0xc6, 0x5c, 0x8d, 0x41, 0x47, 0xfb,
+	0x78, 0xc3, 0x6e, 0x1f, 0x73, 0xa5, 0xec, 0xf5, 0xb5, 0xed, 0xb7, 0xc8, 0x63, 0xb4, 0xd3, 0x77,
+	0x12, 0x08, 0x59, 0x62, 0xa8, 0x64, 0xaa, 0x73, 0xc1, 0x3e, 0x70, 0xa5, 0xf1, 0xed, 0xbf, 0x09,
+	0x48, 0x32, 0x06, 0x74, 0xea, 0x00, 0x85, 0x11, 0x79, 0x89, 0x9e, 0xf7, 0xef, 0xd6, 0xfb, 0xb6,
+	0xce, 0xa2, 0x8c, 0x6b, 0x96, 0x71, 0x29, 0x9c, 0xc7, 0x6e, 0x04, 0xde, 0x24, 0x6f, 0xd0, 0x2b,
+	0xa0, 0xee, 0xe4, 0x2e, 0xec, 0x32, 0xa7, 0xde, 0x93, 0x99, 0xe9, 0xbf, 0x85, 0xf5, 0x1a, 0xed,
+	0x83, 0x10, 0x2c, 0xe9, 0x30, 0xbc, 0x45, 0xde, 0xa2, 0xd7, 0xbd, 0x93, 0xa5, 0x50, 0xe5, 0x69,
+	0x2a, 0x33, 0xcd, 0x9c, 0x38, 0x82, 0x71, 0x0a, 0x3c, 0x16, 0x46, 0x41, 0xc2, 0x94, 0x89, 0x64,
+	0x2e, 0x74, 0x36, 0xc5, 0x77, 0x48, 0x88, 0xde, 0x47, 0x20, 0xac, 0x00, 0xe8, 0xe5, 0x1f, 0x90,
+	0x7b, 0x6e, 0x10, 0x55, 0x60, 0xb4, 0xbc, 0x54, 0x1f, 0x72, 0xbd, 0x2f, 0x73, 0xdd, 0xf5, 0x15,
+	0xd3, 0x9a, 0x8b, 0x18, 0xdf, 0x0d, 0x7f, 0xad, 0xa0, 0xe1, 0xe7, 0xfa, 0xd4, 0xfb, 0x7f, 0xce,
+	0xc2, 0xfb, 0x57, 0x13, 0x93, 0xda, 0x70, 0xa5, 0x2b, 0x1f, 0xe9, 0x1f, 0x51, 0x59, 0x9f, 0xcc,
+	0xab, 0xd2, 0xab, 0x9b, 0x72, 0x54, 0x1e, 0x55, 0x5d, 0xf4, 0xfa, 0x84, 0x2f, 0x8e, 0xdb, 0x7f,
+	0x05, 0xfe, 0x9d, 0x7b, 0x7c, 0x1b, 0xac, 0xc6, 0x00, 0xdf, 0x07, 0xbb, 0xb1, 0x1b, 0x06, 0x45,
+	0xeb, 0xb9, 0xd2, 0x56, 0x13, 0xdf, 0xeb, 0x56, 0xb6, 0x3f, 0x7a, 0x60, 0x06, 0x45, 0x3b, 0x5b,
+	0x02, 0xb3, 0x89, 0x3f, 0x73, 0xc0, 0xcf, 0xc1, 0xd0, 0x75, 0x83, 0x00, 0x8a, 0x36, 0x08, 0x96,
+	0x48, 0x10, 0x4c, 0xfc, 0x20, 0x70, 0xd0, 0xa7, 0xf5, 0xce, 0x9d, 0xff, 0x3b, 0x00, 0x00, 0xff,
+	0xff, 0xf3, 0x1a, 0x86, 0xaa, 0x8d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_group_feed_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_group_feed_error.pb.go
new file mode 100644
index 0000000..02666f3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_group_feed_error.pb.go
@@ -0,0 +1,154 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_group_feed_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad group feed errors.
+type AdGroupFeedErrorEnum_AdGroupFeedError int32
+
+const (
+	// Enum unspecified.
+	AdGroupFeedErrorEnum_UNSPECIFIED AdGroupFeedErrorEnum_AdGroupFeedError = 0
+	// The received error code is not known in this version.
+	AdGroupFeedErrorEnum_UNKNOWN AdGroupFeedErrorEnum_AdGroupFeedError = 1
+	// An active feed already exists for this ad group and place holder type.
+	AdGroupFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 2
+	// The specified feed is removed.
+	AdGroupFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 3
+	// The AdGroupFeed already exists. UPDATE operation should be used to modify
+	// the existing AdGroupFeed.
+	AdGroupFeedErrorEnum_ADGROUP_FEED_ALREADY_EXISTS AdGroupFeedErrorEnum_AdGroupFeedError = 4
+	// Cannot operate on removed AdGroupFeed.
+	AdGroupFeedErrorEnum_CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 5
+	// Invalid placeholder type.
+	AdGroupFeedErrorEnum_INVALID_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 6
+	// Feed mapping for this placeholder type does not exist.
+	AdGroupFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 7
+	// Location AdGroupFeeds cannot be created unless there is a location
+	// CustomerFeed for the specified feed.
+	AdGroupFeedErrorEnum_NO_EXISTING_LOCATION_CUSTOMER_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 8
+)
+
+var AdGroupFeedErrorEnum_AdGroupFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	3: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	4: "ADGROUP_FEED_ALREADY_EXISTS",
+	5: "CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED",
+	6: "INVALID_PLACEHOLDER_TYPE",
+	7: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+	8: "NO_EXISTING_LOCATION_CUSTOMER_FEED",
+}
+
+var AdGroupFeedErrorEnum_AdGroupFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE": 2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":           3,
+	"ADGROUP_FEED_ALREADY_EXISTS":              4,
+	"CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED":   5,
+	"INVALID_PLACEHOLDER_TYPE":                 6,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE": 7,
+	"NO_EXISTING_LOCATION_CUSTOMER_FEED":       8,
+}
+
+func (x AdGroupFeedErrorEnum_AdGroupFeedError) String() string {
+	return proto.EnumName(AdGroupFeedErrorEnum_AdGroupFeedError_name, int32(x))
+}
+
+func (AdGroupFeedErrorEnum_AdGroupFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d50cd165cb21e840, []int{0, 0}
+}
+
+// Container for enum describing possible ad group feed errors.
+type AdGroupFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupFeedErrorEnum) Reset()         { *m = AdGroupFeedErrorEnum{} }
+func (m *AdGroupFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeedErrorEnum) ProtoMessage()    {}
+func (*AdGroupFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d50cd165cb21e840, []int{0}
+}
+
+func (m *AdGroupFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdGroupFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeedErrorEnum.Merge(m, src)
+}
+func (m *AdGroupFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Size(m)
+}
+func (m *AdGroupFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdGroupFeedErrorEnum_AdGroupFeedError", AdGroupFeedErrorEnum_AdGroupFeedError_name, AdGroupFeedErrorEnum_AdGroupFeedError_value)
+	proto.RegisterType((*AdGroupFeedErrorEnum)(nil), "google.ads.googleads.v3.errors.AdGroupFeedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_group_feed_error.proto", fileDescriptor_d50cd165cb21e840)
+}
+
+var fileDescriptor_d50cd165cb21e840 = []byte{
+	// 444 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8a, 0xd4, 0x30,
+	0x1c, 0xc6, 0x9d, 0xae, 0xee, 0x4a, 0xf6, 0x60, 0x29, 0x0a, 0xa2, 0xcb, 0x08, 0x3d, 0x2c, 0x22,
+	0x92, 0x1e, 0x7a, 0x91, 0x7a, 0xca, 0xb6, 0xff, 0xa9, 0xc5, 0x4e, 0x12, 0xda, 0x4e, 0x75, 0x65,
+	0x20, 0x54, 0x53, 0xcb, 0xc0, 0x6e, 0x33, 0x34, 0xb3, 0xfb, 0x40, 0x1e, 0x7d, 0x0d, 0x6f, 0x3e,
+	0x83, 0x4f, 0xe0, 0xc9, 0x47, 0x90, 0x34, 0x3b, 0x83, 0xac, 0xa3, 0xa7, 0x7e, 0xa4, 0xbf, 0xef,
+	0xcb, 0x47, 0xfe, 0x7f, 0xf4, 0xaa, 0x53, 0xaa, 0xbb, 0x68, 0x83, 0x46, 0xea, 0xc0, 0x4a, 0xa3,
+	0xae, 0xc3, 0xa0, 0x1d, 0x06, 0x35, 0xe8, 0xa0, 0x91, 0xa2, 0x1b, 0xd4, 0xd5, 0x5a, 0x7c, 0x6e,
+	0x5b, 0x29, 0xc6, 0x43, 0xbc, 0x1e, 0xd4, 0x46, 0x79, 0x53, 0x8b, 0xe3, 0x46, 0x6a, 0xbc, 0x73,
+	0xe2, 0xeb, 0x10, 0x5b, 0xe7, 0x93, 0x93, 0x6d, 0xf2, 0x7a, 0x15, 0x34, 0x7d, 0xaf, 0x36, 0xcd,
+	0x66, 0xa5, 0x7a, 0x6d, 0xdd, 0xfe, 0x0f, 0x07, 0x3d, 0x24, 0x32, 0x35, 0xd1, 0xb3, 0xb6, 0x95,
+	0x60, 0x3c, 0xd0, 0x5f, 0x5d, 0xfa, 0xdf, 0x1c, 0xe4, 0xde, 0xfe, 0xe1, 0x3d, 0x40, 0xc7, 0x0b,
+	0x5a, 0x72, 0x88, 0xb3, 0x59, 0x06, 0x89, 0x7b, 0xc7, 0x3b, 0x46, 0x47, 0x0b, 0xfa, 0x96, 0xb2,
+	0x77, 0xd4, 0x9d, 0x78, 0x2f, 0xd1, 0xf3, 0x19, 0x40, 0x22, 0x48, 0x5e, 0x00, 0x49, 0xce, 0x05,
+	0xbc, 0xcf, 0xca, 0xaa, 0x14, 0x33, 0x56, 0x08, 0x9e, 0x93, 0x18, 0xde, 0xb0, 0x3c, 0x81, 0x42,
+	0x54, 0xe7, 0x1c, 0x5c, 0xc7, 0xf3, 0xd1, 0x34, 0x26, 0x94, 0xb2, 0x4a, 0xc4, 0x05, 0x90, 0x0a,
+	0x46, 0xae, 0x80, 0x39, 0xab, 0x21, 0x11, 0x26, 0xc7, 0x3d, 0xf0, 0x9e, 0xa1, 0xa7, 0x24, 0x49,
+	0x0b, 0xb6, 0xe0, 0x62, 0x4f, 0xb2, 0x7b, 0xd7, 0x7b, 0x81, 0x4e, 0x6f, 0x42, 0x18, 0x87, 0xc2,
+	0xa4, 0x30, 0xba, 0x0b, 0xf9, 0xd3, 0xea, 0xde, 0xf3, 0x4e, 0xd0, 0xe3, 0x8c, 0xd6, 0x24, 0xcf,
+	0x92, 0xbf, 0xeb, 0x1c, 0x9a, 0xf2, 0xf3, 0xac, 0x2c, 0x33, 0x9a, 0x8e, 0xfc, 0x9c, 0x70, 0x3e,
+	0xea, 0x7d, 0xe5, 0x8f, 0xbc, 0x53, 0xe4, 0x53, 0x66, 0x6b, 0x18, 0x2a, 0x67, 0x31, 0xa9, 0x32,
+	0x46, 0x45, 0xbc, 0x28, 0x2b, 0x36, 0x87, 0xc2, 0xde, 0x79, 0xff, 0xec, 0xd7, 0x04, 0xf9, 0x9f,
+	0xd4, 0x25, 0xfe, 0xff, 0x8c, 0xce, 0x1e, 0xdd, 0x7e, 0x69, 0x6e, 0x86, 0xc3, 0x27, 0x1f, 0x92,
+	0x1b, 0x63, 0xa7, 0x2e, 0x9a, 0xbe, 0xc3, 0x6a, 0xe8, 0x82, 0xae, 0xed, 0xc7, 0xd1, 0x6d, 0xd7,
+	0x64, 0xbd, 0xd2, 0xff, 0xda, 0x9a, 0xd7, 0xf6, 0xf3, 0xc5, 0x39, 0x48, 0x09, 0xf9, 0xea, 0x4c,
+	0x53, 0x1b, 0x46, 0xa4, 0xc6, 0x56, 0x1a, 0x55, 0x87, 0x78, 0xbc, 0x52, 0x7f, 0xdf, 0x02, 0x4b,
+	0x22, 0xf5, 0x72, 0x07, 0x2c, 0xeb, 0x70, 0x69, 0x81, 0x9f, 0x8e, 0x6f, 0x4f, 0xa3, 0x88, 0x48,
+	0x1d, 0x45, 0x3b, 0x24, 0x8a, 0xea, 0x30, 0x8a, 0x2c, 0xf4, 0xf1, 0x70, 0x6c, 0x17, 0xfe, 0x0e,
+	0x00, 0x00, 0xff, 0xff, 0x64, 0x34, 0x18, 0x57, 0xd2, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_parameter_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_parameter_error.pb.go
new file mode 100644
index 0000000..65f3b76
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_parameter_error.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_parameter_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad parameter errors.
+type AdParameterErrorEnum_AdParameterError int32
+
+const (
+	// Enum unspecified.
+	AdParameterErrorEnum_UNSPECIFIED AdParameterErrorEnum_AdParameterError = 0
+	// The received error code is not known in this version.
+	AdParameterErrorEnum_UNKNOWN AdParameterErrorEnum_AdParameterError = 1
+	// The ad group criterion must be a keyword criterion.
+	AdParameterErrorEnum_AD_GROUP_CRITERION_MUST_BE_KEYWORD AdParameterErrorEnum_AdParameterError = 2
+	// The insertion text is invalid.
+	AdParameterErrorEnum_INVALID_INSERTION_TEXT_FORMAT AdParameterErrorEnum_AdParameterError = 3
+)
+
+var AdParameterErrorEnum_AdParameterError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_CRITERION_MUST_BE_KEYWORD",
+	3: "INVALID_INSERTION_TEXT_FORMAT",
+}
+
+var AdParameterErrorEnum_AdParameterError_value = map[string]int32{
+	"UNSPECIFIED":                        0,
+	"UNKNOWN":                            1,
+	"AD_GROUP_CRITERION_MUST_BE_KEYWORD": 2,
+	"INVALID_INSERTION_TEXT_FORMAT":      3,
+}
+
+func (x AdParameterErrorEnum_AdParameterError) String() string {
+	return proto.EnumName(AdParameterErrorEnum_AdParameterError_name, int32(x))
+}
+
+func (AdParameterErrorEnum_AdParameterError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cdb54cc8afb74021, []int{0, 0}
+}
+
+// Container for enum describing possible ad parameter errors.
+type AdParameterErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdParameterErrorEnum) Reset()         { *m = AdParameterErrorEnum{} }
+func (m *AdParameterErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdParameterErrorEnum) ProtoMessage()    {}
+func (*AdParameterErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cdb54cc8afb74021, []int{0}
+}
+
+func (m *AdParameterErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdParameterErrorEnum.Unmarshal(m, b)
+}
+func (m *AdParameterErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdParameterErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdParameterErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdParameterErrorEnum.Merge(m, src)
+}
+func (m *AdParameterErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdParameterErrorEnum.Size(m)
+}
+func (m *AdParameterErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdParameterErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdParameterErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdParameterErrorEnum_AdParameterError", AdParameterErrorEnum_AdParameterError_name, AdParameterErrorEnum_AdParameterError_value)
+	proto.RegisterType((*AdParameterErrorEnum)(nil), "google.ads.googleads.v3.errors.AdParameterErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_parameter_error.proto", fileDescriptor_cdb54cc8afb74021)
+}
+
+var fileDescriptor_cdb54cc8afb74021 = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0xff, 0xa4, 0xf0, 0x0b, 0xd3, 0x85, 0x21, 0xe8, 0x46, 0xb4, 0x60, 0x16, 0x2e, 0x27,
+	0x8b, 0x2c, 0x84, 0x71, 0x35, 0x6d, 0xa6, 0x25, 0xd4, 0x26, 0x21, 0x4d, 0x52, 0x95, 0xc0, 0x30,
+	0x9a, 0x10, 0x0a, 0x6d, 0x26, 0xcc, 0xc4, 0x6e, 0x7c, 0x0c, 0xdf, 0xc0, 0xa5, 0x8f, 0xe2, 0xa3,
+	0xb8, 0xf2, 0x11, 0x24, 0x19, 0xd3, 0x45, 0x41, 0x57, 0x73, 0xb8, 0x7c, 0xe7, 0xcc, 0x3d, 0x17,
+	0x5c, 0x97, 0x9c, 0x97, 0x9b, 0xc2, 0x66, 0xb9, 0xb4, 0x95, 0x6c, 0xd5, 0xce, 0xb1, 0x0b, 0x21,
+	0xb8, 0x90, 0x36, 0xcb, 0x69, 0xcd, 0x04, 0xdb, 0x16, 0x4d, 0x21, 0x68, 0x37, 0x83, 0xb5, 0xe0,
+	0x0d, 0x37, 0x47, 0x8a, 0x86, 0x2c, 0x97, 0x70, 0x6f, 0x84, 0x3b, 0x07, 0x2a, 0xe3, 0xd9, 0x79,
+	0x1f, 0x5c, 0xaf, 0x6d, 0x56, 0x55, 0xbc, 0x61, 0xcd, 0x9a, 0x57, 0x52, 0xb9, 0xad, 0x57, 0x0d,
+	0x9c, 0xe0, 0x3c, 0xec, 0x93, 0x49, 0xeb, 0x21, 0xd5, 0xf3, 0xd6, 0x7a, 0x01, 0xc6, 0xe1, 0xdc,
+	0x3c, 0x06, 0xc3, 0xc4, 0x5f, 0x86, 0x64, 0xe2, 0x4d, 0x3d, 0xe2, 0x1a, 0xff, 0xcc, 0x21, 0x38,
+	0x4a, 0xfc, 0xb9, 0x1f, 0xac, 0x7c, 0x43, 0x33, 0xaf, 0x80, 0x85, 0x5d, 0x3a, 0x8b, 0x82, 0x24,
+	0xa4, 0x93, 0xc8, 0x8b, 0x49, 0xe4, 0x05, 0x3e, 0x5d, 0x24, 0xcb, 0x98, 0x8e, 0x09, 0x9d, 0x93,
+	0xfb, 0x55, 0x10, 0xb9, 0x86, 0x6e, 0x5e, 0x82, 0x0b, 0xcf, 0x4f, 0xf1, 0xad, 0xe7, 0x52, 0xcf,
+	0x5f, 0x92, 0x28, 0x6e, 0xb1, 0x98, 0xdc, 0xc5, 0x74, 0x1a, 0x44, 0x0b, 0x1c, 0x1b, 0x83, 0xf1,
+	0x97, 0x06, 0xac, 0x27, 0xbe, 0x85, 0x7f, 0x57, 0x1b, 0x9f, 0x1e, 0x6e, 0x18, 0xb6, 0x9d, 0x42,
+	0xed, 0xc1, 0xfd, 0x31, 0x96, 0x7c, 0xc3, 0xaa, 0x12, 0x72, 0x51, 0xda, 0x65, 0x51, 0x75, 0x8d,
+	0xfb, 0xe3, 0xd6, 0x6b, 0xf9, 0xdb, 0xad, 0x6f, 0xd4, 0xf3, 0xa6, 0x0f, 0x66, 0x18, 0xbf, 0xeb,
+	0xa3, 0x99, 0x0a, 0xc3, 0xb9, 0x84, 0x4a, 0xb6, 0x2a, 0x75, 0x60, 0xf7, 0xa5, 0xfc, 0xe8, 0x81,
+	0x0c, 0xe7, 0x32, 0xdb, 0x03, 0x59, 0xea, 0x64, 0x0a, 0xf8, 0xd4, 0x2d, 0x35, 0x45, 0x08, 0xe7,
+	0x12, 0xa1, 0x3d, 0x82, 0x50, 0xea, 0x20, 0xa4, 0xa0, 0xc7, 0xff, 0xdd, 0x76, 0xce, 0x77, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x3f, 0x4a, 0xd8, 0x47, 0x08, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/ad_sharing_error.pb.go b/googleapis/ads/googleads/v3/errors/ad_sharing_error.pb.go
new file mode 100644
index 0000000..0cfd1e7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/ad_sharing_error.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/ad_sharing_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ad sharing errors.
+type AdSharingErrorEnum_AdSharingError int32
+
+const (
+	// Enum unspecified.
+	AdSharingErrorEnum_UNSPECIFIED AdSharingErrorEnum_AdSharingError = 0
+	// The received error code is not known in this version.
+	AdSharingErrorEnum_UNKNOWN AdSharingErrorEnum_AdSharingError = 1
+	// Error resulting in attempting to add an Ad to an AdGroup that already
+	// contains the Ad.
+	AdSharingErrorEnum_AD_GROUP_ALREADY_CONTAINS_AD AdSharingErrorEnum_AdSharingError = 2
+	// Ad is not compatible with the AdGroup it is being shared with.
+	AdSharingErrorEnum_INCOMPATIBLE_AD_UNDER_AD_GROUP AdSharingErrorEnum_AdSharingError = 3
+	// Cannot add AdGroupAd on inactive Ad.
+	AdSharingErrorEnum_CANNOT_SHARE_INACTIVE_AD AdSharingErrorEnum_AdSharingError = 4
+)
+
+var AdSharingErrorEnum_AdSharingError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_ALREADY_CONTAINS_AD",
+	3: "INCOMPATIBLE_AD_UNDER_AD_GROUP",
+	4: "CANNOT_SHARE_INACTIVE_AD",
+}
+
+var AdSharingErrorEnum_AdSharingError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"AD_GROUP_ALREADY_CONTAINS_AD":   2,
+	"INCOMPATIBLE_AD_UNDER_AD_GROUP": 3,
+	"CANNOT_SHARE_INACTIVE_AD":       4,
+}
+
+func (x AdSharingErrorEnum_AdSharingError) String() string {
+	return proto.EnumName(AdSharingErrorEnum_AdSharingError_name, int32(x))
+}
+
+func (AdSharingErrorEnum_AdSharingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4892a55c96781176, []int{0, 0}
+}
+
+// Container for enum describing possible ad sharing errors.
+type AdSharingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdSharingErrorEnum) Reset()         { *m = AdSharingErrorEnum{} }
+func (m *AdSharingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdSharingErrorEnum) ProtoMessage()    {}
+func (*AdSharingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4892a55c96781176, []int{0}
+}
+
+func (m *AdSharingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdSharingErrorEnum.Unmarshal(m, b)
+}
+func (m *AdSharingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdSharingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdSharingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdSharingErrorEnum.Merge(m, src)
+}
+func (m *AdSharingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdSharingErrorEnum.Size(m)
+}
+func (m *AdSharingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdSharingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdSharingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdSharingErrorEnum_AdSharingError", AdSharingErrorEnum_AdSharingError_name, AdSharingErrorEnum_AdSharingError_value)
+	proto.RegisterType((*AdSharingErrorEnum)(nil), "google.ads.googleads.v3.errors.AdSharingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/ad_sharing_error.proto", fileDescriptor_4892a55c96781176)
+}
+
+var fileDescriptor_4892a55c96781176 = []byte{
+	// 360 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xeb, 0x40,
+	0x14, 0x87, 0x6f, 0xd2, 0xcb, 0xbd, 0x30, 0x85, 0x7b, 0x43, 0xee, 0xe6, 0x22, 0xa5, 0x48, 0x1e,
+	0x60, 0xb2, 0x08, 0x6e, 0xc6, 0xd5, 0x69, 0x32, 0xd6, 0x60, 0x9d, 0x84, 0xfc, 0x13, 0x25, 0x30,
+	0x44, 0x53, 0x62, 0xa0, 0xcd, 0x94, 0x4c, 0xed, 0x83, 0xf8, 0x08, 0xee, 0xf4, 0x51, 0x7c, 0x14,
+	0x17, 0x3e, 0x83, 0x24, 0x63, 0x0a, 0x5d, 0xe8, 0x6a, 0x7e, 0x1c, 0xbe, 0xef, 0xcc, 0x39, 0x07,
+	0x9d, 0x54, 0x42, 0x54, 0xab, 0xa5, 0x5d, 0x94, 0xd2, 0x56, 0xb1, 0x4b, 0x3b, 0xc7, 0x5e, 0xb6,
+	0xad, 0x68, 0xa5, 0x5d, 0x94, 0x5c, 0xde, 0x17, 0x6d, 0xdd, 0x54, 0xbc, 0xaf, 0xe0, 0x4d, 0x2b,
+	0xb6, 0xc2, 0x9c, 0x2a, 0x16, 0x17, 0xa5, 0xc4, 0x7b, 0x0d, 0xef, 0x1c, 0xac, 0xb4, 0xa3, 0xc9,
+	0xd0, 0x76, 0x53, 0xdb, 0x45, 0xd3, 0x88, 0x6d, 0xb1, 0xad, 0x45, 0x23, 0x95, 0x6d, 0x3d, 0x6b,
+	0xc8, 0x84, 0x32, 0x56, 0x7d, 0x69, 0x67, 0xd0, 0xe6, 0x61, 0x6d, 0x3d, 0x6a, 0xe8, 0xcf, 0x61,
+	0xd9, 0xfc, 0x8b, 0xc6, 0x29, 0x8b, 0x43, 0xea, 0xfa, 0x67, 0x3e, 0xf5, 0x8c, 0x1f, 0xe6, 0x18,
+	0xfd, 0x4e, 0xd9, 0x05, 0x0b, 0xae, 0x98, 0xa1, 0x99, 0xc7, 0x68, 0x02, 0x1e, 0x9f, 0x47, 0x41,
+	0x1a, 0x72, 0x58, 0x44, 0x14, 0xbc, 0x6b, 0xee, 0x06, 0x2c, 0x01, 0x9f, 0xc5, 0x1c, 0x3c, 0x43,
+	0x37, 0x2d, 0x34, 0xf5, 0x99, 0x1b, 0x5c, 0x86, 0x90, 0xf8, 0xb3, 0x05, 0xe5, 0xe0, 0xf1, 0x94,
+	0x79, 0x34, 0xe2, 0x83, 0x67, 0x8c, 0xcc, 0x09, 0xfa, 0xef, 0x02, 0x63, 0x41, 0xc2, 0xe3, 0x73,
+	0x88, 0x28, 0xf7, 0x19, 0xb8, 0x89, 0x9f, 0x75, 0xb0, 0xf1, 0x73, 0xf6, 0xae, 0x21, 0xeb, 0x4e,
+	0xac, 0xf1, 0xf7, 0x0b, 0xcf, 0xfe, 0x1d, 0x0e, 0x1e, 0x76, 0x7b, 0x86, 0xda, 0x8d, 0xf7, 0xa9,
+	0x55, 0x62, 0x55, 0x34, 0x15, 0x16, 0x6d, 0x65, 0x57, 0xcb, 0xa6, 0xbf, 0xc2, 0x70, 0xee, 0x4d,
+	0x2d, 0xbf, 0xba, 0xfe, 0xa9, 0x7a, 0x9e, 0xf4, 0xd1, 0x1c, 0xe0, 0x45, 0x9f, 0xce, 0x55, 0x33,
+	0x28, 0x25, 0x56, 0xb1, 0x4b, 0x99, 0x83, 0xfb, 0x2f, 0xe5, 0xeb, 0x00, 0xe4, 0x50, 0xca, 0x7c,
+	0x0f, 0xe4, 0x99, 0x93, 0x2b, 0xe0, 0x4d, 0xb7, 0x54, 0x95, 0x10, 0x28, 0x25, 0x21, 0x7b, 0x84,
+	0x90, 0xcc, 0x21, 0x44, 0x41, 0xb7, 0xbf, 0xfa, 0xe9, 0x9c, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x04, 0x28, 0xb3, 0x74, 0x1a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/adx_error.pb.go b/googleapis/ads/googleads/v3/errors/adx_error.pb.go
new file mode 100644
index 0000000..e7c6f84
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/adx_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/adx_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible adx errors.
+type AdxErrorEnum_AdxError int32
+
+const (
+	// Enum unspecified.
+	AdxErrorEnum_UNSPECIFIED AdxErrorEnum_AdxError = 0
+	// The received error code is not known in this version.
+	AdxErrorEnum_UNKNOWN AdxErrorEnum_AdxError = 1
+	// Attempt to use non-AdX feature by AdX customer.
+	AdxErrorEnum_UNSUPPORTED_FEATURE AdxErrorEnum_AdxError = 2
+)
+
+var AdxErrorEnum_AdxError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNSUPPORTED_FEATURE",
+}
+
+var AdxErrorEnum_AdxError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"UNSUPPORTED_FEATURE": 2,
+}
+
+func (x AdxErrorEnum_AdxError) String() string {
+	return proto.EnumName(AdxErrorEnum_AdxError_name, int32(x))
+}
+
+func (AdxErrorEnum_AdxError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8c9a39d67b90bc57, []int{0, 0}
+}
+
+// Container for enum describing possible adx errors.
+type AdxErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdxErrorEnum) Reset()         { *m = AdxErrorEnum{} }
+func (m *AdxErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdxErrorEnum) ProtoMessage()    {}
+func (*AdxErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8c9a39d67b90bc57, []int{0}
+}
+
+func (m *AdxErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdxErrorEnum.Unmarshal(m, b)
+}
+func (m *AdxErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdxErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AdxErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdxErrorEnum.Merge(m, src)
+}
+func (m *AdxErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdxErrorEnum.Size(m)
+}
+func (m *AdxErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdxErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdxErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AdxErrorEnum_AdxError", AdxErrorEnum_AdxError_name, AdxErrorEnum_AdxError_value)
+	proto.RegisterType((*AdxErrorEnum)(nil), "google.ads.googleads.v3.errors.AdxErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/adx_error.proto", fileDescriptor_8c9a39d67b90bc57)
+}
+
+var fileDescriptor_8c9a39d67b90bc57 = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x6d, 0x05, 0x95, 0x4c, 0xb1, 0xd4, 0x83, 0x20, 0xb2, 0x43, 0x1f, 0x20, 0x39, 0xe4,
+	0x16, 0x4f, 0x99, 0xcd, 0xc6, 0x10, 0xba, 0xba, 0xad, 0x15, 0xa4, 0x30, 0xa2, 0x29, 0xa1, 0xb0,
+	0x25, 0xa5, 0xa9, 0x63, 0xcf, 0xe3, 0xd1, 0x47, 0xf1, 0x49, 0xc4, 0xa7, 0x90, 0x36, 0xa6, 0x37,
+	0x3d, 0xe5, 0x97, 0x8f, 0xdf, 0xf7, 0x7d, 0x7f, 0x3e, 0x00, 0xa5, 0xd6, 0x72, 0x5b, 0x22, 0x2e,
+	0x0c, 0xb2, 0xd8, 0xd1, 0x1e, 0xa3, 0xb2, 0x69, 0x74, 0x63, 0x10, 0x17, 0x87, 0x4d, 0x8f, 0xb0,
+	0x6e, 0x74, 0xab, 0xc3, 0xb1, 0x95, 0x20, 0x17, 0x06, 0x0e, 0x3e, 0xdc, 0x63, 0x68, 0xfd, 0x9b,
+	0x5b, 0x37, 0xaf, 0xae, 0x10, 0x57, 0x4a, 0xb7, 0xbc, 0xad, 0xb4, 0x32, 0xb6, 0x3b, 0x7a, 0x04,
+	0xe7, 0x54, 0x1c, 0x58, 0xa7, 0x32, 0xf5, 0xb6, 0x8b, 0x28, 0x38, 0x73, 0xff, 0xf0, 0x12, 0x8c,
+	0xb2, 0x64, 0x95, 0xb2, 0xfb, 0xf9, 0x74, 0xce, 0xe2, 0xe0, 0x28, 0x1c, 0x81, 0xd3, 0x2c, 0x79,
+	0x48, 0x16, 0x4f, 0x49, 0xe0, 0x85, 0xd7, 0xe0, 0x2a, 0x4b, 0x56, 0x59, 0x9a, 0x2e, 0x96, 0x6b,
+	0x16, 0x6f, 0xa6, 0x8c, 0xae, 0xb3, 0x25, 0x0b, 0xfc, 0xc9, 0x97, 0x07, 0xa2, 0x57, 0xbd, 0x83,
+	0xff, 0xe7, 0x9a, 0x5c, 0xb8, 0x3d, 0x69, 0x17, 0x24, 0xf5, 0x9e, 0xe3, 0xdf, 0x06, 0xa9, 0xb7,
+	0x5c, 0x49, 0xa8, 0x1b, 0x89, 0x64, 0xa9, 0xfa, 0x98, 0xee, 0x10, 0x75, 0x65, 0xfe, 0xba, 0xcb,
+	0x9d, 0x7d, 0xde, 0xfd, 0xe3, 0x19, 0xa5, 0x1f, 0xfe, 0x78, 0x66, 0x87, 0x51, 0x61, 0xa0, 0xc5,
+	0x8e, 0x72, 0x0c, 0xfb, 0x95, 0xe6, 0xd3, 0x09, 0x05, 0x15, 0xa6, 0x18, 0x84, 0x22, 0xc7, 0x85,
+	0x15, 0xbe, 0xfd, 0xc8, 0x56, 0x09, 0xa1, 0xc2, 0x10, 0x32, 0x28, 0x84, 0xe4, 0x98, 0x10, 0x2b,
+	0xbd, 0x9c, 0xf4, 0xe9, 0xf0, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0x7e, 0x51, 0x7c, 0xb4,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/asset_error.pb.go b/googleapis/ads/googleads/v3/errors/asset_error.pb.go
new file mode 100644
index 0000000..ec11d82
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/asset_error.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/asset_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible asset errors.
+type AssetErrorEnum_AssetError int32
+
+const (
+	// Enum unspecified.
+	AssetErrorEnum_UNSPECIFIED AssetErrorEnum_AssetError = 0
+	// The received error code is not known in this version.
+	AssetErrorEnum_UNKNOWN AssetErrorEnum_AssetError = 1
+	// The customer is not whitelisted for this asset type.
+	AssetErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_ASSET_TYPE AssetErrorEnum_AssetError = 2
+	// Assets are duplicated across operations.
+	AssetErrorEnum_DUPLICATE_ASSET AssetErrorEnum_AssetError = 3
+	// The asset name is duplicated, either across operations or with an
+	// existing asset.
+	AssetErrorEnum_DUPLICATE_ASSET_NAME AssetErrorEnum_AssetError = 4
+	// The Asset.asset_data oneof is empty.
+	AssetErrorEnum_ASSET_DATA_IS_MISSING AssetErrorEnum_AssetError = 5
+	// The asset has a name which is different from an existing duplicate that
+	// represents the same content.
+	AssetErrorEnum_CANNOT_MODIFY_ASSET_NAME AssetErrorEnum_AssetError = 6
+)
+
+var AssetErrorEnum_AssetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOMER_NOT_WHITELISTED_FOR_ASSET_TYPE",
+	3: "DUPLICATE_ASSET",
+	4: "DUPLICATE_ASSET_NAME",
+	5: "ASSET_DATA_IS_MISSING",
+	6: "CANNOT_MODIFY_ASSET_NAME",
+}
+
+var AssetErrorEnum_AssetError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CUSTOMER_NOT_WHITELISTED_FOR_ASSET_TYPE": 2,
+	"DUPLICATE_ASSET":                         3,
+	"DUPLICATE_ASSET_NAME":                    4,
+	"ASSET_DATA_IS_MISSING":                   5,
+	"CANNOT_MODIFY_ASSET_NAME":                6,
+}
+
+func (x AssetErrorEnum_AssetError) String() string {
+	return proto.EnumName(AssetErrorEnum_AssetError_name, int32(x))
+}
+
+func (AssetErrorEnum_AssetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a6381eb5f1114281, []int{0, 0}
+}
+
+// Container for enum describing possible asset errors.
+type AssetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AssetErrorEnum) Reset()         { *m = AssetErrorEnum{} }
+func (m *AssetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AssetErrorEnum) ProtoMessage()    {}
+func (*AssetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a6381eb5f1114281, []int{0}
+}
+
+func (m *AssetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AssetErrorEnum.Unmarshal(m, b)
+}
+func (m *AssetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AssetErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AssetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AssetErrorEnum.Merge(m, src)
+}
+func (m *AssetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AssetErrorEnum.Size(m)
+}
+func (m *AssetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AssetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AssetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AssetErrorEnum_AssetError", AssetErrorEnum_AssetError_name, AssetErrorEnum_AssetError_value)
+	proto.RegisterType((*AssetErrorEnum)(nil), "google.ads.googleads.v3.errors.AssetErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/asset_error.proto", fileDescriptor_a6381eb5f1114281)
+}
+
+var fileDescriptor_a6381eb5f1114281 = []byte{
+	// 380 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x8b, 0xd4, 0x30,
+	0x14, 0xc7, 0x6d, 0x57, 0x57, 0xc8, 0x82, 0x53, 0xa2, 0xc2, 0x2a, 0xcb, 0x1e, 0x7a, 0xf1, 0x20,
+	0xa4, 0x42, 0x6f, 0xf1, 0x94, 0x6d, 0x33, 0x63, 0x70, 0x9b, 0x96, 0x49, 0x3a, 0xc3, 0x48, 0x21,
+	0x54, 0x5b, 0xca, 0xc0, 0x4c, 0x33, 0x34, 0x75, 0x3e, 0x90, 0x47, 0xbf, 0x84, 0x77, 0x8f, 0x7e,
+	0x8c, 0xf9, 0x14, 0xd2, 0xc6, 0x99, 0x11, 0xc1, 0x3d, 0xe5, 0xff, 0x5e, 0x7e, 0xff, 0xf7, 0x92,
+	0xf7, 0xc0, 0xbb, 0x46, 0xeb, 0x66, 0x53, 0x07, 0x65, 0x65, 0x02, 0x2b, 0x07, 0xb5, 0x0f, 0x83,
+	0xba, 0xeb, 0x74, 0x67, 0x82, 0xd2, 0x98, 0xba, 0x57, 0x63, 0x80, 0x76, 0x9d, 0xee, 0x35, 0xbc,
+	0xb5, 0x18, 0x2a, 0x2b, 0x83, 0x4e, 0x0e, 0xb4, 0x0f, 0x91, 0x75, 0xbc, 0xbe, 0x39, 0x56, 0xdc,
+	0xad, 0x83, 0xb2, 0x6d, 0x75, 0x5f, 0xf6, 0x6b, 0xdd, 0x1a, 0xeb, 0xf6, 0x7f, 0x39, 0xe0, 0x19,
+	0x19, 0x6a, 0xd2, 0x81, 0xa6, 0xed, 0xd7, 0xad, 0xff, 0xc3, 0x01, 0xe0, 0x9c, 0x82, 0x13, 0x70,
+	0x95, 0x73, 0x91, 0xd1, 0x88, 0x4d, 0x19, 0x8d, 0xbd, 0x47, 0xf0, 0x0a, 0x3c, 0xcd, 0xf9, 0x47,
+	0x9e, 0x2e, 0xb9, 0xe7, 0xc0, 0xb7, 0xe0, 0x4d, 0x94, 0x0b, 0x99, 0x26, 0x74, 0xae, 0x78, 0x2a,
+	0xd5, 0xf2, 0x03, 0x93, 0xf4, 0x9e, 0x09, 0x49, 0x63, 0x35, 0x4d, 0xe7, 0x8a, 0x08, 0x41, 0xa5,
+	0x92, 0xab, 0x8c, 0x7a, 0x2e, 0x7c, 0x0e, 0x26, 0x71, 0x9e, 0xdd, 0xb3, 0x88, 0x48, 0x6a, 0x6f,
+	0xbc, 0x0b, 0x78, 0x0d, 0x5e, 0xfc, 0x93, 0x54, 0x9c, 0x24, 0xd4, 0x7b, 0x0c, 0x5f, 0x81, 0x97,
+	0x36, 0x8e, 0x89, 0x24, 0x8a, 0x09, 0x95, 0x30, 0x21, 0x18, 0x9f, 0x79, 0x4f, 0xe0, 0x0d, 0xb8,
+	0x8e, 0x08, 0x1f, 0x1a, 0x26, 0x69, 0xcc, 0xa6, 0xab, 0xbf, 0x8d, 0x97, 0x77, 0x07, 0x07, 0xf8,
+	0x5f, 0xf4, 0x16, 0x3d, 0x3c, 0x99, 0xbb, 0xc9, 0xf9, 0x97, 0xd9, 0x30, 0x8c, 0xcc, 0xf9, 0x14,
+	0xff, 0xb1, 0x34, 0x7a, 0x53, 0xb6, 0x0d, 0xd2, 0x5d, 0x13, 0x34, 0x75, 0x3b, 0x8e, 0xea, 0xb8,
+	0x8e, 0xdd, 0xda, 0xfc, 0x6f, 0x3b, 0xef, 0xed, 0xf1, 0xcd, 0xbd, 0x98, 0x11, 0xf2, 0xdd, 0xbd,
+	0x9d, 0xd9, 0x62, 0xa4, 0x32, 0xc8, 0xca, 0x41, 0x2d, 0x42, 0x34, 0xb6, 0x34, 0x3f, 0x8f, 0x40,
+	0x41, 0x2a, 0x53, 0x9c, 0x80, 0x62, 0x11, 0x16, 0x16, 0x38, 0xb8, 0xbe, 0xcd, 0x62, 0x4c, 0x2a,
+	0x83, 0xf1, 0x09, 0xc1, 0x78, 0x11, 0x62, 0x6c, 0xa1, 0xcf, 0x97, 0xe3, 0xeb, 0xc2, 0xdf, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0xed, 0x6e, 0xea, 0x21, 0x3a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/authentication_error.pb.go b/googleapis/ads/googleads/v3/errors/authentication_error.pb.go
new file mode 100644
index 0000000..db34e84
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/authentication_error.pb.go
@@ -0,0 +1,208 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/authentication_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible authentication errors.
+type AuthenticationErrorEnum_AuthenticationError int32
+
+const (
+	// Enum unspecified.
+	AuthenticationErrorEnum_UNSPECIFIED AuthenticationErrorEnum_AuthenticationError = 0
+	// The received error code is not known in this version.
+	AuthenticationErrorEnum_UNKNOWN AuthenticationErrorEnum_AuthenticationError = 1
+	// Authentication of the request failed.
+	AuthenticationErrorEnum_AUTHENTICATION_ERROR AuthenticationErrorEnum_AuthenticationError = 2
+	// Client Customer Id is not a number.
+	AuthenticationErrorEnum_CLIENT_CUSTOMER_ID_INVALID AuthenticationErrorEnum_AuthenticationError = 5
+	// No customer found for the provided customer id.
+	AuthenticationErrorEnum_CUSTOMER_NOT_FOUND AuthenticationErrorEnum_AuthenticationError = 8
+	// Client's Google Account is deleted.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_DELETED AuthenticationErrorEnum_AuthenticationError = 9
+	// Google account login token in the cookie is invalid.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_COOKIE_INVALID AuthenticationErrorEnum_AuthenticationError = 10
+	// A problem occurred during Google account authentication.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_AUTHENTICATION_FAILED AuthenticationErrorEnum_AuthenticationError = 25
+	// The user in the google account login token does not match the UserId in
+	// the cookie.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH AuthenticationErrorEnum_AuthenticationError = 12
+	// Login cookie is required for authentication.
+	AuthenticationErrorEnum_LOGIN_COOKIE_REQUIRED AuthenticationErrorEnum_AuthenticationError = 13
+	// User in the cookie is not a valid Ads user.
+	AuthenticationErrorEnum_NOT_ADS_USER AuthenticationErrorEnum_AuthenticationError = 14
+	// Oauth token in the header is not valid.
+	AuthenticationErrorEnum_OAUTH_TOKEN_INVALID AuthenticationErrorEnum_AuthenticationError = 15
+	// Oauth token in the header has expired.
+	AuthenticationErrorEnum_OAUTH_TOKEN_EXPIRED AuthenticationErrorEnum_AuthenticationError = 16
+	// Oauth token in the header has been disabled.
+	AuthenticationErrorEnum_OAUTH_TOKEN_DISABLED AuthenticationErrorEnum_AuthenticationError = 17
+	// Oauth token in the header has been revoked.
+	AuthenticationErrorEnum_OAUTH_TOKEN_REVOKED AuthenticationErrorEnum_AuthenticationError = 18
+	// Oauth token HTTP header is malformed.
+	AuthenticationErrorEnum_OAUTH_TOKEN_HEADER_INVALID AuthenticationErrorEnum_AuthenticationError = 19
+	// Login cookie is not valid.
+	AuthenticationErrorEnum_LOGIN_COOKIE_INVALID AuthenticationErrorEnum_AuthenticationError = 20
+	// User Id in the header is not a valid id.
+	AuthenticationErrorEnum_USER_ID_INVALID AuthenticationErrorEnum_AuthenticationError = 22
+	// An account administrator changed this account's authentication settings.
+	// To access this Google Ads account, enable 2-Step Verification in your
+	// Google account at https://www.google.com/landing/2step.
+	AuthenticationErrorEnum_TWO_STEP_VERIFICATION_NOT_ENROLLED AuthenticationErrorEnum_AuthenticationError = 23
+	// An account administrator changed this account's authentication settings.
+	// To access this Google Ads account, enable Advanced Protection in your
+	// Google account at https://landing.google.com/advancedprotection.
+	AuthenticationErrorEnum_ADVANCED_PROTECTION_NOT_ENROLLED AuthenticationErrorEnum_AuthenticationError = 24
+)
+
+var AuthenticationErrorEnum_AuthenticationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "AUTHENTICATION_ERROR",
+	5:  "CLIENT_CUSTOMER_ID_INVALID",
+	8:  "CUSTOMER_NOT_FOUND",
+	9:  "GOOGLE_ACCOUNT_DELETED",
+	10: "GOOGLE_ACCOUNT_COOKIE_INVALID",
+	25: "GOOGLE_ACCOUNT_AUTHENTICATION_FAILED",
+	12: "GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH",
+	13: "LOGIN_COOKIE_REQUIRED",
+	14: "NOT_ADS_USER",
+	15: "OAUTH_TOKEN_INVALID",
+	16: "OAUTH_TOKEN_EXPIRED",
+	17: "OAUTH_TOKEN_DISABLED",
+	18: "OAUTH_TOKEN_REVOKED",
+	19: "OAUTH_TOKEN_HEADER_INVALID",
+	20: "LOGIN_COOKIE_INVALID",
+	22: "USER_ID_INVALID",
+	23: "TWO_STEP_VERIFICATION_NOT_ENROLLED",
+	24: "ADVANCED_PROTECTION_NOT_ENROLLED",
+}
+
+var AuthenticationErrorEnum_AuthenticationError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"AUTHENTICATION_ERROR":                      2,
+	"CLIENT_CUSTOMER_ID_INVALID":                5,
+	"CUSTOMER_NOT_FOUND":                        8,
+	"GOOGLE_ACCOUNT_DELETED":                    9,
+	"GOOGLE_ACCOUNT_COOKIE_INVALID":             10,
+	"GOOGLE_ACCOUNT_AUTHENTICATION_FAILED":      25,
+	"GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH": 12,
+	"LOGIN_COOKIE_REQUIRED":                     13,
+	"NOT_ADS_USER":                              14,
+	"OAUTH_TOKEN_INVALID":                       15,
+	"OAUTH_TOKEN_EXPIRED":                       16,
+	"OAUTH_TOKEN_DISABLED":                      17,
+	"OAUTH_TOKEN_REVOKED":                       18,
+	"OAUTH_TOKEN_HEADER_INVALID":                19,
+	"LOGIN_COOKIE_INVALID":                      20,
+	"USER_ID_INVALID":                           22,
+	"TWO_STEP_VERIFICATION_NOT_ENROLLED":        23,
+	"ADVANCED_PROTECTION_NOT_ENROLLED":          24,
+}
+
+func (x AuthenticationErrorEnum_AuthenticationError) String() string {
+	return proto.EnumName(AuthenticationErrorEnum_AuthenticationError_name, int32(x))
+}
+
+func (AuthenticationErrorEnum_AuthenticationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4eadbda3d9e23838, []int{0, 0}
+}
+
+// Container for enum describing possible authentication errors.
+type AuthenticationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AuthenticationErrorEnum) Reset()         { *m = AuthenticationErrorEnum{} }
+func (m *AuthenticationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AuthenticationErrorEnum) ProtoMessage()    {}
+func (*AuthenticationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4eadbda3d9e23838, []int{0}
+}
+
+func (m *AuthenticationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AuthenticationErrorEnum.Unmarshal(m, b)
+}
+func (m *AuthenticationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AuthenticationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AuthenticationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AuthenticationErrorEnum.Merge(m, src)
+}
+func (m *AuthenticationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AuthenticationErrorEnum.Size(m)
+}
+func (m *AuthenticationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AuthenticationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AuthenticationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AuthenticationErrorEnum_AuthenticationError", AuthenticationErrorEnum_AuthenticationError_name, AuthenticationErrorEnum_AuthenticationError_value)
+	proto.RegisterType((*AuthenticationErrorEnum)(nil), "google.ads.googleads.v3.errors.AuthenticationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/authentication_error.proto", fileDescriptor_4eadbda3d9e23838)
+}
+
+var fileDescriptor_4eadbda3d9e23838 = []byte{
+	// 560 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xdd, 0x6e, 0xd3, 0x3e,
+	0x14, 0xff, 0xaf, 0xff, 0xf1, 0xe5, 0x0d, 0x66, 0xdc, 0xb1, 0x2f, 0xc1, 0x04, 0xd5, 0x84, 0xe0,
+	0x82, 0xf4, 0x22, 0x57, 0x84, 0x2b, 0x2f, 0x3e, 0xed, 0xac, 0x66, 0x76, 0x48, 0x9c, 0x0c, 0xa1,
+	0x4a, 0x56, 0x58, 0xab, 0x50, 0x69, 0x4b, 0xa6, 0xa6, 0xdb, 0x03, 0x71, 0xc9, 0xa3, 0x20, 0x1e,
+	0x04, 0x71, 0xcb, 0x0b, 0x20, 0x27, 0x4b, 0xd4, 0x85, 0xc1, 0x55, 0x4f, 0xfd, 0xfb, 0x38, 0x3f,
+	0x9f, 0x1c, 0xa3, 0xb7, 0x69, 0x9e, 0xa7, 0x67, 0xd3, 0x7e, 0x32, 0x29, 0xfa, 0x55, 0x69, 0xaa,
+	0x2b, 0xbb, 0x3f, 0x9d, 0xcf, 0xf3, 0x79, 0xd1, 0x4f, 0x2e, 0x17, 0x9f, 0xa7, 0xd9, 0x62, 0x76,
+	0x9a, 0x2c, 0x66, 0x79, 0xa6, 0xcb, 0x53, 0xeb, 0x62, 0x9e, 0x2f, 0x72, 0xb2, 0x5f, 0xf1, 0xad,
+	0x64, 0x52, 0x58, 0x8d, 0xd4, 0xba, 0xb2, 0xad, 0x4a, 0xba, 0xf7, 0xb4, 0xb6, 0xbe, 0x98, 0xf5,
+	0x93, 0x2c, 0xcb, 0x17, 0xa5, 0x45, 0x51, 0xa9, 0x7b, 0x3f, 0x56, 0xd1, 0x36, 0xbd, 0x61, 0x0e,
+	0x46, 0x06, 0xd9, 0xe5, 0x79, 0xef, 0xfb, 0x2a, 0xea, 0xde, 0x82, 0x91, 0x0d, 0xb4, 0x16, 0x89,
+	0xd0, 0x07, 0x97, 0x0f, 0x38, 0x30, 0xfc, 0x1f, 0x59, 0x43, 0xf7, 0x22, 0x31, 0x12, 0xf2, 0x44,
+	0xe0, 0x15, 0xb2, 0x83, 0x36, 0x69, 0xa4, 0x8e, 0x40, 0x28, 0xee, 0x52, 0xc5, 0xa5, 0xd0, 0x10,
+	0x04, 0x32, 0xc0, 0x1d, 0xb2, 0x8f, 0xf6, 0x5c, 0x8f, 0x83, 0x50, 0xda, 0x8d, 0x42, 0x25, 0x8f,
+	0x21, 0xd0, 0x9c, 0x69, 0x2e, 0x62, 0xea, 0x71, 0x86, 0xef, 0x90, 0x2d, 0x44, 0x1a, 0x40, 0x48,
+	0xa5, 0x07, 0x32, 0x12, 0x0c, 0xdf, 0x27, 0x7b, 0x68, 0x6b, 0x28, 0xe5, 0xd0, 0x03, 0x4d, 0x5d,
+	0x57, 0x46, 0x42, 0x69, 0x06, 0x1e, 0x28, 0x60, 0xf8, 0x01, 0x79, 0x81, 0x9e, 0xb5, 0x30, 0x57,
+	0xca, 0x11, 0x87, 0xc6, 0x16, 0x91, 0x57, 0xe8, 0xa0, 0x45, 0x69, 0xe5, 0x1b, 0x50, 0xee, 0x01,
+	0xc3, 0xbb, 0xe4, 0x0d, 0x7a, 0xdd, 0x62, 0x46, 0x21, 0x04, 0x9a, 0x0a, 0xa6, 0x29, 0x0b, 0xab,
+	0x3f, 0xc7, 0x3c, 0x3c, 0xa6, 0xca, 0x3d, 0xc2, 0xeb, 0x64, 0x17, 0x3d, 0xf1, 0xe4, 0x90, 0x8b,
+	0xba, 0x65, 0x00, 0xef, 0x23, 0x1e, 0x00, 0xc3, 0x0f, 0x09, 0x46, 0xeb, 0xe6, 0x06, 0xb5, 0x0a,
+	0x3f, 0x22, 0xdb, 0xa8, 0x2b, 0x4d, 0x5f, 0xad, 0xe4, 0x08, 0x44, 0x13, 0x6f, 0xa3, 0x0d, 0xc0,
+	0x07, 0xbf, 0xf4, 0xc0, 0x66, 0x90, 0xcb, 0x00, 0xe3, 0x21, 0x3d, 0x34, 0x39, 0x1f, 0xb7, 0x25,
+	0x01, 0xc4, 0x72, 0x04, 0x0c, 0x13, 0x33, 0xe1, 0x65, 0xe0, 0x08, 0x28, 0x33, 0x43, 0xbe, 0xee,
+	0xd5, 0x35, 0x96, 0x37, 0x12, 0xd7, 0xc8, 0x26, 0xe9, 0xa2, 0x8d, 0xf2, 0x7a, 0x4b, 0x1f, 0x64,
+	0x8b, 0xbc, 0x44, 0x3d, 0x75, 0x22, 0x75, 0xa8, 0xc0, 0xd7, 0x31, 0x04, 0x7c, 0x50, 0x4f, 0xcc,
+	0xdc, 0x0d, 0x44, 0x20, 0x3d, 0x93, 0x67, 0x9b, 0x1c, 0xa0, 0xe7, 0x94, 0xc5, 0x54, 0xb8, 0xc0,
+	0xb4, 0x1f, 0x48, 0x05, 0xee, 0x9f, 0xac, 0x9d, 0xc3, 0x5f, 0x2b, 0xa8, 0x77, 0x9a, 0x9f, 0x5b,
+	0xff, 0xde, 0xd7, 0xc3, 0x9d, 0x5b, 0x56, 0xce, 0x37, 0xbb, 0xea, 0xaf, 0x7c, 0x64, 0xd7, 0xda,
+	0x34, 0x3f, 0x4b, 0xb2, 0xd4, 0xca, 0xe7, 0x69, 0x3f, 0x9d, 0x66, 0xe5, 0x26, 0xd7, 0xcf, 0xe6,
+	0x62, 0x56, 0xfc, 0xed, 0x15, 0xbd, 0xab, 0x7e, 0xbe, 0x74, 0xfe, 0x1f, 0x52, 0xfa, 0xb5, 0xb3,
+	0x3f, 0xac, 0xcc, 0xe8, 0xa4, 0xb0, 0xaa, 0xd2, 0x54, 0xb1, 0x6d, 0x95, 0x2d, 0x8b, 0x6f, 0x35,
+	0x61, 0x4c, 0x27, 0xc5, 0xb8, 0x21, 0x8c, 0x63, 0x7b, 0x5c, 0x11, 0x7e, 0x76, 0x7a, 0xd5, 0xa9,
+	0xe3, 0xd0, 0x49, 0xe1, 0x38, 0x0d, 0xc5, 0x71, 0x62, 0xdb, 0x71, 0x2a, 0xd2, 0xa7, 0xbb, 0x65,
+	0x3a, 0xfb, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0x82, 0x1b, 0x1f, 0xe2, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/authorization_error.pb.go b/googleapis/ads/googleads/v3/errors/authorization_error.pb.go
new file mode 100644
index 0000000..690fd36
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/authorization_error.pb.go
@@ -0,0 +1,184 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/authorization_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible authorization errors.
+type AuthorizationErrorEnum_AuthorizationError int32
+
+const (
+	// Enum unspecified.
+	AuthorizationErrorEnum_UNSPECIFIED AuthorizationErrorEnum_AuthorizationError = 0
+	// The received error code is not known in this version.
+	AuthorizationErrorEnum_UNKNOWN AuthorizationErrorEnum_AuthorizationError = 1
+	// User doesn't have permission to access customer. Note: If you're
+	// accessing a client customer, the manager's customer ID must be set in the
+	// `login-customer-id` header. Learn more at
+	// https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid
+	AuthorizationErrorEnum_USER_PERMISSION_DENIED AuthorizationErrorEnum_AuthorizationError = 2
+	// The developer token is not whitelisted.
+	AuthorizationErrorEnum_DEVELOPER_TOKEN_NOT_WHITELISTED AuthorizationErrorEnum_AuthorizationError = 3
+	// The developer token is not allowed with the project sent in the request.
+	AuthorizationErrorEnum_DEVELOPER_TOKEN_PROHIBITED AuthorizationErrorEnum_AuthorizationError = 4
+	// The Google Cloud project sent in the request does not have permission to
+	// access the api.
+	AuthorizationErrorEnum_PROJECT_DISABLED AuthorizationErrorEnum_AuthorizationError = 5
+	// Authorization of the client failed.
+	AuthorizationErrorEnum_AUTHORIZATION_ERROR AuthorizationErrorEnum_AuthorizationError = 6
+	// The user does not have permission to perform this action
+	// (e.g., ADD, UPDATE, REMOVE) on the resource or call a method.
+	AuthorizationErrorEnum_ACTION_NOT_PERMITTED AuthorizationErrorEnum_AuthorizationError = 7
+	// Signup not complete.
+	AuthorizationErrorEnum_INCOMPLETE_SIGNUP AuthorizationErrorEnum_AuthorizationError = 8
+	// The customer can't be used because it isn't enabled.
+	AuthorizationErrorEnum_CUSTOMER_NOT_ENABLED AuthorizationErrorEnum_AuthorizationError = 24
+	// The developer must sign the terms of service. They can be found here:
+	// ads.google.com/aw/apicenter
+	AuthorizationErrorEnum_MISSING_TOS AuthorizationErrorEnum_AuthorizationError = 9
+	// The developer token is not approved. Non-approved developer tokens can
+	// only be used with test accounts.
+	AuthorizationErrorEnum_DEVELOPER_TOKEN_NOT_APPROVED AuthorizationErrorEnum_AuthorizationError = 10
+	// The login customer specified does not have access to the account
+	// specified, so the request is invalid.
+	AuthorizationErrorEnum_INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION AuthorizationErrorEnum_AuthorizationError = 11
+	// The developer specified does not have access to the service.
+	AuthorizationErrorEnum_SERVICE_ACCESS_DENIED AuthorizationErrorEnum_AuthorizationError = 12
+)
+
+var AuthorizationErrorEnum_AuthorizationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "USER_PERMISSION_DENIED",
+	3:  "DEVELOPER_TOKEN_NOT_WHITELISTED",
+	4:  "DEVELOPER_TOKEN_PROHIBITED",
+	5:  "PROJECT_DISABLED",
+	6:  "AUTHORIZATION_ERROR",
+	7:  "ACTION_NOT_PERMITTED",
+	8:  "INCOMPLETE_SIGNUP",
+	24: "CUSTOMER_NOT_ENABLED",
+	9:  "MISSING_TOS",
+	10: "DEVELOPER_TOKEN_NOT_APPROVED",
+	11: "INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION",
+	12: "SERVICE_ACCESS_DENIED",
+}
+
+var AuthorizationErrorEnum_AuthorizationError_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"USER_PERMISSION_DENIED":          2,
+	"DEVELOPER_TOKEN_NOT_WHITELISTED": 3,
+	"DEVELOPER_TOKEN_PROHIBITED":      4,
+	"PROJECT_DISABLED":                5,
+	"AUTHORIZATION_ERROR":             6,
+	"ACTION_NOT_PERMITTED":            7,
+	"INCOMPLETE_SIGNUP":               8,
+	"CUSTOMER_NOT_ENABLED":            24,
+	"MISSING_TOS":                     9,
+	"DEVELOPER_TOKEN_NOT_APPROVED":    10,
+	"INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION": 11,
+	"SERVICE_ACCESS_DENIED": 12,
+}
+
+func (x AuthorizationErrorEnum_AuthorizationError) String() string {
+	return proto.EnumName(AuthorizationErrorEnum_AuthorizationError_name, int32(x))
+}
+
+func (AuthorizationErrorEnum_AuthorizationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_92d97e48ae8e8866, []int{0, 0}
+}
+
+// Container for enum describing possible authorization errors.
+type AuthorizationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AuthorizationErrorEnum) Reset()         { *m = AuthorizationErrorEnum{} }
+func (m *AuthorizationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AuthorizationErrorEnum) ProtoMessage()    {}
+func (*AuthorizationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_92d97e48ae8e8866, []int{0}
+}
+
+func (m *AuthorizationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AuthorizationErrorEnum.Unmarshal(m, b)
+}
+func (m *AuthorizationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AuthorizationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *AuthorizationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AuthorizationErrorEnum.Merge(m, src)
+}
+func (m *AuthorizationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AuthorizationErrorEnum.Size(m)
+}
+func (m *AuthorizationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AuthorizationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AuthorizationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.AuthorizationErrorEnum_AuthorizationError", AuthorizationErrorEnum_AuthorizationError_name, AuthorizationErrorEnum_AuthorizationError_value)
+	proto.RegisterType((*AuthorizationErrorEnum)(nil), "google.ads.googleads.v3.errors.AuthorizationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/authorization_error.proto", fileDescriptor_92d97e48ae8e8866)
+}
+
+var fileDescriptor_92d97e48ae8e8866 = []byte{
+	// 507 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x6e, 0xd3, 0x40,
+	0x10, 0xc6, 0x69, 0x02, 0x2d, 0x6c, 0x90, 0x30, 0x4b, 0xff, 0x11, 0x55, 0x01, 0x85, 0xbb, 0x7d,
+	0xf0, 0x05, 0x8c, 0x38, 0x6c, 0xec, 0x21, 0x59, 0xea, 0xec, 0x5a, 0xbb, 0xb6, 0x2b, 0x55, 0x91,
+	0x56, 0x86, 0x44, 0x26, 0x52, 0x6b, 0x47, 0x76, 0xda, 0x03, 0x8f, 0xc2, 0x91, 0x23, 0x77, 0x5e,
+	0x82, 0x47, 0xe1, 0xc8, 0x13, 0xa0, 0xdd, 0x25, 0x51, 0x45, 0x81, 0x93, 0x47, 0xb3, 0xbf, 0xef,
+	0x9b, 0x19, 0xcf, 0xa0, 0x97, 0x65, 0x5d, 0x97, 0x17, 0x0b, 0xaf, 0x98, 0xb7, 0x9e, 0x0d, 0x75,
+	0x74, 0xed, 0x7b, 0x8b, 0xa6, 0xa9, 0x9b, 0xd6, 0x2b, 0xae, 0xd6, 0x1f, 0xeb, 0x66, 0xf9, 0xa9,
+	0x58, 0x2f, 0xeb, 0x4a, 0x99, 0xa4, 0xbb, 0x6a, 0xea, 0x75, 0x8d, 0x07, 0x16, 0x77, 0x8b, 0x79,
+	0xeb, 0x6e, 0x95, 0xee, 0xb5, 0xef, 0x5a, 0x65, 0xff, 0x64, 0xe3, 0xbc, 0x5a, 0x7a, 0x45, 0x55,
+	0xd5, 0x6b, 0x63, 0xd1, 0x5a, 0xf5, 0xf0, 0x5b, 0x17, 0x1d, 0x92, 0x9b, 0xde, 0xa0, 0x55, 0x50,
+	0x5d, 0x5d, 0x0e, 0x3f, 0x77, 0x11, 0xbe, 0xfd, 0x84, 0x1f, 0xa1, 0x5e, 0xc6, 0x64, 0x02, 0x21,
+	0x7d, 0x4b, 0x21, 0x72, 0xee, 0xe0, 0x1e, 0xda, 0xcb, 0xd8, 0x29, 0xe3, 0x67, 0xcc, 0xd9, 0xc1,
+	0x7d, 0x74, 0x98, 0x49, 0x10, 0x2a, 0x01, 0x31, 0xa5, 0x52, 0x52, 0xce, 0x54, 0x04, 0x4c, 0x83,
+	0x1d, 0xfc, 0x02, 0x3d, 0x8b, 0x20, 0x87, 0x98, 0x27, 0x20, 0x54, 0xca, 0x4f, 0x81, 0x29, 0xc6,
+	0x53, 0x75, 0x36, 0xa1, 0x29, 0xc4, 0x54, 0xa6, 0x10, 0x39, 0x5d, 0x3c, 0x40, 0xfd, 0x3f, 0xa1,
+	0x44, 0xf0, 0x09, 0x1d, 0x51, 0xfd, 0x7e, 0x17, 0xef, 0x23, 0x27, 0x11, 0xfc, 0x1d, 0x84, 0xa9,
+	0x8a, 0xa8, 0x24, 0xa3, 0x18, 0x22, 0xe7, 0x1e, 0x3e, 0x42, 0x4f, 0x48, 0x96, 0x4e, 0xb8, 0xa0,
+	0xe7, 0x24, 0xd5, 0x45, 0x41, 0x08, 0x2e, 0x9c, 0x5d, 0x7c, 0x8c, 0xf6, 0x49, 0x68, 0x32, 0xba,
+	0x94, 0xe9, 0x2a, 0xd5, 0x46, 0x7b, 0xf8, 0x00, 0x3d, 0xa6, 0x2c, 0xe4, 0xd3, 0x24, 0x86, 0x14,
+	0x94, 0xa4, 0x63, 0x96, 0x25, 0xce, 0x7d, 0x2d, 0x08, 0x33, 0x99, 0xf2, 0x29, 0x08, 0x23, 0x01,
+	0x66, 0x6b, 0x1c, 0xeb, 0xc1, 0xcd, 0x48, 0x6c, 0xac, 0x52, 0x2e, 0x9d, 0x07, 0xf8, 0x39, 0x3a,
+	0xf9, 0xdb, 0x3c, 0x24, 0x49, 0x04, 0xcf, 0x21, 0x72, 0x10, 0x7e, 0x83, 0x5e, 0x51, 0x96, 0x93,
+	0x98, 0x46, 0x2a, 0xe6, 0x63, 0xca, 0xd4, 0xd6, 0x9a, 0x46, 0x4a, 0x82, 0xc8, 0xb5, 0xd9, 0xcd,
+	0x5c, 0xc8, 0xa7, 0x23, 0xca, 0xcc, 0x08, 0x4e, 0x0f, 0x3f, 0x45, 0x07, 0x06, 0x0a, 0x41, 0x91,
+	0x30, 0x04, 0x29, 0x37, 0xff, 0xf2, 0xe1, 0xe8, 0xe7, 0x0e, 0x1a, 0x7e, 0xa8, 0x2f, 0xdd, 0xff,
+	0x2f, 0x7f, 0x74, 0x74, 0x7b, 0x81, 0x89, 0xde, 0x7b, 0xb2, 0x73, 0x1e, 0xfd, 0x96, 0x96, 0xf5,
+	0x45, 0x51, 0x95, 0x6e, 0xdd, 0x94, 0x5e, 0xb9, 0xa8, 0xcc, 0x55, 0x6c, 0x2e, 0x70, 0xb5, 0x6c,
+	0xff, 0x75, 0x90, 0xaf, 0xed, 0xe7, 0x4b, 0xa7, 0x3b, 0x26, 0xe4, 0x6b, 0x67, 0x30, 0xb6, 0x66,
+	0x64, 0xde, 0xba, 0x36, 0xd4, 0x51, 0xee, 0xbb, 0xa6, 0x64, 0xfb, 0x7d, 0x03, 0xcc, 0xc8, 0xbc,
+	0x9d, 0x6d, 0x81, 0x59, 0xee, 0xcf, 0x2c, 0xf0, 0xa3, 0x33, 0xb4, 0xd9, 0x20, 0x20, 0xf3, 0x36,
+	0x08, 0xb6, 0x48, 0x10, 0xe4, 0x7e, 0x10, 0x58, 0xe8, 0xfd, 0xae, 0xe9, 0xce, 0xff, 0x15, 0x00,
+	0x00, 0xff, 0xff, 0x81, 0x68, 0xa4, 0x26, 0x2d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/bidding_error.pb.go b/googleapis/ads/googleads/v3/errors/bidding_error.pb.go
new file mode 100644
index 0000000..284dfea
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/bidding_error.pb.go
@@ -0,0 +1,245 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/bidding_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible bidding errors.
+type BiddingErrorEnum_BiddingError int32
+
+const (
+	// Enum unspecified.
+	BiddingErrorEnum_UNSPECIFIED BiddingErrorEnum_BiddingError = 0
+	// The received error code is not known in this version.
+	BiddingErrorEnum_UNKNOWN BiddingErrorEnum_BiddingError = 1
+	// Cannot transition to new bidding strategy.
+	BiddingErrorEnum_BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED BiddingErrorEnum_BiddingError = 2
+	// Cannot attach bidding strategy to campaign.
+	BiddingErrorEnum_CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN BiddingErrorEnum_BiddingError = 7
+	// Bidding strategy is not supported or cannot be used as anonymous.
+	BiddingErrorEnum_INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE BiddingErrorEnum_BiddingError = 10
+	// The type does not match the named strategy's type.
+	BiddingErrorEnum_INVALID_BIDDING_STRATEGY_TYPE BiddingErrorEnum_BiddingError = 14
+	// The bid is invalid.
+	BiddingErrorEnum_INVALID_BID BiddingErrorEnum_BiddingError = 17
+	// Bidding strategy is not available for the account type.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE BiddingErrorEnum_BiddingError = 18
+	// Conversion tracking is not enabled for the campaign for VBB transition.
+	BiddingErrorEnum_CONVERSION_TRACKING_NOT_ENABLED BiddingErrorEnum_BiddingError = 19
+	// Not enough conversions tracked for VBB transitions.
+	BiddingErrorEnum_NOT_ENOUGH_CONVERSIONS BiddingErrorEnum_BiddingError = 20
+	// Campaign can not be created with given bidding strategy. It can be
+	// transitioned to the strategy, once eligible.
+	BiddingErrorEnum_CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY BiddingErrorEnum_BiddingError = 21
+	// Cannot target content network only as campaign uses Page One Promoted
+	// bidding strategy.
+	BiddingErrorEnum_CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY BiddingErrorEnum_BiddingError = 23
+	// Budget Optimizer and Target Spend bidding strategies are not supported
+	// for campaigns with AdSchedule targeting.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE BiddingErrorEnum_BiddingError = 24
+	// Pay per conversion is not available to all the customer, only few
+	// whitelisted customers can use this.
+	BiddingErrorEnum_PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER BiddingErrorEnum_BiddingError = 25
+	// Pay per conversion is not allowed with Target CPA.
+	BiddingErrorEnum_PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA BiddingErrorEnum_BiddingError = 26
+	// Cannot set bidding strategy to Manual CPM for search network only
+	// campaigns.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS BiddingErrorEnum_BiddingError = 27
+	// The bidding strategy is not supported for use in drafts or experiments.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS BiddingErrorEnum_BiddingError = 28
+	// Bidding strategy type does not support product type ad group criterion.
+	BiddingErrorEnum_BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION BiddingErrorEnum_BiddingError = 29
+	// Bid amount is too small.
+	BiddingErrorEnum_BID_TOO_SMALL BiddingErrorEnum_BiddingError = 30
+	// Bid amount is too big.
+	BiddingErrorEnum_BID_TOO_BIG BiddingErrorEnum_BiddingError = 31
+	// Bid has too many fractional digit precision.
+	BiddingErrorEnum_BID_TOO_MANY_FRACTIONAL_DIGITS BiddingErrorEnum_BiddingError = 32
+	// Invalid domain name specified.
+	BiddingErrorEnum_INVALID_DOMAIN_NAME BiddingErrorEnum_BiddingError = 33
+	// The field is not compatible with the payment mode.
+	BiddingErrorEnum_NOT_COMPATIBLE_WITH_PAYMENT_MODE BiddingErrorEnum_BiddingError = 34
+	// The field is not compatible with the budget type.
+	BiddingErrorEnum_NOT_COMPATIBLE_WITH_BUDGET_TYPE BiddingErrorEnum_BiddingError = 35
+	// The field is not compatible with the bidding strategy type.
+	BiddingErrorEnum_NOT_COMPATIBLE_WITH_BIDDING_STRATEGY_TYPE BiddingErrorEnum_BiddingError = 36
+	// Bidding strategy type is incompatible with shared budget.
+	BiddingErrorEnum_BIDDING_STRATEGY_TYPE_INCOMPATIBLE_WITH_SHARED_BUDGET BiddingErrorEnum_BiddingError = 37
+)
+
+var BiddingErrorEnum_BiddingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED",
+	7:  "CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN",
+	10: "INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE",
+	14: "INVALID_BIDDING_STRATEGY_TYPE",
+	17: "INVALID_BID",
+	18: "BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
+	19: "CONVERSION_TRACKING_NOT_ENABLED",
+	20: "NOT_ENOUGH_CONVERSIONS",
+	21: "CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY",
+	23: "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY",
+	24: "BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE",
+	25: "PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER",
+	26: "PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA",
+	27: "BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS",
+	28: "BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS",
+	29: "BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION",
+	30: "BID_TOO_SMALL",
+	31: "BID_TOO_BIG",
+	32: "BID_TOO_MANY_FRACTIONAL_DIGITS",
+	33: "INVALID_DOMAIN_NAME",
+	34: "NOT_COMPATIBLE_WITH_PAYMENT_MODE",
+	35: "NOT_COMPATIBLE_WITH_BUDGET_TYPE",
+	36: "NOT_COMPATIBLE_WITH_BIDDING_STRATEGY_TYPE",
+	37: "BIDDING_STRATEGY_TYPE_INCOMPATIBLE_WITH_SHARED_BUDGET",
+}
+
+var BiddingErrorEnum_BiddingError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED":                                     2,
+	"CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN":                                  7,
+	"INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE":                                     10,
+	"INVALID_BIDDING_STRATEGY_TYPE":                                               14,
+	"INVALID_BID":                                                                 17,
+	"BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE":                             18,
+	"CONVERSION_TRACKING_NOT_ENABLED":                                             19,
+	"NOT_ENOUGH_CONVERSIONS":                                                      20,
+	"CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY":                                21,
+	"CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY": 23,
+	"BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE":                             24,
+	"PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER":                               25,
+	"PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA":                              26,
+	"BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS":                      27,
+	"BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS":                     28,
+	"BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION":       29,
+	"BID_TOO_SMALL":                                         30,
+	"BID_TOO_BIG":                                           31,
+	"BID_TOO_MANY_FRACTIONAL_DIGITS":                        32,
+	"INVALID_DOMAIN_NAME":                                   33,
+	"NOT_COMPATIBLE_WITH_PAYMENT_MODE":                      34,
+	"NOT_COMPATIBLE_WITH_BUDGET_TYPE":                       35,
+	"NOT_COMPATIBLE_WITH_BIDDING_STRATEGY_TYPE":             36,
+	"BIDDING_STRATEGY_TYPE_INCOMPATIBLE_WITH_SHARED_BUDGET": 37,
+}
+
+func (x BiddingErrorEnum_BiddingError) String() string {
+	return proto.EnumName(BiddingErrorEnum_BiddingError_name, int32(x))
+}
+
+func (BiddingErrorEnum_BiddingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2ffc4bcf5ba70861, []int{0, 0}
+}
+
+// Container for enum describing possible bidding errors.
+type BiddingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingErrorEnum) Reset()         { *m = BiddingErrorEnum{} }
+func (m *BiddingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingErrorEnum) ProtoMessage()    {}
+func (*BiddingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2ffc4bcf5ba70861, []int{0}
+}
+
+func (m *BiddingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingErrorEnum.Unmarshal(m, b)
+}
+func (m *BiddingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *BiddingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingErrorEnum.Merge(m, src)
+}
+func (m *BiddingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingErrorEnum.Size(m)
+}
+func (m *BiddingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.BiddingErrorEnum_BiddingError", BiddingErrorEnum_BiddingError_name, BiddingErrorEnum_BiddingError_value)
+	proto.RegisterType((*BiddingErrorEnum)(nil), "google.ads.googleads.v3.errors.BiddingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/bidding_error.proto", fileDescriptor_2ffc4bcf5ba70861)
+}
+
+var fileDescriptor_2ffc4bcf5ba70861 = []byte{
+	// 757 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xed, 0x8e, 0xdb, 0x44,
+	0x14, 0x65, 0x17, 0x89, 0x56, 0x53, 0x3e, 0x66, 0xa7, 0x40, 0x61, 0x69, 0xb7, 0x6d, 0x5a, 0x84,
+	0xf8, 0xa8, 0x03, 0x8d, 0x00, 0xe1, 0xfe, 0xba, 0xf6, 0xcc, 0x3a, 0xa3, 0xd8, 0x33, 0xa3, 0x99,
+	0x71, 0x42, 0x50, 0xa4, 0x51, 0x4a, 0x56, 0x51, 0xa4, 0x36, 0x5e, 0xc5, 0x4b, 0x1f, 0x88, 0x9f,
+	0x3c, 0x0a, 0x6f, 0xc0, 0x2b, 0x20, 0xc4, 0x33, 0xa0, 0xf1, 0xc4, 0x21, 0x22, 0x5e, 0xfa, 0x2b,
+	0x37, 0x57, 0xe7, 0x9c, 0xeb, 0x73, 0x7d, 0x7c, 0xd1, 0xd3, 0x65, 0x55, 0x2d, 0x5f, 0x5c, 0xf4,
+	0xe7, 0x8b, 0xba, 0x1f, 0x4a, 0x5f, 0xbd, 0x1a, 0xf4, 0x2f, 0x36, 0x9b, 0x6a, 0x53, 0xf7, 0x9f,
+	0xaf, 0x16, 0x8b, 0xd5, 0x7a, 0xe9, 0x9a, 0xbf, 0xd1, 0xe5, 0xa6, 0xba, 0xaa, 0xc8, 0x59, 0x00,
+	0x46, 0xf3, 0x45, 0x1d, 0xed, 0x38, 0xd1, 0xab, 0x41, 0x14, 0x38, 0xa7, 0x77, 0x5b, 0xcd, 0xcb,
+	0x55, 0x7f, 0xbe, 0x5e, 0x57, 0x57, 0xf3, 0xab, 0x55, 0xb5, 0xae, 0x03, 0xbb, 0xf7, 0xf7, 0x4d,
+	0x84, 0x93, 0xa0, 0xca, 0x3c, 0x9e, 0xad, 0x7f, 0x79, 0xd9, 0xfb, 0xe3, 0x26, 0x7a, 0x7b, 0xbf,
+	0x49, 0xde, 0x43, 0xb7, 0x4a, 0x61, 0x14, 0x4b, 0xf9, 0x39, 0x67, 0x14, 0xbf, 0x41, 0x6e, 0xa1,
+	0x1b, 0xa5, 0x18, 0x09, 0x39, 0x11, 0xf8, 0x88, 0x7c, 0x89, 0x3e, 0x4b, 0x38, 0xa5, 0x5c, 0x64,
+	0xce, 0x58, 0x0d, 0x96, 0x65, 0x53, 0x67, 0x35, 0x08, 0xc3, 0x2d, 0x97, 0xc2, 0x09, 0x69, 0x1d,
+	0xe4, 0xb9, 0x9c, 0x30, 0x8a, 0x8f, 0x49, 0x84, 0xbe, 0x48, 0x41, 0x34, 0x3d, 0x6b, 0x21, 0x1d,
+	0xba, 0x43, 0xaa, 0x74, 0x29, 0x14, 0x0a, 0x78, 0x26, 0xf0, 0x0d, 0x2f, 0xce, 0xc5, 0x18, 0x72,
+	0x4e, 0x1d, 0x08, 0x29, 0xa6, 0x85, 0x2c, 0x4d, 0x07, 0x67, 0xaa, 0x18, 0x46, 0xe4, 0x21, 0xba,
+	0xd7, 0x82, 0xbb, 0x21, 0xef, 0x7a, 0x2b, 0x7b, 0x10, 0x7c, 0x42, 0x06, 0xa8, 0x7f, 0x80, 0x6d,
+	0x1e, 0x6f, 0x0c, 0x3c, 0x87, 0x24, 0x67, 0xee, 0x5c, 0x6a, 0x07, 0x69, 0x2a, 0x4b, 0x61, 0x83,
+	0x0a, 0x21, 0x8f, 0xd0, 0xfd, 0x54, 0x8a, 0x31, 0xd3, 0xc6, 0x3b, 0xb4, 0x1a, 0xd2, 0x91, 0x17,
+	0xf0, 0x3c, 0x26, 0x3c, 0x89, 0xe2, 0xdb, 0xe4, 0x14, 0x7d, 0x18, 0x1a, 0xb2, 0xcc, 0x86, 0xee,
+	0x5f, 0xbc, 0xc1, 0xef, 0x93, 0xaf, 0xd1, 0x57, 0xdb, 0x35, 0xa4, 0x9a, 0x81, 0x65, 0x3b, 0xcb,
+	0x6e, 0xc2, 0xed, 0xe1, 0x52, 0xf0, 0x07, 0x44, 0xa2, 0xd1, 0x96, 0x61, 0x41, 0x67, 0xcc, 0x7a,
+	0x41, 0xcb, 0x84, 0x75, 0x82, 0xd9, 0x89, 0xd4, 0x23, 0x27, 0x45, 0x3e, 0x0d, 0xec, 0x9d, 0x56,
+	0xce, 0xc6, 0x2c, 0x77, 0x4a, 0xaa, 0x43, 0xc1, 0x3b, 0xd7, 0x1a, 0x37, 0xa5, 0x52, 0x52, 0x5b,
+	0x46, 0x83, 0x18, 0x50, 0x67, 0xd2, 0x21, 0xa3, 0x65, 0xce, 0xf0, 0x47, 0xe4, 0x1b, 0xf4, 0x44,
+	0xc1, 0xd4, 0x29, 0xa6, 0xf7, 0x0c, 0x75, 0xec, 0x2b, 0x2d, 0x8d, 0x95, 0x05, 0xd3, 0xf8, 0x63,
+	0xf2, 0x14, 0x45, 0xd7, 0x51, 0x42, 0x2a, 0xc2, 0x9c, 0xd6, 0x95, 0x02, 0x7c, 0x4a, 0x62, 0xf4,
+	0x5d, 0xf7, 0x4b, 0xd9, 0x32, 0xfc, 0x08, 0xc3, 0x40, 0xa7, 0xc3, 0x60, 0xbb, 0x75, 0x6c, 0xf0,
+	0x27, 0xe4, 0x19, 0xfa, 0xfe, 0x35, 0xbe, 0xb8, 0x70, 0x54, 0xc3, 0xb9, 0x35, 0x4e, 0x6a, 0xc7,
+	0x7e, 0x54, 0x4c, 0xf3, 0x82, 0x09, 0x6b, 0xf0, 0x5d, 0xc2, 0x11, 0xeb, 0x4c, 0x8e, 0xa3, 0x92,
+	0x99, 0x7d, 0x19, 0xa7, 0xb4, 0xa4, 0x65, 0x1a, 0x12, 0xe1, 0x80, 0x66, 0x5a, 0x96, 0xca, 0xa5,
+	0x9a, 0x5b, 0xa6, 0xb9, 0x14, 0xf8, 0x1e, 0x39, 0x41, 0xef, 0x24, 0x9c, 0x3a, 0x2b, 0xa5, 0x33,
+	0x05, 0xe4, 0x39, 0x3e, 0xf3, 0xe1, 0x6b, 0x5b, 0x09, 0xcf, 0xf0, 0x7d, 0xd2, 0x43, 0x67, 0x6d,
+	0xa3, 0x00, 0x31, 0x75, 0xe7, 0x1a, 0x52, 0xff, 0xd1, 0x40, 0xee, 0x28, 0xcf, 0xb8, 0x35, 0xf8,
+	0x01, 0xb9, 0x83, 0x6e, 0xb7, 0x89, 0xa5, 0xb2, 0x00, 0x2e, 0x9c, 0x80, 0x82, 0xe1, 0x87, 0xe4,
+	0x31, 0x7a, 0xd0, 0x04, 0x48, 0x16, 0x0a, 0x2c, 0xf7, 0x9b, 0x6f, 0x16, 0xa9, 0x60, 0xea, 0xdd,
+	0xb8, 0x42, 0x52, 0x86, 0x7b, 0x3e, 0xaa, 0x5d, 0xa8, 0xa4, 0xa4, 0x7e, 0xdd, 0x4d, 0x9e, 0x1f,
+	0x91, 0x27, 0xe8, 0xf3, 0x4e, 0x50, 0xe7, 0x47, 0xf4, 0x98, 0xfc, 0x80, 0xbe, 0xed, 0xde, 0x12,
+	0x17, 0xff, 0x95, 0x30, 0x43, 0xd0, 0x8c, 0x6e, 0xc7, 0xe1, 0x4f, 0x93, 0xbf, 0x8e, 0x50, 0xef,
+	0xe7, 0xea, 0x65, 0xf4, 0xff, 0x57, 0x2b, 0x39, 0xd9, 0xbf, 0x3f, 0xca, 0x9f, 0x2a, 0x75, 0xf4,
+	0x13, 0xdd, 0x92, 0x96, 0xd5, 0x8b, 0xf9, 0x7a, 0x19, 0x55, 0x9b, 0x65, 0x7f, 0x79, 0xb1, 0x6e,
+	0x0e, 0x59, 0x7b, 0x2e, 0x2f, 0x57, 0xf5, 0x75, 0xd7, 0xf3, 0x59, 0xf8, 0xf9, 0xf5, 0xf8, 0xcd,
+	0x0c, 0xe0, 0xb7, 0xe3, 0xb3, 0x2c, 0x88, 0xc1, 0xa2, 0x8e, 0x42, 0xe9, 0xab, 0xf1, 0x20, 0x6a,
+	0x46, 0xd6, 0xbf, 0xb7, 0x80, 0x19, 0x2c, 0xea, 0xd9, 0x0e, 0x30, 0x1b, 0x0f, 0x66, 0x01, 0xf0,
+	0xe7, 0x71, 0x2f, 0x74, 0xe3, 0x18, 0x16, 0x75, 0x1c, 0xef, 0x20, 0x71, 0x3c, 0x1e, 0xc4, 0x71,
+	0x00, 0x3d, 0x7f, 0xab, 0x79, 0xba, 0xc1, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x44, 0x79, 0x4b,
+	0x02, 0xda, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/bidding_strategy_error.pb.go b/googleapis/ads/googleads/v3/errors/bidding_strategy_error.pb.go
new file mode 100644
index 0000000..884f43e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/bidding_strategy_error.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/bidding_strategy_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible bidding strategy errors.
+type BiddingStrategyErrorEnum_BiddingStrategyError int32
+
+const (
+	// Enum unspecified.
+	BiddingStrategyErrorEnum_UNSPECIFIED BiddingStrategyErrorEnum_BiddingStrategyError = 0
+	// The received error code is not known in this version.
+	BiddingStrategyErrorEnum_UNKNOWN BiddingStrategyErrorEnum_BiddingStrategyError = 1
+	// Each bidding strategy must have a unique name.
+	BiddingStrategyErrorEnum_DUPLICATE_NAME BiddingStrategyErrorEnum_BiddingStrategyError = 2
+	// Bidding strategy type is immutable.
+	BiddingStrategyErrorEnum_CANNOT_CHANGE_BIDDING_STRATEGY_TYPE BiddingStrategyErrorEnum_BiddingStrategyError = 3
+	// Only bidding strategies not linked to campaigns, adgroups or adgroup
+	// criteria can be removed.
+	BiddingStrategyErrorEnum_CANNOT_REMOVE_ASSOCIATED_STRATEGY BiddingStrategyErrorEnum_BiddingStrategyError = 4
+	// The specified bidding strategy is not supported.
+	BiddingStrategyErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED BiddingStrategyErrorEnum_BiddingStrategyError = 5
+	// The bidding strategy is incompatible with the campaign's bidding
+	// strategy goal type.
+	BiddingStrategyErrorEnum_INCOMPATIBLE_BIDDING_STRATEGY_AND_BIDDING_STRATEGY_GOAL_TYPE BiddingStrategyErrorEnum_BiddingStrategyError = 6
+)
+
+var BiddingStrategyErrorEnum_BiddingStrategyError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_NAME",
+	3: "CANNOT_CHANGE_BIDDING_STRATEGY_TYPE",
+	4: "CANNOT_REMOVE_ASSOCIATED_STRATEGY",
+	5: "BIDDING_STRATEGY_NOT_SUPPORTED",
+	6: "INCOMPATIBLE_BIDDING_STRATEGY_AND_BIDDING_STRATEGY_GOAL_TYPE",
+}
+
+var BiddingStrategyErrorEnum_BiddingStrategyError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"DUPLICATE_NAME":                      2,
+	"CANNOT_CHANGE_BIDDING_STRATEGY_TYPE": 3,
+	"CANNOT_REMOVE_ASSOCIATED_STRATEGY":   4,
+	"BIDDING_STRATEGY_NOT_SUPPORTED":      5,
+	"INCOMPATIBLE_BIDDING_STRATEGY_AND_BIDDING_STRATEGY_GOAL_TYPE": 6,
+}
+
+func (x BiddingStrategyErrorEnum_BiddingStrategyError) String() string {
+	return proto.EnumName(BiddingStrategyErrorEnum_BiddingStrategyError_name, int32(x))
+}
+
+func (BiddingStrategyErrorEnum_BiddingStrategyError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_49aa3f7c85e9c4bd, []int{0, 0}
+}
+
+// Container for enum describing possible bidding strategy errors.
+type BiddingStrategyErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingStrategyErrorEnum) Reset()         { *m = BiddingStrategyErrorEnum{} }
+func (m *BiddingStrategyErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyErrorEnum) ProtoMessage()    {}
+func (*BiddingStrategyErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_49aa3f7c85e9c4bd, []int{0}
+}
+
+func (m *BiddingStrategyErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Unmarshal(m, b)
+}
+func (m *BiddingStrategyErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *BiddingStrategyErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyErrorEnum.Merge(m, src)
+}
+func (m *BiddingStrategyErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Size(m)
+}
+func (m *BiddingStrategyErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.BiddingStrategyErrorEnum_BiddingStrategyError", BiddingStrategyErrorEnum_BiddingStrategyError_name, BiddingStrategyErrorEnum_BiddingStrategyError_value)
+	proto.RegisterType((*BiddingStrategyErrorEnum)(nil), "google.ads.googleads.v3.errors.BiddingStrategyErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/bidding_strategy_error.proto", fileDescriptor_49aa3f7c85e9c4bd)
+}
+
+var fileDescriptor_49aa3f7c85e9c4bd = []byte{
+	// 408 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x8b, 0xd4, 0x30,
+	0x1c, 0xc5, 0x9d, 0xae, 0xae, 0x90, 0x05, 0x2d, 0xc1, 0x83, 0x8a, 0x0c, 0x58, 0x11, 0x6f, 0xe9,
+	0xa1, 0xb7, 0xac, 0x07, 0xd3, 0x26, 0xd6, 0xe0, 0x4c, 0x1a, 0xa6, 0x99, 0x91, 0x95, 0x81, 0xd0,
+	0xb5, 0x43, 0x28, 0xec, 0x36, 0x43, 0x53, 0x17, 0xfc, 0x2c, 0xde, 0x3c, 0xfa, 0x51, 0xfc, 0x28,
+	0x9e, 0x3d, 0x8b, 0x74, 0x32, 0xd3, 0xcb, 0x8e, 0x7b, 0xea, 0xe3, 0xdf, 0xf7, 0x7b, 0xf9, 0xf3,
+	0xfe, 0xe0, 0xdc, 0x58, 0x6b, 0xae, 0x36, 0x71, 0x55, 0xbb, 0xd8, 0xcb, 0x41, 0xdd, 0x24, 0xf1,
+	0xa6, 0xeb, 0x6c, 0xe7, 0xe2, 0xcb, 0xa6, 0xae, 0x9b, 0xd6, 0x68, 0xd7, 0x77, 0x55, 0xbf, 0x31,
+	0xdf, 0xf4, 0x6e, 0x8e, 0xb6, 0x9d, 0xed, 0x2d, 0x9c, 0x7a, 0x02, 0x55, 0xb5, 0x43, 0x23, 0x8c,
+	0x6e, 0x12, 0xe4, 0xe1, 0xe7, 0x2f, 0x0e, 0xe1, 0xdb, 0x26, 0xae, 0xda, 0xd6, 0xf6, 0x55, 0xdf,
+	0xd8, 0xd6, 0x79, 0x3a, 0xfa, 0x1e, 0x80, 0xa7, 0xa9, 0x8f, 0x2f, 0xf7, 0xe9, 0x6c, 0xe0, 0x58,
+	0xfb, 0xf5, 0x3a, 0xfa, 0x3b, 0x01, 0x4f, 0x8e, 0xfd, 0x84, 0x8f, 0xc1, 0xd9, 0x52, 0x94, 0x92,
+	0x65, 0xfc, 0x3d, 0x67, 0x34, 0xbc, 0x07, 0xcf, 0xc0, 0xc3, 0xa5, 0xf8, 0x28, 0x8a, 0x4f, 0x22,
+	0x9c, 0x40, 0x08, 0x1e, 0xd1, 0xa5, 0x9c, 0xf1, 0x8c, 0x28, 0xa6, 0x05, 0x99, 0xb3, 0x30, 0x80,
+	0x6f, 0xc0, 0xab, 0x8c, 0x08, 0x51, 0x28, 0x9d, 0x7d, 0x20, 0x22, 0x67, 0x3a, 0xe5, 0x94, 0x72,
+	0x91, 0xeb, 0x52, 0x2d, 0x88, 0x62, 0xf9, 0x85, 0x56, 0x17, 0x92, 0x85, 0x27, 0xf0, 0x35, 0x78,
+	0xb9, 0x37, 0x2e, 0xd8, 0xbc, 0x58, 0x31, 0x4d, 0xca, 0xb2, 0xc8, 0x38, 0x51, 0x8c, 0x8e, 0xde,
+	0xf0, 0x3e, 0x8c, 0xc0, 0xf4, 0x56, 0xc2, 0x00, 0x95, 0x4b, 0x29, 0x8b, 0x85, 0x62, 0x34, 0x7c,
+	0x00, 0xdf, 0x81, 0xb7, 0x5c, 0x64, 0xc5, 0x5c, 0x12, 0xc5, 0xd3, 0xd9, 0x91, 0x27, 0x89, 0xa0,
+	0xb7, 0x87, 0x79, 0x41, 0x66, 0x7e, 0x99, 0xd3, 0xf4, 0xcf, 0x04, 0x44, 0x5f, 0xec, 0x35, 0xba,
+	0xbb, 0xe2, 0xf4, 0xd9, 0xb1, 0x92, 0xe4, 0xd0, 0xaf, 0x9c, 0x7c, 0xa6, 0x7b, 0xd8, 0xd8, 0xab,
+	0xaa, 0x35, 0xc8, 0x76, 0x26, 0x36, 0x9b, 0x76, 0xd7, 0xfe, 0xe1, 0xd8, 0xdb, 0xc6, 0xfd, 0xef,
+	0xf6, 0xe7, 0xfe, 0xf3, 0x23, 0x38, 0xc9, 0x09, 0xf9, 0x19, 0x4c, 0x73, 0x1f, 0x46, 0x6a, 0x87,
+	0xbc, 0x1c, 0xd4, 0x2a, 0x41, 0xbb, 0x27, 0xdd, 0xaf, 0x83, 0x61, 0x4d, 0x6a, 0xb7, 0x1e, 0x0d,
+	0xeb, 0x55, 0xb2, 0xf6, 0x86, 0xdf, 0x41, 0xe4, 0xa7, 0x18, 0x93, 0xda, 0x61, 0x3c, 0x5a, 0x30,
+	0x5e, 0x25, 0x18, 0x7b, 0xd3, 0xe5, 0xe9, 0x6e, 0xbb, 0xe4, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x32, 0xa5, 0x19, 0xbf, 0x98, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/billing_setup_error.pb.go b/googleapis/ads/googleads/v3/errors/billing_setup_error.pb.go
new file mode 100644
index 0000000..f813492
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/billing_setup_error.pb.go
@@ -0,0 +1,213 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/billing_setup_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible billing setup errors.
+type BillingSetupErrorEnum_BillingSetupError int32
+
+const (
+	// Enum unspecified.
+	BillingSetupErrorEnum_UNSPECIFIED BillingSetupErrorEnum_BillingSetupError = 0
+	// The received error code is not known in this version.
+	BillingSetupErrorEnum_UNKNOWN BillingSetupErrorEnum_BillingSetupError = 1
+	// Cannot specify both an existing payments account and a new payments
+	// account when setting up billing.
+	BillingSetupErrorEnum_CANNOT_USE_EXISTING_AND_NEW_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 2
+	// Cannot cancel an approved billing setup whose start time has passed.
+	BillingSetupErrorEnum_CANNOT_REMOVE_STARTED_BILLING_SETUP BillingSetupErrorEnum_BillingSetupError = 3
+	// Cannot perform a Change of Bill-To (CBT) to the same payments account.
+	BillingSetupErrorEnum_CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 4
+	// Billing setups can only be used by customers with ENABLED or DRAFT
+	// status.
+	BillingSetupErrorEnum_BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS BillingSetupErrorEnum_BillingSetupError = 5
+	// Billing setups must either include a correctly formatted existing
+	// payments account id, or a non-empty new payments account name.
+	BillingSetupErrorEnum_INVALID_PAYMENTS_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 6
+	// Only billable and third-party customers can create billing setups.
+	BillingSetupErrorEnum_BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY BillingSetupErrorEnum_BillingSetupError = 7
+	// Billing setup creations can only use NOW for start time type.
+	BillingSetupErrorEnum_INVALID_START_TIME_TYPE BillingSetupErrorEnum_BillingSetupError = 8
+	// Billing setups can only be created for a third-party customer if they do
+	// not already have a setup.
+	BillingSetupErrorEnum_THIRD_PARTY_ALREADY_HAS_BILLING BillingSetupErrorEnum_BillingSetupError = 9
+	// Billing setups cannot be created if there is already a pending billing in
+	// progress.
+	BillingSetupErrorEnum_BILLING_SETUP_IN_PROGRESS BillingSetupErrorEnum_BillingSetupError = 10
+	// Billing setups can only be created by customers who have permission to
+	// setup billings. Users can contact a representative for help setting up
+	// permissions.
+	BillingSetupErrorEnum_NO_SIGNUP_PERMISSION BillingSetupErrorEnum_BillingSetupError = 11
+	// Billing setups cannot be created if there is already a future-approved
+	// billing.
+	BillingSetupErrorEnum_CHANGE_OF_BILL_TO_IN_PROGRESS BillingSetupErrorEnum_BillingSetupError = 12
+	// Requested payments profile not found.
+	BillingSetupErrorEnum_PAYMENTS_PROFILE_NOT_FOUND BillingSetupErrorEnum_BillingSetupError = 13
+	// Requested payments account not found.
+	BillingSetupErrorEnum_PAYMENTS_ACCOUNT_NOT_FOUND BillingSetupErrorEnum_BillingSetupError = 14
+	// Billing setup creation failed because the payments profile is ineligible.
+	BillingSetupErrorEnum_PAYMENTS_PROFILE_INELIGIBLE BillingSetupErrorEnum_BillingSetupError = 15
+	// Billing setup creation failed because the payments account is ineligible.
+	BillingSetupErrorEnum_PAYMENTS_ACCOUNT_INELIGIBLE BillingSetupErrorEnum_BillingSetupError = 16
+	// Billing setup creation failed because the payments profile needs internal
+	// approval.
+	BillingSetupErrorEnum_CUSTOMER_NEEDS_INTERNAL_APPROVAL BillingSetupErrorEnum_BillingSetupError = 17
+	// Payments account has different currency code than the current customer
+	// and hence cannot be used to setup billing.
+	BillingSetupErrorEnum_PAYMENTS_ACCOUNT_INELIGIBLE_CURRENCY_CODE_MISMATCH BillingSetupErrorEnum_BillingSetupError = 19
+)
+
+var BillingSetupErrorEnum_BillingSetupError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_USE_EXISTING_AND_NEW_ACCOUNT",
+	3:  "CANNOT_REMOVE_STARTED_BILLING_SETUP",
+	4:  "CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT",
+	5:  "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS",
+	6:  "INVALID_PAYMENTS_ACCOUNT",
+	7:  "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY",
+	8:  "INVALID_START_TIME_TYPE",
+	9:  "THIRD_PARTY_ALREADY_HAS_BILLING",
+	10: "BILLING_SETUP_IN_PROGRESS",
+	11: "NO_SIGNUP_PERMISSION",
+	12: "CHANGE_OF_BILL_TO_IN_PROGRESS",
+	13: "PAYMENTS_PROFILE_NOT_FOUND",
+	14: "PAYMENTS_ACCOUNT_NOT_FOUND",
+	15: "PAYMENTS_PROFILE_INELIGIBLE",
+	16: "PAYMENTS_ACCOUNT_INELIGIBLE",
+	17: "CUSTOMER_NEEDS_INTERNAL_APPROVAL",
+	19: "PAYMENTS_ACCOUNT_INELIGIBLE_CURRENCY_CODE_MISMATCH",
+}
+
+var BillingSetupErrorEnum_BillingSetupError_value = map[string]int32{
+	"UNSPECIFIED":                                        0,
+	"UNKNOWN":                                            1,
+	"CANNOT_USE_EXISTING_AND_NEW_ACCOUNT":                2,
+	"CANNOT_REMOVE_STARTED_BILLING_SETUP":                3,
+	"CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT":     4,
+	"BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS":    5,
+	"INVALID_PAYMENTS_ACCOUNT":                           6,
+	"BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY":  7,
+	"INVALID_START_TIME_TYPE":                            8,
+	"THIRD_PARTY_ALREADY_HAS_BILLING":                    9,
+	"BILLING_SETUP_IN_PROGRESS":                          10,
+	"NO_SIGNUP_PERMISSION":                               11,
+	"CHANGE_OF_BILL_TO_IN_PROGRESS":                      12,
+	"PAYMENTS_PROFILE_NOT_FOUND":                         13,
+	"PAYMENTS_ACCOUNT_NOT_FOUND":                         14,
+	"PAYMENTS_PROFILE_INELIGIBLE":                        15,
+	"PAYMENTS_ACCOUNT_INELIGIBLE":                        16,
+	"CUSTOMER_NEEDS_INTERNAL_APPROVAL":                   17,
+	"PAYMENTS_ACCOUNT_INELIGIBLE_CURRENCY_CODE_MISMATCH": 19,
+}
+
+func (x BillingSetupErrorEnum_BillingSetupError) String() string {
+	return proto.EnumName(BillingSetupErrorEnum_BillingSetupError_name, int32(x))
+}
+
+func (BillingSetupErrorEnum_BillingSetupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad919e3bbb1ef52f, []int{0, 0}
+}
+
+// Container for enum describing possible billing setup errors.
+type BillingSetupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BillingSetupErrorEnum) Reset()         { *m = BillingSetupErrorEnum{} }
+func (m *BillingSetupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupErrorEnum) ProtoMessage()    {}
+func (*BillingSetupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad919e3bbb1ef52f, []int{0}
+}
+
+func (m *BillingSetupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupErrorEnum.Unmarshal(m, b)
+}
+func (m *BillingSetupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *BillingSetupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupErrorEnum.Merge(m, src)
+}
+func (m *BillingSetupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupErrorEnum.Size(m)
+}
+func (m *BillingSetupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.BillingSetupErrorEnum_BillingSetupError", BillingSetupErrorEnum_BillingSetupError_name, BillingSetupErrorEnum_BillingSetupError_value)
+	proto.RegisterType((*BillingSetupErrorEnum)(nil), "google.ads.googleads.v3.errors.BillingSetupErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/billing_setup_error.proto", fileDescriptor_ad919e3bbb1ef52f)
+}
+
+var fileDescriptor_ad919e3bbb1ef52f = []byte{
+	// 617 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6e, 0xd3, 0x4a,
+	0x14, 0xc6, 0x6f, 0xd3, 0xdb, 0xf6, 0xde, 0x29, 0xd0, 0xe9, 0xf0, 0xaf, 0xf4, 0x2f, 0xa4, 0x48,
+	0xec, 0x1c, 0xd1, 0x08, 0x84, 0xcc, 0x6a, 0x62, 0x9f, 0x38, 0x23, 0xec, 0x19, 0x6b, 0x66, 0x9c,
+	0x12, 0x14, 0x69, 0x94, 0x92, 0x28, 0x8a, 0x94, 0xda, 0x51, 0x9c, 0xf6, 0x81, 0x58, 0xf2, 0x12,
+	0xec, 0x79, 0x03, 0x5e, 0x81, 0x1d, 0x6f, 0x80, 0x6c, 0x27, 0x56, 0xa2, 0x88, 0x8a, 0x95, 0x8f,
+	0x66, 0xbe, 0xef, 0x77, 0xe6, 0x1c, 0xf9, 0x43, 0xef, 0x86, 0x49, 0x32, 0x1c, 0x0f, 0x6a, 0xbd,
+	0x7e, 0x5a, 0x2b, 0xca, 0xac, 0xba, 0xad, 0xd7, 0x06, 0xd3, 0x69, 0x32, 0x4d, 0x6b, 0x57, 0xa3,
+	0xf1, 0x78, 0x14, 0x0f, 0x4d, 0x3a, 0x98, 0xdd, 0x4c, 0x4c, 0x7e, 0x68, 0x4d, 0xa6, 0xc9, 0x2c,
+	0x21, 0xa7, 0x85, 0xdc, 0xea, 0xf5, 0x53, 0xab, 0x74, 0x5a, 0xb7, 0x75, 0xab, 0x70, 0x1e, 0x1e,
+	0x2f, 0xc8, 0x93, 0x51, 0xad, 0x17, 0xc7, 0xc9, 0xac, 0x37, 0x1b, 0x25, 0x71, 0x5a, 0xb8, 0xab,
+	0x3f, 0xb6, 0xd0, 0xe3, 0x46, 0xc1, 0x56, 0x19, 0x1a, 0x32, 0x13, 0xc4, 0x37, 0xd7, 0xd5, 0x6f,
+	0x5b, 0x68, 0x7f, 0xed, 0x86, 0xec, 0xa1, 0xdd, 0x88, 0xab, 0x10, 0x1c, 0xd6, 0x64, 0xe0, 0xe2,
+	0x7f, 0xc8, 0x2e, 0xda, 0x89, 0xf8, 0x07, 0x2e, 0x2e, 0x39, 0xde, 0x20, 0xaf, 0xd0, 0xb9, 0x43,
+	0x39, 0x17, 0xda, 0x44, 0x0a, 0x0c, 0x7c, 0x64, 0x4a, 0x33, 0xee, 0x19, 0xca, 0x5d, 0xc3, 0xe1,
+	0xd2, 0x50, 0xc7, 0x11, 0x11, 0xd7, 0xb8, 0xb2, 0x24, 0x94, 0x10, 0x88, 0x36, 0x18, 0xa5, 0xa9,
+	0xd4, 0xe0, 0x9a, 0x06, 0xf3, 0xfd, 0xcc, 0xa2, 0x40, 0x47, 0x21, 0xde, 0x24, 0x17, 0xc8, 0x9a,
+	0x0b, 0x9d, 0x16, 0xe5, 0x1e, 0x94, 0x02, 0x2d, 0x8c, 0xa2, 0x01, 0x98, 0x90, 0x76, 0x02, 0xe0,
+	0x5a, 0x95, 0xf0, 0x7f, 0x49, 0x1d, 0xd5, 0x56, 0x30, 0x26, 0xb3, 0x87, 0x20, 0x03, 0xa6, 0xb3,
+	0x16, 0x4d, 0x21, 0x8d, 0x13, 0x29, 0x2d, 0x02, 0x90, 0x59, 0x5f, 0x1d, 0x29, 0xbc, 0x45, 0x8e,
+	0xd1, 0x01, 0xe3, 0x6d, 0xea, 0x33, 0x77, 0x1d, 0xb9, 0x4d, 0xde, 0xa0, 0xd7, 0x7f, 0x8d, 0x74,
+	0xa8, 0x06, 0x4f, 0xc8, 0x0e, 0xde, 0x21, 0x47, 0xe8, 0xe9, 0x02, 0x9a, 0x0f, 0x68, 0x34, 0x0b,
+	0xc0, 0xe8, 0x4e, 0x08, 0xf8, 0x3f, 0x72, 0x8e, 0xce, 0x74, 0x8b, 0xc9, 0xac, 0x9f, 0xd4, 0x1d,
+	0x43, 0x7d, 0x09, 0xd4, 0xed, 0x98, 0x16, 0x55, 0x8b, 0x21, 0xf1, 0xff, 0xe4, 0x04, 0x3d, 0x5b,
+	0x6d, 0xcc, 0xb8, 0x09, 0xa5, 0xf0, 0x24, 0x28, 0x85, 0x11, 0x39, 0x40, 0x8f, 0xb8, 0x30, 0x8a,
+	0x79, 0x3c, 0x0a, 0x8b, 0xf7, 0x28, 0xc5, 0x04, 0xc7, 0xbb, 0xe4, 0x05, 0x3a, 0x99, 0x6f, 0x4c,
+	0x34, 0x73, 0x5e, 0xb6, 0xb1, 0x65, 0xf3, 0x3d, 0x72, 0x8a, 0x0e, 0xcb, 0x51, 0x43, 0x29, 0x9a,
+	0xcc, 0x87, 0x7c, 0xae, 0xa6, 0x88, 0xb8, 0x8b, 0xef, 0xaf, 0xdc, 0xcf, 0x57, 0xb1, 0x74, 0xff,
+	0x80, 0x9c, 0xa1, 0xa3, 0x35, 0x3f, 0xe3, 0xe0, 0x33, 0x8f, 0x35, 0x7c, 0xc0, 0x7b, 0x2b, 0x82,
+	0x05, 0x60, 0x49, 0x80, 0xc9, 0x4b, 0xf4, 0xbc, 0x5c, 0x1b, 0x07, 0x70, 0x95, 0x61, 0x5c, 0x83,
+	0xe4, 0xd4, 0x37, 0x34, 0x0c, 0xa5, 0x68, 0x53, 0x1f, 0xef, 0x93, 0xb7, 0xe8, 0xe2, 0x0e, 0x8c,
+	0x71, 0x22, 0x29, 0x81, 0x3b, 0x1d, 0xe3, 0x08, 0x17, 0x4c, 0xc0, 0x54, 0x40, 0xb5, 0xd3, 0xc2,
+	0x0f, 0x1b, 0xbf, 0x36, 0x50, 0xf5, 0x73, 0x72, 0x6d, 0xdd, 0x1d, 0x90, 0xc6, 0x93, 0xb5, 0xbf,
+	0x3c, 0xcc, 0xa2, 0x11, 0x6e, 0x7c, 0x72, 0xe7, 0xce, 0x61, 0x32, 0xee, 0xc5, 0x43, 0x2b, 0x99,
+	0x0e, 0x6b, 0xc3, 0x41, 0x9c, 0x07, 0x67, 0x11, 0xd2, 0xc9, 0x28, 0xfd, 0x53, 0x66, 0xdf, 0x17,
+	0x9f, 0x2f, 0x95, 0x4d, 0x8f, 0xd2, 0xaf, 0x95, 0x53, 0xaf, 0x80, 0xd1, 0x7e, 0x6a, 0x15, 0x65,
+	0x56, 0xb5, 0xeb, 0x56, 0xde, 0x32, 0xfd, 0xbe, 0x10, 0x74, 0x69, 0x3f, 0xed, 0x96, 0x82, 0x6e,
+	0xbb, 0xde, 0x2d, 0x04, 0x3f, 0x2b, 0xd5, 0xe2, 0xd4, 0xb6, 0x69, 0x3f, 0xb5, 0xed, 0x52, 0x62,
+	0xdb, 0xed, 0xba, 0x6d, 0x17, 0xa2, 0xab, 0xed, 0xfc, 0x75, 0xf5, 0xdf, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x57, 0xfb, 0xa3, 0xfd, 0x50, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_budget_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_budget_error.pb.go
new file mode 100644
index 0000000..85c0f71
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_budget_error.pb.go
@@ -0,0 +1,198 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_budget_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign budget errors.
+type CampaignBudgetErrorEnum_CampaignBudgetError int32
+
+const (
+	// Enum unspecified.
+	CampaignBudgetErrorEnum_UNSPECIFIED CampaignBudgetErrorEnum_CampaignBudgetError = 0
+	// The received error code is not known in this version.
+	CampaignBudgetErrorEnum_UNKNOWN CampaignBudgetErrorEnum_CampaignBudgetError = 1
+	// The campaign budget cannot be shared.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_CANNOT_BE_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 17
+	// The requested campaign budget no longer exists.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_REMOVED CampaignBudgetErrorEnum_CampaignBudgetError = 2
+	// The campaign budget is associated with at least one campaign, and so the
+	// campaign budget cannot be removed.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_IN_USE CampaignBudgetErrorEnum_CampaignBudgetError = 3
+	// Customer is not whitelisted for this campaign budget period.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE CampaignBudgetErrorEnum_CampaignBudgetError = 4
+	// This field is not mutable on implicitly shared campaign budgets
+	CampaignBudgetErrorEnum_CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET CampaignBudgetErrorEnum_CampaignBudgetError = 6
+	// Cannot change explicitly shared campaign budgets back to implicitly
+	// shared ones.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 7
+	// An implicit campaign budget without a name cannot be changed to
+	// explicitly shared campaign budget.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME CampaignBudgetErrorEnum_CampaignBudgetError = 8
+	// Cannot change an implicitly shared campaign budget to an explicitly
+	// shared one.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 9
+	// Only explicitly shared campaign budgets can be used with multiple
+	// campaigns.
+	CampaignBudgetErrorEnum_CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS CampaignBudgetErrorEnum_CampaignBudgetError = 10
+	// A campaign budget with this name already exists.
+	CampaignBudgetErrorEnum_DUPLICATE_NAME CampaignBudgetErrorEnum_CampaignBudgetError = 11
+	// A money amount was not in the expected currency.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_IN_WRONG_CURRENCY CampaignBudgetErrorEnum_CampaignBudgetError = 12
+	// A money amount was less than the minimum CPC for currency.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC CampaignBudgetErrorEnum_CampaignBudgetError = 13
+	// A money amount was greater than the maximum allowed.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_TOO_LARGE CampaignBudgetErrorEnum_CampaignBudgetError = 14
+	// A money amount was negative.
+	CampaignBudgetErrorEnum_NEGATIVE_MONEY_AMOUNT CampaignBudgetErrorEnum_CampaignBudgetError = 15
+	// A money amount was not a multiple of a minimum unit.
+	CampaignBudgetErrorEnum_NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT CampaignBudgetErrorEnum_CampaignBudgetError = 16
+)
+
+var CampaignBudgetErrorEnum_CampaignBudgetError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	17: "CAMPAIGN_BUDGET_CANNOT_BE_SHARED",
+	2:  "CAMPAIGN_BUDGET_REMOVED",
+	3:  "CAMPAIGN_BUDGET_IN_USE",
+	4:  "CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE",
+	6:  "CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET",
+	7:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED",
+	8:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME",
+	9:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED",
+	10: "CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS",
+	11: "DUPLICATE_NAME",
+	12: "MONEY_AMOUNT_IN_WRONG_CURRENCY",
+	13: "MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC",
+	14: "MONEY_AMOUNT_TOO_LARGE",
+	15: "NEGATIVE_MONEY_AMOUNT",
+	16: "NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT",
+}
+
+var CampaignBudgetErrorEnum_CampaignBudgetError_value = map[string]int32{
+	"UNSPECIFIED":                          0,
+	"UNKNOWN":                              1,
+	"CAMPAIGN_BUDGET_CANNOT_BE_SHARED":     17,
+	"CAMPAIGN_BUDGET_REMOVED":              2,
+	"CAMPAIGN_BUDGET_IN_USE":               3,
+	"CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE": 4,
+	"CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET":             6,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED":                   7,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME":      8,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED":                   9,
+	"CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS": 10,
+	"DUPLICATE_NAME":                              11,
+	"MONEY_AMOUNT_IN_WRONG_CURRENCY":              12,
+	"MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC": 13,
+	"MONEY_AMOUNT_TOO_LARGE":                      14,
+	"NEGATIVE_MONEY_AMOUNT":                       15,
+	"NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT":       16,
+}
+
+func (x CampaignBudgetErrorEnum_CampaignBudgetError) String() string {
+	return proto.EnumName(CampaignBudgetErrorEnum_CampaignBudgetError_name, int32(x))
+}
+
+func (CampaignBudgetErrorEnum_CampaignBudgetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2c34de9796e76d27, []int{0, 0}
+}
+
+// Container for enum describing possible campaign budget errors.
+type CampaignBudgetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignBudgetErrorEnum) Reset()         { *m = CampaignBudgetErrorEnum{} }
+func (m *CampaignBudgetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudgetErrorEnum) ProtoMessage()    {}
+func (*CampaignBudgetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2c34de9796e76d27, []int{0}
+}
+
+func (m *CampaignBudgetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignBudgetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignBudgetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudgetErrorEnum.Merge(m, src)
+}
+func (m *CampaignBudgetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Size(m)
+}
+func (m *CampaignBudgetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudgetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudgetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignBudgetErrorEnum_CampaignBudgetError", CampaignBudgetErrorEnum_CampaignBudgetError_name, CampaignBudgetErrorEnum_CampaignBudgetError_value)
+	proto.RegisterType((*CampaignBudgetErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignBudgetErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_budget_error.proto", fileDescriptor_2c34de9796e76d27)
+}
+
+var fileDescriptor_2c34de9796e76d27 = []byte{
+	// 580 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xd1, 0x6a, 0xd4, 0x40,
+	0x14, 0x86, 0xed, 0xd6, 0xb6, 0x3a, 0xd5, 0x76, 0x1c, 0xd1, 0x6a, 0x95, 0x22, 0x4b, 0x05, 0x45,
+	0x48, 0xc0, 0x80, 0x48, 0x14, 0x64, 0x92, 0xcc, 0x66, 0x07, 0x93, 0x99, 0x90, 0xcc, 0xa4, 0xae,
+	0x2c, 0x0c, 0x69, 0xb3, 0x84, 0x85, 0x36, 0x59, 0x36, 0xdb, 0x3e, 0x90, 0x97, 0x3e, 0x87, 0x57,
+	0x3e, 0x85, 0xd7, 0xde, 0xfa, 0x02, 0x92, 0x64, 0x77, 0x6b, 0xd3, 0x6a, 0xbd, 0xca, 0x61, 0xce,
+	0xff, 0xfd, 0xff, 0x09, 0x33, 0x07, 0x98, 0x59, 0x51, 0x64, 0xc7, 0x23, 0x3d, 0x49, 0x4b, 0xbd,
+	0x29, 0xab, 0xea, 0xcc, 0xd0, 0x47, 0xd3, 0x69, 0x31, 0x2d, 0xf5, 0xa3, 0xe4, 0x64, 0x92, 0x8c,
+	0xb3, 0x5c, 0x1d, 0x9e, 0xa6, 0xd9, 0x68, 0xa6, 0xea, 0x63, 0x6d, 0x32, 0x2d, 0x66, 0x05, 0xda,
+	0x6b, 0x00, 0x2d, 0x49, 0x4b, 0x6d, 0xc9, 0x6a, 0x67, 0x86, 0xd6, 0xb0, 0xbb, 0x4f, 0x17, 0xde,
+	0x93, 0xb1, 0x9e, 0xe4, 0x79, 0x31, 0x4b, 0x66, 0xe3, 0x22, 0x2f, 0x1b, 0xba, 0xfb, 0x63, 0x0d,
+	0xec, 0xd8, 0x73, 0x77, 0xab, 0x36, 0x27, 0x15, 0x46, 0xf2, 0xd3, 0x93, 0xee, 0xb7, 0x35, 0x70,
+	0xff, 0x8a, 0x1e, 0xda, 0x06, 0x9b, 0x92, 0x45, 0x01, 0xb1, 0x69, 0x8f, 0x12, 0x07, 0xde, 0x40,
+	0x9b, 0x60, 0x43, 0xb2, 0x8f, 0x8c, 0x1f, 0x30, 0xb8, 0x82, 0xf6, 0xc1, 0x33, 0x1b, 0xfb, 0x01,
+	0xa6, 0x2e, 0x53, 0x96, 0x74, 0x5c, 0x22, 0x94, 0x8d, 0x19, 0xe3, 0x42, 0x59, 0x44, 0x45, 0x7d,
+	0x1c, 0x12, 0x07, 0xde, 0x43, 0x4f, 0xc0, 0x4e, 0x5b, 0x15, 0x12, 0x9f, 0xc7, 0xc4, 0x81, 0x1d,
+	0xb4, 0x0b, 0x1e, 0xb6, 0x9b, 0x94, 0x29, 0x19, 0x11, 0xb8, 0x8a, 0x5e, 0x80, 0xfd, 0x76, 0x2f,
+	0x20, 0x21, 0xe5, 0x8e, 0xaa, 0x22, 0x70, 0x8c, 0xa9, 0x87, 0x2d, 0x8f, 0xc0, 0x9b, 0xe8, 0x3d,
+	0x78, 0x3b, 0x0f, 0xf6, 0xb9, 0x43, 0x7b, 0x03, 0xd5, 0xa3, 0xc4, 0x73, 0x14, 0xef, 0x29, 0xea,
+	0x07, 0x1e, 0xb5, 0xa9, 0xf0, 0x06, 0xf3, 0x81, 0x54, 0xcb, 0x12, 0xae, 0xa3, 0x37, 0xe0, 0xf5,
+	0x9c, 0x96, 0x81, 0x83, 0x05, 0x69, 0x4b, 0x94, 0xe0, 0x97, 0x7d, 0xe0, 0x06, 0xb2, 0xc1, 0x87,
+	0x6b, 0x39, 0xf2, 0xa9, 0x9d, 0x7f, 0x40, 0x45, 0x9f, 0x4b, 0xa1, 0x18, 0xf6, 0x09, 0xbc, 0xf5,
+	0x5f, 0xe1, 0x97, 0x4c, 0xe0, 0x6d, 0xd4, 0x07, 0xce, 0x82, 0x8b, 0xc8, 0xf5, 0xbf, 0x59, 0xc7,
+	0x2a, 0x5f, 0x7a, 0x82, 0x06, 0xde, 0x79, 0x48, 0x04, 0x01, 0x42, 0x60, 0xcb, 0x91, 0x15, 0x5e,
+	0xa5, 0xd7, 0x53, 0x6d, 0xa2, 0x2e, 0xd8, 0xf3, 0x39, 0x23, 0x03, 0x85, 0x7d, 0x2e, 0x59, 0x7d,
+	0x27, 0x07, 0x21, 0x67, 0xae, 0xb2, 0x65, 0x18, 0x12, 0x66, 0x0f, 0xe0, 0x1d, 0xa4, 0x83, 0x57,
+	0x17, 0x34, 0x1e, 0x89, 0x22, 0x25, 0xfa, 0x98, 0x2d, 0x45, 0xca, 0xa7, 0x8c, 0xfa, 0xd2, 0x57,
+	0x76, 0x60, 0xc3, 0xbb, 0xd5, 0x5d, 0x5f, 0x00, 0x04, 0xe7, 0xca, 0xc3, 0xa1, 0x4b, 0xe0, 0x16,
+	0x7a, 0x0c, 0x1e, 0x30, 0xe2, 0x62, 0x41, 0x63, 0xa2, 0xfe, 0x14, 0xc1, 0x6d, 0xf4, 0x12, 0x3c,
+	0x67, 0x9c, 0x9d, 0xcf, 0xce, 0x7b, 0xe7, 0xbe, 0x8b, 0x20, 0xc9, 0xa8, 0x80, 0xd0, 0xfa, 0xb5,
+	0x02, 0xba, 0x47, 0xc5, 0x89, 0xf6, 0xef, 0x3d, 0xb1, 0x1e, 0x5d, 0xf1, 0xd4, 0x83, 0x6a, 0x47,
+	0x82, 0x95, 0xcf, 0xce, 0x9c, 0xcd, 0x8a, 0xe3, 0x24, 0xcf, 0xb4, 0x62, 0x9a, 0xe9, 0xd9, 0x28,
+	0xaf, 0x37, 0x68, 0xb1, 0xaf, 0x93, 0x71, 0xf9, 0xb7, 0xf5, 0x7d, 0xd7, 0x7c, 0xbe, 0x74, 0x56,
+	0x5d, 0x8c, 0xbf, 0x76, 0xf6, 0xdc, 0xc6, 0x0c, 0xa7, 0xa5, 0xd6, 0x94, 0x55, 0x15, 0x1b, 0x5a,
+	0x1d, 0x59, 0x7e, 0x5f, 0x08, 0x86, 0x38, 0x2d, 0x87, 0x4b, 0xc1, 0x30, 0x36, 0x86, 0x8d, 0xe0,
+	0x67, 0xa7, 0xdb, 0x9c, 0x9a, 0x26, 0x4e, 0x4b, 0xd3, 0x5c, 0x4a, 0x4c, 0x33, 0x36, 0x4c, 0xb3,
+	0x11, 0x1d, 0xae, 0xd7, 0xd3, 0x19, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x48, 0xc0, 0x9d, 0x5e,
+	0x5b, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_criterion_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_criterion_error.pb.go
new file mode 100644
index 0000000..a36983d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_criterion_error.pb.go
@@ -0,0 +1,177 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_criterion_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign criterion errors.
+type CampaignCriterionErrorEnum_CampaignCriterionError int32
+
+const (
+	// Enum unspecified.
+	CampaignCriterionErrorEnum_UNSPECIFIED CampaignCriterionErrorEnum_CampaignCriterionError = 0
+	// The received error code is not known in this version.
+	CampaignCriterionErrorEnum_UNKNOWN CampaignCriterionErrorEnum_CampaignCriterionError = 1
+	// Concrete type of criterion (keyword v.s. placement) is required for
+	// CREATE and UPDATE operations.
+	CampaignCriterionErrorEnum_CONCRETE_TYPE_REQUIRED CampaignCriterionErrorEnum_CampaignCriterionError = 2
+	// Invalid placement URL.
+	CampaignCriterionErrorEnum_INVALID_PLACEMENT_URL CampaignCriterionErrorEnum_CampaignCriterionError = 3
+	// Criteria type can not be excluded for the campaign by the customer. like
+	// AOL account type cannot target site type criteria
+	CampaignCriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 4
+	// Cannot set the campaign criterion status for this criteria type.
+	CampaignCriterionErrorEnum_CANNOT_SET_STATUS_FOR_CRITERIA_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 5
+	// Cannot set the campaign criterion status for an excluded criteria.
+	CampaignCriterionErrorEnum_CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA CampaignCriterionErrorEnum_CampaignCriterionError = 6
+	// Cannot target and exclude the same criterion.
+	CampaignCriterionErrorEnum_CANNOT_TARGET_AND_EXCLUDE CampaignCriterionErrorEnum_CampaignCriterionError = 7
+	// The mutate contained too many operations.
+	CampaignCriterionErrorEnum_TOO_MANY_OPERATIONS CampaignCriterionErrorEnum_CampaignCriterionError = 8
+	// This operator cannot be applied to a criterion of this type.
+	CampaignCriterionErrorEnum_OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 9
+	// The Shopping campaign sales country is not supported for
+	// ProductSalesChannel targeting.
+	CampaignCriterionErrorEnum_SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL CampaignCriterionErrorEnum_CampaignCriterionError = 10
+	// The existing field can't be updated with CREATE operation. It can be
+	// updated with UPDATE operation only.
+	CampaignCriterionErrorEnum_CANNOT_ADD_EXISTING_FIELD CampaignCriterionErrorEnum_CampaignCriterionError = 11
+	// Negative criteria are immutable, so updates are not allowed.
+	CampaignCriterionErrorEnum_CANNOT_UPDATE_NEGATIVE_CRITERION CampaignCriterionErrorEnum_CampaignCriterionError = 12
+)
+
+var CampaignCriterionErrorEnum_CampaignCriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CONCRETE_TYPE_REQUIRED",
+	3:  "INVALID_PLACEMENT_URL",
+	4:  "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	5:  "CANNOT_SET_STATUS_FOR_CRITERIA_TYPE",
+	6:  "CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA",
+	7:  "CANNOT_TARGET_AND_EXCLUDE",
+	8:  "TOO_MANY_OPERATIONS",
+	9:  "OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	10: "SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL",
+	11: "CANNOT_ADD_EXISTING_FIELD",
+	12: "CANNOT_UPDATE_NEGATIVE_CRITERION",
+}
+
+var CampaignCriterionErrorEnum_CampaignCriterionError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"CONCRETE_TYPE_REQUIRED":                    2,
+	"INVALID_PLACEMENT_URL":                     3,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":              4,
+	"CANNOT_SET_STATUS_FOR_CRITERIA_TYPE":       5,
+	"CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA":   6,
+	"CANNOT_TARGET_AND_EXCLUDE":                 7,
+	"TOO_MANY_OPERATIONS":                       8,
+	"OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE": 9,
+	"SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL": 10,
+	"CANNOT_ADD_EXISTING_FIELD":                                       11,
+	"CANNOT_UPDATE_NEGATIVE_CRITERION":                                12,
+}
+
+func (x CampaignCriterionErrorEnum_CampaignCriterionError) String() string {
+	return proto.EnumName(CampaignCriterionErrorEnum_CampaignCriterionError_name, int32(x))
+}
+
+func (CampaignCriterionErrorEnum_CampaignCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_05f1ed18896f208f, []int{0, 0}
+}
+
+// Container for enum describing possible campaign criterion errors.
+type CampaignCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignCriterionErrorEnum) Reset()         { *m = CampaignCriterionErrorEnum{} }
+func (m *CampaignCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionErrorEnum) ProtoMessage()    {}
+func (*CampaignCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_05f1ed18896f208f, []int{0}
+}
+
+func (m *CampaignCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionErrorEnum.Merge(m, src)
+}
+func (m *CampaignCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Size(m)
+}
+func (m *CampaignCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignCriterionErrorEnum_CampaignCriterionError", CampaignCriterionErrorEnum_CampaignCriterionError_name, CampaignCriterionErrorEnum_CampaignCriterionError_value)
+	proto.RegisterType((*CampaignCriterionErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignCriterionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_criterion_error.proto", fileDescriptor_05f1ed18896f208f)
+}
+
+var fileDescriptor_05f1ed18896f208f = []byte{
+	// 527 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6a, 0xd4, 0x4e,
+	0x14, 0xc6, 0xff, 0xdd, 0xfd, 0xdb, 0xea, 0x54, 0x30, 0x8c, 0x58, 0x69, 0xad, 0xa5, 0xac, 0x42,
+	0x11, 0x31, 0xb9, 0xc8, 0x5d, 0x44, 0x64, 0x3a, 0x39, 0x4d, 0x07, 0xd3, 0x99, 0x71, 0x32, 0x59,
+	0xad, 0x2c, 0x0c, 0xb1, 0xbb, 0x84, 0x40, 0x9b, 0x2c, 0xc9, 0xda, 0x07, 0xf2, 0xd2, 0x47, 0xf1,
+	0x01, 0x7c, 0x08, 0xef, 0xf5, 0x5a, 0x92, 0xc9, 0xae, 0x45, 0x56, 0xaf, 0x72, 0x92, 0xf3, 0xfb,
+	0xbe, 0xf3, 0x41, 0x3e, 0xf4, 0x2a, 0xaf, 0xaa, 0xfc, 0x72, 0xe6, 0x65, 0xd3, 0xc6, 0xb3, 0x63,
+	0x3b, 0x5d, 0xfb, 0xde, 0xac, 0xae, 0xab, 0xba, 0xf1, 0x2e, 0xb2, 0xab, 0x79, 0x56, 0xe4, 0xa5,
+	0xb9, 0xa8, 0x8b, 0xc5, 0xac, 0x2e, 0xaa, 0xd2, 0x74, 0x1b, 0x77, 0x5e, 0x57, 0x8b, 0x0a, 0x1f,
+	0x58, 0x8d, 0x9b, 0x4d, 0x1b, 0x77, 0x25, 0x77, 0xaf, 0x7d, 0xd7, 0xca, 0xf7, 0xf6, 0x97, 0xf6,
+	0xf3, 0xc2, 0xcb, 0xca, 0xb2, 0x5a, 0x64, 0x8b, 0xa2, 0x2a, 0x1b, 0xab, 0x1e, 0xfd, 0x18, 0xa2,
+	0x3d, 0xda, 0x1f, 0xa0, 0x4b, 0x7f, 0x68, 0x95, 0x50, 0x7e, 0xba, 0x1a, 0x7d, 0x1b, 0xa2, 0x9d,
+	0xf5, 0x6b, 0x7c, 0x0f, 0x6d, 0xa7, 0x3c, 0x91, 0x40, 0xd9, 0x09, 0x83, 0xd0, 0xf9, 0x0f, 0x6f,
+	0xa3, 0xad, 0x94, 0xbf, 0xe1, 0xe2, 0x1d, 0x77, 0x36, 0xf0, 0x1e, 0xda, 0xa1, 0x82, 0x53, 0x05,
+	0x1a, 0x8c, 0x3e, 0x97, 0x60, 0x14, 0xbc, 0x4d, 0x99, 0x82, 0xd0, 0x19, 0xe0, 0x5d, 0xf4, 0x80,
+	0xf1, 0x31, 0x89, 0x59, 0x68, 0x64, 0x4c, 0x28, 0x9c, 0x01, 0xd7, 0x26, 0x55, 0xb1, 0x33, 0xc4,
+	0x87, 0x68, 0x9f, 0x12, 0xce, 0x85, 0x36, 0xf0, 0x9e, 0xc6, 0x69, 0x08, 0x86, 0x2a, 0xa6, 0x41,
+	0x31, 0xd2, 0xb9, 0x38, 0xff, 0xe3, 0x23, 0xf4, 0xa4, 0x27, 0x12, 0xd0, 0x26, 0xd1, 0x44, 0xa7,
+	0x89, 0x39, 0x11, 0xea, 0x0f, 0xf0, 0x16, 0x7e, 0x8e, 0x8e, 0xd6, 0x83, 0xbd, 0x73, 0xb8, 0x52,
+	0x38, 0x9b, 0xf8, 0x31, 0xda, 0xed, 0x61, 0x4d, 0x54, 0x04, 0xda, 0x10, 0x1e, 0x2e, 0x41, 0x67,
+	0x0b, 0x3f, 0x44, 0xf7, 0xb5, 0x10, 0xe6, 0x8c, 0xf0, 0x73, 0x23, 0x24, 0x28, 0xa2, 0x99, 0xe0,
+	0x89, 0x73, 0x1b, 0xbf, 0x40, 0xcf, 0xec, 0xbb, 0x50, 0xa6, 0x3b, 0x95, 0x4a, 0x29, 0x94, 0x86,
+	0xf0, 0x66, 0x24, 0xc1, 0x6d, 0xa6, 0x3b, 0x98, 0xa2, 0xd7, 0xc9, 0xa9, 0x90, 0x92, 0xf1, 0xc8,
+	0x50, 0x72, 0x26, 0x09, 0x8b, 0xb8, 0x49, 0x48, 0x0c, 0x89, 0xa1, 0x22, 0xe5, 0x5a, 0x9d, 0xaf,
+	0x71, 0xe9, 0xf7, 0xa7, 0x84, 0x73, 0x88, 0x1d, 0x74, 0x23, 0x2b, 0x09, 0xdb, 0x90, 0x2c, 0xd1,
+	0xad, 0xdf, 0x09, 0x83, 0x38, 0x74, 0xb6, 0xf1, 0x53, 0x74, 0xd8, 0xaf, 0x53, 0x19, 0x12, 0x0d,
+	0x86, 0x43, 0x44, 0x34, 0x1b, 0xc3, 0xef, 0x38, 0xce, 0xdd, 0xe3, 0x9f, 0x1b, 0x68, 0x74, 0x51,
+	0x5d, 0xb9, 0xff, 0x2e, 0xcf, 0xf1, 0xa3, 0xf5, 0x3f, 0x5f, 0xb6, 0xdd, 0x91, 0x1b, 0x1f, 0xc2,
+	0x5e, 0x9e, 0x57, 0x97, 0x59, 0x99, 0xbb, 0x55, 0x9d, 0x7b, 0xf9, 0xac, 0xec, 0x9a, 0xb5, 0xac,
+	0xf2, 0xbc, 0x68, 0xfe, 0xd6, 0xec, 0x97, 0xf6, 0xf1, 0x79, 0x30, 0x8c, 0x08, 0xf9, 0x32, 0x38,
+	0x88, 0xac, 0x19, 0x99, 0x36, 0xae, 0x1d, 0xdb, 0x69, 0xec, 0xbb, 0xdd, 0xc9, 0xe6, 0xeb, 0x12,
+	0x98, 0x90, 0x69, 0x33, 0x59, 0x01, 0x93, 0xb1, 0x3f, 0xb1, 0xc0, 0xf7, 0xc1, 0xc8, 0x7e, 0x0d,
+	0x02, 0x32, 0x6d, 0x82, 0x60, 0x85, 0x04, 0xc1, 0xd8, 0x0f, 0x02, 0x0b, 0x7d, 0xdc, 0xec, 0xd2,
+	0xf9, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x46, 0xbc, 0x53, 0xb6, 0x76, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_draft_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_draft_error.pb.go
new file mode 100644
index 0000000..ad88665
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_draft_error.pb.go
@@ -0,0 +1,172 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_draft_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign draft errors.
+type CampaignDraftErrorEnum_CampaignDraftError int32
+
+const (
+	// Enum unspecified.
+	CampaignDraftErrorEnum_UNSPECIFIED CampaignDraftErrorEnum_CampaignDraftError = 0
+	// The received error code is not known in this version.
+	CampaignDraftErrorEnum_UNKNOWN CampaignDraftErrorEnum_CampaignDraftError = 1
+	// A draft with this name already exists for this campaign.
+	CampaignDraftErrorEnum_DUPLICATE_DRAFT_NAME CampaignDraftErrorEnum_CampaignDraftError = 2
+	// The draft is removed and cannot be transitioned to another status.
+	CampaignDraftErrorEnum_INVALID_STATUS_TRANSITION_FROM_REMOVED CampaignDraftErrorEnum_CampaignDraftError = 3
+	// The draft has been promoted and cannot be transitioned to the specified
+	// status.
+	CampaignDraftErrorEnum_INVALID_STATUS_TRANSITION_FROM_PROMOTED CampaignDraftErrorEnum_CampaignDraftError = 4
+	// The draft has failed to be promoted and cannot be transitioned to the
+	// specified status.
+	CampaignDraftErrorEnum_INVALID_STATUS_TRANSITION_FROM_PROMOTE_FAILED CampaignDraftErrorEnum_CampaignDraftError = 5
+	// This customer is not allowed to create drafts.
+	CampaignDraftErrorEnum_CUSTOMER_CANNOT_CREATE_DRAFT CampaignDraftErrorEnum_CampaignDraftError = 6
+	// This campaign is not allowed to create drafts.
+	CampaignDraftErrorEnum_CAMPAIGN_CANNOT_CREATE_DRAFT CampaignDraftErrorEnum_CampaignDraftError = 7
+	// This modification cannot be made on a draft.
+	CampaignDraftErrorEnum_INVALID_DRAFT_CHANGE CampaignDraftErrorEnum_CampaignDraftError = 8
+	// The draft cannot be transitioned to the specified status from its
+	// current status.
+	CampaignDraftErrorEnum_INVALID_STATUS_TRANSITION CampaignDraftErrorEnum_CampaignDraftError = 9
+	// The campaign has reached the maximum number of drafts that can be created
+	// for a campaign throughout its lifetime. No additional drafts can be
+	// created for this campaign. Removed drafts also count towards this limit.
+	CampaignDraftErrorEnum_MAX_NUMBER_OF_DRAFTS_PER_CAMPAIGN_REACHED CampaignDraftErrorEnum_CampaignDraftError = 10
+	// ListAsyncErrors was called without first promoting the draft.
+	CampaignDraftErrorEnum_LIST_ERRORS_FOR_PROMOTED_DRAFT_ONLY CampaignDraftErrorEnum_CampaignDraftError = 11
+)
+
+var CampaignDraftErrorEnum_CampaignDraftError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DUPLICATE_DRAFT_NAME",
+	3:  "INVALID_STATUS_TRANSITION_FROM_REMOVED",
+	4:  "INVALID_STATUS_TRANSITION_FROM_PROMOTED",
+	5:  "INVALID_STATUS_TRANSITION_FROM_PROMOTE_FAILED",
+	6:  "CUSTOMER_CANNOT_CREATE_DRAFT",
+	7:  "CAMPAIGN_CANNOT_CREATE_DRAFT",
+	8:  "INVALID_DRAFT_CHANGE",
+	9:  "INVALID_STATUS_TRANSITION",
+	10: "MAX_NUMBER_OF_DRAFTS_PER_CAMPAIGN_REACHED",
+	11: "LIST_ERRORS_FOR_PROMOTED_DRAFT_ONLY",
+}
+
+var CampaignDraftErrorEnum_CampaignDraftError_value = map[string]int32{
+	"UNSPECIFIED":                                   0,
+	"UNKNOWN":                                       1,
+	"DUPLICATE_DRAFT_NAME":                          2,
+	"INVALID_STATUS_TRANSITION_FROM_REMOVED":        3,
+	"INVALID_STATUS_TRANSITION_FROM_PROMOTED":       4,
+	"INVALID_STATUS_TRANSITION_FROM_PROMOTE_FAILED": 5,
+	"CUSTOMER_CANNOT_CREATE_DRAFT":                  6,
+	"CAMPAIGN_CANNOT_CREATE_DRAFT":                  7,
+	"INVALID_DRAFT_CHANGE":                          8,
+	"INVALID_STATUS_TRANSITION":                     9,
+	"MAX_NUMBER_OF_DRAFTS_PER_CAMPAIGN_REACHED":     10,
+	"LIST_ERRORS_FOR_PROMOTED_DRAFT_ONLY":           11,
+}
+
+func (x CampaignDraftErrorEnum_CampaignDraftError) String() string {
+	return proto.EnumName(CampaignDraftErrorEnum_CampaignDraftError_name, int32(x))
+}
+
+func (CampaignDraftErrorEnum_CampaignDraftError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_76fa885900f8cf92, []int{0, 0}
+}
+
+// Container for enum describing possible campaign draft errors.
+type CampaignDraftErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignDraftErrorEnum) Reset()         { *m = CampaignDraftErrorEnum{} }
+func (m *CampaignDraftErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignDraftErrorEnum) ProtoMessage()    {}
+func (*CampaignDraftErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_76fa885900f8cf92, []int{0}
+}
+
+func (m *CampaignDraftErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignDraftErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignDraftErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignDraftErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignDraftErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignDraftErrorEnum.Merge(m, src)
+}
+func (m *CampaignDraftErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignDraftErrorEnum.Size(m)
+}
+func (m *CampaignDraftErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignDraftErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignDraftErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignDraftErrorEnum_CampaignDraftError", CampaignDraftErrorEnum_CampaignDraftError_name, CampaignDraftErrorEnum_CampaignDraftError_value)
+	proto.RegisterType((*CampaignDraftErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignDraftErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_draft_error.proto", fileDescriptor_76fa885900f8cf92)
+}
+
+var fileDescriptor_76fa885900f8cf92 = []byte{
+	// 482 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xdf, 0x8a, 0xd3, 0x40,
+	0x14, 0xc6, 0xdd, 0x56, 0x77, 0x75, 0x7a, 0xe1, 0x30, 0x88, 0xff, 0x58, 0x17, 0xa9, 0xe0, 0xa2,
+	0xb2, 0x09, 0x92, 0x2b, 0xe3, 0xd5, 0x34, 0x33, 0xe9, 0x0e, 0x36, 0x33, 0x61, 0x32, 0x89, 0x7f,
+	0x28, 0x0c, 0x71, 0x53, 0x43, 0x61, 0x9b, 0x29, 0x49, 0xdd, 0x07, 0xf2, 0x52, 0xf0, 0x3d, 0xc4,
+	0x47, 0xf1, 0xd2, 0x27, 0x90, 0x64, 0xda, 0xdc, 0xac, 0xab, 0x5e, 0xe5, 0x70, 0xf2, 0xfb, 0xce,
+	0xf9, 0x0e, 0xf3, 0x81, 0x57, 0xa5, 0x31, 0xe5, 0xf9, 0xc2, 0xcd, 0x8b, 0xc6, 0xb5, 0x65, 0x5b,
+	0x5d, 0x78, 0xee, 0xa2, 0xae, 0x4d, 0xdd, 0xb8, 0x67, 0xf9, 0x6a, 0x9d, 0x2f, 0xcb, 0x4a, 0x17,
+	0x75, 0xfe, 0x69, 0xa3, 0xbb, 0xae, 0xb3, 0xae, 0xcd, 0xc6, 0xa0, 0x23, 0xcb, 0x3b, 0x79, 0xd1,
+	0x38, 0xbd, 0xd4, 0xb9, 0xf0, 0x1c, 0x2b, 0x7d, 0x78, 0xb8, 0x1b, 0xbd, 0x5e, 0xba, 0x79, 0x55,
+	0x99, 0x4d, 0xbe, 0x59, 0x9a, 0xaa, 0xb1, 0xea, 0xf1, 0xf7, 0x21, 0xb8, 0x1b, 0x6c, 0x87, 0x93,
+	0x76, 0x36, 0x6d, 0x55, 0xb4, 0xfa, 0xbc, 0x1a, 0x7f, 0x1b, 0x02, 0x74, 0xf9, 0x17, 0xba, 0x0d,
+	0x46, 0x29, 0x4f, 0x62, 0x1a, 0xb0, 0x90, 0x51, 0x02, 0xaf, 0xa1, 0x11, 0x38, 0x48, 0xf9, 0x1b,
+	0x2e, 0xde, 0x72, 0xb8, 0x87, 0xee, 0x83, 0x3b, 0x24, 0x8d, 0x67, 0x2c, 0xc0, 0x8a, 0x6a, 0x22,
+	0x71, 0xa8, 0x34, 0xc7, 0x11, 0x85, 0x03, 0xf4, 0x1c, 0x3c, 0x65, 0x3c, 0xc3, 0x33, 0x46, 0x74,
+	0xa2, 0xb0, 0x4a, 0x13, 0xad, 0x24, 0xe6, 0x09, 0x53, 0x4c, 0x70, 0x1d, 0x4a, 0x11, 0x69, 0x49,
+	0x23, 0x91, 0x51, 0x02, 0x87, 0xe8, 0x05, 0x38, 0xfe, 0x07, 0x1b, 0x4b, 0x11, 0x09, 0x45, 0x09,
+	0xbc, 0x8e, 0x5e, 0x82, 0x93, 0xff, 0x83, 0x75, 0x88, 0xd9, 0x8c, 0x12, 0x78, 0x03, 0x3d, 0x06,
+	0x87, 0x41, 0x9a, 0x28, 0x11, 0x51, 0xa9, 0x03, 0xcc, 0xb9, 0x50, 0x3a, 0x90, 0xb4, 0xb7, 0x0c,
+	0xf7, 0x3b, 0x02, 0x47, 0x31, 0x66, 0x53, 0xfe, 0x47, 0xe2, 0xa0, 0xbd, 0x74, 0xb7, 0xd6, 0xde,
+	0x19, 0x9c, 0x62, 0x3e, 0xa5, 0xf0, 0x26, 0x7a, 0x04, 0x1e, 0x5c, 0x69, 0x08, 0xde, 0x42, 0x27,
+	0xe0, 0x59, 0x84, 0xdf, 0x69, 0x9e, 0x46, 0x13, 0x2a, 0xb5, 0x08, 0xad, 0x3c, 0xd1, 0x71, 0x67,
+	0x66, 0xbb, 0x53, 0x52, 0x1c, 0x9c, 0x52, 0x02, 0x01, 0x3a, 0x06, 0x4f, 0x66, 0x2c, 0x51, 0x9a,
+	0x4a, 0x29, 0x64, 0xa2, 0x43, 0x21, 0xfb, 0xe3, 0xb7, 0x8b, 0x05, 0x9f, 0xbd, 0x87, 0xa3, 0xc9,
+	0xaf, 0x3d, 0x30, 0x3e, 0x33, 0x2b, 0xe7, 0xef, 0x79, 0x98, 0xdc, 0xbb, 0xfc, 0xa6, 0x71, 0x1b,
+	0x85, 0x78, 0xef, 0x03, 0xd9, 0x4a, 0x4b, 0x73, 0x9e, 0x57, 0xa5, 0x63, 0xea, 0xd2, 0x2d, 0x17,
+	0x55, 0x17, 0x94, 0x5d, 0x2a, 0xd7, 0xcb, 0xe6, 0xaa, 0x90, 0xbe, 0xb6, 0x9f, 0x2f, 0x83, 0xe1,
+	0x14, 0xe3, 0xaf, 0x83, 0xa3, 0xa9, 0x1d, 0x86, 0x8b, 0xc6, 0xb1, 0x65, 0x5b, 0x65, 0x9e, 0xd3,
+	0xad, 0x6c, 0x7e, 0xec, 0x80, 0x39, 0x2e, 0x9a, 0x79, 0x0f, 0xcc, 0x33, 0x6f, 0x6e, 0x81, 0x9f,
+	0x83, 0xb1, 0xed, 0xfa, 0x3e, 0x2e, 0x1a, 0xdf, 0xef, 0x11, 0xdf, 0xcf, 0x3c, 0xdf, 0xb7, 0xd0,
+	0xc7, 0xfd, 0xce, 0x9d, 0xf7, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x37, 0x8b, 0x71, 0x58, 0x41, 0x03,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_error.pb.go
new file mode 100644
index 0000000..131f221
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_error.pb.go
@@ -0,0 +1,338 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign errors.
+type CampaignErrorEnum_CampaignError int32
+
+const (
+	// Enum unspecified.
+	CampaignErrorEnum_UNSPECIFIED CampaignErrorEnum_CampaignError = 0
+	// The received error code is not known in this version.
+	CampaignErrorEnum_UNKNOWN CampaignErrorEnum_CampaignError = 1
+	// Cannot target content network.
+	CampaignErrorEnum_CANNOT_TARGET_CONTENT_NETWORK CampaignErrorEnum_CampaignError = 3
+	// Cannot target search network.
+	CampaignErrorEnum_CANNOT_TARGET_SEARCH_NETWORK CampaignErrorEnum_CampaignError = 4
+	// Cannot cover search network without google search network.
+	CampaignErrorEnum_CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH CampaignErrorEnum_CampaignError = 5
+	// Cannot target Google Search network for a CPM campaign.
+	CampaignErrorEnum_CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN CampaignErrorEnum_CampaignError = 6
+	// Must target at least one network.
+	CampaignErrorEnum_CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK CampaignErrorEnum_CampaignError = 7
+	// Only some Google partners are allowed to target partner search network.
+	CampaignErrorEnum_CANNOT_TARGET_PARTNER_SEARCH_NETWORK CampaignErrorEnum_CampaignError = 8
+	// Cannot target content network only as campaign has criteria-level bidding
+	// strategy.
+	CampaignErrorEnum_CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY CampaignErrorEnum_CampaignError = 9
+	// Cannot modify the start or end date such that the campaign duration would
+	// not contain the durations of all runnable trials.
+	CampaignErrorEnum_CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS CampaignErrorEnum_CampaignError = 10
+	// Cannot modify dates, budget or campaign name of a trial campaign.
+	CampaignErrorEnum_CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN CampaignErrorEnum_CampaignError = 11
+	// Trying to modify the name of an active or paused campaign, where the name
+	// is already assigned to another active or paused campaign.
+	CampaignErrorEnum_DUPLICATE_CAMPAIGN_NAME CampaignErrorEnum_CampaignError = 12
+	// Two fields are in conflicting modes.
+	CampaignErrorEnum_INCOMPATIBLE_CAMPAIGN_FIELD CampaignErrorEnum_CampaignError = 13
+	// Campaign name cannot be used.
+	CampaignErrorEnum_INVALID_CAMPAIGN_NAME CampaignErrorEnum_CampaignError = 14
+	// Given status is invalid.
+	CampaignErrorEnum_INVALID_AD_SERVING_OPTIMIZATION_STATUS CampaignErrorEnum_CampaignError = 15
+	// Error in the campaign level tracking URL.
+	CampaignErrorEnum_INVALID_TRACKING_URL CampaignErrorEnum_CampaignError = 16
+	// Cannot set both tracking URL template and tracking setting. A user has
+	// to clear legacy tracking setting in order to add tracking URL template.
+	CampaignErrorEnum_CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING CampaignErrorEnum_CampaignError = 17
+	// The maximum number of impressions for Frequency Cap should be an integer
+	// greater than 0.
+	CampaignErrorEnum_MAX_IMPRESSIONS_NOT_IN_RANGE CampaignErrorEnum_CampaignError = 18
+	// Only the Day, Week and Month time units are supported.
+	CampaignErrorEnum_TIME_UNIT_NOT_SUPPORTED CampaignErrorEnum_CampaignError = 19
+	// Operation not allowed on a campaign whose serving status has ended
+	CampaignErrorEnum_INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED CampaignErrorEnum_CampaignError = 20
+	// This budget is exclusively linked to a Campaign that is using experiments
+	// so it cannot be shared.
+	CampaignErrorEnum_BUDGET_CANNOT_BE_SHARED CampaignErrorEnum_CampaignError = 21
+	// Campaigns using experiments cannot use a shared budget.
+	CampaignErrorEnum_CAMPAIGN_CANNOT_USE_SHARED_BUDGET CampaignErrorEnum_CampaignError = 22
+	// A different budget cannot be assigned to a campaign when there are
+	// running or scheduled trials.
+	CampaignErrorEnum_CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS CampaignErrorEnum_CampaignError = 23
+	// No link found between the campaign and the label.
+	CampaignErrorEnum_CAMPAIGN_LABEL_DOES_NOT_EXIST CampaignErrorEnum_CampaignError = 24
+	// The label has already been attached to the campaign.
+	CampaignErrorEnum_CAMPAIGN_LABEL_ALREADY_EXISTS CampaignErrorEnum_CampaignError = 25
+	// A ShoppingSetting was not found when creating a shopping campaign.
+	CampaignErrorEnum_MISSING_SHOPPING_SETTING CampaignErrorEnum_CampaignError = 26
+	// The country in shopping setting is not an allowed country.
+	CampaignErrorEnum_INVALID_SHOPPING_SALES_COUNTRY CampaignErrorEnum_CampaignError = 27
+	// The requested channel type is not available according to the customer's
+	// account setting.
+	CampaignErrorEnum_ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE CampaignErrorEnum_CampaignError = 31
+	// The AdvertisingChannelSubType is not a valid subtype of the primary
+	// channel type.
+	CampaignErrorEnum_INVALID_ADVERTISING_CHANNEL_SUB_TYPE CampaignErrorEnum_CampaignError = 32
+	// At least one conversion must be selected.
+	CampaignErrorEnum_AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED CampaignErrorEnum_CampaignError = 33
+	// Setting ad rotation mode for a campaign is not allowed. Ad rotation mode
+	// at campaign is deprecated.
+	CampaignErrorEnum_CANNOT_SET_AD_ROTATION_MODE CampaignErrorEnum_CampaignError = 34
+	// Trying to change start date on a campaign that has started.
+	CampaignErrorEnum_CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED CampaignErrorEnum_CampaignError = 35
+	// Trying to modify a date into the past.
+	CampaignErrorEnum_CANNOT_SET_DATE_TO_PAST CampaignErrorEnum_CampaignError = 36
+	// Hotel center id in the hotel setting does not match any customer links.
+	CampaignErrorEnum_MISSING_HOTEL_CUSTOMER_LINK CampaignErrorEnum_CampaignError = 37
+	// Hotel center id in the hotel setting must match an active customer link.
+	CampaignErrorEnum_INVALID_HOTEL_CUSTOMER_LINK CampaignErrorEnum_CampaignError = 38
+	// Hotel setting was not found when creating a hotel ads campaign.
+	CampaignErrorEnum_MISSING_HOTEL_SETTING CampaignErrorEnum_CampaignError = 39
+	// A Campaign cannot use shared campaign budgets and be part of a campaign
+	// group.
+	CampaignErrorEnum_CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP CampaignErrorEnum_CampaignError = 40
+	// The app ID was not found.
+	CampaignErrorEnum_APP_NOT_FOUND CampaignErrorEnum_CampaignError = 41
+	// Campaign.shopping_setting.enable_local is not supported for the specified
+	// campaign type.
+	CampaignErrorEnum_SHOPPING_ENABLE_LOCAL_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE CampaignErrorEnum_CampaignError = 42
+	// The merchant does not support the creation of campaigns for Shopping
+	// Comparison Listing Ads.
+	CampaignErrorEnum_MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS CampaignErrorEnum_CampaignError = 43
+	// The App campaign for engagement cannot be created because there aren't
+	// enough installs.
+	CampaignErrorEnum_INSUFFICIENT_APP_INSTALLS_COUNT CampaignErrorEnum_CampaignError = 44
+	// The App campaign for engagement cannot be created because the app is
+	// sensitive.
+	CampaignErrorEnum_SENSITIVE_CATEGORY_APP CampaignErrorEnum_CampaignError = 45
+)
+
+var CampaignErrorEnum_CampaignError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "CANNOT_TARGET_CONTENT_NETWORK",
+	4:  "CANNOT_TARGET_SEARCH_NETWORK",
+	5:  "CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH",
+	6:  "CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN",
+	7:  "CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK",
+	8:  "CANNOT_TARGET_PARTNER_SEARCH_NETWORK",
+	9:  "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY",
+	10: "CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS",
+	11: "CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN",
+	12: "DUPLICATE_CAMPAIGN_NAME",
+	13: "INCOMPATIBLE_CAMPAIGN_FIELD",
+	14: "INVALID_CAMPAIGN_NAME",
+	15: "INVALID_AD_SERVING_OPTIMIZATION_STATUS",
+	16: "INVALID_TRACKING_URL",
+	17: "CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING",
+	18: "MAX_IMPRESSIONS_NOT_IN_RANGE",
+	19: "TIME_UNIT_NOT_SUPPORTED",
+	20: "INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED",
+	21: "BUDGET_CANNOT_BE_SHARED",
+	22: "CAMPAIGN_CANNOT_USE_SHARED_BUDGET",
+	23: "CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS",
+	24: "CAMPAIGN_LABEL_DOES_NOT_EXIST",
+	25: "CAMPAIGN_LABEL_ALREADY_EXISTS",
+	26: "MISSING_SHOPPING_SETTING",
+	27: "INVALID_SHOPPING_SALES_COUNTRY",
+	31: "ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
+	32: "INVALID_ADVERTISING_CHANNEL_SUB_TYPE",
+	33: "AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED",
+	34: "CANNOT_SET_AD_ROTATION_MODE",
+	35: "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED",
+	36: "CANNOT_SET_DATE_TO_PAST",
+	37: "MISSING_HOTEL_CUSTOMER_LINK",
+	38: "INVALID_HOTEL_CUSTOMER_LINK",
+	39: "MISSING_HOTEL_SETTING",
+	40: "CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP",
+	41: "APP_NOT_FOUND",
+	42: "SHOPPING_ENABLE_LOCAL_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE",
+	43: "MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS",
+	44: "INSUFFICIENT_APP_INSTALLS_COUNT",
+	45: "SENSITIVE_CATEGORY_APP",
+}
+
+var CampaignErrorEnum_CampaignError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"CANNOT_TARGET_CONTENT_NETWORK": 3,
+	"CANNOT_TARGET_SEARCH_NETWORK":  4,
+	"CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH":                      5,
+	"CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN":                            6,
+	"CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK":                               7,
+	"CANNOT_TARGET_PARTNER_SEARCH_NETWORK":                                    8,
+	"CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY": 9,
+	"CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS":                      10,
+	"CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN":                                        11,
+	"DUPLICATE_CAMPAIGN_NAME":                                                 12,
+	"INCOMPATIBLE_CAMPAIGN_FIELD":                                             13,
+	"INVALID_CAMPAIGN_NAME":                                                   14,
+	"INVALID_AD_SERVING_OPTIMIZATION_STATUS":                                  15,
+	"INVALID_TRACKING_URL":                                                    16,
+	"CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING":              17,
+	"MAX_IMPRESSIONS_NOT_IN_RANGE":                                            18,
+	"TIME_UNIT_NOT_SUPPORTED":                                                 19,
+	"INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED":                           20,
+	"BUDGET_CANNOT_BE_SHARED":                                                 21,
+	"CAMPAIGN_CANNOT_USE_SHARED_BUDGET":                                       22,
+	"CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS":                            23,
+	"CAMPAIGN_LABEL_DOES_NOT_EXIST":                                           24,
+	"CAMPAIGN_LABEL_ALREADY_EXISTS":                                           25,
+	"MISSING_SHOPPING_SETTING":                                                26,
+	"INVALID_SHOPPING_SALES_COUNTRY":                                          27,
+	"ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE":                 31,
+	"INVALID_ADVERTISING_CHANNEL_SUB_TYPE":                                    32,
+	"AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED":                                33,
+	"CANNOT_SET_AD_ROTATION_MODE":                                             34,
+	"CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED":                             35,
+	"CANNOT_SET_DATE_TO_PAST":                                                 36,
+	"MISSING_HOTEL_CUSTOMER_LINK":                                             37,
+	"INVALID_HOTEL_CUSTOMER_LINK":                                             38,
+	"MISSING_HOTEL_SETTING":                                                   39,
+	"CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP":          40,
+	"APP_NOT_FOUND":                                                           41,
+	"SHOPPING_ENABLE_LOCAL_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE":                   42,
+	"MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS":                         43,
+	"INSUFFICIENT_APP_INSTALLS_COUNT":                                         44,
+	"SENSITIVE_CATEGORY_APP":                                                  45,
+}
+
+func (x CampaignErrorEnum_CampaignError) String() string {
+	return proto.EnumName(CampaignErrorEnum_CampaignError_name, int32(x))
+}
+
+func (CampaignErrorEnum_CampaignError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1bc27234034fa291, []int{0, 0}
+}
+
+// Container for enum describing possible campaign errors.
+type CampaignErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignErrorEnum) Reset()         { *m = CampaignErrorEnum{} }
+func (m *CampaignErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignErrorEnum) ProtoMessage()    {}
+func (*CampaignErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1bc27234034fa291, []int{0}
+}
+
+func (m *CampaignErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignErrorEnum.Merge(m, src)
+}
+func (m *CampaignErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignErrorEnum.Size(m)
+}
+func (m *CampaignErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignErrorEnum_CampaignError", CampaignErrorEnum_CampaignError_name, CampaignErrorEnum_CampaignError_value)
+	proto.RegisterType((*CampaignErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_error.proto", fileDescriptor_1bc27234034fa291)
+}
+
+var fileDescriptor_1bc27234034fa291 = []byte{
+	// 1065 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xef, 0x6e, 0x13, 0x47,
+	0x10, 0x2f, 0xd0, 0x42, 0xbb, 0x34, 0x65, 0xd9, 0xf2, 0x1f, 0x0a, 0xc4, 0x04, 0x1a, 0x20, 0xb1,
+	0xdb, 0x5a, 0x6d, 0x55, 0x23, 0x21, 0x8d, 0x6f, 0xc7, 0xe7, 0x55, 0xf6, 0x76, 0x4f, 0xbb, 0x7b,
+	0x0e, 0x46, 0x91, 0x56, 0x2e, 0x89, 0xac, 0x48, 0xc4, 0x8e, 0xe2, 0x94, 0x67, 0xe9, 0xe7, 0x7e,
+	0xec, 0x87, 0x3e, 0x48, 0x1f, 0xa5, 0x52, 0xdf, 0xa1, 0xda, 0xdb, 0xbb, 0x4b, 0x0c, 0x34, 0x9f,
+	0xbc, 0xde, 0xf9, 0xcd, 0xdc, 0xcc, 0x6f, 0x7e, 0xb3, 0x43, 0xba, 0xd3, 0xf9, 0x7c, 0xfa, 0x76,
+	0xaf, 0x33, 0xd9, 0x5d, 0x74, 0xe2, 0x31, 0x9c, 0xde, 0x75, 0x3b, 0x7b, 0x47, 0x47, 0xf3, 0xa3,
+	0x45, 0xe7, 0xcd, 0xe4, 0xe0, 0x70, 0xb2, 0x3f, 0x9d, 0xf9, 0xf2, 0x7f, 0xfb, 0xf0, 0x68, 0x7e,
+	0x3c, 0x67, 0xf7, 0x23, 0xb2, 0x3d, 0xd9, 0x5d, 0xb4, 0x1b, 0xa7, 0xf6, 0xbb, 0x6e, 0x3b, 0x3a,
+	0xdd, 0xb9, 0x57, 0x07, 0x3d, 0xdc, 0xef, 0x4c, 0x66, 0xb3, 0xf9, 0xf1, 0xe4, 0x78, 0x7f, 0x3e,
+	0x5b, 0x44, 0xef, 0xd6, 0x5f, 0x2b, 0xe4, 0x6a, 0x52, 0x85, 0xc5, 0xe0, 0x80, 0xb3, 0xdf, 0x0e,
+	0x5a, 0xbf, 0xaf, 0x90, 0x95, 0xa5, 0x5b, 0x76, 0x85, 0x5c, 0x2e, 0x94, 0xcd, 0x31, 0x11, 0x03,
+	0x81, 0x9c, 0x7e, 0xc2, 0x2e, 0x93, 0x4b, 0x85, 0xda, 0x52, 0x7a, 0x5b, 0xd1, 0x73, 0x6c, 0x95,
+	0x7c, 0x93, 0x80, 0x52, 0xda, 0x79, 0x07, 0x26, 0x45, 0xe7, 0x13, 0xad, 0x1c, 0x2a, 0xe7, 0x15,
+	0xba, 0x6d, 0x6d, 0xb6, 0xe8, 0x05, 0xf6, 0x90, 0xdc, 0x5b, 0x86, 0x58, 0x04, 0x93, 0x0c, 0x1b,
+	0xc4, 0xa7, 0xec, 0x27, 0xf2, 0xc3, 0x59, 0x08, 0xbf, 0x2d, 0xdc, 0x50, 0x17, 0xce, 0xa7, 0x5a,
+	0xa7, 0x12, 0x2b, 0x2b, 0xfd, 0x8c, 0x7d, 0x47, 0x36, 0x96, 0xfd, 0x96, 0x00, 0x7e, 0xa0, 0x8d,
+	0x4f, 0xf2, 0xcc, 0x27, 0x90, 0xe5, 0x20, 0x52, 0x45, 0x2f, 0xb2, 0x4d, 0xf2, 0xb4, 0xfe, 0xe7,
+	0xb3, 0xc2, 0x36, 0x8e, 0xe0, 0xbc, 0x44, 0xb0, 0xce, 0x6b, 0x85, 0x4d, 0x62, 0x97, 0xd8, 0x3a,
+	0x59, 0x5b, 0xfe, 0x40, 0x0e, 0xc6, 0x29, 0x34, 0xef, 0x97, 0xf0, 0x39, 0xdb, 0x22, 0xe9, 0x99,
+	0x3c, 0x78, 0xad, 0xe4, 0xb8, 0x2c, 0xc4, 0x27, 0x46, 0x38, 0x34, 0x02, 0xbc, 0xc4, 0x11, 0x4a,
+	0xdf, 0x17, 0x9c, 0x0b, 0x95, 0x7a, 0xeb, 0x0c, 0x38, 0x4c, 0xc7, 0xf4, 0x8b, 0xc8, 0x47, 0x95,
+	0x25, 0x2f, 0x0c, 0x38, 0xa1, 0xab, 0x74, 0x43, 0x54, 0x10, 0xca, 0x83, 0x94, 0xde, 0x14, 0x4a,
+	0x41, 0x5f, 0xa2, 0x77, 0x46, 0x80, 0xb4, 0x94, 0xb0, 0x35, 0xf2, 0xb0, 0x4a, 0x22, 0xd3, 0x5c,
+	0x0c, 0xc6, 0x25, 0x03, 0xa5, 0xf5, 0x84, 0x83, 0xcb, 0xec, 0x2e, 0xb9, 0xc9, 0x8b, 0x5c, 0x8a,
+	0x04, 0x1c, 0x36, 0xf7, 0x5e, 0x41, 0x86, 0xf4, 0x4b, 0xf6, 0x80, 0xdc, 0x15, 0x2a, 0xd1, 0x59,
+	0x0e, 0x4e, 0x84, 0xd8, 0x8d, 0x7d, 0x20, 0x50, 0x72, 0xba, 0xc2, 0x6e, 0x93, 0xeb, 0x42, 0x8d,
+	0x40, 0x0a, 0xfe, 0x9e, 0xef, 0x57, 0xec, 0x19, 0x79, 0x52, 0x9b, 0x80, 0x7b, 0x8b, 0x66, 0x14,
+	0xea, 0xd2, 0xb9, 0x13, 0x99, 0x78, 0x1d, 0x8b, 0xb0, 0x0e, 0x5c, 0x61, 0xe9, 0x15, 0x76, 0x8b,
+	0x5c, 0xab, 0xb1, 0xce, 0x40, 0xb2, 0x15, 0x90, 0x85, 0x91, 0x94, 0xb2, 0x97, 0xa4, 0x57, 0x15,
+	0x61, 0xd1, 0xf9, 0xbe, 0x76, 0xc3, 0x25, 0x84, 0x77, 0x98, 0xe5, 0x32, 0xa4, 0x0e, 0xea, 0x94,
+	0xaf, 0x45, 0xe7, 0x84, 0x4a, 0xe9, 0xd5, 0x20, 0xb7, 0x0c, 0x5e, 0x79, 0x91, 0xe5, 0x06, 0xad,
+	0x15, 0x5a, 0x59, 0x1f, 0x82, 0x09, 0xe5, 0x0d, 0xa8, 0x14, 0x29, 0x0b, 0x04, 0x38, 0x91, 0xa1,
+	0x2f, 0x94, 0x70, 0xa5, 0xcd, 0x16, 0x79, 0xae, 0x8d, 0x43, 0x4e, 0xbf, 0x66, 0xdf, 0x93, 0xcd,
+	0x3a, 0x31, 0x9d, 0x63, 0xc5, 0xbd, 0x18, 0x34, 0xe5, 0xc4, 0x0a, 0xfc, 0x10, 0xac, 0x47, 0xc5,
+	0x91, 0xd3, 0x6b, 0x21, 0x5e, 0xbf, 0xe0, 0x65, 0xd3, 0x63, 0xe2, 0x7d, 0xf4, 0x76, 0x08, 0x06,
+	0x39, 0xbd, 0xce, 0x1e, 0x93, 0xd5, 0x86, 0xa7, 0xca, 0x5c, 0xd8, 0xda, 0xee, 0xa3, 0x1f, 0xbd,
+	0x71, 0x4a, 0xca, 0xc9, 0x30, 0xa4, 0x59, 0x59, 0xbc, 0x56, 0x27, 0x34, 0x97, 0xea, 0xa9, 0x9a,
+	0x7d, 0x33, 0x4e, 0x5e, 0x65, 0x91, 0xd0, 0x47, 0xe9, 0xb9, 0xc6, 0x58, 0x2b, 0xbe, 0x12, 0xd6,
+	0xd1, 0x5b, 0x1f, 0x81, 0x80, 0x34, 0x08, 0x7c, 0x1c, 0x11, 0x96, 0xde, 0x66, 0xf7, 0xc8, 0xad,
+	0x4c, 0x58, 0x5b, 0x56, 0x36, 0xd4, 0x79, 0x7e, 0x9a, 0xcb, 0x3b, 0xac, 0x45, 0xee, 0xd7, 0x64,
+	0x9c, 0x58, 0x41, 0xa2, 0xf5, 0x89, 0x2e, 0x94, 0x33, 0x63, 0x7a, 0x97, 0xbd, 0x20, 0x3f, 0x03,
+	0x1f, 0xa1, 0x71, 0xa2, 0x8c, 0x12, 0xd2, 0x57, 0x28, 0xbd, 0x1b, 0xe7, 0x58, 0x26, 0x03, 0x23,
+	0x10, 0xb2, 0xd4, 0x69, 0x50, 0x23, 0x24, 0xa5, 0x67, 0x69, 0xa6, 0x0f, 0xc2, 0x80, 0x9d, 0x48,
+	0xe6, 0xc3, 0x20, 0xb6, 0xe8, 0x47, 0xe4, 0x43, 0xb6, 0x41, 0xd6, 0x97, 0x86, 0x34, 0xd1, 0x6a,
+	0x84, 0xc6, 0x36, 0x93, 0x11, 0x38, 0x47, 0x89, 0x49, 0xe8, 0xe2, 0x6a, 0x90, 0xf1, 0x29, 0x11,
+	0x01, 0xf7, 0x46, 0xbb, 0x6a, 0x8c, 0x34, 0x47, 0xda, 0x62, 0x1d, 0xf2, 0x7c, 0x79, 0x54, 0xac,
+	0x03, 0xe3, 0x3c, 0x0f, 0xc2, 0x12, 0x83, 0x86, 0xa7, 0xf2, 0x16, 0x39, 0x7d, 0x14, 0x9a, 0x7c,
+	0x2a, 0x62, 0x89, 0x73, 0xda, 0xe7, 0x60, 0x1d, 0x5d, 0x0b, 0x9f, 0xab, 0x59, 0x1c, 0x6a, 0x87,
+	0xd2, 0x27, 0x85, 0x75, 0x3a, 0x43, 0xe3, 0xa5, 0x50, 0x5b, 0xf4, 0x71, 0x1c, 0xab, 0x58, 0xe7,
+	0xc7, 0x00, 0x4f, 0xc2, 0x58, 0x2d, 0x47, 0xa8, 0x9b, 0xf0, 0x2d, 0xeb, 0x93, 0x97, 0x1f, 0x0a,
+	0xa7, 0xe9, 0x6b, 0xa5, 0x93, 0xed, 0xa1, 0x90, 0x58, 0x3e, 0x4f, 0x5e, 0x0f, 0x4e, 0xac, 0xa9,
+	0xd1, 0x45, 0x4e, 0xd7, 0xd9, 0x55, 0xb2, 0x02, 0x79, 0x5e, 0xf6, 0x63, 0xa0, 0x0b, 0xc5, 0xe9,
+	0x53, 0xf6, 0x0b, 0xf9, 0xb1, 0xe9, 0x29, 0xc6, 0x87, 0x44, 0xea, 0x04, 0xe4, 0xf2, 0x44, 0xc4,
+	0x47, 0xb4, 0x0e, 0x57, 0xf6, 0xe2, 0x19, 0xeb, 0x92, 0x4e, 0x86, 0x26, 0x34, 0x29, 0xce, 0x0f,
+	0x48, 0xa9, 0xb7, 0x6b, 0x6c, 0x78, 0x3b, 0x8c, 0xb0, 0x5a, 0x79, 0x29, 0x6c, 0x28, 0xc1, 0x03,
+	0xb7, 0xf4, 0x39, 0x7b, 0x44, 0x1e, 0x08, 0x65, 0x8b, 0xc1, 0x40, 0x24, 0x22, 0x3c, 0x8c, 0x21,
+	0x1f, 0xa1, 0xac, 0x03, 0x29, 0x2b, 0x39, 0xd1, 0x0d, 0x76, 0x87, 0xdc, 0xb0, 0xa8, 0xac, 0x70,
+	0x62, 0x14, 0xde, 0x1e, 0x87, 0xa9, 0x36, 0xe3, 0x00, 0xa5, 0x9b, 0xfd, 0x7f, 0xcf, 0x91, 0xd6,
+	0x9b, 0xf9, 0x41, 0xfb, 0xec, 0xad, 0xd7, 0x67, 0x4b, 0xeb, 0x2b, 0x0f, 0xbb, 0x2e, 0x3f, 0xf7,
+	0x9a, 0x57, 0x5e, 0xd3, 0xf9, 0xdb, 0xc9, 0x6c, 0xda, 0x9e, 0x1f, 0x4d, 0x3b, 0xd3, 0xbd, 0x59,
+	0xb9, 0x09, 0xeb, 0x85, 0x7b, 0xb8, 0xbf, 0xf8, 0xbf, 0xfd, 0xfb, 0x22, 0xfe, 0xfc, 0x71, 0xfe,
+	0x42, 0x0a, 0xf0, 0xe7, 0xf9, 0xfb, 0x69, 0x0c, 0x06, 0xbb, 0x8b, 0x76, 0x3c, 0x86, 0xd3, 0xa8,
+	0xdb, 0x2e, 0x3f, 0xb9, 0xf8, 0xbb, 0x06, 0xec, 0xc0, 0xee, 0x62, 0xa7, 0x01, 0xec, 0x8c, 0xba,
+	0x3b, 0x11, 0xf0, 0xcf, 0xf9, 0x56, 0xbc, 0xed, 0xf5, 0x60, 0x77, 0xd1, 0xeb, 0x35, 0x90, 0x5e,
+	0x6f, 0xd4, 0xed, 0xf5, 0x22, 0xe8, 0xd7, 0x8b, 0x65, 0x76, 0xdd, 0xff, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0xbb, 0x55, 0x7e, 0xfc, 0x1c, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_experiment_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_experiment_error.pb.go
new file mode 100644
index 0000000..e3b924f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_experiment_error.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_experiment_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign experiment errors.
+type CampaignExperimentErrorEnum_CampaignExperimentError int32
+
+const (
+	// Enum unspecified.
+	CampaignExperimentErrorEnum_UNSPECIFIED CampaignExperimentErrorEnum_CampaignExperimentError = 0
+	// The received error code is not known in this version.
+	CampaignExperimentErrorEnum_UNKNOWN CampaignExperimentErrorEnum_CampaignExperimentError = 1
+	// An active campaign or experiment with this name already exists.
+	CampaignExperimentErrorEnum_DUPLICATE_NAME CampaignExperimentErrorEnum_CampaignExperimentError = 2
+	// Experiment cannot be updated from the current state to the
+	// requested target state. For example, an experiment can only graduate
+	// if its status is ENABLED.
+	CampaignExperimentErrorEnum_INVALID_TRANSITION CampaignExperimentErrorEnum_CampaignExperimentError = 3
+	// Cannot create an experiment from a campaign using an explicitly shared
+	// budget.
+	CampaignExperimentErrorEnum_CANNOT_CREATE_EXPERIMENT_WITH_SHARED_BUDGET CampaignExperimentErrorEnum_CampaignExperimentError = 4
+	// Cannot create an experiment for a removed base campaign.
+	CampaignExperimentErrorEnum_CANNOT_CREATE_EXPERIMENT_FOR_REMOVED_BASE_CAMPAIGN CampaignExperimentErrorEnum_CampaignExperimentError = 5
+	// Cannot create an experiment from a draft, which has a status other than
+	// proposed.
+	CampaignExperimentErrorEnum_CANNOT_CREATE_EXPERIMENT_FOR_NON_PROPOSED_DRAFT CampaignExperimentErrorEnum_CampaignExperimentError = 6
+	// This customer is not allowed to create an experiment.
+	CampaignExperimentErrorEnum_CUSTOMER_CANNOT_CREATE_EXPERIMENT CampaignExperimentErrorEnum_CampaignExperimentError = 7
+	// This campaign is not allowed to create an experiment.
+	CampaignExperimentErrorEnum_CAMPAIGN_CANNOT_CREATE_EXPERIMENT CampaignExperimentErrorEnum_CampaignExperimentError = 8
+	// Trying to set an experiment duration which overlaps with another
+	// experiment.
+	CampaignExperimentErrorEnum_EXPERIMENT_DURATIONS_MUST_NOT_OVERLAP CampaignExperimentErrorEnum_CampaignExperimentError = 9
+	// All non-removed experiments must start and end within their campaign's
+	// duration.
+	CampaignExperimentErrorEnum_EXPERIMENT_DURATION_MUST_BE_WITHIN_CAMPAIGN_DURATION CampaignExperimentErrorEnum_CampaignExperimentError = 10
+	// The experiment cannot be modified because its status is in a terminal
+	// state, such as REMOVED.
+	CampaignExperimentErrorEnum_CANNOT_MUTATE_EXPERIMENT_DUE_TO_STATUS CampaignExperimentErrorEnum_CampaignExperimentError = 11
+)
+
+var CampaignExperimentErrorEnum_CampaignExperimentError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DUPLICATE_NAME",
+	3:  "INVALID_TRANSITION",
+	4:  "CANNOT_CREATE_EXPERIMENT_WITH_SHARED_BUDGET",
+	5:  "CANNOT_CREATE_EXPERIMENT_FOR_REMOVED_BASE_CAMPAIGN",
+	6:  "CANNOT_CREATE_EXPERIMENT_FOR_NON_PROPOSED_DRAFT",
+	7:  "CUSTOMER_CANNOT_CREATE_EXPERIMENT",
+	8:  "CAMPAIGN_CANNOT_CREATE_EXPERIMENT",
+	9:  "EXPERIMENT_DURATIONS_MUST_NOT_OVERLAP",
+	10: "EXPERIMENT_DURATION_MUST_BE_WITHIN_CAMPAIGN_DURATION",
+	11: "CANNOT_MUTATE_EXPERIMENT_DUE_TO_STATUS",
+}
+
+var CampaignExperimentErrorEnum_CampaignExperimentError_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"DUPLICATE_NAME":     2,
+	"INVALID_TRANSITION": 3,
+	"CANNOT_CREATE_EXPERIMENT_WITH_SHARED_BUDGET":          4,
+	"CANNOT_CREATE_EXPERIMENT_FOR_REMOVED_BASE_CAMPAIGN":   5,
+	"CANNOT_CREATE_EXPERIMENT_FOR_NON_PROPOSED_DRAFT":      6,
+	"CUSTOMER_CANNOT_CREATE_EXPERIMENT":                    7,
+	"CAMPAIGN_CANNOT_CREATE_EXPERIMENT":                    8,
+	"EXPERIMENT_DURATIONS_MUST_NOT_OVERLAP":                9,
+	"EXPERIMENT_DURATION_MUST_BE_WITHIN_CAMPAIGN_DURATION": 10,
+	"CANNOT_MUTATE_EXPERIMENT_DUE_TO_STATUS":               11,
+}
+
+func (x CampaignExperimentErrorEnum_CampaignExperimentError) String() string {
+	return proto.EnumName(CampaignExperimentErrorEnum_CampaignExperimentError_name, int32(x))
+}
+
+func (CampaignExperimentErrorEnum_CampaignExperimentError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_f9f22a1dd7457e60, []int{0, 0}
+}
+
+// Container for enum describing possible campaign experiment errors.
+type CampaignExperimentErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignExperimentErrorEnum) Reset()         { *m = CampaignExperimentErrorEnum{} }
+func (m *CampaignExperimentErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperimentErrorEnum) ProtoMessage()    {}
+func (*CampaignExperimentErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9f22a1dd7457e60, []int{0}
+}
+
+func (m *CampaignExperimentErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperimentErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignExperimentErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperimentErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperimentErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperimentErrorEnum.Merge(m, src)
+}
+func (m *CampaignExperimentErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperimentErrorEnum.Size(m)
+}
+func (m *CampaignExperimentErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperimentErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperimentErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignExperimentErrorEnum_CampaignExperimentError", CampaignExperimentErrorEnum_CampaignExperimentError_name, CampaignExperimentErrorEnum_CampaignExperimentError_value)
+	proto.RegisterType((*CampaignExperimentErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignExperimentErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_experiment_error.proto", fileDescriptor_f9f22a1dd7457e60)
+}
+
+var fileDescriptor_f9f22a1dd7457e60 = []byte{
+	// 502 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x8b, 0xd3, 0x30,
+	0x1c, 0xc7, 0xbd, 0xed, 0xbc, 0xd3, 0x0c, 0x34, 0xe4, 0x41, 0x41, 0x8f, 0x03, 0x07, 0x27, 0xa8,
+	0xd0, 0x82, 0x15, 0x91, 0x0a, 0x42, 0xd6, 0xfe, 0xb6, 0x0b, 0xae, 0x49, 0x49, 0xd3, 0x9e, 0xc8,
+	0x20, 0xd4, 0x5b, 0x29, 0x83, 0x5b, 0x3b, 0xda, 0x79, 0xf8, 0xe8, 0xdf, 0xe2, 0xa3, 0x7f, 0x8a,
+	0x7f, 0x85, 0xcf, 0xfe, 0x03, 0xbe, 0x4a, 0x9b, 0xad, 0x88, 0xd8, 0x7b, 0xea, 0x8f, 0xe6, 0xf3,
+	0xc9, 0x37, 0x09, 0x5f, 0xf4, 0x2e, 0x2f, 0xcb, 0xfc, 0x2a, 0xb3, 0xd3, 0x65, 0x6d, 0x9b, 0xb1,
+	0x99, 0xae, 0x1d, 0x3b, 0xab, 0xaa, 0xb2, 0xaa, 0xed, 0xcb, 0x74, 0xbd, 0x49, 0x57, 0x79, 0xa1,
+	0xb3, 0x2f, 0x9b, 0xac, 0x5a, 0xad, 0xb3, 0x62, 0xab, 0xdb, 0x25, 0x6b, 0x53, 0x95, 0xdb, 0x92,
+	0x9c, 0x1a, 0xc9, 0x4a, 0x97, 0xb5, 0xd5, 0xf9, 0xd6, 0xb5, 0x63, 0x19, 0xff, 0xd1, 0xc9, 0x7e,
+	0xff, 0xcd, 0xca, 0x4e, 0x8b, 0xa2, 0xdc, 0xa6, 0xdb, 0x55, 0x59, 0xd4, 0xc6, 0x1e, 0x7f, 0x3d,
+	0x44, 0x8f, 0xbd, 0x5d, 0x02, 0x74, 0x01, 0xd0, 0xa8, 0x50, 0x7c, 0x5e, 0x8f, 0x7f, 0x0e, 0xd1,
+	0xc3, 0x9e, 0x75, 0x72, 0x1f, 0x8d, 0x62, 0x1e, 0x85, 0xe0, 0xb1, 0x29, 0x03, 0x1f, 0xdf, 0x22,
+	0x23, 0x74, 0x1c, 0xf3, 0xf7, 0x5c, 0x5c, 0x70, 0x7c, 0x40, 0x08, 0xba, 0xe7, 0xc7, 0xe1, 0x9c,
+	0x79, 0x54, 0x81, 0xe6, 0x34, 0x00, 0x3c, 0x20, 0x0f, 0x10, 0x61, 0x3c, 0xa1, 0x73, 0xe6, 0x6b,
+	0x25, 0x29, 0x8f, 0x98, 0x62, 0x82, 0xe3, 0x21, 0xb1, 0xd1, 0x0b, 0x8f, 0x72, 0x2e, 0x94, 0xf6,
+	0x24, 0x34, 0x3c, 0x7c, 0x08, 0x41, 0xb2, 0x00, 0xb8, 0xd2, 0x17, 0x4c, 0x9d, 0xeb, 0xe8, 0x9c,
+	0x4a, 0xf0, 0xf5, 0x24, 0xf6, 0x67, 0xa0, 0xf0, 0x21, 0x79, 0x8d, 0x5e, 0xf6, 0x0a, 0x53, 0x21,
+	0xb5, 0x84, 0x40, 0x24, 0x8d, 0x40, 0x23, 0xd0, 0x1e, 0x0d, 0x42, 0xca, 0x66, 0x1c, 0xdf, 0x26,
+	0x0e, 0xb2, 0x6f, 0xf4, 0xb8, 0xe0, 0x3a, 0x94, 0x22, 0x14, 0x11, 0xf8, 0xda, 0x97, 0x74, 0xaa,
+	0xf0, 0x11, 0x39, 0x43, 0x4f, 0xbc, 0x38, 0x52, 0x22, 0x00, 0xa9, 0xfb, 0x6c, 0x7c, 0xdc, 0x62,
+	0xbb, 0xa4, 0x7e, 0xec, 0x0e, 0x79, 0x86, 0xce, 0xfe, 0x0a, 0xf5, 0x63, 0x49, 0x9b, 0x47, 0x88,
+	0x74, 0x10, 0x47, 0x4a, 0x37, 0x92, 0x48, 0x40, 0xce, 0x69, 0x88, 0xef, 0x92, 0x37, 0xe8, 0xd5,
+	0x7f, 0x50, 0x43, 0x4e, 0xa0, 0x7d, 0x19, 0xc6, 0xbb, 0xeb, 0x75, 0x00, 0x46, 0xe4, 0x39, 0x7a,
+	0xba, 0x3b, 0x42, 0x10, 0xab, 0x7f, 0xee, 0xe9, 0xc7, 0xa0, 0x95, 0xd0, 0x91, 0xa2, 0x2a, 0x8e,
+	0xf0, 0x68, 0xf2, 0xfb, 0x00, 0x8d, 0x2f, 0xcb, 0xb5, 0x75, 0x73, 0x8f, 0x26, 0x27, 0x3d, 0x35,
+	0x08, 0x9b, 0x1e, 0x85, 0x07, 0x1f, 0xfd, 0x9d, 0x9f, 0x97, 0x57, 0x69, 0x91, 0x5b, 0x65, 0x95,
+	0xdb, 0x79, 0x56, 0xb4, 0x2d, 0xdb, 0xf7, 0x7a, 0xb3, 0xaa, 0xfb, 0x6a, 0xfe, 0xd6, 0x7c, 0xbe,
+	0x0d, 0x86, 0x33, 0x4a, 0xbf, 0x0f, 0x4e, 0x67, 0x66, 0x33, 0xba, 0xac, 0x2d, 0x33, 0x36, 0x53,
+	0xe2, 0x58, 0x6d, 0x64, 0xfd, 0x63, 0x0f, 0x2c, 0xe8, 0xb2, 0x5e, 0x74, 0xc0, 0x22, 0x71, 0x16,
+	0x06, 0xf8, 0x35, 0x18, 0x9b, 0xbf, 0xae, 0x4b, 0x97, 0xb5, 0xeb, 0x76, 0x88, 0xeb, 0x26, 0x8e,
+	0xeb, 0x1a, 0xe8, 0xd3, 0x51, 0x7b, 0x3a, 0xe7, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x5e,
+	0x9e, 0xd9, 0x83, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_feed_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_feed_error.pb.go
new file mode 100644
index 0000000..f7d39bf
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_feed_error.pb.go
@@ -0,0 +1,154 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_feed_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign feed errors.
+type CampaignFeedErrorEnum_CampaignFeedError int32
+
+const (
+	// Enum unspecified.
+	CampaignFeedErrorEnum_UNSPECIFIED CampaignFeedErrorEnum_CampaignFeedError = 0
+	// The received error code is not known in this version.
+	CampaignFeedErrorEnum_UNKNOWN CampaignFeedErrorEnum_CampaignFeedError = 1
+	// An active feed already exists for this campaign and placeholder type.
+	CampaignFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 2
+	// The specified feed is removed.
+	CampaignFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED CampaignFeedErrorEnum_CampaignFeedError = 4
+	// The CampaignFeed already exists. UPDATE should be used to modify the
+	// existing CampaignFeed.
+	CampaignFeedErrorEnum_CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED CampaignFeedErrorEnum_CampaignFeedError = 5
+	// Cannot update removed campaign feed.
+	CampaignFeedErrorEnum_CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED CampaignFeedErrorEnum_CampaignFeedError = 6
+	// Invalid placeholder type.
+	CampaignFeedErrorEnum_INVALID_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 7
+	// Feed mapping for this placeholder type does not exist.
+	CampaignFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 8
+	// Location CampaignFeeds cannot be created unless there is a location
+	// CustomerFeed for the specified feed.
+	CampaignFeedErrorEnum_NO_EXISTING_LOCATION_CUSTOMER_FEED CampaignFeedErrorEnum_CampaignFeedError = 9
+)
+
+var CampaignFeedErrorEnum_CampaignFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	4: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	5: "CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED",
+	6: "CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED",
+	7: "INVALID_PLACEHOLDER_TYPE",
+	8: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+	9: "NO_EXISTING_LOCATION_CUSTOMER_FEED",
+}
+
+var CampaignFeedErrorEnum_CampaignFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":     2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":               4,
+	"CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED": 5,
+	"CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED":          6,
+	"INVALID_PLACEHOLDER_TYPE":                     7,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE":     8,
+	"NO_EXISTING_LOCATION_CUSTOMER_FEED":           9,
+}
+
+func (x CampaignFeedErrorEnum_CampaignFeedError) String() string {
+	return proto.EnumName(CampaignFeedErrorEnum_CampaignFeedError_name, int32(x))
+}
+
+func (CampaignFeedErrorEnum_CampaignFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a4307471cace193a, []int{0, 0}
+}
+
+// Container for enum describing possible campaign feed errors.
+type CampaignFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignFeedErrorEnum) Reset()         { *m = CampaignFeedErrorEnum{} }
+func (m *CampaignFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeedErrorEnum) ProtoMessage()    {}
+func (*CampaignFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a4307471cace193a, []int{0}
+}
+
+func (m *CampaignFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeedErrorEnum.Merge(m, src)
+}
+func (m *CampaignFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Size(m)
+}
+func (m *CampaignFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignFeedErrorEnum_CampaignFeedError", CampaignFeedErrorEnum_CampaignFeedError_name, CampaignFeedErrorEnum_CampaignFeedError_value)
+	proto.RegisterType((*CampaignFeedErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignFeedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_feed_error.proto", fileDescriptor_a4307471cace193a)
+}
+
+var fileDescriptor_a4307471cace193a = []byte{
+	// 445 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8e, 0xd3, 0x30,
+	0x14, 0x86, 0x69, 0x80, 0x19, 0xf0, 0x2c, 0x28, 0x96, 0x40, 0x08, 0x8d, 0xba, 0x08, 0x12, 0xb0,
+	0x18, 0x39, 0x48, 0xd9, 0xa0, 0xb0, 0xf2, 0x24, 0x4e, 0xb1, 0x48, 0xec, 0x28, 0x49, 0x03, 0x45,
+	0x95, 0xac, 0x30, 0x09, 0x51, 0xa5, 0x69, 0x5c, 0xc5, 0xa5, 0x07, 0x62, 0xc9, 0x51, 0x58, 0x72,
+	0x0c, 0xc4, 0x86, 0x1b, 0x20, 0xc7, 0x6d, 0x50, 0x55, 0x98, 0x55, 0x7e, 0x39, 0xdf, 0xff, 0xbf,
+	0x67, 0xbf, 0x07, 0x5e, 0x37, 0x52, 0x36, 0xd7, 0xb5, 0x53, 0x56, 0xca, 0x31, 0x52, 0xab, 0xad,
+	0xeb, 0xd4, 0x5d, 0x27, 0x3b, 0xe5, 0x5c, 0x95, 0xab, 0x75, 0xb9, 0x6c, 0x5a, 0xf1, 0xb9, 0xae,
+	0x2b, 0xd1, 0x1f, 0xa2, 0x75, 0x27, 0x37, 0x12, 0x4e, 0x0c, 0x8e, 0xca, 0x4a, 0xa1, 0xc1, 0x89,
+	0xb6, 0x2e, 0x32, 0xce, 0xa7, 0xe7, 0xfb, 0xe4, 0xf5, 0xd2, 0x29, 0xdb, 0x56, 0x6e, 0xca, 0xcd,
+	0x52, 0xb6, 0xca, 0xb8, 0xed, 0x5f, 0x16, 0x78, 0xe4, 0xef, 0xb2, 0xc3, 0xba, 0xae, 0x88, 0x36,
+	0x91, 0xf6, 0xcb, 0xca, 0xfe, 0x61, 0x81, 0x87, 0x47, 0x7f, 0xe0, 0x03, 0x70, 0x36, 0x63, 0x59,
+	0x42, 0x7c, 0x1a, 0x52, 0x12, 0x8c, 0x6f, 0xc1, 0x33, 0x70, 0x3a, 0x63, 0xef, 0x18, 0x7f, 0xcf,
+	0xc6, 0x23, 0x78, 0x01, 0x5e, 0x86, 0x84, 0x04, 0x02, 0x47, 0x29, 0xc1, 0xc1, 0x5c, 0x90, 0x0f,
+	0x34, 0xcb, 0x33, 0x11, 0xf2, 0x54, 0x24, 0x11, 0xf6, 0xc9, 0x5b, 0x1e, 0x05, 0x24, 0x15, 0xf9,
+	0x3c, 0x21, 0x63, 0x0b, 0xda, 0x60, 0xe2, 0x63, 0xc6, 0x78, 0x2e, 0xfc, 0x94, 0xe0, 0x9c, 0xf4,
+	0x5c, 0x4a, 0x62, 0x5e, 0x90, 0x40, 0xe8, 0x9c, 0xf1, 0x1d, 0xf8, 0x0a, 0x5c, 0x1c, 0x32, 0x07,
+	0xd1, 0x94, 0x4d, 0x85, 0x8f, 0xe3, 0x04, 0xd3, 0x29, 0x33, 0x8e, 0xbb, 0xf0, 0x05, 0x78, 0xb6,
+	0x73, 0xc4, 0x3c, 0xa0, 0xe1, 0x7c, 0x48, 0x3c, 0x04, 0x4f, 0xe0, 0x39, 0x78, 0x42, 0x59, 0x81,
+	0x23, 0x1a, 0x1c, 0x37, 0x77, 0xaa, 0xaf, 0x12, 0xd3, 0x2c, 0xd3, 0x15, 0x34, 0x1f, 0xe3, 0x24,
+	0xe9, 0xf5, 0xbf, 0xae, 0x72, 0x0f, 0x3e, 0x07, 0x36, 0xe3, 0x7f, 0x7b, 0x8a, 0xb8, 0x8f, 0x73,
+	0xca, 0x99, 0xf0, 0x67, 0x59, 0xce, 0x63, 0x92, 0x9a, 0x9a, 0xf7, 0x2f, 0x7f, 0x8f, 0x80, 0x7d,
+	0x25, 0x57, 0xe8, 0xe6, 0x99, 0x5d, 0x3e, 0x3e, 0x7a, 0xf8, 0x44, 0x4f, 0x2b, 0x19, 0x7d, 0x0c,
+	0x76, 0xce, 0x46, 0x5e, 0x97, 0x6d, 0x83, 0x64, 0xd7, 0x38, 0x4d, 0xdd, 0xf6, 0xb3, 0xdc, 0xef,
+	0xcd, 0x7a, 0xa9, 0xfe, 0xb7, 0x46, 0x6f, 0xcc, 0xe7, 0xab, 0x75, 0x7b, 0x8a, 0xf1, 0x37, 0x6b,
+	0x32, 0x35, 0x61, 0xb8, 0x52, 0xc8, 0x48, 0xad, 0x0a, 0x17, 0xf5, 0x25, 0xd5, 0xf7, 0x3d, 0xb0,
+	0xc0, 0x95, 0x5a, 0x0c, 0xc0, 0xa2, 0x70, 0x17, 0x06, 0xf8, 0x69, 0xd9, 0xe6, 0xd4, 0xf3, 0x70,
+	0xa5, 0x3c, 0x6f, 0x40, 0x3c, 0xaf, 0x70, 0x3d, 0xcf, 0x40, 0x9f, 0x4e, 0xfa, 0xee, 0xdc, 0x3f,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x6c, 0x14, 0x3d, 0x9c, 0xe3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/campaign_shared_set_error.pb.go b/googleapis/ads/googleads/v3/errors/campaign_shared_set_error.pb.go
new file mode 100644
index 0000000..bc6525f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/campaign_shared_set_error.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/campaign_shared_set_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible campaign shared set errors.
+type CampaignSharedSetErrorEnum_CampaignSharedSetError int32
+
+const (
+	// Enum unspecified.
+	CampaignSharedSetErrorEnum_UNSPECIFIED CampaignSharedSetErrorEnum_CampaignSharedSetError = 0
+	// The received error code is not known in this version.
+	CampaignSharedSetErrorEnum_UNKNOWN CampaignSharedSetErrorEnum_CampaignSharedSetError = 1
+	// The shared set belongs to another customer and permission isn't granted.
+	CampaignSharedSetErrorEnum_SHARED_SET_ACCESS_DENIED CampaignSharedSetErrorEnum_CampaignSharedSetError = 2
+)
+
+var CampaignSharedSetErrorEnum_CampaignSharedSetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SHARED_SET_ACCESS_DENIED",
+}
+
+var CampaignSharedSetErrorEnum_CampaignSharedSetError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"SHARED_SET_ACCESS_DENIED": 2,
+}
+
+func (x CampaignSharedSetErrorEnum_CampaignSharedSetError) String() string {
+	return proto.EnumName(CampaignSharedSetErrorEnum_CampaignSharedSetError_name, int32(x))
+}
+
+func (CampaignSharedSetErrorEnum_CampaignSharedSetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6b80018c978188cf, []int{0, 0}
+}
+
+// Container for enum describing possible campaign shared set errors.
+type CampaignSharedSetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignSharedSetErrorEnum) Reset()         { *m = CampaignSharedSetErrorEnum{} }
+func (m *CampaignSharedSetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetErrorEnum) ProtoMessage()    {}
+func (*CampaignSharedSetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6b80018c978188cf, []int{0}
+}
+
+func (m *CampaignSharedSetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetErrorEnum.Merge(m, src)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Size(m)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CampaignSharedSetErrorEnum_CampaignSharedSetError", CampaignSharedSetErrorEnum_CampaignSharedSetError_name, CampaignSharedSetErrorEnum_CampaignSharedSetError_value)
+	proto.RegisterType((*CampaignSharedSetErrorEnum)(nil), "google.ads.googleads.v3.errors.CampaignSharedSetErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/campaign_shared_set_error.proto", fileDescriptor_6b80018c978188cf)
+}
+
+var fileDescriptor_6b80018c978188cf = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x5d, 0x05, 0x85, 0xec, 0xe0, 0xe8, 0x41, 0x64, 0x8e, 0x1d, 0xfa, 0x00, 0xe9, 0xa1,
+	0xb7, 0x08, 0x42, 0xd6, 0xc6, 0x39, 0x84, 0x3a, 0xcc, 0x36, 0x41, 0x0a, 0x21, 0x2e, 0x21, 0x16,
+	0xb6, 0xa4, 0x24, 0x75, 0x0f, 0xe4, 0xd1, 0x47, 0xf1, 0x51, 0x7c, 0x00, 0xcf, 0xd2, 0x66, 0xeb,
+	0x69, 0x7a, 0xea, 0x9f, 0x7e, 0xbf, 0xdf, 0xf7, 0x7d, 0xf9, 0xc0, 0xad, 0x32, 0x46, 0x6d, 0x64,
+	0xcc, 0x85, 0x8b, 0x7d, 0x6c, 0xd2, 0x2e, 0x89, 0xa5, 0xb5, 0xc6, 0xba, 0x78, 0xcd, 0xb7, 0x15,
+	0x2f, 0x95, 0x66, 0xee, 0x8d, 0x5b, 0x29, 0x98, 0x93, 0x35, 0x6b, 0x4b, 0xb0, 0xb2, 0xa6, 0x36,
+	0xe1, 0xd8, 0x4b, 0x90, 0x0b, 0x07, 0x3b, 0x1f, 0xee, 0x12, 0xe8, 0xfd, 0xe1, 0xe8, 0xd0, 0xbf,
+	0x2a, 0x63, 0xae, 0xb5, 0xa9, 0x79, 0x5d, 0x1a, 0xed, 0xbc, 0x1d, 0x59, 0x30, 0x4c, 0xf7, 0x03,
+	0x68, 0xdb, 0x9f, 0xca, 0x9a, 0x34, 0x22, 0xd1, 0xef, 0xdb, 0x68, 0x01, 0x2e, 0x8f, 0x57, 0xc3,
+	0x0b, 0xd0, 0x5f, 0xe6, 0x74, 0x4e, 0xd2, 0xd9, 0xdd, 0x8c, 0x64, 0x83, 0x93, 0xb0, 0x0f, 0xce,
+	0x97, 0xf9, 0x43, 0xfe, 0xf8, 0x9c, 0x0f, 0x7a, 0xe1, 0x08, 0x5c, 0xd1, 0x7b, 0xfc, 0x44, 0x32,
+	0x46, 0xc9, 0x82, 0xe1, 0x34, 0x25, 0x94, 0xb2, 0x8c, 0xe4, 0x0d, 0x1a, 0x4c, 0x7e, 0x7a, 0x20,
+	0x5a, 0x9b, 0x2d, 0xfc, 0x7f, 0xf1, 0xc9, 0xf5, 0xf1, 0xd1, 0xf3, 0x66, 0xef, 0x79, 0xef, 0x25,
+	0xdb, 0xeb, 0xca, 0x6c, 0xb8, 0x56, 0xd0, 0x58, 0x15, 0x2b, 0xa9, 0xdb, 0x57, 0x1d, 0xee, 0x58,
+	0x95, 0xee, 0xaf, 0xb3, 0xde, 0xf8, 0xcf, 0x47, 0x70, 0x3a, 0xc5, 0xf8, 0x33, 0x18, 0x4f, 0x7d,
+	0x33, 0x2c, 0x1c, 0xf4, 0xb1, 0x49, 0xab, 0x04, 0xb6, 0x23, 0xdd, 0xd7, 0x01, 0x28, 0xb0, 0x70,
+	0x45, 0x07, 0x14, 0xab, 0xa4, 0xf0, 0xc0, 0x77, 0x10, 0xf9, 0xbf, 0x08, 0x61, 0xe1, 0x10, 0xea,
+	0x10, 0x84, 0x56, 0x09, 0x42, 0x1e, 0x7a, 0x3d, 0x6b, 0xb7, 0x4b, 0x7e, 0x03, 0x00, 0x00, 0xff,
+	0xff, 0xfd, 0x86, 0x7d, 0x8a, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/change_status_error.pb.go b/googleapis/ads/googleads/v3/errors/change_status_error.pb.go
new file mode 100644
index 0000000..f794f6b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/change_status_error.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/change_status_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible change status errors.
+type ChangeStatusErrorEnum_ChangeStatusError int32
+
+const (
+	// Enum unspecified.
+	ChangeStatusErrorEnum_UNSPECIFIED ChangeStatusErrorEnum_ChangeStatusError = 0
+	// The received error code is not known in this version.
+	ChangeStatusErrorEnum_UNKNOWN ChangeStatusErrorEnum_ChangeStatusError = 1
+	// The requested start date is too old.
+	ChangeStatusErrorEnum_START_DATE_TOO_OLD ChangeStatusErrorEnum_ChangeStatusError = 3
+)
+
+var ChangeStatusErrorEnum_ChangeStatusError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "START_DATE_TOO_OLD",
+}
+
+var ChangeStatusErrorEnum_ChangeStatusError_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"START_DATE_TOO_OLD": 3,
+}
+
+func (x ChangeStatusErrorEnum_ChangeStatusError) String() string {
+	return proto.EnumName(ChangeStatusErrorEnum_ChangeStatusError_name, int32(x))
+}
+
+func (ChangeStatusErrorEnum_ChangeStatusError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_75754e84c034b454, []int{0, 0}
+}
+
+// Container for enum describing possible change status errors.
+type ChangeStatusErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusErrorEnum) Reset()         { *m = ChangeStatusErrorEnum{} }
+func (m *ChangeStatusErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusErrorEnum) ProtoMessage()    {}
+func (*ChangeStatusErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_75754e84c034b454, []int{0}
+}
+
+func (m *ChangeStatusErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ChangeStatusErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusErrorEnum.Merge(m, src)
+}
+func (m *ChangeStatusErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Size(m)
+}
+func (m *ChangeStatusErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ChangeStatusErrorEnum_ChangeStatusError", ChangeStatusErrorEnum_ChangeStatusError_name, ChangeStatusErrorEnum_ChangeStatusError_value)
+	proto.RegisterType((*ChangeStatusErrorEnum)(nil), "google.ads.googleads.v3.errors.ChangeStatusErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/change_status_error.proto", fileDescriptor_75754e84c034b454)
+}
+
+var fileDescriptor_75754e84c034b454 = []byte{
+	// 305 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xdd, 0x06, 0x0a, 0xd9, 0xc1, 0x5a, 0x70, 0x07, 0x91, 0x1d, 0xfa, 0x00, 0xc9, 0x21,
+	0x17, 0x89, 0xa7, 0x6c, 0xad, 0xa3, 0x28, 0x6d, 0xb1, 0x5d, 0x05, 0x29, 0x94, 0x6c, 0x2d, 0xb1,
+	0xb0, 0x25, 0xa5, 0xe9, 0xf6, 0x40, 0x1e, 0x7d, 0x14, 0x1f, 0xc5, 0x9b, 0x6f, 0x20, 0x4d, 0x6c,
+	0x2f, 0x43, 0x4f, 0xfd, 0xf8, 0xf7, 0xf7, 0x7d, 0xff, 0x2f, 0x7f, 0x70, 0xc7, 0xa5, 0xe4, 0xbb,
+	0x12, 0xb1, 0x42, 0x21, 0x23, 0x3b, 0x75, 0xc4, 0xa8, 0x6c, 0x1a, 0xd9, 0x28, 0xb4, 0x7d, 0x63,
+	0x82, 0x97, 0xb9, 0x6a, 0x59, 0x7b, 0x50, 0xb9, 0x1e, 0xc2, 0xba, 0x91, 0xad, 0xb4, 0xe7, 0x06,
+	0x87, 0xac, 0x50, 0x70, 0x70, 0xc2, 0x23, 0x86, 0xc6, 0x79, 0x73, 0xdb, 0x27, 0xd7, 0x15, 0x62,
+	0x42, 0xc8, 0x96, 0xb5, 0x95, 0x14, 0xca, 0xb8, 0x9d, 0x0d, 0xb8, 0x5e, 0xea, 0xe8, 0x58, 0x27,
+	0x7b, 0x9d, 0xc7, 0x13, 0x87, 0xbd, 0xe3, 0x83, 0xab, 0x93, 0x1f, 0xf6, 0x25, 0x98, 0xae, 0x83,
+	0x38, 0xf2, 0x96, 0xfe, 0x83, 0xef, 0xb9, 0xd6, 0x99, 0x3d, 0x05, 0x17, 0xeb, 0xe0, 0x31, 0x08,
+	0x5f, 0x02, 0x6b, 0x64, 0xcf, 0x80, 0x1d, 0x27, 0xf4, 0x39, 0xc9, 0x5d, 0x9a, 0x78, 0x79, 0x12,
+	0x86, 0x79, 0xf8, 0xe4, 0x5a, 0x93, 0xc5, 0xf7, 0x08, 0x38, 0x5b, 0xb9, 0x87, 0xff, 0x17, 0x5d,
+	0xcc, 0x4e, 0xf6, 0x45, 0x5d, 0xc5, 0x68, 0xf4, 0xea, 0xfe, 0x3a, 0xb9, 0xdc, 0x31, 0xc1, 0xa1,
+	0x6c, 0x38, 0xe2, 0xa5, 0xd0, 0x0f, 0xe8, 0x8f, 0x55, 0x57, 0xea, 0xaf, 0xdb, 0xdd, 0x9b, 0xcf,
+	0xfb, 0x78, 0xb2, 0xa2, 0xf4, 0x63, 0x3c, 0x5f, 0x99, 0x30, 0x5a, 0x28, 0x68, 0x64, 0xa7, 0x52,
+	0x0c, 0xf5, 0x4a, 0xf5, 0xd9, 0x03, 0x19, 0x2d, 0x54, 0x36, 0x00, 0x59, 0x8a, 0x33, 0x03, 0x7c,
+	0x8d, 0x1d, 0x33, 0x25, 0x84, 0x16, 0x8a, 0x90, 0x01, 0x21, 0x24, 0xc5, 0x84, 0x18, 0x68, 0x73,
+	0xae, 0xdb, 0xe1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x10, 0x0a, 0xc5, 0x15, 0xd8, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/collection_size_error.pb.go b/googleapis/ads/googleads/v3/errors/collection_size_error.pb.go
new file mode 100644
index 0000000..7115e20
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/collection_size_error.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/collection_size_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible collection size errors.
+type CollectionSizeErrorEnum_CollectionSizeError int32
+
+const (
+	// Enum unspecified.
+	CollectionSizeErrorEnum_UNSPECIFIED CollectionSizeErrorEnum_CollectionSizeError = 0
+	// The received error code is not known in this version.
+	CollectionSizeErrorEnum_UNKNOWN CollectionSizeErrorEnum_CollectionSizeError = 1
+	// Too few.
+	CollectionSizeErrorEnum_TOO_FEW CollectionSizeErrorEnum_CollectionSizeError = 2
+	// Too many.
+	CollectionSizeErrorEnum_TOO_MANY CollectionSizeErrorEnum_CollectionSizeError = 3
+)
+
+var CollectionSizeErrorEnum_CollectionSizeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TOO_FEW",
+	3: "TOO_MANY",
+}
+
+var CollectionSizeErrorEnum_CollectionSizeError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"TOO_FEW":     2,
+	"TOO_MANY":    3,
+}
+
+func (x CollectionSizeErrorEnum_CollectionSizeError) String() string {
+	return proto.EnumName(CollectionSizeErrorEnum_CollectionSizeError_name, int32(x))
+}
+
+func (CollectionSizeErrorEnum_CollectionSizeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_04810df5586fcd04, []int{0, 0}
+}
+
+// Container for enum describing possible collection size errors.
+type CollectionSizeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CollectionSizeErrorEnum) Reset()         { *m = CollectionSizeErrorEnum{} }
+func (m *CollectionSizeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CollectionSizeErrorEnum) ProtoMessage()    {}
+func (*CollectionSizeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_04810df5586fcd04, []int{0}
+}
+
+func (m *CollectionSizeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Unmarshal(m, b)
+}
+func (m *CollectionSizeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CollectionSizeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CollectionSizeErrorEnum.Merge(m, src)
+}
+func (m *CollectionSizeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Size(m)
+}
+func (m *CollectionSizeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CollectionSizeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CollectionSizeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CollectionSizeErrorEnum_CollectionSizeError", CollectionSizeErrorEnum_CollectionSizeError_name, CollectionSizeErrorEnum_CollectionSizeError_value)
+	proto.RegisterType((*CollectionSizeErrorEnum)(nil), "google.ads.googleads.v3.errors.CollectionSizeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/collection_size_error.proto", fileDescriptor_04810df5586fcd04)
+}
+
+var fileDescriptor_04810df5586fcd04 = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x5d, 0x07, 0x2a, 0x99, 0x60, 0xa9, 0x07, 0x45, 0x64, 0x87, 0x3e, 0x40, 0x72, 0xc8,
+	0x2d, 0x9e, 0xb2, 0xad, 0x1b, 0x43, 0xcc, 0x06, 0x73, 0x1b, 0x4a, 0xa1, 0xd4, 0x36, 0x84, 0x40,
+	0x97, 0x94, 0xa6, 0xee, 0xb0, 0xc7, 0xf1, 0xe8, 0xa3, 0xf8, 0x28, 0x5e, 0x7d, 0x01, 0x49, 0x63,
+	0x7b, 0x9a, 0x9e, 0xfa, 0xff, 0xbe, 0xfe, 0x7f, 0xff, 0xef, 0xcb, 0x07, 0x88, 0xd0, 0x5a, 0x14,
+	0x1c, 0xa5, 0xb9, 0x41, 0x4e, 0x5a, 0xb5, 0xc7, 0x88, 0x57, 0x95, 0xae, 0x0c, 0xca, 0x74, 0x51,
+	0xf0, 0xac, 0x96, 0x5a, 0x25, 0x46, 0x1e, 0x78, 0xd2, 0xb4, 0x61, 0x59, 0xe9, 0x5a, 0x07, 0x43,
+	0x07, 0xc0, 0x34, 0x37, 0xb0, 0x63, 0xe1, 0x1e, 0x43, 0xc7, 0xde, 0xde, 0xb5, 0xd9, 0xa5, 0x44,
+	0xa9, 0x52, 0xba, 0x4e, 0x6d, 0x8e, 0x71, 0x74, 0x28, 0xc1, 0xf5, 0xb8, 0x0b, 0x5f, 0xc9, 0x03,
+	0x8f, 0x2c, 0x15, 0xa9, 0xb7, 0x5d, 0xc8, 0xc0, 0xd5, 0x91, 0x5f, 0xc1, 0x25, 0x18, 0xac, 0xd9,
+	0x6a, 0x19, 0x8d, 0xe7, 0xd3, 0x79, 0x34, 0xf1, 0x4f, 0x82, 0x01, 0x38, 0x5b, 0xb3, 0x07, 0xb6,
+	0xd8, 0x32, 0xbf, 0x67, 0x8b, 0xa7, 0xc5, 0x22, 0x99, 0x46, 0x5b, 0xdf, 0x0b, 0x2e, 0xc0, 0xb9,
+	0x2d, 0x1e, 0x29, 0x7b, 0xf6, 0xfb, 0xa3, 0xef, 0x1e, 0x08, 0x33, 0xbd, 0x83, 0xff, 0xef, 0x3b,
+	0xba, 0x39, 0x32, 0x74, 0x69, 0x77, 0x5d, 0xf6, 0x5e, 0x26, 0xbf, 0xac, 0xd0, 0x45, 0xaa, 0x04,
+	0xd4, 0x95, 0x40, 0x82, 0xab, 0xe6, 0x25, 0xed, 0xdd, 0x4a, 0x69, 0xfe, 0x3a, 0xe3, 0xbd, 0xfb,
+	0xbc, 0x7b, 0xfd, 0x19, 0xa5, 0x1f, 0xde, 0x70, 0xe6, 0xc2, 0x68, 0x6e, 0xa0, 0x93, 0x56, 0x6d,
+	0x30, 0x6c, 0x46, 0x9a, 0xcf, 0xd6, 0x10, 0xd3, 0xdc, 0xc4, 0x9d, 0x21, 0xde, 0xe0, 0xd8, 0x19,
+	0xbe, 0xbc, 0xd0, 0x75, 0x09, 0xa1, 0xb9, 0x21, 0xa4, 0xb3, 0x10, 0xb2, 0xc1, 0x84, 0x38, 0xd3,
+	0xeb, 0x69, 0xb3, 0x1d, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xed, 0xe7, 0xdb, 0x35, 0xe3, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/context_error.pb.go b/googleapis/ads/googleads/v3/errors/context_error.pb.go
new file mode 100644
index 0000000..161ca64
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/context_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/context_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible context errors.
+type ContextErrorEnum_ContextError int32
+
+const (
+	// Enum unspecified.
+	ContextErrorEnum_UNSPECIFIED ContextErrorEnum_ContextError = 0
+	// The received error code is not known in this version.
+	ContextErrorEnum_UNKNOWN ContextErrorEnum_ContextError = 1
+	// The operation is not allowed for the given context.
+	ContextErrorEnum_OPERATION_NOT_PERMITTED_FOR_CONTEXT ContextErrorEnum_ContextError = 2
+	// The operation is not allowed for removed resources.
+	ContextErrorEnum_OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE ContextErrorEnum_ContextError = 3
+)
+
+var ContextErrorEnum_ContextError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPERATION_NOT_PERMITTED_FOR_CONTEXT",
+	3: "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE",
+}
+
+var ContextErrorEnum_ContextError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"OPERATION_NOT_PERMITTED_FOR_CONTEXT": 2,
+	"OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE": 3,
+}
+
+func (x ContextErrorEnum_ContextError) String() string {
+	return proto.EnumName(ContextErrorEnum_ContextError_name, int32(x))
+}
+
+func (ContextErrorEnum_ContextError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dfeff622d46c8b6d, []int{0, 0}
+}
+
+// Container for enum describing possible context errors.
+type ContextErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ContextErrorEnum) Reset()         { *m = ContextErrorEnum{} }
+func (m *ContextErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ContextErrorEnum) ProtoMessage()    {}
+func (*ContextErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dfeff622d46c8b6d, []int{0}
+}
+
+func (m *ContextErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContextErrorEnum.Unmarshal(m, b)
+}
+func (m *ContextErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContextErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ContextErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContextErrorEnum.Merge(m, src)
+}
+func (m *ContextErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ContextErrorEnum.Size(m)
+}
+func (m *ContextErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContextErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContextErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ContextErrorEnum_ContextError", ContextErrorEnum_ContextError_name, ContextErrorEnum_ContextError_value)
+	proto.RegisterType((*ContextErrorEnum)(nil), "google.ads.googleads.v3.errors.ContextErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/context_error.proto", fileDescriptor_dfeff622d46c8b6d)
+}
+
+var fileDescriptor_dfeff622d46c8b6d = []byte{
+	// 336 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0xff, 0xa4, 0xf0, 0x0b, 0x53, 0xc1, 0x98, 0xa5, 0x48, 0x17, 0x71, 0xe1, 0x46, 0x26,
+	0x62, 0x76, 0xe3, 0x2a, 0x4d, 0x6e, 0x4b, 0x90, 0xce, 0x84, 0x34, 0x8d, 0x22, 0x81, 0x10, 0x9b,
+	0x10, 0x0a, 0xed, 0x4c, 0xc9, 0xc4, 0xe2, 0x1b, 0xf8, 0x12, 0xae, 0x5c, 0xfa, 0x28, 0x3e, 0x8a,
+	0xf8, 0x10, 0x92, 0x8c, 0x2d, 0xdd, 0xd8, 0x55, 0x4e, 0x2e, 0xdf, 0x39, 0x73, 0xcf, 0x45, 0x37,
+	0x95, 0x10, 0xd5, 0xb2, 0xb4, 0xf3, 0x42, 0xda, 0x4a, 0xb6, 0x6a, 0xe3, 0xd8, 0x65, 0x5d, 0x8b,
+	0x5a, 0xda, 0x73, 0xc1, 0x9b, 0xf2, 0xa5, 0xc9, 0xba, 0x5f, 0xbc, 0xae, 0x45, 0x23, 0xcc, 0x81,
+	0x02, 0x71, 0x5e, 0x48, 0xbc, 0xf3, 0xe0, 0x8d, 0x83, 0x95, 0xe7, 0xec, 0x7c, 0x9b, 0xb9, 0x5e,
+	0xd8, 0x39, 0xe7, 0xa2, 0xc9, 0x9b, 0x85, 0xe0, 0x52, 0xb9, 0xad, 0x37, 0x0d, 0x19, 0x9e, 0x4a,
+	0x85, 0x96, 0x07, 0xfe, 0xbc, 0xb2, 0x5e, 0x35, 0x74, 0xbc, 0x3f, 0x34, 0x4f, 0x50, 0x7f, 0x46,
+	0xa7, 0x21, 0x78, 0xc1, 0x28, 0x00, 0xdf, 0xf8, 0x67, 0xf6, 0xd1, 0xd1, 0x8c, 0xde, 0x51, 0x76,
+	0x4f, 0x0d, 0xcd, 0xbc, 0x44, 0x17, 0x2c, 0x84, 0xc8, 0x8d, 0x03, 0x46, 0x33, 0xca, 0xe2, 0x2c,
+	0x84, 0x68, 0x12, 0xc4, 0x31, 0xf8, 0xd9, 0x88, 0x45, 0x99, 0xc7, 0x68, 0x0c, 0x0f, 0xb1, 0xa1,
+	0x9b, 0xd7, 0xe8, 0xea, 0x10, 0x18, 0xc1, 0x84, 0x25, 0xe0, 0x67, 0x11, 0x4c, 0xd9, 0x2c, 0xf2,
+	0xc0, 0xe8, 0x0d, 0xbf, 0x35, 0x64, 0xcd, 0xc5, 0x0a, 0x1f, 0xee, 0x38, 0x3c, 0xdd, 0xdf, 0x36,
+	0x6c, 0x8b, 0x85, 0xda, 0xa3, 0xff, 0x6b, 0xaa, 0xc4, 0x32, 0xe7, 0x15, 0x16, 0x75, 0x65, 0x57,
+	0x25, 0xef, 0x6a, 0x6f, 0x8f, 0xbb, 0x5e, 0xc8, 0xbf, 0x6e, 0x7d, 0xab, 0x3e, 0xef, 0x7a, 0x6f,
+	0xec, 0xba, 0x1f, 0xfa, 0x60, 0xac, 0xc2, 0xdc, 0x42, 0x62, 0x25, 0x5b, 0x95, 0x38, 0xb8, 0x7b,
+	0x52, 0x7e, 0x6e, 0x81, 0xd4, 0x2d, 0x64, 0xba, 0x03, 0xd2, 0xc4, 0x49, 0x15, 0xf0, 0xa5, 0x5b,
+	0x6a, 0x4a, 0x88, 0x5b, 0x48, 0x42, 0x76, 0x08, 0x21, 0x89, 0x43, 0x88, 0x82, 0x9e, 0xfe, 0x77,
+	0xdb, 0x39, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x24, 0x40, 0x75, 0x5a, 0x08, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/conversion_action_error.pb.go b/googleapis/ads/googleads/v3/errors/conversion_action_error.pb.go
new file mode 100644
index 0000000..19b1189
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/conversion_action_error.pb.go
@@ -0,0 +1,163 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/conversion_action_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible conversion action errors.
+type ConversionActionErrorEnum_ConversionActionError int32
+
+const (
+	// Enum unspecified.
+	ConversionActionErrorEnum_UNSPECIFIED ConversionActionErrorEnum_ConversionActionError = 0
+	// The received error code is not known in this version.
+	ConversionActionErrorEnum_UNKNOWN ConversionActionErrorEnum_ConversionActionError = 1
+	// The specified conversion action name already exists.
+	ConversionActionErrorEnum_DUPLICATE_NAME ConversionActionErrorEnum_ConversionActionError = 2
+	// Another conversion action with the specified app id already exists.
+	ConversionActionErrorEnum_DUPLICATE_APP_ID ConversionActionErrorEnum_ConversionActionError = 3
+	// Android first open action conflicts with Google play codeless download
+	// action tracking the same app.
+	ConversionActionErrorEnum_TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD ConversionActionErrorEnum_ConversionActionError = 4
+	// Android first open action conflicts with Google play codeless download
+	// action tracking the same app.
+	ConversionActionErrorEnum_BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION ConversionActionErrorEnum_ConversionActionError = 5
+	// The attribution model cannot be set to DATA_DRIVEN because a data-driven
+	// model has never been generated.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED ConversionActionErrorEnum_ConversionActionError = 6
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is expired.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_EXPIRED ConversionActionErrorEnum_ConversionActionError = 7
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is stale.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_STALE ConversionActionErrorEnum_ConversionActionError = 8
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is unavailable or the conversion action was newly
+	// added.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_UNKNOWN ConversionActionErrorEnum_ConversionActionError = 9
+)
+
+var ConversionActionErrorEnum_ConversionActionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_NAME",
+	3: "DUPLICATE_APP_ID",
+	4: "TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD",
+	5: "BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION",
+	6: "DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED",
+	7: "DATA_DRIVEN_MODEL_EXPIRED",
+	8: "DATA_DRIVEN_MODEL_STALE",
+	9: "DATA_DRIVEN_MODEL_UNKNOWN",
+}
+
+var ConversionActionErrorEnum_ConversionActionError_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"DUPLICATE_NAME":   2,
+	"DUPLICATE_APP_ID": 3,
+	"TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD": 4,
+	"BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION":       5,
+	"DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED":               6,
+	"DATA_DRIVEN_MODEL_EXPIRED":                           7,
+	"DATA_DRIVEN_MODEL_STALE":                             8,
+	"DATA_DRIVEN_MODEL_UNKNOWN":                           9,
+}
+
+func (x ConversionActionErrorEnum_ConversionActionError) String() string {
+	return proto.EnumName(ConversionActionErrorEnum_ConversionActionError_name, int32(x))
+}
+
+func (ConversionActionErrorEnum_ConversionActionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ea0289798a441416, []int{0, 0}
+}
+
+// Container for enum describing possible conversion action errors.
+type ConversionActionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionErrorEnum) Reset()         { *m = ConversionActionErrorEnum{} }
+func (m *ConversionActionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionErrorEnum) ProtoMessage()    {}
+func (*ConversionActionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ea0289798a441416, []int{0}
+}
+
+func (m *ConversionActionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionErrorEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionErrorEnum.Merge(m, src)
+}
+func (m *ConversionActionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionErrorEnum.Size(m)
+}
+func (m *ConversionActionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ConversionActionErrorEnum_ConversionActionError", ConversionActionErrorEnum_ConversionActionError_name, ConversionActionErrorEnum_ConversionActionError_value)
+	proto.RegisterType((*ConversionActionErrorEnum)(nil), "google.ads.googleads.v3.errors.ConversionActionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/conversion_action_error.proto", fileDescriptor_ea0289798a441416)
+}
+
+var fileDescriptor_ea0289798a441416 = []byte{
+	// 443 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0xc7, 0x6d, 0x56, 0x77, 0x75, 0x16, 0x74, 0x18, 0x14, 0xd9, 0x55, 0xf7, 0x50, 0xf0, 0xe0,
+	0xc1, 0x09, 0x92, 0x83, 0x10, 0xbd, 0xbc, 0x76, 0xc6, 0x30, 0x98, 0xce, 0x84, 0x24, 0x4d, 0x45,
+	0x0a, 0x43, 0x6c, 0x4a, 0x28, 0xec, 0x66, 0x4a, 0xa6, 0xf6, 0x03, 0x79, 0xf4, 0xa3, 0x78, 0xf3,
+	0x6b, 0x78, 0xf1, 0xe4, 0x5d, 0x92, 0xd9, 0xd6, 0xc3, 0xd6, 0x3d, 0xcd, 0x9f, 0xf7, 0xfe, 0xbf,
+	0x7f, 0xc2, 0x7b, 0x0f, 0xbd, 0xaf, 0x8d, 0xa9, 0x2f, 0x97, 0x7e, 0x59, 0x59, 0xdf, 0xc9, 0x4e,
+	0x6d, 0x03, 0x7f, 0xd9, 0xb6, 0xa6, 0xb5, 0xfe, 0xc2, 0x34, 0xdb, 0x65, 0x6b, 0x57, 0xa6, 0xd1,
+	0xe5, 0x62, 0xd3, 0x3d, 0x7d, 0x83, 0xae, 0x5b, 0xb3, 0x31, 0xe4, 0xc2, 0x21, 0xb4, 0xac, 0x2c,
+	0xdd, 0xd3, 0x74, 0x1b, 0x50, 0x47, 0x9f, 0x3f, 0xdf, 0xa5, 0xaf, 0x57, 0x7e, 0xd9, 0x34, 0x66,
+	0x53, 0x76, 0x11, 0xd6, 0xd1, 0xc3, 0xdf, 0x1e, 0x3a, 0x1b, 0xef, 0xf3, 0xa1, 0x8f, 0xe7, 0x1d,
+	0xc8, 0x9b, 0xaf, 0x57, 0xc3, 0x9f, 0x1e, 0x7a, 0x72, 0xb0, 0x4b, 0x1e, 0xa1, 0xd3, 0xa9, 0xcc,
+	0x12, 0x3e, 0x16, 0x1f, 0x04, 0x67, 0xf8, 0x0e, 0x39, 0x45, 0x27, 0x53, 0xf9, 0x51, 0xaa, 0x99,
+	0xc4, 0x03, 0x42, 0xd0, 0x43, 0x36, 0x4d, 0x62, 0x31, 0x86, 0x9c, 0x6b, 0x09, 0x13, 0x8e, 0x3d,
+	0xf2, 0x18, 0xe1, 0x7f, 0x35, 0x48, 0x12, 0x2d, 0x18, 0x3e, 0x22, 0x6f, 0x51, 0x90, 0xcf, 0x94,
+	0x1e, 0x2b, 0x59, 0xf0, 0x34, 0x13, 0x4a, 0x6a, 0x18, 0xe7, 0x42, 0xc9, 0x4c, 0x8f, 0x04, 0x63,
+	0x42, 0x46, 0x5a, 0x49, 0x9d, 0xc1, 0xc4, 0x21, 0x4c, 0xcd, 0x64, 0xac, 0x80, 0xe1, 0xbb, 0xe4,
+	0x0d, 0x7a, 0x7d, 0x9b, 0x43, 0x43, 0xa6, 0xa3, 0x58, 0x8d, 0x20, 0xbe, 0x0e, 0xc4, 0xf7, 0xc8,
+	0x2b, 0xf4, 0x92, 0x41, 0x0e, 0x9a, 0xa5, 0xa2, 0xe0, 0x52, 0x4f, 0x14, 0xe3, 0xb1, 0x9e, 0x41,
+	0xa6, 0x25, 0x2f, 0x78, 0xaa, 0x23, 0x2e, 0x79, 0x0a, 0x39, 0x67, 0xf8, 0x98, 0xbc, 0x40, 0x67,
+	0x37, 0xad, 0xfc, 0x53, 0x22, 0x52, 0xce, 0xf0, 0x09, 0x79, 0x86, 0x9e, 0xde, 0x6c, 0x67, 0x39,
+	0xc4, 0x1c, 0xdf, 0x3f, 0xcc, 0xee, 0x66, 0xf3, 0x60, 0xf4, 0x67, 0x80, 0x86, 0x0b, 0x73, 0x45,
+	0x6f, 0x5f, 0xdb, 0xe8, 0xfc, 0xe0, 0xdc, 0x93, 0x6e, 0x69, 0xc9, 0xe0, 0x33, 0xbb, 0xa6, 0x6b,
+	0x73, 0x59, 0x36, 0x35, 0x35, 0x6d, 0xed, 0xd7, 0xcb, 0xa6, 0x5f, 0xe9, 0xee, 0x84, 0xd6, 0x2b,
+	0xfb, 0xbf, 0x8b, 0x7a, 0xe7, 0x9e, 0x6f, 0xde, 0x51, 0x04, 0xf0, 0xdd, 0xbb, 0x88, 0x5c, 0x18,
+	0x54, 0x96, 0x3a, 0xd9, 0xa9, 0x22, 0xa0, 0xfd, 0x27, 0xed, 0x8f, 0x9d, 0x61, 0x0e, 0x95, 0x9d,
+	0xef, 0x0d, 0xf3, 0x22, 0x98, 0x3b, 0xc3, 0x2f, 0x6f, 0xe8, 0xaa, 0x61, 0x08, 0x95, 0x0d, 0xc3,
+	0xbd, 0x25, 0x0c, 0x8b, 0x20, 0x0c, 0x9d, 0xe9, 0xcb, 0x71, 0xff, 0x77, 0xc1, 0xdf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xd0, 0xeb, 0xf5, 0x4a, 0xee, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/conversion_adjustment_upload_error.pb.go b/googleapis/ads/googleads/v3/errors/conversion_adjustment_upload_error.pb.go
new file mode 100644
index 0000000..f0a6380
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/conversion_adjustment_upload_error.pb.go
@@ -0,0 +1,180 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/conversion_adjustment_upload_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible conversion adjustment upload errors.
+type ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError int32
+
+const (
+	// Not specified.
+	ConversionAdjustmentUploadErrorEnum_UNSPECIFIED ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 0
+	// The received error code is not known in this version.
+	ConversionAdjustmentUploadErrorEnum_UNKNOWN ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 1
+	// The specified conversion action was created too recently.
+	// Please try the upload again after 4-6 hours have passed since the
+	// conversion action was created.
+	ConversionAdjustmentUploadErrorEnum_TOO_RECENT_CONVERSION_ACTION ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 2
+	// No conversion action of a supported ConversionActionType that matches the
+	// provided information can be found for the customer.
+	ConversionAdjustmentUploadErrorEnum_INVALID_CONVERSION_ACTION ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 3
+	// A retraction was already reported for this conversion.
+	ConversionAdjustmentUploadErrorEnum_CONVERSION_ALREADY_RETRACTED ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 4
+	// A conversion for the supplied combination of conversion
+	// action and conversion identifier could not be found.
+	ConversionAdjustmentUploadErrorEnum_CONVERSION_NOT_FOUND ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 5
+	// The specified conversion has already expired. Conversions expire after 55
+	// days, after which adjustments cannot be reported against them.
+	ConversionAdjustmentUploadErrorEnum_CONVERSION_EXPIRED ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 6
+	// The supplied adjustment date time precedes that of the original
+	// conversion.
+	ConversionAdjustmentUploadErrorEnum_ADJUSTMENT_PRECEDES_CONVERSION ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 7
+	// A restatement with a more recent adjustment date time was already
+	// reported for this conversion.
+	ConversionAdjustmentUploadErrorEnum_MORE_RECENT_RESTATEMENT_FOUND ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 8
+	// The conversion was created too recently.
+	ConversionAdjustmentUploadErrorEnum_TOO_RECENT_CONVERSION ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 9
+	// Restatements cannot be reported for a conversion action that always uses
+	// the default value.
+	ConversionAdjustmentUploadErrorEnum_CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 10
+	// The request contained more than 2000 adjustments.
+	ConversionAdjustmentUploadErrorEnum_TOO_MANY_ADJUSTMENTS_IN_REQUEST ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 11
+	// The conversion has been adjusted too many times.
+	ConversionAdjustmentUploadErrorEnum_TOO_MANY_ADJUSTMENTS ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError = 12
+)
+
+var ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "TOO_RECENT_CONVERSION_ACTION",
+	3:  "INVALID_CONVERSION_ACTION",
+	4:  "CONVERSION_ALREADY_RETRACTED",
+	5:  "CONVERSION_NOT_FOUND",
+	6:  "CONVERSION_EXPIRED",
+	7:  "ADJUSTMENT_PRECEDES_CONVERSION",
+	8:  "MORE_RECENT_RESTATEMENT_FOUND",
+	9:  "TOO_RECENT_CONVERSION",
+	10: "CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE",
+	11: "TOO_MANY_ADJUSTMENTS_IN_REQUEST",
+	12: "TOO_MANY_ADJUSTMENTS",
+}
+
+var ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"TOO_RECENT_CONVERSION_ACTION":   2,
+	"INVALID_CONVERSION_ACTION":      3,
+	"CONVERSION_ALREADY_RETRACTED":   4,
+	"CONVERSION_NOT_FOUND":           5,
+	"CONVERSION_EXPIRED":             6,
+	"ADJUSTMENT_PRECEDES_CONVERSION": 7,
+	"MORE_RECENT_RESTATEMENT_FOUND":  8,
+	"TOO_RECENT_CONVERSION":          9,
+	"CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE": 10,
+	"TOO_MANY_ADJUSTMENTS_IN_REQUEST":                                            11,
+	"TOO_MANY_ADJUSTMENTS":                                                       12,
+}
+
+func (x ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError) String() string {
+	return proto.EnumName(ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError_name, int32(x))
+}
+
+func (ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_80983c668085e5a2, []int{0, 0}
+}
+
+// Container for enum describing possible conversion adjustment upload errors.
+type ConversionAdjustmentUploadErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionAdjustmentUploadErrorEnum) Reset()         { *m = ConversionAdjustmentUploadErrorEnum{} }
+func (m *ConversionAdjustmentUploadErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionAdjustmentUploadErrorEnum) ProtoMessage()    {}
+func (*ConversionAdjustmentUploadErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80983c668085e5a2, []int{0}
+}
+
+func (m *ConversionAdjustmentUploadErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAdjustmentUploadErrorEnum.Unmarshal(m, b)
+}
+func (m *ConversionAdjustmentUploadErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAdjustmentUploadErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionAdjustmentUploadErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAdjustmentUploadErrorEnum.Merge(m, src)
+}
+func (m *ConversionAdjustmentUploadErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionAdjustmentUploadErrorEnum.Size(m)
+}
+func (m *ConversionAdjustmentUploadErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAdjustmentUploadErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAdjustmentUploadErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError", ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError_name, ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError_value)
+	proto.RegisterType((*ConversionAdjustmentUploadErrorEnum)(nil), "google.ads.googleads.v3.errors.ConversionAdjustmentUploadErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/conversion_adjustment_upload_error.proto", fileDescriptor_80983c668085e5a2)
+}
+
+var fileDescriptor_80983c668085e5a2 = []byte{
+	// 504 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x59, 0x0b, 0x1b, 0xb8, 0x48, 0x58, 0x16, 0x20, 0x86, 0xb6, 0x0e, 0x3a, 0xae, 0x93,
+	0x8b, 0xdc, 0x85, 0x2b, 0x2f, 0x39, 0x2d, 0x19, 0xad, 0x53, 0x12, 0x27, 0xa3, 0xa8, 0x92, 0x15,
+	0x96, 0x2a, 0x2a, 0x6a, 0xe3, 0x2a, 0x6e, 0xfb, 0x40, 0x5c, 0xf2, 0x1e, 0xdc, 0xf0, 0x28, 0x48,
+	0x3c, 0x03, 0xc8, 0xf1, 0x5a, 0x8a, 0x28, 0xec, 0x2a, 0x47, 0xf6, 0x77, 0xfe, 0xff, 0xf7, 0xc9,
+	0x41, 0xbd, 0x42, 0xca, 0x62, 0x36, 0xb1, 0xb3, 0x5c, 0xd9, 0xa6, 0xd4, 0xd5, 0xda, 0xb1, 0x27,
+	0x55, 0x25, 0x2b, 0x65, 0x5f, 0xcb, 0x72, 0x3d, 0xa9, 0xd4, 0x54, 0x96, 0x22, 0xcb, 0x3f, 0xad,
+	0xd4, 0x72, 0x3e, 0x29, 0x97, 0x62, 0xb5, 0x98, 0xc9, 0x2c, 0x17, 0x35, 0x63, 0x2d, 0x2a, 0xb9,
+	0x94, 0xa4, 0x6d, 0xba, 0xad, 0x2c, 0x57, 0xd6, 0x56, 0xc8, 0x5a, 0x3b, 0x96, 0x11, 0x7a, 0x7e,
+	0xb2, 0x31, 0x5a, 0x4c, 0xed, 0xac, 0x2c, 0xe5, 0x32, 0x5b, 0x4e, 0x65, 0xa9, 0x4c, 0x77, 0xe7,
+	0x47, 0x13, 0x9d, 0x7b, 0x5b, 0x2b, 0xba, 0x75, 0x4a, 0x6a, 0x23, 0xd0, 0x12, 0x50, 0xae, 0xe6,
+	0x9d, 0xaf, 0x4d, 0x74, 0x76, 0x0b, 0x47, 0x1e, 0xa1, 0x56, 0xc2, 0xe2, 0x21, 0x78, 0x41, 0x37,
+	0x00, 0x1f, 0xdf, 0x21, 0x2d, 0x74, 0x94, 0xb0, 0xb7, 0x2c, 0xbc, 0x62, 0xf8, 0x80, 0xbc, 0x40,
+	0x27, 0x3c, 0x0c, 0x45, 0x04, 0x1e, 0x30, 0x2e, 0xbc, 0x90, 0xa5, 0x10, 0xc5, 0x41, 0xc8, 0x04,
+	0xf5, 0x78, 0x10, 0x32, 0xdc, 0x20, 0xa7, 0xe8, 0x38, 0x60, 0x29, 0xed, 0x07, 0xfe, 0x9e, 0xeb,
+	0xa6, 0x16, 0xd8, 0x3d, 0xee, 0x47, 0x40, 0xfd, 0x91, 0x88, 0x80, 0x47, 0xd4, 0xe3, 0xe0, 0xe3,
+	0xbb, 0xe4, 0x19, 0x7a, 0xbc, 0x43, 0xb0, 0x90, 0x8b, 0x6e, 0x98, 0x30, 0x1f, 0xdf, 0x23, 0x4f,
+	0x11, 0xd9, 0xb9, 0x81, 0xf7, 0xc3, 0x20, 0x02, 0x1f, 0x1f, 0x92, 0x0e, 0x6a, 0x53, 0xff, 0x32,
+	0x89, 0xf9, 0x40, 0x87, 0x1a, 0xea, 0x70, 0x3e, 0xc4, 0x3b, 0xf6, 0xf8, 0x88, 0xbc, 0x44, 0xa7,
+	0x83, 0x30, 0x82, 0x4d, 0xf2, 0x08, 0x62, 0x4e, 0x39, 0xd4, 0x0d, 0x46, 0xfe, 0x3e, 0x39, 0x46,
+	0x4f, 0xf6, 0xbe, 0x0d, 0x3f, 0x20, 0x0c, 0x5d, 0x7a, 0x94, 0xe9, 0x2c, 0x37, 0x8d, 0x7f, 0xbf,
+	0x4d, 0xf0, 0x37, 0x94, 0x0b, 0xda, 0xbf, 0xa2, 0xa3, 0x58, 0x24, 0x31, 0xc4, 0xc2, 0x87, 0x2e,
+	0x4d, 0xfa, 0x7f, 0x4c, 0x29, 0xa5, 0xfd, 0x04, 0x30, 0x22, 0xe7, 0xe8, 0x4c, 0x5b, 0x0d, 0x28,
+	0x1b, 0x89, 0xdf, 0xd1, 0x63, 0x11, 0x30, 0x11, 0xc1, 0xbb, 0x04, 0x62, 0x8e, 0x5b, 0x7a, 0x10,
+	0xfb, 0x20, 0xfc, 0xf0, 0xe2, 0xe7, 0x01, 0xea, 0x5c, 0xcb, 0xb9, 0xf5, 0xff, 0xa5, 0xb9, 0x78,
+	0x75, 0xcb, 0xbf, 0x1e, 0xea, 0xe5, 0x19, 0x1e, 0x7c, 0xf0, 0x6f, 0x74, 0x0a, 0x39, 0xcb, 0xca,
+	0xc2, 0x92, 0x55, 0x61, 0x17, 0x93, 0xb2, 0x5e, 0xad, 0xcd, 0x56, 0x2f, 0xa6, 0xea, 0x5f, 0x4b,
+	0xfe, 0xda, 0x7c, 0x3e, 0x37, 0x9a, 0x3d, 0x4a, 0xbf, 0x34, 0xda, 0x3d, 0x23, 0x46, 0x73, 0x65,
+	0x99, 0x52, 0x57, 0xa9, 0x63, 0xd5, 0x96, 0xea, 0xdb, 0x06, 0x18, 0xd3, 0x5c, 0x8d, 0xb7, 0xc0,
+	0x38, 0x75, 0xc6, 0x06, 0xf8, 0xde, 0xe8, 0x98, 0x53, 0xd7, 0xa5, 0xb9, 0x72, 0xdd, 0x2d, 0xe2,
+	0xba, 0xa9, 0xe3, 0xba, 0x06, 0xfa, 0x78, 0x58, 0xa7, 0x73, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x6c, 0xec, 0x4a, 0x41, 0x81, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/conversion_upload_error.pb.go b/googleapis/ads/googleads/v3/errors/conversion_upload_error.pb.go
new file mode 100644
index 0000000..ff41da7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/conversion_upload_error.pb.go
@@ -0,0 +1,243 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/conversion_upload_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible conversion upload errors.
+type ConversionUploadErrorEnum_ConversionUploadError int32
+
+const (
+	// Enum unspecified.
+	ConversionUploadErrorEnum_UNSPECIFIED ConversionUploadErrorEnum_ConversionUploadError = 0
+	// The received error code is not known in this version.
+	ConversionUploadErrorEnum_UNKNOWN ConversionUploadErrorEnum_ConversionUploadError = 1
+	// The request contained more than 2000 conversions.
+	ConversionUploadErrorEnum_TOO_MANY_CONVERSIONS_IN_REQUEST ConversionUploadErrorEnum_ConversionUploadError = 2
+	// The specified gclid could not be decoded.
+	ConversionUploadErrorEnum_UNPARSEABLE_GCLID ConversionUploadErrorEnum_ConversionUploadError = 3
+	// The specified conversion_date_time is before the event time
+	// associated with the given gclid.
+	ConversionUploadErrorEnum_CONVERSION_PRECEDES_GCLID ConversionUploadErrorEnum_ConversionUploadError = 4
+	// The click associated with the given gclid is either too old to be
+	// imported or occurred outside of the click through lookback window for the
+	// specified conversion action.
+	ConversionUploadErrorEnum_EXPIRED_GCLID ConversionUploadErrorEnum_ConversionUploadError = 5
+	// The click associated with the given gclid occurred too recently. Please
+	// try uploading again after 6 hours have passed since the click occurred.
+	ConversionUploadErrorEnum_TOO_RECENT_GCLID ConversionUploadErrorEnum_ConversionUploadError = 6
+	// The click associated with the given gclid could not be found in the
+	// system. This can happen if Google Click IDs are collected for non Google
+	// Ads clicks.
+	ConversionUploadErrorEnum_GCLID_NOT_FOUND ConversionUploadErrorEnum_ConversionUploadError = 7
+	// The click associated with the given gclid is owned by a customer
+	// account that the uploading customer does not manage.
+	ConversionUploadErrorEnum_UNAUTHORIZED_CUSTOMER ConversionUploadErrorEnum_ConversionUploadError = 8
+	// No upload eligible conversion action that matches the provided
+	// information can be found for the customer.
+	ConversionUploadErrorEnum_INVALID_CONVERSION_ACTION ConversionUploadErrorEnum_ConversionUploadError = 9
+	// The specified conversion action was created too recently.
+	// Please try the upload again after 4-6 hours have passed since the
+	// conversion action was created.
+	ConversionUploadErrorEnum_TOO_RECENT_CONVERSION_ACTION ConversionUploadErrorEnum_ConversionUploadError = 10
+	// The click associated with the given gclid does not contain conversion
+	// tracking information.
+	ConversionUploadErrorEnum_CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME ConversionUploadErrorEnum_ConversionUploadError = 11
+	// The specified conversion action does not use an external attribution
+	// model, but external_attribution_data was set.
+	ConversionUploadErrorEnum_EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION ConversionUploadErrorEnum_ConversionUploadError = 12
+	// The specified conversion action uses an external attribution model, but
+	// external_attribution_data or one of its contained fields was not set.
+	// Both external_attribution_credit and external_attribution_model must be
+	// set for externally attributed conversion actions.
+	ConversionUploadErrorEnum_EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION ConversionUploadErrorEnum_ConversionUploadError = 13
+	// Order IDs are not supported for conversion actions which use an external
+	// attribution model.
+	ConversionUploadErrorEnum_ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION ConversionUploadErrorEnum_ConversionUploadError = 14
+	// A conversion with the same order id and conversion action combination
+	// already exists in our system.
+	ConversionUploadErrorEnum_ORDER_ID_ALREADY_IN_USE ConversionUploadErrorEnum_ConversionUploadError = 15
+	// The request contained two or more conversions with the same order id and
+	// conversion action combination.
+	ConversionUploadErrorEnum_DUPLICATE_ORDER_ID ConversionUploadErrorEnum_ConversionUploadError = 16
+	// The call occurred too recently. Please try uploading again after 6 hours
+	// have passed since the call occurred.
+	ConversionUploadErrorEnum_TOO_RECENT_CALL ConversionUploadErrorEnum_ConversionUploadError = 17
+	// The click that initiated the call is too old for this conversion to be
+	// imported.
+	ConversionUploadErrorEnum_EXPIRED_CALL ConversionUploadErrorEnum_ConversionUploadError = 18
+	// The call or the click leading to the call was not found.
+	ConversionUploadErrorEnum_CALL_NOT_FOUND ConversionUploadErrorEnum_ConversionUploadError = 19
+	// The specified conversion_date_time is before the call_start_date_time.
+	ConversionUploadErrorEnum_CONVERSION_PRECEDES_CALL ConversionUploadErrorEnum_ConversionUploadError = 20
+	// The click associated with the call does not contain conversion tracking
+	// information.
+	ConversionUploadErrorEnum_CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME ConversionUploadErrorEnum_ConversionUploadError = 21
+	// The caller’s phone number cannot be parsed. It should be formatted either
+	// as E.164 "+16502531234", International "+64 3-331 6005" or US national
+	// number "6502531234".
+	ConversionUploadErrorEnum_UNPARSEABLE_CALLERS_PHONE_NUMBER ConversionUploadErrorEnum_ConversionUploadError = 22
+)
+
+var ConversionUploadErrorEnum_ConversionUploadError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "TOO_MANY_CONVERSIONS_IN_REQUEST",
+	3:  "UNPARSEABLE_GCLID",
+	4:  "CONVERSION_PRECEDES_GCLID",
+	5:  "EXPIRED_GCLID",
+	6:  "TOO_RECENT_GCLID",
+	7:  "GCLID_NOT_FOUND",
+	8:  "UNAUTHORIZED_CUSTOMER",
+	9:  "INVALID_CONVERSION_ACTION",
+	10: "TOO_RECENT_CONVERSION_ACTION",
+	11: "CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME",
+	12: "EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
+	13: "EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
+	14: "ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
+	15: "ORDER_ID_ALREADY_IN_USE",
+	16: "DUPLICATE_ORDER_ID",
+	17: "TOO_RECENT_CALL",
+	18: "EXPIRED_CALL",
+	19: "CALL_NOT_FOUND",
+	20: "CONVERSION_PRECEDES_CALL",
+	21: "CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME",
+	22: "UNPARSEABLE_CALLERS_PHONE_NUMBER",
+}
+
+var ConversionUploadErrorEnum_ConversionUploadError_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"TOO_MANY_CONVERSIONS_IN_REQUEST": 2,
+	"UNPARSEABLE_GCLID":               3,
+	"CONVERSION_PRECEDES_GCLID":       4,
+	"EXPIRED_GCLID":                   5,
+	"TOO_RECENT_GCLID":                6,
+	"GCLID_NOT_FOUND":                 7,
+	"UNAUTHORIZED_CUSTOMER":           8,
+	"INVALID_CONVERSION_ACTION":       9,
+	"TOO_RECENT_CONVERSION_ACTION":    10,
+	"CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME":                            11,
+	"EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION": 12,
+	"EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION": 13,
+	"ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION":            14,
+	"ORDER_ID_ALREADY_IN_USE":                      15,
+	"DUPLICATE_ORDER_ID":                           16,
+	"TOO_RECENT_CALL":                              17,
+	"EXPIRED_CALL":                                 18,
+	"CALL_NOT_FOUND":                               19,
+	"CONVERSION_PRECEDES_CALL":                     20,
+	"CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME": 21,
+	"UNPARSEABLE_CALLERS_PHONE_NUMBER":             22,
+}
+
+func (x ConversionUploadErrorEnum_ConversionUploadError) String() string {
+	return proto.EnumName(ConversionUploadErrorEnum_ConversionUploadError_name, int32(x))
+}
+
+func (ConversionUploadErrorEnum_ConversionUploadError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c97ed55609bcddab, []int{0, 0}
+}
+
+// Container for enum describing possible conversion upload errors.
+type ConversionUploadErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionUploadErrorEnum) Reset()         { *m = ConversionUploadErrorEnum{} }
+func (m *ConversionUploadErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionUploadErrorEnum) ProtoMessage()    {}
+func (*ConversionUploadErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c97ed55609bcddab, []int{0}
+}
+
+func (m *ConversionUploadErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionUploadErrorEnum.Unmarshal(m, b)
+}
+func (m *ConversionUploadErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionUploadErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ConversionUploadErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionUploadErrorEnum.Merge(m, src)
+}
+func (m *ConversionUploadErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionUploadErrorEnum.Size(m)
+}
+func (m *ConversionUploadErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionUploadErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionUploadErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ConversionUploadErrorEnum_ConversionUploadError", ConversionUploadErrorEnum_ConversionUploadError_name, ConversionUploadErrorEnum_ConversionUploadError_value)
+	proto.RegisterType((*ConversionUploadErrorEnum)(nil), "google.ads.googleads.v3.errors.ConversionUploadErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/conversion_upload_error.proto", fileDescriptor_c97ed55609bcddab)
+}
+
+var fileDescriptor_c97ed55609bcddab = []byte{
+	// 636 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcd, 0x6e, 0xd3, 0x40,
+	0x10, 0xa6, 0x29, 0xa4, 0xb0, 0xfd, 0xdb, 0x6e, 0x9b, 0x42, 0x4b, 0x29, 0x55, 0xe0, 0x88, 0x1c,
+	0x44, 0x24, 0x0e, 0x86, 0xcb, 0xc6, 0x9e, 0xa6, 0xab, 0x3a, 0x6b, 0x77, 0xbd, 0x1b, 0xda, 0x2a,
+	0xd2, 0x2a, 0x34, 0x51, 0x14, 0xa9, 0xf5, 0x46, 0x71, 0xdb, 0x07, 0xe2, 0xc8, 0x03, 0xf0, 0x10,
+	0x9c, 0x79, 0x0a, 0xee, 0xdc, 0xd1, 0xda, 0x71, 0x88, 0x44, 0xa8, 0xca, 0x29, 0xa3, 0x99, 0xef,
+	0x67, 0xe2, 0x99, 0x59, 0xf4, 0x71, 0x60, 0xcc, 0xe0, 0xb2, 0x5f, 0xeb, 0xf6, 0xd2, 0x5a, 0x1e,
+	0xda, 0xe8, 0xb6, 0x5e, 0xeb, 0x8f, 0xc7, 0x66, 0x9c, 0xd6, 0x2e, 0x4c, 0x72, 0xdb, 0x1f, 0xa7,
+	0x43, 0x93, 0xe8, 0x9b, 0xd1, 0xa5, 0xe9, 0xf6, 0x74, 0x56, 0x70, 0x46, 0x63, 0x73, 0x6d, 0xc8,
+	0x7e, 0x4e, 0x71, 0xba, 0xbd, 0xd4, 0x99, 0xb2, 0x9d, 0xdb, 0xba, 0x93, 0xb3, 0x77, 0xf7, 0x0a,
+	0xf5, 0xd1, 0xb0, 0xd6, 0x4d, 0x12, 0x73, 0xdd, 0xbd, 0x1e, 0x9a, 0x24, 0xcd, 0xd9, 0xd5, 0x1f,
+	0x65, 0xb4, 0xe3, 0x4d, 0xf5, 0x55, 0x26, 0x0f, 0x96, 0x08, 0xc9, 0xcd, 0x55, 0xf5, 0x5b, 0x19,
+	0x55, 0xe6, 0x56, 0xc9, 0x3a, 0x5a, 0x56, 0x3c, 0x8e, 0xc0, 0x63, 0x87, 0x0c, 0x7c, 0xfc, 0x80,
+	0x2c, 0xa3, 0x25, 0xc5, 0x8f, 0x79, 0xf8, 0x89, 0xe3, 0x05, 0xf2, 0x0a, 0xbd, 0x94, 0x61, 0xa8,
+	0x5b, 0x94, 0x9f, 0x69, 0x2f, 0xe4, 0x6d, 0x10, 0x31, 0x0b, 0x79, 0xac, 0x19, 0xd7, 0x02, 0x4e,
+	0x14, 0xc4, 0x12, 0x97, 0x48, 0x05, 0x6d, 0x28, 0x1e, 0x51, 0x11, 0x03, 0x6d, 0x04, 0xa0, 0x9b,
+	0x5e, 0xc0, 0x7c, 0xbc, 0x48, 0x5e, 0xa0, 0x9d, 0x3f, 0x14, 0x1d, 0x09, 0xf0, 0xc0, 0x87, 0x78,
+	0x52, 0x7e, 0x48, 0x36, 0xd0, 0x2a, 0x9c, 0x46, 0x4c, 0x80, 0x3f, 0x49, 0x3d, 0x22, 0x5b, 0x08,
+	0x5b, 0x37, 0x8b, 0xe4, 0x72, 0x92, 0x2d, 0x93, 0x4d, 0xb4, 0x9e, 0x85, 0x9a, 0x87, 0x52, 0x1f,
+	0x86, 0x8a, 0xfb, 0x78, 0x89, 0xec, 0xa0, 0x8a, 0xe2, 0x54, 0xc9, 0xa3, 0x50, 0xb0, 0x73, 0xf0,
+	0xb5, 0xa7, 0x62, 0x19, 0xb6, 0x40, 0xe0, 0xc7, 0xd6, 0x97, 0xf1, 0x36, 0xb5, 0x8c, 0x19, 0x7f,
+	0xea, 0x49, 0x16, 0x72, 0xfc, 0x84, 0x1c, 0xa0, 0xbd, 0x19, 0x93, 0xbf, 0x11, 0x88, 0xbc, 0x47,
+	0xef, 0x66, 0xd2, 0x52, 0x50, 0xef, 0x98, 0xf1, 0x66, 0x66, 0x0f, 0xdc, 0xfe, 0x45, 0x5f, 0x53,
+	0xa9, 0x59, 0x2b, 0x12, 0x10, 0xe7, 0x10, 0xd6, 0x02, 0xbc, 0x4c, 0x4e, 0x50, 0x0b, 0x4e, 0x25,
+	0x08, 0x4e, 0x03, 0x4d, 0xa5, 0x14, 0xac, 0xa1, 0xac, 0xa2, 0xf6, 0xa9, 0xa4, 0x3a, 0x06, 0xdb,
+	0xbc, 0xd0, 0x3c, 0xe4, 0xba, 0x40, 0x05, 0x67, 0x53, 0x1c, 0xcc, 0x6b, 0x76, 0xe5, 0x6e, 0x49,
+	0xdb, 0x50, 0x21, 0x7b, 0x5f, 0xc9, 0x55, 0x72, 0x88, 0x1a, 0xa1, 0xf0, 0x41, 0xe8, 0xc9, 0x17,
+	0x8d, 0x40, 0xb4, 0x98, 0xb4, 0xe8, 0xff, 0xd1, 0x59, 0x23, 0xcf, 0xd1, 0xd3, 0xa9, 0x0e, 0x0d,
+	0x04, 0x50, 0xff, 0xcc, 0xae, 0x85, 0x8a, 0x01, 0xaf, 0x93, 0x6d, 0x44, 0x7c, 0x15, 0x05, 0xcc,
+	0xa3, 0x12, 0x74, 0x01, 0xc3, 0xd8, 0xce, 0x72, 0xf6, 0xe3, 0xd3, 0x20, 0xc0, 0x1b, 0x04, 0xa3,
+	0x95, 0x62, 0x13, 0xb2, 0x0c, 0x21, 0x04, 0xad, 0xd9, 0x68, 0x66, 0xe2, 0x9b, 0x64, 0x0f, 0x3d,
+	0x9b, 0xb7, 0x4e, 0x19, 0x63, 0x8b, 0xbc, 0x45, 0x6f, 0xee, 0x31, 0xb3, 0x4c, 0x34, 0x9b, 0x56,
+	0x85, 0xbc, 0x46, 0x07, 0xb3, 0x5b, 0x6b, 0x4b, 0x20, 0x62, 0x1d, 0x1d, 0x85, 0x1c, 0x34, 0x57,
+	0xad, 0x06, 0x08, 0xbc, 0xdd, 0xf8, 0xb5, 0x80, 0xaa, 0x17, 0xe6, 0xca, 0xb9, 0xfb, 0x36, 0x1b,
+	0xbb, 0x73, 0x8f, 0x2b, 0xb2, 0x97, 0x19, 0x2d, 0x9c, 0xfb, 0x13, 0xf6, 0xc0, 0x5c, 0x76, 0x93,
+	0x81, 0x63, 0xc6, 0x83, 0xda, 0xa0, 0x9f, 0x64, 0x77, 0x5b, 0xbc, 0x13, 0xa3, 0x61, 0xfa, 0xaf,
+	0x67, 0xe3, 0x43, 0xfe, 0xf3, 0xa5, 0xb4, 0xd8, 0xa4, 0xf4, 0x6b, 0x69, 0xbf, 0x99, 0x8b, 0xd1,
+	0x5e, 0xea, 0xe4, 0xa1, 0x8d, 0xda, 0x75, 0x27, 0xb3, 0x4c, 0xbf, 0x17, 0x80, 0x0e, 0xed, 0xa5,
+	0x9d, 0x29, 0xa0, 0xd3, 0xae, 0x77, 0x72, 0xc0, 0xcf, 0x52, 0x35, 0xcf, 0xba, 0x2e, 0xed, 0xa5,
+	0xae, 0x3b, 0x85, 0xb8, 0x6e, 0xbb, 0xee, 0xba, 0x39, 0xe8, 0x73, 0x39, 0xeb, 0xae, 0xfe, 0x3b,
+	0x00, 0x00, 0xff, 0xff, 0x3a, 0x01, 0x0e, 0x99, 0xd3, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/country_code_error.pb.go b/googleapis/ads/googleads/v3/errors/country_code_error.pb.go
new file mode 100644
index 0000000..b16bd68
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/country_code_error.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/country_code_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing country code errors.
+type CountryCodeErrorEnum_CountryCodeError int32
+
+const (
+	// Enum unspecified.
+	CountryCodeErrorEnum_UNSPECIFIED CountryCodeErrorEnum_CountryCodeError = 0
+	// The received error code is not known in this version.
+	CountryCodeErrorEnum_UNKNOWN CountryCodeErrorEnum_CountryCodeError = 1
+	// The country code is invalid.
+	CountryCodeErrorEnum_INVALID_COUNTRY_CODE CountryCodeErrorEnum_CountryCodeError = 2
+)
+
+var CountryCodeErrorEnum_CountryCodeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_COUNTRY_CODE",
+}
+
+var CountryCodeErrorEnum_CountryCodeError_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"INVALID_COUNTRY_CODE": 2,
+}
+
+func (x CountryCodeErrorEnum_CountryCodeError) String() string {
+	return proto.EnumName(CountryCodeErrorEnum_CountryCodeError_name, int32(x))
+}
+
+func (CountryCodeErrorEnum_CountryCodeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c64e23a252258a7c, []int{0, 0}
+}
+
+// Container for enum describing country code errors.
+type CountryCodeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CountryCodeErrorEnum) Reset()         { *m = CountryCodeErrorEnum{} }
+func (m *CountryCodeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CountryCodeErrorEnum) ProtoMessage()    {}
+func (*CountryCodeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c64e23a252258a7c, []int{0}
+}
+
+func (m *CountryCodeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CountryCodeErrorEnum.Unmarshal(m, b)
+}
+func (m *CountryCodeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CountryCodeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CountryCodeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CountryCodeErrorEnum.Merge(m, src)
+}
+func (m *CountryCodeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CountryCodeErrorEnum.Size(m)
+}
+func (m *CountryCodeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CountryCodeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CountryCodeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CountryCodeErrorEnum_CountryCodeError", CountryCodeErrorEnum_CountryCodeError_name, CountryCodeErrorEnum_CountryCodeError_value)
+	proto.RegisterType((*CountryCodeErrorEnum)(nil), "google.ads.googleads.v3.errors.CountryCodeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/country_code_error.proto", fileDescriptor_c64e23a252258a7c)
+}
+
+var fileDescriptor_c64e23a252258a7c = []byte{
+	// 307 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x1c, 0xc5, 0xbf, 0xf5, 0x03, 0x85, 0xec, 0xc2, 0x52, 0x26, 0x88, 0xc8, 0x2e, 0xfa, 0x00, 0xc9,
+	0x45, 0x2e, 0x84, 0x78, 0x95, 0xb5, 0x75, 0x54, 0x25, 0x1b, 0xea, 0x2a, 0x4a, 0xa1, 0x74, 0x4b,
+	0x09, 0x83, 0x2d, 0xff, 0x91, 0x74, 0x03, 0x5f, 0xc7, 0x4b, 0x1f, 0xc5, 0x47, 0xf1, 0xca, 0x47,
+	0x90, 0x36, 0xae, 0x17, 0x03, 0xbd, 0xca, 0xe1, 0xf0, 0x3b, 0x27, 0x87, 0x3f, 0xba, 0x54, 0x00,
+	0x6a, 0x55, 0x91, 0x52, 0x5a, 0xe2, 0x64, 0xa3, 0x76, 0x94, 0x54, 0xc6, 0x80, 0xb1, 0x64, 0x01,
+	0x5b, 0x5d, 0x9b, 0xd7, 0x62, 0x01, 0xb2, 0x2a, 0x5a, 0x0f, 0x6f, 0x0c, 0xd4, 0x10, 0x0c, 0x1d,
+	0x8d, 0x4b, 0x69, 0x71, 0x17, 0xc4, 0x3b, 0x8a, 0x5d, 0xf0, 0xfc, 0x62, 0x5f, 0xbc, 0x59, 0x92,
+	0x52, 0x6b, 0xa8, 0xcb, 0x7a, 0x09, 0xda, 0xba, 0x74, 0x38, 0x47, 0x83, 0xc8, 0x35, 0x47, 0x20,
+	0xab, 0xa4, 0x89, 0x24, 0x7a, 0xbb, 0x0e, 0x6f, 0x90, 0x7f, 0xe8, 0x07, 0x27, 0xa8, 0x3f, 0x13,
+	0x0f, 0xd3, 0x24, 0x4a, 0xaf, 0xd3, 0x24, 0xf6, 0xff, 0x05, 0x7d, 0x74, 0x3c, 0x13, 0xb7, 0x62,
+	0xf2, 0x24, 0xfc, 0x5e, 0x70, 0x86, 0x06, 0xa9, 0xc8, 0xf8, 0x5d, 0x1a, 0x17, 0xd1, 0x64, 0x26,
+	0x1e, 0xef, 0x9f, 0x8b, 0x68, 0x12, 0x27, 0xbe, 0x37, 0xfa, 0xea, 0xa1, 0x70, 0x01, 0x6b, 0xfc,
+	0xf7, 0xd0, 0xd1, 0xe9, 0xe1, 0x87, 0xd3, 0x66, 0xe1, 0xb4, 0xf7, 0x12, 0xff, 0x04, 0x15, 0xac,
+	0x4a, 0xad, 0x30, 0x18, 0x45, 0x54, 0xa5, 0xdb, 0xfd, 0xfb, 0x53, 0x6d, 0x96, 0xf6, 0xb7, 0xcb,
+	0x5d, 0xb9, 0xe7, 0xcd, 0xfb, 0x3f, 0xe6, 0xfc, 0xdd, 0x1b, 0x8e, 0x5d, 0x19, 0x97, 0x16, 0x3b,
+	0xd9, 0xa8, 0x8c, 0xe2, 0xf6, 0x4b, 0xfb, 0xb1, 0x07, 0x72, 0x2e, 0x6d, 0xde, 0x01, 0x79, 0x46,
+	0x73, 0x07, 0x7c, 0x7a, 0xa1, 0x73, 0x19, 0xe3, 0xd2, 0x32, 0xd6, 0x21, 0x8c, 0x65, 0x94, 0x31,
+	0x07, 0xcd, 0x8f, 0xda, 0x75, 0xf4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x0e, 0x92, 0xbb, 0xd6,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/criterion_error.pb.go b/googleapis/ads/googleads/v3/errors/criterion_error.pb.go
new file mode 100644
index 0000000..d208365
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/criterion_error.pb.go
@@ -0,0 +1,630 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/criterion_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible criterion errors.
+type CriterionErrorEnum_CriterionError int32
+
+const (
+	// Enum unspecified.
+	CriterionErrorEnum_UNSPECIFIED CriterionErrorEnum_CriterionError = 0
+	// The received error code is not known in this version.
+	CriterionErrorEnum_UNKNOWN CriterionErrorEnum_CriterionError = 1
+	// Concrete type of criterion is required for CREATE and UPDATE operations.
+	CriterionErrorEnum_CONCRETE_TYPE_REQUIRED CriterionErrorEnum_CriterionError = 2
+	// The category requested for exclusion is invalid.
+	CriterionErrorEnum_INVALID_EXCLUDED_CATEGORY CriterionErrorEnum_CriterionError = 3
+	// Invalid keyword criteria text.
+	CriterionErrorEnum_INVALID_KEYWORD_TEXT CriterionErrorEnum_CriterionError = 4
+	// Keyword text should be less than 80 chars.
+	CriterionErrorEnum_KEYWORD_TEXT_TOO_LONG CriterionErrorEnum_CriterionError = 5
+	// Keyword text has too many words.
+	CriterionErrorEnum_KEYWORD_HAS_TOO_MANY_WORDS CriterionErrorEnum_CriterionError = 6
+	// Keyword text has invalid characters or symbols.
+	CriterionErrorEnum_KEYWORD_HAS_INVALID_CHARS CriterionErrorEnum_CriterionError = 7
+	// Invalid placement URL.
+	CriterionErrorEnum_INVALID_PLACEMENT_URL CriterionErrorEnum_CriterionError = 8
+	// Invalid user list criterion.
+	CriterionErrorEnum_INVALID_USER_LIST CriterionErrorEnum_CriterionError = 9
+	// Invalid user interest criterion.
+	CriterionErrorEnum_INVALID_USER_INTEREST CriterionErrorEnum_CriterionError = 10
+	// Placement URL has wrong format.
+	CriterionErrorEnum_INVALID_FORMAT_FOR_PLACEMENT_URL CriterionErrorEnum_CriterionError = 11
+	// Placement URL is too long.
+	CriterionErrorEnum_PLACEMENT_URL_IS_TOO_LONG CriterionErrorEnum_CriterionError = 12
+	// Indicates the URL contains an illegal character.
+	CriterionErrorEnum_PLACEMENT_URL_HAS_ILLEGAL_CHAR CriterionErrorEnum_CriterionError = 13
+	// Indicates the URL contains multiple comma separated URLs.
+	CriterionErrorEnum_PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE CriterionErrorEnum_CriterionError = 14
+	// Indicates the domain is blacklisted.
+	CriterionErrorEnum_PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION CriterionErrorEnum_CriterionError = 15
+	// Invalid topic path.
+	CriterionErrorEnum_INVALID_TOPIC_PATH CriterionErrorEnum_CriterionError = 16
+	// The YouTube Channel Id is invalid.
+	CriterionErrorEnum_INVALID_YOUTUBE_CHANNEL_ID CriterionErrorEnum_CriterionError = 17
+	// The YouTube Video Id is invalid.
+	CriterionErrorEnum_INVALID_YOUTUBE_VIDEO_ID CriterionErrorEnum_CriterionError = 18
+	// Indicates the placement is a YouTube vertical channel, which is no longer
+	// supported.
+	CriterionErrorEnum_YOUTUBE_VERTICAL_CHANNEL_DEPRECATED CriterionErrorEnum_CriterionError = 19
+	// Indicates the placement is a YouTube demographic channel, which is no
+	// longer supported.
+	CriterionErrorEnum_YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED CriterionErrorEnum_CriterionError = 20
+	// YouTube urls are not supported in Placement criterion. Use YouTubeChannel
+	// and YouTubeVideo criterion instead.
+	CriterionErrorEnum_YOUTUBE_URL_UNSUPPORTED CriterionErrorEnum_CriterionError = 21
+	// Criteria type can not be excluded by the customer, like AOL account type
+	// cannot target site type criteria.
+	CriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 22
+	// Criteria type can not be targeted.
+	CriterionErrorEnum_CANNOT_ADD_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 23
+	// Product filter in the product criteria has invalid characters. Operand
+	// and the argument in the filter can not have "==" or "&+".
+	CriterionErrorEnum_INVALID_PRODUCT_FILTER CriterionErrorEnum_CriterionError = 24
+	// Product filter in the product criteria is translated to a string as
+	// operand1==argument1&+operand2==argument2, maximum allowed length for the
+	// string is 255 chars.
+	CriterionErrorEnum_PRODUCT_FILTER_TOO_LONG CriterionErrorEnum_CriterionError = 25
+	// Not allowed to exclude similar user list.
+	CriterionErrorEnum_CANNOT_EXCLUDE_SIMILAR_USER_LIST CriterionErrorEnum_CriterionError = 26
+	// Not allowed to target a closed user list.
+	CriterionErrorEnum_CANNOT_ADD_CLOSED_USER_LIST CriterionErrorEnum_CriterionError = 27
+	// Not allowed to add display only UserLists to search only campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS CriterionErrorEnum_CriterionError = 28
+	// Not allowed to add display only UserLists to search plus campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 29
+	// Not allowed to add display only UserLists to shopping campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS CriterionErrorEnum_CriterionError = 30
+	// Not allowed to add User interests to search only campaigns.
+	CriterionErrorEnum_CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 31
+	// Not allowed to set bids for this criterion type in search campaigns
+	CriterionErrorEnum_CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 32
+	// Final URLs, URL Templates and CustomParameters cannot be set for the
+	// criterion types of Gender, AgeRange, UserList, Placement, MobileApp, and
+	// MobileAppCategory in search campaigns and shopping campaigns.
+	CriterionErrorEnum_CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE CriterionErrorEnum_CriterionError = 33
+	// Invalid custom affinity criterion.
+	CriterionErrorEnum_INVALID_CUSTOM_AFFINITY CriterionErrorEnum_CriterionError = 96
+	// Invalid custom intent criterion.
+	CriterionErrorEnum_INVALID_CUSTOM_INTENT CriterionErrorEnum_CriterionError = 97
+	// IP address is not valid.
+	CriterionErrorEnum_INVALID_IP_ADDRESS CriterionErrorEnum_CriterionError = 34
+	// IP format is not valid.
+	CriterionErrorEnum_INVALID_IP_FORMAT CriterionErrorEnum_CriterionError = 35
+	// Mobile application is not valid.
+	CriterionErrorEnum_INVALID_MOBILE_APP CriterionErrorEnum_CriterionError = 36
+	// Mobile application category is not valid.
+	CriterionErrorEnum_INVALID_MOBILE_APP_CATEGORY CriterionErrorEnum_CriterionError = 37
+	// The CriterionId does not exist or is of the incorrect type.
+	CriterionErrorEnum_INVALID_CRITERION_ID CriterionErrorEnum_CriterionError = 38
+	// The Criterion is not allowed to be targeted.
+	CriterionErrorEnum_CANNOT_TARGET_CRITERION CriterionErrorEnum_CriterionError = 39
+	// The criterion is not allowed to be targeted as it is deprecated.
+	CriterionErrorEnum_CANNOT_TARGET_OBSOLETE_CRITERION CriterionErrorEnum_CriterionError = 40
+	// The CriterionId is not valid for the type.
+	CriterionErrorEnum_CRITERION_ID_AND_TYPE_MISMATCH CriterionErrorEnum_CriterionError = 41
+	// Distance for the radius for the proximity criterion is invalid.
+	CriterionErrorEnum_INVALID_PROXIMITY_RADIUS CriterionErrorEnum_CriterionError = 42
+	// Units for the distance for the radius for the proximity criterion is
+	// invalid.
+	CriterionErrorEnum_INVALID_PROXIMITY_RADIUS_UNITS CriterionErrorEnum_CriterionError = 43
+	// Street address in the address is not valid.
+	CriterionErrorEnum_INVALID_STREETADDRESS_LENGTH CriterionErrorEnum_CriterionError = 44
+	// City name in the address is not valid.
+	CriterionErrorEnum_INVALID_CITYNAME_LENGTH CriterionErrorEnum_CriterionError = 45
+	// Region code in the address is not valid.
+	CriterionErrorEnum_INVALID_REGIONCODE_LENGTH CriterionErrorEnum_CriterionError = 46
+	// Region name in the address is not valid.
+	CriterionErrorEnum_INVALID_REGIONNAME_LENGTH CriterionErrorEnum_CriterionError = 47
+	// Postal code in the address is not valid.
+	CriterionErrorEnum_INVALID_POSTALCODE_LENGTH CriterionErrorEnum_CriterionError = 48
+	// Country code in the address is not valid.
+	CriterionErrorEnum_INVALID_COUNTRY_CODE CriterionErrorEnum_CriterionError = 49
+	// Latitude for the GeoPoint is not valid.
+	CriterionErrorEnum_INVALID_LATITUDE CriterionErrorEnum_CriterionError = 50
+	// Longitude for the GeoPoint is not valid.
+	CriterionErrorEnum_INVALID_LONGITUDE CriterionErrorEnum_CriterionError = 51
+	// The Proximity input is not valid. Both address and geoPoint cannot be
+	// null.
+	CriterionErrorEnum_PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL CriterionErrorEnum_CriterionError = 52
+	// The Proximity address cannot be geocoded to a valid lat/long.
+	CriterionErrorEnum_INVALID_PROXIMITY_ADDRESS CriterionErrorEnum_CriterionError = 53
+	// User domain name is not valid.
+	CriterionErrorEnum_INVALID_USER_DOMAIN_NAME CriterionErrorEnum_CriterionError = 54
+	// Length of serialized criterion parameter exceeded size limit.
+	CriterionErrorEnum_CRITERION_PARAMETER_TOO_LONG CriterionErrorEnum_CriterionError = 55
+	// Time interval in the AdSchedule overlaps with another AdSchedule.
+	CriterionErrorEnum_AD_SCHEDULE_TIME_INTERVALS_OVERLAP CriterionErrorEnum_CriterionError = 56
+	// AdSchedule time interval cannot span multiple days.
+	CriterionErrorEnum_AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS CriterionErrorEnum_CriterionError = 57
+	// AdSchedule time interval specified is invalid, endTime cannot be earlier
+	// than startTime.
+	CriterionErrorEnum_AD_SCHEDULE_INVALID_TIME_INTERVAL CriterionErrorEnum_CriterionError = 58
+	// The number of AdSchedule entries in a day exceeds the limit.
+	CriterionErrorEnum_AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT CriterionErrorEnum_CriterionError = 59
+	// CriteriaId does not match the interval of the AdSchedule specified.
+	CriterionErrorEnum_AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS CriterionErrorEnum_CriterionError = 60
+	// Cannot set bid modifier for this criterion type.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_CRITERION_TYPE CriterionErrorEnum_CriterionError = 61
+	// Cannot bid modify criterion, since it is opted out of the campaign.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT CriterionErrorEnum_CriterionError = 62
+	// Cannot set bid modifier for a negative criterion.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_NEGATIVE_CRITERION CriterionErrorEnum_CriterionError = 63
+	// Bid Modifier already exists. Use SET operation to update.
+	CriterionErrorEnum_BID_MODIFIER_ALREADY_EXISTS CriterionErrorEnum_CriterionError = 64
+	// Feed Id is not allowed in these Location Groups.
+	CriterionErrorEnum_FEED_ID_NOT_ALLOWED CriterionErrorEnum_CriterionError = 65
+	// The account may not use the requested criteria type. For example, some
+	// accounts are restricted to keywords only.
+	CriterionErrorEnum_ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 66
+	// The requested criteria type cannot be used with campaign or ad group
+	// bidding strategy.
+	CriterionErrorEnum_CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY CriterionErrorEnum_CriterionError = 67
+	// The Criterion is not allowed to be excluded.
+	CriterionErrorEnum_CANNOT_EXCLUDE_CRITERION CriterionErrorEnum_CriterionError = 68
+	// The criterion is not allowed to be removed. For example, we cannot remove
+	// any of the device criterion.
+	CriterionErrorEnum_CANNOT_REMOVE_CRITERION CriterionErrorEnum_CriterionError = 69
+	// The combined length of product dimension values of the product scope
+	// criterion is too long.
+	CriterionErrorEnum_PRODUCT_SCOPE_TOO_LONG CriterionErrorEnum_CriterionError = 70
+	// Product scope contains too many dimensions.
+	CriterionErrorEnum_PRODUCT_SCOPE_TOO_MANY_DIMENSIONS CriterionErrorEnum_CriterionError = 71
+	// The combined length of product dimension values of the product partition
+	// criterion is too long.
+	CriterionErrorEnum_PRODUCT_PARTITION_TOO_LONG CriterionErrorEnum_CriterionError = 72
+	// Product partition contains too many dimensions.
+	CriterionErrorEnum_PRODUCT_PARTITION_TOO_MANY_DIMENSIONS CriterionErrorEnum_CriterionError = 73
+	// The product dimension is invalid (e.g. dimension contains illegal value,
+	// dimension type is represented with wrong class, etc). Product dimension
+	// value can not contain "==" or "&+".
+	CriterionErrorEnum_INVALID_PRODUCT_DIMENSION CriterionErrorEnum_CriterionError = 74
+	// Product dimension type is either invalid for campaigns of this type or
+	// cannot be used in the current context. BIDDING_CATEGORY_Lx and
+	// PRODUCT_TYPE_Lx product dimensions must be used in ascending order of
+	// their levels: L1, L2, L3, L4, L5... The levels must be specified
+	// sequentially and start from L1. Furthermore, an "others" product
+	// partition cannot be subdivided with a dimension of the same type but of a
+	// higher level ("others" BIDDING_CATEGORY_L3 can be subdivided with BRAND
+	// but not with BIDDING_CATEGORY_L4).
+	CriterionErrorEnum_INVALID_PRODUCT_DIMENSION_TYPE CriterionErrorEnum_CriterionError = 75
+	// Bidding categories do not form a valid path in the Shopping bidding
+	// category taxonomy.
+	CriterionErrorEnum_INVALID_PRODUCT_BIDDING_CATEGORY CriterionErrorEnum_CriterionError = 76
+	// ShoppingSetting must be added to the campaign before ProductScope
+	// criteria can be added.
+	CriterionErrorEnum_MISSING_SHOPPING_SETTING CriterionErrorEnum_CriterionError = 77
+	// Matching function is invalid.
+	CriterionErrorEnum_INVALID_MATCHING_FUNCTION CriterionErrorEnum_CriterionError = 78
+	// Filter parameters not allowed for location groups targeting.
+	CriterionErrorEnum_LOCATION_FILTER_NOT_ALLOWED CriterionErrorEnum_CriterionError = 79
+	// Feed not found, or the feed is not an enabled location feed.
+	CriterionErrorEnum_INVALID_FEED_FOR_LOCATION_FILTER CriterionErrorEnum_CriterionError = 98
+	// Given location filter parameter is invalid for location groups targeting.
+	CriterionErrorEnum_LOCATION_FILTER_INVALID CriterionErrorEnum_CriterionError = 80
+	// Criteria type cannot be associated with a campaign and its ad group(s)
+	// simultaneously.
+	CriterionErrorEnum_CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP CriterionErrorEnum_CriterionError = 81
+	// Range represented by hotel length of stay's min nights and max nights
+	// overlaps with an existing criterion.
+	CriterionErrorEnum_HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION CriterionErrorEnum_CriterionError = 82
+	// Range represented by hotel advance booking window's min days and max days
+	// overlaps with an existing criterion.
+	CriterionErrorEnum_HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION CriterionErrorEnum_CriterionError = 83
+	// The field is not allowed to be set when the negative field is set to
+	// true, e.g. we don't allow bids in negative ad group or campaign criteria.
+	CriterionErrorEnum_FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING CriterionErrorEnum_CriterionError = 84
+	// The combination of operand and operator in webpage condition is invalid.
+	CriterionErrorEnum_INVALID_WEBPAGE_CONDITION CriterionErrorEnum_CriterionError = 85
+	// The URL of webpage condition is invalid.
+	CriterionErrorEnum_INVALID_WEBPAGE_CONDITION_URL CriterionErrorEnum_CriterionError = 86
+	// The URL of webpage condition cannot be empty or contain white space.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_CANNOT_BE_EMPTY CriterionErrorEnum_CriterionError = 87
+	// The URL of webpage condition contains an unsupported protocol.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_UNSUPPORTED_PROTOCOL CriterionErrorEnum_CriterionError = 88
+	// The URL of webpage condition cannot be an IP address.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_CANNOT_BE_IP_ADDRESS CriterionErrorEnum_CriterionError = 89
+	// The domain of the URL is not consistent with the domain in campaign
+	// setting.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_DOMAIN_NOT_CONSISTENT_WITH_CAMPAIGN_SETTING CriterionErrorEnum_CriterionError = 90
+	// The URL of webpage condition cannot be a public suffix itself.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_CANNOT_BE_PUBLIC_SUFFIX CriterionErrorEnum_CriterionError = 91
+	// The URL of webpage condition has an invalid public suffix.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_INVALID_PUBLIC_SUFFIX CriterionErrorEnum_CriterionError = 92
+	// Value track parameter is not supported in webpage condition URL.
+	CriterionErrorEnum_WEBPAGE_CONDITION_URL_VALUE_TRACK_VALUE_NOT_SUPPORTED CriterionErrorEnum_CriterionError = 93
+	// Only one URL-EQUALS webpage condition is allowed in a webpage
+	// criterion and it cannot be combined with other conditions.
+	CriterionErrorEnum_WEBPAGE_CRITERION_URL_EQUALS_CAN_HAVE_ONLY_ONE_CONDITION CriterionErrorEnum_CriterionError = 94
+	// A webpage criterion cannot be added to a non-DSA ad group.
+	CriterionErrorEnum_WEBPAGE_CRITERION_NOT_SUPPORTED_ON_NON_DSA_AD_GROUP CriterionErrorEnum_CriterionError = 95
+	// Cannot add positive user list criteria in Smart Display campaigns.
+	CriterionErrorEnum_CANNOT_TARGET_USER_LIST_FOR_SMART_DISPLAY_CAMPAIGNS CriterionErrorEnum_CriterionError = 99
+)
+
+var CriterionErrorEnum_CriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CONCRETE_TYPE_REQUIRED",
+	3:  "INVALID_EXCLUDED_CATEGORY",
+	4:  "INVALID_KEYWORD_TEXT",
+	5:  "KEYWORD_TEXT_TOO_LONG",
+	6:  "KEYWORD_HAS_TOO_MANY_WORDS",
+	7:  "KEYWORD_HAS_INVALID_CHARS",
+	8:  "INVALID_PLACEMENT_URL",
+	9:  "INVALID_USER_LIST",
+	10: "INVALID_USER_INTEREST",
+	11: "INVALID_FORMAT_FOR_PLACEMENT_URL",
+	12: "PLACEMENT_URL_IS_TOO_LONG",
+	13: "PLACEMENT_URL_HAS_ILLEGAL_CHAR",
+	14: "PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE",
+	15: "PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION",
+	16: "INVALID_TOPIC_PATH",
+	17: "INVALID_YOUTUBE_CHANNEL_ID",
+	18: "INVALID_YOUTUBE_VIDEO_ID",
+	19: "YOUTUBE_VERTICAL_CHANNEL_DEPRECATED",
+	20: "YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED",
+	21: "YOUTUBE_URL_UNSUPPORTED",
+	22: "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	23: "CANNOT_ADD_CRITERIA_TYPE",
+	24: "INVALID_PRODUCT_FILTER",
+	25: "PRODUCT_FILTER_TOO_LONG",
+	26: "CANNOT_EXCLUDE_SIMILAR_USER_LIST",
+	27: "CANNOT_ADD_CLOSED_USER_LIST",
+	28: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS",
+	29: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS",
+	30: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS",
+	31: "CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS",
+	32: "CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS",
+	33: "CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE",
+	96: "INVALID_CUSTOM_AFFINITY",
+	97: "INVALID_CUSTOM_INTENT",
+	34: "INVALID_IP_ADDRESS",
+	35: "INVALID_IP_FORMAT",
+	36: "INVALID_MOBILE_APP",
+	37: "INVALID_MOBILE_APP_CATEGORY",
+	38: "INVALID_CRITERION_ID",
+	39: "CANNOT_TARGET_CRITERION",
+	40: "CANNOT_TARGET_OBSOLETE_CRITERION",
+	41: "CRITERION_ID_AND_TYPE_MISMATCH",
+	42: "INVALID_PROXIMITY_RADIUS",
+	43: "INVALID_PROXIMITY_RADIUS_UNITS",
+	44: "INVALID_STREETADDRESS_LENGTH",
+	45: "INVALID_CITYNAME_LENGTH",
+	46: "INVALID_REGIONCODE_LENGTH",
+	47: "INVALID_REGIONNAME_LENGTH",
+	48: "INVALID_POSTALCODE_LENGTH",
+	49: "INVALID_COUNTRY_CODE",
+	50: "INVALID_LATITUDE",
+	51: "INVALID_LONGITUDE",
+	52: "PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL",
+	53: "INVALID_PROXIMITY_ADDRESS",
+	54: "INVALID_USER_DOMAIN_NAME",
+	55: "CRITERION_PARAMETER_TOO_LONG",
+	56: "AD_SCHEDULE_TIME_INTERVALS_OVERLAP",
+	57: "AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS",
+	58: "AD_SCHEDULE_INVALID_TIME_INTERVAL",
+	59: "AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT",
+	60: "AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS",
+	61: "CANNOT_BID_MODIFY_CRITERION_TYPE",
+	62: "CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT",
+	63: "CANNOT_BID_MODIFY_NEGATIVE_CRITERION",
+	64: "BID_MODIFIER_ALREADY_EXISTS",
+	65: "FEED_ID_NOT_ALLOWED",
+	66: "ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE",
+	67: "CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY",
+	68: "CANNOT_EXCLUDE_CRITERION",
+	69: "CANNOT_REMOVE_CRITERION",
+	70: "PRODUCT_SCOPE_TOO_LONG",
+	71: "PRODUCT_SCOPE_TOO_MANY_DIMENSIONS",
+	72: "PRODUCT_PARTITION_TOO_LONG",
+	73: "PRODUCT_PARTITION_TOO_MANY_DIMENSIONS",
+	74: "INVALID_PRODUCT_DIMENSION",
+	75: "INVALID_PRODUCT_DIMENSION_TYPE",
+	76: "INVALID_PRODUCT_BIDDING_CATEGORY",
+	77: "MISSING_SHOPPING_SETTING",
+	78: "INVALID_MATCHING_FUNCTION",
+	79: "LOCATION_FILTER_NOT_ALLOWED",
+	98: "INVALID_FEED_FOR_LOCATION_FILTER",
+	80: "LOCATION_FILTER_INVALID",
+	81: "CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP",
+	82: "HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION",
+	83: "HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION",
+	84: "FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING",
+	85: "INVALID_WEBPAGE_CONDITION",
+	86: "INVALID_WEBPAGE_CONDITION_URL",
+	87: "WEBPAGE_CONDITION_URL_CANNOT_BE_EMPTY",
+	88: "WEBPAGE_CONDITION_URL_UNSUPPORTED_PROTOCOL",
+	89: "WEBPAGE_CONDITION_URL_CANNOT_BE_IP_ADDRESS",
+	90: "WEBPAGE_CONDITION_URL_DOMAIN_NOT_CONSISTENT_WITH_CAMPAIGN_SETTING",
+	91: "WEBPAGE_CONDITION_URL_CANNOT_BE_PUBLIC_SUFFIX",
+	92: "WEBPAGE_CONDITION_URL_INVALID_PUBLIC_SUFFIX",
+	93: "WEBPAGE_CONDITION_URL_VALUE_TRACK_VALUE_NOT_SUPPORTED",
+	94: "WEBPAGE_CRITERION_URL_EQUALS_CAN_HAVE_ONLY_ONE_CONDITION",
+	95: "WEBPAGE_CRITERION_NOT_SUPPORTED_ON_NON_DSA_AD_GROUP",
+	99: "CANNOT_TARGET_USER_LIST_FOR_SMART_DISPLAY_CAMPAIGNS",
+}
+
+var CriterionErrorEnum_CriterionError_value = map[string]int32{
+	"UNSPECIFIED":                                                       0,
+	"UNKNOWN":                                                           1,
+	"CONCRETE_TYPE_REQUIRED":                                            2,
+	"INVALID_EXCLUDED_CATEGORY":                                         3,
+	"INVALID_KEYWORD_TEXT":                                              4,
+	"KEYWORD_TEXT_TOO_LONG":                                             5,
+	"KEYWORD_HAS_TOO_MANY_WORDS":                                        6,
+	"KEYWORD_HAS_INVALID_CHARS":                                         7,
+	"INVALID_PLACEMENT_URL":                                             8,
+	"INVALID_USER_LIST":                                                 9,
+	"INVALID_USER_INTEREST":                                             10,
+	"INVALID_FORMAT_FOR_PLACEMENT_URL":                                  11,
+	"PLACEMENT_URL_IS_TOO_LONG":                                         12,
+	"PLACEMENT_URL_HAS_ILLEGAL_CHAR":                                    13,
+	"PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE":                          14,
+	"PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION":             15,
+	"INVALID_TOPIC_PATH":                                                16,
+	"INVALID_YOUTUBE_CHANNEL_ID":                                        17,
+	"INVALID_YOUTUBE_VIDEO_ID":                                          18,
+	"YOUTUBE_VERTICAL_CHANNEL_DEPRECATED":                               19,
+	"YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED":                            20,
+	"YOUTUBE_URL_UNSUPPORTED":                                           21,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":                                      22,
+	"CANNOT_ADD_CRITERIA_TYPE":                                          23,
+	"INVALID_PRODUCT_FILTER":                                            24,
+	"PRODUCT_FILTER_TOO_LONG":                                           25,
+	"CANNOT_EXCLUDE_SIMILAR_USER_LIST":                                  26,
+	"CANNOT_ADD_CLOSED_USER_LIST":                                       27,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS":            28,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS":                 29,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS":               30,
+	"CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS":                     31,
+	"CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS":             32,
+	"CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE":               33,
+	"INVALID_CUSTOM_AFFINITY":                                           96,
+	"INVALID_CUSTOM_INTENT":                                             97,
+	"INVALID_IP_ADDRESS":                                                34,
+	"INVALID_IP_FORMAT":                                                 35,
+	"INVALID_MOBILE_APP":                                                36,
+	"INVALID_MOBILE_APP_CATEGORY":                                       37,
+	"INVALID_CRITERION_ID":                                              38,
+	"CANNOT_TARGET_CRITERION":                                           39,
+	"CANNOT_TARGET_OBSOLETE_CRITERION":                                  40,
+	"CRITERION_ID_AND_TYPE_MISMATCH":                                    41,
+	"INVALID_PROXIMITY_RADIUS":                                          42,
+	"INVALID_PROXIMITY_RADIUS_UNITS":                                    43,
+	"INVALID_STREETADDRESS_LENGTH":                                      44,
+	"INVALID_CITYNAME_LENGTH":                                           45,
+	"INVALID_REGIONCODE_LENGTH":                                         46,
+	"INVALID_REGIONNAME_LENGTH":                                         47,
+	"INVALID_POSTALCODE_LENGTH":                                         48,
+	"INVALID_COUNTRY_CODE":                                              49,
+	"INVALID_LATITUDE":                                                  50,
+	"INVALID_LONGITUDE":                                                 51,
+	"PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL":                52,
+	"INVALID_PROXIMITY_ADDRESS":                                         53,
+	"INVALID_USER_DOMAIN_NAME":                                          54,
+	"CRITERION_PARAMETER_TOO_LONG":                                      55,
+	"AD_SCHEDULE_TIME_INTERVALS_OVERLAP":                                56,
+	"AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS":                    57,
+	"AD_SCHEDULE_INVALID_TIME_INTERVAL":                                 58,
+	"AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT":                      59,
+	"AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS":                       60,
+	"CANNOT_BID_MODIFY_CRITERION_TYPE":                                  61,
+	"CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT":                    62,
+	"CANNOT_BID_MODIFY_NEGATIVE_CRITERION":                              63,
+	"BID_MODIFIER_ALREADY_EXISTS":                                       64,
+	"FEED_ID_NOT_ALLOWED":                                               65,
+	"ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE":                              66,
+	"CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY":                        67,
+	"CANNOT_EXCLUDE_CRITERION":                                          68,
+	"CANNOT_REMOVE_CRITERION":                                           69,
+	"PRODUCT_SCOPE_TOO_LONG":                                            70,
+	"PRODUCT_SCOPE_TOO_MANY_DIMENSIONS":                                 71,
+	"PRODUCT_PARTITION_TOO_LONG":                                        72,
+	"PRODUCT_PARTITION_TOO_MANY_DIMENSIONS":                             73,
+	"INVALID_PRODUCT_DIMENSION":                                         74,
+	"INVALID_PRODUCT_DIMENSION_TYPE":                                    75,
+	"INVALID_PRODUCT_BIDDING_CATEGORY":                                  76,
+	"MISSING_SHOPPING_SETTING":                                          77,
+	"INVALID_MATCHING_FUNCTION":                                         78,
+	"LOCATION_FILTER_NOT_ALLOWED":                                       79,
+	"INVALID_FEED_FOR_LOCATION_FILTER":                                  98,
+	"LOCATION_FILTER_INVALID":                                           80,
+	"CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP":                    81,
+	"HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION":             82,
+	"HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION":     83,
+	"FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING":                        84,
+	"INVALID_WEBPAGE_CONDITION":                                         85,
+	"INVALID_WEBPAGE_CONDITION_URL":                                     86,
+	"WEBPAGE_CONDITION_URL_CANNOT_BE_EMPTY":                             87,
+	"WEBPAGE_CONDITION_URL_UNSUPPORTED_PROTOCOL":                        88,
+	"WEBPAGE_CONDITION_URL_CANNOT_BE_IP_ADDRESS":                        89,
+	"WEBPAGE_CONDITION_URL_DOMAIN_NOT_CONSISTENT_WITH_CAMPAIGN_SETTING": 90,
+	"WEBPAGE_CONDITION_URL_CANNOT_BE_PUBLIC_SUFFIX":                     91,
+	"WEBPAGE_CONDITION_URL_INVALID_PUBLIC_SUFFIX":                       92,
+	"WEBPAGE_CONDITION_URL_VALUE_TRACK_VALUE_NOT_SUPPORTED":             93,
+	"WEBPAGE_CRITERION_URL_EQUALS_CAN_HAVE_ONLY_ONE_CONDITION":          94,
+	"WEBPAGE_CRITERION_NOT_SUPPORTED_ON_NON_DSA_AD_GROUP":               95,
+	"CANNOT_TARGET_USER_LIST_FOR_SMART_DISPLAY_CAMPAIGNS":               99,
+}
+
+func (x CriterionErrorEnum_CriterionError) String() string {
+	return proto.EnumName(CriterionErrorEnum_CriterionError_name, int32(x))
+}
+
+func (CriterionErrorEnum_CriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_333180aa63050caa, []int{0, 0}
+}
+
+// Container for enum describing possible criterion errors.
+type CriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionErrorEnum) Reset()         { *m = CriterionErrorEnum{} }
+func (m *CriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CriterionErrorEnum) ProtoMessage()    {}
+func (*CriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_333180aa63050caa, []int{0}
+}
+
+func (m *CriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *CriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionErrorEnum.Merge(m, src)
+}
+func (m *CriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionErrorEnum.Size(m)
+}
+func (m *CriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CriterionErrorEnum_CriterionError", CriterionErrorEnum_CriterionError_name, CriterionErrorEnum_CriterionError_value)
+	proto.RegisterType((*CriterionErrorEnum)(nil), "google.ads.googleads.v3.errors.CriterionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/criterion_error.proto", fileDescriptor_333180aa63050caa)
+}
+
+var fileDescriptor_333180aa63050caa = []byte{
+	// 1713 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0xdd, 0x76, 0x1b, 0xb7,
+	0x11, 0xae, 0x9d, 0x36, 0x69, 0xe1, 0x36, 0x41, 0xe0, 0xff, 0x1f, 0x29, 0xb6, 0x62, 0x3b, 0x8e,
+	0xe3, 0x50, 0xb1, 0x15, 0x3b, 0x09, 0x93, 0xb4, 0x05, 0x17, 0x43, 0x12, 0x15, 0x16, 0x80, 0x01,
+	0x2c, 0x25, 0xa6, 0x6a, 0x51, 0xc5, 0xf2, 0xd1, 0xd1, 0x39, 0x89, 0xe8, 0x23, 0xb9, 0x79, 0xa0,
+	0x5e, 0xf6, 0x51, 0xf2, 0x16, 0xbd, 0xed, 0x45, 0x9f, 0xa1, 0x67, 0x76, 0x89, 0x25, 0x96, 0x92,
+	0xed, 0x5c, 0x91, 0x67, 0x66, 0x3e, 0x60, 0x06, 0xf3, 0xcd, 0xcf, 0x92, 0xcf, 0xf7, 0x67, 0xb3,
+	0xfd, 0x1f, 0x9e, 0xaf, 0xef, 0xee, 0x1d, 0xaf, 0x37, 0x7f, 0xf1, 0xdf, 0x4f, 0x1b, 0xeb, 0xcf,
+	0x8f, 0x8e, 0x66, 0x47, 0xc7, 0xeb, 0xcf, 0x8e, 0x0e, 0x5e, 0x3e, 0x3f, 0x3a, 0x98, 0x1d, 0xc6,
+	0x5a, 0xd0, 0x7b, 0x71, 0x34, 0x7b, 0x39, 0x63, 0xab, 0x8d, 0x69, 0x6f, 0x77, 0xef, 0xb8, 0xd7,
+	0xa2, 0x7a, 0x3f, 0x6d, 0xf4, 0x1a, 0xd4, 0xb5, 0x1b, 0xe9, 0xd4, 0x17, 0x07, 0xeb, 0xbb, 0x87,
+	0x87, 0xb3, 0x97, 0xbb, 0x2f, 0x0f, 0x66, 0x87, 0xc7, 0x0d, 0x7a, 0xed, 0x3f, 0x2b, 0x84, 0x15,
+	0xe9, 0x5c, 0x40, 0x04, 0x1c, 0xfe, 0xf3, 0xc7, 0xb5, 0x9f, 0x57, 0xc8, 0xbb, 0x5d, 0x31, 0x7b,
+	0x8f, 0x9c, 0xab, 0xb4, 0xb7, 0x50, 0xc8, 0xa1, 0x04, 0x41, 0x7f, 0xc5, 0xce, 0x91, 0x77, 0x2a,
+	0xbd, 0xa9, 0xcd, 0x96, 0xa6, 0x67, 0xd8, 0x35, 0x72, 0xa9, 0x30, 0xba, 0x70, 0x10, 0x20, 0x86,
+	0xa9, 0x85, 0xe8, 0xe0, 0x69, 0x25, 0x1d, 0x08, 0x7a, 0x96, 0xad, 0x90, 0xab, 0x52, 0x4f, 0xb8,
+	0x92, 0x22, 0xc2, 0x76, 0xa1, 0x2a, 0x01, 0x22, 0x16, 0x3c, 0xc0, 0xc8, 0xb8, 0x29, 0x7d, 0x8b,
+	0x5d, 0x21, 0x17, 0x92, 0x7a, 0x13, 0xa6, 0x5b, 0xc6, 0x89, 0x18, 0x60, 0x3b, 0xd0, 0x5f, 0xb3,
+	0xab, 0xe4, 0x62, 0x2e, 0x89, 0xc1, 0x98, 0xa8, 0x8c, 0x1e, 0xd1, 0xdf, 0xb0, 0x55, 0x72, 0x2d,
+	0xa9, 0xc6, 0xdc, 0xd7, 0x9a, 0x92, 0xeb, 0x69, 0x44, 0x89, 0xa7, 0x6f, 0xe3, 0x9d, 0xb9, 0x3e,
+	0x5d, 0x50, 0x8c, 0xb9, 0xf3, 0xf4, 0x1d, 0x3c, 0x39, 0x89, 0xac, 0xe2, 0x05, 0x94, 0xa0, 0x43,
+	0xac, 0x9c, 0xa2, 0xbf, 0x65, 0x17, 0xc9, 0xfb, 0x49, 0x55, 0x79, 0x70, 0x51, 0x49, 0x1f, 0xe8,
+	0xef, 0x72, 0x44, 0x2d, 0x96, 0x3a, 0x80, 0x03, 0x1f, 0x28, 0x61, 0xb7, 0xc9, 0xcd, 0xa4, 0x1a,
+	0x1a, 0x57, 0xf2, 0x80, 0x3f, 0x4b, 0xe7, 0x9e, 0x43, 0x8f, 0x3a, 0xa2, 0x28, 0xfd, 0x22, 0xa0,
+	0xdf, 0xb3, 0x35, 0xb2, 0xda, 0x55, 0xd7, 0x6e, 0x2b, 0x05, 0x23, 0xae, 0x6a, 0xb7, 0xe9, 0x1f,
+	0xd8, 0x03, 0x72, 0xef, 0xa4, 0x4d, 0x59, 0xa9, 0x20, 0xad, 0x82, 0xe8, 0x65, 0x00, 0x8c, 0x34,
+	0x2a, 0xa9, 0x81, 0xbe, 0xcb, 0xbe, 0x22, 0x8f, 0x17, 0xd6, 0xd2, 0x47, 0x6d, 0x42, 0xe4, 0x13,
+	0x2e, 0x15, 0x1f, 0x28, 0xa8, 0x5d, 0x0c, 0xdc, 0x8d, 0x20, 0x48, 0x3d, 0x8a, 0xc6, 0x35, 0xa9,
+	0xf1, 0xd2, 0x68, 0xfa, 0x1e, 0xbb, 0x44, 0x58, 0x8a, 0x28, 0x18, 0x2b, 0x8b, 0x68, 0x79, 0x18,
+	0x53, 0x8a, 0xaf, 0x9e, 0xe4, 0x53, 0x53, 0x85, 0x6a, 0x00, 0xe8, 0x9a, 0xd6, 0xa0, 0xa2, 0x14,
+	0xf4, 0x7d, 0x76, 0x83, 0x5c, 0x59, 0xd6, 0x4f, 0xa4, 0x00, 0x83, 0x5a, 0xc6, 0x3e, 0x22, 0x1f,
+	0xb6, 0x52, 0x70, 0x41, 0x16, 0x4d, 0x64, 0x35, 0x5c, 0x80, 0x75, 0x80, 0xa4, 0x10, 0xf4, 0x3c,
+	0xbb, 0x4f, 0xee, 0x26, 0x43, 0x01, 0xa5, 0x19, 0x39, 0x6e, 0xc7, 0xb2, 0x38, 0xcd, 0xf6, 0x02,
+	0xbb, 0x4e, 0x2e, 0x27, 0x5b, 0x7c, 0x91, 0x4a, 0xfb, 0xca, 0x5a, 0xe3, 0x50, 0x79, 0x91, 0xdd,
+	0x24, 0x37, 0x0a, 0xae, 0x31, 0xf0, 0x39, 0xf1, 0x62, 0xe1, 0x64, 0x00, 0x27, 0x79, 0x4d, 0x52,
+	0x7a, 0x09, 0x3d, 0x9e, 0x5b, 0x70, 0x21, 0x96, 0xb4, 0x97, 0x91, 0xd5, 0x2d, 0x4d, 0x9c, 0x11,
+	0x55, 0x11, 0xe2, 0x50, 0xaa, 0x00, 0x8e, 0x5e, 0xc1, 0x8b, 0xbb, 0xb2, 0x45, 0x36, 0xaf, 0x22,
+	0x25, 0x96, 0x2e, 0xf6, 0xb2, 0x94, 0x8a, 0xbb, 0x8c, 0x53, 0xd7, 0xd8, 0x07, 0xe4, 0x7a, 0x7e,
+	0xb9, 0x32, 0x1e, 0x72, 0xd2, 0x5d, 0x67, 0x7d, 0xf2, 0x24, 0x33, 0x10, 0xd2, 0x5b, 0xc5, 0xa7,
+	0xd1, 0x68, 0x35, 0xad, 0x2d, 0x90, 0x40, 0xd1, 0x03, 0x77, 0xc5, 0xb8, 0x11, 0x16, 0xbc, 0xb4,
+	0x5c, 0x8e, 0xb4, 0xa7, 0x37, 0xd8, 0x63, 0xf2, 0xf0, 0x97, 0x62, 0x17, 0xb0, 0x15, 0xf6, 0x05,
+	0xd9, 0x78, 0x33, 0x6c, 0x6c, 0xac, 0x45, 0xda, 0x2c, 0x80, 0xab, 0xec, 0x21, 0xf9, 0x34, 0x03,
+	0x76, 0x6a, 0xe4, 0xf4, 0xbb, 0x3e, 0x40, 0x86, 0xce, 0x21, 0x1e, 0x42, 0x1c, 0x48, 0xe1, 0xa3,
+	0xd1, 0x29, 0x09, 0x46, 0x37, 0x8d, 0x44, 0xea, 0x93, 0xd0, 0x9b, 0x4b, 0x6e, 0x56, 0x4e, 0xd5,
+	0x77, 0x2c, 0x41, 0x91, 0xe3, 0x09, 0xd4, 0xa4, 0xf4, 0x16, 0xa6, 0xad, 0x6d, 0x06, 0x95, 0x0f,
+	0xa6, 0x8c, 0x7c, 0x38, 0x94, 0x5a, 0x86, 0x29, 0xfd, 0x47, 0x5e, 0xe4, 0x73, 0x25, 0x86, 0xa0,
+	0x03, 0xdd, 0xcd, 0x4b, 0x42, 0x5a, 0xbc, 0xd4, 0x81, 0xf7, 0x74, 0x2d, 0x6f, 0x17, 0xd2, 0xce,
+	0xeb, 0x9f, 0x7e, 0x98, 0x9b, 0x97, 0x66, 0x20, 0x15, 0x44, 0x6e, 0x2d, 0xbd, 0x8d, 0x29, 0x3f,
+	0x29, 0x5f, 0x74, 0xc3, 0x3b, 0x79, 0x37, 0x5c, 0x44, 0x23, 0x05, 0xbd, 0x8b, 0x9e, 0xcf, 0x43,
+	0x6e, 0xea, 0x76, 0xa1, 0xa7, 0x1f, 0x65, 0x84, 0x9b, 0x2b, 0xcd, 0xc0, 0x1b, 0x85, 0xdd, 0x78,
+	0x61, 0x75, 0x0f, 0x9b, 0x4c, 0x7e, 0x68, 0xe4, 0x5a, 0x34, 0x2f, 0x55, 0x4a, 0x5f, 0xf2, 0x50,
+	0x8c, 0xe9, 0xc7, 0x79, 0x0d, 0x5b, 0x67, 0xb6, 0x65, 0x29, 0xc3, 0x34, 0x3a, 0x2e, 0x64, 0xe5,
+	0xe9, 0x7d, 0x3c, 0xe1, 0x55, 0xda, 0x58, 0x69, 0x19, 0x3c, 0xfd, 0x04, 0xab, 0x2e, 0xd9, 0xf8,
+	0xe0, 0x00, 0xc2, 0xfc, 0xb5, 0xa2, 0x02, 0x3d, 0x0a, 0x63, 0xfa, 0xa0, 0x93, 0x04, 0x19, 0xa6,
+	0x9a, 0x97, 0x90, 0x94, 0x9f, 0xe6, 0xe3, 0xc2, 0xc1, 0x48, 0x1a, 0x5d, 0x18, 0xd1, 0xaa, 0x7b,
+	0x27, 0xd5, 0x39, 0x7a, 0x3d, 0x57, 0x5b, 0xe3, 0x03, 0x57, 0x39, 0xfa, 0xb3, 0xce, 0xf3, 0x9a,
+	0x4a, 0x07, 0x37, 0x8d, 0x68, 0x40, 0x1f, 0xb2, 0x0b, 0x84, 0x26, 0x8d, 0xe2, 0x41, 0x86, 0x4a,
+	0x00, 0x7d, 0x94, 0xa7, 0x17, 0x4b, 0xbb, 0x11, 0x6f, 0xb0, 0x27, 0xe4, 0xd1, 0x22, 0xfc, 0x11,
+	0x18, 0x6b, 0xa4, 0x0e, 0xf5, 0x73, 0xa6, 0x58, 0x07, 0x26, 0x20, 0x63, 0xeb, 0x94, 0x0c, 0x20,
+	0xea, 0x4a, 0x29, 0xfa, 0x79, 0xc7, 0xbb, 0x16, 0x9f, 0xc8, 0xf4, 0x38, 0x7f, 0xfb, 0xba, 0x80,
+	0x84, 0x29, 0xb9, 0xd4, 0x11, 0x23, 0xa4, 0x4f, 0xea, 0x6e, 0xd6, 0x66, 0xcf, 0x72, 0xc7, 0x4b,
+	0xe8, 0xb4, 0x9d, 0x2f, 0xd8, 0x5d, 0xb2, 0xc6, 0x45, 0xf4, 0xc5, 0x18, 0x44, 0xa5, 0x20, 0x06,
+	0x59, 0x42, 0x53, 0x84, 0x13, 0xae, 0x7c, 0x34, 0x13, 0x70, 0x8a, 0x5b, 0xfa, 0x25, 0x7b, 0x44,
+	0x7a, 0xb9, 0x5d, 0x32, 0x49, 0xfe, 0x7a, 0xcb, 0xf5, 0x62, 0xae, 0x08, 0x3e, 0xf5, 0xf4, 0x2b,
+	0x76, 0x87, 0xdc, 0xea, 0x62, 0xe6, 0xf3, 0x21, 0xbf, 0x83, 0xf6, 0xd9, 0x67, 0xe4, 0x41, 0x6e,
+	0x06, 0xdb, 0x05, 0x00, 0x0e, 0xfc, 0x85, 0x1b, 0x16, 0x03, 0xe3, 0xd8, 0x4e, 0x4a, 0x19, 0xe8,
+	0xd7, 0x6c, 0x9d, 0x7c, 0x92, 0x23, 0x3a, 0x04, 0x4d, 0xbc, 0xc4, 0x66, 0x33, 0x94, 0xa0, 0x84,
+	0xa7, 0xdf, 0x64, 0x5c, 0x1f, 0xd4, 0x65, 0x24, 0xe4, 0x70, 0xba, 0x54, 0xfa, 0xf4, 0x5b, 0x8c,
+	0xf1, 0x75, 0x56, 0x6d, 0x5f, 0x30, 0x36, 0x80, 0x88, 0xa6, 0x0a, 0xf4, 0x8f, 0xec, 0x1e, 0xb9,
+	0x7d, 0x12, 0xa3, 0x61, 0xc4, 0x83, 0x9c, 0xe4, 0x95, 0xf4, 0x27, 0xac, 0xe3, 0xd6, 0x44, 0x82,
+	0x8b, 0x5c, 0x39, 0xe0, 0x62, 0x1a, 0x61, 0x1b, 0x9b, 0x24, 0xfd, 0x33, 0xbb, 0x4c, 0xce, 0x0f,
+	0x01, 0xe3, 0x16, 0xcd, 0xe0, 0x55, 0xca, 0x6c, 0x81, 0xa0, 0x1c, 0xef, 0xe0, 0x45, 0xcd, 0xbd,
+	0x28, 0x35, 0x28, 0x39, 0x92, 0x69, 0x1c, 0x77, 0xa7, 0xcf, 0x80, 0xf5, 0xc8, 0xfd, 0x8e, 0x28,
+	0x66, 0x5b, 0x06, 0x3a, 0x28, 0xf0, 0x55, 0x7c, 0x70, 0xd8, 0x3c, 0xa6, 0xb4, 0xc8, 0x66, 0xd9,
+	0xd2, 0xb4, 0x33, 0x9a, 0x8a, 0xac, 0x7d, 0x38, 0x28, 0x4d, 0x27, 0x1c, 0xc0, 0x41, 0x97, 0x86,
+	0x99, 0x2f, 0x8c, 0x85, 0x05, 0xa9, 0x86, 0x98, 0xf8, 0x93, 0xba, 0x7a, 0xd9, 0x12, 0xb2, 0x04,
+	0x8d, 0x2b, 0x83, 0xa7, 0x23, 0xdc, 0x0d, 0x92, 0x99, 0xe5, 0x2e, 0xc8, 0x50, 0xe7, 0x22, 0x1d,
+	0x33, 0x66, 0x1f, 0x93, 0x3b, 0xa7, 0xeb, 0x97, 0x8f, 0x92, 0x4b, 0x55, 0x52, 0x43, 0x5a, 0x3d,
+	0xfd, 0xcb, 0x52, 0x0f, 0xea, 0xaa, 0x9b, 0xb7, 0xdb, 0xcc, 0x77, 0xb2, 0x64, 0x93, 0x5e, 0xac,
+	0x6d, 0xb6, 0x0a, 0x5f, 0xac, 0x94, 0xde, 0xd7, 0xef, 0x98, 0x66, 0x9a, 0x87, 0x80, 0x2b, 0x11,
+	0x2d, 0x73, 0x37, 0x16, 0x24, 0xac, 0x74, 0x81, 0x9e, 0x53, 0x8d, 0x14, 0x50, 0xa6, 0xe0, 0x75,
+	0x1c, 0xf3, 0x0d, 0x20, 0xcf, 0xb4, 0xe9, 0xec, 0x85, 0x48, 0x05, 0x4c, 0xdb, 0x12, 0x82, 0x7e,
+	0x8f, 0x79, 0x59, 0x3e, 0x66, 0x8e, 0xa2, 0x36, 0x23, 0x31, 0x0f, 0x81, 0xe3, 0x0c, 0x4c, 0x84,
+	0xe0, 0x61, 0x41, 0xe1, 0xa6, 0xef, 0x8c, 0x9c, 0xa9, 0x2c, 0x7d, 0x8a, 0x53, 0x75, 0x6c, 0x02,
+	0xa8, 0x79, 0xd3, 0x8b, 0x66, 0x18, 0x7d, 0xc0, 0x19, 0xde, 0x94, 0xbf, 0x8f, 0x5b, 0x32, 0x8c,
+	0x1b, 0xa2, 0xd6, 0xcf, 0xd1, 0xd2, 0xc0, 0x31, 0x4e, 0xbe, 0x6d, 0xa0, 0x5c, 0x4c, 0xb8, 0x2e,
+	0x20, 0x0e, 0x8c, 0xd9, 0x44, 0xa3, 0x2d, 0xa9, 0x85, 0xd9, 0x7a, 0xf3, 0x11, 0x1e, 0x49, 0x5b,
+	0x17, 0x6a, 0x94, 0xba, 0x30, 0xa5, 0xe5, 0xa1, 0xa6, 0x77, 0x6d, 0xdf, 0x16, 0x52, 0xbb, 0x77,
+	0xd2, 0x90, 0x3f, 0xf2, 0x16, 0x0c, 0x2c, 0x1f, 0x41, 0x2c, 0x8c, 0x16, 0x35, 0x3d, 0x68, 0xc5,
+	0x6e, 0x91, 0x95, 0x57, 0xaa, 0xeb, 0xc5, 0x7a, 0x82, 0xc4, 0x3a, 0x55, 0x95, 0x75, 0x5f, 0x28,
+	0x6d, 0x98, 0xd2, 0x2d, 0x74, 0xee, 0x74, 0xd3, 0x6c, 0x6d, 0x44, 0xbe, 0x04, 0x53, 0x18, 0x45,
+	0xb7, 0x5f, 0x6d, 0xbf, 0x38, 0x3a, 0x5b, 0x06, 0xa6, 0x0c, 0x08, 0x3f, 0xdd, 0x3e, 0x35, 0x72,
+	0x13, 0x50, 0xe1, 0xa5, 0xc7, 0xad, 0xa2, 0x79, 0x95, 0x36, 0x8b, 0x89, 0x78, 0xdf, 0xe1, 0x2a,
+	0xf5, 0xa6, 0x6b, 0x6d, 0x35, 0x50, 0xb2, 0x88, 0xbe, 0x1a, 0x0e, 0xe5, 0x36, 0xfd, 0x2b, 0x36,
+	0xd1, 0xd3, 0x21, 0x6d, 0x15, 0x74, 0x00, 0x3b, 0xc8, 0x92, 0xd3, 0x01, 0x13, 0xae, 0x2a, 0x88,
+	0xc1, 0xf1, 0x62, 0x73, 0xfe, 0xbf, 0x1e, 0x09, 0xed, 0x56, 0xfd, 0x37, 0xf6, 0x0d, 0xf9, 0xb2,
+	0x85, 0xb6, 0xfd, 0x14, 0xa1, 0xf0, 0xb4, 0xc2, 0x06, 0x5f, 0x70, 0x1d, 0xc7, 0x7c, 0x02, 0xcd,
+	0xd6, 0x68, 0x74, 0x9e, 0xd1, 0xbf, 0xe3, 0xe6, 0x76, 0x12, 0xdd, 0xb9, 0x22, 0xd6, 0x02, 0x1d,
+	0x85, 0xe7, 0x91, 0x8b, 0xd8, 0xf0, 0x3a, 0x66, 0x2b, 0xdf, 0x7c, 0xc5, 0x69, 0x37, 0xe5, 0xba,
+	0xb2, 0x7c, 0xc9, 0x5d, 0x68, 0x17, 0xd6, 0xc5, 0xae, 0xf8, 0x6c, 0xf0, 0xbf, 0x33, 0x64, 0xed,
+	0xd9, 0xec, 0xc7, 0xde, 0xeb, 0x3f, 0x94, 0x07, 0xe7, 0xbb, 0x1f, 0xbc, 0x16, 0xbf, 0x8f, 0xed,
+	0x99, 0xef, 0xc4, 0x1c, 0xb6, 0x3f, 0xfb, 0x61, 0xf7, 0x70, 0xbf, 0x37, 0x3b, 0xda, 0x5f, 0xdf,
+	0x7f, 0x7e, 0x58, 0x7f, 0x3d, 0xa7, 0xaf, 0xf4, 0x17, 0x07, 0xc7, 0xaf, 0xfa, 0x68, 0xff, 0xba,
+	0xf9, 0xf9, 0xd7, 0xd9, 0xb7, 0x46, 0x9c, 0xff, 0xfb, 0xec, 0xea, 0xa8, 0x39, 0x8c, 0xef, 0x1d,
+	0xf7, 0x9a, 0xbf, 0xf8, 0x6f, 0xb2, 0xd1, 0xab, 0xaf, 0x3c, 0xfe, 0x39, 0x19, 0xec, 0xf0, 0xbd,
+	0xe3, 0x9d, 0xd6, 0x60, 0x67, 0xb2, 0xb1, 0xd3, 0x18, 0xfc, 0xf7, 0xec, 0x5a, 0x23, 0xed, 0xf7,
+	0xf9, 0xde, 0x71, 0xbf, 0xdf, 0x9a, 0xf4, 0xfb, 0x93, 0x8d, 0x7e, 0xbf, 0x31, 0xfa, 0xfe, 0xed,
+	0xda, 0xbb, 0x8d, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x23, 0x9a, 0xd9, 0x51, 0x10, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/currency_code_error.pb.go b/googleapis/ads/googleads/v3/errors/currency_code_error.pb.go
new file mode 100644
index 0000000..1b44b69
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/currency_code_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/currency_code_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible currency code errors.
+type CurrencyCodeErrorEnum_CurrencyCodeError int32
+
+const (
+	// Enum unspecified.
+	CurrencyCodeErrorEnum_UNSPECIFIED CurrencyCodeErrorEnum_CurrencyCodeError = 0
+	// The received error code is not known in this version.
+	CurrencyCodeErrorEnum_UNKNOWN CurrencyCodeErrorEnum_CurrencyCodeError = 1
+	// The currency code is not supported.
+	CurrencyCodeErrorEnum_UNSUPPORTED CurrencyCodeErrorEnum_CurrencyCodeError = 2
+)
+
+var CurrencyCodeErrorEnum_CurrencyCodeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNSUPPORTED",
+}
+
+var CurrencyCodeErrorEnum_CurrencyCodeError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UNSUPPORTED": 2,
+}
+
+func (x CurrencyCodeErrorEnum_CurrencyCodeError) String() string {
+	return proto.EnumName(CurrencyCodeErrorEnum_CurrencyCodeError_name, int32(x))
+}
+
+func (CurrencyCodeErrorEnum_CurrencyCodeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d5840757d969a452, []int{0, 0}
+}
+
+// Container for enum describing possible currency code errors.
+type CurrencyCodeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CurrencyCodeErrorEnum) Reset()         { *m = CurrencyCodeErrorEnum{} }
+func (m *CurrencyCodeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CurrencyCodeErrorEnum) ProtoMessage()    {}
+func (*CurrencyCodeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d5840757d969a452, []int{0}
+}
+
+func (m *CurrencyCodeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CurrencyCodeErrorEnum.Unmarshal(m, b)
+}
+func (m *CurrencyCodeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CurrencyCodeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CurrencyCodeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CurrencyCodeErrorEnum.Merge(m, src)
+}
+func (m *CurrencyCodeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CurrencyCodeErrorEnum.Size(m)
+}
+func (m *CurrencyCodeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CurrencyCodeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CurrencyCodeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CurrencyCodeErrorEnum_CurrencyCodeError", CurrencyCodeErrorEnum_CurrencyCodeError_name, CurrencyCodeErrorEnum_CurrencyCodeError_value)
+	proto.RegisterType((*CurrencyCodeErrorEnum)(nil), "google.ads.googleads.v3.errors.CurrencyCodeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/currency_code_error.proto", fileDescriptor_d5840757d969a452)
+}
+
+var fileDescriptor_d5840757d969a452 = []byte{
+	// 296 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x5d, 0x05, 0x85, 0xec, 0xe0, 0x1c, 0xe8, 0x41, 0x64, 0x87, 0x3e, 0x40, 0x72, 0xc8,
+	0x45, 0xe2, 0xa9, 0x6b, 0xeb, 0x18, 0x42, 0x57, 0xd4, 0x56, 0xd0, 0xc2, 0xa8, 0x4d, 0x08, 0x85,
+	0x2d, 0x5f, 0x49, 0xba, 0x81, 0xaf, 0xe3, 0xd1, 0x47, 0xf1, 0x51, 0xbc, 0xf9, 0x06, 0xd2, 0xa6,
+	0xed, 0x65, 0xe8, 0x29, 0x7f, 0xf2, 0xfd, 0xfe, 0xff, 0xef, 0xcf, 0x87, 0x6e, 0x24, 0x80, 0xdc,
+	0x08, 0x92, 0x73, 0x43, 0xac, 0x6c, 0xd4, 0x9e, 0x12, 0xa1, 0x35, 0x68, 0x43, 0x8a, 0x9d, 0xd6,
+	0x42, 0x15, 0xef, 0xeb, 0x02, 0xb8, 0x58, 0xb7, 0x9f, 0xb8, 0xd2, 0x50, 0xc3, 0x74, 0x66, 0x71,
+	0x9c, 0x73, 0x83, 0x07, 0x27, 0xde, 0x53, 0x6c, 0x9d, 0x57, 0xd7, 0x7d, 0x72, 0x55, 0x92, 0x5c,
+	0x29, 0xa8, 0xf3, 0xba, 0x04, 0x65, 0xac, 0xdb, 0x7d, 0x45, 0x17, 0x7e, 0x17, 0xed, 0x03, 0x17,
+	0x61, 0xe3, 0x09, 0xd5, 0x6e, 0xeb, 0xce, 0xd1, 0xf9, 0xc1, 0x60, 0x7a, 0x86, 0xc6, 0x49, 0xf4,
+	0x18, 0x87, 0xfe, 0xf2, 0x6e, 0x19, 0x06, 0x93, 0xa3, 0xe9, 0x18, 0x9d, 0x26, 0xd1, 0x7d, 0xb4,
+	0x7a, 0x8e, 0x26, 0xa3, 0x6e, 0x9a, 0xc4, 0xf1, 0xea, 0xe1, 0x29, 0x0c, 0x26, 0xce, 0xfc, 0x67,
+	0x84, 0xdc, 0x02, 0xb6, 0xf8, 0xff, 0x86, 0xf3, 0xcb, 0x83, 0x45, 0x71, 0xd3, 0x2d, 0x1e, 0xbd,
+	0x04, 0x9d, 0x53, 0xc2, 0x26, 0x57, 0x12, 0x83, 0x96, 0x44, 0x0a, 0xd5, 0x36, 0xef, 0xaf, 0x54,
+	0x95, 0xe6, 0xaf, 0xa3, 0xdd, 0xda, 0xe7, 0xc3, 0x39, 0x5e, 0x78, 0xde, 0xa7, 0x33, 0x5b, 0xd8,
+	0x30, 0x8f, 0x1b, 0x6c, 0x65, 0xa3, 0x52, 0x8a, 0xdb, 0x95, 0xe6, 0xab, 0x07, 0x32, 0x8f, 0x9b,
+	0x6c, 0x00, 0xb2, 0x94, 0x66, 0x16, 0xf8, 0x76, 0x5c, 0xfb, 0xcb, 0x98, 0xc7, 0x0d, 0x63, 0x03,
+	0xc2, 0x58, 0x4a, 0x19, 0xb3, 0xd0, 0xdb, 0x49, 0xdb, 0x8e, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff,
+	0x18, 0x0c, 0xdb, 0x02, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/custom_interest_error.pb.go b/googleapis/ads/googleads/v3/errors/custom_interest_error.pb.go
new file mode 100644
index 0000000..0fbd33c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/custom_interest_error.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/custom_interest_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible custom interest errors.
+type CustomInterestErrorEnum_CustomInterestError int32
+
+const (
+	// Enum unspecified.
+	CustomInterestErrorEnum_UNSPECIFIED CustomInterestErrorEnum_CustomInterestError = 0
+	// The received error code is not known in this version.
+	CustomInterestErrorEnum_UNKNOWN CustomInterestErrorEnum_CustomInterestError = 1
+	// Duplicate custom interest name ignoring case.
+	CustomInterestErrorEnum_NAME_ALREADY_USED CustomInterestErrorEnum_CustomInterestError = 2
+	// In the remove custom interest member operation, both member ID and
+	// pair [type, parameter] are not present.
+	CustomInterestErrorEnum_CUSTOM_INTEREST_MEMBER_ID_AND_TYPE_PARAMETER_NOT_PRESENT_IN_REMOVE CustomInterestErrorEnum_CustomInterestError = 3
+	// The pair of [type, parameter] does not exist.
+	CustomInterestErrorEnum_TYPE_AND_PARAMETER_NOT_FOUND CustomInterestErrorEnum_CustomInterestError = 4
+	// The pair of [type, parameter] already exists.
+	CustomInterestErrorEnum_TYPE_AND_PARAMETER_ALREADY_EXISTED CustomInterestErrorEnum_CustomInterestError = 5
+	// Unsupported custom interest member type.
+	CustomInterestErrorEnum_INVALID_CUSTOM_INTEREST_MEMBER_TYPE CustomInterestErrorEnum_CustomInterestError = 6
+	// Cannot remove a custom interest while it's still being targeted.
+	CustomInterestErrorEnum_CANNOT_REMOVE_WHILE_IN_USE CustomInterestErrorEnum_CustomInterestError = 7
+	// Cannot mutate custom interest type.
+	CustomInterestErrorEnum_CANNOT_CHANGE_TYPE CustomInterestErrorEnum_CustomInterestError = 8
+)
+
+var CustomInterestErrorEnum_CustomInterestError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NAME_ALREADY_USED",
+	3: "CUSTOM_INTEREST_MEMBER_ID_AND_TYPE_PARAMETER_NOT_PRESENT_IN_REMOVE",
+	4: "TYPE_AND_PARAMETER_NOT_FOUND",
+	5: "TYPE_AND_PARAMETER_ALREADY_EXISTED",
+	6: "INVALID_CUSTOM_INTEREST_MEMBER_TYPE",
+	7: "CANNOT_REMOVE_WHILE_IN_USE",
+	8: "CANNOT_CHANGE_TYPE",
+}
+
+var CustomInterestErrorEnum_CustomInterestError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"NAME_ALREADY_USED": 2,
+	"CUSTOM_INTEREST_MEMBER_ID_AND_TYPE_PARAMETER_NOT_PRESENT_IN_REMOVE": 3,
+	"TYPE_AND_PARAMETER_NOT_FOUND":                                       4,
+	"TYPE_AND_PARAMETER_ALREADY_EXISTED":                                 5,
+	"INVALID_CUSTOM_INTEREST_MEMBER_TYPE":                                6,
+	"CANNOT_REMOVE_WHILE_IN_USE":                                         7,
+	"CANNOT_CHANGE_TYPE":                                                 8,
+}
+
+func (x CustomInterestErrorEnum_CustomInterestError) String() string {
+	return proto.EnumName(CustomInterestErrorEnum_CustomInterestError_name, int32(x))
+}
+
+func (CustomInterestErrorEnum_CustomInterestError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a0cf933f9a939ad1, []int{0, 0}
+}
+
+// Container for enum describing possible custom interest errors.
+type CustomInterestErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomInterestErrorEnum) Reset()         { *m = CustomInterestErrorEnum{} }
+func (m *CustomInterestErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestErrorEnum) ProtoMessage()    {}
+func (*CustomInterestErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a0cf933f9a939ad1, []int{0}
+}
+
+func (m *CustomInterestErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomInterestErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestErrorEnum.Merge(m, src)
+}
+func (m *CustomInterestErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestErrorEnum.Size(m)
+}
+func (m *CustomInterestErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CustomInterestErrorEnum_CustomInterestError", CustomInterestErrorEnum_CustomInterestError_name, CustomInterestErrorEnum_CustomInterestError_value)
+	proto.RegisterType((*CustomInterestErrorEnum)(nil), "google.ads.googleads.v3.errors.CustomInterestErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/custom_interest_error.proto", fileDescriptor_a0cf933f9a939ad1)
+}
+
+var fileDescriptor_a0cf933f9a939ad1 = []byte{
+	// 447 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x6e, 0xd4, 0x30,
+	0x18, 0xc5, 0x69, 0x0a, 0x2d, 0x72, 0x17, 0x04, 0x23, 0xfe, 0xa8, 0xaa, 0x46, 0x28, 0x48, 0xb0,
+	0x4b, 0x16, 0xd9, 0x99, 0x95, 0x27, 0xfe, 0x66, 0x6a, 0x31, 0x71, 0xa2, 0xfc, 0x2b, 0x45, 0x23,
+	0x59, 0xa1, 0x89, 0xa2, 0x91, 0x3a, 0xf1, 0x28, 0x4e, 0x7b, 0x20, 0x96, 0xdc, 0x81, 0x0b, 0x70,
+	0x03, 0xae, 0xc0, 0x96, 0x0b, 0xa0, 0xc4, 0x33, 0x23, 0x21, 0x4d, 0x59, 0xe5, 0xc9, 0x7e, 0xbf,
+	0xe7, 0xa7, 0x7c, 0x1f, 0x22, 0x8d, 0x52, 0xcd, 0x6d, 0xed, 0x95, 0x95, 0xf6, 0x8c, 0x1c, 0xd4,
+	0xbd, 0xef, 0xd5, 0x5d, 0xa7, 0x3a, 0xed, 0xdd, 0xdc, 0xe9, 0x5e, 0xad, 0xe5, 0xaa, 0xed, 0xeb,
+	0xae, 0xd6, 0xbd, 0x1c, 0x8f, 0xdd, 0x4d, 0xa7, 0x7a, 0x85, 0x27, 0x06, 0x70, 0xcb, 0x4a, 0xbb,
+	0x7b, 0xd6, 0xbd, 0xf7, 0x5d, 0xc3, 0x9e, 0x5f, 0xec, 0xb2, 0x37, 0x2b, 0xaf, 0x6c, 0x5b, 0xd5,
+	0x97, 0xfd, 0x4a, 0xb5, 0xda, 0xd0, 0xce, 0x2f, 0x0b, 0xbd, 0x0e, 0xc6, 0x74, 0xbe, 0x0d, 0x87,
+	0x01, 0x83, 0xf6, 0x6e, 0xed, 0xfc, 0xb0, 0xd0, 0x8b, 0x03, 0x77, 0xf8, 0x19, 0x3a, 0xcb, 0x45,
+	0x1a, 0x43, 0xc0, 0x67, 0x1c, 0x98, 0xfd, 0x08, 0x9f, 0xa1, 0xd3, 0x5c, 0x7c, 0x12, 0xd1, 0x95,
+	0xb0, 0x8f, 0xf0, 0x4b, 0xf4, 0x5c, 0xd0, 0x10, 0x24, 0x5d, 0x24, 0x40, 0xd9, 0xb5, 0xcc, 0x53,
+	0x60, 0xb6, 0x85, 0x67, 0x68, 0x1a, 0xe4, 0x69, 0x16, 0x85, 0x92, 0x8b, 0x0c, 0x12, 0x48, 0x33,
+	0x19, 0x42, 0x38, 0x85, 0x44, 0x72, 0x26, 0xa9, 0x60, 0x32, 0xbb, 0x8e, 0x41, 0xc6, 0x34, 0xa1,
+	0x21, 0x64, 0x90, 0x48, 0x11, 0x65, 0x32, 0x4e, 0x20, 0x05, 0x91, 0x49, 0x2e, 0x64, 0x02, 0x61,
+	0x54, 0x80, 0x7d, 0x8c, 0xdf, 0xa2, 0x8b, 0xd1, 0x39, 0x20, 0xff, 0xba, 0x67, 0x51, 0x2e, 0x98,
+	0xfd, 0x18, 0xbf, 0x47, 0xce, 0x01, 0xc7, 0xae, 0x0e, 0x7c, 0xe6, 0x69, 0x06, 0xcc, 0x7e, 0x82,
+	0x3f, 0xa0, 0x77, 0x5c, 0x14, 0x74, 0xc1, 0x99, 0x7c, 0xa0, 0xd9, 0x10, 0x63, 0x9f, 0xe0, 0x09,
+	0x3a, 0x0f, 0xa8, 0x18, 0x9e, 0x30, 0x2d, 0xe4, 0xd5, 0x25, 0x5f, 0xc0, 0xd0, 0x2a, 0x4f, 0xc1,
+	0x3e, 0xc5, 0xaf, 0x10, 0xde, 0xde, 0x07, 0x97, 0x54, 0xcc, 0xc1, 0x70, 0x4f, 0xa7, 0x7f, 0x8e,
+	0x90, 0x73, 0xa3, 0xd6, 0xee, 0xff, 0x07, 0x34, 0x7d, 0x73, 0xe0, 0x1f, 0xc7, 0xc3, 0x70, 0xe2,
+	0xa3, 0x2f, 0x6c, 0xcb, 0x36, 0xea, 0xb6, 0x6c, 0x1b, 0x57, 0x75, 0x8d, 0xd7, 0xd4, 0xed, 0x38,
+	0xba, 0xdd, 0xa2, 0x6c, 0x56, 0xfa, 0xa1, 0xbd, 0xf9, 0x68, 0x3e, 0xdf, 0xac, 0xe3, 0x39, 0xa5,
+	0xdf, 0xad, 0xc9, 0xdc, 0x84, 0xd1, 0x4a, 0xbb, 0x46, 0x0e, 0xaa, 0xf0, 0xdd, 0xf1, 0x49, 0xfd,
+	0x73, 0x67, 0x58, 0xd2, 0x4a, 0x2f, 0xf7, 0x86, 0x65, 0xe1, 0x2f, 0x8d, 0xe1, 0xb7, 0xe5, 0x98,
+	0x53, 0x42, 0x68, 0xa5, 0x09, 0xd9, 0x5b, 0x08, 0x29, 0x7c, 0x42, 0x8c, 0xe9, 0xeb, 0xc9, 0xd8,
+	0xce, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x53, 0x0c, 0x86, 0xf2, 0xd4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/customer_client_link_error.pb.go b/googleapis/ads/googleads/v3/errors/customer_client_link_error.pb.go
new file mode 100644
index 0000000..8500092
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/customer_client_link_error.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/customer_client_link_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible CustomerClientLink errors.
+type CustomerClientLinkErrorEnum_CustomerClientLinkError int32
+
+const (
+	// Enum unspecified.
+	CustomerClientLinkErrorEnum_UNSPECIFIED CustomerClientLinkErrorEnum_CustomerClientLinkError = 0
+	// The received error code is not known in this version.
+	CustomerClientLinkErrorEnum_UNKNOWN CustomerClientLinkErrorEnum_CustomerClientLinkError = 1
+	// Trying to manage a client that already in being managed by customer.
+	CustomerClientLinkErrorEnum_CLIENT_ALREADY_INVITED_BY_THIS_MANAGER CustomerClientLinkErrorEnum_CustomerClientLinkError = 2
+	// Already managed by some other manager in the hierarchy.
+	CustomerClientLinkErrorEnum_CLIENT_ALREADY_MANAGED_IN_HIERARCHY CustomerClientLinkErrorEnum_CustomerClientLinkError = 3
+	// Attempt to create a cycle in the hierarchy.
+	CustomerClientLinkErrorEnum_CYCLIC_LINK_NOT_ALLOWED CustomerClientLinkErrorEnum_CustomerClientLinkError = 4
+	// Managed accounts has the maximum number of linked accounts.
+	CustomerClientLinkErrorEnum_CUSTOMER_HAS_TOO_MANY_ACCOUNTS CustomerClientLinkErrorEnum_CustomerClientLinkError = 5
+	// Invitor has the maximum pending invitations.
+	CustomerClientLinkErrorEnum_CLIENT_HAS_TOO_MANY_INVITATIONS CustomerClientLinkErrorEnum_CustomerClientLinkError = 6
+	// Attempt to change hidden status of a link that is not active.
+	CustomerClientLinkErrorEnum_CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS CustomerClientLinkErrorEnum_CustomerClientLinkError = 7
+	// Parent manager account has the maximum number of linked accounts.
+	CustomerClientLinkErrorEnum_CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER CustomerClientLinkErrorEnum_CustomerClientLinkError = 8
+)
+
+var CustomerClientLinkErrorEnum_CustomerClientLinkError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CLIENT_ALREADY_INVITED_BY_THIS_MANAGER",
+	3: "CLIENT_ALREADY_MANAGED_IN_HIERARCHY",
+	4: "CYCLIC_LINK_NOT_ALLOWED",
+	5: "CUSTOMER_HAS_TOO_MANY_ACCOUNTS",
+	6: "CLIENT_HAS_TOO_MANY_INVITATIONS",
+	7: "CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS",
+	8: "CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER",
+}
+
+var CustomerClientLinkErrorEnum_CustomerClientLinkError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"CLIENT_ALREADY_INVITED_BY_THIS_MANAGER":    2,
+	"CLIENT_ALREADY_MANAGED_IN_HIERARCHY":       3,
+	"CYCLIC_LINK_NOT_ALLOWED":                   4,
+	"CUSTOMER_HAS_TOO_MANY_ACCOUNTS":            5,
+	"CLIENT_HAS_TOO_MANY_INVITATIONS":           6,
+	"CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS":    7,
+	"CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER": 8,
+}
+
+func (x CustomerClientLinkErrorEnum_CustomerClientLinkError) String() string {
+	return proto.EnumName(CustomerClientLinkErrorEnum_CustomerClientLinkError_name, int32(x))
+}
+
+func (CustomerClientLinkErrorEnum_CustomerClientLinkError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3d9c8f09dbc13801, []int{0, 0}
+}
+
+// Container for enum describing possible CustomeClientLink errors.
+type CustomerClientLinkErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerClientLinkErrorEnum) Reset()         { *m = CustomerClientLinkErrorEnum{} }
+func (m *CustomerClientLinkErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerClientLinkErrorEnum) ProtoMessage()    {}
+func (*CustomerClientLinkErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3d9c8f09dbc13801, []int{0}
+}
+
+func (m *CustomerClientLinkErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClientLinkErrorEnum.Merge(m, src)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Size(m)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClientLinkErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClientLinkErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CustomerClientLinkErrorEnum_CustomerClientLinkError", CustomerClientLinkErrorEnum_CustomerClientLinkError_name, CustomerClientLinkErrorEnum_CustomerClientLinkError_value)
+	proto.RegisterType((*CustomerClientLinkErrorEnum)(nil), "google.ads.googleads.v3.errors.CustomerClientLinkErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/customer_client_link_error.proto", fileDescriptor_3d9c8f09dbc13801)
+}
+
+var fileDescriptor_3d9c8f09dbc13801 = []byte{
+	// 452 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4f, 0x8b, 0xd3, 0x40,
+	0x14, 0xb7, 0x59, 0xdd, 0x95, 0xd9, 0x83, 0x21, 0x97, 0x05, 0x77, 0xa9, 0x90, 0x05, 0x45, 0xc1,
+	0xe4, 0x90, 0x5b, 0x3c, 0xc8, 0x74, 0x32, 0x36, 0xc3, 0x66, 0x27, 0x25, 0x7f, 0xba, 0x44, 0x0a,
+	0x8f, 0xd8, 0x84, 0x10, 0xb6, 0xcd, 0x94, 0x4c, 0x76, 0x3f, 0x90, 0x47, 0x3f, 0x8a, 0xe0, 0x17,
+	0x11, 0x3c, 0x7b, 0x95, 0x64, 0xda, 0x8a, 0x42, 0x7b, 0xca, 0x8f, 0xbc, 0xdf, 0xbf, 0xe4, 0x3d,
+	0xf4, 0xb1, 0x12, 0xa2, 0x5a, 0x95, 0x76, 0x5e, 0x48, 0x5b, 0xc1, 0x1e, 0x3d, 0x3a, 0x76, 0xd9,
+	0xb6, 0xa2, 0x95, 0xf6, 0xf2, 0x41, 0x76, 0x62, 0x5d, 0xb6, 0xb0, 0x5c, 0xd5, 0x65, 0xd3, 0xc1,
+	0xaa, 0x6e, 0xee, 0x61, 0x98, 0x59, 0x9b, 0x56, 0x74, 0xc2, 0x18, 0x2b, 0x95, 0x95, 0x17, 0xd2,
+	0xda, 0x1b, 0x58, 0x8f, 0x8e, 0xa5, 0x0c, 0x5e, 0x5e, 0xed, 0x02, 0x36, 0xb5, 0x9d, 0x37, 0x8d,
+	0xe8, 0xf2, 0xae, 0x16, 0x8d, 0x54, 0x6a, 0xf3, 0x97, 0x86, 0x2e, 0xc9, 0x36, 0x82, 0x0c, 0x09,
+	0x41, 0xdd, 0xdc, 0xd3, 0x5e, 0x4a, 0x9b, 0x87, 0xb5, 0xf9, 0x43, 0x43, 0x17, 0x07, 0xe6, 0xc6,
+	0x0b, 0x74, 0x9e, 0xf2, 0x78, 0x46, 0x09, 0xfb, 0xc4, 0xa8, 0xa7, 0x3f, 0x31, 0xce, 0xd1, 0x59,
+	0xca, 0x6f, 0x78, 0x78, 0xc7, 0xf5, 0x91, 0xf1, 0x0e, 0xbd, 0x26, 0x01, 0xa3, 0x3c, 0x01, 0x1c,
+	0x44, 0x14, 0x7b, 0x19, 0x30, 0x3e, 0x67, 0x09, 0xf5, 0x60, 0x92, 0x41, 0xe2, 0xb3, 0x18, 0x6e,
+	0x31, 0xc7, 0x53, 0x1a, 0xe9, 0x9a, 0xf1, 0x06, 0x5d, 0xff, 0xc7, 0x55, 0x33, 0x0f, 0x18, 0x07,
+	0x9f, 0xd1, 0x08, 0x47, 0xc4, 0xcf, 0xf4, 0x13, 0xe3, 0x12, 0x5d, 0x90, 0x8c, 0x04, 0x8c, 0x40,
+	0xc0, 0xf8, 0x0d, 0xf0, 0xb0, 0x57, 0x04, 0xe1, 0x1d, 0xf5, 0xf4, 0xa7, 0x86, 0x89, 0xc6, 0x24,
+	0x8d, 0x93, 0xf0, 0x96, 0x46, 0xe0, 0xe3, 0x18, 0x92, 0x30, 0xec, 0x7d, 0x32, 0xc0, 0x84, 0x84,
+	0x29, 0x4f, 0x62, 0xfd, 0x99, 0x71, 0x8d, 0x5e, 0x6d, 0x93, 0xfe, 0x61, 0x0c, 0xd5, 0x70, 0xc2,
+	0x42, 0x1e, 0xeb, 0xa7, 0x43, 0x75, 0xcc, 0x7b, 0x73, 0x9f, 0x79, 0x14, 0xc2, 0x08, 0x52, 0x3e,
+	0xa0, 0x6d, 0xe3, 0xbf, 0x86, 0x67, 0xc6, 0x7b, 0xf4, 0xf6, 0x78, 0x28, 0xe0, 0x64, 0xff, 0xa5,
+	0xcf, 0x27, 0xbf, 0x47, 0xc8, 0x5c, 0x8a, 0xb5, 0x75, 0x7c, 0x69, 0x93, 0xab, 0x03, 0xff, 0x7c,
+	0xd6, 0x2f, 0x6d, 0x36, 0xfa, 0xec, 0x6d, 0xf5, 0x95, 0x58, 0xe5, 0x4d, 0x65, 0x89, 0xb6, 0xb2,
+	0xab, 0xb2, 0x19, 0x56, 0xba, 0xbb, 0xa2, 0x4d, 0x2d, 0x0f, 0x1d, 0xd5, 0x07, 0xf5, 0xf8, 0xaa,
+	0x9d, 0x4c, 0x31, 0xfe, 0xa6, 0x8d, 0xa7, 0xca, 0x0c, 0x17, 0xd2, 0x52, 0xb0, 0x47, 0x73, 0xc7,
+	0x1a, 0x22, 0xe5, 0xf7, 0x1d, 0x61, 0x81, 0x0b, 0xb9, 0xd8, 0x13, 0x16, 0x73, 0x67, 0xa1, 0x08,
+	0x3f, 0x35, 0x53, 0xbd, 0x75, 0x5d, 0x5c, 0x48, 0xd7, 0xdd, 0x53, 0x5c, 0x77, 0xee, 0xb8, 0xae,
+	0x22, 0x7d, 0x39, 0x1d, 0xda, 0x39, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb6, 0xb0, 0x49, 0xd9,
+	0xf1, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/customer_error.pb.go b/googleapis/ads/googleads/v3/errors/customer_error.pb.go
new file mode 100644
index 0000000..72d0ab9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/customer_error.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/customer_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Set of errors that are related to requests dealing with Customer.
+// Next id: 26
+type CustomerErrorEnum_CustomerError int32
+
+const (
+	// Enum unspecified.
+	CustomerErrorEnum_UNSPECIFIED CustomerErrorEnum_CustomerError = 0
+	// The received error code is not known in this version.
+	CustomerErrorEnum_UNKNOWN CustomerErrorEnum_CustomerError = 1
+	// Customer status is not allowed to be changed from DRAFT and CLOSED.
+	// Currency code and at least one of country code and time zone needs to be
+	// set when status is changed to ENABLED.
+	CustomerErrorEnum_STATUS_CHANGE_DISALLOWED CustomerErrorEnum_CustomerError = 2
+	// CustomerService cannot get a customer that has not been fully set up.
+	CustomerErrorEnum_ACCOUNT_NOT_SET_UP CustomerErrorEnum_CustomerError = 3
+)
+
+var CustomerErrorEnum_CustomerError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STATUS_CHANGE_DISALLOWED",
+	3: "ACCOUNT_NOT_SET_UP",
+}
+
+var CustomerErrorEnum_CustomerError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"STATUS_CHANGE_DISALLOWED": 2,
+	"ACCOUNT_NOT_SET_UP":       3,
+}
+
+func (x CustomerErrorEnum_CustomerError) String() string {
+	return proto.EnumName(CustomerErrorEnum_CustomerError_name, int32(x))
+}
+
+func (CustomerErrorEnum_CustomerError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_355f6e19d610cfcf, []int{0, 0}
+}
+
+// Container for enum describing possible customer errors.
+type CustomerErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerErrorEnum) Reset()         { *m = CustomerErrorEnum{} }
+func (m *CustomerErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerErrorEnum) ProtoMessage()    {}
+func (*CustomerErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_355f6e19d610cfcf, []int{0}
+}
+
+func (m *CustomerErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerErrorEnum.Merge(m, src)
+}
+func (m *CustomerErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerErrorEnum.Size(m)
+}
+func (m *CustomerErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CustomerErrorEnum_CustomerError", CustomerErrorEnum_CustomerError_name, CustomerErrorEnum_CustomerError_value)
+	proto.RegisterType((*CustomerErrorEnum)(nil), "google.ads.googleads.v3.errors.CustomerErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/customer_error.proto", fileDescriptor_355f6e19d610cfcf)
+}
+
+var fileDescriptor_355f6e19d610cfcf = []byte{
+	// 321 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x07, 0x0a, 0x19, 0x62, 0xcd, 0x41, 0x44, 0xc6, 0x0e, 0x7d, 0x80, 0xf4, 0x90,
+	0x5b, 0x3c, 0x65, 0x6d, 0x9c, 0xc3, 0x91, 0x16, 0xda, 0x6e, 0x20, 0x85, 0x52, 0xd7, 0x12, 0x06,
+	0x5b, 0x32, 0x92, 0x6e, 0xf8, 0x3c, 0x1e, 0x7d, 0x14, 0x1f, 0x45, 0xf0, 0x1d, 0xa4, 0xcd, 0x36,
+	0xd8, 0x41, 0x4f, 0xf9, 0xf2, 0xe7, 0xf7, 0x7d, 0xf9, 0xf2, 0x07, 0x58, 0x28, 0x25, 0xd6, 0xb5,
+	0x5f, 0x56, 0xc6, 0xb7, 0xb2, 0x55, 0x7b, 0xec, 0xd7, 0x5a, 0x2b, 0x6d, 0xfc, 0xe5, 0xce, 0x34,
+	0x6a, 0x53, 0xeb, 0xa2, 0xbb, 0xa3, 0xad, 0x56, 0x8d, 0x82, 0x23, 0x4b, 0xa2, 0xb2, 0x32, 0xe8,
+	0x64, 0x42, 0x7b, 0x8c, 0xac, 0xe9, 0x61, 0x78, 0x0c, 0xdd, 0xae, 0xfc, 0x52, 0x4a, 0xd5, 0x94,
+	0xcd, 0x4a, 0x49, 0x63, 0xdd, 0xde, 0x3b, 0xb8, 0x0d, 0x0e, 0xa9, 0xac, 0xe5, 0x99, 0xdc, 0x6d,
+	0xbc, 0x25, 0xb8, 0x3e, 0x1b, 0xc2, 0x1b, 0x30, 0xc8, 0x78, 0x12, 0xb3, 0x60, 0xfa, 0x34, 0x65,
+	0xa1, 0x7b, 0x01, 0x07, 0xe0, 0x2a, 0xe3, 0x2f, 0x3c, 0x5a, 0x70, 0xb7, 0x07, 0x87, 0xe0, 0x3e,
+	0x49, 0x69, 0x9a, 0x25, 0x45, 0xf0, 0x4c, 0xf9, 0x84, 0x15, 0xe1, 0x34, 0xa1, 0xb3, 0x59, 0xb4,
+	0x60, 0xa1, 0xeb, 0xc0, 0x3b, 0x00, 0x69, 0x10, 0x44, 0x19, 0x4f, 0x0b, 0x1e, 0xa5, 0x45, 0xc2,
+	0xd2, 0x22, 0x8b, 0xdd, 0xfe, 0xf8, 0xa7, 0x07, 0xbc, 0xa5, 0xda, 0xa0, 0xff, 0xeb, 0x8f, 0xe1,
+	0x59, 0x93, 0xb8, 0x2d, 0x1d, 0xf7, 0x5e, 0xc3, 0x83, 0x4b, 0xa8, 0x75, 0x29, 0x05, 0x52, 0x5a,
+	0xf8, 0xa2, 0x96, 0xdd, 0x97, 0x8e, 0x9b, 0xdb, 0xae, 0xcc, 0x5f, 0x8b, 0x7c, 0xb4, 0xc7, 0x87,
+	0xd3, 0x9f, 0x50, 0xfa, 0xe9, 0x8c, 0x26, 0x36, 0x8c, 0x56, 0x06, 0x59, 0xd9, 0xaa, 0x39, 0x46,
+	0xdd, 0x93, 0xe6, 0xeb, 0x08, 0xe4, 0xb4, 0x32, 0xf9, 0x09, 0xc8, 0xe7, 0x38, 0xb7, 0xc0, 0xb7,
+	0xe3, 0xd9, 0x29, 0x21, 0xb4, 0x32, 0x84, 0x9c, 0x10, 0x42, 0xe6, 0x98, 0x10, 0x0b, 0xbd, 0x5d,
+	0x76, 0xed, 0xf0, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x29, 0xca, 0x0f, 0x94, 0xe5, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/customer_feed_error.pb.go b/googleapis/ads/googleads/v3/errors/customer_feed_error.pb.go
new file mode 100644
index 0000000..1f5857f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/customer_feed_error.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/customer_feed_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible customer feed errors.
+type CustomerFeedErrorEnum_CustomerFeedError int32
+
+const (
+	// Enum unspecified.
+	CustomerFeedErrorEnum_UNSPECIFIED CustomerFeedErrorEnum_CustomerFeedError = 0
+	// The received error code is not known in this version.
+	CustomerFeedErrorEnum_UNKNOWN CustomerFeedErrorEnum_CustomerFeedError = 1
+	// An active feed already exists for this customer and place holder type.
+	CustomerFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 2
+	// The specified feed is removed.
+	CustomerFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED CustomerFeedErrorEnum_CustomerFeedError = 3
+	// The CustomerFeed already exists. Update should be used to modify the
+	// existing CustomerFeed.
+	CustomerFeedErrorEnum_CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 4
+	// Cannot update removed customer feed.
+	CustomerFeedErrorEnum_CANNOT_MODIFY_REMOVED_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 5
+	// Invalid placeholder type.
+	CustomerFeedErrorEnum_INVALID_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 6
+	// Feed mapping for this placeholder type does not exist.
+	CustomerFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 7
+	// Placeholder not allowed at the account level.
+	CustomerFeedErrorEnum_PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 8
+)
+
+var CustomerFeedErrorEnum_CustomerFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	3: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	4: "CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED",
+	5: "CANNOT_MODIFY_REMOVED_CUSTOMER_FEED",
+	6: "INVALID_PLACEHOLDER_TYPE",
+	7: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+	8: "PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED",
+}
+
+var CustomerFeedErrorEnum_CustomerFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":      2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":                3,
+	"CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED":  4,
+	"CANNOT_MODIFY_REMOVED_CUSTOMER_FEED":           5,
+	"INVALID_PLACEHOLDER_TYPE":                      6,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE":      7,
+	"PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED": 8,
+}
+
+func (x CustomerFeedErrorEnum_CustomerFeedError) String() string {
+	return proto.EnumName(CustomerFeedErrorEnum_CustomerFeedError_name, int32(x))
+}
+
+func (CustomerFeedErrorEnum_CustomerFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4c4e12efa73e50ad, []int{0, 0}
+}
+
+// Container for enum describing possible customer feed errors.
+type CustomerFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerFeedErrorEnum) Reset()         { *m = CustomerFeedErrorEnum{} }
+func (m *CustomerFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeedErrorEnum) ProtoMessage()    {}
+func (*CustomerFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c4e12efa73e50ad, []int{0}
+}
+
+func (m *CustomerFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeedErrorEnum.Merge(m, src)
+}
+func (m *CustomerFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Size(m)
+}
+func (m *CustomerFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CustomerFeedErrorEnum_CustomerFeedError", CustomerFeedErrorEnum_CustomerFeedError_name, CustomerFeedErrorEnum_CustomerFeedError_value)
+	proto.RegisterType((*CustomerFeedErrorEnum)(nil), "google.ads.googleads.v3.errors.CustomerFeedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/customer_feed_error.proto", fileDescriptor_4c4e12efa73e50ad)
+}
+
+var fileDescriptor_4c4e12efa73e50ad = []byte{
+	// 443 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x30,
+	0x14, 0xc7, 0x69, 0x06, 0x1b, 0xf2, 0x0e, 0x14, 0x4b, 0x20, 0x84, 0xa6, 0x1e, 0xc2, 0x01, 0x0e,
+	0xc3, 0x01, 0xe5, 0x82, 0xc2, 0xc9, 0x8b, 0x9d, 0x12, 0x91, 0xd8, 0x51, 0x92, 0x66, 0x14, 0x55,
+	0xb2, 0xc2, 0x12, 0xa2, 0x4a, 0x6b, 0x5c, 0xc5, 0xdd, 0x3e, 0x10, 0x47, 0x3e, 0x0a, 0xdf, 0x81,
+	0x2f, 0xc0, 0x8d, 0x13, 0x57, 0xe4, 0xb8, 0xad, 0xd4, 0x16, 0x76, 0xca, 0x5f, 0x2f, 0xbf, 0xff,
+	0xff, 0x3d, 0xeb, 0x3d, 0xf0, 0xae, 0x91, 0xb2, 0xb9, 0xae, 0x9d, 0xb2, 0x52, 0x8e, 0x91, 0x5a,
+	0xdd, 0xba, 0x4e, 0xdd, 0x75, 0xb2, 0x53, 0xce, 0xd5, 0x8d, 0x5a, 0xc9, 0x45, 0xdd, 0x89, 0xaf,
+	0x75, 0x5d, 0x89, 0xbe, 0x88, 0x96, 0x9d, 0x5c, 0x49, 0x38, 0x32, 0x38, 0x2a, 0x2b, 0x85, 0xb6,
+	0x4e, 0x74, 0xeb, 0x22, 0xe3, 0x7c, 0x7e, 0xb6, 0x49, 0x5e, 0xce, 0x9d, 0xb2, 0x6d, 0xe5, 0xaa,
+	0x5c, 0xcd, 0x65, 0xab, 0x8c, 0xdb, 0xfe, 0x63, 0x81, 0x27, 0xfe, 0x3a, 0x3b, 0xa8, 0xeb, 0x8a,
+	0x6a, 0x13, 0x6d, 0x6f, 0x16, 0xf6, 0x4f, 0x0b, 0x3c, 0x3e, 0xf8, 0x03, 0x1f, 0x81, 0xd3, 0x09,
+	0xcb, 0x12, 0xea, 0x87, 0x41, 0x48, 0xc9, 0xf0, 0x1e, 0x3c, 0x05, 0x27, 0x13, 0xf6, 0x91, 0xf1,
+	0x4b, 0x36, 0x1c, 0xc0, 0x73, 0xf0, 0x2a, 0xa0, 0x94, 0x08, 0x1c, 0xa5, 0x14, 0x93, 0xa9, 0xa0,
+	0x9f, 0xc2, 0x2c, 0xcf, 0x44, 0xc0, 0x53, 0x91, 0x44, 0xd8, 0xa7, 0x1f, 0x78, 0x44, 0x68, 0x2a,
+	0xf2, 0x69, 0x42, 0x87, 0x16, 0xb4, 0xc1, 0xc8, 0xc7, 0x8c, 0xf1, 0x5c, 0xf8, 0x29, 0xc5, 0x39,
+	0xed, 0xb9, 0x94, 0xc6, 0xbc, 0xa0, 0x44, 0xe8, 0x9c, 0xe1, 0x11, 0x7c, 0x03, 0xce, 0x77, 0x99,
+	0x9d, 0xe8, 0x90, 0x8d, 0x85, 0x3f, 0xc9, 0x72, 0x1e, 0xd3, 0xd4, 0x38, 0xee, 0xc3, 0x97, 0xe0,
+	0xc5, 0xda, 0x11, 0x73, 0x12, 0x06, 0xd3, 0x6d, 0xe2, 0x2e, 0xf8, 0x00, 0x9e, 0x81, 0x67, 0x21,
+	0x2b, 0x70, 0x14, 0x92, 0xc3, 0xe1, 0x8e, 0xf5, 0x53, 0xe2, 0x30, 0xcb, 0x74, 0x07, 0xcd, 0xc7,
+	0x38, 0x49, 0x7a, 0xfd, 0xaf, 0xa7, 0x9c, 0xc0, 0xb7, 0xe0, 0xf5, 0x7e, 0x55, 0xe8, 0x11, 0x70,
+	0x14, 0xf1, 0x4b, 0x4a, 0x04, 0x67, 0x7b, 0xed, 0x1f, 0x5e, 0xfc, 0x1e, 0x00, 0xfb, 0x4a, 0x2e,
+	0xd0, 0xdd, 0xeb, 0xbb, 0x78, 0x7a, 0xb0, 0x83, 0x44, 0x2f, 0x2e, 0x19, 0x7c, 0x26, 0x6b, 0x67,
+	0x23, 0xaf, 0xcb, 0xb6, 0x41, 0xb2, 0x6b, 0x9c, 0xa6, 0x6e, 0xfb, 0xb5, 0x6e, 0x4e, 0x68, 0x39,
+	0x57, 0xff, 0xbb, 0xa8, 0xf7, 0xe6, 0xf3, 0xcd, 0x3a, 0x1a, 0x63, 0xfc, 0xdd, 0x1a, 0x8d, 0x4d,
+	0x18, 0xae, 0x14, 0x32, 0x52, 0xab, 0xc2, 0x45, 0x7d, 0x4b, 0xf5, 0x63, 0x03, 0xcc, 0x70, 0xa5,
+	0x66, 0x5b, 0x60, 0x56, 0xb8, 0x33, 0x03, 0xfc, 0xb2, 0x6c, 0x53, 0xf5, 0x3c, 0x5c, 0x29, 0xcf,
+	0xdb, 0x22, 0x9e, 0x57, 0xb8, 0x9e, 0x67, 0xa0, 0x2f, 0xc7, 0xfd, 0x74, 0xee, 0xdf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x31, 0x65, 0x3a, 0xc5, 0xee, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/customer_manager_link_error.pb.go b/googleapis/ads/googleads/v3/errors/customer_manager_link_error.pb.go
new file mode 100644
index 0000000..ebd54c3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/customer_manager_link_error.pb.go
@@ -0,0 +1,169 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/customer_manager_link_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible CustomerManagerLink errors.
+type CustomerManagerLinkErrorEnum_CustomerManagerLinkError int32
+
+const (
+	// Enum unspecified.
+	CustomerManagerLinkErrorEnum_UNSPECIFIED CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 0
+	// The received error code is not known in this version.
+	CustomerManagerLinkErrorEnum_UNKNOWN CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 1
+	// No pending invitation.
+	CustomerManagerLinkErrorEnum_NO_PENDING_INVITE CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 2
+	// Attempt to operate on the same client more than once in the same call.
+	CustomerManagerLinkErrorEnum_SAME_CLIENT_MORE_THAN_ONCE_PER_CALL CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 3
+	// Manager account has the maximum number of linked accounts.
+	CustomerManagerLinkErrorEnum_MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 4
+	// If no active user on account it cannot be unlinked from its manager.
+	CustomerManagerLinkErrorEnum_CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 5
+	// Account should have at least one active owner on it before being
+	// unlinked.
+	CustomerManagerLinkErrorEnum_CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 6
+	// Only account owners may change their permission role.
+	CustomerManagerLinkErrorEnum_CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 7
+	// When a client's link to its manager is not active, the link role cannot
+	// be changed.
+	CustomerManagerLinkErrorEnum_CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 8
+	// Attempt to link a child to a parent that contains or will contain
+	// duplicate children.
+	CustomerManagerLinkErrorEnum_DUPLICATE_CHILD_FOUND CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 9
+	// The authorized customer is a test account. It can add no more than the
+	// allowed number of accounts
+	CustomerManagerLinkErrorEnum_TEST_ACCOUNT_LINKS_TOO_MANY_CHILD_ACCOUNTS CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 10
+)
+
+var CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "NO_PENDING_INVITE",
+	3:  "SAME_CLIENT_MORE_THAN_ONCE_PER_CALL",
+	4:  "MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS",
+	5:  "CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER",
+	6:  "CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER",
+	7:  "CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER",
+	8:  "CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT",
+	9:  "DUPLICATE_CHILD_FOUND",
+	10: "TEST_ACCOUNT_LINKS_TOO_MANY_CHILD_ACCOUNTS",
+}
+
+var CustomerManagerLinkErrorEnum_CustomerManagerLinkError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"NO_PENDING_INVITE":                   2,
+	"SAME_CLIENT_MORE_THAN_ONCE_PER_CALL": 3,
+	"MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS":      4,
+	"CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER":      5,
+	"CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER":        6,
+	"CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER":        7,
+	"CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT": 8,
+	"DUPLICATE_CHILD_FOUND":                          9,
+	"TEST_ACCOUNT_LINKS_TOO_MANY_CHILD_ACCOUNTS":     10,
+}
+
+func (x CustomerManagerLinkErrorEnum_CustomerManagerLinkError) String() string {
+	return proto.EnumName(CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name, int32(x))
+}
+
+func (CustomerManagerLinkErrorEnum_CustomerManagerLinkError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dd36dd7e52b23e23, []int{0, 0}
+}
+
+// Container for enum describing possible CustomerManagerLink errors.
+type CustomerManagerLinkErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerManagerLinkErrorEnum) Reset()         { *m = CustomerManagerLinkErrorEnum{} }
+func (m *CustomerManagerLinkErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerManagerLinkErrorEnum) ProtoMessage()    {}
+func (*CustomerManagerLinkErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd36dd7e52b23e23, []int{0}
+}
+
+func (m *CustomerManagerLinkErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerManagerLinkErrorEnum.Merge(m, src)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Size(m)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerManagerLinkErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerManagerLinkErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.CustomerManagerLinkErrorEnum_CustomerManagerLinkError", CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name, CustomerManagerLinkErrorEnum_CustomerManagerLinkError_value)
+	proto.RegisterType((*CustomerManagerLinkErrorEnum)(nil), "google.ads.googleads.v3.errors.CustomerManagerLinkErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/customer_manager_link_error.proto", fileDescriptor_dd36dd7e52b23e23)
+}
+
+var fileDescriptor_dd36dd7e52b23e23 = []byte{
+	// 517 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8e, 0x93, 0x50,
+	0x14, 0x86, 0x9d, 0x56, 0x67, 0xf4, 0xce, 0x42, 0x24, 0x99, 0x44, 0xcd, 0x38, 0x8b, 0xba, 0x98,
+	0xa8, 0x11, 0x12, 0xd9, 0xe1, 0xc6, 0xdb, 0xcb, 0x69, 0x4b, 0x06, 0xce, 0x25, 0x70, 0xa1, 0x8e,
+	0x69, 0x72, 0x82, 0xd3, 0x86, 0x34, 0xd3, 0x42, 0x03, 0x9d, 0x79, 0x20, 0x97, 0x6e, 0x7c, 0x0f,
+	0x57, 0x3e, 0x87, 0x4f, 0xe0, 0xd2, 0x50, 0x4a, 0x9d, 0x18, 0xeb, 0x8a, 0x13, 0xce, 0xf7, 0x9f,
+	0xff, 0x0f, 0xfc, 0xec, 0x43, 0x56, 0x14, 0xd9, 0x62, 0x66, 0xa6, 0xd3, 0xca, 0x6c, 0xc6, 0x7a,
+	0xba, 0xb5, 0xcc, 0x59, 0x59, 0x16, 0x65, 0x65, 0x5e, 0xdd, 0x54, 0xeb, 0x62, 0x39, 0x2b, 0x69,
+	0x99, 0xe6, 0x69, 0x36, 0x2b, 0x69, 0x31, 0xcf, 0xaf, 0x69, 0xb3, 0x34, 0x56, 0x65, 0xb1, 0x2e,
+	0xf4, 0xb3, 0x46, 0x66, 0xa4, 0xd3, 0xca, 0xd8, 0x5d, 0x30, 0x6e, 0x2d, 0xa3, 0xb9, 0xf0, 0xfc,
+	0xb4, 0x75, 0x58, 0xcd, 0xcd, 0x34, 0xcf, 0x8b, 0x75, 0xba, 0x9e, 0x17, 0x79, 0xd5, 0xa8, 0x7b,
+	0x3f, 0xba, 0xec, 0x54, 0x6c, 0x3d, 0xfc, 0xc6, 0xc2, 0x9b, 0xe7, 0xd7, 0x50, 0x6b, 0x21, 0xbf,
+	0x59, 0xf6, 0xbe, 0x75, 0xd9, 0xd3, 0x7d, 0x80, 0xfe, 0x98, 0x1d, 0xc7, 0x18, 0x05, 0x20, 0xdc,
+	0x81, 0x0b, 0x8e, 0x76, 0x4f, 0x3f, 0x66, 0x47, 0x31, 0x5e, 0xa0, 0x1c, 0xa3, 0x76, 0xa0, 0x9f,
+	0xb0, 0x27, 0x28, 0x29, 0x00, 0x74, 0x5c, 0x1c, 0x92, 0x8b, 0x89, 0xab, 0x40, 0xeb, 0xe8, 0xe7,
+	0xec, 0x65, 0xc4, 0x7d, 0x20, 0xe1, 0xb9, 0x80, 0x8a, 0x7c, 0x19, 0x02, 0xa9, 0x11, 0x47, 0x92,
+	0x28, 0x80, 0x02, 0x08, 0x49, 0x70, 0xcf, 0xd3, 0xba, 0xfa, 0x5b, 0xf6, 0xca, 0xe7, 0xc8, 0x87,
+	0x10, 0xd2, 0x88, 0x47, 0xe4, 0xf3, 0x8f, 0x84, 0xb1, 0xdf, 0x87, 0x90, 0xe4, 0x80, 0x3c, 0x17,
+	0x2f, 0xc0, 0x21, 0x2e, 0x84, 0x8c, 0x51, 0x45, 0xda, 0xfd, 0x1a, 0x17, 0x1c, 0x51, 0x2a, 0x8a,
+	0xb1, 0xde, 0xb6, 0x3b, 0x1a, 0xbb, 0x6a, 0x24, 0x63, 0x45, 0x5c, 0x28, 0x37, 0x01, 0x8a, 0x23,
+	0x08, 0xb5, 0x07, 0xfa, 0x1b, 0x76, 0xbe, 0xc5, 0x43, 0xf0, 0x65, 0x02, 0xe4, 0xf1, 0x48, 0xb5,
+	0xa1, 0x5a, 0xa9, 0x1c, 0x23, 0x84, 0xda, 0xe1, 0x1d, 0x58, 0x8c, 0x38, 0x0e, 0x81, 0x42, 0xe9,
+	0x01, 0xf5, 0x2f, 0x09, 0x25, 0xfe, 0x05, 0x1f, 0xe9, 0xef, 0x98, 0xf1, 0x0f, 0x78, 0x20, 0xc3,
+	0x2d, 0xbd, 0x49, 0x71, 0x37, 0xa1, 0xf6, 0x50, 0x7f, 0xc6, 0x4e, 0x9c, 0x38, 0xf0, 0x5c, 0xc1,
+	0x15, 0x90, 0x18, 0xb9, 0x9e, 0x43, 0x03, 0x19, 0xa3, 0xa3, 0x3d, 0xd2, 0x0d, 0xf6, 0x5a, 0x41,
+	0xf4, 0x27, 0x53, 0xad, 0x8c, 0x48, 0x49, 0x49, 0x3e, 0xc7, 0xcb, 0x2d, 0xbc, 0xfb, 0x0e, 0xac,
+	0xff, 0xeb, 0x80, 0xf5, 0xae, 0x8a, 0xa5, 0xf1, 0xff, 0x5e, 0xf4, 0x5f, 0xec, 0xfb, 0xab, 0x41,
+	0x5d, 0x8c, 0xe0, 0xe0, 0x93, 0xb3, 0x3d, 0x90, 0x15, 0x8b, 0x34, 0xcf, 0x8c, 0xa2, 0xcc, 0xcc,
+	0x6c, 0x96, 0x6f, 0x6a, 0xd3, 0x56, 0x75, 0x35, 0xaf, 0xf6, 0x35, 0xf7, 0x7d, 0xf3, 0xf8, 0xd2,
+	0xe9, 0x0e, 0x39, 0xff, 0xda, 0x39, 0x1b, 0x36, 0xc7, 0xf8, 0xb4, 0x32, 0x9a, 0xb1, 0x9e, 0x12,
+	0xcb, 0xd8, 0x58, 0x56, 0xdf, 0x5b, 0x60, 0xc2, 0xa7, 0xd5, 0x64, 0x07, 0x4c, 0x12, 0x6b, 0xd2,
+	0x00, 0x3f, 0x3b, 0xbd, 0xe6, 0xad, 0x6d, 0xf3, 0x69, 0x65, 0xdb, 0x3b, 0xc4, 0xb6, 0x13, 0xcb,
+	0xb6, 0x1b, 0xe8, 0xf3, 0xe1, 0x26, 0x9d, 0xf5, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x96, 0xc5, 0xad,
+	0x32, 0x56, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/database_error.pb.go b/googleapis/ads/googleads/v3/errors/database_error.pb.go
new file mode 100644
index 0000000..9814e7f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/database_error.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/database_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible database errors.
+type DatabaseErrorEnum_DatabaseError int32
+
+const (
+	// Enum unspecified.
+	DatabaseErrorEnum_UNSPECIFIED DatabaseErrorEnum_DatabaseError = 0
+	// The received error code is not known in this version.
+	DatabaseErrorEnum_UNKNOWN DatabaseErrorEnum_DatabaseError = 1
+	// Multiple requests were attempting to modify the same resource at once.
+	// Please retry the request.
+	DatabaseErrorEnum_CONCURRENT_MODIFICATION DatabaseErrorEnum_DatabaseError = 2
+	// The request conflicted with existing data. This error will usually be
+	// replaced with a more specific error if the request is retried.
+	DatabaseErrorEnum_DATA_CONSTRAINT_VIOLATION DatabaseErrorEnum_DatabaseError = 3
+	// The data written is too large. Please split the request into smaller
+	// requests.
+	DatabaseErrorEnum_REQUEST_TOO_LARGE DatabaseErrorEnum_DatabaseError = 4
+)
+
+var DatabaseErrorEnum_DatabaseError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CONCURRENT_MODIFICATION",
+	3: "DATA_CONSTRAINT_VIOLATION",
+	4: "REQUEST_TOO_LARGE",
+}
+
+var DatabaseErrorEnum_DatabaseError_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"CONCURRENT_MODIFICATION":   2,
+	"DATA_CONSTRAINT_VIOLATION": 3,
+	"REQUEST_TOO_LARGE":         4,
+}
+
+func (x DatabaseErrorEnum_DatabaseError) String() string {
+	return proto.EnumName(DatabaseErrorEnum_DatabaseError_name, int32(x))
+}
+
+func (DatabaseErrorEnum_DatabaseError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_afdc845129054f81, []int{0, 0}
+}
+
+// Container for enum describing possible database errors.
+type DatabaseErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DatabaseErrorEnum) Reset()         { *m = DatabaseErrorEnum{} }
+func (m *DatabaseErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DatabaseErrorEnum) ProtoMessage()    {}
+func (*DatabaseErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_afdc845129054f81, []int{0}
+}
+
+func (m *DatabaseErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DatabaseErrorEnum.Unmarshal(m, b)
+}
+func (m *DatabaseErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DatabaseErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *DatabaseErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DatabaseErrorEnum.Merge(m, src)
+}
+func (m *DatabaseErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DatabaseErrorEnum.Size(m)
+}
+func (m *DatabaseErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DatabaseErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DatabaseErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.DatabaseErrorEnum_DatabaseError", DatabaseErrorEnum_DatabaseError_name, DatabaseErrorEnum_DatabaseError_value)
+	proto.RegisterType((*DatabaseErrorEnum)(nil), "google.ads.googleads.v3.errors.DatabaseErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/database_error.proto", fileDescriptor_afdc845129054f81)
+}
+
+var fileDescriptor_afdc845129054f81 = []byte{
+	// 349 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x6a, 0xe3, 0x30,
+	0x14, 0xc6, 0xc7, 0xce, 0x30, 0x03, 0x0a, 0xc3, 0x38, 0x86, 0x52, 0xfa, 0x2f, 0x0b, 0x1f, 0x40,
+	0x5e, 0x78, 0xa7, 0xae, 0x14, 0x5b, 0x09, 0xa6, 0xa9, 0x94, 0x3a, 0xb2, 0x0b, 0xc5, 0x60, 0x94,
+	0xda, 0x98, 0x40, 0x62, 0x05, 0xcb, 0xcd, 0xba, 0xa7, 0xe8, 0x01, 0xba, 0xec, 0x51, 0x7a, 0x94,
+	0x42, 0xef, 0x50, 0x6c, 0x25, 0x81, 0x2c, 0xda, 0x95, 0x3e, 0x3d, 0xfd, 0xbe, 0xa7, 0xf7, 0x3d,
+	0xe0, 0x95, 0x52, 0x96, 0xab, 0xc2, 0x15, 0xb9, 0x72, 0xb5, 0x6c, 0xd5, 0xd6, 0x73, 0x8b, 0xba,
+	0x96, 0xb5, 0x72, 0x73, 0xd1, 0x88, 0x85, 0x50, 0x45, 0xd6, 0xdd, 0xe1, 0xa6, 0x96, 0x8d, 0xb4,
+	0x87, 0x9a, 0x84, 0x22, 0x57, 0xf0, 0x60, 0x82, 0x5b, 0x0f, 0x6a, 0xd3, 0xf9, 0xe5, 0xbe, 0xe9,
+	0x66, 0xe9, 0x8a, 0xaa, 0x92, 0x8d, 0x68, 0x96, 0xb2, 0x52, 0xda, 0xed, 0xbc, 0x18, 0x60, 0x10,
+	0xec, 0xda, 0x92, 0xd6, 0x40, 0xaa, 0xa7, 0xb5, 0xf3, 0x6c, 0x80, 0x7f, 0x47, 0x55, 0xfb, 0x3f,
+	0xe8, 0xc7, 0x74, 0x3e, 0x23, 0x7e, 0x38, 0x0e, 0x49, 0x60, 0xfd, 0xb2, 0xfb, 0xe0, 0x6f, 0x4c,
+	0x6f, 0x28, 0xbb, 0xa7, 0x96, 0x61, 0x5f, 0x80, 0x53, 0x9f, 0x51, 0x3f, 0x8e, 0x22, 0x42, 0x79,
+	0x76, 0xcb, 0x82, 0x70, 0x1c, 0xfa, 0x98, 0x87, 0x8c, 0x5a, 0xa6, 0x7d, 0x05, 0xce, 0x02, 0xcc,
+	0x71, 0xe6, 0x33, 0x3a, 0xe7, 0x11, 0x0e, 0x29, 0xcf, 0x92, 0x90, 0x4d, 0xf5, 0x73, 0xcf, 0x3e,
+	0x01, 0x83, 0x88, 0xdc, 0xc5, 0x64, 0xce, 0x33, 0xce, 0x58, 0x36, 0xc5, 0xd1, 0x84, 0x58, 0xbf,
+	0x47, 0x9f, 0x06, 0x70, 0x1e, 0xe5, 0x1a, 0xfe, 0x9c, 0x6e, 0x64, 0x1f, 0x8d, 0x39, 0x6b, 0x33,
+	0xcd, 0x8c, 0x87, 0x60, 0xe7, 0x2a, 0xe5, 0x4a, 0x54, 0x25, 0x94, 0x75, 0xe9, 0x96, 0x45, 0xd5,
+	0x25, 0xde, 0x2f, 0x76, 0xb3, 0x54, 0xdf, 0xed, 0xf9, 0x5a, 0x1f, 0xaf, 0x66, 0x6f, 0x82, 0xf1,
+	0x9b, 0x39, 0x9c, 0xe8, 0x66, 0x38, 0x57, 0x50, 0xcb, 0x56, 0x25, 0x1e, 0xec, 0xbe, 0x54, 0xef,
+	0x7b, 0x20, 0xc5, 0xb9, 0x4a, 0x0f, 0x40, 0x9a, 0x78, 0xa9, 0x06, 0x3e, 0x4c, 0x47, 0x57, 0x11,
+	0xc2, 0xb9, 0x42, 0xe8, 0x80, 0x20, 0x94, 0x78, 0x08, 0x69, 0x68, 0xf1, 0xa7, 0x9b, 0xce, 0xfb,
+	0x0a, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x9c, 0x92, 0xeb, 0x04, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/date_error.pb.go b/googleapis/ads/googleads/v3/errors/date_error.pb.go
new file mode 100644
index 0000000..fcb6851
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/date_error.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/date_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible date errors.
+type DateErrorEnum_DateError int32
+
+const (
+	// Enum unspecified.
+	DateErrorEnum_UNSPECIFIED DateErrorEnum_DateError = 0
+	// The received error code is not known in this version.
+	DateErrorEnum_UNKNOWN DateErrorEnum_DateError = 1
+	// Given field values do not correspond to a valid date.
+	DateErrorEnum_INVALID_FIELD_VALUES_IN_DATE DateErrorEnum_DateError = 2
+	// Given field values do not correspond to a valid date time.
+	DateErrorEnum_INVALID_FIELD_VALUES_IN_DATE_TIME DateErrorEnum_DateError = 3
+	// The string date's format should be yyyy-mm-dd.
+	DateErrorEnum_INVALID_STRING_DATE DateErrorEnum_DateError = 4
+	// The string date time's format should be yyyy-mm-dd hh:mm:ss.ssssss.
+	DateErrorEnum_INVALID_STRING_DATE_TIME_MICROS DateErrorEnum_DateError = 6
+	// The string date time's format should be yyyy-mm-dd hh:mm:ss.
+	DateErrorEnum_INVALID_STRING_DATE_TIME_SECONDS DateErrorEnum_DateError = 11
+	// The string date time's format should be yyyy-mm-dd hh:mm:ss+|-hh:mm.
+	DateErrorEnum_INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET DateErrorEnum_DateError = 12
+	// Date is before allowed minimum.
+	DateErrorEnum_EARLIER_THAN_MINIMUM_DATE DateErrorEnum_DateError = 7
+	// Date is after allowed maximum.
+	DateErrorEnum_LATER_THAN_MAXIMUM_DATE DateErrorEnum_DateError = 8
+	// Date range bounds are not in order.
+	DateErrorEnum_DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE DateErrorEnum_DateError = 9
+	// Both dates in range are null.
+	DateErrorEnum_DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL DateErrorEnum_DateError = 10
+)
+
+var DateErrorEnum_DateError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_FIELD_VALUES_IN_DATE",
+	3:  "INVALID_FIELD_VALUES_IN_DATE_TIME",
+	4:  "INVALID_STRING_DATE",
+	6:  "INVALID_STRING_DATE_TIME_MICROS",
+	11: "INVALID_STRING_DATE_TIME_SECONDS",
+	12: "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET",
+	7:  "EARLIER_THAN_MINIMUM_DATE",
+	8:  "LATER_THAN_MAXIMUM_DATE",
+	9:  "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE",
+	10: "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL",
+}
+
+var DateErrorEnum_DateError_value = map[string]int32{
+	"UNSPECIFIED":                                     0,
+	"UNKNOWN":                                         1,
+	"INVALID_FIELD_VALUES_IN_DATE":                    2,
+	"INVALID_FIELD_VALUES_IN_DATE_TIME":               3,
+	"INVALID_STRING_DATE":                             4,
+	"INVALID_STRING_DATE_TIME_MICROS":                 6,
+	"INVALID_STRING_DATE_TIME_SECONDS":                11,
+	"INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET":    12,
+	"EARLIER_THAN_MINIMUM_DATE":                       7,
+	"LATER_THAN_MAXIMUM_DATE":                         8,
+	"DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE": 9,
+	"DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL":  10,
+}
+
+func (x DateErrorEnum_DateError) String() string {
+	return proto.EnumName(DateErrorEnum_DateError_name, int32(x))
+}
+
+func (DateErrorEnum_DateError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_81086e3ecaa52885, []int{0, 0}
+}
+
+// Container for enum describing possible date errors.
+type DateErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DateErrorEnum) Reset()         { *m = DateErrorEnum{} }
+func (m *DateErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DateErrorEnum) ProtoMessage()    {}
+func (*DateErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_81086e3ecaa52885, []int{0}
+}
+
+func (m *DateErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateErrorEnum.Unmarshal(m, b)
+}
+func (m *DateErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *DateErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateErrorEnum.Merge(m, src)
+}
+func (m *DateErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DateErrorEnum.Size(m)
+}
+func (m *DateErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.DateErrorEnum_DateError", DateErrorEnum_DateError_name, DateErrorEnum_DateError_value)
+	proto.RegisterType((*DateErrorEnum)(nil), "google.ads.googleads.v3.errors.DateErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/date_error.proto", fileDescriptor_81086e3ecaa52885)
+}
+
+var fileDescriptor_81086e3ecaa52885 = []byte{
+	// 446 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x6f, 0xd3, 0x30,
+	0x18, 0xc6, 0x69, 0x8b, 0x36, 0xf6, 0x96, 0x3f, 0x91, 0x39, 0x4c, 0xc0, 0x18, 0xa3, 0xc0, 0x0d,
+	0x39, 0x88, 0xdc, 0xc2, 0xc9, 0x6d, 0xdc, 0xd6, 0x22, 0x71, 0xaa, 0xc4, 0xc9, 0x10, 0xaa, 0x64,
+	0x05, 0x12, 0x45, 0x95, 0xb6, 0xb8, 0x8a, 0xc3, 0x3e, 0x10, 0x47, 0x24, 0x3e, 0x03, 0x77, 0xbe,
+	0x09, 0x7c, 0x0a, 0xd4, 0x78, 0x0d, 0x9a, 0xb4, 0x6e, 0xa7, 0x3c, 0xf2, 0xfb, 0xfb, 0xbd, 0xb1,
+	0xe4, 0x07, 0xec, 0x52, 0xa9, 0xf2, 0xac, 0xb0, 0xb3, 0x5c, 0x5f, 0xc6, 0x4d, 0xba, 0x70, 0xec,
+	0xa2, 0xae, 0x55, 0xad, 0xed, 0x3c, 0x6b, 0x0a, 0xd9, 0x66, 0xbc, 0xae, 0x55, 0xa3, 0xd0, 0xb1,
+	0xa1, 0x70, 0x96, 0x6b, 0xdc, 0x09, 0xf8, 0xc2, 0xc1, 0x46, 0x78, 0x7a, 0xb4, 0x5d, 0xb8, 0x5e,
+	0xd9, 0x59, 0x55, 0xa9, 0x26, 0x6b, 0x56, 0xaa, 0xd2, 0xc6, 0x1e, 0xfd, 0x1a, 0xc0, 0x03, 0x2f,
+	0x6b, 0x0a, 0xba, 0x81, 0x69, 0xf5, 0xed, 0x7c, 0xf4, 0x73, 0x00, 0x07, 0xdd, 0x09, 0x7a, 0x04,
+	0xc3, 0x84, 0xc7, 0x0b, 0x3a, 0x61, 0x53, 0x46, 0x3d, 0xeb, 0x0e, 0x1a, 0xc2, 0x7e, 0xc2, 0x3f,
+	0xf2, 0xf0, 0x94, 0x5b, 0x3d, 0x74, 0x02, 0x47, 0x8c, 0xa7, 0xc4, 0x67, 0x9e, 0x9c, 0x32, 0xea,
+	0x7b, 0x32, 0x25, 0x7e, 0x42, 0x63, 0xc9, 0xb8, 0xf4, 0x88, 0xa0, 0x56, 0x1f, 0xbd, 0x81, 0x97,
+	0x37, 0x11, 0x52, 0xb0, 0x80, 0x5a, 0x03, 0x74, 0x08, 0x8f, 0xb7, 0x58, 0x2c, 0x22, 0xc6, 0x67,
+	0xc6, 0xbf, 0x8b, 0x5e, 0xc1, 0x8b, 0x6b, 0x06, 0xad, 0x26, 0x03, 0x36, 0x89, 0xc2, 0xd8, 0xda,
+	0x43, 0xaf, 0xe1, 0x64, 0x27, 0x14, 0xd3, 0x49, 0xc8, 0xbd, 0xd8, 0x1a, 0xa2, 0x77, 0xf0, 0xf6,
+	0x36, 0x4a, 0x9e, 0x32, 0x31, 0x97, 0xe1, 0x74, 0x1a, 0x53, 0x61, 0xdd, 0x47, 0xcf, 0xe1, 0x09,
+	0x25, 0x91, 0xcf, 0x68, 0x24, 0xc5, 0x9c, 0x70, 0x19, 0x30, 0xce, 0x82, 0x24, 0x30, 0x77, 0xdb,
+	0x47, 0xcf, 0xe0, 0xd0, 0x27, 0xa2, 0x1b, 0x92, 0x4f, 0xff, 0x87, 0xf7, 0x90, 0x03, 0x76, 0xbb,
+	0x3e, 0x22, 0x7c, 0x46, 0xaf, 0x98, 0x72, 0x97, 0x74, 0x80, 0xde, 0x03, 0xbe, 0x46, 0x22, 0xdc,
+	0xbb, 0x02, 0xc6, 0x72, 0x1c, 0x8a, 0xb9, 0xe4, 0x89, 0xef, 0x5b, 0x30, 0xfe, 0xd3, 0x83, 0xd1,
+	0x57, 0x75, 0x8e, 0x6f, 0xae, 0xc1, 0xf8, 0x61, 0xf7, 0xa6, 0x8b, 0xcd, 0xc3, 0x2f, 0x7a, 0x9f,
+	0xbd, 0x4b, 0xa3, 0x54, 0x67, 0x59, 0x55, 0x62, 0x55, 0x97, 0x76, 0x59, 0x54, 0x6d, 0x2d, 0xb6,
+	0xcd, 0x5b, 0xaf, 0xf4, 0xae, 0x22, 0x7e, 0x30, 0x9f, 0xef, 0xfd, 0xc1, 0x8c, 0x90, 0x1f, 0xfd,
+	0xe3, 0x99, 0x59, 0x46, 0x72, 0x8d, 0x4d, 0xdc, 0xa4, 0xd4, 0xc1, 0xed, 0x2f, 0xf5, 0xef, 0x2d,
+	0xb0, 0x24, 0xb9, 0x5e, 0x76, 0xc0, 0x32, 0x75, 0x96, 0x06, 0xf8, 0xdb, 0x1f, 0x99, 0x53, 0xd7,
+	0x25, 0xb9, 0x76, 0xdd, 0x0e, 0x71, 0xdd, 0xd4, 0x71, 0x5d, 0x03, 0x7d, 0xd9, 0x6b, 0x6f, 0xe7,
+	0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x88, 0x64, 0xb3, 0x9a, 0x25, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/date_range_error.pb.go b/googleapis/ads/googleads/v3/errors/date_range_error.pb.go
new file mode 100644
index 0000000..b596e1a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/date_range_error.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/date_range_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible date range errors.
+type DateRangeErrorEnum_DateRangeError int32
+
+const (
+	// Enum unspecified.
+	DateRangeErrorEnum_UNSPECIFIED DateRangeErrorEnum_DateRangeError = 0
+	// The received error code is not known in this version.
+	DateRangeErrorEnum_UNKNOWN DateRangeErrorEnum_DateRangeError = 1
+	// Invalid date.
+	DateRangeErrorEnum_INVALID_DATE DateRangeErrorEnum_DateRangeError = 2
+	// The start date was after the end date.
+	DateRangeErrorEnum_START_DATE_AFTER_END_DATE DateRangeErrorEnum_DateRangeError = 3
+	// Cannot set date to past time
+	DateRangeErrorEnum_CANNOT_SET_DATE_TO_PAST DateRangeErrorEnum_DateRangeError = 4
+	// A date was used that is past the system "last" date.
+	DateRangeErrorEnum_AFTER_MAXIMUM_ALLOWABLE_DATE DateRangeErrorEnum_DateRangeError = 5
+	// Trying to change start date on a resource that has started.
+	DateRangeErrorEnum_CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED DateRangeErrorEnum_DateRangeError = 6
+)
+
+var DateRangeErrorEnum_DateRangeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_DATE",
+	3: "START_DATE_AFTER_END_DATE",
+	4: "CANNOT_SET_DATE_TO_PAST",
+	5: "AFTER_MAXIMUM_ALLOWABLE_DATE",
+	6: "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED",
+}
+
+var DateRangeErrorEnum_DateRangeError_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"INVALID_DATE":                 2,
+	"START_DATE_AFTER_END_DATE":    3,
+	"CANNOT_SET_DATE_TO_PAST":      4,
+	"AFTER_MAXIMUM_ALLOWABLE_DATE": 5,
+	"CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED": 6,
+}
+
+func (x DateRangeErrorEnum_DateRangeError) String() string {
+	return proto.EnumName(DateRangeErrorEnum_DateRangeError_name, int32(x))
+}
+
+func (DateRangeErrorEnum_DateRangeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a97a5f455042a19e, []int{0, 0}
+}
+
+// Container for enum describing possible date range errors.
+type DateRangeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DateRangeErrorEnum) Reset()         { *m = DateRangeErrorEnum{} }
+func (m *DateRangeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DateRangeErrorEnum) ProtoMessage()    {}
+func (*DateRangeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a97a5f455042a19e, []int{0}
+}
+
+func (m *DateRangeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateRangeErrorEnum.Unmarshal(m, b)
+}
+func (m *DateRangeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateRangeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *DateRangeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateRangeErrorEnum.Merge(m, src)
+}
+func (m *DateRangeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DateRangeErrorEnum.Size(m)
+}
+func (m *DateRangeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateRangeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateRangeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.DateRangeErrorEnum_DateRangeError", DateRangeErrorEnum_DateRangeError_name, DateRangeErrorEnum_DateRangeError_value)
+	proto.RegisterType((*DateRangeErrorEnum)(nil), "google.ads.googleads.v3.errors.DateRangeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/date_range_error.proto", fileDescriptor_a97a5f455042a19e)
+}
+
+var fileDescriptor_a97a5f455042a19e = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x8e, 0x95, 0x30,
+	0x14, 0x86, 0xe5, 0x8e, 0x8e, 0x49, 0xc7, 0x28, 0xa9, 0x0b, 0xa3, 0x8e, 0x13, 0xc3, 0xd6, 0xa4,
+	0x2c, 0x88, 0x9b, 0xba, 0x3a, 0x77, 0x5a, 0x26, 0x44, 0x28, 0x04, 0xb8, 0x8c, 0x1a, 0x92, 0xa6,
+	0x0a, 0x21, 0x37, 0x99, 0xa1, 0x37, 0x14, 0xe7, 0x81, 0x5c, 0xfa, 0x28, 0x6e, 0x7c, 0x0b, 0x17,
+	0x2e, 0x7c, 0x06, 0x03, 0xe5, 0xde, 0x38, 0x0b, 0x67, 0xc5, 0xcf, 0xdf, 0xff, 0x3b, 0xa7, 0x3d,
+	0x07, 0xbd, 0xed, 0xb4, 0xee, 0xae, 0x5a, 0x5f, 0x35, 0xc6, 0xb7, 0x72, 0x52, 0x37, 0x81, 0xdf,
+	0x0e, 0x83, 0x1e, 0x8c, 0xdf, 0xa8, 0xb1, 0x95, 0x83, 0xea, 0xbb, 0x56, 0xce, 0x0e, 0xd9, 0x0d,
+	0x7a, 0xd4, 0xf8, 0xcc, 0x66, 0x89, 0x6a, 0x0c, 0x39, 0x60, 0xe4, 0x26, 0x20, 0x16, 0x7b, 0x71,
+	0xba, 0x2f, 0xbb, 0xdb, 0xfa, 0xaa, 0xef, 0xf5, 0xa8, 0xc6, 0xad, 0xee, 0x8d, 0xa5, 0xbd, 0x5f,
+	0x0e, 0xc2, 0x4c, 0x8d, 0x6d, 0x3e, 0xd5, 0xe5, 0x13, 0xc1, 0xfb, 0xaf, 0xd7, 0xde, 0x4f, 0x07,
+	0x3d, 0xbe, 0x6d, 0xe3, 0x27, 0xe8, 0x64, 0x23, 0x8a, 0x8c, 0x9f, 0x47, 0x61, 0xc4, 0x99, 0x7b,
+	0x0f, 0x9f, 0xa0, 0x87, 0x1b, 0xf1, 0x5e, 0xa4, 0x97, 0xc2, 0x75, 0xb0, 0x8b, 0x1e, 0x45, 0xa2,
+	0x82, 0x38, 0x62, 0x92, 0x41, 0xc9, 0xdd, 0x15, 0x7e, 0x85, 0x9e, 0x17, 0x25, 0xe4, 0xe5, 0xfc,
+	0x2f, 0x21, 0x2c, 0x79, 0x2e, 0xb9, 0x58, 0x8e, 0x8f, 0xf0, 0x4b, 0xf4, 0xec, 0x1c, 0x84, 0x48,
+	0x4b, 0x59, 0xf0, 0x25, 0x53, 0xa6, 0x32, 0x83, 0xa2, 0x74, 0xef, 0xe3, 0xd7, 0xe8, 0xd4, 0x02,
+	0x09, 0x7c, 0x88, 0x92, 0x4d, 0x22, 0x21, 0x8e, 0xd3, 0x4b, 0x58, 0xc7, 0xdc, 0xe2, 0x0f, 0xb0,
+	0x8f, 0xde, 0x2c, 0x78, 0x92, 0xb2, 0x28, 0xfc, 0x28, 0xff, 0xe9, 0x15, 0x85, 0x12, 0xe2, 0x9c,
+	0x03, 0x5b, 0x5c, 0xce, 0xdc, 0xe3, 0xf5, 0x1f, 0x07, 0x79, 0x5f, 0xf4, 0x35, 0xb9, 0x7b, 0x5a,
+	0xeb, 0xa7, 0xb7, 0x5f, 0x9d, 0x4d, 0x43, 0xca, 0x9c, 0x4f, 0x6c, 0xc1, 0x3a, 0x7d, 0xa5, 0xfa,
+	0x8e, 0xe8, 0xa1, 0xf3, 0xbb, 0xb6, 0x9f, 0x47, 0xb8, 0xdf, 0xd5, 0x6e, 0x6b, 0xfe, 0xb7, 0xba,
+	0x77, 0xf6, 0xf3, 0x6d, 0x75, 0x74, 0x01, 0xf0, 0x7d, 0x75, 0x76, 0x61, 0x8b, 0x41, 0x63, 0x88,
+	0x95, 0x93, 0xaa, 0x02, 0x32, 0xb7, 0x34, 0x3f, 0xf6, 0x81, 0x1a, 0x1a, 0x53, 0x1f, 0x02, 0x75,
+	0x15, 0xd4, 0x36, 0xf0, 0x7b, 0xe5, 0x59, 0x97, 0x52, 0x68, 0x0c, 0xa5, 0x87, 0x08, 0xa5, 0x55,
+	0x40, 0xa9, 0x0d, 0x7d, 0x3e, 0x9e, 0x6f, 0x17, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x15,
+	0x6e, 0x6a, 0x57, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/distinct_error.pb.go b/googleapis/ads/googleads/v3/errors/distinct_error.pb.go
new file mode 100644
index 0000000..b489cec
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/distinct_error.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/distinct_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible distinct errors.
+type DistinctErrorEnum_DistinctError int32
+
+const (
+	// Enum unspecified.
+	DistinctErrorEnum_UNSPECIFIED DistinctErrorEnum_DistinctError = 0
+	// The received error code is not known in this version.
+	DistinctErrorEnum_UNKNOWN DistinctErrorEnum_DistinctError = 1
+	// Duplicate element.
+	DistinctErrorEnum_DUPLICATE_ELEMENT DistinctErrorEnum_DistinctError = 2
+	// Duplicate type.
+	DistinctErrorEnum_DUPLICATE_TYPE DistinctErrorEnum_DistinctError = 3
+)
+
+var DistinctErrorEnum_DistinctError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_ELEMENT",
+	3: "DUPLICATE_TYPE",
+}
+
+var DistinctErrorEnum_DistinctError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"DUPLICATE_ELEMENT": 2,
+	"DUPLICATE_TYPE":    3,
+}
+
+func (x DistinctErrorEnum_DistinctError) String() string {
+	return proto.EnumName(DistinctErrorEnum_DistinctError_name, int32(x))
+}
+
+func (DistinctErrorEnum_DistinctError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_273e984be5b3360c, []int{0, 0}
+}
+
+// Container for enum describing possible distinct errors.
+type DistinctErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DistinctErrorEnum) Reset()         { *m = DistinctErrorEnum{} }
+func (m *DistinctErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DistinctErrorEnum) ProtoMessage()    {}
+func (*DistinctErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_273e984be5b3360c, []int{0}
+}
+
+func (m *DistinctErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DistinctErrorEnum.Unmarshal(m, b)
+}
+func (m *DistinctErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DistinctErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *DistinctErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DistinctErrorEnum.Merge(m, src)
+}
+func (m *DistinctErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DistinctErrorEnum.Size(m)
+}
+func (m *DistinctErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DistinctErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DistinctErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.DistinctErrorEnum_DistinctError", DistinctErrorEnum_DistinctError_name, DistinctErrorEnum_DistinctError_value)
+	proto.RegisterType((*DistinctErrorEnum)(nil), "google.ads.googleads.v3.errors.DistinctErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/distinct_error.proto", fileDescriptor_273e984be5b3360c)
+}
+
+var fileDescriptor_273e984be5b3360c = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x18, 0xc5, 0x5d, 0x07, 0x0a, 0x19, 0x6a, 0x17, 0xf0, 0x46, 0x64, 0x17, 0x7d, 0x80, 0xe4, 0x22,
+	0x77, 0xf1, 0x2a, 0x5b, 0xe3, 0x18, 0xce, 0x5a, 0x70, 0xad, 0x7f, 0x28, 0x8c, 0xba, 0x94, 0x50,
+	0x58, 0x93, 0xd2, 0xd4, 0x3d, 0x90, 0x97, 0x3e, 0x8a, 0x8f, 0x22, 0xf8, 0x0e, 0xd2, 0x66, 0xad,
+	0xec, 0x42, 0xaf, 0x7a, 0xfa, 0xf1, 0x3b, 0xe7, 0x3b, 0xf9, 0x00, 0x91, 0x5a, 0xcb, 0x6d, 0x86,
+	0x53, 0x61, 0xb0, 0x95, 0x8d, 0xda, 0x11, 0x9c, 0x55, 0x95, 0xae, 0x0c, 0x16, 0xb9, 0xa9, 0x73,
+	0xb5, 0xa9, 0xd7, 0xed, 0x3f, 0x2a, 0x2b, 0x5d, 0x6b, 0x38, 0xb1, 0x24, 0x4a, 0x85, 0x41, 0xbd,
+	0x09, 0xed, 0x08, 0xb2, 0xa6, 0xcb, 0xab, 0x2e, 0xb4, 0xcc, 0x71, 0xaa, 0x94, 0xae, 0xd3, 0x3a,
+	0xd7, 0xca, 0x58, 0xb7, 0x57, 0x80, 0xb1, 0xbf, 0x4f, 0xe5, 0x0d, 0xcf, 0xd5, 0x5b, 0xe1, 0x3d,
+	0x81, 0xd3, 0x83, 0x21, 0x3c, 0x07, 0xa3, 0x28, 0x78, 0x08, 0xf9, 0x6c, 0x71, 0xb3, 0xe0, 0xbe,
+	0x7b, 0x04, 0x47, 0xe0, 0x24, 0x0a, 0x6e, 0x83, 0xfb, 0xc7, 0xc0, 0x1d, 0xc0, 0x0b, 0x30, 0xf6,
+	0xa3, 0x70, 0xb9, 0x98, 0xb1, 0x15, 0x5f, 0xf3, 0x25, 0xbf, 0xe3, 0xc1, 0xca, 0x75, 0x20, 0x04,
+	0x67, 0xbf, 0xe3, 0xd5, 0x73, 0xc8, 0xdd, 0xe1, 0xf4, 0x7b, 0x00, 0xbc, 0x8d, 0x2e, 0xd0, 0xff,
+	0x9d, 0xa7, 0xf0, 0x60, 0x7d, 0xd8, 0x34, 0x0d, 0x07, 0x2f, 0xfe, 0xde, 0x25, 0xf5, 0x36, 0x55,
+	0x12, 0xe9, 0x4a, 0x62, 0x99, 0xa9, 0xf6, 0x1d, 0xdd, 0xb9, 0xca, 0xdc, 0xfc, 0x75, 0xbd, 0x6b,
+	0xfb, 0x79, 0x77, 0x86, 0x73, 0xc6, 0x3e, 0x9c, 0xc9, 0xdc, 0x86, 0x31, 0x61, 0x90, 0x95, 0x8d,
+	0x8a, 0x09, 0x6a, 0x57, 0x9a, 0xcf, 0x0e, 0x48, 0x98, 0x30, 0x49, 0x0f, 0x24, 0x31, 0x49, 0x2c,
+	0xf0, 0xe5, 0x78, 0x76, 0x4a, 0x29, 0x13, 0x86, 0xd2, 0x1e, 0xa1, 0x34, 0x26, 0x94, 0x5a, 0xe8,
+	0xf5, 0xb8, 0x6d, 0x47, 0x7e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x41, 0x9d, 0xfa, 0xda, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/enum_error.pb.go b/googleapis/ads/googleads/v3/errors/enum_error.pb.go
new file mode 100644
index 0000000..11dbcb2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/enum_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/enum_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible enum errors.
+type EnumErrorEnum_EnumError int32
+
+const (
+	// Enum unspecified.
+	EnumErrorEnum_UNSPECIFIED EnumErrorEnum_EnumError = 0
+	// The received error code is not known in this version.
+	EnumErrorEnum_UNKNOWN EnumErrorEnum_EnumError = 1
+	// The enum value is not permitted.
+	EnumErrorEnum_ENUM_VALUE_NOT_PERMITTED EnumErrorEnum_EnumError = 3
+)
+
+var EnumErrorEnum_EnumError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "ENUM_VALUE_NOT_PERMITTED",
+}
+
+var EnumErrorEnum_EnumError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"ENUM_VALUE_NOT_PERMITTED": 3,
+}
+
+func (x EnumErrorEnum_EnumError) String() string {
+	return proto.EnumName(EnumErrorEnum_EnumError_name, int32(x))
+}
+
+func (EnumErrorEnum_EnumError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b002669bf1a51dfb, []int{0, 0}
+}
+
+// Container for enum describing possible enum errors.
+type EnumErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnumErrorEnum) Reset()         { *m = EnumErrorEnum{} }
+func (m *EnumErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*EnumErrorEnum) ProtoMessage()    {}
+func (*EnumErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b002669bf1a51dfb, []int{0}
+}
+
+func (m *EnumErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumErrorEnum.Unmarshal(m, b)
+}
+func (m *EnumErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *EnumErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumErrorEnum.Merge(m, src)
+}
+func (m *EnumErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_EnumErrorEnum.Size(m)
+}
+func (m *EnumErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.EnumErrorEnum_EnumError", EnumErrorEnum_EnumError_name, EnumErrorEnum_EnumError_value)
+	proto.RegisterType((*EnumErrorEnum)(nil), "google.ads.googleads.v3.errors.EnumErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/enum_error.proto", fileDescriptor_b002669bf1a51dfb)
+}
+
+var fileDescriptor_b002669bf1a51dfb = []byte{
+	// 295 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4e, 0xb4, 0x30,
+	0x18, 0x86, 0xff, 0x61, 0x92, 0xdf, 0xd8, 0x89, 0x4a, 0x58, 0x19, 0x33, 0x99, 0x05, 0x07, 0x68,
+	0x17, 0xdd, 0xd5, 0x55, 0x47, 0x2a, 0x21, 0x3a, 0x1d, 0xa2, 0x80, 0xc6, 0x90, 0x10, 0x14, 0xd2,
+	0x90, 0x0c, 0x2d, 0xa1, 0xcc, 0x1c, 0xc8, 0xa5, 0x47, 0xf1, 0x26, 0x7a, 0x0a, 0x03, 0x1d, 0xd8,
+	0xe9, 0xaa, 0x4f, 0x9a, 0xe7, 0xfd, 0xbe, 0x37, 0x1f, 0x40, 0x42, 0x29, 0xb1, 0x2b, 0x51, 0x5e,
+	0xe8, 0x23, 0xf6, 0x74, 0xc0, 0xa8, 0x6c, 0x5b, 0xd5, 0x6a, 0x54, 0xca, 0x7d, 0x9d, 0x0d, 0x0c,
+	0x9b, 0x56, 0x75, 0xca, 0x59, 0x19, 0x0b, 0xe6, 0x85, 0x86, 0x53, 0x00, 0x1e, 0x30, 0x34, 0x81,
+	0xab, 0xe5, 0x38, 0xb0, 0xa9, 0x50, 0x2e, 0xa5, 0xea, 0xf2, 0xae, 0x52, 0x52, 0x9b, 0xb4, 0xfb,
+	0x0c, 0xce, 0x98, 0xdc, 0xd7, 0xac, 0x77, 0x7b, 0x70, 0x7d, 0x70, 0x3a, 0x7d, 0x38, 0x17, 0x60,
+	0x11, 0xf3, 0xc7, 0x90, 0xdd, 0x04, 0xb7, 0x01, 0xf3, 0xec, 0x7f, 0xce, 0x02, 0x9c, 0xc4, 0xfc,
+	0x8e, 0x6f, 0x9f, 0xb8, 0x3d, 0x73, 0x96, 0xe0, 0x92, 0xf1, 0x78, 0x93, 0x25, 0xf4, 0x3e, 0x66,
+	0x19, 0xdf, 0x46, 0x59, 0xc8, 0x1e, 0x36, 0x41, 0x14, 0x31, 0xcf, 0x9e, 0xaf, 0xbf, 0x66, 0xc0,
+	0x7d, 0x53, 0x35, 0xfc, 0xbb, 0xde, 0xfa, 0x7c, 0xda, 0x16, 0xf6, 0x85, 0xc2, 0xd9, 0x8b, 0x77,
+	0x4c, 0x08, 0xb5, 0xcb, 0xa5, 0x80, 0xaa, 0x15, 0x48, 0x94, 0x72, 0xa8, 0x3b, 0x5e, 0xa4, 0xa9,
+	0xf4, 0x6f, 0x07, 0xba, 0x36, 0xcf, 0xbb, 0x35, 0xf7, 0x29, 0xfd, 0xb0, 0x56, 0xbe, 0x19, 0x46,
+	0x0b, 0x0d, 0x0d, 0xf6, 0x94, 0x60, 0x38, 0xac, 0xd4, 0x9f, 0xa3, 0x90, 0xd2, 0x42, 0xa7, 0x93,
+	0x90, 0x26, 0x38, 0x35, 0xc2, 0xb7, 0xe5, 0x9a, 0x5f, 0x42, 0x68, 0xa1, 0x09, 0x99, 0x14, 0x42,
+	0x12, 0x4c, 0x88, 0x91, 0x5e, 0xff, 0x0f, 0xed, 0xf0, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa,
+	0x67, 0x63, 0xa3, 0xbd, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/errors.pb.go b/googleapis/ads/googleads/v3/errors/errors.pb.go
new file mode 100644
index 0000000..d947579
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/errors.pb.go
@@ -0,0 +1,2373 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/errors.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Describes how a GoogleAds API call failed. It's returned inside
+// google.rpc.Status.details when a call fails.
+type GoogleAdsFailure struct {
+	// The list of errors that occurred.
+	Errors               []*GoogleAdsError `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *GoogleAdsFailure) Reset()         { *m = GoogleAdsFailure{} }
+func (m *GoogleAdsFailure) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFailure) ProtoMessage()    {}
+func (*GoogleAdsFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{0}
+}
+
+func (m *GoogleAdsFailure) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFailure.Unmarshal(m, b)
+}
+func (m *GoogleAdsFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFailure.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFailure.Merge(m, src)
+}
+func (m *GoogleAdsFailure) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFailure.Size(m)
+}
+func (m *GoogleAdsFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFailure proto.InternalMessageInfo
+
+func (m *GoogleAdsFailure) GetErrors() []*GoogleAdsError {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+// GoogleAds-specific error.
+type GoogleAdsError struct {
+	// An enum value that indicates which error occurred.
+	ErrorCode *ErrorCode `protobuf:"bytes,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
+	// A human-readable description of the error.
+	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	// The value that triggered the error.
+	Trigger *common.Value `protobuf:"bytes,3,opt,name=trigger,proto3" json:"trigger,omitempty"`
+	// Describes the part of the request proto that caused the error.
+	Location *ErrorLocation `protobuf:"bytes,4,opt,name=location,proto3" json:"location,omitempty"`
+	// Additional error details, which are returned by certain error codes. Most
+	// error codes do not include details.
+	Details              *ErrorDetails `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *GoogleAdsError) Reset()         { *m = GoogleAdsError{} }
+func (m *GoogleAdsError) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsError) ProtoMessage()    {}
+func (*GoogleAdsError) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{1}
+}
+
+func (m *GoogleAdsError) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsError.Unmarshal(m, b)
+}
+func (m *GoogleAdsError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsError.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsError) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsError.Merge(m, src)
+}
+func (m *GoogleAdsError) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsError.Size(m)
+}
+func (m *GoogleAdsError) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsError proto.InternalMessageInfo
+
+func (m *GoogleAdsError) GetErrorCode() *ErrorCode {
+	if m != nil {
+		return m.ErrorCode
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetMessage() string {
+	if m != nil {
+		return m.Message
+	}
+	return ""
+}
+
+func (m *GoogleAdsError) GetTrigger() *common.Value {
+	if m != nil {
+		return m.Trigger
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetLocation() *ErrorLocation {
+	if m != nil {
+		return m.Location
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetDetails() *ErrorDetails {
+	if m != nil {
+		return m.Details
+	}
+	return nil
+}
+
+// The error reason represented by type and enum.
+type ErrorCode struct {
+	// The list of error enums
+	//
+	// Types that are valid to be assigned to ErrorCode:
+	//	*ErrorCode_RequestError
+	//	*ErrorCode_BiddingStrategyError
+	//	*ErrorCode_UrlFieldError
+	//	*ErrorCode_ListOperationError
+	//	*ErrorCode_QueryError
+	//	*ErrorCode_MutateError
+	//	*ErrorCode_FieldMaskError
+	//	*ErrorCode_AuthorizationError
+	//	*ErrorCode_InternalError
+	//	*ErrorCode_QuotaError
+	//	*ErrorCode_AdError
+	//	*ErrorCode_AdGroupError
+	//	*ErrorCode_CampaignBudgetError
+	//	*ErrorCode_CampaignError
+	//	*ErrorCode_AuthenticationError
+	//	*ErrorCode_AdGroupCriterionError
+	//	*ErrorCode_AdCustomizerError
+	//	*ErrorCode_AdGroupAdError
+	//	*ErrorCode_AdSharingError
+	//	*ErrorCode_AdxError
+	//	*ErrorCode_AssetError
+	//	*ErrorCode_BiddingError
+	//	*ErrorCode_CampaignCriterionError
+	//	*ErrorCode_CollectionSizeError
+	//	*ErrorCode_CountryCodeError
+	//	*ErrorCode_CriterionError
+	//	*ErrorCode_CustomerError
+	//	*ErrorCode_DateError
+	//	*ErrorCode_DateRangeError
+	//	*ErrorCode_DistinctError
+	//	*ErrorCode_FeedAttributeReferenceError
+	//	*ErrorCode_FunctionError
+	//	*ErrorCode_FunctionParsingError
+	//	*ErrorCode_IdError
+	//	*ErrorCode_ImageError
+	//	*ErrorCode_LanguageCodeError
+	//	*ErrorCode_MediaBundleError
+	//	*ErrorCode_MediaUploadError
+	//	*ErrorCode_MediaFileError
+	//	*ErrorCode_MultiplierError
+	//	*ErrorCode_NewResourceCreationError
+	//	*ErrorCode_NotEmptyError
+	//	*ErrorCode_NullError
+	//	*ErrorCode_OperatorError
+	//	*ErrorCode_RangeError
+	//	*ErrorCode_RecommendationError
+	//	*ErrorCode_RegionCodeError
+	//	*ErrorCode_SettingError
+	//	*ErrorCode_StringFormatError
+	//	*ErrorCode_StringLengthError
+	//	*ErrorCode_OperationAccessDeniedError
+	//	*ErrorCode_ResourceAccessDeniedError
+	//	*ErrorCode_ResourceCountLimitExceededError
+	//	*ErrorCode_YoutubeVideoRegistrationError
+	//	*ErrorCode_AdGroupBidModifierError
+	//	*ErrorCode_ContextError
+	//	*ErrorCode_FieldError
+	//	*ErrorCode_SharedSetError
+	//	*ErrorCode_SharedCriterionError
+	//	*ErrorCode_CampaignSharedSetError
+	//	*ErrorCode_ConversionActionError
+	//	*ErrorCode_ConversionAdjustmentUploadError
+	//	*ErrorCode_ConversionUploadError
+	//	*ErrorCode_HeaderError
+	//	*ErrorCode_DatabaseError
+	//	*ErrorCode_PolicyFindingError
+	//	*ErrorCode_EnumError
+	//	*ErrorCode_KeywordPlanError
+	//	*ErrorCode_KeywordPlanCampaignError
+	//	*ErrorCode_KeywordPlanNegativeKeywordError
+	//	*ErrorCode_KeywordPlanAdGroupError
+	//	*ErrorCode_KeywordPlanKeywordError
+	//	*ErrorCode_KeywordPlanIdeaError
+	//	*ErrorCode_AccountBudgetProposalError
+	//	*ErrorCode_UserListError
+	//	*ErrorCode_ChangeStatusError
+	//	*ErrorCode_FeedError
+	//	*ErrorCode_GeoTargetConstantSuggestionError
+	//	*ErrorCode_CampaignDraftError
+	//	*ErrorCode_FeedItemError
+	//	*ErrorCode_LabelError
+	//	*ErrorCode_BillingSetupError
+	//	*ErrorCode_CustomerClientLinkError
+	//	*ErrorCode_CustomerManagerLinkError
+	//	*ErrorCode_FeedMappingError
+	//	*ErrorCode_CustomerFeedError
+	//	*ErrorCode_AdGroupFeedError
+	//	*ErrorCode_CampaignFeedError
+	//	*ErrorCode_CustomInterestError
+	//	*ErrorCode_CampaignExperimentError
+	//	*ErrorCode_ExtensionFeedItemError
+	//	*ErrorCode_AdParameterError
+	//	*ErrorCode_FeedItemValidationError
+	//	*ErrorCode_ExtensionSettingError
+	//	*ErrorCode_FeedItemTargetError
+	//	*ErrorCode_PolicyViolationError
+	//	*ErrorCode_MutateJobError
+	//	*ErrorCode_PartialFailureError
+	//	*ErrorCode_PolicyValidationParameterError
+	//	*ErrorCode_SizeLimitError
+	//	*ErrorCode_NotWhitelistedError
+	//	*ErrorCode_ManagerLinkError
+	//	*ErrorCode_CurrencyCodeError
+	//	*ErrorCode_AccessInvitationError
+	//	*ErrorCode_ReachPlanError
+	//	*ErrorCode_InvoiceError
+	//	*ErrorCode_PaymentsAccountError
+	//	*ErrorCode_TimeZoneError
+	ErrorCode            isErrorCode_ErrorCode `protobuf_oneof:"error_code"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ErrorCode) Reset()         { *m = ErrorCode{} }
+func (m *ErrorCode) String() string { return proto.CompactTextString(m) }
+func (*ErrorCode) ProtoMessage()    {}
+func (*ErrorCode) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{2}
+}
+
+func (m *ErrorCode) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorCode.Unmarshal(m, b)
+}
+func (m *ErrorCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorCode.Marshal(b, m, deterministic)
+}
+func (m *ErrorCode) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorCode.Merge(m, src)
+}
+func (m *ErrorCode) XXX_Size() int {
+	return xxx_messageInfo_ErrorCode.Size(m)
+}
+func (m *ErrorCode) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorCode.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorCode proto.InternalMessageInfo
+
+type isErrorCode_ErrorCode interface {
+	isErrorCode_ErrorCode()
+}
+
+type ErrorCode_RequestError struct {
+	RequestError RequestErrorEnum_RequestError `protobuf:"varint,1,opt,name=request_error,json=requestError,proto3,enum=google.ads.googleads.v3.errors.RequestErrorEnum_RequestError,oneof"`
+}
+
+type ErrorCode_BiddingStrategyError struct {
+	BiddingStrategyError BiddingStrategyErrorEnum_BiddingStrategyError `protobuf:"varint,2,opt,name=bidding_strategy_error,json=biddingStrategyError,proto3,enum=google.ads.googleads.v3.errors.BiddingStrategyErrorEnum_BiddingStrategyError,oneof"`
+}
+
+type ErrorCode_UrlFieldError struct {
+	UrlFieldError UrlFieldErrorEnum_UrlFieldError `protobuf:"varint,3,opt,name=url_field_error,json=urlFieldError,proto3,enum=google.ads.googleads.v3.errors.UrlFieldErrorEnum_UrlFieldError,oneof"`
+}
+
+type ErrorCode_ListOperationError struct {
+	ListOperationError ListOperationErrorEnum_ListOperationError `protobuf:"varint,4,opt,name=list_operation_error,json=listOperationError,proto3,enum=google.ads.googleads.v3.errors.ListOperationErrorEnum_ListOperationError,oneof"`
+}
+
+type ErrorCode_QueryError struct {
+	QueryError QueryErrorEnum_QueryError `protobuf:"varint,5,opt,name=query_error,json=queryError,proto3,enum=google.ads.googleads.v3.errors.QueryErrorEnum_QueryError,oneof"`
+}
+
+type ErrorCode_MutateError struct {
+	MutateError MutateErrorEnum_MutateError `protobuf:"varint,7,opt,name=mutate_error,json=mutateError,proto3,enum=google.ads.googleads.v3.errors.MutateErrorEnum_MutateError,oneof"`
+}
+
+type ErrorCode_FieldMaskError struct {
+	FieldMaskError FieldMaskErrorEnum_FieldMaskError `protobuf:"varint,8,opt,name=field_mask_error,json=fieldMaskError,proto3,enum=google.ads.googleads.v3.errors.FieldMaskErrorEnum_FieldMaskError,oneof"`
+}
+
+type ErrorCode_AuthorizationError struct {
+	AuthorizationError AuthorizationErrorEnum_AuthorizationError `protobuf:"varint,9,opt,name=authorization_error,json=authorizationError,proto3,enum=google.ads.googleads.v3.errors.AuthorizationErrorEnum_AuthorizationError,oneof"`
+}
+
+type ErrorCode_InternalError struct {
+	InternalError InternalErrorEnum_InternalError `protobuf:"varint,10,opt,name=internal_error,json=internalError,proto3,enum=google.ads.googleads.v3.errors.InternalErrorEnum_InternalError,oneof"`
+}
+
+type ErrorCode_QuotaError struct {
+	QuotaError QuotaErrorEnum_QuotaError `protobuf:"varint,11,opt,name=quota_error,json=quotaError,proto3,enum=google.ads.googleads.v3.errors.QuotaErrorEnum_QuotaError,oneof"`
+}
+
+type ErrorCode_AdError struct {
+	AdError AdErrorEnum_AdError `protobuf:"varint,12,opt,name=ad_error,json=adError,proto3,enum=google.ads.googleads.v3.errors.AdErrorEnum_AdError,oneof"`
+}
+
+type ErrorCode_AdGroupError struct {
+	AdGroupError AdGroupErrorEnum_AdGroupError `protobuf:"varint,13,opt,name=ad_group_error,json=adGroupError,proto3,enum=google.ads.googleads.v3.errors.AdGroupErrorEnum_AdGroupError,oneof"`
+}
+
+type ErrorCode_CampaignBudgetError struct {
+	CampaignBudgetError CampaignBudgetErrorEnum_CampaignBudgetError `protobuf:"varint,14,opt,name=campaign_budget_error,json=campaignBudgetError,proto3,enum=google.ads.googleads.v3.errors.CampaignBudgetErrorEnum_CampaignBudgetError,oneof"`
+}
+
+type ErrorCode_CampaignError struct {
+	CampaignError CampaignErrorEnum_CampaignError `protobuf:"varint,15,opt,name=campaign_error,json=campaignError,proto3,enum=google.ads.googleads.v3.errors.CampaignErrorEnum_CampaignError,oneof"`
+}
+
+type ErrorCode_AuthenticationError struct {
+	AuthenticationError AuthenticationErrorEnum_AuthenticationError `protobuf:"varint,17,opt,name=authentication_error,json=authenticationError,proto3,enum=google.ads.googleads.v3.errors.AuthenticationErrorEnum_AuthenticationError,oneof"`
+}
+
+type ErrorCode_AdGroupCriterionError struct {
+	AdGroupCriterionError AdGroupCriterionErrorEnum_AdGroupCriterionError `protobuf:"varint,18,opt,name=ad_group_criterion_error,json=adGroupCriterionError,proto3,enum=google.ads.googleads.v3.errors.AdGroupCriterionErrorEnum_AdGroupCriterionError,oneof"`
+}
+
+type ErrorCode_AdCustomizerError struct {
+	AdCustomizerError AdCustomizerErrorEnum_AdCustomizerError `protobuf:"varint,19,opt,name=ad_customizer_error,json=adCustomizerError,proto3,enum=google.ads.googleads.v3.errors.AdCustomizerErrorEnum_AdCustomizerError,oneof"`
+}
+
+type ErrorCode_AdGroupAdError struct {
+	AdGroupAdError AdGroupAdErrorEnum_AdGroupAdError `protobuf:"varint,21,opt,name=ad_group_ad_error,json=adGroupAdError,proto3,enum=google.ads.googleads.v3.errors.AdGroupAdErrorEnum_AdGroupAdError,oneof"`
+}
+
+type ErrorCode_AdSharingError struct {
+	AdSharingError AdSharingErrorEnum_AdSharingError `protobuf:"varint,24,opt,name=ad_sharing_error,json=adSharingError,proto3,enum=google.ads.googleads.v3.errors.AdSharingErrorEnum_AdSharingError,oneof"`
+}
+
+type ErrorCode_AdxError struct {
+	AdxError AdxErrorEnum_AdxError `protobuf:"varint,25,opt,name=adx_error,json=adxError,proto3,enum=google.ads.googleads.v3.errors.AdxErrorEnum_AdxError,oneof"`
+}
+
+type ErrorCode_AssetError struct {
+	AssetError AssetErrorEnum_AssetError `protobuf:"varint,107,opt,name=asset_error,json=assetError,proto3,enum=google.ads.googleads.v3.errors.AssetErrorEnum_AssetError,oneof"`
+}
+
+type ErrorCode_BiddingError struct {
+	BiddingError BiddingErrorEnum_BiddingError `protobuf:"varint,26,opt,name=bidding_error,json=biddingError,proto3,enum=google.ads.googleads.v3.errors.BiddingErrorEnum_BiddingError,oneof"`
+}
+
+type ErrorCode_CampaignCriterionError struct {
+	CampaignCriterionError CampaignCriterionErrorEnum_CampaignCriterionError `protobuf:"varint,29,opt,name=campaign_criterion_error,json=campaignCriterionError,proto3,enum=google.ads.googleads.v3.errors.CampaignCriterionErrorEnum_CampaignCriterionError,oneof"`
+}
+
+type ErrorCode_CollectionSizeError struct {
+	CollectionSizeError CollectionSizeErrorEnum_CollectionSizeError `protobuf:"varint,31,opt,name=collection_size_error,json=collectionSizeError,proto3,enum=google.ads.googleads.v3.errors.CollectionSizeErrorEnum_CollectionSizeError,oneof"`
+}
+
+type ErrorCode_CountryCodeError struct {
+	CountryCodeError CountryCodeErrorEnum_CountryCodeError `protobuf:"varint,109,opt,name=country_code_error,json=countryCodeError,proto3,enum=google.ads.googleads.v3.errors.CountryCodeErrorEnum_CountryCodeError,oneof"`
+}
+
+type ErrorCode_CriterionError struct {
+	CriterionError CriterionErrorEnum_CriterionError `protobuf:"varint,32,opt,name=criterion_error,json=criterionError,proto3,enum=google.ads.googleads.v3.errors.CriterionErrorEnum_CriterionError,oneof"`
+}
+
+type ErrorCode_CustomerError struct {
+	CustomerError CustomerErrorEnum_CustomerError `protobuf:"varint,90,opt,name=customer_error,json=customerError,proto3,enum=google.ads.googleads.v3.errors.CustomerErrorEnum_CustomerError,oneof"`
+}
+
+type ErrorCode_DateError struct {
+	DateError DateErrorEnum_DateError `protobuf:"varint,33,opt,name=date_error,json=dateError,proto3,enum=google.ads.googleads.v3.errors.DateErrorEnum_DateError,oneof"`
+}
+
+type ErrorCode_DateRangeError struct {
+	DateRangeError DateRangeErrorEnum_DateRangeError `protobuf:"varint,34,opt,name=date_range_error,json=dateRangeError,proto3,enum=google.ads.googleads.v3.errors.DateRangeErrorEnum_DateRangeError,oneof"`
+}
+
+type ErrorCode_DistinctError struct {
+	DistinctError DistinctErrorEnum_DistinctError `protobuf:"varint,35,opt,name=distinct_error,json=distinctError,proto3,enum=google.ads.googleads.v3.errors.DistinctErrorEnum_DistinctError,oneof"`
+}
+
+type ErrorCode_FeedAttributeReferenceError struct {
+	FeedAttributeReferenceError FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError `protobuf:"varint,36,opt,name=feed_attribute_reference_error,json=feedAttributeReferenceError,proto3,enum=google.ads.googleads.v3.errors.FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError,oneof"`
+}
+
+type ErrorCode_FunctionError struct {
+	FunctionError FunctionErrorEnum_FunctionError `protobuf:"varint,37,opt,name=function_error,json=functionError,proto3,enum=google.ads.googleads.v3.errors.FunctionErrorEnum_FunctionError,oneof"`
+}
+
+type ErrorCode_FunctionParsingError struct {
+	FunctionParsingError FunctionParsingErrorEnum_FunctionParsingError `protobuf:"varint,38,opt,name=function_parsing_error,json=functionParsingError,proto3,enum=google.ads.googleads.v3.errors.FunctionParsingErrorEnum_FunctionParsingError,oneof"`
+}
+
+type ErrorCode_IdError struct {
+	IdError IdErrorEnum_IdError `protobuf:"varint,39,opt,name=id_error,json=idError,proto3,enum=google.ads.googleads.v3.errors.IdErrorEnum_IdError,oneof"`
+}
+
+type ErrorCode_ImageError struct {
+	ImageError ImageErrorEnum_ImageError `protobuf:"varint,40,opt,name=image_error,json=imageError,proto3,enum=google.ads.googleads.v3.errors.ImageErrorEnum_ImageError,oneof"`
+}
+
+type ErrorCode_LanguageCodeError struct {
+	LanguageCodeError LanguageCodeErrorEnum_LanguageCodeError `protobuf:"varint,110,opt,name=language_code_error,json=languageCodeError,proto3,enum=google.ads.googleads.v3.errors.LanguageCodeErrorEnum_LanguageCodeError,oneof"`
+}
+
+type ErrorCode_MediaBundleError struct {
+	MediaBundleError MediaBundleErrorEnum_MediaBundleError `protobuf:"varint,42,opt,name=media_bundle_error,json=mediaBundleError,proto3,enum=google.ads.googleads.v3.errors.MediaBundleErrorEnum_MediaBundleError,oneof"`
+}
+
+type ErrorCode_MediaUploadError struct {
+	MediaUploadError MediaUploadErrorEnum_MediaUploadError `protobuf:"varint,116,opt,name=media_upload_error,json=mediaUploadError,proto3,enum=google.ads.googleads.v3.errors.MediaUploadErrorEnum_MediaUploadError,oneof"`
+}
+
+type ErrorCode_MediaFileError struct {
+	MediaFileError MediaFileErrorEnum_MediaFileError `protobuf:"varint,86,opt,name=media_file_error,json=mediaFileError,proto3,enum=google.ads.googleads.v3.errors.MediaFileErrorEnum_MediaFileError,oneof"`
+}
+
+type ErrorCode_MultiplierError struct {
+	MultiplierError MultiplierErrorEnum_MultiplierError `protobuf:"varint,44,opt,name=multiplier_error,json=multiplierError,proto3,enum=google.ads.googleads.v3.errors.MultiplierErrorEnum_MultiplierError,oneof"`
+}
+
+type ErrorCode_NewResourceCreationError struct {
+	NewResourceCreationError NewResourceCreationErrorEnum_NewResourceCreationError `protobuf:"varint,45,opt,name=new_resource_creation_error,json=newResourceCreationError,proto3,enum=google.ads.googleads.v3.errors.NewResourceCreationErrorEnum_NewResourceCreationError,oneof"`
+}
+
+type ErrorCode_NotEmptyError struct {
+	NotEmptyError NotEmptyErrorEnum_NotEmptyError `protobuf:"varint,46,opt,name=not_empty_error,json=notEmptyError,proto3,enum=google.ads.googleads.v3.errors.NotEmptyErrorEnum_NotEmptyError,oneof"`
+}
+
+type ErrorCode_NullError struct {
+	NullError NullErrorEnum_NullError `protobuf:"varint,47,opt,name=null_error,json=nullError,proto3,enum=google.ads.googleads.v3.errors.NullErrorEnum_NullError,oneof"`
+}
+
+type ErrorCode_OperatorError struct {
+	OperatorError OperatorErrorEnum_OperatorError `protobuf:"varint,48,opt,name=operator_error,json=operatorError,proto3,enum=google.ads.googleads.v3.errors.OperatorErrorEnum_OperatorError,oneof"`
+}
+
+type ErrorCode_RangeError struct {
+	RangeError RangeErrorEnum_RangeError `protobuf:"varint,49,opt,name=range_error,json=rangeError,proto3,enum=google.ads.googleads.v3.errors.RangeErrorEnum_RangeError,oneof"`
+}
+
+type ErrorCode_RecommendationError struct {
+	RecommendationError RecommendationErrorEnum_RecommendationError `protobuf:"varint,58,opt,name=recommendation_error,json=recommendationError,proto3,enum=google.ads.googleads.v3.errors.RecommendationErrorEnum_RecommendationError,oneof"`
+}
+
+type ErrorCode_RegionCodeError struct {
+	RegionCodeError RegionCodeErrorEnum_RegionCodeError `protobuf:"varint,51,opt,name=region_code_error,json=regionCodeError,proto3,enum=google.ads.googleads.v3.errors.RegionCodeErrorEnum_RegionCodeError,oneof"`
+}
+
+type ErrorCode_SettingError struct {
+	SettingError SettingErrorEnum_SettingError `protobuf:"varint,52,opt,name=setting_error,json=settingError,proto3,enum=google.ads.googleads.v3.errors.SettingErrorEnum_SettingError,oneof"`
+}
+
+type ErrorCode_StringFormatError struct {
+	StringFormatError StringFormatErrorEnum_StringFormatError `protobuf:"varint,53,opt,name=string_format_error,json=stringFormatError,proto3,enum=google.ads.googleads.v3.errors.StringFormatErrorEnum_StringFormatError,oneof"`
+}
+
+type ErrorCode_StringLengthError struct {
+	StringLengthError StringLengthErrorEnum_StringLengthError `protobuf:"varint,54,opt,name=string_length_error,json=stringLengthError,proto3,enum=google.ads.googleads.v3.errors.StringLengthErrorEnum_StringLengthError,oneof"`
+}
+
+type ErrorCode_OperationAccessDeniedError struct {
+	OperationAccessDeniedError OperationAccessDeniedErrorEnum_OperationAccessDeniedError `protobuf:"varint,55,opt,name=operation_access_denied_error,json=operationAccessDeniedError,proto3,enum=google.ads.googleads.v3.errors.OperationAccessDeniedErrorEnum_OperationAccessDeniedError,oneof"`
+}
+
+type ErrorCode_ResourceAccessDeniedError struct {
+	ResourceAccessDeniedError ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError `protobuf:"varint,56,opt,name=resource_access_denied_error,json=resourceAccessDeniedError,proto3,enum=google.ads.googleads.v3.errors.ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError,oneof"`
+}
+
+type ErrorCode_ResourceCountLimitExceededError struct {
+	ResourceCountLimitExceededError ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError `protobuf:"varint,57,opt,name=resource_count_limit_exceeded_error,json=resourceCountLimitExceededError,proto3,enum=google.ads.googleads.v3.errors.ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError,oneof"`
+}
+
+type ErrorCode_YoutubeVideoRegistrationError struct {
+	YoutubeVideoRegistrationError YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError `protobuf:"varint,117,opt,name=youtube_video_registration_error,json=youtubeVideoRegistrationError,proto3,enum=google.ads.googleads.v3.errors.YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError,oneof"`
+}
+
+type ErrorCode_AdGroupBidModifierError struct {
+	AdGroupBidModifierError AdGroupBidModifierErrorEnum_AdGroupBidModifierError `protobuf:"varint,59,opt,name=ad_group_bid_modifier_error,json=adGroupBidModifierError,proto3,enum=google.ads.googleads.v3.errors.AdGroupBidModifierErrorEnum_AdGroupBidModifierError,oneof"`
+}
+
+type ErrorCode_ContextError struct {
+	ContextError ContextErrorEnum_ContextError `protobuf:"varint,60,opt,name=context_error,json=contextError,proto3,enum=google.ads.googleads.v3.errors.ContextErrorEnum_ContextError,oneof"`
+}
+
+type ErrorCode_FieldError struct {
+	FieldError FieldErrorEnum_FieldError `protobuf:"varint,61,opt,name=field_error,json=fieldError,proto3,enum=google.ads.googleads.v3.errors.FieldErrorEnum_FieldError,oneof"`
+}
+
+type ErrorCode_SharedSetError struct {
+	SharedSetError SharedSetErrorEnum_SharedSetError `protobuf:"varint,62,opt,name=shared_set_error,json=sharedSetError,proto3,enum=google.ads.googleads.v3.errors.SharedSetErrorEnum_SharedSetError,oneof"`
+}
+
+type ErrorCode_SharedCriterionError struct {
+	SharedCriterionError SharedCriterionErrorEnum_SharedCriterionError `protobuf:"varint,63,opt,name=shared_criterion_error,json=sharedCriterionError,proto3,enum=google.ads.googleads.v3.errors.SharedCriterionErrorEnum_SharedCriterionError,oneof"`
+}
+
+type ErrorCode_CampaignSharedSetError struct {
+	CampaignSharedSetError CampaignSharedSetErrorEnum_CampaignSharedSetError `protobuf:"varint,64,opt,name=campaign_shared_set_error,json=campaignSharedSetError,proto3,enum=google.ads.googleads.v3.errors.CampaignSharedSetErrorEnum_CampaignSharedSetError,oneof"`
+}
+
+type ErrorCode_ConversionActionError struct {
+	ConversionActionError ConversionActionErrorEnum_ConversionActionError `protobuf:"varint,65,opt,name=conversion_action_error,json=conversionActionError,proto3,enum=google.ads.googleads.v3.errors.ConversionActionErrorEnum_ConversionActionError,oneof"`
+}
+
+type ErrorCode_ConversionAdjustmentUploadError struct {
+	ConversionAdjustmentUploadError ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError `protobuf:"varint,115,opt,name=conversion_adjustment_upload_error,json=conversionAdjustmentUploadError,proto3,enum=google.ads.googleads.v3.errors.ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError,oneof"`
+}
+
+type ErrorCode_ConversionUploadError struct {
+	ConversionUploadError ConversionUploadErrorEnum_ConversionUploadError `protobuf:"varint,111,opt,name=conversion_upload_error,json=conversionUploadError,proto3,enum=google.ads.googleads.v3.errors.ConversionUploadErrorEnum_ConversionUploadError,oneof"`
+}
+
+type ErrorCode_HeaderError struct {
+	HeaderError HeaderErrorEnum_HeaderError `protobuf:"varint,66,opt,name=header_error,json=headerError,proto3,enum=google.ads.googleads.v3.errors.HeaderErrorEnum_HeaderError,oneof"`
+}
+
+type ErrorCode_DatabaseError struct {
+	DatabaseError DatabaseErrorEnum_DatabaseError `protobuf:"varint,67,opt,name=database_error,json=databaseError,proto3,enum=google.ads.googleads.v3.errors.DatabaseErrorEnum_DatabaseError,oneof"`
+}
+
+type ErrorCode_PolicyFindingError struct {
+	PolicyFindingError PolicyFindingErrorEnum_PolicyFindingError `protobuf:"varint,68,opt,name=policy_finding_error,json=policyFindingError,proto3,enum=google.ads.googleads.v3.errors.PolicyFindingErrorEnum_PolicyFindingError,oneof"`
+}
+
+type ErrorCode_EnumError struct {
+	EnumError EnumErrorEnum_EnumError `protobuf:"varint,70,opt,name=enum_error,json=enumError,proto3,enum=google.ads.googleads.v3.errors.EnumErrorEnum_EnumError,oneof"`
+}
+
+type ErrorCode_KeywordPlanError struct {
+	KeywordPlanError KeywordPlanErrorEnum_KeywordPlanError `protobuf:"varint,71,opt,name=keyword_plan_error,json=keywordPlanError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanErrorEnum_KeywordPlanError,oneof"`
+}
+
+type ErrorCode_KeywordPlanCampaignError struct {
+	KeywordPlanCampaignError KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError `protobuf:"varint,72,opt,name=keyword_plan_campaign_error,json=keywordPlanCampaignError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError,oneof"`
+}
+
+type ErrorCode_KeywordPlanNegativeKeywordError struct {
+	KeywordPlanNegativeKeywordError KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError `protobuf:"varint,73,opt,name=keyword_plan_negative_keyword_error,json=keywordPlanNegativeKeywordError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError,oneof"`
+}
+
+type ErrorCode_KeywordPlanAdGroupError struct {
+	KeywordPlanAdGroupError KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError `protobuf:"varint,74,opt,name=keyword_plan_ad_group_error,json=keywordPlanAdGroupError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError,oneof"`
+}
+
+type ErrorCode_KeywordPlanKeywordError struct {
+	KeywordPlanKeywordError KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError `protobuf:"varint,75,opt,name=keyword_plan_keyword_error,json=keywordPlanKeywordError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError,oneof"`
+}
+
+type ErrorCode_KeywordPlanIdeaError struct {
+	KeywordPlanIdeaError KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError `protobuf:"varint,76,opt,name=keyword_plan_idea_error,json=keywordPlanIdeaError,proto3,enum=google.ads.googleads.v3.errors.KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError,oneof"`
+}
+
+type ErrorCode_AccountBudgetProposalError struct {
+	AccountBudgetProposalError AccountBudgetProposalErrorEnum_AccountBudgetProposalError `protobuf:"varint,77,opt,name=account_budget_proposal_error,json=accountBudgetProposalError,proto3,enum=google.ads.googleads.v3.errors.AccountBudgetProposalErrorEnum_AccountBudgetProposalError,oneof"`
+}
+
+type ErrorCode_UserListError struct {
+	UserListError UserListErrorEnum_UserListError `protobuf:"varint,78,opt,name=user_list_error,json=userListError,proto3,enum=google.ads.googleads.v3.errors.UserListErrorEnum_UserListError,oneof"`
+}
+
+type ErrorCode_ChangeStatusError struct {
+	ChangeStatusError ChangeStatusErrorEnum_ChangeStatusError `protobuf:"varint,79,opt,name=change_status_error,json=changeStatusError,proto3,enum=google.ads.googleads.v3.errors.ChangeStatusErrorEnum_ChangeStatusError,oneof"`
+}
+
+type ErrorCode_FeedError struct {
+	FeedError FeedErrorEnum_FeedError `protobuf:"varint,80,opt,name=feed_error,json=feedError,proto3,enum=google.ads.googleads.v3.errors.FeedErrorEnum_FeedError,oneof"`
+}
+
+type ErrorCode_GeoTargetConstantSuggestionError struct {
+	GeoTargetConstantSuggestionError GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError `protobuf:"varint,81,opt,name=geo_target_constant_suggestion_error,json=geoTargetConstantSuggestionError,proto3,enum=google.ads.googleads.v3.errors.GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError,oneof"`
+}
+
+type ErrorCode_CampaignDraftError struct {
+	CampaignDraftError CampaignDraftErrorEnum_CampaignDraftError `protobuf:"varint,82,opt,name=campaign_draft_error,json=campaignDraftError,proto3,enum=google.ads.googleads.v3.errors.CampaignDraftErrorEnum_CampaignDraftError,oneof"`
+}
+
+type ErrorCode_FeedItemError struct {
+	FeedItemError FeedItemErrorEnum_FeedItemError `protobuf:"varint,83,opt,name=feed_item_error,json=feedItemError,proto3,enum=google.ads.googleads.v3.errors.FeedItemErrorEnum_FeedItemError,oneof"`
+}
+
+type ErrorCode_LabelError struct {
+	LabelError LabelErrorEnum_LabelError `protobuf:"varint,84,opt,name=label_error,json=labelError,proto3,enum=google.ads.googleads.v3.errors.LabelErrorEnum_LabelError,oneof"`
+}
+
+type ErrorCode_BillingSetupError struct {
+	BillingSetupError BillingSetupErrorEnum_BillingSetupError `protobuf:"varint,87,opt,name=billing_setup_error,json=billingSetupError,proto3,enum=google.ads.googleads.v3.errors.BillingSetupErrorEnum_BillingSetupError,oneof"`
+}
+
+type ErrorCode_CustomerClientLinkError struct {
+	CustomerClientLinkError CustomerClientLinkErrorEnum_CustomerClientLinkError `protobuf:"varint,88,opt,name=customer_client_link_error,json=customerClientLinkError,proto3,enum=google.ads.googleads.v3.errors.CustomerClientLinkErrorEnum_CustomerClientLinkError,oneof"`
+}
+
+type ErrorCode_CustomerManagerLinkError struct {
+	CustomerManagerLinkError CustomerManagerLinkErrorEnum_CustomerManagerLinkError `protobuf:"varint,91,opt,name=customer_manager_link_error,json=customerManagerLinkError,proto3,enum=google.ads.googleads.v3.errors.CustomerManagerLinkErrorEnum_CustomerManagerLinkError,oneof"`
+}
+
+type ErrorCode_FeedMappingError struct {
+	FeedMappingError FeedMappingErrorEnum_FeedMappingError `protobuf:"varint,92,opt,name=feed_mapping_error,json=feedMappingError,proto3,enum=google.ads.googleads.v3.errors.FeedMappingErrorEnum_FeedMappingError,oneof"`
+}
+
+type ErrorCode_CustomerFeedError struct {
+	CustomerFeedError CustomerFeedErrorEnum_CustomerFeedError `protobuf:"varint,93,opt,name=customer_feed_error,json=customerFeedError,proto3,enum=google.ads.googleads.v3.errors.CustomerFeedErrorEnum_CustomerFeedError,oneof"`
+}
+
+type ErrorCode_AdGroupFeedError struct {
+	AdGroupFeedError AdGroupFeedErrorEnum_AdGroupFeedError `protobuf:"varint,94,opt,name=ad_group_feed_error,json=adGroupFeedError,proto3,enum=google.ads.googleads.v3.errors.AdGroupFeedErrorEnum_AdGroupFeedError,oneof"`
+}
+
+type ErrorCode_CampaignFeedError struct {
+	CampaignFeedError CampaignFeedErrorEnum_CampaignFeedError `protobuf:"varint,96,opt,name=campaign_feed_error,json=campaignFeedError,proto3,enum=google.ads.googleads.v3.errors.CampaignFeedErrorEnum_CampaignFeedError,oneof"`
+}
+
+type ErrorCode_CustomInterestError struct {
+	CustomInterestError CustomInterestErrorEnum_CustomInterestError `protobuf:"varint,97,opt,name=custom_interest_error,json=customInterestError,proto3,enum=google.ads.googleads.v3.errors.CustomInterestErrorEnum_CustomInterestError,oneof"`
+}
+
+type ErrorCode_CampaignExperimentError struct {
+	CampaignExperimentError CampaignExperimentErrorEnum_CampaignExperimentError `protobuf:"varint,98,opt,name=campaign_experiment_error,json=campaignExperimentError,proto3,enum=google.ads.googleads.v3.errors.CampaignExperimentErrorEnum_CampaignExperimentError,oneof"`
+}
+
+type ErrorCode_ExtensionFeedItemError struct {
+	ExtensionFeedItemError ExtensionFeedItemErrorEnum_ExtensionFeedItemError `protobuf:"varint,100,opt,name=extension_feed_item_error,json=extensionFeedItemError,proto3,enum=google.ads.googleads.v3.errors.ExtensionFeedItemErrorEnum_ExtensionFeedItemError,oneof"`
+}
+
+type ErrorCode_AdParameterError struct {
+	AdParameterError AdParameterErrorEnum_AdParameterError `protobuf:"varint,101,opt,name=ad_parameter_error,json=adParameterError,proto3,enum=google.ads.googleads.v3.errors.AdParameterErrorEnum_AdParameterError,oneof"`
+}
+
+type ErrorCode_FeedItemValidationError struct {
+	FeedItemValidationError FeedItemValidationErrorEnum_FeedItemValidationError `protobuf:"varint,102,opt,name=feed_item_validation_error,json=feedItemValidationError,proto3,enum=google.ads.googleads.v3.errors.FeedItemValidationErrorEnum_FeedItemValidationError,oneof"`
+}
+
+type ErrorCode_ExtensionSettingError struct {
+	ExtensionSettingError ExtensionSettingErrorEnum_ExtensionSettingError `protobuf:"varint,103,opt,name=extension_setting_error,json=extensionSettingError,proto3,enum=google.ads.googleads.v3.errors.ExtensionSettingErrorEnum_ExtensionSettingError,oneof"`
+}
+
+type ErrorCode_FeedItemTargetError struct {
+	FeedItemTargetError FeedItemTargetErrorEnum_FeedItemTargetError `protobuf:"varint,104,opt,name=feed_item_target_error,json=feedItemTargetError,proto3,enum=google.ads.googleads.v3.errors.FeedItemTargetErrorEnum_FeedItemTargetError,oneof"`
+}
+
+type ErrorCode_PolicyViolationError struct {
+	PolicyViolationError PolicyViolationErrorEnum_PolicyViolationError `protobuf:"varint,105,opt,name=policy_violation_error,json=policyViolationError,proto3,enum=google.ads.googleads.v3.errors.PolicyViolationErrorEnum_PolicyViolationError,oneof"`
+}
+
+type ErrorCode_MutateJobError struct {
+	MutateJobError MutateJobErrorEnum_MutateJobError `protobuf:"varint,108,opt,name=mutate_job_error,json=mutateJobError,proto3,enum=google.ads.googleads.v3.errors.MutateJobErrorEnum_MutateJobError,oneof"`
+}
+
+type ErrorCode_PartialFailureError struct {
+	PartialFailureError PartialFailureErrorEnum_PartialFailureError `protobuf:"varint,112,opt,name=partial_failure_error,json=partialFailureError,proto3,enum=google.ads.googleads.v3.errors.PartialFailureErrorEnum_PartialFailureError,oneof"`
+}
+
+type ErrorCode_PolicyValidationParameterError struct {
+	PolicyValidationParameterError PolicyValidationParameterErrorEnum_PolicyValidationParameterError `protobuf:"varint,114,opt,name=policy_validation_parameter_error,json=policyValidationParameterError,proto3,enum=google.ads.googleads.v3.errors.PolicyValidationParameterErrorEnum_PolicyValidationParameterError,oneof"`
+}
+
+type ErrorCode_SizeLimitError struct {
+	SizeLimitError SizeLimitErrorEnum_SizeLimitError `protobuf:"varint,118,opt,name=size_limit_error,json=sizeLimitError,proto3,enum=google.ads.googleads.v3.errors.SizeLimitErrorEnum_SizeLimitError,oneof"`
+}
+
+type ErrorCode_NotWhitelistedError struct {
+	NotWhitelistedError NotWhitelistedErrorEnum_NotWhitelistedError `protobuf:"varint,120,opt,name=not_whitelisted_error,json=notWhitelistedError,proto3,enum=google.ads.googleads.v3.errors.NotWhitelistedErrorEnum_NotWhitelistedError,oneof"`
+}
+
+type ErrorCode_ManagerLinkError struct {
+	ManagerLinkError ManagerLinkErrorEnum_ManagerLinkError `protobuf:"varint,121,opt,name=manager_link_error,json=managerLinkError,proto3,enum=google.ads.googleads.v3.errors.ManagerLinkErrorEnum_ManagerLinkError,oneof"`
+}
+
+type ErrorCode_CurrencyCodeError struct {
+	CurrencyCodeError CurrencyCodeErrorEnum_CurrencyCodeError `protobuf:"varint,122,opt,name=currency_code_error,json=currencyCodeError,proto3,enum=google.ads.googleads.v3.errors.CurrencyCodeErrorEnum_CurrencyCodeError,oneof"`
+}
+
+type ErrorCode_AccessInvitationError struct {
+	AccessInvitationError AccessInvitationErrorEnum_AccessInvitationError `protobuf:"varint,124,opt,name=access_invitation_error,json=accessInvitationError,proto3,enum=google.ads.googleads.v3.errors.AccessInvitationErrorEnum_AccessInvitationError,oneof"`
+}
+
+type ErrorCode_ReachPlanError struct {
+	ReachPlanError ReachPlanErrorEnum_ReachPlanError `protobuf:"varint,125,opt,name=reach_plan_error,json=reachPlanError,proto3,enum=google.ads.googleads.v3.errors.ReachPlanErrorEnum_ReachPlanError,oneof"`
+}
+
+type ErrorCode_InvoiceError struct {
+	InvoiceError InvoiceErrorEnum_InvoiceError `protobuf:"varint,126,opt,name=invoice_error,json=invoiceError,proto3,enum=google.ads.googleads.v3.errors.InvoiceErrorEnum_InvoiceError,oneof"`
+}
+
+type ErrorCode_PaymentsAccountError struct {
+	PaymentsAccountError PaymentsAccountErrorEnum_PaymentsAccountError `protobuf:"varint,127,opt,name=payments_account_error,json=paymentsAccountError,proto3,enum=google.ads.googleads.v3.errors.PaymentsAccountErrorEnum_PaymentsAccountError,oneof"`
+}
+
+type ErrorCode_TimeZoneError struct {
+	TimeZoneError TimeZoneErrorEnum_TimeZoneError `protobuf:"varint,128,opt,name=time_zone_error,json=timeZoneError,proto3,enum=google.ads.googleads.v3.errors.TimeZoneErrorEnum_TimeZoneError,oneof"`
+}
+
+func (*ErrorCode_RequestError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BiddingStrategyError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_UrlFieldError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ListOperationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_QueryError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MutateError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FieldMaskError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AuthorizationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_InternalError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_QuotaError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignBudgetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AuthenticationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdCustomizerError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupAdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdSharingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdxError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AssetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BiddingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CollectionSizeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CountryCodeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DateError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DateRangeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DistinctError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedAttributeReferenceError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FunctionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FunctionParsingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_IdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ImageError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_LanguageCodeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MediaBundleError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MediaUploadError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MediaFileError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MultiplierError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NewResourceCreationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NotEmptyError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NullError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_OperatorError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RangeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RecommendationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RegionCodeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SettingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_StringFormatError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_StringLengthError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_OperationAccessDeniedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ResourceAccessDeniedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ResourceCountLimitExceededError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_YoutubeVideoRegistrationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupBidModifierError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ContextError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FieldError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SharedSetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SharedCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignSharedSetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ConversionActionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ConversionAdjustmentUploadError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ConversionUploadError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_HeaderError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DatabaseError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PolicyFindingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_EnumError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanCampaignError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanNegativeKeywordError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanAdGroupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanKeywordError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanIdeaError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AccountBudgetProposalError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_UserListError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ChangeStatusError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_GeoTargetConstantSuggestionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignDraftError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedItemError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_LabelError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BillingSetupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerClientLinkError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerManagerLinkError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedMappingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerFeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupFeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignFeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomInterestError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignExperimentError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ExtensionFeedItemError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdParameterError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedItemValidationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ExtensionSettingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedItemTargetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PolicyViolationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MutateJobError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PartialFailureError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PolicyValidationParameterError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SizeLimitError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NotWhitelistedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ManagerLinkError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CurrencyCodeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AccessInvitationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ReachPlanError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_InvoiceError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PaymentsAccountError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_TimeZoneError) isErrorCode_ErrorCode() {}
+
+func (m *ErrorCode) GetErrorCode() isErrorCode_ErrorCode {
+	if m != nil {
+		return m.ErrorCode
+	}
+	return nil
+}
+
+func (m *ErrorCode) GetRequestError() RequestErrorEnum_RequestError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RequestError); ok {
+		return x.RequestError
+	}
+	return RequestErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBiddingStrategyError() BiddingStrategyErrorEnum_BiddingStrategyError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BiddingStrategyError); ok {
+		return x.BiddingStrategyError
+	}
+	return BiddingStrategyErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetUrlFieldError() UrlFieldErrorEnum_UrlFieldError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_UrlFieldError); ok {
+		return x.UrlFieldError
+	}
+	return UrlFieldErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetListOperationError() ListOperationErrorEnum_ListOperationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ListOperationError); ok {
+		return x.ListOperationError
+	}
+	return ListOperationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetQueryError() QueryErrorEnum_QueryError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_QueryError); ok {
+		return x.QueryError
+	}
+	return QueryErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMutateError() MutateErrorEnum_MutateError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MutateError); ok {
+		return x.MutateError
+	}
+	return MutateErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFieldMaskError() FieldMaskErrorEnum_FieldMaskError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FieldMaskError); ok {
+		return x.FieldMaskError
+	}
+	return FieldMaskErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAuthorizationError() AuthorizationErrorEnum_AuthorizationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AuthorizationError); ok {
+		return x.AuthorizationError
+	}
+	return AuthorizationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetInternalError() InternalErrorEnum_InternalError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_InternalError); ok {
+		return x.InternalError
+	}
+	return InternalErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetQuotaError() QuotaErrorEnum_QuotaError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_QuotaError); ok {
+		return x.QuotaError
+	}
+	return QuotaErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdError() AdErrorEnum_AdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdError); ok {
+		return x.AdError
+	}
+	return AdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupError() AdGroupErrorEnum_AdGroupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupError); ok {
+		return x.AdGroupError
+	}
+	return AdGroupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignBudgetError() CampaignBudgetErrorEnum_CampaignBudgetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignBudgetError); ok {
+		return x.CampaignBudgetError
+	}
+	return CampaignBudgetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignError() CampaignErrorEnum_CampaignError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignError); ok {
+		return x.CampaignError
+	}
+	return CampaignErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAuthenticationError() AuthenticationErrorEnum_AuthenticationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AuthenticationError); ok {
+		return x.AuthenticationError
+	}
+	return AuthenticationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupCriterionError() AdGroupCriterionErrorEnum_AdGroupCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupCriterionError); ok {
+		return x.AdGroupCriterionError
+	}
+	return AdGroupCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdCustomizerError() AdCustomizerErrorEnum_AdCustomizerError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdCustomizerError); ok {
+		return x.AdCustomizerError
+	}
+	return AdCustomizerErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupAdError() AdGroupAdErrorEnum_AdGroupAdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupAdError); ok {
+		return x.AdGroupAdError
+	}
+	return AdGroupAdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdSharingError() AdSharingErrorEnum_AdSharingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdSharingError); ok {
+		return x.AdSharingError
+	}
+	return AdSharingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdxError() AdxErrorEnum_AdxError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdxError); ok {
+		return x.AdxError
+	}
+	return AdxErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAssetError() AssetErrorEnum_AssetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AssetError); ok {
+		return x.AssetError
+	}
+	return AssetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBiddingError() BiddingErrorEnum_BiddingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BiddingError); ok {
+		return x.BiddingError
+	}
+	return BiddingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignCriterionError() CampaignCriterionErrorEnum_CampaignCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignCriterionError); ok {
+		return x.CampaignCriterionError
+	}
+	return CampaignCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCollectionSizeError() CollectionSizeErrorEnum_CollectionSizeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CollectionSizeError); ok {
+		return x.CollectionSizeError
+	}
+	return CollectionSizeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCountryCodeError() CountryCodeErrorEnum_CountryCodeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CountryCodeError); ok {
+		return x.CountryCodeError
+	}
+	return CountryCodeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCriterionError() CriterionErrorEnum_CriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CriterionError); ok {
+		return x.CriterionError
+	}
+	return CriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerError() CustomerErrorEnum_CustomerError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerError); ok {
+		return x.CustomerError
+	}
+	return CustomerErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDateError() DateErrorEnum_DateError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DateError); ok {
+		return x.DateError
+	}
+	return DateErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDateRangeError() DateRangeErrorEnum_DateRangeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DateRangeError); ok {
+		return x.DateRangeError
+	}
+	return DateRangeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDistinctError() DistinctErrorEnum_DistinctError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DistinctError); ok {
+		return x.DistinctError
+	}
+	return DistinctErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedAttributeReferenceError() FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedAttributeReferenceError); ok {
+		return x.FeedAttributeReferenceError
+	}
+	return FeedAttributeReferenceErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFunctionError() FunctionErrorEnum_FunctionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FunctionError); ok {
+		return x.FunctionError
+	}
+	return FunctionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFunctionParsingError() FunctionParsingErrorEnum_FunctionParsingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FunctionParsingError); ok {
+		return x.FunctionParsingError
+	}
+	return FunctionParsingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetIdError() IdErrorEnum_IdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_IdError); ok {
+		return x.IdError
+	}
+	return IdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetImageError() ImageErrorEnum_ImageError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ImageError); ok {
+		return x.ImageError
+	}
+	return ImageErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetLanguageCodeError() LanguageCodeErrorEnum_LanguageCodeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_LanguageCodeError); ok {
+		return x.LanguageCodeError
+	}
+	return LanguageCodeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMediaBundleError() MediaBundleErrorEnum_MediaBundleError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MediaBundleError); ok {
+		return x.MediaBundleError
+	}
+	return MediaBundleErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMediaUploadError() MediaUploadErrorEnum_MediaUploadError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MediaUploadError); ok {
+		return x.MediaUploadError
+	}
+	return MediaUploadErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMediaFileError() MediaFileErrorEnum_MediaFileError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MediaFileError); ok {
+		return x.MediaFileError
+	}
+	return MediaFileErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMultiplierError() MultiplierErrorEnum_MultiplierError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MultiplierError); ok {
+		return x.MultiplierError
+	}
+	return MultiplierErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNewResourceCreationError() NewResourceCreationErrorEnum_NewResourceCreationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NewResourceCreationError); ok {
+		return x.NewResourceCreationError
+	}
+	return NewResourceCreationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNotEmptyError() NotEmptyErrorEnum_NotEmptyError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NotEmptyError); ok {
+		return x.NotEmptyError
+	}
+	return NotEmptyErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNullError() NullErrorEnum_NullError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NullError); ok {
+		return x.NullError
+	}
+	return NullErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetOperatorError() OperatorErrorEnum_OperatorError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_OperatorError); ok {
+		return x.OperatorError
+	}
+	return OperatorErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRangeError() RangeErrorEnum_RangeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RangeError); ok {
+		return x.RangeError
+	}
+	return RangeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRecommendationError() RecommendationErrorEnum_RecommendationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RecommendationError); ok {
+		return x.RecommendationError
+	}
+	return RecommendationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRegionCodeError() RegionCodeErrorEnum_RegionCodeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RegionCodeError); ok {
+		return x.RegionCodeError
+	}
+	return RegionCodeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSettingError() SettingErrorEnum_SettingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SettingError); ok {
+		return x.SettingError
+	}
+	return SettingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetStringFormatError() StringFormatErrorEnum_StringFormatError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_StringFormatError); ok {
+		return x.StringFormatError
+	}
+	return StringFormatErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetStringLengthError() StringLengthErrorEnum_StringLengthError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_StringLengthError); ok {
+		return x.StringLengthError
+	}
+	return StringLengthErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetOperationAccessDeniedError() OperationAccessDeniedErrorEnum_OperationAccessDeniedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_OperationAccessDeniedError); ok {
+		return x.OperationAccessDeniedError
+	}
+	return OperationAccessDeniedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetResourceAccessDeniedError() ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ResourceAccessDeniedError); ok {
+		return x.ResourceAccessDeniedError
+	}
+	return ResourceAccessDeniedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetResourceCountLimitExceededError() ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ResourceCountLimitExceededError); ok {
+		return x.ResourceCountLimitExceededError
+	}
+	return ResourceCountLimitExceededErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetYoutubeVideoRegistrationError() YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_YoutubeVideoRegistrationError); ok {
+		return x.YoutubeVideoRegistrationError
+	}
+	return YoutubeVideoRegistrationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupBidModifierError() AdGroupBidModifierErrorEnum_AdGroupBidModifierError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupBidModifierError); ok {
+		return x.AdGroupBidModifierError
+	}
+	return AdGroupBidModifierErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetContextError() ContextErrorEnum_ContextError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ContextError); ok {
+		return x.ContextError
+	}
+	return ContextErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFieldError() FieldErrorEnum_FieldError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FieldError); ok {
+		return x.FieldError
+	}
+	return FieldErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSharedSetError() SharedSetErrorEnum_SharedSetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SharedSetError); ok {
+		return x.SharedSetError
+	}
+	return SharedSetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSharedCriterionError() SharedCriterionErrorEnum_SharedCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SharedCriterionError); ok {
+		return x.SharedCriterionError
+	}
+	return SharedCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignSharedSetError() CampaignSharedSetErrorEnum_CampaignSharedSetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignSharedSetError); ok {
+		return x.CampaignSharedSetError
+	}
+	return CampaignSharedSetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetConversionActionError() ConversionActionErrorEnum_ConversionActionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ConversionActionError); ok {
+		return x.ConversionActionError
+	}
+	return ConversionActionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetConversionAdjustmentUploadError() ConversionAdjustmentUploadErrorEnum_ConversionAdjustmentUploadError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ConversionAdjustmentUploadError); ok {
+		return x.ConversionAdjustmentUploadError
+	}
+	return ConversionAdjustmentUploadErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetConversionUploadError() ConversionUploadErrorEnum_ConversionUploadError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ConversionUploadError); ok {
+		return x.ConversionUploadError
+	}
+	return ConversionUploadErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetHeaderError() HeaderErrorEnum_HeaderError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_HeaderError); ok {
+		return x.HeaderError
+	}
+	return HeaderErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDatabaseError() DatabaseErrorEnum_DatabaseError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DatabaseError); ok {
+		return x.DatabaseError
+	}
+	return DatabaseErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPolicyFindingError() PolicyFindingErrorEnum_PolicyFindingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PolicyFindingError); ok {
+		return x.PolicyFindingError
+	}
+	return PolicyFindingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetEnumError() EnumErrorEnum_EnumError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_EnumError); ok {
+		return x.EnumError
+	}
+	return EnumErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanError() KeywordPlanErrorEnum_KeywordPlanError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanError); ok {
+		return x.KeywordPlanError
+	}
+	return KeywordPlanErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanCampaignError() KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanCampaignError); ok {
+		return x.KeywordPlanCampaignError
+	}
+	return KeywordPlanCampaignErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanNegativeKeywordError() KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanNegativeKeywordError); ok {
+		return x.KeywordPlanNegativeKeywordError
+	}
+	return KeywordPlanNegativeKeywordErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanAdGroupError() KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanAdGroupError); ok {
+		return x.KeywordPlanAdGroupError
+	}
+	return KeywordPlanAdGroupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanKeywordError() KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanKeywordError); ok {
+		return x.KeywordPlanKeywordError
+	}
+	return KeywordPlanKeywordErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanIdeaError() KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanIdeaError); ok {
+		return x.KeywordPlanIdeaError
+	}
+	return KeywordPlanIdeaErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAccountBudgetProposalError() AccountBudgetProposalErrorEnum_AccountBudgetProposalError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AccountBudgetProposalError); ok {
+		return x.AccountBudgetProposalError
+	}
+	return AccountBudgetProposalErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetUserListError() UserListErrorEnum_UserListError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_UserListError); ok {
+		return x.UserListError
+	}
+	return UserListErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetChangeStatusError() ChangeStatusErrorEnum_ChangeStatusError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ChangeStatusError); ok {
+		return x.ChangeStatusError
+	}
+	return ChangeStatusErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedError() FeedErrorEnum_FeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedError); ok {
+		return x.FeedError
+	}
+	return FeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetGeoTargetConstantSuggestionError() GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_GeoTargetConstantSuggestionError); ok {
+		return x.GeoTargetConstantSuggestionError
+	}
+	return GeoTargetConstantSuggestionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignDraftError() CampaignDraftErrorEnum_CampaignDraftError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignDraftError); ok {
+		return x.CampaignDraftError
+	}
+	return CampaignDraftErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedItemError() FeedItemErrorEnum_FeedItemError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedItemError); ok {
+		return x.FeedItemError
+	}
+	return FeedItemErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetLabelError() LabelErrorEnum_LabelError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_LabelError); ok {
+		return x.LabelError
+	}
+	return LabelErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBillingSetupError() BillingSetupErrorEnum_BillingSetupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BillingSetupError); ok {
+		return x.BillingSetupError
+	}
+	return BillingSetupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerClientLinkError() CustomerClientLinkErrorEnum_CustomerClientLinkError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerClientLinkError); ok {
+		return x.CustomerClientLinkError
+	}
+	return CustomerClientLinkErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerManagerLinkError() CustomerManagerLinkErrorEnum_CustomerManagerLinkError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerManagerLinkError); ok {
+		return x.CustomerManagerLinkError
+	}
+	return CustomerManagerLinkErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedMappingError() FeedMappingErrorEnum_FeedMappingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedMappingError); ok {
+		return x.FeedMappingError
+	}
+	return FeedMappingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerFeedError() CustomerFeedErrorEnum_CustomerFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerFeedError); ok {
+		return x.CustomerFeedError
+	}
+	return CustomerFeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupFeedError() AdGroupFeedErrorEnum_AdGroupFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupFeedError); ok {
+		return x.AdGroupFeedError
+	}
+	return AdGroupFeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignFeedError() CampaignFeedErrorEnum_CampaignFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignFeedError); ok {
+		return x.CampaignFeedError
+	}
+	return CampaignFeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomInterestError() CustomInterestErrorEnum_CustomInterestError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomInterestError); ok {
+		return x.CustomInterestError
+	}
+	return CustomInterestErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignExperimentError() CampaignExperimentErrorEnum_CampaignExperimentError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignExperimentError); ok {
+		return x.CampaignExperimentError
+	}
+	return CampaignExperimentErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetExtensionFeedItemError() ExtensionFeedItemErrorEnum_ExtensionFeedItemError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ExtensionFeedItemError); ok {
+		return x.ExtensionFeedItemError
+	}
+	return ExtensionFeedItemErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdParameterError() AdParameterErrorEnum_AdParameterError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdParameterError); ok {
+		return x.AdParameterError
+	}
+	return AdParameterErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedItemValidationError() FeedItemValidationErrorEnum_FeedItemValidationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedItemValidationError); ok {
+		return x.FeedItemValidationError
+	}
+	return FeedItemValidationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetExtensionSettingError() ExtensionSettingErrorEnum_ExtensionSettingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ExtensionSettingError); ok {
+		return x.ExtensionSettingError
+	}
+	return ExtensionSettingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedItemTargetError() FeedItemTargetErrorEnum_FeedItemTargetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedItemTargetError); ok {
+		return x.FeedItemTargetError
+	}
+	return FeedItemTargetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPolicyViolationError() PolicyViolationErrorEnum_PolicyViolationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PolicyViolationError); ok {
+		return x.PolicyViolationError
+	}
+	return PolicyViolationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMutateJobError() MutateJobErrorEnum_MutateJobError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MutateJobError); ok {
+		return x.MutateJobError
+	}
+	return MutateJobErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPartialFailureError() PartialFailureErrorEnum_PartialFailureError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PartialFailureError); ok {
+		return x.PartialFailureError
+	}
+	return PartialFailureErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPolicyValidationParameterError() PolicyValidationParameterErrorEnum_PolicyValidationParameterError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PolicyValidationParameterError); ok {
+		return x.PolicyValidationParameterError
+	}
+	return PolicyValidationParameterErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSizeLimitError() SizeLimitErrorEnum_SizeLimitError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SizeLimitError); ok {
+		return x.SizeLimitError
+	}
+	return SizeLimitErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNotWhitelistedError() NotWhitelistedErrorEnum_NotWhitelistedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NotWhitelistedError); ok {
+		return x.NotWhitelistedError
+	}
+	return NotWhitelistedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetManagerLinkError() ManagerLinkErrorEnum_ManagerLinkError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ManagerLinkError); ok {
+		return x.ManagerLinkError
+	}
+	return ManagerLinkErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCurrencyCodeError() CurrencyCodeErrorEnum_CurrencyCodeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CurrencyCodeError); ok {
+		return x.CurrencyCodeError
+	}
+	return CurrencyCodeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAccessInvitationError() AccessInvitationErrorEnum_AccessInvitationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AccessInvitationError); ok {
+		return x.AccessInvitationError
+	}
+	return AccessInvitationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetReachPlanError() ReachPlanErrorEnum_ReachPlanError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ReachPlanError); ok {
+		return x.ReachPlanError
+	}
+	return ReachPlanErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetInvoiceError() InvoiceErrorEnum_InvoiceError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_InvoiceError); ok {
+		return x.InvoiceError
+	}
+	return InvoiceErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPaymentsAccountError() PaymentsAccountErrorEnum_PaymentsAccountError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PaymentsAccountError); ok {
+		return x.PaymentsAccountError
+	}
+	return PaymentsAccountErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetTimeZoneError() TimeZoneErrorEnum_TimeZoneError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_TimeZoneError); ok {
+		return x.TimeZoneError
+	}
+	return TimeZoneErrorEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ErrorCode) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ErrorCode_RequestError)(nil),
+		(*ErrorCode_BiddingStrategyError)(nil),
+		(*ErrorCode_UrlFieldError)(nil),
+		(*ErrorCode_ListOperationError)(nil),
+		(*ErrorCode_QueryError)(nil),
+		(*ErrorCode_MutateError)(nil),
+		(*ErrorCode_FieldMaskError)(nil),
+		(*ErrorCode_AuthorizationError)(nil),
+		(*ErrorCode_InternalError)(nil),
+		(*ErrorCode_QuotaError)(nil),
+		(*ErrorCode_AdError)(nil),
+		(*ErrorCode_AdGroupError)(nil),
+		(*ErrorCode_CampaignBudgetError)(nil),
+		(*ErrorCode_CampaignError)(nil),
+		(*ErrorCode_AuthenticationError)(nil),
+		(*ErrorCode_AdGroupCriterionError)(nil),
+		(*ErrorCode_AdCustomizerError)(nil),
+		(*ErrorCode_AdGroupAdError)(nil),
+		(*ErrorCode_AdSharingError)(nil),
+		(*ErrorCode_AdxError)(nil),
+		(*ErrorCode_AssetError)(nil),
+		(*ErrorCode_BiddingError)(nil),
+		(*ErrorCode_CampaignCriterionError)(nil),
+		(*ErrorCode_CollectionSizeError)(nil),
+		(*ErrorCode_CountryCodeError)(nil),
+		(*ErrorCode_CriterionError)(nil),
+		(*ErrorCode_CustomerError)(nil),
+		(*ErrorCode_DateError)(nil),
+		(*ErrorCode_DateRangeError)(nil),
+		(*ErrorCode_DistinctError)(nil),
+		(*ErrorCode_FeedAttributeReferenceError)(nil),
+		(*ErrorCode_FunctionError)(nil),
+		(*ErrorCode_FunctionParsingError)(nil),
+		(*ErrorCode_IdError)(nil),
+		(*ErrorCode_ImageError)(nil),
+		(*ErrorCode_LanguageCodeError)(nil),
+		(*ErrorCode_MediaBundleError)(nil),
+		(*ErrorCode_MediaUploadError)(nil),
+		(*ErrorCode_MediaFileError)(nil),
+		(*ErrorCode_MultiplierError)(nil),
+		(*ErrorCode_NewResourceCreationError)(nil),
+		(*ErrorCode_NotEmptyError)(nil),
+		(*ErrorCode_NullError)(nil),
+		(*ErrorCode_OperatorError)(nil),
+		(*ErrorCode_RangeError)(nil),
+		(*ErrorCode_RecommendationError)(nil),
+		(*ErrorCode_RegionCodeError)(nil),
+		(*ErrorCode_SettingError)(nil),
+		(*ErrorCode_StringFormatError)(nil),
+		(*ErrorCode_StringLengthError)(nil),
+		(*ErrorCode_OperationAccessDeniedError)(nil),
+		(*ErrorCode_ResourceAccessDeniedError)(nil),
+		(*ErrorCode_ResourceCountLimitExceededError)(nil),
+		(*ErrorCode_YoutubeVideoRegistrationError)(nil),
+		(*ErrorCode_AdGroupBidModifierError)(nil),
+		(*ErrorCode_ContextError)(nil),
+		(*ErrorCode_FieldError)(nil),
+		(*ErrorCode_SharedSetError)(nil),
+		(*ErrorCode_SharedCriterionError)(nil),
+		(*ErrorCode_CampaignSharedSetError)(nil),
+		(*ErrorCode_ConversionActionError)(nil),
+		(*ErrorCode_ConversionAdjustmentUploadError)(nil),
+		(*ErrorCode_ConversionUploadError)(nil),
+		(*ErrorCode_HeaderError)(nil),
+		(*ErrorCode_DatabaseError)(nil),
+		(*ErrorCode_PolicyFindingError)(nil),
+		(*ErrorCode_EnumError)(nil),
+		(*ErrorCode_KeywordPlanError)(nil),
+		(*ErrorCode_KeywordPlanCampaignError)(nil),
+		(*ErrorCode_KeywordPlanNegativeKeywordError)(nil),
+		(*ErrorCode_KeywordPlanAdGroupError)(nil),
+		(*ErrorCode_KeywordPlanKeywordError)(nil),
+		(*ErrorCode_KeywordPlanIdeaError)(nil),
+		(*ErrorCode_AccountBudgetProposalError)(nil),
+		(*ErrorCode_UserListError)(nil),
+		(*ErrorCode_ChangeStatusError)(nil),
+		(*ErrorCode_FeedError)(nil),
+		(*ErrorCode_GeoTargetConstantSuggestionError)(nil),
+		(*ErrorCode_CampaignDraftError)(nil),
+		(*ErrorCode_FeedItemError)(nil),
+		(*ErrorCode_LabelError)(nil),
+		(*ErrorCode_BillingSetupError)(nil),
+		(*ErrorCode_CustomerClientLinkError)(nil),
+		(*ErrorCode_CustomerManagerLinkError)(nil),
+		(*ErrorCode_FeedMappingError)(nil),
+		(*ErrorCode_CustomerFeedError)(nil),
+		(*ErrorCode_AdGroupFeedError)(nil),
+		(*ErrorCode_CampaignFeedError)(nil),
+		(*ErrorCode_CustomInterestError)(nil),
+		(*ErrorCode_CampaignExperimentError)(nil),
+		(*ErrorCode_ExtensionFeedItemError)(nil),
+		(*ErrorCode_AdParameterError)(nil),
+		(*ErrorCode_FeedItemValidationError)(nil),
+		(*ErrorCode_ExtensionSettingError)(nil),
+		(*ErrorCode_FeedItemTargetError)(nil),
+		(*ErrorCode_PolicyViolationError)(nil),
+		(*ErrorCode_MutateJobError)(nil),
+		(*ErrorCode_PartialFailureError)(nil),
+		(*ErrorCode_PolicyValidationParameterError)(nil),
+		(*ErrorCode_SizeLimitError)(nil),
+		(*ErrorCode_NotWhitelistedError)(nil),
+		(*ErrorCode_ManagerLinkError)(nil),
+		(*ErrorCode_CurrencyCodeError)(nil),
+		(*ErrorCode_AccessInvitationError)(nil),
+		(*ErrorCode_ReachPlanError)(nil),
+		(*ErrorCode_InvoiceError)(nil),
+		(*ErrorCode_PaymentsAccountError)(nil),
+		(*ErrorCode_TimeZoneError)(nil),
+	}
+}
+
+// Describes the part of the request proto that caused the error.
+type ErrorLocation struct {
+	// A field path that indicates which field was invalid in the request.
+	FieldPathElements    []*ErrorLocation_FieldPathElement `protobuf:"bytes,2,rep,name=field_path_elements,json=fieldPathElements,proto3" json:"field_path_elements,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *ErrorLocation) Reset()         { *m = ErrorLocation{} }
+func (m *ErrorLocation) String() string { return proto.CompactTextString(m) }
+func (*ErrorLocation) ProtoMessage()    {}
+func (*ErrorLocation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{3}
+}
+
+func (m *ErrorLocation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorLocation.Unmarshal(m, b)
+}
+func (m *ErrorLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorLocation.Marshal(b, m, deterministic)
+}
+func (m *ErrorLocation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorLocation.Merge(m, src)
+}
+func (m *ErrorLocation) XXX_Size() int {
+	return xxx_messageInfo_ErrorLocation.Size(m)
+}
+func (m *ErrorLocation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorLocation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorLocation proto.InternalMessageInfo
+
+func (m *ErrorLocation) GetFieldPathElements() []*ErrorLocation_FieldPathElement {
+	if m != nil {
+		return m.FieldPathElements
+	}
+	return nil
+}
+
+// A part of a field path.
+type ErrorLocation_FieldPathElement struct {
+	// The name of a field or a oneof
+	FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	// If field_name is a repeated field, this is the element that failed
+	Index                *wrappers.Int64Value `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ErrorLocation_FieldPathElement) Reset()         { *m = ErrorLocation_FieldPathElement{} }
+func (m *ErrorLocation_FieldPathElement) String() string { return proto.CompactTextString(m) }
+func (*ErrorLocation_FieldPathElement) ProtoMessage()    {}
+func (*ErrorLocation_FieldPathElement) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{3, 0}
+}
+
+func (m *ErrorLocation_FieldPathElement) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Unmarshal(m, b)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Marshal(b, m, deterministic)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorLocation_FieldPathElement.Merge(m, src)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Size() int {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Size(m)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorLocation_FieldPathElement.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorLocation_FieldPathElement proto.InternalMessageInfo
+
+func (m *ErrorLocation_FieldPathElement) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *ErrorLocation_FieldPathElement) GetIndex() *wrappers.Int64Value {
+	if m != nil {
+		return m.Index
+	}
+	return nil
+}
+
+// Additional error details.
+type ErrorDetails struct {
+	// The error code that should have been returned, but wasn't. This is used
+	// when the error code is InternalError.ERROR_CODE_NOT_PUBLISHED.
+	UnpublishedErrorCode string `protobuf:"bytes,1,opt,name=unpublished_error_code,json=unpublishedErrorCode,proto3" json:"unpublished_error_code,omitempty"`
+	// Describes an ad policy violation.
+	PolicyViolationDetails *PolicyViolationDetails `protobuf:"bytes,2,opt,name=policy_violation_details,json=policyViolationDetails,proto3" json:"policy_violation_details,omitempty"`
+	// Describes policy violation findings.
+	PolicyFindingDetails *PolicyFindingDetails `protobuf:"bytes,3,opt,name=policy_finding_details,json=policyFindingDetails,proto3" json:"policy_finding_details,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ErrorDetails) Reset()         { *m = ErrorDetails{} }
+func (m *ErrorDetails) String() string { return proto.CompactTextString(m) }
+func (*ErrorDetails) ProtoMessage()    {}
+func (*ErrorDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{4}
+}
+
+func (m *ErrorDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorDetails.Unmarshal(m, b)
+}
+func (m *ErrorDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorDetails.Marshal(b, m, deterministic)
+}
+func (m *ErrorDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorDetails.Merge(m, src)
+}
+func (m *ErrorDetails) XXX_Size() int {
+	return xxx_messageInfo_ErrorDetails.Size(m)
+}
+func (m *ErrorDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorDetails proto.InternalMessageInfo
+
+func (m *ErrorDetails) GetUnpublishedErrorCode() string {
+	if m != nil {
+		return m.UnpublishedErrorCode
+	}
+	return ""
+}
+
+func (m *ErrorDetails) GetPolicyViolationDetails() *PolicyViolationDetails {
+	if m != nil {
+		return m.PolicyViolationDetails
+	}
+	return nil
+}
+
+func (m *ErrorDetails) GetPolicyFindingDetails() *PolicyFindingDetails {
+	if m != nil {
+		return m.PolicyFindingDetails
+	}
+	return nil
+}
+
+// Error returned as part of a mutate response.
+// This error indicates single policy violation by some text
+// in one of the fields.
+type PolicyViolationDetails struct {
+	// Human readable description of policy violation.
+	ExternalPolicyDescription string `protobuf:"bytes,2,opt,name=external_policy_description,json=externalPolicyDescription,proto3" json:"external_policy_description,omitempty"`
+	// Unique identifier for this violation.
+	// If policy is exemptible, this key may be used to request exemption.
+	Key *common.PolicyViolationKey `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"`
+	// Human readable name of the policy.
+	ExternalPolicyName string `protobuf:"bytes,5,opt,name=external_policy_name,json=externalPolicyName,proto3" json:"external_policy_name,omitempty"`
+	// Whether user can file an exemption request for this violation.
+	IsExemptible         bool     `protobuf:"varint,6,opt,name=is_exemptible,json=isExemptible,proto3" json:"is_exemptible,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyViolationDetails) Reset()         { *m = PolicyViolationDetails{} }
+func (m *PolicyViolationDetails) String() string { return proto.CompactTextString(m) }
+func (*PolicyViolationDetails) ProtoMessage()    {}
+func (*PolicyViolationDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{5}
+}
+
+func (m *PolicyViolationDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyViolationDetails.Unmarshal(m, b)
+}
+func (m *PolicyViolationDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyViolationDetails.Marshal(b, m, deterministic)
+}
+func (m *PolicyViolationDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyViolationDetails.Merge(m, src)
+}
+func (m *PolicyViolationDetails) XXX_Size() int {
+	return xxx_messageInfo_PolicyViolationDetails.Size(m)
+}
+func (m *PolicyViolationDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyViolationDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyViolationDetails proto.InternalMessageInfo
+
+func (m *PolicyViolationDetails) GetExternalPolicyDescription() string {
+	if m != nil {
+		return m.ExternalPolicyDescription
+	}
+	return ""
+}
+
+func (m *PolicyViolationDetails) GetKey() *common.PolicyViolationKey {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *PolicyViolationDetails) GetExternalPolicyName() string {
+	if m != nil {
+		return m.ExternalPolicyName
+	}
+	return ""
+}
+
+func (m *PolicyViolationDetails) GetIsExemptible() bool {
+	if m != nil {
+		return m.IsExemptible
+	}
+	return false
+}
+
+// Error returned as part of a mutate response.
+// This error indicates one or more policy findings in the fields of a
+// resource.
+type PolicyFindingDetails struct {
+	// The list of policy topics for the resource. Contains the PROHIBITED or
+	// FULLY_LIMITED policy topic entries that prevented the resource from being
+	// saved (among any other entries the resource may also have).
+	PolicyTopicEntries   []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *PolicyFindingDetails) Reset()         { *m = PolicyFindingDetails{} }
+func (m *PolicyFindingDetails) String() string { return proto.CompactTextString(m) }
+func (*PolicyFindingDetails) ProtoMessage()    {}
+func (*PolicyFindingDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c8858a8ef846f0, []int{6}
+}
+
+func (m *PolicyFindingDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyFindingDetails.Unmarshal(m, b)
+}
+func (m *PolicyFindingDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyFindingDetails.Marshal(b, m, deterministic)
+}
+func (m *PolicyFindingDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyFindingDetails.Merge(m, src)
+}
+func (m *PolicyFindingDetails) XXX_Size() int {
+	return xxx_messageInfo_PolicyFindingDetails.Size(m)
+}
+func (m *PolicyFindingDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyFindingDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyFindingDetails proto.InternalMessageInfo
+
+func (m *PolicyFindingDetails) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GoogleAdsFailure)(nil), "google.ads.googleads.v3.errors.GoogleAdsFailure")
+	proto.RegisterType((*GoogleAdsError)(nil), "google.ads.googleads.v3.errors.GoogleAdsError")
+	proto.RegisterType((*ErrorCode)(nil), "google.ads.googleads.v3.errors.ErrorCode")
+	proto.RegisterType((*ErrorLocation)(nil), "google.ads.googleads.v3.errors.ErrorLocation")
+	proto.RegisterType((*ErrorLocation_FieldPathElement)(nil), "google.ads.googleads.v3.errors.ErrorLocation.FieldPathElement")
+	proto.RegisterType((*ErrorDetails)(nil), "google.ads.googleads.v3.errors.ErrorDetails")
+	proto.RegisterType((*PolicyViolationDetails)(nil), "google.ads.googleads.v3.errors.PolicyViolationDetails")
+	proto.RegisterType((*PolicyFindingDetails)(nil), "google.ads.googleads.v3.errors.PolicyFindingDetails")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/errors.proto", fileDescriptor_37c8858a8ef846f0)
+}
+
+var fileDescriptor_37c8858a8ef846f0 = []byte{
+	// 4302 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x5c, 0xcd, 0x73, 0x1c, 0x37,
+	0x76, 0x9f, 0x91, 0x63, 0x5b, 0x82, 0x24, 0x4a, 0x6a, 0xc9, 0x32, 0x2c, 0xad, 0xbd, 0x5a, 0x7a,
+	0x37, 0x51, 0x36, 0x6b, 0xd2, 0x26, 0x65, 0xc9, 0xa2, 0x6c, 0xcb, 0xc3, 0x2f, 0x0d, 0xd7, 0x94,
+	0x4c, 0x37, 0x65, 0x79, 0xd7, 0xab, 0x64, 0x8c, 0xe9, 0xc6, 0x0c, 0x61, 0xf6, 0x97, 0xfb, 0x83,
+	0x22, 0x59, 0xeb, 0x64, 0x93, 0xaa, 0xa4, 0x2a, 0xa9, 0x4a, 0xaa, 0x92, 0x54, 0xe5, 0x90, 0x43,
+	0x0e, 0x3e, 0xee, 0x21, 0x87, 0xe4, 0x90, 0x4b, 0xfe, 0x80, 0x54, 0xfe, 0x8f, 0xe4, 0x90, 0x7b,
+	0xee, 0x29, 0xa0, 0xbf, 0xf0, 0x35, 0x03, 0x74, 0x4e, 0x64, 0xff, 0x80, 0xdf, 0x7b, 0x68, 0x34,
+	0xf0, 0xf0, 0x80, 0x87, 0x37, 0xe0, 0x0f, 0xa6, 0x71, 0x3c, 0x0d, 0xf0, 0x32, 0xf2, 0xb3, 0xe5,
+	0xf2, 0x5f, 0xfa, 0xdf, 0xd1, 0xea, 0x32, 0x4e, 0xd3, 0x38, 0xcd, 0xaa, 0x3f, 0x4b, 0x49, 0x1a,
+	0xe7, 0xb1, 0xf3, 0x56, 0x59, 0x63, 0x09, 0xf9, 0xd9, 0x52, 0x53, 0x79, 0xe9, 0x68, 0x75, 0xa9,
+	0xac, 0x75, 0x63, 0xa6, 0x30, 0x2f, 0x0e, 0xc3, 0x38, 0x5a, 0x4e, 0xe2, 0x80, 0x78, 0x27, 0xa5,
+	0xb0, 0x1b, 0x3f, 0x35, 0x54, 0x3e, 0x42, 0x41, 0x81, 0xab, 0xba, 0x1f, 0x1a, 0x5a, 0x89, 0x3c,
+	0x0f, 0x67, 0xd9, 0x88, 0x44, 0x47, 0x24, 0x47, 0x39, 0x89, 0xa3, 0x11, 0x2b, 0xa8, 0xd8, 0xeb,
+	0x66, 0x76, 0x5c, 0x44, 0xf9, 0x68, 0x5c, 0xf8, 0x53, 0x9c, 0x8f, 0x92, 0x34, 0x4e, 0xe2, 0x0c,
+	0x05, 0x82, 0x8c, 0x0f, 0x4c, 0x32, 0xfc, 0x91, 0x57, 0x64, 0x79, 0x1c, 0x92, 0x53, 0x9c, 0x0a,
+	0xcc, 0x77, 0xcc, 0x4c, 0xbe, 0xfa, 0x5d, 0x73, 0xf5, 0x69, 0x1a, 0x17, 0xc9, 0x48, 0xe2, 0x7d,
+	0x62, 0xcb, 0x1b, 0x13, 0x7f, 0x14, 0xc6, 0x3e, 0x99, 0x10, 0xa9, 0xa1, 0x1f, 0xd9, 0x4a, 0xf0,
+	0x52, 0x92, 0xe3, 0x54, 0xee, 0xe5, 0x55, 0x5b, 0x7a, 0xc7, 0x6e, 0x2d, 0x49, 0x13, 0x8c, 0xc5,
+	0xf7, 0xbd, 0x67, 0x66, 0x26, 0x28, 0x45, 0x21, 0xce, 0xa5, 0xd7, 0x7c, 0xdf, 0x4c, 0xcc, 0x0e,
+	0x50, 0x4a, 0xa2, 0xa9, 0x40, 0x5b, 0x32, 0xd2, 0x8e, 0x85, 0xfa, 0xef, 0x9a, 0xea, 0x67, 0x19,
+	0xce, 0x05, 0xc6, 0x7d, 0x13, 0xa3, 0xc8, 0x0f, 0x70, 0x94, 0x13, 0x4f, 0x1d, 0xe1, 0x1f, 0x58,
+	0x50, 0xe3, 0x94, 0x9c, 0xaa, 0xcc, 0x15, 0x03, 0x73, 0x4c, 0x7c, 0x5f, 0xee, 0x8a, 0x07, 0x96,
+	0x9c, 0x2c, 0x4f, 0x51, 0x8e, 0xa7, 0x27, 0x9d, 0x9a, 0x3a, 0x26, 0x41, 0xc0, 0xc8, 0x38, 0x97,
+	0xc6, 0xca, 0x9a, 0x81, 0xe9, 0xa1, 0x30, 0x41, 0x64, 0x1a, 0xd5, 0xf3, 0xb8, 0xcb, 0xd8, 0x6e,
+	0xb8, 0xfa, 0xb1, 0x7d, 0xdf, 0x96, 0xee, 0xa7, 0x68, 0x92, 0x77, 0x9a, 0x16, 0x0d, 0x95, 0x27,
+	0x7d, 0x6c, 0x4d, 0x3a, 0x4e, 0x70, 0x4a, 0x42, 0x1c, 0xe5, 0x9d, 0x3a, 0xb9, 0xe1, 0x2b, 0xd3,
+	0xca, 0x5a, 0x33, 0x9d, 0x23, 0xd8, 0x1f, 0xc9, 0x83, 0xd8, 0xa8, 0xf9, 0x00, 0x45, 0x53, 0x3c,
+	0xca, 0x72, 0x94, 0x17, 0x59, 0xb7, 0xcf, 0x1b, 0x07, 0x01, 0xf6, 0xd8, 0x00, 0xce, 0xc8, 0x29,
+	0xee, 0x34, 0x8a, 0xbd, 0x38, 0xca, 0xf1, 0xb1, 0xd8, 0xd2, 0x0f, 0xcd, 0x9c, 0x23, 0x9c, 0x66,
+	0x54, 0x1f, 0xf2, 0x94, 0x79, 0xf3, 0xa8, 0x03, 0xdb, 0xff, 0xa6, 0xc8, 0x72, 0xf6, 0x8d, 0x8a,
+	0x24, 0x88, 0x25, 0xbb, 0xdd, 0xa1, 0x19, 0x1a, 0xf6, 0x3d, 0x23, 0xbb, 0x88, 0xf2, 0xf4, 0x64,
+	0xe4, 0xc5, 0xbe, 0xd8, 0x63, 0x77, 0x4c, 0x44, 0xed, 0x3c, 0x30, 0x7e, 0xdd, 0x22, 0x4d, 0x71,
+	0xe4, 0x69, 0xf4, 0x19, 0xbf, 0x2e, 0x5b, 0x3c, 0x47, 0x24, 0xca, 0x71, 0x8a, 0x33, 0xf1, 0x4b,
+	0x3d, 0xb4, 0xe2, 0xe2, 0x74, 0xe4, 0x05, 0x84, 0xf6, 0x72, 0x40, 0xa2, 0xc3, 0x6e, 0x73, 0xb0,
+	0x16, 0xd0, 0xed, 0x5d, 0x2b, 0x92, 0x32, 0x87, 0x3e, 0xb1, 0x65, 0x86, 0x28, 0x42, 0x53, 0x9c,
+	0x76, 0x6f, 0xb0, 0x8f, 0x72, 0x34, 0x46, 0x99, 0xd8, 0xc5, 0xcb, 0x66, 0x12, 0xee, 0xb4, 0x12,
+	0x32, 0x42, 0xca, 0xe6, 0x6b, 0xa7, 0xc6, 0x91, 0x2c, 0x27, 0x91, 0x97, 0x77, 0x6a, 0x1c, 0x8e,
+	0x8a, 0xb0, 0x93, 0x21, 0xc2, 0xc7, 0x39, 0x8e, 0xd8, 0xb4, 0x60, 0xfd, 0x4f, 0x72, 0x1c, 0x76,
+	0x9a, 0x57, 0x2d, 0x3f, 0xc3, 0x79, 0x2e, 0x2f, 0x71, 0x1b, 0x06, 0x36, 0xd3, 0x89, 0xf2, 0x3c,
+	0x25, 0xe3, 0x82, 0x76, 0x12, 0x9e, 0x60, 0x3a, 0xf0, 0xbb, 0x7d, 0x10, 0x65, 0xe0, 0xdc, 0xb1,
+	0x21, 0x28, 0x6f, 0xfa, 0xc0, 0x9a, 0x95, 0xa3, 0x54, 0x5e, 0x18, 0x1f, 0x5a, 0x93, 0x8f, 0x50,
+	0x40, 0x7c, 0xd5, 0x81, 0xb8, 0x67, 0x23, 0x20, 0x44, 0x49, 0x22, 0x77, 0xb1, 0xc9, 0x41, 0x9a,
+	0x10, 0x1c, 0xf8, 0x9d, 0xc6, 0x6b, 0xc9, 0x08, 0x51, 0xd6, 0x6d, 0x32, 0x4d, 0x8a, 0x48, 0xb5,
+	0xef, 0x0f, 0x6c, 0x49, 0x09, 0x4a, 0x33, 0xf9, 0xd5, 0x76, 0x0c, 0xe4, 0x29, 0x8e, 0xeb, 0x6f,
+	0xe1, 0xc5, 0x51, 0x96, 0xa3, 0x28, 0x1f, 0x65, 0xc5, 0x74, 0x8a, 0x33, 0xa5, 0x1d, 0xef, 0x19,
+	0x44, 0x1d, 0x60, 0xe4, 0x77, 0xdc, 0x70, 0x10, 0xbf, 0xd3, 0x77, 0x20, 0x21, 0xea, 0x68, 0x00,
+	0x98, 0x11, 0x8f, 0xa4, 0x0d, 0xd4, 0x8a, 0x91, 0x74, 0x14, 0x13, 0x69, 0x02, 0x99, 0x0c, 0xe9,
+	0x21, 0x3e, 0x79, 0x11, 0xa7, 0xfe, 0x28, 0x09, 0x10, 0x5d, 0x66, 0x35, 0xfb, 0x8b, 0x4e, 0x12,
+	0xb4, 0xae, 0xd8, 0xbd, 0x2e, 0x12, 0xba, 0x18, 0x20, 0x81, 0x48, 0x7c, 0x8c, 0x3a, 0xcd, 0x4b,
+	0x81, 0x5d, 0x3f, 0xf0, 0x02, 0x86, 0x5d, 0x04, 0x44, 0x78, 0x8a, 0x72, 0x72, 0x84, 0xb5, 0x92,
+	0x4c, 0x03, 0x24, 0x40, 0x63, 0xdc, 0x6d, 0xb3, 0x1c, 0xa0, 0x68, 0x5a, 0xd0, 0x51, 0xa5, 0xb8,
+	0x09, 0x26, 0x47, 0x3b, 0x20, 0x59, 0x3e, 0x8a, 0x13, 0x9c, 0x76, 0x37, 0x44, 0x33, 0x17, 0x5b,
+	0x23, 0x11, 0xfb, 0x04, 0x8d, 0xc6, 0x45, 0xe4, 0x07, 0xdd, 0xd6, 0xcf, 0x92, 0x38, 0x21, 0x12,
+	0xcd, 0x4e, 0x9f, 0xc6, 0xd9, 0x33, 0xea, 0x2b, 0x82, 0x9c, 0x24, 0x81, 0xbc, 0xaf, 0x7f, 0xcf,
+	0x48, 0xcb, 0xbb, 0x7a, 0x06, 0x15, 0xe5, 0x9b, 0x78, 0xdc, 0x69, 0xb6, 0x45, 0xf8, 0xc5, 0x28,
+	0xc5, 0x59, 0x5c, 0xa4, 0x1e, 0x1e, 0x79, 0x29, 0x56, 0x3f, 0xa2, 0x69, 0x05, 0x8c, 0xe2, 0x7c,
+	0x84, 0xc3, 0x24, 0x3f, 0xe9, 0xe4, 0x5c, 0x52, 0xd6, 0x8b, 0x03, 0x92, 0x63, 0x3a, 0x7c, 0xa4,
+	0x35, 0xd7, 0xb4, 0x48, 0x47, 0x45, 0x10, 0x74, 0x3a, 0x4d, 0x6a, 0x47, 0x67, 0x75, 0x2a, 0xe5,
+	0xe3, 0x88, 0x48, 0x4a, 0x57, 0xad, 0x64, 0xc4, 0x69, 0xa7, 0xb7, 0x4c, 0x50, 0x9a, 0x13, 0x14,
+	0x8c, 0x26, 0x88, 0x04, 0x45, 0x8a, 0x3b, 0x2d, 0x67, 0x09, 0x3a, 0xa1, 0x1b, 0x94, 0x6c, 0x54,
+	0x9f, 0x85, 0x75, 0x99, 0x94, 0xe5, 0xb1, 0xde, 0x68, 0x42, 0x22, 0xe5, 0xa8, 0x60, 0xdb, 0x8e,
+	0xca, 0xf9, 0x16, 0xfa, 0x43, 0x9b, 0x07, 0x96, 0x72, 0x48, 0x1c, 0xa8, 0x83, 0xca, 0x64, 0xc0,
+	0xbe, 0x2d, 0x70, 0x7a, 0xd2, 0x91, 0x11, 0xe7, 0xa8, 0x13, 0x43, 0x75, 0xa3, 0x4d, 0x73, 0x2c,
+	0xc5, 0xc8, 0x3b, 0x50, 0x97, 0x95, 0xfb, 0x46, 0x9a, 0x17, 0x87, 0x21, 0x8e, 0x34, 0xae, 0xda,
+	0x5d, 0x23, 0x75, 0x4a, 0x29, 0x8a, 0x51, 0x5e, 0x31, 0xf2, 0xbe, 0x2d, 0xe4, 0x3d, 0xdb, 0xc0,
+	0xc8, 0xa9, 0xcc, 0xc0, 0xec, 0x49, 0x32, 0xb4, 0x15, 0x51, 0x8e, 0xd8, 0x80, 0x84, 0x24, 0x1f,
+	0xe1, 0x63, 0x0f, 0x63, 0x5f, 0x92, 0x64, 0x7a, 0x01, 0xdd, 0x0e, 0xc0, 0x34, 0xe2, 0xaa, 0xf3,
+	0x0f, 0xfd, 0x3e, 0xf9, 0x7d, 0x3b, 0xb2, 0x7c, 0x78, 0x62, 0xa4, 0x91, 0x53, 0x5c, 0xbf, 0x67,
+	0x87, 0xe5, 0x36, 0xcb, 0xd9, 0x69, 0xe6, 0x24, 0x4e, 0x43, 0xf4, 0xff, 0x62, 0x06, 0x38, 0x9a,
+	0xe6, 0x07, 0x9d, 0x0c, 0x75, 0x4e, 0x42, 0x3c, 0x3a, 0x8d, 0xa3, 0x6e, 0xa7, 0x0e, 0x45, 0x1a,
+	0x8c, 0x54, 0xbf, 0xdf, 0xc8, 0xca, 0xd8, 0xb2, 0x2e, 0x8d, 0xc0, 0x2d, 0x03, 0xeb, 0x24, 0x2e,
+	0xf2, 0x62, 0x8c, 0x47, 0x47, 0xc4, 0xc7, 0xf1, 0x88, 0x8e, 0x7d, 0x76, 0x5e, 0x29, 0x7f, 0xca,
+	0x2a, 0xe6, 0xb1, 0xcc, 0x9e, 0xc6, 0xc5, 0x64, 0xf9, 0x45, 0x8a, 0x92, 0x04, 0xd7, 0x31, 0x91,
+	0x1b, 0x3f, 0xa8, 0xd5, 0x24, 0x64, 0x19, 0x45, 0x51, 0x5c, 0xc6, 0x1f, 0xaa, 0xd2, 0xc5, 0xaf,
+	0xc0, 0xe5, 0x47, 0xac, 0x7c, 0xe0, 0x67, 0xdb, 0xa5, 0x5d, 0x76, 0xb6, 0xc1, 0x2b, 0x65, 0x13,
+	0x60, 0xff, 0xd6, 0x4b, 0xb7, 0xcf, 0xaf, 0x2c, 0x2d, 0xcd, 0x0f, 0xab, 0x2c, 0x35, 0x12, 0xb6,
+	0xe8, 0xb3, 0x5b, 0xb1, 0x17, 0xff, 0xe3, 0x0c, 0x58, 0x10, 0x8b, 0x9c, 0x21, 0x00, 0xac, 0x90,
+	0xcd, 0x61, 0xd8, 0xbf, 0xd5, 0xbf, 0x7d, 0x7e, 0xe5, 0xf7, 0x4d, 0xe2, 0x19, 0x75, 0x23, 0xf6,
+	0xb1, 0x7b, 0x0e, 0xd7, 0xff, 0x3a, 0x10, 0xbc, 0x1a, 0xe2, 0x2c, 0x43, 0x53, 0x0c, 0xcf, 0xdc,
+	0xea, 0xdf, 0x3e, 0xe7, 0xd6, 0x8f, 0xce, 0x43, 0xf0, 0x6a, 0x9e, 0x92, 0xe9, 0x14, 0xa7, 0xf0,
+	0x25, 0xa6, 0xe0, 0x27, 0x33, 0x15, 0x94, 0x91, 0x9c, 0xa5, 0x67, 0x28, 0x28, 0xb0, 0x5b, 0xb3,
+	0x9c, 0x1d, 0x70, 0x36, 0x88, 0xcb, 0x43, 0x6c, 0xf8, 0x3b, 0x4c, 0xc2, 0x3b, 0x56, 0x4d, 0xdc,
+	0xad, 0x48, 0x6e, 0x43, 0x77, 0xb6, 0xc1, 0xab, 0x3e, 0xce, 0x11, 0x09, 0x32, 0xf8, 0x32, 0x93,
+	0xf4, 0x33, 0x2b, 0x49, 0x9b, 0x25, 0xc7, 0xad, 0xc9, 0x8b, 0xff, 0x7e, 0x00, 0xce, 0x35, 0xdd,
+	0xe0, 0xf8, 0xe0, 0xa2, 0x60, 0xd2, 0x58, 0x47, 0x2e, 0xac, 0x7c, 0x64, 0x92, 0xed, 0x96, 0x24,
+	0x26, 0x68, 0x2b, 0x2a, 0x42, 0x01, 0x18, 0xf6, 0xdc, 0x0b, 0x29, 0xf7, 0xec, 0xfc, 0x79, 0x1f,
+	0x5c, 0xd7, 0x9f, 0x94, 0xb3, 0x1e, 0x5f, 0x58, 0x79, 0x6c, 0xd2, 0xb7, 0x5e, 0xb2, 0xf7, 0x2b,
+	0x72, 0xab, 0x57, 0x57, 0x30, 0xec, 0xb9, 0xd7, 0xc6, 0x1a, 0xdc, 0x21, 0xe0, 0x92, 0x34, 0xed,
+	0xd8, 0x77, 0x5d, 0x58, 0x79, 0x68, 0xd2, 0xff, 0x45, 0x1a, 0x6c, 0x53, 0x56, 0xab, 0x58, 0x40,
+	0x86, 0x3d, 0xf7, 0x62, 0xc1, 0x03, 0xce, 0x77, 0xe0, 0x9a, 0xce, 0x81, 0x67, 0xa3, 0x60, 0x61,
+	0x65, 0xc7, 0xa4, 0x6f, 0x97, 0x64, 0xf9, 0x67, 0x35, 0xb5, 0x55, 0xaa, 0xc2, 0xc3, 0x9e, 0xeb,
+	0x04, 0x0a, 0xea, 0x3c, 0x07, 0xe7, 0xb9, 0xa5, 0x9e, 0x8d, 0x98, 0x85, 0x95, 0xfb, 0x26, 0xad,
+	0x9f, 0x53, 0x4a, 0xab, 0xad, 0x7d, 0x1c, 0xf6, 0x5c, 0xf0, 0x6d, 0xf3, 0xe4, 0x7c, 0x0d, 0x2e,
+	0xf0, 0x9e, 0x34, 0x7c, 0x95, 0x89, 0x7f, 0x60, 0x12, 0xff, 0x98, 0x71, 0x5a, 0xf9, 0xdc, 0xf3,
+	0xb0, 0xe7, 0x9e, 0x0f, 0xdb, 0x47, 0x27, 0x04, 0x97, 0xe5, 0x23, 0x0e, 0x78, 0x96, 0x69, 0x19,
+	0x98, 0xb4, 0xb0, 0x8f, 0xf0, 0x18, 0x65, 0x87, 0xad, 0x22, 0x11, 0x1a, 0xf6, 0xdc, 0x85, 0x89,
+	0x80, 0x38, 0xbf, 0x06, 0x57, 0x35, 0x71, 0x23, 0x78, 0xce, 0xee, 0x63, 0x0d, 0x78, 0x6a, 0xab,
+	0x55, 0x85, 0xe9, 0xc7, 0x42, 0x0a, 0xea, 0x1c, 0x80, 0x05, 0xf1, 0x1c, 0x01, 0x02, 0xbb, 0x51,
+	0xb9, 0x53, 0xb1, 0x5a, 0x9d, 0x02, 0x42, 0x47, 0x25, 0xe1, 0x81, 0x72, 0x58, 0x34, 0xfe, 0x1c,
+	0x3c, 0x6f, 0x3b, 0x2c, 0xe2, 0x1c, 0xf1, 0xc3, 0xa2, 0x7e, 0x2c, 0x87, 0x45, 0xfd, 0xe4, 0xec,
+	0x81, 0xb3, 0xf5, 0x36, 0x0e, 0x5e, 0x60, 0xa2, 0x57, 0x8d, 0x5d, 0xc7, 0xcd, 0xa8, 0x41, 0x33,
+	0x97, 0x5e, 0x45, 0xd5, 0x2c, 0xc2, 0x60, 0x41, 0x3c, 0xeb, 0x80, 0x17, 0xed, 0xec, 0xd3, 0xc0,
+	0x7f, 0x44, 0x49, 0xbc, 0xf0, 0x16, 0xa0, 0xf6, 0x09, 0x71, 0xcf, 0xce, 0x9f, 0xf6, 0xc1, 0x6b,
+	0xda, 0x90, 0x1a, 0x5c, 0x60, 0xea, 0x3e, 0x35, 0xa9, 0xdb, 0xa8, 0xc8, 0xeb, 0x8c, 0xdb, 0x6a,
+	0xd5, 0xe0, 0xc3, 0x9e, 0x7b, 0xd5, 0x53, 0x61, 0x3a, 0x08, 0xc4, 0x43, 0x19, 0x78, 0xc9, 0x6e,
+	0x10, 0xd4, 0x3a, 0x54, 0xad, 0xcd, 0x20, 0xf0, 0x78, 0xc0, 0xf9, 0x4d, 0x1f, 0x5c, 0xd3, 0x05,
+	0x58, 0xe1, 0x15, 0xbb, 0x97, 0x1d, 0x08, 0x5c, 0x71, 0xbc, 0x4b, 0x38, 0x7d, 0x59, 0xa4, 0xc2,
+	0xce, 0x5f, 0xf5, 0x01, 0x9c, 0x15, 0x63, 0x87, 0x0e, 0x6b, 0xc6, 0x67, 0x96, 0x9f, 0x78, 0xa3,
+	0x66, 0x2b, 0xdf, 0x5a, 0x2c, 0x19, 0xf6, 0xdc, 0xd7, 0x90, 0xae, 0xc0, 0x39, 0x01, 0x57, 0x35,
+	0x57, 0x1a, 0xe0, 0x55, 0xd6, 0x8c, 0x47, 0xe6, 0x66, 0x6c, 0x34, 0x4c, 0xbe, 0x09, 0x12, 0x3a,
+	0xec, 0xb9, 0x57, 0x90, 0x0c, 0x3a, 0x11, 0xb8, 0xa2, 0x5c, 0x72, 0x80, 0xaf, 0xd9, 0xd9, 0xb9,
+	0xea, 0x2d, 0xc5, 0x19, 0xc4, 0x43, 0xd4, 0xce, 0x21, 0x01, 0xa1, 0x66, 0x55, 0x8e, 0xf9, 0x43,
+	0x68, 0xab, 0x6e, 0xbf, 0xa4, 0xf1, 0xea, 0x78, 0xa8, 0x54, 0xc7, 0x23, 0xce, 0x53, 0x70, 0xae,
+	0xb9, 0x2b, 0x00, 0xdf, 0x60, 0x7a, 0xde, 0x37, 0xeb, 0x39, 0xe6, 0x35, 0x1c, 0xd7, 0xb2, 0xcf,
+	0xa2, 0xea, 0x7f, 0x6a, 0xc4, 0xb8, 0x1b, 0x05, 0xf0, 0xd0, 0xce, 0x88, 0x0d, 0x28, 0x85, 0x93,
+	0xdc, 0x3c, 0x52, 0x23, 0x86, 0x9a, 0x27, 0xea, 0x11, 0x09, 0x17, 0x01, 0xe0, 0x0d, 0x3b, 0x8b,
+	0x53, 0x39, 0x22, 0x8a, 0x67, 0xd2, 0x58, 0x9c, 0x31, 0xf7, 0xec, 0xfc, 0x75, 0x1f, 0xc0, 0x59,
+	0x81, 0x78, 0xf8, 0x26, 0xd3, 0xf8, 0xb9, 0xed, 0xc4, 0xd7, 0xcc, 0x00, 0x7d, 0xd1, 0xb0, 0xe7,
+	0x5e, 0xf7, 0xb4, 0x25, 0xa5, 0x05, 0xd4, 0x45, 0x9d, 0xe1, 0x0f, 0x2d, 0x2d, 0x60, 0x43, 0xde,
+	0x27, 0xa7, 0xdc, 0x1a, 0xaf, 0xc1, 0x99, 0x05, 0x54, 0x61, 0xa7, 0x00, 0x8e, 0x1a, 0xc3, 0x85,
+	0x21, 0xd3, 0xbf, 0x65, 0xd6, 0xcf, 0x98, 0xd4, 0xa9, 0xe5, 0x95, 0x8b, 0xe0, 0xb0, 0xe7, 0x5e,
+	0xf6, 0x24, 0xcc, 0x09, 0xc0, 0x25, 0xf9, 0x03, 0xdc, 0xb2, 0x9b, 0x12, 0xba, 0x8e, 0x97, 0x3b,
+	0x7c, 0xc1, 0x13, 0x3b, 0x9a, 0x9a, 0x79, 0x21, 0x04, 0x0b, 0xbf, 0xb2, 0x34, 0xf3, 0x15, 0x8b,
+	0xd3, 0xc5, 0x23, 0xcc, 0xcc, 0xf3, 0x80, 0xf3, 0x0b, 0x00, 0xda, 0x30, 0x28, 0xfc, 0x11, 0xd3,
+	0x72, 0xcf, 0xa4, 0x65, 0x53, 0x70, 0xd0, 0x36, 0x39, 0xf7, 0xec, 0x9c, 0xcf, 0x3b, 0x67, 0x72,
+	0xbc, 0x14, 0x2e, 0xda, 0x75, 0x19, 0x95, 0xe8, 0x52, 0x9a, 0xa8, 0xa4, 0x85, 0x68, 0x97, 0xf9,
+	0x02, 0x42, 0xbb, 0x4c, 0x8c, 0xb3, 0xc2, 0xb7, 0xed, 0xba, 0x6c, 0xb3, 0x62, 0x71, 0xba, 0x78,
+	0x84, 0x76, 0x99, 0xcf, 0x03, 0xce, 0xf7, 0x7d, 0xf0, 0xd6, 0xfc, 0x70, 0x27, 0xfc, 0x31, 0x53,
+	0xfd, 0x2b, 0xa3, 0x13, 0x8a, 0xb1, 0x3f, 0xa8, 0x85, 0xb8, 0xb5, 0x0c, 0xce, 0x23, 0x9d, 0x5d,
+	0x3e, 0xec, 0xb9, 0x37, 0x27, 0xb3, 0x8b, 0x69, 0x77, 0x88, 0x61, 0x3c, 0xf8, 0x13, 0xbb, 0xee,
+	0xd8, 0xae, 0x58, 0x5c, 0x2b, 0x78, 0x84, 0x76, 0xc7, 0x84, 0x07, 0xd8, 0xb6, 0x4d, 0x1f, 0xfc,
+	0x83, 0xbf, 0x6b, 0xb7, 0x6d, 0xab, 0x15, 0xec, 0x95, 0x64, 0x55, 0x33, 0x5f, 0x40, 0xb7, 0x6d,
+	0x13, 0x0d, 0x4e, 0xfd, 0xca, 0x3a, 0x90, 0x07, 0x7f, 0xcf, 0xce, 0xaf, 0xdc, 0xe1, 0x56, 0xc5,
+	0x9d, 0xd6, 0xaf, 0x24, 0x7e, 0xb3, 0x84, 0x70, 0xb1, 0x3e, 0x78, 0xdb, 0x6e, 0x09, 0xd9, 0xa1,
+	0x14, 0x4e, 0x6e, 0xf3, 0x48, 0x97, 0x10, 0xd2, 0x3c, 0x51, 0x87, 0x42, 0x13, 0xf6, 0x81, 0x91,
+	0x9d, 0x43, 0xb1, 0x5b, 0x51, 0x45, 0x53, 0xa6, 0xa0, 0xd4, 0xa1, 0x08, 0x64, 0x90, 0xda, 0x50,
+	0x35, 0x86, 0x03, 0x7f, 0x6a, 0x67, 0x43, 0x1f, 0x53, 0xe6, 0x3a, 0x23, 0x72, 0x9b, 0x34, 0x09,
+	0xa4, 0x36, 0x34, 0x94, 0xb0, 0x56, 0x2d, 0x1f, 0xca, 0x81, 0x79, 0x07, 0xb5, 0x5f, 0x30, 0xa2,
+	0xa4, 0x96, 0x03, 0x1b, 0xb5, 0x1c, 0x46, 0x0d, 0x91, 0x1c, 0x78, 0x82, 0xcf, 0xec, 0x0c, 0x11,
+	0x93, 0xbf, 0x4d, 0x94, 0x37, 0x6d, 0x20, 0x6a, 0x88, 0x42, 0x01, 0x71, 0x12, 0x70, 0x59, 0x8e,
+	0x3b, 0xc1, 0x9f, 0x31, 0x75, 0x1b, 0xe6, 0xad, 0x6f, 0xcd, 0xe3, 0xb7, 0xbf, 0x02, 0x36, 0xec,
+	0xb9, 0x97, 0x42, 0x11, 0x72, 0xfe, 0xa1, 0x0f, 0x6e, 0xce, 0x89, 0x24, 0xc1, 0x77, 0x98, 0xf6,
+	0x2f, 0x4c, 0xda, 0x9f, 0xe0, 0x17, 0x6e, 0x25, 0x61, 0xa3, 0x12, 0xd0, 0x36, 0x63, 0x56, 0xe1,
+	0xb0, 0xe7, 0xc2, 0x68, 0x46, 0x99, 0x43, 0xc0, 0x25, 0x29, 0x3e, 0x05, 0x97, 0xec, 0xac, 0xd0,
+	0x93, 0x38, 0xdf, 0xa2, 0x2c, 0xae, 0x01, 0x3c, 0x42, 0xad, 0x50, 0xc4, 0x03, 0x74, 0x1d, 0x6b,
+	0x03, 0x53, 0x70, 0xd9, 0x6e, 0x1d, 0x7b, 0x52, 0x04, 0xdc, 0xae, 0xb8, 0x79, 0xa2, 0xeb, 0x58,
+	0x54, 0x3f, 0x50, 0x4b, 0x2a, 0x46, 0x9f, 0xe0, 0xbb, 0x76, 0xef, 0xf0, 0x59, 0xc5, 0x6a, 0x35,
+	0x08, 0x08, 0x7d, 0x87, 0x98, 0x07, 0xa8, 0xbd, 0xe1, 0x17, 0xcb, 0xf7, 0xec, 0xec, 0x8d, 0xb4,
+	0x50, 0x0a, 0x8b, 0x24, 0x48, 0xdb, 0x05, 0x92, 0x6e, 0xe8, 0x74, 0xb1, 0x10, 0xb8, 0x66, 0xe7,
+	0xbb, 0xb9, 0x02, 0x97, 0x3f, 0xd3, 0x53, 0x70, 0xea, 0xbb, 0xa5, 0x2a, 0xec, 0x7c, 0x0b, 0xae,
+	0x28, 0x21, 0x15, 0xb8, 0x6a, 0x37, 0x37, 0x5c, 0x46, 0x14, 0xcd, 0x9d, 0x84, 0xd1, 0xb9, 0x91,
+	0x8a, 0x10, 0x75, 0xd4, 0x85, 0x60, 0x06, 0xbc, 0x63, 0xe7, 0xa8, 0xef, 0x97, 0xa4, 0x56, 0x17,
+	0x0f, 0x50, 0x47, 0x3d, 0xe3, 0x9e, 0xa9, 0x2d, 0xd7, 0xc4, 0x14, 0xe0, 0xfb, 0x76, 0xb6, 0x7c,
+	0x9f, 0x51, 0xb7, 0x19, 0x93, 0x53, 0x28, 0xa3, 0xd4, 0x96, 0x67, 0x32, 0xc8, 0xa9, 0xe6, 0x83,
+	0x12, 0xf0, 0x6e, 0x17, 0xd5, 0xbb, 0x8c, 0x29, 0xab, 0xe6, 0xd0, 0x56, 0x35, 0x07, 0x3a, 0xff,
+	0xd4, 0x07, 0x6f, 0xce, 0x0d, 0xee, 0xc2, 0x7b, 0xac, 0x15, 0xbf, 0xb4, 0x9b, 0x29, 0x24, 0x8e,
+	0x06, 0x4c, 0xc6, 0x26, 0x13, 0x21, 0x4f, 0x1b, 0x5d, 0xf1, 0xb0, 0xe7, 0xde, 0x88, 0x67, 0x96,
+	0x3a, 0xff, 0xd8, 0x07, 0x3f, 0x98, 0x17, 0x57, 0x83, 0x1f, 0xb0, 0xf6, 0x7d, 0x69, 0x1e, 0x7b,
+	0xa5, 0x0c, 0x7d, 0xf3, 0x66, 0x96, 0x0e, 0x7b, 0xee, 0x1b, 0xe9, 0xac, 0x42, 0xe7, 0x5f, 0xfb,
+	0xe0, 0x6d, 0x8b, 0x88, 0x1d, 0xbc, 0xcf, 0xda, 0xe8, 0xd9, 0xb6, 0x91, 0xed, 0x66, 0x76, 0xa9,
+	0xa0, 0xad, 0x4a, 0x8e, 0xda, 0xd2, 0x19, 0x75, 0x86, 0x3d, 0xf7, 0x87, 0xe9, 0xfc, 0x2a, 0xce,
+	0x6f, 0xfb, 0xe0, 0x96, 0x29, 0x50, 0x04, 0x0b, 0xd6, 0xe4, 0x91, 0xa9, 0xc9, 0xbf, 0x2c, 0xe5,
+	0x3c, 0xa3, 0x62, 0x5c, 0x4e, 0x4a, 0xdb, 0xe0, 0xb9, 0x35, 0x86, 0x3d, 0xf7, 0xcd, 0x93, 0x79,
+	0x15, 0x9c, 0xbf, 0xef, 0x83, 0x9b, 0x73, 0xd2, 0x3c, 0xe0, 0x03, 0xd6, 0xce, 0x7d, 0xcb, 0x33,
+	0x94, 0x75, 0xe2, 0x3f, 0xae, 0xf8, 0xca, 0x61, 0x8a, 0x5c, 0x36, 0xec, 0xb9, 0xaf, 0x23, 0x7d,
+	0x11, 0x35, 0x49, 0xc2, 0xf5, 0x6b, 0xf8, 0xa1, 0x9d, 0x49, 0xda, 0x28, 0x49, 0xfc, 0xc6, 0xb5,
+	0x05, 0xa8, 0x49, 0xf2, 0xb8, 0x67, 0xba, 0x98, 0xf0, 0x11, 0x8c, 0x8f, 0xec, 0x16, 0x13, 0x29,
+	0x7c, 0x21, 0xc4, 0x2e, 0xc0, 0xa4, 0x0d, 0x5c, 0x84, 0xe0, 0xb2, 0x1c, 0xb2, 0x85, 0x1f, 0xdb,
+	0xf9, 0x54, 0xfb, 0x8c, 0xb7, 0xcf, 0x1f, 0xb3, 0x88, 0x10, 0xf5, 0xa9, 0x32, 0x01, 0x61, 0x7b,
+	0x0c, 0x7d, 0x7c, 0x19, 0x3e, 0xb4, 0xdb, 0x63, 0x94, 0x2a, 0x34, 0x7b, 0x71, 0x5d, 0x01, 0xdd,
+	0x63, 0x64, 0x1a, 0xdc, 0xf9, 0x9b, 0x3e, 0x78, 0x63, 0xe6, 0x85, 0x7f, 0xf8, 0x49, 0xb7, 0x13,
+	0x19, 0x4d, 0x47, 0xe8, 0x8b, 0xf8, 0x13, 0x19, 0xb1, 0xc4, 0xf9, 0xcb, 0x3e, 0x78, 0x7d, 0xc6,
+	0xbd, 0x7c, 0x38, 0xb0, 0x3b, 0x21, 0xdd, 0x68, 0xe8, 0x03, 0x69, 0xe3, 0xa7, 0x2d, 0x19, 0xf6,
+	0xdc, 0xd7, 0x3c, 0x5d, 0x81, 0xf3, 0x2f, 0x7d, 0xb0, 0x68, 0xbe, 0xe5, 0x0f, 0x33, 0x3b, 0x7b,
+	0xc6, 0x29, 0x6f, 0x04, 0xc9, 0xee, 0xbf, 0xa1, 0x0e, 0xb5, 0x67, 0xde, 0xfc, 0x2a, 0x72, 0x07,
+	0x0a, 0x2d, 0x8d, 0xbb, 0x76, 0xe0, 0xec, 0xf6, 0x89, 0xad, 0xe2, 0x3a, 0x90, 0x6f, 0xcb, 0xd7,
+	0xe0, 0x02, 0x7f, 0x7b, 0x15, 0xae, 0xdb, 0x05, 0xcc, 0x86, 0x8c, 0xd3, 0x6a, 0xe5, 0x9e, 0x87,
+	0x3d, 0xf7, 0xfc, 0x41, 0xfb, 0xc8, 0x0e, 0x49, 0x84, 0x9b, 0xf2, 0x70, 0xc3, 0xf2, 0x90, 0xa4,
+	0x62, 0x09, 0x07, 0x32, 0x2d, 0xc2, 0x0e, 0x49, 0x78, 0xc0, 0xf9, 0x0e, 0x5c, 0xd3, 0xdd, 0x82,
+	0x82, 0x9b, 0x76, 0xc1, 0xb2, 0x3d, 0xc6, 0xdd, 0x2e, 0xa9, 0xad, 0x52, 0x15, 0x1e, 0xf6, 0x5c,
+	0x27, 0x51, 0x50, 0xba, 0x1d, 0x68, 0x2f, 0xd0, 0xc3, 0x6d, 0xbb, 0xed, 0x00, 0x55, 0xd1, 0xea,
+	0x6a, 0x9e, 0xe8, 0x76, 0x00, 0xd7, 0x0f, 0x74, 0x13, 0xab, 0xde, 0x70, 0x85, 0x8f, 0xec, 0x36,
+	0xb1, 0x9f, 0x96, 0xcc, 0xbd, 0x00, 0x71, 0xd3, 0x4c, 0x06, 0xe9, 0x26, 0xf6, 0x50, 0xc2, 0xd8,
+	0x1e, 0x6f, 0xce, 0xdd, 0x5c, 0x38, 0xb4, 0xdb, 0xe3, 0x71, 0xba, 0xd4, 0x88, 0xd0, 0xac, 0x42,
+	0xba, 0xc7, 0x3b, 0x9c, 0x51, 0xc6, 0xdc, 0x18, 0x8b, 0xab, 0xb3, 0x70, 0xc7, 0x6e, 0xda, 0x73,
+	0x6d, 0x78, 0x52, 0x09, 0xaa, 0x20, 0x6d, 0x3b, 0x75, 0x75, 0xe8, 0xb4, 0x3f, 0x9c, 0x5f, 0x85,
+	0x79, 0x06, 0x73, 0x2e, 0x4b, 0xc3, 0x9f, 0xdb, 0x79, 0x06, 0x5c, 0x4b, 0x94, 0x58, 0xe2, 0x8c,
+	0x32, 0xea, 0x19, 0x1c, 0xea, 0x8b, 0x9c, 0xbf, 0xeb, 0x83, 0x1b, 0xb3, 0xef, 0x31, 0xc3, 0x4f,
+	0x3b, 0x37, 0x6a, 0x5e, 0xd7, 0x49, 0x5d, 0xc6, 0x37, 0x4a, 0xe8, 0xaa, 0xbf, 0xe8, 0x83, 0xd7,
+	0x67, 0x5c, 0xcd, 0x86, 0xbb, 0x76, 0x8b, 0x2f, 0xa7, 0x75, 0xc7, 0xc7, 0x48, 0xdb, 0x9c, 0xa6,
+	0x80, 0x2e, 0xbe, 0x87, 0x1a, 0x9c, 0x6d, 0x37, 0xe6, 0x66, 0x26, 0xc3, 0xc7, 0x76, 0xdb, 0x8d,
+	0x41, 0x29, 0xa4, 0x8c, 0xab, 0xee, 0x55, 0x22, 0x38, 0x97, 0x6e, 0x66, 0x31, 0xdd, 0x6e, 0xa0,
+	0x99, 0xa5, 0xec, 0xe2, 0x88, 0x78, 0xf3, 0x0a, 0x3e, 0xb1, 0xbc, 0x38, 0x92, 0xe1, 0x74, 0x97,
+	0xf0, 0x37, 0x65, 0x04, 0x84, 0x5d, 0x1c, 0xe1, 0x01, 0xba, 0xeb, 0xd3, 0x24, 0x0e, 0xc2, 0xcf,
+	0xec, 0x76, 0x7d, 0x1b, 0x8c, 0xba, 0xcf, 0x98, 0xdc, 0x6a, 0x25, 0xa3, 0x74, 0xd7, 0xe7, 0xc9,
+	0x20, 0x35, 0xad, 0x6d, 0x9e, 0x0e, 0xdc, 0xb3, 0x33, 0xad, 0xdb, 0x98, 0xdf, 0x87, 0x34, 0x4f,
+	0xd4, 0xb4, 0x4e, 0xea, 0x07, 0xe7, 0xdf, 0xfa, 0xe0, 0xc7, 0x36, 0x99, 0x20, 0xf0, 0x73, 0xa6,
+	0x14, 0x1b, 0xaf, 0x89, 0xe1, 0xf8, 0x29, 0x13, 0xb5, 0x51, 0x49, 0xda, 0x6f, 0x04, 0xb5, 0x6d,
+	0x31, 0x55, 0x1a, 0xf6, 0xdc, 0x5b, 0x53, 0x43, 0x1d, 0xba, 0xda, 0xe9, 0x32, 0x5e, 0xa1, 0x6b,
+	0xb7, 0xda, 0xd5, 0x16, 0x75, 0x93, 0x52, 0x55, 0x6f, 0xb0, 0x85, 0xe9, 0x6a, 0xe7, 0x29, 0x28,
+	0x1d, 0x78, 0x52, 0x26, 0x14, 0xdc, 0xb7, 0x3c, 0xed, 0xc7, 0xd8, 0xdf, 0xc9, 0x71, 0x28, 0x7e,
+	0x9b, 0x06, 0x61, 0xa7, 0xfd, 0x3c, 0x40, 0xb7, 0x15, 0x5c, 0x7a, 0x03, 0x7c, 0x6a, 0xb7, 0xad,
+	0xd8, 0xa5, 0x14, 0xfe, 0x98, 0xba, 0x7e, 0xa4, 0xdb, 0x8a, 0xa0, 0x79, 0xa2, 0xc3, 0x5a, 0x93,
+	0xee, 0x0c, 0xbf, 0xb4, 0x1b, 0xd6, 0xeb, 0x25, 0x75, 0x9f, 0x32, 0xf9, 0x08, 0xab, 0x84, 0xd2,
+	0x61, 0x3d, 0x96, 0x41, 0x66, 0x7b, 0x67, 0xe7, 0x4d, 0xc2, 0x5f, 0xd8, 0xd9, 0xde, 0x3a, 0xda,
+	0xb6, 0xc1, 0x04, 0xec, 0x92, 0xe8, 0x50, 0x8d, 0xc4, 0x49, 0x65, 0xd4, 0xf6, 0x7a, 0xfa, 0x22,
+	0xb6, 0xea, 0xcf, 0x49, 0x8e, 0x84, 0xbf, 0xb2, 0x5b, 0xf5, 0x6b, 0xcd, 0x8f, 0x4b, 0x09, 0xfa,
+	0x66, 0xc9, 0x85, 0x74, 0xd5, 0xf7, 0x66, 0x94, 0x51, 0x2f, 0x48, 0xcd, 0x63, 0x83, 0xcf, 0xed,
+	0xbc, 0x20, 0x3a, 0xc4, 0x1e, 0x97, 0x44, 0x71, 0xdc, 0xf1, 0x20, 0xf5, 0x82, 0x26, 0x12, 0xc6,
+	0xcc, 0x9e, 0x9a, 0x65, 0x0a, 0xff, 0xd0, 0xd2, 0xec, 0x55, 0x54, 0xd1, 0x18, 0x29, 0x28, 0x33,
+	0x7b, 0x32, 0xe8, 0x1c, 0xb1, 0xfb, 0x1f, 0xf2, 0x6f, 0x2f, 0xc0, 0x3f, 0xb2, 0x7b, 0xe5, 0x6a,
+	0x99, 0x17, 0x35, 0xcb, 0x20, 0x7d, 0x65, 0x24, 0x61, 0xec, 0x95, 0xd5, 0xe4, 0x74, 0xf8, 0xb5,
+	0xe5, 0x2b, 0x57, 0x54, 0xe9, 0x95, 0x65, 0x94, 0xbd, 0xb2, 0x0c, 0x96, 0xe1, 0x7e, 0x5d, 0x1a,
+	0x32, 0x44, 0x96, 0xe1, 0x7e, 0x46, 0xde, 0xa9, 0xb8, 0x72, 0x97, 0x0b, 0x38, 0x0b, 0xf7, 0xab,
+	0xb0, 0xf3, 0xb7, 0xfc, 0x8e, 0x5b, 0x4e, 0xee, 0x87, 0x63, 0xcb, 0x59, 0x59, 0x7b, 0xac, 0x0d,
+	0x5f, 0x73, 0x0d, 0x4a, 0x2c, 0x63, 0xb3, 0x52, 0x5f, 0xc4, 0x4e, 0x01, 0x66, 0x66, 0xdb, 0x42,
+	0xdf, 0xee, 0x14, 0x60, 0xab, 0x16, 0xa0, 0x9a, 0x60, 0x7d, 0xd1, 0xb0, 0xe7, 0x5e, 0xc7, 0xda,
+	0x12, 0x3a, 0x1b, 0xd5, 0x5f, 0xf7, 0x80, 0xd8, 0x76, 0x68, 0xee, 0xd5, 0x44, 0x7e, 0x68, 0x8a,
+	0x60, 0x39, 0x34, 0x45, 0x8c, 0x99, 0xcc, 0xd9, 0xe9, 0xb0, 0x70, 0x62, 0xf7, 0x71, 0xea, 0x57,
+	0x79, 0xd6, 0xf0, 0xd5, 0xc5, 0x48, 0x2a, 0xa3, 0x1f, 0x67, 0xa2, 0x2f, 0x62, 0x1b, 0xfa, 0x19,
+	0xa9, 0xcc, 0x70, 0x6a, 0xb7, 0xa1, 0x6f, 0xfa, 0x5f, 0x09, 0x02, 0x68, 0x4b, 0xe8, 0x86, 0x1e,
+	0xeb, 0x0a, 0x9c, 0x3f, 0xeb, 0x83, 0xeb, 0xfa, 0x64, 0x63, 0x78, 0x60, 0x37, 0x83, 0xea, 0x0e,
+	0x28, 0xdd, 0x0f, 0xb5, 0x63, 0x38, 0x9c, 0xce, 0xa0, 0x89, 0x0a, 0xb3, 0xb3, 0x33, 0x7d, 0x36,
+	0x10, 0x24, 0x76, 0xee, 0x7b, 0xb9, 0xeb, 0x7e, 0x56, 0x93, 0xe5, 0xed, 0xb8, 0x58, 0x40, 0xdd,
+	0xf7, 0x44, 0x83, 0xb3, 0x30, 0xac, 0x94, 0x25, 0x07, 0x03, 0xcb, 0x30, 0x2c, 0xe3, 0xfd, 0x3c,
+	0x1e, 0xcb, 0xb7, 0x82, 0x6b, 0x88, 0x85, 0x61, 0x05, 0x84, 0x19, 0x2f, 0x6d, 0x02, 0x18, 0x4c,
+	0xec, 0xba, 0x7e, 0xaf, 0x24, 0x57, 0x49, 0x0a, 0xdc, 0x4b, 0xab, 0x38, 0xed, 0xfa, 0x44, 0x85,
+	0x9d, 0x7f, 0xee, 0x83, 0x1f, 0x19, 0x13, 0xba, 0x60, 0xca, 0xda, 0x83, 0x2c, 0xbf, 0x42, 0x23,
+	0x47, 0x33, 0x6b, 0xe7, 0x57, 0x19, 0xf6, 0xdc, 0xb7, 0x92, 0xb9, 0x35, 0xd8, 0xb1, 0xae, 0x94,
+	0x52, 0x03, 0x8f, 0x2c, 0x8f, 0x75, 0xc9, 0x29, 0x2e, 0xe3, 0x05, 0xed, 0xd1, 0xaa, 0x00, 0xb1,
+	0x63, 0x5d, 0x01, 0x61, 0xdf, 0x48, 0x9b, 0x8a, 0x08, 0x8f, 0xed, 0xbe, 0xd1, 0x93, 0x38, 0xff,
+	0xb2, 0xe5, 0x0a, 0xc1, 0x62, 0x19, 0xa7, 0xdf, 0x28, 0x52, 0x61, 0x76, 0x29, 0x41, 0x75, 0xac,
+	0x4e, 0x2c, 0x2f, 0x25, 0xe8, 0x1c, 0x2a, 0x8d, 0x23, 0x75, 0x39, 0x94, 0x1d, 0x28, 0xe6, 0xc9,
+	0x28, 0xbf, 0x0d, 0x02, 0x4f, 0x6d, 0x3d, 0x99, 0x92, 0x2a, 0x5d, 0x64, 0x93, 0xd1, 0xd2, 0x93,
+	0x91, 0x40, 0x66, 0x21, 0x67, 0xfc, 0x3e, 0x18, 0xfc, 0xb5, 0xe5, 0xad, 0x5a, 0x46, 0xdf, 0x69,
+	0xd8, 0xc2, 0xe6, 0x59, 0x2d, 0x61, 0xb7, 0x6a, 0x75, 0x05, 0x74, 0xc0, 0xc9, 0x69, 0x7d, 0xf0,
+	0x3b, 0xbb, 0x01, 0xe7, 0x52, 0x9e, 0x78, 0x92, 0x26, 0x42, 0x74, 0xc0, 0xa5, 0x02, 0xe2, 0xf8,
+	0xe0, 0xa2, 0x90, 0x56, 0x0f, 0xff, 0xd8, 0x2e, 0xf4, 0xb2, 0x53, 0x92, 0xf8, 0x1b, 0xf4, 0x2d,
+	0x30, 0xec, 0xb9, 0x17, 0x08, 0xf7, 0x5c, 0x5a, 0x5c, 0x6d, 0xfe, 0x28, 0xfc, 0x13, 0x4b, 0x8b,
+	0x5b, 0xb1, 0xab, 0xa3, 0x08, 0xde, 0xf8, 0xa8, 0x05, 0xcc, 0xe2, 0x6a, 0x70, 0xe7, 0x1b, 0x70,
+	0x49, 0xca, 0x3a, 0x83, 0xbf, 0xe9, 0xdb, 0xed, 0x0b, 0x9f, 0x92, 0x10, 0x7f, 0x15, 0x47, 0xdc,
+	0x1b, 0x0b, 0x08, 0xdd, 0x17, 0xe6, 0x3c, 0xb0, 0x7e, 0x81, 0x4f, 0xb4, 0x5a, 0xfc, 0xaf, 0x3e,
+	0xb8, 0x28, 0xa4, 0x28, 0x39, 0x11, 0xb8, 0x5a, 0x86, 0xa3, 0x12, 0x94, 0x1f, 0x8c, 0x70, 0x80,
+	0x59, 0x73, 0xe1, 0x19, 0x96, 0xf0, 0xf5, 0x71, 0xa7, 0x74, 0xa7, 0x32, 0x2a, 0xb5, 0x87, 0xf2,
+	0x83, 0xad, 0x52, 0x8c, 0x7b, 0x65, 0x22, 0x21, 0xd9, 0x0d, 0x1f, 0x5c, 0x96, 0xab, 0x39, 0x6f,
+	0x82, 0x32, 0x84, 0x35, 0x8a, 0x50, 0x58, 0x26, 0x83, 0x9d, 0x73, 0xcf, 0x31, 0xe4, 0x09, 0x0a,
+	0xb1, 0xf3, 0x1e, 0x78, 0x99, 0x44, 0x3e, 0x3e, 0x66, 0xd9, 0x46, 0xe7, 0x57, 0x6e, 0xd6, 0x8d,
+	0xaa, 0x13, 0xdd, 0x96, 0x76, 0xa2, 0xfc, 0xee, 0x9d, 0x32, 0x77, 0xab, 0xac, 0xb9, 0xf8, 0xfd,
+	0x19, 0x70, 0x81, 0x4f, 0xa0, 0x72, 0xee, 0x80, 0xeb, 0x45, 0x94, 0x14, 0xe3, 0x80, 0x64, 0x07,
+	0xb5, 0x31, 0x6b, 0x73, 0xcf, 0xce, 0xb9, 0xd7, 0xb8, 0xd2, 0x36, 0xbf, 0x2a, 0x01, 0x50, 0x59,
+	0xa1, 0xeb, 0x34, 0xae, 0xb2, 0x31, 0x77, 0x3b, 0xae, 0xd1, 0x75, 0x42, 0xd7, 0xf5, 0x44, 0x8b,
+	0x3b, 0xdf, 0x34, 0x3e, 0x41, 0x7d, 0x3c, 0x5f, 0xeb, 0x2b, 0x53, 0xd8, 0xee, 0x74, 0x3a, 0xa0,
+	0xaf, 0xb5, 0x5d, 0x4b, 0x34, 0xe8, 0xe2, 0xff, 0xf6, 0xc1, 0x75, 0x7d, 0xf3, 0x9c, 0x8f, 0xc1,
+	0x4d, 0xea, 0x39, 0xb1, 0x9c, 0x96, 0xaa, 0x3d, 0x3e, 0xce, 0xbc, 0x94, 0x24, 0x2c, 0x19, 0xae,
+	0x4c, 0xb4, 0x7b, 0xa3, 0xae, 0x52, 0x0a, 0xd9, 0x6c, 0x2b, 0x38, 0x9b, 0xe0, 0xa5, 0x43, 0x7c,
+	0x52, 0x25, 0xcd, 0xad, 0x98, 0xd2, 0xee, 0xa4, 0x46, 0x7c, 0x8a, 0x4f, 0x5c, 0x4a, 0x77, 0xde,
+	0x05, 0xd7, 0xe4, 0x56, 0xb0, 0x11, 0xf2, 0x32, 0x53, 0xef, 0x88, 0xea, 0xd9, 0x50, 0x79, 0x1b,
+	0x5c, 0x24, 0xd9, 0x08, 0x1f, 0xe3, 0x30, 0xc9, 0xc9, 0x38, 0xc0, 0xf0, 0x95, 0x5b, 0xfd, 0xdb,
+	0x67, 0xdd, 0x0b, 0x24, 0xdb, 0x6a, 0xb0, 0xc5, 0x53, 0x70, 0x4d, 0xd7, 0x4b, 0xce, 0xb8, 0x09,
+	0x8d, 0xe4, 0x71, 0x42, 0xbc, 0x11, 0x8e, 0xf2, 0x94, 0xe0, 0x3a, 0xf9, 0xf1, 0x5d, 0xbb, 0xb7,
+	0x78, 0x4a, 0xa9, 0x5b, 0x51, 0x9e, 0x9e, 0xd4, 0xf1, 0x8f, 0x06, 0x21, 0x38, 0x5b, 0xff, 0x6f,
+	0x16, 0x8b, 0x0b, 0x0d, 0x5f, 0x71, 0xfd, 0x3c, 0x1b, 0x83, 0xd9, 0x1e, 0x1d, 0xe1, 0x7b, 0xfd,
+	0xaf, 0x36, 0xab, 0xea, 0xd3, 0x38, 0x40, 0xd1, 0x74, 0x29, 0x4e, 0xa7, 0xcb, 0x53, 0x1c, 0xb1,
+	0xf1, 0x5f, 0x67, 0x8c, 0x26, 0x24, 0x9b, 0x95, 0x40, 0xfa, 0xa0, 0xfc, 0xf3, 0xfd, 0x99, 0x97,
+	0x1e, 0x0d, 0x06, 0xbf, 0x3d, 0xf3, 0x56, 0x99, 0x8a, 0xb9, 0x34, 0xf0, 0xb9, 0x84, 0xcd, 0xa5,
+	0x67, 0xab, 0xe5, 0x64, 0xce, 0xfe, 0xb3, 0xae, 0xf0, 0x7c, 0xe0, 0x67, 0xcf, 0x9b, 0x0a, 0xcf,
+	0x9f, 0xad, 0x3e, 0x2f, 0x2b, 0xfc, 0xcf, 0x99, 0xc5, 0x12, 0x5d, 0x5b, 0x1b, 0xf8, 0xd9, 0xda,
+	0x5a, 0x53, 0x65, 0x6d, 0xed, 0xd9, 0xea, 0xda, 0x5a, 0x59, 0x69, 0xfc, 0x0a, 0x6b, 0xdd, 0xea,
+	0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x1d, 0x00, 0x9a, 0xb7, 0x53, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/extension_feed_item_error.pb.go b/googleapis/ads/googleads/v3/errors/extension_feed_item_error.pb.go
new file mode 100644
index 0000000..ab021be
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/extension_feed_item_error.pb.go
@@ -0,0 +1,359 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/extension_feed_item_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible extension feed item errors.
+type ExtensionFeedItemErrorEnum_ExtensionFeedItemError int32
+
+const (
+	// Enum unspecified.
+	ExtensionFeedItemErrorEnum_UNSPECIFIED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 0
+	// The received error code is not known in this version.
+	ExtensionFeedItemErrorEnum_UNKNOWN ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 1
+	// Value is not within the accepted range.
+	ExtensionFeedItemErrorEnum_VALUE_OUT_OF_RANGE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 2
+	// Url list is too long.
+	ExtensionFeedItemErrorEnum_URL_LIST_TOO_LONG ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 3
+	// Cannot have a geo targeting restriction without having geo targeting.
+	ExtensionFeedItemErrorEnum_CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 4
+	// Cannot simultaneously set sitelink field with final urls.
+	ExtensionFeedItemErrorEnum_CANNOT_SET_WITH_FINAL_URLS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 5
+	// Must set field with final urls.
+	ExtensionFeedItemErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 6
+	// Phone number for a call extension is invalid.
+	ExtensionFeedItemErrorEnum_INVALID_PHONE_NUMBER ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 7
+	// Phone number for a call extension is not supported for the given country
+	// code.
+	ExtensionFeedItemErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 8
+	// A carrier specific number in short format is not allowed for call
+	// extensions.
+	ExtensionFeedItemErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 9
+	// Premium rate numbers are not allowed for call extensions.
+	ExtensionFeedItemErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 10
+	// Phone number type for a call extension is not allowed.
+	// For example, personal number is not allowed for a call extension in
+	// most regions.
+	ExtensionFeedItemErrorEnum_DISALLOWED_NUMBER_TYPE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 11
+	// Phone number for a call extension does not meet domestic format
+	// requirements.
+	ExtensionFeedItemErrorEnum_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 12
+	// Vanity phone numbers (i.e. those including letters) are not allowed for
+	// call extensions.
+	ExtensionFeedItemErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 13
+	// Call conversion action provided for a call extension is invalid.
+	ExtensionFeedItemErrorEnum_INVALID_CALL_CONVERSION_ACTION ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 14
+	// For a call extension, the customer is not whitelisted for call tracking.
+	ExtensionFeedItemErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 15
+	// Call tracking is not supported for the given country for a call
+	// extension.
+	ExtensionFeedItemErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 16
+	// Customer hasn't consented for call recording, which is required for
+	// creating/updating call feed items. Please see
+	// https://support.google.com/google-ads/answer/7412639.
+	ExtensionFeedItemErrorEnum_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 17
+	// App id provided for an app extension is invalid.
+	ExtensionFeedItemErrorEnum_INVALID_APP_ID ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 18
+	// Quotation marks present in the review text for a review extension.
+	ExtensionFeedItemErrorEnum_QUOTES_IN_REVIEW_EXTENSION_SNIPPET ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 19
+	// Hyphen character present in the review text for a review extension.
+	ExtensionFeedItemErrorEnum_HYPHENS_IN_REVIEW_EXTENSION_SNIPPET ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 20
+	// A blacklisted review source name or url was provided for a review
+	// extension.
+	ExtensionFeedItemErrorEnum_REVIEW_EXTENSION_SOURCE_INELIGIBLE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 21
+	// Review source name should not be found in the review text.
+	ExtensionFeedItemErrorEnum_SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 22
+	// Inconsistent currency codes.
+	ExtensionFeedItemErrorEnum_INCONSISTENT_CURRENCY_CODES ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 23
+	// Price extension cannot have duplicated headers.
+	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_DUPLICATED_HEADERS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 24
+	// Price item cannot have duplicated header and description.
+	ExtensionFeedItemErrorEnum_PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 25
+	// Price extension has too few items.
+	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_TOO_FEW_ITEMS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 26
+	// Price extension has too many items.
+	ExtensionFeedItemErrorEnum_PRICE_EXTENSION_HAS_TOO_MANY_ITEMS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 27
+	// The input value is not currently supported.
+	ExtensionFeedItemErrorEnum_UNSUPPORTED_VALUE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 28
+	// The input value is not currently supported in the selected language of an
+	// extension.
+	ExtensionFeedItemErrorEnum_UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 29
+	// Unknown or unsupported device preference.
+	ExtensionFeedItemErrorEnum_INVALID_DEVICE_PREFERENCE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 30
+	// Invalid feed item schedule end time (i.e., endHour = 24 and endMinute !=
+	// 0).
+	ExtensionFeedItemErrorEnum_INVALID_SCHEDULE_END ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 31
+	// Date time zone does not match the account's time zone.
+	ExtensionFeedItemErrorEnum_DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 32
+	// Invalid structured snippet header.
+	ExtensionFeedItemErrorEnum_INVALID_SNIPPETS_HEADER ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 33
+	// Cannot operate on removed feed item.
+	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_REMOVED_FEED_ITEM ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 34
+	// Phone number not supported when call tracking enabled for country.
+	ExtensionFeedItemErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 35
+	// Cannot set call_conversion_action while call_conversion_tracking_enabled
+	// is set to true.
+	ExtensionFeedItemErrorEnum_CONFLICTING_CALL_CONVERSION_SETTINGS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 36
+	// The type of the input extension feed item doesn't match the existing
+	// extension feed item.
+	ExtensionFeedItemErrorEnum_EXTENSION_TYPE_MISMATCH ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 37
+	// The oneof field extension i.e. subtype of extension feed item is
+	// required.
+	ExtensionFeedItemErrorEnum_EXTENSION_SUBTYPE_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 38
+	// The referenced feed item is not mapped to a supported extension type.
+	ExtensionFeedItemErrorEnum_EXTENSION_TYPE_UNSUPPORTED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 39
+	// Cannot operate on a Feed with more than one active FeedMapping.
+	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 40
+	// Cannot operate on a Feed that has key attributes.
+	ExtensionFeedItemErrorEnum_CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 41
+	// Input price is not in a valid format.
+	ExtensionFeedItemErrorEnum_INVALID_PRICE_FORMAT ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 42
+	// The promotion time is invalid.
+	ExtensionFeedItemErrorEnum_PROMOTION_INVALID_TIME ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 43
+	// This field has too many decimal places specified.
+	ExtensionFeedItemErrorEnum_TOO_MANY_DECIMAL_PLACES_SPECIFIED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 44
+	// Concrete sub type of ExtensionFeedItem is required for this operation.
+	ExtensionFeedItemErrorEnum_CONCRETE_EXTENSION_TYPE_REQUIRED ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 45
+	// Feed item schedule end time must be after start time.
+	ExtensionFeedItemErrorEnum_SCHEDULE_END_NOT_AFTER_START ExtensionFeedItemErrorEnum_ExtensionFeedItemError = 46
+)
+
+var ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "VALUE_OUT_OF_RANGE",
+	3:  "URL_LIST_TOO_LONG",
+	4:  "CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING",
+	5:  "CANNOT_SET_WITH_FINAL_URLS",
+	6:  "CANNOT_SET_WITHOUT_FINAL_URLS",
+	7:  "INVALID_PHONE_NUMBER",
+	8:  "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
+	9:  "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
+	10: "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
+	11: "DISALLOWED_NUMBER_TYPE",
+	12: "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
+	13: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
+	14: "INVALID_CALL_CONVERSION_ACTION",
+	15: "CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING",
+	16: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	17: "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
+	18: "INVALID_APP_ID",
+	19: "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
+	20: "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
+	21: "REVIEW_EXTENSION_SOURCE_INELIGIBLE",
+	22: "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
+	23: "INCONSISTENT_CURRENCY_CODES",
+	24: "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
+	25: "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
+	26: "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
+	27: "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS",
+	28: "UNSUPPORTED_VALUE",
+	29: "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE",
+	30: "INVALID_DEVICE_PREFERENCE",
+	31: "INVALID_SCHEDULE_END",
+	32: "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
+	33: "INVALID_SNIPPETS_HEADER",
+	34: "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
+	35: "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
+	36: "CONFLICTING_CALL_CONVERSION_SETTINGS",
+	37: "EXTENSION_TYPE_MISMATCH",
+	38: "EXTENSION_SUBTYPE_REQUIRED",
+	39: "EXTENSION_TYPE_UNSUPPORTED",
+	40: "CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS",
+	41: "CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES",
+	42: "INVALID_PRICE_FORMAT",
+	43: "PROMOTION_INVALID_TIME",
+	44: "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
+	45: "CONCRETE_EXTENSION_TYPE_REQUIRED",
+	46: "SCHEDULE_END_NOT_AFTER_START",
+}
+
+var ExtensionFeedItemErrorEnum_ExtensionFeedItemError_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"VALUE_OUT_OF_RANGE": 2,
+	"URL_LIST_TOO_LONG":  3,
+	"CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING":           4,
+	"CANNOT_SET_WITH_FINAL_URLS":                               5,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                            6,
+	"INVALID_PHONE_NUMBER":                                     7,
+	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                   8,
+	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                9,
+	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                          10,
+	"DISALLOWED_NUMBER_TYPE":                                   11,
+	"INVALID_DOMESTIC_PHONE_NUMBER_FORMAT":                     12,
+	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                          13,
+	"INVALID_CALL_CONVERSION_ACTION":                           14,
+	"CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING":                15,
+	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                   16,
+	"CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED":             17,
+	"INVALID_APP_ID":                                           18,
+	"QUOTES_IN_REVIEW_EXTENSION_SNIPPET":                       19,
+	"HYPHENS_IN_REVIEW_EXTENSION_SNIPPET":                      20,
+	"REVIEW_EXTENSION_SOURCE_INELIGIBLE":                       21,
+	"SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT":                     22,
+	"INCONSISTENT_CURRENCY_CODES":                              23,
+	"PRICE_EXTENSION_HAS_DUPLICATED_HEADERS":                   24,
+	"PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION":         25,
+	"PRICE_EXTENSION_HAS_TOO_FEW_ITEMS":                        26,
+	"PRICE_EXTENSION_HAS_TOO_MANY_ITEMS":                       27,
+	"UNSUPPORTED_VALUE":                                        28,
+	"UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE":                   29,
+	"INVALID_DEVICE_PREFERENCE":                                30,
+	"INVALID_SCHEDULE_END":                                     31,
+	"DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE":                   32,
+	"INVALID_SNIPPETS_HEADER":                                  33,
+	"CANNOT_OPERATE_ON_REMOVED_FEED_ITEM":                      34,
+	"PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY": 35,
+	"CONFLICTING_CALL_CONVERSION_SETTINGS":                     36,
+	"EXTENSION_TYPE_MISMATCH":                                  37,
+	"EXTENSION_SUBTYPE_REQUIRED":                               38,
+	"EXTENSION_TYPE_UNSUPPORTED":                               39,
+	"CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS":            40,
+	"CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES":               41,
+	"INVALID_PRICE_FORMAT":                                     42,
+	"PROMOTION_INVALID_TIME":                                   43,
+	"TOO_MANY_DECIMAL_PLACES_SPECIFIED":                        44,
+	"CONCRETE_EXTENSION_TYPE_REQUIRED":                         45,
+	"SCHEDULE_END_NOT_AFTER_START":                             46,
+}
+
+func (x ExtensionFeedItemErrorEnum_ExtensionFeedItemError) String() string {
+	return proto.EnumName(ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name, int32(x))
+}
+
+func (ExtensionFeedItemErrorEnum_ExtensionFeedItemError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_9d791ac5581cafbd, []int{0, 0}
+}
+
+// Container for enum describing possible extension feed item error.
+type ExtensionFeedItemErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ExtensionFeedItemErrorEnum) Reset()         { *m = ExtensionFeedItemErrorEnum{} }
+func (m *ExtensionFeedItemErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ExtensionFeedItemErrorEnum) ProtoMessage()    {}
+func (*ExtensionFeedItemErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9d791ac5581cafbd, []int{0}
+}
+
+func (m *ExtensionFeedItemErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionFeedItemErrorEnum.Unmarshal(m, b)
+}
+func (m *ExtensionFeedItemErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionFeedItemErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ExtensionFeedItemErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionFeedItemErrorEnum.Merge(m, src)
+}
+func (m *ExtensionFeedItemErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ExtensionFeedItemErrorEnum.Size(m)
+}
+func (m *ExtensionFeedItemErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionFeedItemErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionFeedItemErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ExtensionFeedItemErrorEnum_ExtensionFeedItemError", ExtensionFeedItemErrorEnum_ExtensionFeedItemError_name, ExtensionFeedItemErrorEnum_ExtensionFeedItemError_value)
+	proto.RegisterType((*ExtensionFeedItemErrorEnum)(nil), "google.ads.googleads.v3.errors.ExtensionFeedItemErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/extension_feed_item_error.proto", fileDescriptor_9d791ac5581cafbd)
+}
+
+var fileDescriptor_9d791ac5581cafbd = []byte{
+	// 1087 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdf, 0x72, 0x13, 0x37,
+	0x17, 0xff, 0x08, 0x5f, 0xa1, 0x15, 0x05, 0x84, 0x0a, 0x01, 0x12, 0x08, 0x89, 0x13, 0x02, 0xa4,
+	0x64, 0x4d, 0xeb, 0x5e, 0x74, 0xdc, 0x4e, 0x67, 0x64, 0xed, 0xb1, 0xad, 0x89, 0x56, 0x12, 0x92,
+	0xd6, 0xc6, 0x4c, 0x66, 0x34, 0x69, 0xed, 0x7a, 0x32, 0x43, 0xec, 0x4c, 0xec, 0x32, 0x7d, 0x9e,
+	0x5e, 0xf6, 0x51, 0xfa, 0x00, 0x7d, 0x88, 0xde, 0xb7, 0xd7, 0x1d, 0x69, 0x6d, 0xb3, 0x69, 0x4c,
+	0xae, 0xbc, 0x3e, 0xfa, 0x9d, 0xff, 0xbf, 0x73, 0x0e, 0xfa, 0x61, 0x38, 0x1e, 0x0f, 0xdf, 0x0d,
+	0xaa, 0x47, 0xfd, 0x49, 0xb5, 0xf8, 0x0c, 0x5f, 0xef, 0x6b, 0xd5, 0xc1, 0xd9, 0xd9, 0xf8, 0x6c,
+	0x52, 0x1d, 0xfc, 0x3a, 0x1d, 0x8c, 0x26, 0xc7, 0xe3, 0x91, 0xff, 0x79, 0x30, 0xe8, 0xfb, 0xe3,
+	0xe9, 0xe0, 0xc4, 0xc7, 0xa7, 0xe4, 0xf4, 0x6c, 0x3c, 0x1d, 0x93, 0x8d, 0x42, 0x29, 0x39, 0xea,
+	0x4f, 0x92, 0x85, 0x7e, 0xf2, 0xbe, 0x96, 0x14, 0xfa, 0x6b, 0x8f, 0xe6, 0xf6, 0x4f, 0x8f, 0xab,
+	0x47, 0xa3, 0xd1, 0x78, 0x7a, 0x34, 0x3d, 0x1e, 0x8f, 0x26, 0x85, 0x76, 0xe5, 0xef, 0x9b, 0x68,
+	0x0d, 0xe6, 0x1e, 0x9a, 0x83, 0x41, 0x9f, 0x4f, 0x07, 0x27, 0x10, 0x34, 0x61, 0xf4, 0xcb, 0x49,
+	0xe5, 0xcf, 0x9b, 0x68, 0x75, 0xf9, 0x33, 0xb9, 0x8d, 0x6e, 0xe4, 0xd2, 0x6a, 0x60, 0xbc, 0xc9,
+	0x21, 0xc5, 0xff, 0x23, 0x37, 0xd0, 0xf5, 0x5c, 0x1e, 0x48, 0xd5, 0x95, 0xf8, 0x0a, 0x59, 0x45,
+	0xa4, 0x43, 0x45, 0x0e, 0x5e, 0xe5, 0xce, 0xab, 0xa6, 0x37, 0x54, 0xb6, 0x00, 0xaf, 0x90, 0x7b,
+	0xe8, 0x4e, 0x6e, 0x84, 0x17, 0xdc, 0x3a, 0xef, 0x94, 0xf2, 0x42, 0xc9, 0x16, 0xbe, 0x4a, 0xbe,
+	0x46, 0x09, 0xa3, 0x52, 0x2a, 0xe7, 0xdb, 0xb4, 0x03, 0xde, 0x80, 0x75, 0x86, 0x33, 0xc7, 0x95,
+	0xf4, 0x4a, 0x7a, 0xc8, 0xb4, 0xeb, 0xf9, 0x16, 0x28, 0xef, 0xa8, 0x69, 0x81, 0xe3, 0xb2, 0x85,
+	0xff, 0x4f, 0x36, 0xd0, 0xda, 0x4c, 0xc7, 0x82, 0xf3, 0x5d, 0xee, 0xda, 0xbe, 0xc9, 0x25, 0x15,
+	0x3e, 0x37, 0xc2, 0xe2, 0x4f, 0xc8, 0x16, 0x7a, 0xfc, 0x9f, 0xf7, 0x10, 0x4b, 0x09, 0x72, 0x8d,
+	0x3c, 0x40, 0x77, 0xb9, 0xec, 0x50, 0xc1, 0x53, 0xaf, 0xdb, 0x4a, 0x82, 0x97, 0x79, 0xd6, 0x00,
+	0x83, 0xaf, 0x93, 0x3d, 0xb4, 0x5b, 0x96, 0xf8, 0x68, 0x26, 0xd7, 0x5a, 0x19, 0x07, 0xa9, 0x6f,
+	0x2a, 0xe3, 0x99, 0xca, 0xa5, 0x33, 0x3d, 0xfc, 0x29, 0xd9, 0x47, 0x2f, 0x18, 0x35, 0x86, 0x83,
+	0xf1, 0xb3, 0x7a, 0x30, 0x6f, 0xdb, 0xca, 0xb8, 0xb2, 0x32, 0x15, 0x42, 0x75, 0x21, 0xc5, 0x9f,
+	0x91, 0x6d, 0xf4, 0x44, 0x1b, 0xc8, 0x78, 0x9e, 0x79, 0x43, 0x1d, 0x2c, 0x03, 0x21, 0xb2, 0x86,
+	0x56, 0x53, 0x6e, 0x67, 0xff, 0xe7, 0x10, 0xd7, 0xd3, 0x80, 0x6f, 0x90, 0xe7, 0x68, 0x67, 0x1e,
+	0x75, 0xaa, 0x32, 0xb0, 0x8e, 0xb3, 0x73, 0xe1, 0x87, 0xf0, 0x32, 0xea, 0xf0, 0xe7, 0xc1, 0x55,
+	0x87, 0x4a, 0xee, 0x7a, 0xfe, 0x42, 0x32, 0x73, 0x57, 0x37, 0x49, 0x05, 0x6d, 0xcc, 0xcd, 0x31,
+	0x2a, 0x84, 0x67, 0x4a, 0x76, 0xc0, 0xd8, 0x50, 0x7b, 0x1a, 0x5b, 0x80, 0x6f, 0xc5, 0x14, 0x73,
+	0xeb, 0x54, 0x36, 0xd3, 0xee, 0xb6, 0xb9, 0x83, 0xd0, 0xc4, 0x79, 0x31, 0xa8, 0x10, 0xce, 0x50,
+	0x76, 0x10, 0x5a, 0x73, 0x3b, 0x54, 0xaf, 0x2c, 0xb9, 0xa4, 0x7a, 0x98, 0xbc, 0x42, 0x2f, 0x17,
+	0xa6, 0x99, 0x92, 0x16, 0xa4, 0x5b, 0x98, 0xf4, 0x06, 0x98, 0x32, 0x69, 0x30, 0x61, 0xe0, 0x75,
+	0xce, 0x0d, 0xa4, 0xf8, 0x0e, 0x21, 0xe8, 0xd6, 0x3c, 0x60, 0xaa, 0xb5, 0xe7, 0x29, 0x26, 0x64,
+	0x17, 0x55, 0x5e, 0xe7, 0xca, 0x81, 0xf5, 0x5c, 0x7a, 0x03, 0x1d, 0x0e, 0x5d, 0x0f, 0x6f, 0x1c,
+	0xc8, 0x98, 0x87, 0x95, 0x5c, 0x6b, 0x70, 0xf8, 0x0b, 0xf2, 0x0c, 0x6d, 0xb7, 0x7b, 0xba, 0x0d,
+	0xf2, 0x72, 0xe0, 0xdd, 0x60, 0xf0, 0xe2, 0xab, 0xca, 0x0d, 0x03, 0xcf, 0x25, 0x08, 0xde, 0xe2,
+	0x0d, 0x01, 0xf8, 0x5e, 0x68, 0xc6, 0x4c, 0x2c, 0x69, 0x06, 0x4b, 0x8d, 0x3a, 0x78, 0xe3, 0xf0,
+	0x2a, 0x79, 0x82, 0xd6, 0xb9, 0x0c, 0x19, 0x86, 0xb2, 0x49, 0xe7, 0x59, 0x6e, 0x0c, 0x48, 0xd6,
+	0xf3, 0x4c, 0xa5, 0x60, 0xf1, 0xfd, 0xc8, 0x39, 0xc3, 0x19, 0x94, 0x54, 0xdb, 0xd4, 0xfa, 0x34,
+	0xd7, 0x82, 0x33, 0x1a, 0x2a, 0xd7, 0x06, 0x9a, 0x82, 0xb1, 0xf8, 0x01, 0xf9, 0x06, 0xbd, 0x2a,
+	0xb0, 0xdc, 0x41, 0xb6, 0x1c, 0xe6, 0xa9, 0x4c, 0x7d, 0x0a, 0x96, 0x19, 0xae, 0x63, 0x1b, 0x1f,
+	0x92, 0xa7, 0x68, 0x6b, 0x99, 0x87, 0x30, 0x88, 0x4d, 0xe8, 0x46, 0x5b, 0x16, 0xaf, 0x85, 0xdc,
+	0x3f, 0x06, 0xcb, 0xa8, 0xec, 0xcd, 0x70, 0xeb, 0x71, 0x98, 0xe5, 0x87, 0xbe, 0xc6, 0x81, 0xc7,
+	0x8f, 0x42, 0x1e, 0x17, 0xc4, 0xa1, 0x30, 0x16, 0x04, 0xb0, 0x20, 0x11, 0x54, 0xb6, 0x72, 0xda,
+	0x02, 0xfc, 0x98, 0x3c, 0x46, 0x0f, 0x17, 0x5c, 0x86, 0x4e, 0xf0, 0xa9, 0x0d, 0x34, 0x21, 0x14,
+	0x06, 0xf0, 0x46, 0x79, 0x40, 0x2d, 0x6b, 0x43, 0x9a, 0x0b, 0xf0, 0x20, 0x53, 0xfc, 0x24, 0x38,
+	0x49, 0xc3, 0xf4, 0x38, 0x9e, 0x81, 0xcf, 0x72, 0xeb, 0x7c, 0x23, 0x3a, 0xa1, 0x2c, 0x52, 0xab,
+	0x90, 0xbf, 0x55, 0x12, 0xf0, 0x26, 0x59, 0x47, 0xf7, 0x17, 0x56, 0x8a, 0x06, 0xdb, 0x59, 0x8d,
+	0xf0, 0x56, 0x60, 0xc4, 0x6c, 0x4d, 0x28, 0x0d, 0x71, 0x20, 0x55, 0xe8, 0x61, 0xa6, 0x3a, 0x81,
+	0xaa, 0x00, 0x69, 0x4c, 0x17, 0x57, 0xc8, 0xf7, 0xe8, 0xdb, 0x4b, 0x56, 0x42, 0xdc, 0x3f, 0xe7,
+	0x48, 0x5f, 0xa6, 0xf9, 0x76, 0xe0, 0x09, 0x53, 0xb2, 0x29, 0xc2, 0x56, 0x93, 0xad, 0x0b, 0x93,
+	0x66, 0xc1, 0x05, 0xb9, 0xc5, 0x3b, 0x21, 0xda, 0x12, 0x77, 0x7a, 0x1a, 0x7c, 0xc6, 0x6d, 0x46,
+	0x1d, 0x6b, 0xe3, 0xa7, 0x61, 0xe9, 0x95, 0xf8, 0x98, 0x37, 0xe2, 0xfb, 0x62, 0x36, 0x76, 0xcf,
+	0xbf, 0xc7, 0xc7, 0x52, 0x2b, 0xf0, 0x33, 0xf2, 0x15, 0xda, 0xbf, 0x98, 0x6d, 0xcc, 0x32, 0x26,
+	0x90, 0xe5, 0xc2, 0x71, 0x2d, 0xc0, 0x67, 0x54, 0xeb, 0x18, 0xcf, 0x73, 0x92, 0xa0, 0xbd, 0xcb,
+	0x54, 0x0e, 0xa0, 0xe7, 0xa9, 0x73, 0x86, 0x37, 0x72, 0x07, 0x16, 0xbf, 0x38, 0xb7, 0x54, 0x23,
+	0x8b, 0x66, 0xeb, 0x68, 0x2f, 0x2c, 0x35, 0x6d, 0x54, 0xa6, 0xe2, 0x5e, 0x9f, 0x63, 0x42, 0xa3,
+	0xf0, 0x97, 0x81, 0x9a, 0x0b, 0x7e, 0xa5, 0xc0, 0x78, 0x46, 0x85, 0xd7, 0x82, 0x32, 0xb0, 0xfe,
+	0xc3, 0x91, 0x79, 0x49, 0x76, 0xd0, 0x26, 0x53, 0x92, 0x19, 0x70, 0x65, 0x76, 0x9e, 0xaf, 0xc2,
+	0x3e, 0xd9, 0x44, 0x8f, 0xca, 0x74, 0x29, 0x16, 0x5e, 0xd3, 0x85, 0x05, 0xed, 0xa8, 0x71, 0x38,
+	0x69, 0xfc, 0x73, 0x05, 0x55, 0x7e, 0x1a, 0x9f, 0x24, 0x97, 0x1f, 0xcf, 0xc6, 0xfa, 0xf2, 0xe3,
+	0xa7, 0xc3, 0xed, 0xd4, 0x57, 0xde, 0xa6, 0x33, 0xf5, 0xe1, 0xf8, 0xdd, 0xd1, 0x68, 0x98, 0x8c,
+	0xcf, 0x86, 0xd5, 0xe1, 0x60, 0x14, 0x2f, 0xeb, 0xfc, 0x96, 0x9f, 0x1e, 0x4f, 0x3e, 0x76, 0xda,
+	0xbf, 0x2b, 0x7e, 0x7e, 0x5b, 0xb9, 0xda, 0xa2, 0xf4, 0xf7, 0x95, 0x8d, 0x56, 0x61, 0x8c, 0xf6,
+	0x27, 0x49, 0xf1, 0x19, 0xbe, 0x3a, 0xb5, 0x24, 0xba, 0x9c, 0xfc, 0x31, 0x07, 0x1c, 0xd2, 0xfe,
+	0xe4, 0x70, 0x01, 0x38, 0xec, 0xd4, 0x0e, 0x0b, 0xc0, 0x5f, 0x2b, 0x95, 0x42, 0x5a, 0xaf, 0xd3,
+	0xfe, 0xa4, 0x5e, 0x5f, 0x40, 0xea, 0xf5, 0x4e, 0xad, 0x5e, 0x2f, 0x40, 0x3f, 0x5e, 0x8b, 0xd1,
+	0xd5, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x25, 0x8c, 0x9d, 0xca, 0x77, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/extension_setting_error.pb.go b/googleapis/ads/googleads/v3/errors/extension_setting_error.pb.go
new file mode 100644
index 0000000..f5d5c53
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/extension_setting_error.pb.go
@@ -0,0 +1,455 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/extension_setting_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible extension setting errors.
+type ExtensionSettingErrorEnum_ExtensionSettingError int32
+
+const (
+	// Enum unspecified.
+	ExtensionSettingErrorEnum_UNSPECIFIED ExtensionSettingErrorEnum_ExtensionSettingError = 0
+	// The received error code is not known in this version.
+	ExtensionSettingErrorEnum_UNKNOWN ExtensionSettingErrorEnum_ExtensionSettingError = 1
+	// A platform restriction was provided without input extensions or existing
+	// extensions.
+	ExtensionSettingErrorEnum_EXTENSIONS_REQUIRED ExtensionSettingErrorEnum_ExtensionSettingError = 2
+	// The provided feed type does not correspond to the provided extensions.
+	ExtensionSettingErrorEnum_FEED_TYPE_EXTENSION_TYPE_MISMATCH ExtensionSettingErrorEnum_ExtensionSettingError = 3
+	// The provided feed type cannot be used.
+	ExtensionSettingErrorEnum_INVALID_FEED_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 4
+	// The provided feed type cannot be used at the customer level.
+	ExtensionSettingErrorEnum_INVALID_FEED_TYPE_FOR_CUSTOMER_EXTENSION_SETTING ExtensionSettingErrorEnum_ExtensionSettingError = 5
+	// Cannot change a feed item field on a CREATE operation.
+	ExtensionSettingErrorEnum_CANNOT_CHANGE_FEED_ITEM_ON_CREATE ExtensionSettingErrorEnum_ExtensionSettingError = 6
+	// Cannot update an extension that is not already in this setting.
+	ExtensionSettingErrorEnum_CANNOT_UPDATE_NEWLY_CREATED_EXTENSION ExtensionSettingErrorEnum_ExtensionSettingError = 7
+	// There is no existing AdGroupExtensionSetting for this type.
+	ExtensionSettingErrorEnum_NO_EXISTING_AD_GROUP_EXTENSION_SETTING_FOR_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 8
+	// There is no existing CampaignExtensionSetting for this type.
+	ExtensionSettingErrorEnum_NO_EXISTING_CAMPAIGN_EXTENSION_SETTING_FOR_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 9
+	// There is no existing CustomerExtensionSetting for this type.
+	ExtensionSettingErrorEnum_NO_EXISTING_CUSTOMER_EXTENSION_SETTING_FOR_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 10
+	// The AdGroupExtensionSetting already exists. UPDATE should be used to
+	// modify the existing AdGroupExtensionSetting.
+	ExtensionSettingErrorEnum_AD_GROUP_EXTENSION_SETTING_ALREADY_EXISTS ExtensionSettingErrorEnum_ExtensionSettingError = 11
+	// The CampaignExtensionSetting already exists. UPDATE should be used to
+	// modify the existing CampaignExtensionSetting.
+	ExtensionSettingErrorEnum_CAMPAIGN_EXTENSION_SETTING_ALREADY_EXISTS ExtensionSettingErrorEnum_ExtensionSettingError = 12
+	// The CustomerExtensionSetting already exists. UPDATE should be used to
+	// modify the existing CustomerExtensionSetting.
+	ExtensionSettingErrorEnum_CUSTOMER_EXTENSION_SETTING_ALREADY_EXISTS ExtensionSettingErrorEnum_ExtensionSettingError = 13
+	// An active ad group feed already exists for this place holder type.
+	ExtensionSettingErrorEnum_AD_GROUP_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 14
+	// An active campaign feed already exists for this place holder type.
+	ExtensionSettingErrorEnum_CAMPAIGN_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 15
+	// An active customer feed already exists for this place holder type.
+	ExtensionSettingErrorEnum_CUSTOMER_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 16
+	// Value is not within the accepted range.
+	ExtensionSettingErrorEnum_VALUE_OUT_OF_RANGE ExtensionSettingErrorEnum_ExtensionSettingError = 17
+	// Cannot simultaneously set specified field with final urls.
+	ExtensionSettingErrorEnum_CANNOT_SET_FIELD_WITH_FINAL_URLS ExtensionSettingErrorEnum_ExtensionSettingError = 18
+	// Must set field with final urls.
+	ExtensionSettingErrorEnum_FINAL_URLS_NOT_SET ExtensionSettingErrorEnum_ExtensionSettingError = 19
+	// Phone number for a call extension is invalid.
+	ExtensionSettingErrorEnum_INVALID_PHONE_NUMBER ExtensionSettingErrorEnum_ExtensionSettingError = 20
+	// Phone number for a call extension is not supported for the given country
+	// code.
+	ExtensionSettingErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY ExtensionSettingErrorEnum_ExtensionSettingError = 21
+	// A carrier specific number in short format is not allowed for call
+	// extensions.
+	ExtensionSettingErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED ExtensionSettingErrorEnum_ExtensionSettingError = 22
+	// Premium rate numbers are not allowed for call extensions.
+	ExtensionSettingErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED ExtensionSettingErrorEnum_ExtensionSettingError = 23
+	// Phone number type for a call extension is not allowed.
+	ExtensionSettingErrorEnum_DISALLOWED_NUMBER_TYPE ExtensionSettingErrorEnum_ExtensionSettingError = 24
+	// Phone number for a call extension does not meet domestic format
+	// requirements.
+	ExtensionSettingErrorEnum_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT ExtensionSettingErrorEnum_ExtensionSettingError = 25
+	// Vanity phone numbers (i.e. those including letters) are not allowed for
+	// call extensions.
+	ExtensionSettingErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED ExtensionSettingErrorEnum_ExtensionSettingError = 26
+	// Country code provided for a call extension is invalid.
+	ExtensionSettingErrorEnum_INVALID_COUNTRY_CODE ExtensionSettingErrorEnum_ExtensionSettingError = 27
+	// Call conversion type id provided for a call extension is invalid.
+	ExtensionSettingErrorEnum_INVALID_CALL_CONVERSION_TYPE_ID ExtensionSettingErrorEnum_ExtensionSettingError = 28
+	// For a call extension, the customer is not whitelisted for call tracking.
+	ExtensionSettingErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING ExtensionSettingErrorEnum_ExtensionSettingError = 29
+	// Call tracking is not supported for the given country for a call
+	// extension.
+	ExtensionSettingErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY ExtensionSettingErrorEnum_ExtensionSettingError = 30
+	// App id provided for an app extension is invalid.
+	ExtensionSettingErrorEnum_INVALID_APP_ID ExtensionSettingErrorEnum_ExtensionSettingError = 31
+	// Quotation marks present in the review text for a review extension.
+	ExtensionSettingErrorEnum_QUOTES_IN_REVIEW_EXTENSION_SNIPPET ExtensionSettingErrorEnum_ExtensionSettingError = 32
+	// Hyphen character present in the review text for a review extension.
+	ExtensionSettingErrorEnum_HYPHENS_IN_REVIEW_EXTENSION_SNIPPET ExtensionSettingErrorEnum_ExtensionSettingError = 33
+	// A blacklisted review source name or url was provided for a review
+	// extension.
+	ExtensionSettingErrorEnum_REVIEW_EXTENSION_SOURCE_NOT_ELIGIBLE ExtensionSettingErrorEnum_ExtensionSettingError = 34
+	// Review source name should not be found in the review text.
+	ExtensionSettingErrorEnum_SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT ExtensionSettingErrorEnum_ExtensionSettingError = 35
+	// Field must be set.
+	ExtensionSettingErrorEnum_MISSING_FIELD ExtensionSettingErrorEnum_ExtensionSettingError = 36
+	// Inconsistent currency codes.
+	ExtensionSettingErrorEnum_INCONSISTENT_CURRENCY_CODES ExtensionSettingErrorEnum_ExtensionSettingError = 37
+	// Price extension cannot have duplicated headers.
+	ExtensionSettingErrorEnum_PRICE_EXTENSION_HAS_DUPLICATED_HEADERS ExtensionSettingErrorEnum_ExtensionSettingError = 38
+	// Price item cannot have duplicated header and description.
+	ExtensionSettingErrorEnum_PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION ExtensionSettingErrorEnum_ExtensionSettingError = 39
+	// Price extension has too few items
+	ExtensionSettingErrorEnum_PRICE_EXTENSION_HAS_TOO_FEW_ITEMS ExtensionSettingErrorEnum_ExtensionSettingError = 40
+	// Price extension has too many items
+	ExtensionSettingErrorEnum_PRICE_EXTENSION_HAS_TOO_MANY_ITEMS ExtensionSettingErrorEnum_ExtensionSettingError = 41
+	// The input value is not currently supported.
+	ExtensionSettingErrorEnum_UNSUPPORTED_VALUE ExtensionSettingErrorEnum_ExtensionSettingError = 42
+	// Unknown or unsupported device preference.
+	ExtensionSettingErrorEnum_INVALID_DEVICE_PREFERENCE ExtensionSettingErrorEnum_ExtensionSettingError = 43
+	// Invalid feed item schedule end time (i.e., endHour = 24 and
+	// endMinute != 0).
+	ExtensionSettingErrorEnum_INVALID_SCHEDULE_END ExtensionSettingErrorEnum_ExtensionSettingError = 45
+	// Date time zone does not match the account's time zone.
+	ExtensionSettingErrorEnum_DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE ExtensionSettingErrorEnum_ExtensionSettingError = 47
+	// Overlapping feed item schedule times (e.g., 7-10AM and 8-11AM) are not
+	// allowed.
+	ExtensionSettingErrorEnum_OVERLAPPING_SCHEDULES_NOT_ALLOWED ExtensionSettingErrorEnum_ExtensionSettingError = 48
+	// Feed item schedule end time must be after start time.
+	ExtensionSettingErrorEnum_SCHEDULE_END_NOT_AFTER_START ExtensionSettingErrorEnum_ExtensionSettingError = 49
+	// There are too many feed item schedules per day.
+	ExtensionSettingErrorEnum_TOO_MANY_SCHEDULES_PER_DAY ExtensionSettingErrorEnum_ExtensionSettingError = 50
+	// Cannot edit the same extension feed item more than once in the same
+	// request.
+	ExtensionSettingErrorEnum_DUPLICATE_EXTENSION_FEED_ITEM_EDIT ExtensionSettingErrorEnum_ExtensionSettingError = 51
+	// Invalid structured snippet header.
+	ExtensionSettingErrorEnum_INVALID_SNIPPETS_HEADER ExtensionSettingErrorEnum_ExtensionSettingError = 52
+	// Phone number with call tracking enabled is not supported for the
+	// specified country.
+	ExtensionSettingErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY ExtensionSettingErrorEnum_ExtensionSettingError = 53
+	// The targeted adgroup must belong to the targeted campaign.
+	ExtensionSettingErrorEnum_CAMPAIGN_TARGETING_MISMATCH ExtensionSettingErrorEnum_ExtensionSettingError = 54
+	// The feed used by the ExtensionSetting is removed and cannot be operated
+	// on. Remove the ExtensionSetting to allow a new one to be created using
+	// an active feed.
+	ExtensionSettingErrorEnum_CANNOT_OPERATE_ON_REMOVED_FEED ExtensionSettingErrorEnum_ExtensionSettingError = 55
+	// The ExtensionFeedItem type is required for this operation.
+	ExtensionSettingErrorEnum_EXTENSION_TYPE_REQUIRED ExtensionSettingErrorEnum_ExtensionSettingError = 56
+	// The matching function that links the extension feed to the customer,
+	// campaign, or ad group is not compatible with the ExtensionSetting
+	// services.
+	ExtensionSettingErrorEnum_INCOMPATIBLE_UNDERLYING_MATCHING_FUNCTION ExtensionSettingErrorEnum_ExtensionSettingError = 57
+	// Start date must be before end date.
+	ExtensionSettingErrorEnum_START_DATE_AFTER_END_DATE ExtensionSettingErrorEnum_ExtensionSettingError = 58
+	// Input price is not in a valid format.
+	ExtensionSettingErrorEnum_INVALID_PRICE_FORMAT ExtensionSettingErrorEnum_ExtensionSettingError = 59
+	// The promotion time is invalid.
+	ExtensionSettingErrorEnum_PROMOTION_INVALID_TIME ExtensionSettingErrorEnum_ExtensionSettingError = 60
+	// Cannot set both percent discount and money discount fields.
+	ExtensionSettingErrorEnum_PROMOTION_CANNOT_SET_PERCENT_DISCOUNT_AND_MONEY_DISCOUNT ExtensionSettingErrorEnum_ExtensionSettingError = 61
+	// Cannot set both promotion code and orders over amount fields.
+	ExtensionSettingErrorEnum_PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT ExtensionSettingErrorEnum_ExtensionSettingError = 62
+	// This field has too many decimal places specified.
+	ExtensionSettingErrorEnum_TOO_MANY_DECIMAL_PLACES_SPECIFIED ExtensionSettingErrorEnum_ExtensionSettingError = 63
+	// The language code is not valid.
+	ExtensionSettingErrorEnum_INVALID_LANGUAGE_CODE ExtensionSettingErrorEnum_ExtensionSettingError = 64
+	// The language is not supported.
+	ExtensionSettingErrorEnum_UNSUPPORTED_LANGUAGE ExtensionSettingErrorEnum_ExtensionSettingError = 65
+	// Customer hasn't consented for call recording, which is required for
+	// adding/updating call extensions. Please see
+	// https://support.google.com/google-ads/answer/7412639.
+	ExtensionSettingErrorEnum_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED ExtensionSettingErrorEnum_ExtensionSettingError = 66
+	// The UPDATE operation does not specify any fields other than the resource
+	// name in the update mask.
+	ExtensionSettingErrorEnum_EXTENSION_SETTING_UPDATE_IS_A_NOOP ExtensionSettingErrorEnum_ExtensionSettingError = 67
+)
+
+var ExtensionSettingErrorEnum_ExtensionSettingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "EXTENSIONS_REQUIRED",
+	3:  "FEED_TYPE_EXTENSION_TYPE_MISMATCH",
+	4:  "INVALID_FEED_TYPE",
+	5:  "INVALID_FEED_TYPE_FOR_CUSTOMER_EXTENSION_SETTING",
+	6:  "CANNOT_CHANGE_FEED_ITEM_ON_CREATE",
+	7:  "CANNOT_UPDATE_NEWLY_CREATED_EXTENSION",
+	8:  "NO_EXISTING_AD_GROUP_EXTENSION_SETTING_FOR_TYPE",
+	9:  "NO_EXISTING_CAMPAIGN_EXTENSION_SETTING_FOR_TYPE",
+	10: "NO_EXISTING_CUSTOMER_EXTENSION_SETTING_FOR_TYPE",
+	11: "AD_GROUP_EXTENSION_SETTING_ALREADY_EXISTS",
+	12: "CAMPAIGN_EXTENSION_SETTING_ALREADY_EXISTS",
+	13: "CUSTOMER_EXTENSION_SETTING_ALREADY_EXISTS",
+	14: "AD_GROUP_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	15: "CAMPAIGN_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	16: "CUSTOMER_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	17: "VALUE_OUT_OF_RANGE",
+	18: "CANNOT_SET_FIELD_WITH_FINAL_URLS",
+	19: "FINAL_URLS_NOT_SET",
+	20: "INVALID_PHONE_NUMBER",
+	21: "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
+	22: "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
+	23: "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
+	24: "DISALLOWED_NUMBER_TYPE",
+	25: "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
+	26: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
+	27: "INVALID_COUNTRY_CODE",
+	28: "INVALID_CALL_CONVERSION_TYPE_ID",
+	29: "CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING",
+	30: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	31: "INVALID_APP_ID",
+	32: "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
+	33: "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
+	34: "REVIEW_EXTENSION_SOURCE_NOT_ELIGIBLE",
+	35: "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
+	36: "MISSING_FIELD",
+	37: "INCONSISTENT_CURRENCY_CODES",
+	38: "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
+	39: "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
+	40: "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
+	41: "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS",
+	42: "UNSUPPORTED_VALUE",
+	43: "INVALID_DEVICE_PREFERENCE",
+	45: "INVALID_SCHEDULE_END",
+	47: "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
+	48: "OVERLAPPING_SCHEDULES_NOT_ALLOWED",
+	49: "SCHEDULE_END_NOT_AFTER_START",
+	50: "TOO_MANY_SCHEDULES_PER_DAY",
+	51: "DUPLICATE_EXTENSION_FEED_ITEM_EDIT",
+	52: "INVALID_SNIPPETS_HEADER",
+	53: "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
+	54: "CAMPAIGN_TARGETING_MISMATCH",
+	55: "CANNOT_OPERATE_ON_REMOVED_FEED",
+	56: "EXTENSION_TYPE_REQUIRED",
+	57: "INCOMPATIBLE_UNDERLYING_MATCHING_FUNCTION",
+	58: "START_DATE_AFTER_END_DATE",
+	59: "INVALID_PRICE_FORMAT",
+	60: "PROMOTION_INVALID_TIME",
+	61: "PROMOTION_CANNOT_SET_PERCENT_DISCOUNT_AND_MONEY_DISCOUNT",
+	62: "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT",
+	63: "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
+	64: "INVALID_LANGUAGE_CODE",
+	65: "UNSUPPORTED_LANGUAGE",
+	66: "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
+	67: "EXTENSION_SETTING_UPDATE_IS_A_NOOP",
+}
+
+var ExtensionSettingErrorEnum_ExtensionSettingError_value = map[string]int32{
+	"UNSPECIFIED":                       0,
+	"UNKNOWN":                           1,
+	"EXTENSIONS_REQUIRED":               2,
+	"FEED_TYPE_EXTENSION_TYPE_MISMATCH": 3,
+	"INVALID_FEED_TYPE":                 4,
+	"INVALID_FEED_TYPE_FOR_CUSTOMER_EXTENSION_SETTING":           5,
+	"CANNOT_CHANGE_FEED_ITEM_ON_CREATE":                          6,
+	"CANNOT_UPDATE_NEWLY_CREATED_EXTENSION":                      7,
+	"NO_EXISTING_AD_GROUP_EXTENSION_SETTING_FOR_TYPE":            8,
+	"NO_EXISTING_CAMPAIGN_EXTENSION_SETTING_FOR_TYPE":            9,
+	"NO_EXISTING_CUSTOMER_EXTENSION_SETTING_FOR_TYPE":            10,
+	"AD_GROUP_EXTENSION_SETTING_ALREADY_EXISTS":                  11,
+	"CAMPAIGN_EXTENSION_SETTING_ALREADY_EXISTS":                  12,
+	"CUSTOMER_EXTENSION_SETTING_ALREADY_EXISTS":                  13,
+	"AD_GROUP_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":          14,
+	"CAMPAIGN_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":          15,
+	"CUSTOMER_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":          16,
+	"VALUE_OUT_OF_RANGE":                                         17,
+	"CANNOT_SET_FIELD_WITH_FINAL_URLS":                           18,
+	"FINAL_URLS_NOT_SET":                                         19,
+	"INVALID_PHONE_NUMBER":                                       20,
+	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                     21,
+	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                  22,
+	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                            23,
+	"DISALLOWED_NUMBER_TYPE":                                     24,
+	"INVALID_DOMESTIC_PHONE_NUMBER_FORMAT":                       25,
+	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                            26,
+	"INVALID_COUNTRY_CODE":                                       27,
+	"INVALID_CALL_CONVERSION_TYPE_ID":                            28,
+	"CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING":                  29,
+	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                     30,
+	"INVALID_APP_ID":                                             31,
+	"QUOTES_IN_REVIEW_EXTENSION_SNIPPET":                         32,
+	"HYPHENS_IN_REVIEW_EXTENSION_SNIPPET":                        33,
+	"REVIEW_EXTENSION_SOURCE_NOT_ELIGIBLE":                       34,
+	"SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT":                       35,
+	"MISSING_FIELD":                                              36,
+	"INCONSISTENT_CURRENCY_CODES":                                37,
+	"PRICE_EXTENSION_HAS_DUPLICATED_HEADERS":                     38,
+	"PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION":           39,
+	"PRICE_EXTENSION_HAS_TOO_FEW_ITEMS":                          40,
+	"PRICE_EXTENSION_HAS_TOO_MANY_ITEMS":                         41,
+	"UNSUPPORTED_VALUE":                                          42,
+	"INVALID_DEVICE_PREFERENCE":                                  43,
+	"INVALID_SCHEDULE_END":                                       45,
+	"DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE":                     47,
+	"OVERLAPPING_SCHEDULES_NOT_ALLOWED":                          48,
+	"SCHEDULE_END_NOT_AFTER_START":                               49,
+	"TOO_MANY_SCHEDULES_PER_DAY":                                 50,
+	"DUPLICATE_EXTENSION_FEED_ITEM_EDIT":                         51,
+	"INVALID_SNIPPETS_HEADER":                                    52,
+	"PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY":   53,
+	"CAMPAIGN_TARGETING_MISMATCH":                                54,
+	"CANNOT_OPERATE_ON_REMOVED_FEED":                             55,
+	"EXTENSION_TYPE_REQUIRED":                                    56,
+	"INCOMPATIBLE_UNDERLYING_MATCHING_FUNCTION":                  57,
+	"START_DATE_AFTER_END_DATE":                                  58,
+	"INVALID_PRICE_FORMAT":                                       59,
+	"PROMOTION_INVALID_TIME":                                     60,
+	"PROMOTION_CANNOT_SET_PERCENT_DISCOUNT_AND_MONEY_DISCOUNT":   61,
+	"PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT": 62,
+	"TOO_MANY_DECIMAL_PLACES_SPECIFIED":                          63,
+	"INVALID_LANGUAGE_CODE":                                      64,
+	"UNSUPPORTED_LANGUAGE":                                       65,
+	"CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED":               66,
+	"EXTENSION_SETTING_UPDATE_IS_A_NOOP":                         67,
+}
+
+func (x ExtensionSettingErrorEnum_ExtensionSettingError) String() string {
+	return proto.EnumName(ExtensionSettingErrorEnum_ExtensionSettingError_name, int32(x))
+}
+
+func (ExtensionSettingErrorEnum_ExtensionSettingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a1c5b67ed36c3d9a, []int{0, 0}
+}
+
+// Container for enum describing validation errors of extension settings.
+type ExtensionSettingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ExtensionSettingErrorEnum) Reset()         { *m = ExtensionSettingErrorEnum{} }
+func (m *ExtensionSettingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ExtensionSettingErrorEnum) ProtoMessage()    {}
+func (*ExtensionSettingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a1c5b67ed36c3d9a, []int{0}
+}
+
+func (m *ExtensionSettingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionSettingErrorEnum.Unmarshal(m, b)
+}
+func (m *ExtensionSettingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionSettingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ExtensionSettingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionSettingErrorEnum.Merge(m, src)
+}
+func (m *ExtensionSettingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ExtensionSettingErrorEnum.Size(m)
+}
+func (m *ExtensionSettingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionSettingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionSettingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ExtensionSettingErrorEnum_ExtensionSettingError", ExtensionSettingErrorEnum_ExtensionSettingError_name, ExtensionSettingErrorEnum_ExtensionSettingError_value)
+	proto.RegisterType((*ExtensionSettingErrorEnum)(nil), "google.ads.googleads.v3.errors.ExtensionSettingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/extension_setting_error.proto", fileDescriptor_a1c5b67ed36c3d9a)
+}
+
+var fileDescriptor_a1c5b67ed36c3d9a = []byte{
+	// 1312 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5d, 0x73, 0x53, 0xb7,
+	0x16, 0xbd, 0x84, 0x7b, 0xe1, 0x5e, 0x71, 0x01, 0x21, 0x08, 0x90, 0x00, 0x01, 0xc2, 0x37, 0x2d,
+	0x36, 0xd4, 0xd0, 0x52, 0x43, 0x69, 0x95, 0xa3, 0x6d, 0x5b, 0xc3, 0x39, 0x92, 0x90, 0x74, 0x1c,
+	0xcc, 0x64, 0x46, 0x93, 0x36, 0x99, 0x4c, 0x66, 0xc0, 0x66, 0xe2, 0x94, 0xe9, 0x4f, 0xe9, 0x73,
+	0x1f, 0xfb, 0x53, 0xfa, 0x53, 0xfa, 0xde, 0x97, 0x3e, 0x75, 0xb6, 0xce, 0x87, 0x9d, 0x2f, 0x0f,
+	0x4f, 0xf6, 0x91, 0xd6, 0xda, 0x7b, 0x6b, 0x6b, 0x69, 0x49, 0xe4, 0xe5, 0xd6, 0x68, 0xb4, 0xf5,
+	0x7e, 0xb3, 0xb9, 0xbe, 0x31, 0x6e, 0x16, 0x7f, 0xf1, 0xdf, 0xa7, 0x56, 0x73, 0x73, 0x67, 0x67,
+	0xb4, 0x33, 0x6e, 0x6e, 0xfe, 0xb2, 0xbb, 0x39, 0x1c, 0x6f, 0x8f, 0x86, 0x61, 0xbc, 0xb9, 0xbb,
+	0xbb, 0x3d, 0xdc, 0x0a, 0x71, 0xa2, 0xf1, 0x71, 0x67, 0xb4, 0x3b, 0x62, 0x4b, 0x05, 0xa5, 0xb1,
+	0xbe, 0x31, 0x6e, 0xd4, 0xec, 0xc6, 0xa7, 0x56, 0xa3, 0x60, 0x2f, 0x5e, 0xad, 0xa2, 0x7f, 0xdc,
+	0x6e, 0xae, 0x0f, 0x87, 0xa3, 0xdd, 0xf5, 0xdd, 0xed, 0xd1, 0x70, 0x5c, 0xb0, 0x97, 0x7f, 0xbd,
+	0x40, 0x16, 0xa0, 0x8a, 0xef, 0x8a, 0xf0, 0x80, 0x44, 0x18, 0xfe, 0xfc, 0x61, 0xf9, 0xef, 0xf3,
+	0x64, 0xfe, 0xd0, 0x59, 0x76, 0x96, 0x9c, 0xca, 0x95, 0x33, 0x90, 0xc8, 0x8e, 0x04, 0x41, 0xff,
+	0xc5, 0x4e, 0x91, 0x93, 0xb9, 0x7a, 0xad, 0xf4, 0xaa, 0xa2, 0xc7, 0xd8, 0x25, 0x72, 0x1e, 0xde,
+	0x7a, 0x50, 0x4e, 0x6a, 0xe5, 0x82, 0x85, 0x37, 0xb9, 0xb4, 0x20, 0xe8, 0x1c, 0xbb, 0x43, 0x6e,
+	0x76, 0x00, 0x44, 0xf0, 0x03, 0x03, 0xa1, 0x86, 0x14, 0x9f, 0x99, 0x74, 0x19, 0xf7, 0x49, 0x8f,
+	0x1e, 0x67, 0xf3, 0xe4, 0x9c, 0x54, 0x7d, 0x9e, 0x4a, 0x11, 0x6a, 0x38, 0xfd, 0x37, 0x7b, 0x4a,
+	0x1e, 0x1f, 0x18, 0x0e, 0x1d, 0x6d, 0x43, 0x92, 0x3b, 0xaf, 0x33, 0xb0, 0x53, 0x21, 0x1d, 0x78,
+	0x2f, 0x55, 0x97, 0xfe, 0x07, 0x73, 0x26, 0x5c, 0x29, 0xed, 0x43, 0xd2, 0xe3, 0xaa, 0x0b, 0x05,
+	0x57, 0x7a, 0xc8, 0x82, 0x56, 0x21, 0xb1, 0xc0, 0x3d, 0xd0, 0x13, 0xec, 0x01, 0xb9, 0x53, 0xc2,
+	0x72, 0x23, 0xb8, 0x87, 0xa0, 0x60, 0x35, 0x1d, 0x94, 0xf3, 0x62, 0x12, 0x99, 0x9e, 0x64, 0x2d,
+	0xd2, 0x54, 0x3a, 0xc0, 0x5b, 0xe9, 0x30, 0x45, 0xe0, 0x22, 0x74, 0xad, 0xce, 0xcd, 0xc1, 0xec,
+	0xb1, 0xb8, 0x58, 0xfc, 0x7f, 0xf7, 0x93, 0x12, 0x9e, 0x19, 0x2e, 0xbb, 0x6a, 0x16, 0xe9, 0x7f,
+	0x07, 0x48, 0x47, 0xae, 0x73, 0x42, 0x22, 0xec, 0x11, 0x79, 0x30, 0xa3, 0x24, 0x9e, 0x5a, 0xe0,
+	0x62, 0x50, 0x04, 0x75, 0xf4, 0x14, 0xc2, 0x67, 0x14, 0xb3, 0x0f, 0xfe, 0xff, 0x08, 0x3f, 0xba,
+	0x8c, 0x7d, 0xf0, 0xd3, 0xec, 0x19, 0x79, 0x52, 0x17, 0x13, 0x1b, 0xbf, 0x17, 0x11, 0xeb, 0x36,
+	0x29, 0x4f, 0xa0, 0xa7, 0x53, 0x01, 0xe5, 0x1a, 0xce, 0x20, 0xad, 0x2e, 0xea, 0xb3, 0x69, 0x67,
+	0x23, 0xad, 0x2a, 0xee, 0xb3, 0x69, 0x94, 0x5d, 0x24, 0xac, 0xcf, 0xd3, 0x1c, 0x82, 0xce, 0x7d,
+	0xd0, 0x9d, 0x60, 0x51, 0x27, 0xf4, 0x1c, 0xbb, 0x4d, 0x6e, 0x94, 0x9a, 0x70, 0xe0, 0x43, 0x47,
+	0x42, 0x2a, 0xc2, 0xaa, 0xf4, 0xbd, 0xd0, 0x91, 0x8a, 0xa7, 0x21, 0xb7, 0xa9, 0xa3, 0x0c, 0xd9,
+	0x93, 0xef, 0x50, 0xa2, 0xe9, 0x79, 0x76, 0x99, 0x5c, 0xa8, 0xe4, 0x6a, 0x7a, 0x5a, 0x41, 0x50,
+	0x79, 0xb6, 0x02, 0x96, 0x5e, 0x60, 0x0f, 0xc9, 0xdd, 0xe9, 0x91, 0x82, 0x93, 0x1b, 0xa3, 0x2d,
+	0x4a, 0x2d, 0x2a, 0x5a, 0xe7, 0xca, 0xdb, 0x01, 0x9d, 0x2f, 0xb6, 0xc7, 0x5a, 0x09, 0x36, 0x94,
+	0xe7, 0x2d, 0x09, 0xae, 0xa7, 0xad, 0x9f, 0x26, 0xf3, 0x34, 0xd5, 0xab, 0x20, 0xe8, 0x45, 0x76,
+	0x8b, 0x5c, 0x37, 0x16, 0x32, 0x99, 0x67, 0xc1, 0x46, 0x15, 0x1f, 0x04, 0x5d, 0x62, 0x8b, 0xe4,
+	0xa2, 0x90, 0xae, 0xfc, 0xae, 0x20, 0xb1, 0x17, 0x97, 0xd9, 0x7d, 0x72, 0xbb, 0xaa, 0x5a, 0xe8,
+	0x0c, 0x9c, 0x97, 0xc9, 0x9e, 0xf2, 0xb1, 0xbc, 0x8c, 0x7b, 0xba, 0x80, 0xa9, 0xfa, 0x5c, 0x49,
+	0x3f, 0x08, 0x07, 0x16, 0x53, 0xa5, 0x5a, 0x9c, 0x6e, 0x42, 0xb9, 0xa6, 0x90, 0x68, 0x01, 0xf4,
+	0x0a, 0xd2, 0xeb, 0x19, 0x9e, 0xa6, 0x21, 0xd1, 0xaa, 0x0f, 0x76, 0xe2, 0x07, 0x52, 0xd0, 0xab,
+	0x7b, 0xd4, 0x86, 0x81, 0x57, 0x7b, 0xd2, 0x43, 0x2a, 0x5d, 0xdd, 0x27, 0x9e, 0xa6, 0xde, 0xf2,
+	0xe4, 0x35, 0x9e, 0xf5, 0x6b, 0xd8, 0xd8, 0xe9, 0x91, 0x19, 0x8d, 0x5d, 0x62, 0x8c, 0x9c, 0xa9,
+	0xf2, 0x73, 0x63, 0x30, 0xdd, 0x75, 0x76, 0x97, 0x2c, 0xbf, 0xc9, 0xb5, 0x07, 0x17, 0xa4, 0x0a,
+	0x16, 0xfa, 0x12, 0x56, 0xa7, 0x45, 0xae, 0xa4, 0x31, 0xe0, 0xe9, 0x0d, 0x76, 0x8f, 0xdc, 0xea,
+	0x0d, 0x4c, 0x0f, 0xd4, 0x6c, 0xe0, 0x4d, 0xec, 0xe6, 0xc1, 0x59, 0x9d, 0xdb, 0x04, 0x62, 0x6d,
+	0x90, 0xca, 0xae, 0x5c, 0x49, 0x81, 0x2e, 0x23, 0xb2, 0x9a, 0xe0, 0x19, 0x1c, 0x1a, 0xd6, 0xc3,
+	0x5b, 0x4f, 0x6f, 0xb1, 0x73, 0xe4, 0x74, 0x26, 0x9d, 0x8b, 0xa7, 0x1e, 0x25, 0x49, 0x6f, 0xb3,
+	0xeb, 0xe4, 0x8a, 0x54, 0x89, 0x56, 0x0e, 0x3b, 0xa3, 0x7c, 0x48, 0x72, 0x6b, 0x41, 0x25, 0x45,
+	0xaf, 0x1d, 0xbd, 0x13, 0x15, 0x67, 0x65, 0x32, 0x6d, 0xba, 0x3d, 0xee, 0x82, 0xc8, 0x4d, 0x2a,
+	0x93, 0x68, 0x70, 0x3d, 0xe0, 0x02, 0xac, 0xa3, 0x77, 0xd1, 0x66, 0x0b, 0x6c, 0xf4, 0xc8, 0x43,
+	0x61, 0x81, 0x2b, 0x11, 0x04, 0xb8, 0xc4, 0x4a, 0xe3, 0xd1, 0x14, 0xef, 0xa1, 0xcd, 0x1e, 0x96,
+	0xc1, 0x6b, 0x1d, 0x3a, 0xb0, 0x1a, 0x63, 0x39, 0x7a, 0x1f, 0x3b, 0x7c, 0x14, 0x2c, 0xe3, 0x6a,
+	0x50, 0xe2, 0x1e, 0xe0, 0x15, 0x90, 0xab, 0xc9, 0xd6, 0xc5, 0xe3, 0x49, 0x1f, 0xb2, 0x6b, 0x64,
+	0xa1, 0x56, 0x27, 0xf4, 0x31, 0x8e, 0xb1, 0xd0, 0x01, 0x5c, 0x2c, 0xd0, 0x2f, 0xa6, 0xd5, 0xe6,
+	0x92, 0x1e, 0x88, 0x3c, 0x85, 0x00, 0x4a, 0xd0, 0x47, 0xd8, 0x80, 0xe8, 0xea, 0x5e, 0x66, 0x10,
+	0xb2, 0xdc, 0xf9, 0xb0, 0x12, 0x9b, 0xcc, 0x93, 0xa8, 0x88, 0x62, 0xfc, 0x9d, 0x56, 0x40, 0x9b,
+	0xb8, 0x14, 0xdd, 0x07, 0x9b, 0x72, 0x63, 0xb0, 0xc9, 0x55, 0x24, 0xb7, 0x47, 0xda, 0x8f, 0xd9,
+	0x0d, 0x72, 0x75, 0x3a, 0x49, 0x31, 0xdb, 0xf1, 0x78, 0x50, 0x3d, 0xb7, 0x9e, 0x3e, 0x61, 0x4b,
+	0x64, 0xb1, 0x5e, 0xd8, 0x24, 0x8a, 0x01, 0x1b, 0x04, 0x1f, 0xd0, 0xaf, 0xb0, 0x19, 0x75, 0x6b,
+	0xa7, 0x1a, 0x32, 0xb9, 0xa0, 0x40, 0x48, 0x4f, 0x5b, 0xec, 0x0a, 0xb9, 0x54, 0x2f, 0xab, 0x90,
+	0x96, 0x2b, 0x37, 0x82, 0x3e, 0x65, 0x2f, 0xc9, 0xf3, 0x19, 0x66, 0x12, 0xed, 0x6a, 0xcf, 0x99,
+	0x98, 0x3e, 0x05, 0xcf, 0x50, 0x39, 0xb5, 0xd1, 0x7a, 0x6e, 0xbb, 0x10, 0x6d, 0xbc, 0xbe, 0x8b,
+	0xbf, 0x66, 0xcb, 0x64, 0xa9, 0xf4, 0x40, 0x6d, 0x20, 0x5a, 0x8a, 0x46, 0x69, 0x66, 0xba, 0x0f,
+	0xc5, 0x35, 0x4c, 0xbf, 0xc1, 0xfa, 0xf6, 0x5d, 0xe6, 0xf5, 0x9d, 0xff, 0x1c, 0x8f, 0x30, 0x6a,
+	0x33, 0x33, 0xdc, 0xa3, 0xd4, 0x43, 0xae, 0x04, 0xd8, 0x74, 0x10, 0xd3, 0x60, 0x8e, 0x58, 0x53,
+	0xae, 0x92, 0xa8, 0xa3, 0x6f, 0x71, 0x87, 0x63, 0xfb, 0x42, 0xdc, 0xae, 0xa2, 0x9f, 0xd8, 0x5d,
+	0xfc, 0xa4, 0xed, 0x3d, 0xa6, 0x1a, 0x75, 0x54, 0xda, 0xd1, 0x0b, 0x34, 0x35, 0x63, 0x75, 0xa6,
+	0x31, 0x4e, 0xa8, 0x30, 0xb8, 0xad, 0xf4, 0x65, 0xec, 0x51, 0x3d, 0x37, 0x65, 0xe9, 0x06, 0x6c,
+	0x82, 0xe7, 0x45, 0x48, 0x57, 0xc8, 0x00, 0x75, 0x9d, 0x69, 0x05, 0x83, 0x7a, 0x88, 0x7e, 0xc7,
+	0x5e, 0x91, 0xf6, 0xe1, 0xec, 0xc9, 0xa0, 0x16, 0x10, 0xb9, 0xda, 0xe2, 0x21, 0x0a, 0x28, 0x9f,
+	0xc0, 0xb3, 0xc8, 0x7f, 0x85, 0x7a, 0xaa, 0x65, 0x20, 0x20, 0x91, 0x19, 0x4f, 0x8b, 0x5b, 0xc8,
+	0x85, 0xc9, 0x13, 0xea, 0x7b, 0xb6, 0x40, 0xe6, 0xab, 0xb2, 0x53, 0xae, 0xba, 0x39, 0xef, 0x42,
+	0xe1, 0x95, 0x3f, 0xe0, 0xaa, 0xa7, 0x4f, 0x43, 0x35, 0x4d, 0x39, 0x7b, 0x4c, 0xbe, 0xac, 0x0d,
+	0x12, 0x0d, 0x00, 0x57, 0x53, 0x19, 0x63, 0xb0, 0x90, 0x68, 0x2b, 0xb0, 0xc1, 0xf5, 0x7e, 0xac,
+	0xa0, 0xe8, 0x0e, 0xde, 0xdb, 0xe5, 0x9b, 0x47, 0xba, 0xc0, 0x83, 0xd2, 0xda, 0xd0, 0x64, 0xe5,
+	0xaf, 0x63, 0x64, 0xf9, 0xa7, 0xd1, 0x87, 0xc6, 0xec, 0xf7, 0xe5, 0xca, 0xe2, 0xa1, 0x0f, 0x44,
+	0x83, 0xaf, 0x4b, 0x73, 0xec, 0x9d, 0x28, 0xd9, 0x5b, 0xa3, 0xf7, 0xeb, 0xc3, 0xad, 0xc6, 0x68,
+	0x67, 0xab, 0xb9, 0xb5, 0x39, 0x8c, 0x6f, 0xcf, 0xea, 0xad, 0xfb, 0x71, 0x7b, 0x7c, 0xd4, 0xd3,
+	0xf7, 0x45, 0xf1, 0xf3, 0xdb, 0xdc, 0xf1, 0x2e, 0xe7, 0xbf, 0xcf, 0x2d, 0x75, 0x8b, 0x60, 0x7c,
+	0x63, 0xdc, 0x28, 0xfe, 0xe2, 0xbf, 0x7e, 0xab, 0x11, 0x53, 0x8e, 0xff, 0xa8, 0x00, 0x6b, 0x7c,
+	0x63, 0xbc, 0x56, 0x03, 0xd6, 0xfa, 0xad, 0xb5, 0x02, 0xf0, 0xe7, 0xdc, 0x72, 0x31, 0xda, 0x6e,
+	0xf3, 0x8d, 0x71, 0xbb, 0x5d, 0x43, 0xda, 0xed, 0x7e, 0xab, 0xdd, 0x2e, 0x40, 0x3f, 0x9e, 0x88,
+	0xd5, 0xb5, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x32, 0x81, 0x8f, 0x97, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_attribute_reference_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_attribute_reference_error.pb.go
new file mode 100644
index 0000000..59afab9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_attribute_reference_error.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_attribute_reference_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible feed attribute reference errors.
+type FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError int32
+
+const (
+	// Enum unspecified.
+	FeedAttributeReferenceErrorEnum_UNSPECIFIED FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 0
+	// The received error code is not known in this version.
+	FeedAttributeReferenceErrorEnum_UNKNOWN FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 1
+	// A feed referenced by ID has been removed.
+	FeedAttributeReferenceErrorEnum_CANNOT_REFERENCE_REMOVED_FEED FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 2
+	// There is no enabled feed with the given name.
+	FeedAttributeReferenceErrorEnum_INVALID_FEED_NAME FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 3
+	// There is no feed attribute in an enabled feed with the given name.
+	FeedAttributeReferenceErrorEnum_INVALID_FEED_ATTRIBUTE_NAME FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 4
+)
+
+var FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_REFERENCE_REMOVED_FEED",
+	3: "INVALID_FEED_NAME",
+	4: "INVALID_FEED_ATTRIBUTE_NAME",
+}
+
+var FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"CANNOT_REFERENCE_REMOVED_FEED": 2,
+	"INVALID_FEED_NAME":             3,
+	"INVALID_FEED_ATTRIBUTE_NAME":   4,
+}
+
+func (x FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError) String() string {
+	return proto.EnumName(FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name, int32(x))
+}
+
+func (FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fc8d6ce7179580a8, []int{0, 0}
+}
+
+// Container for enum describing possible feed attribute reference errors.
+type FeedAttributeReferenceErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedAttributeReferenceErrorEnum) Reset()         { *m = FeedAttributeReferenceErrorEnum{} }
+func (m *FeedAttributeReferenceErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeReferenceErrorEnum) ProtoMessage()    {}
+func (*FeedAttributeReferenceErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc8d6ce7179580a8, []int{0}
+}
+
+func (m *FeedAttributeReferenceErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeReferenceErrorEnum.Merge(m, src)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Size(m)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeReferenceErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeReferenceErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError", FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name, FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_value)
+	proto.RegisterType((*FeedAttributeReferenceErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedAttributeReferenceErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_attribute_reference_error.proto", fileDescriptor_fc8d6ce7179580a8)
+}
+
+var fileDescriptor_fc8d6ce7179580a8 = []byte{
+	// 363 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x6e, 0xa3, 0x30,
+	0x14, 0x86, 0x07, 0x32, 0x9a, 0x91, 0x9c, 0xc5, 0x30, 0x48, 0xdd, 0x34, 0x6d, 0xd2, 0x72, 0x00,
+	0xb3, 0x60, 0xe7, 0xae, 0x1c, 0x30, 0x11, 0x6a, 0xe3, 0x44, 0x94, 0x50, 0xa9, 0x42, 0x42, 0x24,
+	0x38, 0x08, 0x29, 0xc1, 0x91, 0x4d, 0x72, 0x94, 0x1e, 0xa0, 0xcb, 0x1e, 0xa1, 0x47, 0xe8, 0x51,
+	0x7a, 0x85, 0x6e, 0x2a, 0x70, 0x89, 0xd4, 0x45, 0xb3, 0xf2, 0xaf, 0xe7, 0xef, 0xfd, 0xff, 0xd3,
+	0x7b, 0xc0, 0x2d, 0x38, 0x2f, 0x36, 0xcc, 0xce, 0x72, 0x69, 0x2b, 0xd9, 0xa8, 0x83, 0x63, 0x33,
+	0x21, 0xb8, 0x90, 0xf6, 0x9a, 0xb1, 0x3c, 0xcd, 0xea, 0x5a, 0x94, 0xcb, 0x7d, 0xcd, 0x52, 0xc1,
+	0xd6, 0x4c, 0xb0, 0x6a, 0xc5, 0xd2, 0xf6, 0x1f, 0xee, 0x04, 0xaf, 0xb9, 0x39, 0x54, 0x9d, 0x30,
+	0xcb, 0x25, 0x3c, 0x9a, 0xc0, 0x83, 0x03, 0x95, 0xc9, 0xf9, 0x45, 0x17, 0xb2, 0x2b, 0xed, 0xac,
+	0xaa, 0x78, 0x9d, 0xd5, 0x25, 0xaf, 0xa4, 0xea, 0xb6, 0x5e, 0x35, 0x30, 0xf2, 0x19, 0xcb, 0x71,
+	0x97, 0x12, 0x76, 0x21, 0xa4, 0x69, 0x27, 0xd5, 0x7e, 0x6b, 0x3d, 0x69, 0x60, 0x70, 0x82, 0x31,
+	0xff, 0x81, 0xfe, 0x82, 0xde, 0xcf, 0x89, 0x1b, 0xf8, 0x01, 0xf1, 0x8c, 0x5f, 0x66, 0x1f, 0xfc,
+	0x5d, 0xd0, 0x5b, 0x3a, 0x7b, 0xa0, 0x86, 0x66, 0x5e, 0x83, 0x4b, 0x17, 0x53, 0x3a, 0x8b, 0xd2,
+	0x90, 0xf8, 0x24, 0x24, 0xd4, 0x25, 0x69, 0x48, 0xa6, 0xb3, 0x98, 0x78, 0xa9, 0x4f, 0x88, 0x67,
+	0xe8, 0xe6, 0x19, 0xf8, 0x1f, 0xd0, 0x18, 0xdf, 0x05, 0xaa, 0x92, 0x52, 0x3c, 0x25, 0x46, 0xcf,
+	0x1c, 0x81, 0xc1, 0xb7, 0x32, 0x8e, 0xa2, 0x30, 0x18, 0x2f, 0x22, 0xa2, 0x80, 0xdf, 0xe3, 0x0f,
+	0x0d, 0x58, 0x2b, 0xbe, 0x85, 0xa7, 0x37, 0x30, 0xbe, 0x3a, 0x31, 0xfc, 0xbc, 0xd9, 0xc2, 0x5c,
+	0x7b, 0xf4, 0xbe, 0x3c, 0x0a, 0xbe, 0xc9, 0xaa, 0x02, 0x72, 0x51, 0xd8, 0x05, 0xab, 0xda, 0x1d,
+	0x75, 0xa7, 0xd9, 0x95, 0xf2, 0xa7, 0x4b, 0xdd, 0xa8, 0xe7, 0x59, 0xef, 0x4d, 0x30, 0x7e, 0xd1,
+	0x87, 0x13, 0x65, 0x86, 0x73, 0x09, 0x95, 0x6c, 0x54, 0xec, 0xc0, 0x36, 0x52, 0xbe, 0x75, 0x40,
+	0x82, 0x73, 0x99, 0x1c, 0x81, 0x24, 0x76, 0x12, 0x05, 0xbc, 0xeb, 0x96, 0xaa, 0x22, 0x84, 0x73,
+	0x89, 0xd0, 0x11, 0x41, 0x28, 0x76, 0x10, 0x52, 0xd0, 0xf2, 0x4f, 0x3b, 0x9d, 0xf3, 0x19, 0x00,
+	0x00, 0xff, 0xff, 0x21, 0x68, 0x14, 0x5f, 0x46, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_error.pb.go
new file mode 100644
index 0000000..69161ab
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_error.pb.go
@@ -0,0 +1,226 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible feed errors.
+type FeedErrorEnum_FeedError int32
+
+const (
+	// Enum unspecified.
+	FeedErrorEnum_UNSPECIFIED FeedErrorEnum_FeedError = 0
+	// The received error code is not known in this version.
+	FeedErrorEnum_UNKNOWN FeedErrorEnum_FeedError = 1
+	// The names of the FeedAttributes must be unique.
+	FeedErrorEnum_ATTRIBUTE_NAMES_NOT_UNIQUE FeedErrorEnum_FeedError = 2
+	// The attribute list must be an exact copy of the existing list if the
+	// attribute ID's are present.
+	FeedErrorEnum_ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES FeedErrorEnum_FeedError = 3
+	// Cannot specify USER origin for a system generated feed.
+	FeedErrorEnum_CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED FeedErrorEnum_FeedError = 4
+	// Cannot specify GOOGLE origin for a non-system generated feed.
+	FeedErrorEnum_CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED FeedErrorEnum_FeedError = 5
+	// Cannot specify feed attributes for system feed.
+	FeedErrorEnum_CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED FeedErrorEnum_FeedError = 6
+	// Cannot update FeedAttributes on feed with origin GOOGLE.
+	FeedErrorEnum_CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE FeedErrorEnum_FeedError = 7
+	// The given ID refers to a removed Feed. Removed Feeds are immutable.
+	FeedErrorEnum_FEED_REMOVED FeedErrorEnum_FeedError = 8
+	// The origin of the feed is not valid for the client.
+	FeedErrorEnum_INVALID_ORIGIN_VALUE FeedErrorEnum_FeedError = 9
+	// A user can only create and modify feeds with USER origin.
+	FeedErrorEnum_FEED_ORIGIN_IS_NOT_USER FeedErrorEnum_FeedError = 10
+	// Invalid auth token for the given email.
+	FeedErrorEnum_INVALID_AUTH_TOKEN_FOR_EMAIL FeedErrorEnum_FeedError = 11
+	// Invalid email specified.
+	FeedErrorEnum_INVALID_EMAIL FeedErrorEnum_FeedError = 12
+	// Feed name matches that of another active Feed.
+	FeedErrorEnum_DUPLICATE_FEED_NAME FeedErrorEnum_FeedError = 13
+	// Name of feed is not allowed.
+	FeedErrorEnum_INVALID_FEED_NAME FeedErrorEnum_FeedError = 14
+	// Missing OAuthInfo.
+	FeedErrorEnum_MISSING_OAUTH_INFO FeedErrorEnum_FeedError = 15
+	// New FeedAttributes must not affect the unique key.
+	FeedErrorEnum_NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY FeedErrorEnum_FeedError = 16
+	// Too many FeedAttributes for a Feed.
+	FeedErrorEnum_TOO_MANY_ATTRIBUTES FeedErrorEnum_FeedError = 17
+	// The business account is not valid.
+	FeedErrorEnum_INVALID_BUSINESS_ACCOUNT FeedErrorEnum_FeedError = 18
+	// Business account cannot access Google My Business account.
+	FeedErrorEnum_BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT FeedErrorEnum_FeedError = 19
+	// Invalid chain ID provided for affiliate location feed.
+	FeedErrorEnum_INVALID_AFFILIATE_CHAIN_ID FeedErrorEnum_FeedError = 20
+	// There is already a feed with the given system feed generation data.
+	FeedErrorEnum_DUPLICATE_SYSTEM_FEED FeedErrorEnum_FeedError = 21
+	// An error occurred accessing GMB account.
+	FeedErrorEnum_GMB_ACCESS_ERROR FeedErrorEnum_FeedError = 22
+	// A customer cannot have both LOCATION and AFFILIATE_LOCATION feeds.
+	FeedErrorEnum_CANNOT_HAVE_LOCATION_AND_AFFILIATE_LOCATION_FEEDS FeedErrorEnum_FeedError = 23
+)
+
+var FeedErrorEnum_FeedError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ATTRIBUTE_NAMES_NOT_UNIQUE",
+	3:  "ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES",
+	4:  "CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED",
+	5:  "CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED",
+	6:  "CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED",
+	7:  "CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE",
+	8:  "FEED_REMOVED",
+	9:  "INVALID_ORIGIN_VALUE",
+	10: "FEED_ORIGIN_IS_NOT_USER",
+	11: "INVALID_AUTH_TOKEN_FOR_EMAIL",
+	12: "INVALID_EMAIL",
+	13: "DUPLICATE_FEED_NAME",
+	14: "INVALID_FEED_NAME",
+	15: "MISSING_OAUTH_INFO",
+	16: "NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY",
+	17: "TOO_MANY_ATTRIBUTES",
+	18: "INVALID_BUSINESS_ACCOUNT",
+	19: "BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT",
+	20: "INVALID_AFFILIATE_CHAIN_ID",
+	21: "DUPLICATE_SYSTEM_FEED",
+	22: "GMB_ACCESS_ERROR",
+	23: "CANNOT_HAVE_LOCATION_AND_AFFILIATE_LOCATION_FEEDS",
+}
+
+var FeedErrorEnum_FeedError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"ATTRIBUTE_NAMES_NOT_UNIQUE": 2,
+	"ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES":      3,
+	"CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED":       4,
+	"CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED": 5,
+	"CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED":   6,
+	"CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE": 7,
+	"FEED_REMOVED":                                      8,
+	"INVALID_ORIGIN_VALUE":                              9,
+	"FEED_ORIGIN_IS_NOT_USER":                           10,
+	"INVALID_AUTH_TOKEN_FOR_EMAIL":                      11,
+	"INVALID_EMAIL":                                     12,
+	"DUPLICATE_FEED_NAME":                               13,
+	"INVALID_FEED_NAME":                                 14,
+	"MISSING_OAUTH_INFO":                                15,
+	"NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY":        16,
+	"TOO_MANY_ATTRIBUTES":                               17,
+	"INVALID_BUSINESS_ACCOUNT":                          18,
+	"BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT":   19,
+	"INVALID_AFFILIATE_CHAIN_ID":                        20,
+	"DUPLICATE_SYSTEM_FEED":                             21,
+	"GMB_ACCESS_ERROR":                                  22,
+	"CANNOT_HAVE_LOCATION_AND_AFFILIATE_LOCATION_FEEDS": 23,
+}
+
+func (x FeedErrorEnum_FeedError) String() string {
+	return proto.EnumName(FeedErrorEnum_FeedError_name, int32(x))
+}
+
+func (FeedErrorEnum_FeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_541b0c4a2999424f, []int{0, 0}
+}
+
+// Container for enum describing possible feed errors.
+type FeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedErrorEnum) Reset()         { *m = FeedErrorEnum{} }
+func (m *FeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedErrorEnum) ProtoMessage()    {}
+func (*FeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_541b0c4a2999424f, []int{0}
+}
+
+func (m *FeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedErrorEnum.Merge(m, src)
+}
+func (m *FeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedErrorEnum.Size(m)
+}
+func (m *FeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedErrorEnum_FeedError", FeedErrorEnum_FeedError_name, FeedErrorEnum_FeedError_value)
+	proto.RegisterType((*FeedErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_error.proto", fileDescriptor_541b0c4a2999424f)
+}
+
+var fileDescriptor_541b0c4a2999424f = []byte{
+	// 652 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x6e, 0xd4, 0x3a,
+	0x14, 0xbe, 0x9d, 0xde, 0x3b, 0xbd, 0x75, 0xff, 0x5c, 0xf7, 0xf7, 0xf6, 0x56, 0x15, 0x9a, 0x25,
+	0x48, 0x09, 0x30, 0xb0, 0x09, 0x2b, 0x4f, 0xe2, 0x64, 0xac, 0x26, 0xf6, 0x10, 0x3b, 0x29, 0x83,
+	0x46, 0xb2, 0x06, 0x12, 0x46, 0x95, 0xda, 0x49, 0x35, 0x29, 0x7d, 0x20, 0x96, 0xac, 0x79, 0x06,
+	0x16, 0xbc, 0x09, 0x3c, 0x05, 0x72, 0xfe, 0x26, 0xb4, 0x82, 0x55, 0x8e, 0x3e, 0x7f, 0xdf, 0xf9,
+	0x8e, 0xcf, 0xc9, 0x31, 0x30, 0x67, 0x59, 0x36, 0xbb, 0x4a, 0xcd, 0x69, 0x92, 0x57, 0xa1, 0x8e,
+	0xee, 0xfa, 0x66, 0xba, 0x58, 0x64, 0x8b, 0xdc, 0xfc, 0x90, 0xa6, 0x89, 0x2a, 0x62, 0xe3, 0x66,
+	0x91, 0xdd, 0x66, 0xe8, 0xac, 0x64, 0x19, 0xd3, 0x24, 0x37, 0x1a, 0x81, 0x71, 0xd7, 0x37, 0x4a,
+	0xc1, 0xc9, 0x69, 0x9d, 0xf0, 0xe6, 0xd2, 0x9c, 0xce, 0xe7, 0xd9, 0xed, 0xf4, 0xf6, 0x32, 0x9b,
+	0xe7, 0xa5, 0xba, 0xf7, 0xb5, 0x0b, 0xb6, 0xdc, 0x34, 0x4d, 0x88, 0x26, 0x93, 0xf9, 0xc7, 0xeb,
+	0xde, 0x97, 0x2e, 0x58, 0x6f, 0x10, 0xb4, 0x03, 0x36, 0x22, 0x26, 0x46, 0xc4, 0xa6, 0x2e, 0x25,
+	0x0e, 0xfc, 0x0b, 0x6d, 0x80, 0xb5, 0x88, 0x9d, 0x33, 0x7e, 0xc1, 0xe0, 0x0a, 0x3a, 0x03, 0x27,
+	0x58, 0xca, 0x90, 0x0e, 0x22, 0x49, 0x14, 0xc3, 0x01, 0x11, 0x8a, 0x71, 0xa9, 0x22, 0x46, 0x5f,
+	0x47, 0x04, 0x76, 0x90, 0x09, 0x9e, 0x34, 0xe7, 0x42, 0x39, 0xbc, 0x38, 0x0d, 0xb0, 0xb4, 0x87,
+	0x8a, 0xbc, 0xa1, 0x42, 0x52, 0xe6, 0xa9, 0x25, 0x01, 0xae, 0x22, 0x03, 0x3c, 0xb6, 0x31, 0xd3,
+	0xac, 0xd2, 0x73, 0xac, 0x22, 0x41, 0x42, 0xc5, 0x43, 0xea, 0x51, 0xa6, 0x5c, 0x1e, 0x2a, 0x31,
+	0x16, 0x92, 0x04, 0xca, 0x25, 0xc4, 0x81, 0x7f, 0xa3, 0x17, 0xe0, 0xe9, 0x3d, 0xbe, 0xc7, 0xb9,
+	0xe7, 0x93, 0xb6, 0x82, 0x71, 0xf6, 0x8b, 0xea, 0x1f, 0xf4, 0x1c, 0x18, 0xf7, 0x54, 0xfa, 0xa0,
+	0x55, 0xc9, 0x03, 0xa7, 0x6e, 0xcb, 0x29, 0x1a, 0x39, 0x58, 0x92, 0x07, 0x92, 0x0b, 0x2a, 0x87,
+	0xb5, 0x6d, 0x59, 0x04, 0x5c, 0x43, 0x10, 0x6c, 0x16, 0xbc, 0x90, 0x04, 0x3c, 0x26, 0x0e, 0xfc,
+	0x17, 0x1d, 0x83, 0x7d, 0xca, 0x62, 0xec, 0x53, 0xa7, 0x26, 0xc7, 0xd8, 0x8f, 0x08, 0x5c, 0x47,
+	0xff, 0x83, 0xa3, 0x82, 0x5b, 0xc1, 0xb4, 0xea, 0xa5, 0x20, 0x21, 0x04, 0xe8, 0x11, 0x38, 0xad,
+	0x65, 0x38, 0x92, 0x43, 0x25, 0xf9, 0x39, 0x29, 0xaf, 0x47, 0x02, 0x4c, 0x7d, 0xb8, 0x81, 0x76,
+	0xc1, 0x56, 0xcd, 0x28, 0xa1, 0x4d, 0x74, 0x04, 0xf6, 0x9c, 0x68, 0xe4, 0x53, 0xbb, 0xa9, 0x57,
+	0xcf, 0x08, 0x6e, 0xa1, 0x03, 0xb0, 0x5b, 0x73, 0x97, 0xf0, 0x36, 0x3a, 0x04, 0x28, 0xa0, 0x42,
+	0xe8, 0xa9, 0xf0, 0xc2, 0x85, 0x32, 0x97, 0xc3, 0x1d, 0x3d, 0x15, 0x46, 0x2e, 0x96, 0x97, 0x55,
+	0x55, 0x27, 0x06, 0x44, 0x8d, 0x70, 0x28, 0x15, 0x77, 0xab, 0x91, 0xab, 0x73, 0x32, 0x86, 0x50,
+	0xfb, 0x4a, 0xce, 0x55, 0x80, 0xd9, 0xb8, 0x3d, 0xde, 0x5d, 0x74, 0x0a, 0x8e, 0x6b, 0xdf, 0x41,
+	0x24, 0x28, 0x23, 0x42, 0x28, 0x6c, 0xdb, 0x3c, 0x62, 0x12, 0x22, 0xd4, 0x07, 0xe6, 0x7d, 0xb4,
+	0x76, 0xc2, 0xb6, 0xad, 0x51, 0x9f, 0xdb, 0x58, 0x52, 0xce, 0x1a, 0xd1, 0x9e, 0xfe, 0x05, 0x9b,
+	0xc6, 0xb8, 0x2e, 0xf5, 0xa9, 0xbe, 0xab, 0x3d, 0xc4, 0xba, 0x83, 0x0e, 0xdc, 0x47, 0xff, 0x81,
+	0x83, 0x65, 0x0f, 0xda, 0x23, 0x3d, 0x40, 0xfb, 0x00, 0x7a, 0xc1, 0xa0, 0xce, 0x4d, 0xc2, 0x90,
+	0x87, 0xf0, 0x10, 0xbd, 0x04, 0xcf, 0x2a, 0xd3, 0x21, 0x8e, 0x49, 0xcb, 0x92, 0xb5, 0x1d, 0x1a,
+	0x58, 0xe7, 0x12, 0xf0, 0x68, 0xf0, 0x7d, 0x05, 0xf4, 0xde, 0x67, 0xd7, 0xc6, 0x9f, 0xb7, 0x71,
+	0xb0, 0xdd, 0xac, 0xd6, 0x48, 0xef, 0xdf, 0x68, 0xe5, 0xad, 0x53, 0x29, 0x66, 0xd9, 0xd5, 0x74,
+	0x3e, 0x33, 0xb2, 0xc5, 0xcc, 0x9c, 0xa5, 0xf3, 0x62, 0x3b, 0xeb, 0x07, 0xe0, 0xe6, 0x32, 0xff,
+	0xdd, 0x7b, 0xf0, 0xaa, 0xfc, 0x7c, 0xea, 0xac, 0x7a, 0x18, 0x7f, 0xee, 0x9c, 0x79, 0x65, 0x32,
+	0x9c, 0xe4, 0x46, 0x19, 0xea, 0x28, 0xee, 0x1b, 0x85, 0x65, 0xfe, 0xad, 0x26, 0x4c, 0x70, 0x92,
+	0x4f, 0x1a, 0xc2, 0x24, 0xee, 0x4f, 0x4a, 0xc2, 0x8f, 0x4e, 0xaf, 0x44, 0x2d, 0x0b, 0x27, 0xb9,
+	0x65, 0x35, 0x14, 0xcb, 0x8a, 0xfb, 0x96, 0x55, 0x92, 0xde, 0x75, 0x8b, 0xea, 0xfa, 0x3f, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0x73, 0x9c, 0x6a, 0x3e, 0xac, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_item_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_item_error.pb.go
new file mode 100644
index 0000000..041ce9b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_item_error.pb.go
@@ -0,0 +1,163 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_item_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible feed item errors.
+type FeedItemErrorEnum_FeedItemError int32
+
+const (
+	// Enum unspecified.
+	FeedItemErrorEnum_UNSPECIFIED FeedItemErrorEnum_FeedItemError = 0
+	// The received error code is not known in this version.
+	FeedItemErrorEnum_UNKNOWN FeedItemErrorEnum_FeedItemError = 1
+	// Cannot convert the feed attribute value from string to its real type.
+	FeedItemErrorEnum_CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING FeedItemErrorEnum_FeedItemError = 2
+	// Cannot operate on removed feed item.
+	FeedItemErrorEnum_CANNOT_OPERATE_ON_REMOVED_FEED_ITEM FeedItemErrorEnum_FeedItemError = 3
+	// Date time zone does not match the account's time zone.
+	FeedItemErrorEnum_DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE FeedItemErrorEnum_FeedItemError = 4
+	// Feed item with the key attributes could not be found.
+	FeedItemErrorEnum_KEY_ATTRIBUTES_NOT_FOUND FeedItemErrorEnum_FeedItemError = 5
+	// Url feed attribute value is not valid.
+	FeedItemErrorEnum_INVALID_URL FeedItemErrorEnum_FeedItemError = 6
+	// Some key attributes are missing.
+	FeedItemErrorEnum_MISSING_KEY_ATTRIBUTES FeedItemErrorEnum_FeedItemError = 7
+	// Feed item has same key attributes as another feed item.
+	FeedItemErrorEnum_KEY_ATTRIBUTES_NOT_UNIQUE FeedItemErrorEnum_FeedItemError = 8
+	// Cannot modify key attributes on an existing feed item.
+	FeedItemErrorEnum_CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE FeedItemErrorEnum_FeedItemError = 9
+	// The feed attribute value is too large.
+	FeedItemErrorEnum_SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE FeedItemErrorEnum_FeedItemError = 10
+)
+
+var FeedItemErrorEnum_FeedItemError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING",
+	3:  "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
+	4:  "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
+	5:  "KEY_ATTRIBUTES_NOT_FOUND",
+	6:  "INVALID_URL",
+	7:  "MISSING_KEY_ATTRIBUTES",
+	8:  "KEY_ATTRIBUTES_NOT_UNIQUE",
+	9:  "CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE",
+	10: "SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE",
+}
+
+var FeedItemErrorEnum_FeedItemError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING": 2,
+	"CANNOT_OPERATE_ON_REMOVED_FEED_ITEM":        3,
+	"DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE":     4,
+	"KEY_ATTRIBUTES_NOT_FOUND":                   5,
+	"INVALID_URL":                                6,
+	"MISSING_KEY_ATTRIBUTES":                     7,
+	"KEY_ATTRIBUTES_NOT_UNIQUE":                  8,
+	"CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE":          9,
+	"SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE":   10,
+}
+
+func (x FeedItemErrorEnum_FeedItemError) String() string {
+	return proto.EnumName(FeedItemErrorEnum_FeedItemError_name, int32(x))
+}
+
+func (FeedItemErrorEnum_FeedItemError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ff8d93b72f70d82b, []int{0, 0}
+}
+
+// Container for enum describing possible feed item errors.
+type FeedItemErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemErrorEnum) Reset()         { *m = FeedItemErrorEnum{} }
+func (m *FeedItemErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemErrorEnum) ProtoMessage()    {}
+func (*FeedItemErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ff8d93b72f70d82b, []int{0}
+}
+
+func (m *FeedItemErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedItemErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemErrorEnum.Merge(m, src)
+}
+func (m *FeedItemErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemErrorEnum.Size(m)
+}
+func (m *FeedItemErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedItemErrorEnum_FeedItemError", FeedItemErrorEnum_FeedItemError_name, FeedItemErrorEnum_FeedItemError_value)
+	proto.RegisterType((*FeedItemErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedItemErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_item_error.proto", fileDescriptor_ff8d93b72f70d82b)
+}
+
+var fileDescriptor_ff8d93b72f70d82b = []byte{
+	// 486 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdf, 0x8a, 0xd3, 0x4e,
+	0x18, 0xfd, 0xb5, 0xfd, 0xb9, 0xab, 0xb3, 0x88, 0xe3, 0x5c, 0x88, 0x2e, 0xeb, 0x82, 0x15, 0xff,
+	0xb0, 0x48, 0x72, 0x11, 0xaf, 0xe2, 0xd5, 0xb4, 0xf9, 0x52, 0x86, 0x6d, 0x66, 0x6a, 0x32, 0x13,
+	0xd9, 0x52, 0xf8, 0xa8, 0x26, 0x86, 0xc2, 0x36, 0x29, 0x4d, 0xdc, 0x57, 0xf0, 0x3d, 0xbc, 0xf4,
+	0x51, 0x7c, 0x14, 0xc1, 0x0b, 0xdf, 0x40, 0xd2, 0x69, 0x2b, 0x05, 0xf5, 0x2a, 0x87, 0x93, 0x73,
+	0xce, 0x37, 0x33, 0xe7, 0x23, 0xaf, 0x8b, 0xaa, 0x2a, 0xae, 0x73, 0x77, 0x9e, 0xd5, 0xae, 0x85,
+	0x2d, 0xba, 0xf1, 0xdc, 0x7c, 0xbd, 0xae, 0xd6, 0xb5, 0xfb, 0x31, 0xcf, 0x33, 0x5c, 0x34, 0xf9,
+	0x12, 0x37, 0x84, 0xb3, 0x5a, 0x57, 0x4d, 0xc5, 0xce, 0xad, 0xd4, 0x99, 0x67, 0xb5, 0xb3, 0x77,
+	0x39, 0x37, 0x9e, 0x63, 0x5d, 0xa7, 0x67, 0xbb, 0xd4, 0xd5, 0xc2, 0x9d, 0x97, 0x65, 0xd5, 0xcc,
+	0x9b, 0x45, 0x55, 0xd6, 0xd6, 0xdd, 0xff, 0xdc, 0x23, 0xf7, 0xc3, 0x3c, 0xcf, 0x44, 0x93, 0x2f,
+	0xa1, 0x35, 0x40, 0xf9, 0x69, 0xd9, 0xff, 0xd9, 0x25, 0x77, 0x0f, 0x58, 0x76, 0x8f, 0x9c, 0x18,
+	0x99, 0x4c, 0x60, 0x28, 0x42, 0x01, 0x01, 0xfd, 0x8f, 0x9d, 0x90, 0x63, 0x23, 0x2f, 0xa5, 0x7a,
+	0x27, 0x69, 0x87, 0x39, 0xe4, 0x62, 0xc8, 0xa5, 0x54, 0x1a, 0x87, 0x4a, 0xa6, 0x10, 0x6b, 0xe4,
+	0x5a, 0xc7, 0x62, 0x60, 0x34, 0x60, 0xca, 0xc7, 0x06, 0x30, 0x8c, 0x55, 0x84, 0x89, 0x8e, 0x85,
+	0x1c, 0xd1, 0x2e, 0x7b, 0x41, 0x9e, 0x6e, 0xf5, 0x6a, 0x02, 0x31, 0xd7, 0x80, 0x4a, 0x62, 0x0c,
+	0x91, 0x4a, 0x21, 0xc0, 0x10, 0x20, 0x40, 0xa1, 0x21, 0xa2, 0x3d, 0x76, 0x41, 0x9e, 0x07, 0xed,
+	0x6f, 0x2d, 0x22, 0xc0, 0xc8, 0x24, 0x1a, 0x07, 0x80, 0x42, 0x22, 0x1f, 0x0e, 0x95, 0x91, 0xda,
+	0xf2, 0x53, 0x25, 0x81, 0xfe, 0xcf, 0xce, 0xc8, 0xc3, 0x4b, 0xb8, 0xfa, 0x3d, 0x39, 0xc1, 0x76,
+	0x40, 0xa8, 0x8c, 0x0c, 0xe8, 0xad, 0xf6, 0x02, 0x42, 0xa6, 0x7c, 0x2c, 0x02, 0x34, 0xf1, 0x98,
+	0x1e, 0xb1, 0x53, 0xf2, 0x20, 0x12, 0x49, 0x22, 0xe4, 0x08, 0x0f, 0x6d, 0xf4, 0x98, 0x3d, 0x26,
+	0x8f, 0xfe, 0x10, 0x65, 0xa4, 0x78, 0x6b, 0x80, 0xde, 0x66, 0xcf, 0xc8, 0x93, 0xed, 0xf1, 0x23,
+	0x15, 0x88, 0xf0, 0xea, 0x30, 0xc0, 0xde, 0x98, 0xde, 0x61, 0xaf, 0xc8, 0xcb, 0x44, 0x4c, 0x01,
+	0xb5, 0x52, 0x38, 0xe6, 0xf1, 0x08, 0x30, 0x54, 0x31, 0x46, 0x66, 0xac, 0xc5, 0xf6, 0x55, 0xf6,
+	0x1e, 0x4a, 0x06, 0x3f, 0x3a, 0xa4, 0xff, 0xa1, 0x5a, 0x3a, 0xff, 0xae, 0x73, 0xc0, 0x0e, 0x7a,
+	0x99, 0xb4, 0x25, 0x4e, 0x3a, 0xd3, 0x60, 0xeb, 0x2a, 0xaa, 0xeb, 0x79, 0x59, 0x38, 0xd5, 0xba,
+	0x70, 0x8b, 0xbc, 0xdc, 0x54, 0xbc, 0x5b, 0xa5, 0xd5, 0xa2, 0xfe, 0xdb, 0x66, 0xbd, 0xb1, 0x9f,
+	0x2f, 0xdd, 0xde, 0x88, 0xf3, 0xaf, 0xdd, 0xf3, 0x91, 0x0d, 0xe3, 0x59, 0xed, 0x58, 0xd8, 0xa2,
+	0xd4, 0x73, 0x36, 0x23, 0xeb, 0x6f, 0x3b, 0xc1, 0x8c, 0x67, 0xf5, 0x6c, 0x2f, 0x98, 0xa5, 0xde,
+	0xcc, 0x0a, 0xbe, 0x77, 0xfb, 0x96, 0xf5, 0x7d, 0x9e, 0xd5, 0xbe, 0xbf, 0x97, 0xf8, 0x7e, 0xea,
+	0xf9, 0xbe, 0x15, 0xbd, 0x3f, 0xda, 0x9c, 0xce, 0xfb, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x5a,
+	0xb4, 0xe8, 0xf6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_item_target_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_item_target_error.pb.go
new file mode 100644
index 0000000..1f1480a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_item_target_error.pb.go
@@ -0,0 +1,161 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_item_target_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible feed item target errors.
+type FeedItemTargetErrorEnum_FeedItemTargetError int32
+
+const (
+	// Enum unspecified.
+	FeedItemTargetErrorEnum_UNSPECIFIED FeedItemTargetErrorEnum_FeedItemTargetError = 0
+	// The received error code is not known in this version.
+	FeedItemTargetErrorEnum_UNKNOWN FeedItemTargetErrorEnum_FeedItemTargetError = 1
+	// On CREATE, the FeedItemTarget must have a populated field in the oneof
+	// target.
+	FeedItemTargetErrorEnum_MUST_SET_TARGET_ONEOF_ON_CREATE FeedItemTargetErrorEnum_FeedItemTargetError = 2
+	// The specified feed item target already exists, so it cannot be added.
+	FeedItemTargetErrorEnum_FEED_ITEM_TARGET_ALREADY_EXISTS FeedItemTargetErrorEnum_FeedItemTargetError = 3
+	// The schedules for a given feed item cannot overlap.
+	FeedItemTargetErrorEnum_FEED_ITEM_SCHEDULES_CANNOT_OVERLAP FeedItemTargetErrorEnum_FeedItemTargetError = 4
+	// Too many targets of a given type were added for a single feed item.
+	FeedItemTargetErrorEnum_TARGET_LIMIT_EXCEEDED_FOR_GIVEN_TYPE FeedItemTargetErrorEnum_FeedItemTargetError = 5
+	// Too many AdSchedules are enabled for the feed item for the given day.
+	FeedItemTargetErrorEnum_TOO_MANY_SCHEDULES_PER_DAY FeedItemTargetErrorEnum_FeedItemTargetError = 6
+	// A feed item may either have an enabled campaign target or an enabled ad
+	// group target.
+	FeedItemTargetErrorEnum_CANNOT_HAVE_ENABLED_CAMPAIGN_AND_ENABLED_AD_GROUP_TARGETS FeedItemTargetErrorEnum_FeedItemTargetError = 7
+	// Duplicate ad schedules aren't allowed.
+	FeedItemTargetErrorEnum_DUPLICATE_AD_SCHEDULE FeedItemTargetErrorEnum_FeedItemTargetError = 8
+	// Duplicate keywords aren't allowed.
+	FeedItemTargetErrorEnum_DUPLICATE_KEYWORD FeedItemTargetErrorEnum_FeedItemTargetError = 9
+)
+
+var FeedItemTargetErrorEnum_FeedItemTargetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MUST_SET_TARGET_ONEOF_ON_CREATE",
+	3: "FEED_ITEM_TARGET_ALREADY_EXISTS",
+	4: "FEED_ITEM_SCHEDULES_CANNOT_OVERLAP",
+	5: "TARGET_LIMIT_EXCEEDED_FOR_GIVEN_TYPE",
+	6: "TOO_MANY_SCHEDULES_PER_DAY",
+	7: "CANNOT_HAVE_ENABLED_CAMPAIGN_AND_ENABLED_AD_GROUP_TARGETS",
+	8: "DUPLICATE_AD_SCHEDULE",
+	9: "DUPLICATE_KEYWORD",
+}
+
+var FeedItemTargetErrorEnum_FeedItemTargetError_value = map[string]int32{
+	"UNSPECIFIED":                                               0,
+	"UNKNOWN":                                                   1,
+	"MUST_SET_TARGET_ONEOF_ON_CREATE":                           2,
+	"FEED_ITEM_TARGET_ALREADY_EXISTS":                           3,
+	"FEED_ITEM_SCHEDULES_CANNOT_OVERLAP":                        4,
+	"TARGET_LIMIT_EXCEEDED_FOR_GIVEN_TYPE":                      5,
+	"TOO_MANY_SCHEDULES_PER_DAY":                                6,
+	"CANNOT_HAVE_ENABLED_CAMPAIGN_AND_ENABLED_AD_GROUP_TARGETS": 7,
+	"DUPLICATE_AD_SCHEDULE":                                     8,
+	"DUPLICATE_KEYWORD":                                         9,
+}
+
+func (x FeedItemTargetErrorEnum_FeedItemTargetError) String() string {
+	return proto.EnumName(FeedItemTargetErrorEnum_FeedItemTargetError_name, int32(x))
+}
+
+func (FeedItemTargetErrorEnum_FeedItemTargetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_3b604c6468bb0176, []int{0, 0}
+}
+
+// Container for enum describing possible feed item target errors.
+type FeedItemTargetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemTargetErrorEnum) Reset()         { *m = FeedItemTargetErrorEnum{} }
+func (m *FeedItemTargetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTargetErrorEnum) ProtoMessage()    {}
+func (*FeedItemTargetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3b604c6468bb0176, []int{0}
+}
+
+func (m *FeedItemTargetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTargetErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedItemTargetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTargetErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTargetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTargetErrorEnum.Merge(m, src)
+}
+func (m *FeedItemTargetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTargetErrorEnum.Size(m)
+}
+func (m *FeedItemTargetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTargetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTargetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedItemTargetErrorEnum_FeedItemTargetError", FeedItemTargetErrorEnum_FeedItemTargetError_name, FeedItemTargetErrorEnum_FeedItemTargetError_value)
+	proto.RegisterType((*FeedItemTargetErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedItemTargetErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_item_target_error.proto", fileDescriptor_3b604c6468bb0176)
+}
+
+var fileDescriptor_3b604c6468bb0176 = []byte{
+	// 490 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x6e, 0xd3, 0x4c,
+	0x14, 0x85, 0xff, 0xb8, 0x3f, 0x2d, 0x4c, 0x17, 0x18, 0xa3, 0x0a, 0xa8, 0x50, 0x90, 0x02, 0x42,
+	0xac, 0xec, 0x85, 0x57, 0xb8, 0x62, 0x31, 0xf1, 0xdc, 0xb8, 0x56, 0x9d, 0x19, 0xcb, 0x1e, 0xbb,
+	0x0d, 0x8a, 0x74, 0x65, 0xb0, 0xb1, 0x22, 0x35, 0x76, 0x64, 0x9b, 0x3e, 0x10, 0x4b, 0x1e, 0x85,
+	0xa7, 0x60, 0xcd, 0x96, 0x2d, 0x0b, 0xe4, 0x4c, 0x9c, 0xb2, 0x28, 0xac, 0xe6, 0xe8, 0xde, 0xef,
+	0x9c, 0x19, 0xe9, 0x0c, 0x39, 0x2b, 0xeb, 0xba, 0xbc, 0x2e, 0xac, 0x2c, 0x6f, 0x2d, 0x25, 0x7b,
+	0x75, 0x63, 0x5b, 0x45, 0xd3, 0xd4, 0x4d, 0x6b, 0x7d, 0x2a, 0x8a, 0x1c, 0x57, 0x5d, 0xb1, 0xc6,
+	0x2e, 0x6b, 0xca, 0xa2, 0xc3, 0xed, 0xdc, 0xdc, 0x34, 0x75, 0x57, 0x1b, 0x63, 0xe5, 0x30, 0xb3,
+	0xbc, 0x35, 0xf7, 0x66, 0xf3, 0xc6, 0x36, 0x95, 0xf9, 0xf4, 0xf9, 0x10, 0xbe, 0x59, 0x59, 0x59,
+	0x55, 0xd5, 0x5d, 0xd6, 0xad, 0xea, 0xaa, 0x55, 0xee, 0xc9, 0x2f, 0x8d, 0x3c, 0x99, 0x15, 0x45,
+	0xee, 0x77, 0xc5, 0x5a, 0x6e, 0xc3, 0xa1, 0xb7, 0x41, 0xf5, 0x79, 0x3d, 0xf9, 0xae, 0x91, 0xc7,
+	0x77, 0xec, 0x8c, 0x87, 0xe4, 0x38, 0xe1, 0x71, 0x08, 0xae, 0x3f, 0xf3, 0x81, 0xe9, 0xff, 0x19,
+	0xc7, 0xe4, 0x28, 0xe1, 0x17, 0x5c, 0x5c, 0x72, 0x7d, 0x64, 0xbc, 0x24, 0x2f, 0xe6, 0x49, 0x2c,
+	0x31, 0x06, 0x89, 0x92, 0x46, 0x1e, 0x48, 0x14, 0x1c, 0xc4, 0x0c, 0x05, 0x47, 0x37, 0x02, 0x2a,
+	0x41, 0xd7, 0x7a, 0x68, 0x06, 0xc0, 0xd0, 0x97, 0x30, 0x1f, 0x28, 0x1a, 0x44, 0x40, 0xd9, 0x02,
+	0xe1, 0xca, 0x8f, 0x65, 0xac, 0x1f, 0x18, 0xaf, 0xc9, 0xe4, 0x16, 0x8a, 0xdd, 0x73, 0x60, 0x49,
+	0x00, 0x31, 0xba, 0x94, 0x73, 0x21, 0x51, 0xa4, 0x10, 0x05, 0x34, 0xd4, 0xff, 0x37, 0xde, 0x90,
+	0x57, 0xbb, 0x88, 0xc0, 0x9f, 0xfb, 0x12, 0xe1, 0xca, 0x05, 0x60, 0xc0, 0x70, 0x26, 0x22, 0xf4,
+	0xfc, 0x14, 0x38, 0xca, 0x45, 0x08, 0xfa, 0x3d, 0x63, 0x4c, 0x4e, 0xa5, 0x10, 0x38, 0xa7, 0x7c,
+	0xf1, 0x47, 0x60, 0x08, 0x11, 0x32, 0xba, 0xd0, 0x0f, 0x8d, 0x77, 0xe4, 0xed, 0x2e, 0xfd, 0x9c,
+	0xa6, 0x80, 0xc0, 0xe9, 0x34, 0x00, 0x86, 0x2e, 0x9d, 0x87, 0xd4, 0xf7, 0x38, 0x52, 0xce, 0xf6,
+	0x43, 0xca, 0xd0, 0x8b, 0x44, 0x12, 0xee, 0x9e, 0x1f, 0xeb, 0x47, 0xc6, 0x33, 0x72, 0xc2, 0x92,
+	0x30, 0xf0, 0x5d, 0x2a, 0xa1, 0xdf, 0x0f, 0x57, 0xe8, 0xf7, 0x8d, 0x13, 0xf2, 0xe8, 0x76, 0x75,
+	0x01, 0x8b, 0x4b, 0x11, 0x31, 0xfd, 0xc1, 0xf4, 0xe7, 0x88, 0x4c, 0x3e, 0xd6, 0x6b, 0xf3, 0xdf,
+	0x1d, 0x4e, 0x9f, 0xde, 0x51, 0x43, 0xd8, 0xf7, 0x17, 0x8e, 0xde, 0xb3, 0x9d, 0xb7, 0xac, 0xaf,
+	0xb3, 0xaa, 0x34, 0xeb, 0xa6, 0xb4, 0xca, 0xa2, 0xda, 0xb6, 0x3b, 0x7c, 0xa6, 0xcd, 0xaa, 0xfd,
+	0xdb, 0xdf, 0x3a, 0x53, 0xc7, 0x17, 0xed, 0xc0, 0xa3, 0xf4, 0xab, 0x36, 0xf6, 0x54, 0x18, 0xcd,
+	0x5b, 0x53, 0xc9, 0x5e, 0xa5, 0xb6, 0xb9, 0xbd, 0xb2, 0xfd, 0x36, 0x00, 0x4b, 0x9a, 0xb7, 0xcb,
+	0x3d, 0xb0, 0x4c, 0xed, 0xa5, 0x02, 0x7e, 0x68, 0x13, 0x35, 0x75, 0x1c, 0x9a, 0xb7, 0x8e, 0xb3,
+	0x47, 0x1c, 0x27, 0xb5, 0x1d, 0x47, 0x41, 0x1f, 0x0e, 0xb7, 0xaf, 0xb3, 0x7f, 0x07, 0x00, 0x00,
+	0xff, 0xff, 0xf7, 0x53, 0x0c, 0x48, 0xf8, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_item_validation_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_item_validation_error.pb.go
new file mode 100644
index 0000000..15cb23d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_item_validation_error.pb.go
@@ -0,0 +1,607 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_item_validation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The possible validation errors of a feed item.
+type FeedItemValidationErrorEnum_FeedItemValidationError int32
+
+const (
+	// No value has been specified.
+	FeedItemValidationErrorEnum_UNSPECIFIED FeedItemValidationErrorEnum_FeedItemValidationError = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemValidationErrorEnum_UNKNOWN FeedItemValidationErrorEnum_FeedItemValidationError = 1
+	// String is too short.
+	FeedItemValidationErrorEnum_STRING_TOO_SHORT FeedItemValidationErrorEnum_FeedItemValidationError = 2
+	// String is too long.
+	FeedItemValidationErrorEnum_STRING_TOO_LONG FeedItemValidationErrorEnum_FeedItemValidationError = 3
+	// Value is not provided.
+	FeedItemValidationErrorEnum_VALUE_NOT_SPECIFIED FeedItemValidationErrorEnum_FeedItemValidationError = 4
+	// Phone number format is invalid for region.
+	FeedItemValidationErrorEnum_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT FeedItemValidationErrorEnum_FeedItemValidationError = 5
+	// String does not represent a phone number.
+	FeedItemValidationErrorEnum_INVALID_PHONE_NUMBER FeedItemValidationErrorEnum_FeedItemValidationError = 6
+	// Phone number format is not compatible with country code.
+	FeedItemValidationErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY FeedItemValidationErrorEnum_FeedItemValidationError = 7
+	// Premium rate number is not allowed.
+	FeedItemValidationErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 8
+	// Phone number type is not allowed.
+	FeedItemValidationErrorEnum_DISALLOWED_NUMBER_TYPE FeedItemValidationErrorEnum_FeedItemValidationError = 9
+	// Specified value is outside of the valid range.
+	FeedItemValidationErrorEnum_VALUE_OUT_OF_RANGE FeedItemValidationErrorEnum_FeedItemValidationError = 10
+	// Call tracking is not supported in the selected country.
+	FeedItemValidationErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY FeedItemValidationErrorEnum_FeedItemValidationError = 11
+	// Customer is not whitelisted for call tracking.
+	FeedItemValidationErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING FeedItemValidationErrorEnum_FeedItemValidationError = 12
+	// Country code is invalid.
+	FeedItemValidationErrorEnum_INVALID_COUNTRY_CODE FeedItemValidationErrorEnum_FeedItemValidationError = 13
+	// The specified mobile app id is invalid.
+	FeedItemValidationErrorEnum_INVALID_APP_ID FeedItemValidationErrorEnum_FeedItemValidationError = 14
+	// Some required field attributes are missing.
+	FeedItemValidationErrorEnum_MISSING_ATTRIBUTES_FOR_FIELDS FeedItemValidationErrorEnum_FeedItemValidationError = 15
+	// Invalid email button type for email extension.
+	FeedItemValidationErrorEnum_INVALID_TYPE_ID FeedItemValidationErrorEnum_FeedItemValidationError = 16
+	// Email address is invalid.
+	FeedItemValidationErrorEnum_INVALID_EMAIL_ADDRESS FeedItemValidationErrorEnum_FeedItemValidationError = 17
+	// The HTTPS URL in email extension is invalid.
+	FeedItemValidationErrorEnum_INVALID_HTTPS_URL FeedItemValidationErrorEnum_FeedItemValidationError = 18
+	// Delivery address is missing from email extension.
+	FeedItemValidationErrorEnum_MISSING_DELIVERY_ADDRESS FeedItemValidationErrorEnum_FeedItemValidationError = 19
+	// FeedItem scheduling start date comes after end date.
+	FeedItemValidationErrorEnum_START_DATE_AFTER_END_DATE FeedItemValidationErrorEnum_FeedItemValidationError = 20
+	// FeedItem scheduling start time is missing.
+	FeedItemValidationErrorEnum_MISSING_FEED_ITEM_START_TIME FeedItemValidationErrorEnum_FeedItemValidationError = 21
+	// FeedItem scheduling end time is missing.
+	FeedItemValidationErrorEnum_MISSING_FEED_ITEM_END_TIME FeedItemValidationErrorEnum_FeedItemValidationError = 22
+	// Cannot compute system attributes on a FeedItem that has no FeedItemId.
+	FeedItemValidationErrorEnum_MISSING_FEED_ITEM_ID FeedItemValidationErrorEnum_FeedItemValidationError = 23
+	// Call extension vanity phone numbers are not supported.
+	FeedItemValidationErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 24
+	// Invalid review text.
+	FeedItemValidationErrorEnum_INVALID_REVIEW_EXTENSION_SNIPPET FeedItemValidationErrorEnum_FeedItemValidationError = 25
+	// Invalid format for numeric value in ad parameter.
+	FeedItemValidationErrorEnum_INVALID_NUMBER_FORMAT FeedItemValidationErrorEnum_FeedItemValidationError = 26
+	// Invalid format for date value in ad parameter.
+	FeedItemValidationErrorEnum_INVALID_DATE_FORMAT FeedItemValidationErrorEnum_FeedItemValidationError = 27
+	// Invalid format for price value in ad parameter.
+	FeedItemValidationErrorEnum_INVALID_PRICE_FORMAT FeedItemValidationErrorEnum_FeedItemValidationError = 28
+	// Unrecognized type given for value in ad parameter.
+	FeedItemValidationErrorEnum_UNKNOWN_PLACEHOLDER_FIELD FeedItemValidationErrorEnum_FeedItemValidationError = 29
+	// Enhanced sitelinks must have both description lines specified.
+	FeedItemValidationErrorEnum_MISSING_ENHANCED_SITELINK_DESCRIPTION_LINE FeedItemValidationErrorEnum_FeedItemValidationError = 30
+	// Review source is ineligible.
+	FeedItemValidationErrorEnum_REVIEW_EXTENSION_SOURCE_INELIGIBLE FeedItemValidationErrorEnum_FeedItemValidationError = 31
+	// Review text cannot contain hyphens or dashes.
+	FeedItemValidationErrorEnum_HYPHENS_IN_REVIEW_EXTENSION_SNIPPET FeedItemValidationErrorEnum_FeedItemValidationError = 32
+	// Review text cannot contain double quote characters.
+	FeedItemValidationErrorEnum_DOUBLE_QUOTES_IN_REVIEW_EXTENSION_SNIPPET FeedItemValidationErrorEnum_FeedItemValidationError = 33
+	// Review text cannot contain quote characters.
+	FeedItemValidationErrorEnum_QUOTES_IN_REVIEW_EXTENSION_SNIPPET FeedItemValidationErrorEnum_FeedItemValidationError = 34
+	// Parameters are encoded in the wrong format.
+	FeedItemValidationErrorEnum_INVALID_FORM_ENCODED_PARAMS FeedItemValidationErrorEnum_FeedItemValidationError = 35
+	// URL parameter name must contain only letters, numbers, underscores, and
+	// dashes.
+	FeedItemValidationErrorEnum_INVALID_URL_PARAMETER_NAME FeedItemValidationErrorEnum_FeedItemValidationError = 36
+	// Cannot find address location.
+	FeedItemValidationErrorEnum_NO_GEOCODING_RESULT FeedItemValidationErrorEnum_FeedItemValidationError = 37
+	// Review extension text has source name.
+	FeedItemValidationErrorEnum_SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT FeedItemValidationErrorEnum_FeedItemValidationError = 38
+	// Some phone numbers can be shorter than usual. Some of these short numbers
+	// are carrier-specific, and we disallow those in ad extensions because they
+	// will not be available to all users.
+	FeedItemValidationErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 39
+	// Triggered when a request references a placeholder field id that does not
+	// exist.
+	FeedItemValidationErrorEnum_INVALID_PLACEHOLDER_FIELD_ID FeedItemValidationErrorEnum_FeedItemValidationError = 40
+	// URL contains invalid ValueTrack tags or format.
+	FeedItemValidationErrorEnum_INVALID_URL_TAG FeedItemValidationErrorEnum_FeedItemValidationError = 41
+	// Provided list exceeds acceptable size.
+	FeedItemValidationErrorEnum_LIST_TOO_LONG FeedItemValidationErrorEnum_FeedItemValidationError = 42
+	// Certain combinations of attributes aren't allowed to be specified in the
+	// same feed item.
+	FeedItemValidationErrorEnum_INVALID_ATTRIBUTES_COMBINATION FeedItemValidationErrorEnum_FeedItemValidationError = 43
+	// An attribute has the same value repeatedly.
+	FeedItemValidationErrorEnum_DUPLICATE_VALUES FeedItemValidationErrorEnum_FeedItemValidationError = 44
+	// Advertisers can link a conversion action with a phone number to indicate
+	// that sufficiently long calls forwarded to that phone number should be
+	// counted as conversions of the specified type.  This is an error message
+	// indicating that the conversion action specified is invalid (e.g., the
+	// conversion action does not exist within the appropriate Google Ads
+	// account, or it is a type of conversion not appropriate to phone call
+	// conversions).
+	FeedItemValidationErrorEnum_INVALID_CALL_CONVERSION_ACTION_ID FeedItemValidationErrorEnum_FeedItemValidationError = 45
+	// Tracking template requires final url to be set.
+	FeedItemValidationErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS FeedItemValidationErrorEnum_FeedItemValidationError = 46
+	// An app id was provided that doesn't exist in the given app store.
+	FeedItemValidationErrorEnum_APP_ID_DOESNT_EXIST_IN_APP_STORE FeedItemValidationErrorEnum_FeedItemValidationError = 47
+	// Invalid U2 final url.
+	FeedItemValidationErrorEnum_INVALID_FINAL_URL FeedItemValidationErrorEnum_FeedItemValidationError = 48
+	// Invalid U2 tracking url.
+	FeedItemValidationErrorEnum_INVALID_TRACKING_URL FeedItemValidationErrorEnum_FeedItemValidationError = 49
+	// Final URL should start from App download URL.
+	FeedItemValidationErrorEnum_INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL FeedItemValidationErrorEnum_FeedItemValidationError = 50
+	// List provided is too short.
+	FeedItemValidationErrorEnum_LIST_TOO_SHORT FeedItemValidationErrorEnum_FeedItemValidationError = 51
+	// User Action field has invalid value.
+	FeedItemValidationErrorEnum_INVALID_USER_ACTION FeedItemValidationErrorEnum_FeedItemValidationError = 52
+	// Type field has invalid value.
+	FeedItemValidationErrorEnum_INVALID_TYPE_NAME FeedItemValidationErrorEnum_FeedItemValidationError = 53
+	// Change status for event is invalid.
+	FeedItemValidationErrorEnum_INVALID_EVENT_CHANGE_STATUS FeedItemValidationErrorEnum_FeedItemValidationError = 54
+	// The header of a structured snippets extension is not one of the valid
+	// headers.
+	FeedItemValidationErrorEnum_INVALID_SNIPPETS_HEADER FeedItemValidationErrorEnum_FeedItemValidationError = 55
+	// Android app link is not formatted correctly
+	FeedItemValidationErrorEnum_INVALID_ANDROID_APP_LINK FeedItemValidationErrorEnum_FeedItemValidationError = 56
+	// Phone number incompatible with call tracking for country.
+	FeedItemValidationErrorEnum_NUMBER_TYPE_WITH_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY FeedItemValidationErrorEnum_FeedItemValidationError = 57
+	// The input is identical to a reserved keyword
+	FeedItemValidationErrorEnum_RESERVED_KEYWORD_OTHER FeedItemValidationErrorEnum_FeedItemValidationError = 58
+	// Each option label in the message extension must be unique.
+	FeedItemValidationErrorEnum_DUPLICATE_OPTION_LABELS FeedItemValidationErrorEnum_FeedItemValidationError = 59
+	// Each option prefill in the message extension must be unique.
+	FeedItemValidationErrorEnum_DUPLICATE_OPTION_PREFILLS FeedItemValidationErrorEnum_FeedItemValidationError = 60
+	// In message extensions, the number of optional labels and optional
+	// prefills must be the same.
+	FeedItemValidationErrorEnum_UNEQUAL_LIST_LENGTHS FeedItemValidationErrorEnum_FeedItemValidationError = 61
+	// All currency codes in an ad extension must be the same.
+	FeedItemValidationErrorEnum_INCONSISTENT_CURRENCY_CODES FeedItemValidationErrorEnum_FeedItemValidationError = 62
+	// Headers in price extension are not unique.
+	FeedItemValidationErrorEnum_PRICE_EXTENSION_HAS_DUPLICATED_HEADERS FeedItemValidationErrorEnum_FeedItemValidationError = 63
+	// Header and description in an item are the same.
+	FeedItemValidationErrorEnum_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION FeedItemValidationErrorEnum_FeedItemValidationError = 64
+	// Price extension has too few items.
+	FeedItemValidationErrorEnum_PRICE_EXTENSION_HAS_TOO_FEW_ITEMS FeedItemValidationErrorEnum_FeedItemValidationError = 65
+	// The given value is not supported.
+	FeedItemValidationErrorEnum_UNSUPPORTED_VALUE FeedItemValidationErrorEnum_FeedItemValidationError = 66
+	// Invalid final mobile url.
+	FeedItemValidationErrorEnum_INVALID_FINAL_MOBILE_URL FeedItemValidationErrorEnum_FeedItemValidationError = 67
+	// The given string value of Label contains invalid characters
+	FeedItemValidationErrorEnum_INVALID_KEYWORDLESS_AD_RULE_LABEL FeedItemValidationErrorEnum_FeedItemValidationError = 68
+	// The given URL contains value track parameters.
+	FeedItemValidationErrorEnum_VALUE_TRACK_PARAMETER_NOT_SUPPORTED FeedItemValidationErrorEnum_FeedItemValidationError = 69
+	// The given value is not supported in the selected language of an
+	// extension.
+	FeedItemValidationErrorEnum_UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE FeedItemValidationErrorEnum_FeedItemValidationError = 70
+	// The iOS app link is not formatted correctly.
+	FeedItemValidationErrorEnum_INVALID_IOS_APP_LINK FeedItemValidationErrorEnum_FeedItemValidationError = 71
+	// iOS app link or iOS app store id is missing.
+	FeedItemValidationErrorEnum_MISSING_IOS_APP_LINK_OR_IOS_APP_STORE_ID FeedItemValidationErrorEnum_FeedItemValidationError = 72
+	// Promotion time is invalid.
+	FeedItemValidationErrorEnum_PROMOTION_INVALID_TIME FeedItemValidationErrorEnum_FeedItemValidationError = 73
+	// Both the percent off and money amount off fields are set.
+	FeedItemValidationErrorEnum_PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF FeedItemValidationErrorEnum_FeedItemValidationError = 74
+	// Both the promotion code and orders over amount fields are set.
+	FeedItemValidationErrorEnum_PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT FeedItemValidationErrorEnum_FeedItemValidationError = 75
+	// Too many decimal places are specified.
+	FeedItemValidationErrorEnum_TOO_MANY_DECIMAL_PLACES_SPECIFIED FeedItemValidationErrorEnum_FeedItemValidationError = 76
+	// Ad Customizers are present and not allowed.
+	FeedItemValidationErrorEnum_AD_CUSTOMIZERS_NOT_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 77
+	// Language code is not valid.
+	FeedItemValidationErrorEnum_INVALID_LANGUAGE_CODE FeedItemValidationErrorEnum_FeedItemValidationError = 78
+	// Language is not supported.
+	FeedItemValidationErrorEnum_UNSUPPORTED_LANGUAGE FeedItemValidationErrorEnum_FeedItemValidationError = 79
+	// IF Function is present and not allowed.
+	FeedItemValidationErrorEnum_IF_FUNCTION_NOT_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 80
+	// Final url suffix is not valid.
+	FeedItemValidationErrorEnum_INVALID_FINAL_URL_SUFFIX FeedItemValidationErrorEnum_FeedItemValidationError = 81
+	// Final url suffix contains an invalid tag.
+	FeedItemValidationErrorEnum_INVALID_TAG_IN_FINAL_URL_SUFFIX FeedItemValidationErrorEnum_FeedItemValidationError = 82
+	// Final url suffix is formatted incorrectly.
+	FeedItemValidationErrorEnum_INVALID_FINAL_URL_SUFFIX_FORMAT FeedItemValidationErrorEnum_FeedItemValidationError = 83
+	// Consent for call recording, which is required for the use of call
+	// extensions, was not provided by the advertiser. Please see
+	// https://support.google.com/google-ads/answer/7412639.
+	FeedItemValidationErrorEnum_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED FeedItemValidationErrorEnum_FeedItemValidationError = 84
+	// Multiple message delivery options are set.
+	FeedItemValidationErrorEnum_ONLY_ONE_DELIVERY_OPTION_IS_ALLOWED FeedItemValidationErrorEnum_FeedItemValidationError = 85
+	// No message delivery option is set.
+	FeedItemValidationErrorEnum_NO_DELIVERY_OPTION_IS_SET FeedItemValidationErrorEnum_FeedItemValidationError = 86
+	// String value of conversion reporting state field is not valid.
+	FeedItemValidationErrorEnum_INVALID_CONVERSION_REPORTING_STATE FeedItemValidationErrorEnum_FeedItemValidationError = 87
+	// Image size is not right.
+	FeedItemValidationErrorEnum_IMAGE_SIZE_WRONG FeedItemValidationErrorEnum_FeedItemValidationError = 88
+	// Email delivery is not supported in the country specified in the country
+	// code field.
+	FeedItemValidationErrorEnum_EMAIL_DELIVERY_NOT_AVAILABLE_IN_COUNTRY FeedItemValidationErrorEnum_FeedItemValidationError = 89
+	// Auto reply is not supported in the country specified in the country code
+	// field.
+	FeedItemValidationErrorEnum_AUTO_REPLY_NOT_AVAILABLE_IN_COUNTRY FeedItemValidationErrorEnum_FeedItemValidationError = 90
+	// Invalid value specified for latitude.
+	FeedItemValidationErrorEnum_INVALID_LATITUDE_VALUE FeedItemValidationErrorEnum_FeedItemValidationError = 91
+	// Invalid value specified for longitude.
+	FeedItemValidationErrorEnum_INVALID_LONGITUDE_VALUE FeedItemValidationErrorEnum_FeedItemValidationError = 92
+	// Too many label fields provided.
+	FeedItemValidationErrorEnum_TOO_MANY_LABELS FeedItemValidationErrorEnum_FeedItemValidationError = 93
+	// Invalid image url.
+	FeedItemValidationErrorEnum_INVALID_IMAGE_URL FeedItemValidationErrorEnum_FeedItemValidationError = 94
+	// Latitude value is missing.
+	FeedItemValidationErrorEnum_MISSING_LATITUDE_VALUE FeedItemValidationErrorEnum_FeedItemValidationError = 95
+	// Longitude value is missing.
+	FeedItemValidationErrorEnum_MISSING_LONGITUDE_VALUE FeedItemValidationErrorEnum_FeedItemValidationError = 96
+	// Unable to find address.
+	FeedItemValidationErrorEnum_ADDRESS_NOT_FOUND FeedItemValidationErrorEnum_FeedItemValidationError = 97
+	// Cannot target provided address.
+	FeedItemValidationErrorEnum_ADDRESS_NOT_TARGETABLE FeedItemValidationErrorEnum_FeedItemValidationError = 98
+)
+
+var FeedItemValidationErrorEnum_FeedItemValidationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "STRING_TOO_SHORT",
+	3:  "STRING_TOO_LONG",
+	4:  "VALUE_NOT_SPECIFIED",
+	5:  "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
+	6:  "INVALID_PHONE_NUMBER",
+	7:  "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
+	8:  "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
+	9:  "DISALLOWED_NUMBER_TYPE",
+	10: "VALUE_OUT_OF_RANGE",
+	11: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	12: "CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING",
+	13: "INVALID_COUNTRY_CODE",
+	14: "INVALID_APP_ID",
+	15: "MISSING_ATTRIBUTES_FOR_FIELDS",
+	16: "INVALID_TYPE_ID",
+	17: "INVALID_EMAIL_ADDRESS",
+	18: "INVALID_HTTPS_URL",
+	19: "MISSING_DELIVERY_ADDRESS",
+	20: "START_DATE_AFTER_END_DATE",
+	21: "MISSING_FEED_ITEM_START_TIME",
+	22: "MISSING_FEED_ITEM_END_TIME",
+	23: "MISSING_FEED_ITEM_ID",
+	24: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
+	25: "INVALID_REVIEW_EXTENSION_SNIPPET",
+	26: "INVALID_NUMBER_FORMAT",
+	27: "INVALID_DATE_FORMAT",
+	28: "INVALID_PRICE_FORMAT",
+	29: "UNKNOWN_PLACEHOLDER_FIELD",
+	30: "MISSING_ENHANCED_SITELINK_DESCRIPTION_LINE",
+	31: "REVIEW_EXTENSION_SOURCE_INELIGIBLE",
+	32: "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
+	33: "DOUBLE_QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
+	34: "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
+	35: "INVALID_FORM_ENCODED_PARAMS",
+	36: "INVALID_URL_PARAMETER_NAME",
+	37: "NO_GEOCODING_RESULT",
+	38: "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
+	39: "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
+	40: "INVALID_PLACEHOLDER_FIELD_ID",
+	41: "INVALID_URL_TAG",
+	42: "LIST_TOO_LONG",
+	43: "INVALID_ATTRIBUTES_COMBINATION",
+	44: "DUPLICATE_VALUES",
+	45: "INVALID_CALL_CONVERSION_ACTION_ID",
+	46: "CANNOT_SET_WITHOUT_FINAL_URLS",
+	47: "APP_ID_DOESNT_EXIST_IN_APP_STORE",
+	48: "INVALID_FINAL_URL",
+	49: "INVALID_TRACKING_URL",
+	50: "INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL",
+	51: "LIST_TOO_SHORT",
+	52: "INVALID_USER_ACTION",
+	53: "INVALID_TYPE_NAME",
+	54: "INVALID_EVENT_CHANGE_STATUS",
+	55: "INVALID_SNIPPETS_HEADER",
+	56: "INVALID_ANDROID_APP_LINK",
+	57: "NUMBER_TYPE_WITH_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	58: "RESERVED_KEYWORD_OTHER",
+	59: "DUPLICATE_OPTION_LABELS",
+	60: "DUPLICATE_OPTION_PREFILLS",
+	61: "UNEQUAL_LIST_LENGTHS",
+	62: "INCONSISTENT_CURRENCY_CODES",
+	63: "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
+	64: "ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
+	65: "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
+	66: "UNSUPPORTED_VALUE",
+	67: "INVALID_FINAL_MOBILE_URL",
+	68: "INVALID_KEYWORDLESS_AD_RULE_LABEL",
+	69: "VALUE_TRACK_PARAMETER_NOT_SUPPORTED",
+	70: "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE",
+	71: "INVALID_IOS_APP_LINK",
+	72: "MISSING_IOS_APP_LINK_OR_IOS_APP_STORE_ID",
+	73: "PROMOTION_INVALID_TIME",
+	74: "PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF",
+	75: "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT",
+	76: "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
+	77: "AD_CUSTOMIZERS_NOT_ALLOWED",
+	78: "INVALID_LANGUAGE_CODE",
+	79: "UNSUPPORTED_LANGUAGE",
+	80: "IF_FUNCTION_NOT_ALLOWED",
+	81: "INVALID_FINAL_URL_SUFFIX",
+	82: "INVALID_TAG_IN_FINAL_URL_SUFFIX",
+	83: "INVALID_FINAL_URL_SUFFIX_FORMAT",
+	84: "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
+	85: "ONLY_ONE_DELIVERY_OPTION_IS_ALLOWED",
+	86: "NO_DELIVERY_OPTION_IS_SET",
+	87: "INVALID_CONVERSION_REPORTING_STATE",
+	88: "IMAGE_SIZE_WRONG",
+	89: "EMAIL_DELIVERY_NOT_AVAILABLE_IN_COUNTRY",
+	90: "AUTO_REPLY_NOT_AVAILABLE_IN_COUNTRY",
+	91: "INVALID_LATITUDE_VALUE",
+	92: "INVALID_LONGITUDE_VALUE",
+	93: "TOO_MANY_LABELS",
+	94: "INVALID_IMAGE_URL",
+	95: "MISSING_LATITUDE_VALUE",
+	96: "MISSING_LONGITUDE_VALUE",
+	97: "ADDRESS_NOT_FOUND",
+	98: "ADDRESS_NOT_TARGETABLE",
+}
+
+var FeedItemValidationErrorEnum_FeedItemValidationError_value = map[string]int32{
+	"UNSPECIFIED":                                                0,
+	"UNKNOWN":                                                    1,
+	"STRING_TOO_SHORT":                                           2,
+	"STRING_TOO_LONG":                                            3,
+	"VALUE_NOT_SPECIFIED":                                        4,
+	"INVALID_DOMESTIC_PHONE_NUMBER_FORMAT":                       5,
+	"INVALID_PHONE_NUMBER":                                       6,
+	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                     7,
+	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                            8,
+	"DISALLOWED_NUMBER_TYPE":                                     9,
+	"VALUE_OUT_OF_RANGE":                                         10,
+	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                     11,
+	"CUSTOMER_NOT_WHITELISTED_FOR_CALLTRACKING":                  12,
+	"INVALID_COUNTRY_CODE":                                       13,
+	"INVALID_APP_ID":                                             14,
+	"MISSING_ATTRIBUTES_FOR_FIELDS":                              15,
+	"INVALID_TYPE_ID":                                            16,
+	"INVALID_EMAIL_ADDRESS":                                      17,
+	"INVALID_HTTPS_URL":                                          18,
+	"MISSING_DELIVERY_ADDRESS":                                   19,
+	"START_DATE_AFTER_END_DATE":                                  20,
+	"MISSING_FEED_ITEM_START_TIME":                               21,
+	"MISSING_FEED_ITEM_END_TIME":                                 22,
+	"MISSING_FEED_ITEM_ID":                                       23,
+	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                            24,
+	"INVALID_REVIEW_EXTENSION_SNIPPET":                           25,
+	"INVALID_NUMBER_FORMAT":                                      26,
+	"INVALID_DATE_FORMAT":                                        27,
+	"INVALID_PRICE_FORMAT":                                       28,
+	"UNKNOWN_PLACEHOLDER_FIELD":                                  29,
+	"MISSING_ENHANCED_SITELINK_DESCRIPTION_LINE":                 30,
+	"REVIEW_EXTENSION_SOURCE_INELIGIBLE":                         31,
+	"HYPHENS_IN_REVIEW_EXTENSION_SNIPPET":                        32,
+	"DOUBLE_QUOTES_IN_REVIEW_EXTENSION_SNIPPET":                  33,
+	"QUOTES_IN_REVIEW_EXTENSION_SNIPPET":                         34,
+	"INVALID_FORM_ENCODED_PARAMS":                                35,
+	"INVALID_URL_PARAMETER_NAME":                                 36,
+	"NO_GEOCODING_RESULT":                                        37,
+	"SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT":                       38,
+	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                  39,
+	"INVALID_PLACEHOLDER_FIELD_ID":                               40,
+	"INVALID_URL_TAG":                                            41,
+	"LIST_TOO_LONG":                                              42,
+	"INVALID_ATTRIBUTES_COMBINATION":                             43,
+	"DUPLICATE_VALUES":                                           44,
+	"INVALID_CALL_CONVERSION_ACTION_ID":                          45,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                              46,
+	"APP_ID_DOESNT_EXIST_IN_APP_STORE":                           47,
+	"INVALID_FINAL_URL":                                          48,
+	"INVALID_TRACKING_URL":                                       49,
+	"INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL":                     50,
+	"LIST_TOO_SHORT":                                             51,
+	"INVALID_USER_ACTION":                                        52,
+	"INVALID_TYPE_NAME":                                          53,
+	"INVALID_EVENT_CHANGE_STATUS":                                54,
+	"INVALID_SNIPPETS_HEADER":                                    55,
+	"INVALID_ANDROID_APP_LINK":                                   56,
+	"NUMBER_TYPE_WITH_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":    57,
+	"RESERVED_KEYWORD_OTHER":                                     58,
+	"DUPLICATE_OPTION_LABELS":                                    59,
+	"DUPLICATE_OPTION_PREFILLS":                                  60,
+	"UNEQUAL_LIST_LENGTHS":                                       61,
+	"INCONSISTENT_CURRENCY_CODES":                                62,
+	"PRICE_EXTENSION_HAS_DUPLICATED_HEADERS":                     63,
+	"ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION":                 64,
+	"PRICE_EXTENSION_HAS_TOO_FEW_ITEMS":                          65,
+	"UNSUPPORTED_VALUE":                                          66,
+	"INVALID_FINAL_MOBILE_URL":                                   67,
+	"INVALID_KEYWORDLESS_AD_RULE_LABEL":                          68,
+	"VALUE_TRACK_PARAMETER_NOT_SUPPORTED":                        69,
+	"UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE":                     70,
+	"INVALID_IOS_APP_LINK":                                       71,
+	"MISSING_IOS_APP_LINK_OR_IOS_APP_STORE_ID":                   72,
+	"PROMOTION_INVALID_TIME":                                     73,
+	"PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF":      74,
+	"PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT": 75,
+	"TOO_MANY_DECIMAL_PLACES_SPECIFIED":                          76,
+	"AD_CUSTOMIZERS_NOT_ALLOWED":                                 77,
+	"INVALID_LANGUAGE_CODE":                                      78,
+	"UNSUPPORTED_LANGUAGE":                                       79,
+	"IF_FUNCTION_NOT_ALLOWED":                                    80,
+	"INVALID_FINAL_URL_SUFFIX":                                   81,
+	"INVALID_TAG_IN_FINAL_URL_SUFFIX":                            82,
+	"INVALID_FINAL_URL_SUFFIX_FORMAT":                            83,
+	"CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED":               84,
+	"ONLY_ONE_DELIVERY_OPTION_IS_ALLOWED":                        85,
+	"NO_DELIVERY_OPTION_IS_SET":                                  86,
+	"INVALID_CONVERSION_REPORTING_STATE":                         87,
+	"IMAGE_SIZE_WRONG":                                           88,
+	"EMAIL_DELIVERY_NOT_AVAILABLE_IN_COUNTRY":                    89,
+	"AUTO_REPLY_NOT_AVAILABLE_IN_COUNTRY":                        90,
+	"INVALID_LATITUDE_VALUE":                                     91,
+	"INVALID_LONGITUDE_VALUE":                                    92,
+	"TOO_MANY_LABELS":                                            93,
+	"INVALID_IMAGE_URL":                                          94,
+	"MISSING_LATITUDE_VALUE":                                     95,
+	"MISSING_LONGITUDE_VALUE":                                    96,
+	"ADDRESS_NOT_FOUND":                                          97,
+	"ADDRESS_NOT_TARGETABLE":                                     98,
+}
+
+func (x FeedItemValidationErrorEnum_FeedItemValidationError) String() string {
+	return proto.EnumName(FeedItemValidationErrorEnum_FeedItemValidationError_name, int32(x))
+}
+
+func (FeedItemValidationErrorEnum_FeedItemValidationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_40745eedd4c58492, []int{0, 0}
+}
+
+// Container for enum describing possible validation errors of a feed item.
+type FeedItemValidationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemValidationErrorEnum) Reset()         { *m = FeedItemValidationErrorEnum{} }
+func (m *FeedItemValidationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemValidationErrorEnum) ProtoMessage()    {}
+func (*FeedItemValidationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_40745eedd4c58492, []int{0}
+}
+
+func (m *FeedItemValidationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemValidationErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedItemValidationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemValidationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedItemValidationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemValidationErrorEnum.Merge(m, src)
+}
+func (m *FeedItemValidationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemValidationErrorEnum.Size(m)
+}
+func (m *FeedItemValidationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemValidationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemValidationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedItemValidationErrorEnum_FeedItemValidationError", FeedItemValidationErrorEnum_FeedItemValidationError_name, FeedItemValidationErrorEnum_FeedItemValidationError_value)
+	proto.RegisterType((*FeedItemValidationErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedItemValidationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_item_validation_error.proto", fileDescriptor_40745eedd4c58492)
+}
+
+var fileDescriptor_40745eedd4c58492 = []byte{
+	// 1665 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0x6d, 0x73, 0x1b, 0xb7,
+	0x11, 0xae, 0x9d, 0x36, 0x69, 0xe1, 0x26, 0x86, 0xe1, 0x57, 0xd9, 0xb2, 0x6c, 0xcb, 0x8e, 0xed,
+	0x38, 0x0e, 0x95, 0x56, 0x4d, 0xd3, 0xd0, 0x6d, 0x52, 0xf0, 0xb0, 0x47, 0xa2, 0xc2, 0x01, 0x67,
+	0x00, 0x47, 0x8a, 0xaa, 0x5a, 0x54, 0x29, 0x59, 0x8d, 0x66, 0x2c, 0xd1, 0x23, 0xaa, 0xfe, 0x41,
+	0xfd, 0xd8, 0x3f, 0xd2, 0x99, 0xfe, 0x91, 0xce, 0xf4, 0x0f, 0xf4, 0x6b, 0x67, 0x71, 0x2f, 0x3c,
+	0x89, 0x92, 0x27, 0x9f, 0x44, 0x01, 0xbb, 0x0b, 0xec, 0xb3, 0xcf, 0x3e, 0x8b, 0x23, 0xdf, 0xed,
+	0xcf, 0x66, 0xfb, 0x6f, 0xa6, 0x1b, 0x7b, 0x93, 0xf9, 0x46, 0xf9, 0x13, 0x7f, 0xbd, 0xdb, 0xdc,
+	0x98, 0x1e, 0x1f, 0xcf, 0x8e, 0xe7, 0x1b, 0x7f, 0x9b, 0x4e, 0x27, 0xe1, 0xe0, 0x64, 0x7a, 0x18,
+	0xde, 0xed, 0xbd, 0x39, 0x98, 0xec, 0x9d, 0x1c, 0xcc, 0x8e, 0x42, 0xdc, 0xeb, 0xbc, 0x3d, 0x9e,
+	0x9d, 0xcc, 0xd8, 0x5a, 0xe9, 0xd5, 0xd9, 0x9b, 0xcc, 0x3b, 0x4d, 0x80, 0xce, 0xbb, 0xcd, 0x4e,
+	0x19, 0xe0, 0xee, 0x6a, 0x7d, 0xc0, 0xdb, 0x83, 0x8d, 0xbd, 0xa3, 0xa3, 0xd9, 0x49, 0x0c, 0x31,
+	0x2f, 0xbd, 0xd7, 0xff, 0xb3, 0x42, 0xee, 0xa5, 0xd3, 0xe9, 0x44, 0x9e, 0x4c, 0x0f, 0x87, 0xcd,
+	0x01, 0x80, 0xae, 0x70, 0xf4, 0xf7, 0xc3, 0xf5, 0x7f, 0xad, 0x90, 0xdb, 0x17, 0xec, 0xb3, 0xab,
+	0xe4, 0x4a, 0xa1, 0x5d, 0x0e, 0x89, 0x4c, 0x25, 0x08, 0xfa, 0x23, 0x76, 0x85, 0x7c, 0x54, 0xe8,
+	0x2d, 0x6d, 0x46, 0x9a, 0x5e, 0x62, 0x37, 0x08, 0x75, 0xde, 0x4a, 0xdd, 0x0f, 0xde, 0x98, 0xe0,
+	0x06, 0xc6, 0x7a, 0x7a, 0x99, 0x5d, 0x27, 0x57, 0x5b, 0xab, 0xca, 0xe8, 0x3e, 0xfd, 0x80, 0xdd,
+	0x26, 0xd7, 0x87, 0x5c, 0x15, 0x10, 0xb4, 0xf1, 0x61, 0x11, 0xf0, 0xc7, 0xec, 0x39, 0x79, 0x22,
+	0xf5, 0x90, 0x2b, 0x29, 0x82, 0x30, 0x19, 0x38, 0x2f, 0x93, 0x90, 0x0f, 0x8c, 0x86, 0xa0, 0x8b,
+	0xac, 0x07, 0x36, 0xa4, 0xc6, 0x66, 0xdc, 0xd3, 0x9f, 0xb0, 0x3b, 0xe4, 0x46, 0x6d, 0xd9, 0x36,
+	0xa0, 0x1f, 0xb2, 0x17, 0xe4, 0xe9, 0x29, 0x97, 0x78, 0x46, 0x91, 0xe7, 0xc6, 0x7a, 0x10, 0x18,
+	0x20, 0x24, 0xa6, 0xd0, 0xde, 0x8e, 0xe9, 0x47, 0xec, 0x31, 0x79, 0x90, 0x5b, 0xc8, 0x64, 0x91,
+	0x05, 0xcb, 0xfd, 0x29, 0x17, 0xae, 0x94, 0x19, 0x81, 0xa0, 0x3f, 0x65, 0x77, 0xc9, 0x2d, 0x21,
+	0x5d, 0xf5, 0x7f, 0x6d, 0xe2, 0xc7, 0x39, 0xd0, 0x9f, 0xb1, 0x5b, 0x84, 0x95, 0x99, 0x98, 0xc2,
+	0x07, 0x93, 0x06, 0xcb, 0x75, 0x1f, 0x28, 0xc1, 0x4b, 0x24, 0x5c, 0x29, 0x6f, 0x79, 0xb2, 0x85,
+	0xc9, 0x5f, 0x7c, 0x89, 0x2b, 0xec, 0x0b, 0xf2, 0x59, 0x52, 0x38, 0x6f, 0xb2, 0xea, 0xe4, 0xd1,
+	0x40, 0x7a, 0x50, 0xd2, 0x35, 0x96, 0xad, 0x40, 0xf4, 0xe7, 0xed, 0xcc, 0xab, 0x18, 0x21, 0x31,
+	0x02, 0xe8, 0xc7, 0x8c, 0x91, 0x4f, 0xea, 0x1d, 0x9e, 0xe7, 0x41, 0x0a, 0xfa, 0x09, 0x7b, 0x44,
+	0xee, 0x67, 0xd2, 0x39, 0xbc, 0x03, 0xf7, 0xde, 0xca, 0x5e, 0xe1, 0xc1, 0xc5, 0xb0, 0xa9, 0x04,
+	0x25, 0x1c, 0xbd, 0x8a, 0x25, 0xaa, 0xdd, 0x30, 0x2b, 0xf4, 0xa3, 0x6c, 0x85, 0xdc, 0xac, 0x17,
+	0x21, 0xe3, 0x52, 0x05, 0x2e, 0x84, 0x05, 0xe7, 0xe8, 0x35, 0x76, 0x93, 0x5c, 0xab, 0xb7, 0x06,
+	0xde, 0xe7, 0x2e, 0x14, 0x56, 0x51, 0xc6, 0x56, 0xc9, 0x9d, 0xfa, 0x24, 0x01, 0x4a, 0x0e, 0xc1,
+	0x8e, 0x1b, 0xa7, 0xeb, 0xec, 0x3e, 0x59, 0x71, 0x9e, 0x5b, 0x1f, 0x04, 0xe2, 0xcc, 0x53, 0x0f,
+	0x36, 0x80, 0x16, 0xf1, 0x5f, 0x7a, 0x83, 0x3d, 0x24, 0xab, 0xb5, 0x73, 0x0a, 0x20, 0x82, 0xf4,
+	0x90, 0x85, 0xd2, 0xc1, 0xcb, 0x0c, 0xe8, 0x4d, 0xb6, 0x46, 0xee, 0x2e, 0x5b, 0x60, 0x84, 0xb8,
+	0x7f, 0x0b, 0x61, 0x59, 0xde, 0x97, 0x82, 0xde, 0xc6, 0x22, 0x0f, 0xb9, 0x96, 0x7e, 0x1c, 0x96,
+	0x78, 0x51, 0x17, 0xf9, 0x0e, 0x7b, 0x42, 0x1e, 0xd6, 0x49, 0x59, 0x18, 0x4a, 0x18, 0x05, 0xd8,
+	0xf6, 0xa0, 0x9d, 0x34, 0x3a, 0x38, 0x2d, 0xf3, 0x1c, 0x3c, 0x5d, 0x69, 0xa3, 0x72, 0x9a, 0x90,
+	0x77, 0x91, 0xd3, 0x0d, 0x75, 0x31, 0xc5, 0x6a, 0xe3, 0xde, 0x29, 0xa6, 0x5a, 0x99, 0x34, 0x3b,
+	0xab, 0x88, 0x49, 0xd5, 0x3e, 0x21, 0x57, 0x3c, 0x81, 0x81, 0x51, 0x02, 0xaa, 0xc2, 0xd0, 0xfb,
+	0xac, 0x43, 0x5e, 0xd4, 0x19, 0x81, 0x1e, 0x70, 0x9d, 0x80, 0x08, 0x2e, 0x52, 0x43, 0x6f, 0x05,
+	0x01, 0x2e, 0xb1, 0x32, 0xf7, 0x78, 0x3f, 0x25, 0x35, 0xd0, 0x35, 0xf6, 0x94, 0xac, 0x2f, 0x5f,
+	0xdd, 0x14, 0x36, 0x81, 0x20, 0x35, 0x28, 0xd9, 0x97, 0x3d, 0x05, 0xf4, 0x01, 0x7b, 0x46, 0x1e,
+	0x0f, 0xc6, 0xf9, 0x00, 0xb4, 0x0b, 0x52, 0x5f, 0x9c, 0xed, 0x43, 0x24, 0xa6, 0x30, 0x45, 0x4f,
+	0x41, 0x78, 0x5d, 0x18, 0xa4, 0xcd, 0xfb, 0xcc, 0x1f, 0xe1, 0xf9, 0x3f, 0xc0, 0x6e, 0x9d, 0x3d,
+	0x20, 0xf7, 0x6a, 0x40, 0x10, 0x8a, 0x00, 0x1a, 0xf9, 0x2b, 0x42, 0xce, 0x2d, 0xcf, 0x1c, 0x7d,
+	0x8c, 0xa5, 0xae, 0x0d, 0x0a, 0xab, 0xca, 0x75, 0x40, 0xc2, 0x68, 0x9e, 0x01, 0x7d, 0x82, 0x50,
+	0x6b, 0x13, 0xfa, 0x60, 0x12, 0x23, 0x10, 0x1d, 0x0b, 0xae, 0x50, 0x9e, 0x7e, 0x8a, 0xf2, 0x51,
+	0x25, 0x8c, 0x96, 0xe7, 0x5e, 0xc3, 0xc3, 0xb6, 0xa7, 0x4f, 0x63, 0xcf, 0x71, 0x6b, 0x25, 0xd8,
+	0x5a, 0x7f, 0x92, 0x52, 0xb2, 0xce, 0x63, 0xc7, 0x33, 0xa4, 0x67, 0x53, 0xc3, 0xb3, 0x95, 0x42,
+	0x92, 0x3d, 0x6f, 0x37, 0x11, 0xde, 0xd9, 0xf3, 0x3e, 0xfd, 0x8c, 0x5d, 0x23, 0x1f, 0x63, 0x1f,
+	0x2f, 0xa4, 0xef, 0x05, 0x5b, 0x27, 0x6b, 0x4d, 0x8f, 0x2e, 0xfa, 0x31, 0x31, 0x59, 0x4f, 0x6a,
+	0x8e, 0xd5, 0xa4, 0x9f, 0xa3, 0x92, 0x8a, 0x22, 0x57, 0x32, 0x41, 0x1e, 0x45, 0x79, 0x71, 0xf4,
+	0x25, 0xfb, 0x94, 0x3c, 0x6a, 0xfa, 0x9e, 0x2b, 0x15, 0x12, 0xa3, 0x87, 0x60, 0x63, 0x52, 0x3c,
+	0x89, 0x3c, 0x90, 0x82, 0x7e, 0x81, 0x0d, 0x9f, 0x70, 0x1d, 0xf5, 0x06, 0x7c, 0x18, 0x49, 0x3f,
+	0x40, 0x69, 0x4a, 0xa5, 0xe6, 0x0a, 0x6f, 0xe6, 0x68, 0x07, 0xb9, 0x5e, 0xea, 0x43, 0x10, 0x06,
+	0x9c, 0xf6, 0x01, 0xb6, 0xf1, 0x96, 0x52, 0x47, 0xd9, 0x70, 0xde, 0x58, 0xa0, 0x1b, 0xed, 0x36,
+	0x6f, 0xbc, 0xe9, 0x97, 0x6d, 0x3a, 0x37, 0xea, 0x86, 0x3b, 0xbf, 0x40, 0xcd, 0x5b, 0x72, 0x88,
+	0x4a, 0x83, 0x51, 0x85, 0x19, 0x69, 0x65, 0x78, 0x44, 0x87, 0xfe, 0x12, 0xa5, 0xaa, 0x41, 0xa6,
+	0x1c, 0x15, 0x9b, 0xed, 0x0e, 0x2a, 0x1c, 0xd8, 0x2a, 0x2b, 0xfa, 0xab, 0xf6, 0x4d, 0xa2, 0x40,
+	0x45, 0x1a, 0x7c, 0xd5, 0xe6, 0x11, 0x0c, 0x41, 0xfb, 0x90, 0x0c, 0x50, 0x7d, 0x51, 0x36, 0x7c,
+	0xe1, 0xe8, 0xaf, 0xd9, 0x3d, 0x72, 0xbb, 0x36, 0xa8, 0xd8, 0xe7, 0xc2, 0x00, 0xb8, 0x00, 0x4b,
+	0xbf, 0x46, 0xb9, 0x6a, 0x0a, 0xa1, 0x85, 0x35, 0x95, 0x68, 0x62, 0x73, 0xd1, 0xdf, 0xb0, 0x57,
+	0xe4, 0xeb, 0x96, 0xd0, 0x47, 0x18, 0xc3, 0x0f, 0x14, 0xf4, 0x6f, 0x70, 0x60, 0x58, 0x70, 0x60,
+	0x87, 0x20, 0xc2, 0x16, 0x8c, 0x47, 0xc6, 0x8a, 0x60, 0xfc, 0x00, 0x2c, 0xed, 0xe2, 0x9d, 0x16,
+	0xb5, 0x35, 0x55, 0xff, 0xf2, 0x1e, 0x28, 0x47, 0x5f, 0xa1, 0x20, 0x2c, 0x6d, 0xe6, 0x16, 0x52,
+	0xa9, 0x94, 0xa3, 0xbf, 0x45, 0xe8, 0x0b, 0x0d, 0xaf, 0x0b, 0xae, 0x42, 0x04, 0x4f, 0x81, 0xee,
+	0xfb, 0x81, 0xa3, 0xbf, 0x2b, 0xa1, 0x48, 0x8c, 0x76, 0x38, 0x35, 0x10, 0x89, 0xc2, 0x5a, 0xd0,
+	0x49, 0x39, 0x19, 0x1c, 0xfd, 0x36, 0x0e, 0xc5, 0x28, 0x3e, 0x8b, 0x4e, 0x18, 0x70, 0x17, 0x9a,
+	0xd3, 0x44, 0x05, 0x8c, 0xa3, 0xdf, 0xa1, 0xee, 0x44, 0xf1, 0x3c, 0xd7, 0x00, 0xc1, 0x6a, 0x8b,
+	0x0f, 0xfd, 0x3d, 0x12, 0xf3, 0xbc, 0xd8, 0x58, 0xda, 0x14, 0x46, 0x51, 0x88, 0x1d, 0xe5, 0x58,
+	0xc5, 0x42, 0x2f, 0x20, 0x8b, 0xbc, 0xa6, 0xbd, 0x76, 0x1d, 0x4a, 0xd6, 0x64, 0xa6, 0x27, 0x15,
+	0x44, 0x9e, 0x24, 0x6d, 0xd2, 0x57, 0x48, 0x2a, 0x70, 0x2e, 0x70, 0x11, 0x6c, 0xa1, 0xa0, 0x44,
+	0x8e, 0x0a, 0x94, 0xb4, 0x72, 0x0c, 0xc7, 0xfa, 0xb4, 0x15, 0xa3, 0x5d, 0x26, 0x0a, 0x88, 0xc3,
+	0xd2, 0x25, 0x90, 0xf8, 0x0e, 0x14, 0x24, 0xb8, 0xa2, 0xb8, 0xee, 0x17, 0xbc, 0x0f, 0x34, 0x6d,
+	0x33, 0x5d, 0x1a, 0xb7, 0x60, 0x47, 0x9f, 0xbd, 0x24, 0xcf, 0x6b, 0x65, 0x6e, 0xef, 0x04, 0x63,
+	0x9b, 0xff, 0x63, 0x17, 0x61, 0x47, 0x0e, 0x90, 0x0e, 0xb9, 0x35, 0x99, 0x29, 0x7b, 0xb4, 0x26,
+	0x32, 0x4e, 0x2d, 0xc9, 0xbe, 0x21, 0x5f, 0x2d, 0xf6, 0x5a, 0x7d, 0x9b, 0x83, 0x4d, 0xb0, 0x90,
+	0x26, 0x4d, 0x23, 0xe2, 0x99, 0xd1, 0x30, 0x0e, 0x3c, 0x43, 0x8e, 0xe1, 0x22, 0xfd, 0x03, 0xfb,
+	0x96, 0x74, 0xcf, 0x77, 0x5d, 0x2c, 0x1a, 0x01, 0xd1, 0xdb, 0x58, 0x2c, 0x6d, 0x30, 0x43, 0xac,
+	0x5f, 0x8c, 0x41, 0xb7, 0x10, 0x5a, 0x2c, 0x51, 0xc6, 0xf5, 0x38, 0x08, 0x48, 0x64, 0xc6, 0x55,
+	0x29, 0x6e, 0xae, 0xf5, 0x24, 0x53, 0x28, 0xc6, 0x5c, 0x84, 0xf2, 0x81, 0x22, 0x77, 0x30, 0x4c,
+	0x5b, 0x1a, 0xb3, 0xf6, 0x48, 0xac, 0xb1, 0x2b, 0xdf, 0x23, 0xba, 0xe4, 0xeb, 0x02, 0xec, 0x06,
+	0x5a, 0x13, 0x3b, 0x33, 0x0d, 0x69, 0xa1, 0x4b, 0xe1, 0x6a, 0x47, 0xcc, 0x97, 0x19, 0x81, 0x3a,
+	0xe2, 0x8a, 0x34, 0x95, 0xdb, 0xf4, 0x35, 0x4e, 0xf3, 0x06, 0x43, 0xde, 0xc7, 0xda, 0x2d, 0x19,
+	0xd9, 0xb6, 0xd1, 0xd9, 0xdd, 0x7a, 0xfc, 0x3a, 0xf6, 0x25, 0x79, 0xd9, 0xbc, 0xbb, 0xb0, 0x77,
+	0x10, 0xef, 0xfa, 0xbd, 0x15, 0x2c, 0x24, 0xc6, 0x56, 0xd3, 0xe5, 0x75, 0x21, 0x2d, 0x08, 0xea,
+	0x91, 0x66, 0x46, 0xab, 0x71, 0xc0, 0x57, 0x44, 0xf3, 0xc6, 0xa9, 0xfa, 0x54, 0xba, 0x26, 0x85,
+	0x02, 0x1b, 0x59, 0x9b, 0xf3, 0x4c, 0x1c, 0x78, 0x3a, 0xc4, 0x49, 0xb9, 0x78, 0xc2, 0x35, 0x2a,
+	0x6e, 0x01, 0x81, 0xc2, 0x23, 0x51, 0xc1, 0x80, 0x8e, 0x70, 0x10, 0xc8, 0x0c, 0x01, 0x75, 0x72,
+	0x07, 0xc2, 0xc8, 0xe2, 0x08, 0xd9, 0x66, 0x9f, 0x93, 0x67, 0xe5, 0x93, 0xac, 0x89, 0x1f, 0xf1,
+	0x1b, 0x72, 0xa9, 0x38, 0x0e, 0x6b, 0xa9, 0x1b, 0x2d, 0x1a, 0xe3, 0x95, 0x79, 0xe1, 0x0d, 0x06,
+	0x57, 0xef, 0x31, 0xdc, 0x41, 0x96, 0x2e, 0xea, 0xe8, 0xa5, 0x2f, 0x44, 0x35, 0x7b, 0xe8, 0x1f,
+	0xdb, 0x42, 0x8a, 0x63, 0xac, 0xbd, 0xb9, 0x8b, 0x93, 0xaf, 0xe1, 0x51, 0xa5, 0x64, 0x7f, 0x6a,
+	0x4b, 0x76, 0x99, 0x01, 0xb6, 0xf3, 0x9f, 0xf1, 0x90, 0xba, 0x71, 0xce, 0x1c, 0x12, 0xf0, 0x90,
+	0x66, 0xef, 0xcc, 0x21, 0x7f, 0xc1, 0x78, 0xd5, 0x5b, 0x32, 0xe6, 0x90, 0x9a, 0x42, 0x0b, 0xba,
+	0x87, 0xf1, 0xda, 0xcb, 0x9e, 0xdb, 0x3e, 0x78, 0xcc, 0x8d, 0x7e, 0xdf, 0xfb, 0xdf, 0x25, 0xb2,
+	0xfe, 0xd7, 0xd9, 0x61, 0xe7, 0xfd, 0x9f, 0x4b, 0xbd, 0xd5, 0x0b, 0xbe, 0x76, 0x72, 0xfc, 0x5c,
+	0xca, 0x2f, 0xed, 0x88, 0xca, 0x7f, 0x7f, 0xf6, 0x66, 0xef, 0x68, 0xbf, 0x33, 0x3b, 0xde, 0xdf,
+	0xd8, 0x9f, 0x1e, 0xc5, 0x8f, 0xa9, 0xfa, 0xfb, 0xed, 0xed, 0xc1, 0xfc, 0xa2, 0xcf, 0xb9, 0x57,
+	0xe5, 0x9f, 0x7f, 0x5c, 0xfe, 0xa0, 0xcf, 0xf9, 0x3f, 0x2f, 0xaf, 0xf5, 0xcb, 0x60, 0x7c, 0x32,
+	0xef, 0x94, 0x3f, 0xf1, 0xd7, 0x70, 0xb3, 0x13, 0x8f, 0x9c, 0xff, 0xbb, 0x36, 0xd8, 0xe5, 0x93,
+	0xf9, 0x6e, 0x63, 0xb0, 0x3b, 0xdc, 0xdc, 0x2d, 0x0d, 0xfe, 0x7b, 0x79, 0xbd, 0x5c, 0xed, 0x76,
+	0xf9, 0x64, 0xde, 0xed, 0x36, 0x26, 0xdd, 0xee, 0x70, 0xb3, 0xdb, 0x2d, 0x8d, 0xbe, 0xff, 0x30,
+	0xde, 0x6e, 0xf3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x84, 0x4d, 0xa4, 0x6b, 0x0e, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/feed_mapping_error.pb.go b/googleapis/ads/googleads/v3/errors/feed_mapping_error.pb.go
new file mode 100644
index 0000000..ad0de76
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/feed_mapping_error.pb.go
@@ -0,0 +1,205 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/feed_mapping_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible feed item errors.
+type FeedMappingErrorEnum_FeedMappingError int32
+
+const (
+	// Enum unspecified.
+	FeedMappingErrorEnum_UNSPECIFIED FeedMappingErrorEnum_FeedMappingError = 0
+	// The received error code is not known in this version.
+	FeedMappingErrorEnum_UNKNOWN FeedMappingErrorEnum_FeedMappingError = 1
+	// The given placeholder field does not exist.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_FIELD FeedMappingErrorEnum_FeedMappingError = 2
+	// The given criterion field does not exist.
+	FeedMappingErrorEnum_INVALID_CRITERION_FIELD FeedMappingErrorEnum_FeedMappingError = 3
+	// The given placeholder type does not exist.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE FeedMappingErrorEnum_FeedMappingError = 4
+	// The given criterion type does not exist.
+	FeedMappingErrorEnum_INVALID_CRITERION_TYPE FeedMappingErrorEnum_FeedMappingError = 5
+	// A feed mapping must contain at least one attribute field mapping.
+	FeedMappingErrorEnum_NO_ATTRIBUTE_FIELD_MAPPINGS FeedMappingErrorEnum_FeedMappingError = 7
+	// The type of the feed attribute referenced in the attribute field mapping
+	// must match the type of the placeholder field.
+	FeedMappingErrorEnum_FEED_ATTRIBUTE_TYPE_MISMATCH FeedMappingErrorEnum_FeedMappingError = 8
+	// A feed mapping for a system generated feed cannot be operated on.
+	FeedMappingErrorEnum_CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED FeedMappingErrorEnum_FeedMappingError = 9
+	// Only one feed mapping for a placeholder type is allowed per feed or
+	// customer (depending on the placeholder type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE FeedMappingErrorEnum_FeedMappingError = 10
+	// Only one feed mapping for a criterion type is allowed per customer.
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE FeedMappingErrorEnum_FeedMappingError = 11
+	// Only one feed attribute mapping for a placeholder field is allowed
+	// (depending on the placeholder type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD FeedMappingErrorEnum_FeedMappingError = 12
+	// Only one feed attribute mapping for a criterion field is allowed
+	// (depending on the criterion type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD FeedMappingErrorEnum_FeedMappingError = 13
+	// This feed mapping may not contain any explicit attribute field mappings.
+	FeedMappingErrorEnum_UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS FeedMappingErrorEnum_FeedMappingError = 14
+	// Location placeholder feed mappings can only be created for Places feeds.
+	FeedMappingErrorEnum_LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS FeedMappingErrorEnum_FeedMappingError = 15
+	// Mappings for typed feeds cannot be modified.
+	FeedMappingErrorEnum_CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED FeedMappingErrorEnum_FeedMappingError = 16
+	// The given placeholder type can only be mapped to system generated feeds.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED FeedMappingErrorEnum_FeedMappingError = 17
+	// The given placeholder type cannot be mapped to a system generated feed
+	// with the given type.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE FeedMappingErrorEnum_FeedMappingError = 18
+	// The "field" oneof was not set in an AttributeFieldMapping.
+	FeedMappingErrorEnum_ATTRIBUTE_FIELD_MAPPING_MISSING_FIELD FeedMappingErrorEnum_FeedMappingError = 19
+)
+
+var FeedMappingErrorEnum_FeedMappingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_PLACEHOLDER_FIELD",
+	3:  "INVALID_CRITERION_FIELD",
+	4:  "INVALID_PLACEHOLDER_TYPE",
+	5:  "INVALID_CRITERION_TYPE",
+	7:  "NO_ATTRIBUTE_FIELD_MAPPINGS",
+	8:  "FEED_ATTRIBUTE_TYPE_MISMATCH",
+	9:  "CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED",
+	10: "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE",
+	11: "MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE",
+	12: "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD",
+	13: "MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD",
+	14: "UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS",
+	15: "LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS",
+	16: "CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED",
+	17: "INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED",
+	18: "INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE",
+	19: "ATTRIBUTE_FIELD_MAPPING_MISSING_FIELD",
+}
+
+var FeedMappingErrorEnum_FeedMappingError_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"INVALID_PLACEHOLDER_FIELD":    2,
+	"INVALID_CRITERION_FIELD":      3,
+	"INVALID_PLACEHOLDER_TYPE":     4,
+	"INVALID_CRITERION_TYPE":       5,
+	"NO_ATTRIBUTE_FIELD_MAPPINGS":  7,
+	"FEED_ATTRIBUTE_TYPE_MISMATCH": 8,
+	"CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED":    9,
+	"MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE":                  10,
+	"MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE":                    11,
+	"MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD":                 12,
+	"MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD":                   13,
+	"UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS":                     14,
+	"LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS":              15,
+	"CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED":                   16,
+	"INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED":  17,
+	"INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE": 18,
+	"ATTRIBUTE_FIELD_MAPPING_MISSING_FIELD":                   19,
+}
+
+func (x FeedMappingErrorEnum_FeedMappingError) String() string {
+	return proto.EnumName(FeedMappingErrorEnum_FeedMappingError_name, int32(x))
+}
+
+func (FeedMappingErrorEnum_FeedMappingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a10df35593e929d8, []int{0, 0}
+}
+
+// Container for enum describing possible feed item errors.
+type FeedMappingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingErrorEnum) Reset()         { *m = FeedMappingErrorEnum{} }
+func (m *FeedMappingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingErrorEnum) ProtoMessage()    {}
+func (*FeedMappingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a10df35593e929d8, []int{0}
+}
+
+func (m *FeedMappingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FeedMappingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingErrorEnum.Merge(m, src)
+}
+func (m *FeedMappingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingErrorEnum.Size(m)
+}
+func (m *FeedMappingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FeedMappingErrorEnum_FeedMappingError", FeedMappingErrorEnum_FeedMappingError_name, FeedMappingErrorEnum_FeedMappingError_value)
+	proto.RegisterType((*FeedMappingErrorEnum)(nil), "google.ads.googleads.v3.errors.FeedMappingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/feed_mapping_error.proto", fileDescriptor_a10df35593e929d8)
+}
+
+var fileDescriptor_a10df35593e929d8 = []byte{
+	// 568 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xcd, 0x6e, 0xd3, 0x4c,
+	0x14, 0xfd, 0x9a, 0x7e, 0x6d, 0x61, 0x0a, 0xd4, 0x0c, 0xff, 0x6d, 0x29, 0x28, 0xfc, 0x14, 0x8a,
+	0x64, 0x2f, 0x8c, 0x28, 0x72, 0x57, 0x13, 0x7b, 0x9c, 0x8e, 0xb0, 0x67, 0x2c, 0x7b, 0x12, 0x08,
+	0x8a, 0x34, 0x32, 0xd8, 0x58, 0x91, 0x1a, 0x3b, 0x8a, 0x43, 0x1f, 0x84, 0x47, 0x60, 0xc9, 0xa3,
+	0xf0, 0x28, 0xac, 0xd8, 0xb2, 0x43, 0xe3, 0x49, 0x42, 0x93, 0x26, 0xed, 0x6a, 0xae, 0xe6, 0x9e,
+	0x73, 0xe6, 0xde, 0x63, 0x1f, 0x70, 0x98, 0x15, 0x45, 0x76, 0x92, 0x1a, 0x71, 0x52, 0x1a, 0xaa,
+	0x94, 0xd5, 0xa9, 0x69, 0xa4, 0xc3, 0x61, 0x31, 0x2c, 0x8d, 0x2f, 0x69, 0x9a, 0x88, 0x7e, 0x3c,
+	0x18, 0xf4, 0xf2, 0x4c, 0x54, 0x77, 0xfa, 0x60, 0x58, 0x8c, 0x0a, 0xb8, 0xa7, 0xd0, 0x7a, 0x9c,
+	0x94, 0xfa, 0x94, 0xa8, 0x9f, 0x9a, 0xba, 0x22, 0x6e, 0xef, 0x4e, 0x84, 0x07, 0x3d, 0x23, 0xce,
+	0xf3, 0x62, 0x14, 0x8f, 0x7a, 0x45, 0x5e, 0x2a, 0x76, 0xfd, 0xdb, 0x3a, 0xb8, 0xed, 0xa6, 0x69,
+	0xe2, 0x2b, 0x65, 0x2c, 0x39, 0x38, 0xff, 0xda, 0xaf, 0xff, 0x59, 0x03, 0xda, 0x7c, 0x03, 0x6e,
+	0x81, 0xcd, 0x16, 0x8d, 0x02, 0x6c, 0x13, 0x97, 0x60, 0x47, 0xfb, 0x0f, 0x6e, 0x82, 0x8d, 0x16,
+	0x7d, 0x47, 0xd9, 0x7b, 0xaa, 0xad, 0xc0, 0x87, 0xe0, 0x01, 0xa1, 0x6d, 0xe4, 0x11, 0x47, 0x04,
+	0x1e, 0xb2, 0xf1, 0x31, 0xf3, 0x1c, 0x1c, 0x0a, 0x97, 0x60, 0xcf, 0xd1, 0x6a, 0x70, 0x07, 0xdc,
+	0x9b, 0xb4, 0xed, 0x90, 0x70, 0x1c, 0x12, 0x46, 0xc7, 0xcd, 0x55, 0xb8, 0x0b, 0xee, 0x2f, 0xe2,
+	0xf2, 0x4e, 0x80, 0xb5, 0xff, 0xe1, 0x36, 0xb8, 0x7b, 0x9e, 0x5a, 0xf5, 0xd6, 0xe0, 0x23, 0xb0,
+	0x43, 0x99, 0x40, 0x9c, 0x87, 0xa4, 0xd1, 0xe2, 0x58, 0x29, 0x0a, 0x1f, 0x05, 0x01, 0xa1, 0xcd,
+	0x48, 0xdb, 0x80, 0x8f, 0xc1, 0xae, 0x8b, 0xb1, 0x73, 0x06, 0x22, 0x99, 0xc2, 0x27, 0x91, 0x8f,
+	0xb8, 0x7d, 0xac, 0x5d, 0x81, 0x6f, 0xc1, 0x6b, 0x1b, 0x51, 0xca, 0xb8, 0x60, 0x01, 0x0e, 0x11,
+	0xc7, 0x82, 0xd1, 0xa9, 0x82, 0x70, 0x59, 0x28, 0xa2, 0x4e, 0xc4, 0xb1, 0x2f, 0x9a, 0x98, 0x56,
+	0x7d, 0x47, 0x48, 0x45, 0xed, 0x2a, 0x3c, 0x00, 0xcf, 0xfd, 0x96, 0xc7, 0x49, 0xe0, 0xe1, 0x59,
+	0xc2, 0xb9, 0x25, 0x00, 0x7c, 0x01, 0x9e, 0x2e, 0xc6, 0xce, 0xad, 0xb4, 0x09, 0x5f, 0x81, 0xfd,
+	0xcb, 0x55, 0x95, 0x73, 0xd7, 0xe0, 0x4b, 0xf0, 0xec, 0x32, 0x59, 0x05, 0xbd, 0x0e, 0xf7, 0xc1,
+	0x93, 0x16, 0xc5, 0x1f, 0x02, 0x6c, 0xf3, 0x19, 0x3f, 0xe6, 0x2c, 0xbb, 0x01, 0x75, 0x70, 0xe0,
+	0x31, 0x1b, 0x71, 0x49, 0x3e, 0xfb, 0x26, 0xa3, 0x5e, 0xe7, 0xdf, 0x20, 0x51, 0xe5, 0x42, 0xa4,
+	0x6d, 0xc9, 0x19, 0xc6, 0x06, 0xfa, 0xcc, 0x21, 0x6e, 0x67, 0x76, 0x10, 0xb9, 0xd5, 0xd8, 0x31,
+	0x0d, 0x5a, 0xe0, 0xcd, 0xb2, 0x0f, 0x5d, 0x81, 0x29, 0xa3, 0x4b, 0xdc, 0xbe, 0x09, 0x8f, 0xc0,
+	0xe1, 0x85, 0xdc, 0x85, 0x3c, 0x65, 0x2a, 0x94, 0x33, 0x2e, 0xd9, 0x58, 0xfe, 0x0a, 0x91, 0x3c,
+	0x95, 0x4f, 0xb7, 0x1a, 0xbf, 0x57, 0x40, 0xfd, 0x73, 0xd1, 0xd7, 0x2f, 0x4e, 0x56, 0xe3, 0xce,
+	0x7c, 0x3e, 0x02, 0x19, 0xa9, 0x60, 0xe5, 0xa3, 0x33, 0x26, 0x66, 0xc5, 0x49, 0x9c, 0x67, 0x7a,
+	0x31, 0xcc, 0x8c, 0x2c, 0xcd, 0xab, 0xc0, 0x4d, 0xb2, 0x3d, 0xe8, 0x95, 0xcb, 0xa2, 0x7e, 0xa4,
+	0x8e, 0xef, 0xb5, 0xd5, 0x26, 0x42, 0x3f, 0x6a, 0x7b, 0x4d, 0x25, 0x86, 0x92, 0x52, 0x57, 0xa5,
+	0xac, 0xda, 0xa6, 0x5e, 0x3d, 0x59, 0xfe, 0x9c, 0x00, 0xba, 0x28, 0x29, 0xbb, 0x53, 0x40, 0xb7,
+	0x6d, 0x76, 0x15, 0xe0, 0x57, 0xad, 0xae, 0x6e, 0x2d, 0x0b, 0x25, 0xa5, 0x65, 0x4d, 0x21, 0x96,
+	0xd5, 0x36, 0x2d, 0x4b, 0x81, 0x3e, 0xad, 0x57, 0xd3, 0x99, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0xa5, 0xc4, 0xae, 0xc3, 0x87, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/field_error.pb.go b/googleapis/ads/googleads/v3/errors/field_error.pb.go
new file mode 100644
index 0000000..5420aff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/field_error.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/field_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible field errors.
+type FieldErrorEnum_FieldError int32
+
+const (
+	// Enum unspecified.
+	FieldErrorEnum_UNSPECIFIED FieldErrorEnum_FieldError = 0
+	// The received error code is not known in this version.
+	FieldErrorEnum_UNKNOWN FieldErrorEnum_FieldError = 1
+	// The required field was not present.
+	FieldErrorEnum_REQUIRED FieldErrorEnum_FieldError = 2
+	// The field attempted to be mutated is immutable.
+	FieldErrorEnum_IMMUTABLE_FIELD FieldErrorEnum_FieldError = 3
+	// The field's value is invalid.
+	FieldErrorEnum_INVALID_VALUE FieldErrorEnum_FieldError = 4
+	// The field cannot be set.
+	FieldErrorEnum_VALUE_MUST_BE_UNSET FieldErrorEnum_FieldError = 5
+	// The required repeated field was empty.
+	FieldErrorEnum_REQUIRED_NONEMPTY_LIST FieldErrorEnum_FieldError = 6
+	// The field cannot be cleared.
+	FieldErrorEnum_FIELD_CANNOT_BE_CLEARED FieldErrorEnum_FieldError = 7
+	// The field's value is on a blacklist for this field.
+	FieldErrorEnum_BLACKLISTED_VALUE FieldErrorEnum_FieldError = 8
+)
+
+var FieldErrorEnum_FieldError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REQUIRED",
+	3: "IMMUTABLE_FIELD",
+	4: "INVALID_VALUE",
+	5: "VALUE_MUST_BE_UNSET",
+	6: "REQUIRED_NONEMPTY_LIST",
+	7: "FIELD_CANNOT_BE_CLEARED",
+	8: "BLACKLISTED_VALUE",
+}
+
+var FieldErrorEnum_FieldError_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"REQUIRED":                2,
+	"IMMUTABLE_FIELD":         3,
+	"INVALID_VALUE":           4,
+	"VALUE_MUST_BE_UNSET":     5,
+	"REQUIRED_NONEMPTY_LIST":  6,
+	"FIELD_CANNOT_BE_CLEARED": 7,
+	"BLACKLISTED_VALUE":       8,
+}
+
+func (x FieldErrorEnum_FieldError) String() string {
+	return proto.EnumName(FieldErrorEnum_FieldError_name, int32(x))
+}
+
+func (FieldErrorEnum_FieldError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_94b0ac14134331cc, []int{0, 0}
+}
+
+// Container for enum describing possible field errors.
+type FieldErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FieldErrorEnum) Reset()         { *m = FieldErrorEnum{} }
+func (m *FieldErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FieldErrorEnum) ProtoMessage()    {}
+func (*FieldErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_94b0ac14134331cc, []int{0}
+}
+
+func (m *FieldErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldErrorEnum.Unmarshal(m, b)
+}
+func (m *FieldErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FieldErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldErrorEnum.Merge(m, src)
+}
+func (m *FieldErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FieldErrorEnum.Size(m)
+}
+func (m *FieldErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FieldErrorEnum_FieldError", FieldErrorEnum_FieldError_name, FieldErrorEnum_FieldError_value)
+	proto.RegisterType((*FieldErrorEnum)(nil), "google.ads.googleads.v3.errors.FieldErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/field_error.proto", fileDescriptor_94b0ac14134331cc)
+}
+
+var fileDescriptor_94b0ac14134331cc = []byte{
+	// 392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x49, 0x06, 0xdb, 0xe4, 0x01, 0xcd, 0x3c, 0xc1, 0xa4, 0x81, 0x76, 0x91, 0x07, 0x70,
+	0x90, 0x72, 0x67, 0xae, 0x9c, 0xc4, 0x9d, 0xac, 0x26, 0x6e, 0x68, 0xfe, 0x20, 0x50, 0x24, 0x2b,
+	0x90, 0x10, 0x45, 0x6a, 0xe3, 0x2a, 0x2e, 0x7d, 0x20, 0x2e, 0x79, 0x13, 0x78, 0x06, 0x9e, 0xa0,
+	0x4f, 0x81, 0x12, 0x93, 0xf6, 0x8a, 0x5d, 0xf9, 0xf3, 0xd1, 0xef, 0xfb, 0x8e, 0x7d, 0x0e, 0x78,
+	0xd7, 0x48, 0xd9, 0xac, 0x6b, 0xa7, 0xac, 0x94, 0xa3, 0xe5, 0xa0, 0xf6, 0xae, 0x53, 0xf7, 0xbd,
+	0xec, 0x95, 0xf3, 0xad, 0xad, 0xd7, 0x95, 0x18, 0x2f, 0x68, 0xdb, 0xcb, 0x9d, 0x84, 0xf7, 0x1a,
+	0x43, 0x65, 0xa5, 0xd0, 0xd1, 0x81, 0xf6, 0x2e, 0xd2, 0x8e, 0xbb, 0xb7, 0x53, 0xe2, 0xb6, 0x75,
+	0xca, 0xae, 0x93, 0xbb, 0x72, 0xd7, 0xca, 0x4e, 0x69, 0xb7, 0xfd, 0xc7, 0x00, 0x2f, 0xe7, 0x43,
+	0x26, 0x1d, 0x68, 0xda, 0x7d, 0xdf, 0xd8, 0xbf, 0x0c, 0x00, 0x4e, 0x25, 0x38, 0x03, 0x57, 0x19,
+	0x4f, 0x62, 0xea, 0xb3, 0x39, 0xa3, 0x81, 0xf5, 0x04, 0x5e, 0x81, 0x8b, 0x8c, 0x2f, 0xf8, 0xf2,
+	0x23, 0xb7, 0x0c, 0xf8, 0x1c, 0x5c, 0xae, 0xe8, 0x87, 0x8c, 0xad, 0x68, 0x60, 0x99, 0xf0, 0x06,
+	0xcc, 0x58, 0x14, 0x65, 0x29, 0xf1, 0x42, 0x2a, 0xe6, 0x8c, 0x86, 0x81, 0x75, 0x06, 0xaf, 0xc1,
+	0x0b, 0xc6, 0x73, 0x12, 0xb2, 0x40, 0xe4, 0x24, 0xcc, 0xa8, 0xf5, 0x14, 0xde, 0x82, 0x9b, 0x51,
+	0x8a, 0x28, 0x4b, 0x52, 0xe1, 0x51, 0x91, 0xf1, 0x84, 0xa6, 0xd6, 0x33, 0x78, 0x07, 0x5e, 0x4f,
+	0x71, 0x82, 0x2f, 0x39, 0x8d, 0xe2, 0xf4, 0x93, 0x08, 0x59, 0x92, 0x5a, 0xe7, 0xf0, 0x0d, 0xb8,
+	0x1d, 0x23, 0x85, 0x4f, 0x38, 0x5f, 0x8e, 0x36, 0x3f, 0xa4, 0x64, 0xe8, 0x7c, 0x01, 0x5f, 0x81,
+	0x6b, 0x2f, 0x24, 0xfe, 0x62, 0x60, 0xe9, 0xd4, 0xe8, 0xd2, 0x3b, 0x18, 0xc0, 0xfe, 0x2a, 0x37,
+	0xe8, 0xf1, 0x19, 0x79, 0xb3, 0xd3, 0x7f, 0xe3, 0x61, 0x2c, 0xb1, 0xf1, 0x39, 0xf8, 0x67, 0x69,
+	0xe4, 0xba, 0xec, 0x1a, 0x24, 0xfb, 0xc6, 0x69, 0xea, 0x6e, 0x1c, 0xda, 0xb4, 0x98, 0x6d, 0xab,
+	0xfe, 0xb7, 0xa7, 0xf7, 0xfa, 0xf8, 0x61, 0x9e, 0x3d, 0x10, 0xf2, 0xd3, 0xbc, 0x7f, 0xd0, 0x61,
+	0xa4, 0x52, 0x48, 0xcb, 0x41, 0xe5, 0x2e, 0x1a, 0x5b, 0xaa, 0xdf, 0x13, 0x50, 0x90, 0x4a, 0x15,
+	0x47, 0xa0, 0xc8, 0xdd, 0x42, 0x03, 0x07, 0xd3, 0xd6, 0x55, 0x8c, 0x49, 0xa5, 0x30, 0x3e, 0x22,
+	0x18, 0xe7, 0x2e, 0xc6, 0x1a, 0xfa, 0x72, 0x3e, 0xbe, 0xce, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff,
+	0xd4, 0x06, 0x14, 0x1f, 0x44, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/field_mask_error.pb.go b/googleapis/ads/googleads/v3/errors/field_mask_error.pb.go
new file mode 100644
index 0000000..1ff5d96
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/field_mask_error.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/field_mask_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible field mask errors.
+type FieldMaskErrorEnum_FieldMaskError int32
+
+const (
+	// Enum unspecified.
+	FieldMaskErrorEnum_UNSPECIFIED FieldMaskErrorEnum_FieldMaskError = 0
+	// The received error code is not known in this version.
+	FieldMaskErrorEnum_UNKNOWN FieldMaskErrorEnum_FieldMaskError = 1
+	// The field mask must be provided for update operations.
+	FieldMaskErrorEnum_FIELD_MASK_MISSING FieldMaskErrorEnum_FieldMaskError = 5
+	// The field mask must be empty for create and remove operations.
+	FieldMaskErrorEnum_FIELD_MASK_NOT_ALLOWED FieldMaskErrorEnum_FieldMaskError = 4
+	// The field mask contained an invalid field.
+	FieldMaskErrorEnum_FIELD_NOT_FOUND FieldMaskErrorEnum_FieldMaskError = 2
+	// The field mask updated a field with subfields. Fields with subfields may
+	// be cleared, but not updated. To fix this, the field mask should select
+	// all the subfields of the invalid field.
+	FieldMaskErrorEnum_FIELD_HAS_SUBFIELDS FieldMaskErrorEnum_FieldMaskError = 3
+)
+
+var FieldMaskErrorEnum_FieldMaskError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	5: "FIELD_MASK_MISSING",
+	4: "FIELD_MASK_NOT_ALLOWED",
+	2: "FIELD_NOT_FOUND",
+	3: "FIELD_HAS_SUBFIELDS",
+}
+
+var FieldMaskErrorEnum_FieldMaskError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"FIELD_MASK_MISSING":     5,
+	"FIELD_MASK_NOT_ALLOWED": 4,
+	"FIELD_NOT_FOUND":        2,
+	"FIELD_HAS_SUBFIELDS":    3,
+}
+
+func (x FieldMaskErrorEnum_FieldMaskError) String() string {
+	return proto.EnumName(FieldMaskErrorEnum_FieldMaskError_name, int32(x))
+}
+
+func (FieldMaskErrorEnum_FieldMaskError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dfa5de1d9c38d5db, []int{0, 0}
+}
+
+// Container for enum describing possible field mask errors.
+type FieldMaskErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FieldMaskErrorEnum) Reset()         { *m = FieldMaskErrorEnum{} }
+func (m *FieldMaskErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FieldMaskErrorEnum) ProtoMessage()    {}
+func (*FieldMaskErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dfa5de1d9c38d5db, []int{0}
+}
+
+func (m *FieldMaskErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldMaskErrorEnum.Unmarshal(m, b)
+}
+func (m *FieldMaskErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldMaskErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FieldMaskErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldMaskErrorEnum.Merge(m, src)
+}
+func (m *FieldMaskErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FieldMaskErrorEnum.Size(m)
+}
+func (m *FieldMaskErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldMaskErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldMaskErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FieldMaskErrorEnum_FieldMaskError", FieldMaskErrorEnum_FieldMaskError_name, FieldMaskErrorEnum_FieldMaskError_value)
+	proto.RegisterType((*FieldMaskErrorEnum)(nil), "google.ads.googleads.v3.errors.FieldMaskErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/field_mask_error.proto", fileDescriptor_dfa5de1d9c38d5db)
+}
+
+var fileDescriptor_dfa5de1d9c38d5db = []byte{
+	// 352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x14, 0xc6, 0x6d, 0xe7, 0x1f, 0xc8, 0xc0, 0x95, 0x0c, 0x26, 0x0c, 0xd9, 0x45, 0x1f, 0x20, 0xbd,
+	0x28, 0xde, 0xc4, 0xab, 0xcc, 0xb6, 0xb3, 0x6c, 0x4b, 0x07, 0xb1, 0x1b, 0x48, 0xa1, 0x44, 0x5b,
+	0x4b, 0xd9, 0xd6, 0x8c, 0x66, 0xee, 0x39, 0x7c, 0x06, 0x6f, 0x04, 0x1f, 0xc5, 0x47, 0xf1, 0xc2,
+	0x67, 0x90, 0x36, 0xae, 0xb8, 0x0b, 0xbd, 0xca, 0x97, 0x2f, 0xbf, 0xef, 0xe4, 0x9c, 0x03, 0xae,
+	0x32, 0x21, 0xb2, 0x55, 0x6a, 0xf1, 0x44, 0x5a, 0x4a, 0x56, 0x6a, 0x67, 0x5b, 0x69, 0x59, 0x8a,
+	0x52, 0x5a, 0x4f, 0x79, 0xba, 0x4a, 0xe2, 0x35, 0x97, 0xcb, 0xb8, 0x76, 0xd0, 0xa6, 0x14, 0x5b,
+	0x01, 0x07, 0x8a, 0x45, 0x3c, 0x91, 0xa8, 0x89, 0xa1, 0x9d, 0x8d, 0x54, 0xac, 0x7f, 0xb9, 0x2f,
+	0xbb, 0xc9, 0x2d, 0x5e, 0x14, 0x62, 0xcb, 0xb7, 0xb9, 0x28, 0xa4, 0x4a, 0x9b, 0x6f, 0x1a, 0x80,
+	0x5e, 0x55, 0x78, 0xca, 0xe5, 0xd2, 0xad, 0x12, 0x6e, 0xf1, 0xbc, 0x36, 0x5f, 0x34, 0x70, 0x7e,
+	0x68, 0xc3, 0x0e, 0x68, 0x87, 0x94, 0xcd, 0xdc, 0x1b, 0xdf, 0xf3, 0x5d, 0xc7, 0x38, 0x82, 0x6d,
+	0x70, 0x16, 0xd2, 0x31, 0x0d, 0x16, 0xd4, 0xd0, 0x60, 0x0f, 0x40, 0xcf, 0x77, 0x27, 0x4e, 0x3c,
+	0x25, 0x6c, 0x1c, 0x4f, 0x7d, 0xc6, 0x7c, 0x3a, 0x32, 0x4e, 0x60, 0x1f, 0xf4, 0x7e, 0xf9, 0x34,
+	0xb8, 0x8b, 0xc9, 0x64, 0x12, 0x2c, 0x5c, 0xc7, 0x38, 0x86, 0x5d, 0xd0, 0x51, 0x6f, 0x95, 0xed,
+	0x05, 0x21, 0x75, 0x0c, 0x1d, 0x5e, 0x80, 0xae, 0x32, 0x6f, 0x09, 0x8b, 0x59, 0x38, 0xac, 0x2f,
+	0xcc, 0x68, 0x0d, 0xbf, 0x34, 0x60, 0x3e, 0x8a, 0x35, 0xfa, 0x7f, 0xdc, 0x61, 0xf7, 0xb0, 0xed,
+	0x59, 0x35, 0xe5, 0x4c, 0xbb, 0x77, 0x7e, 0x62, 0x99, 0x58, 0xf1, 0x22, 0x43, 0xa2, 0xcc, 0xac,
+	0x2c, 0x2d, 0xea, 0x1d, 0xec, 0x97, 0xbd, 0xc9, 0xe5, 0x5f, 0xbb, 0xbf, 0x56, 0xc7, 0xab, 0xde,
+	0x1a, 0x11, 0xf2, 0xae, 0x0f, 0x46, 0xaa, 0x18, 0x49, 0x24, 0x52, 0xb2, 0x52, 0x73, 0x1b, 0xd5,
+	0x5f, 0xca, 0x8f, 0x3d, 0x10, 0x91, 0x44, 0x46, 0x0d, 0x10, 0xcd, 0xed, 0x48, 0x01, 0x9f, 0xba,
+	0xa9, 0x5c, 0x8c, 0x49, 0x22, 0x31, 0x6e, 0x10, 0x8c, 0xe7, 0x36, 0xc6, 0x0a, 0x7a, 0x38, 0xad,
+	0xbb, 0xb3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x09, 0xaf, 0x5a, 0x18, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/function_error.pb.go b/googleapis/ads/googleads/v3/errors/function_error.pb.go
new file mode 100644
index 0000000..4083fff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/function_error.pb.go
@@ -0,0 +1,195 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/function_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible function errors.
+type FunctionErrorEnum_FunctionError int32
+
+const (
+	// Enum unspecified.
+	FunctionErrorEnum_UNSPECIFIED FunctionErrorEnum_FunctionError = 0
+	// The received error code is not known in this version.
+	FunctionErrorEnum_UNKNOWN FunctionErrorEnum_FunctionError = 1
+	// The format of the function is not recognized as a supported function
+	// format.
+	FunctionErrorEnum_INVALID_FUNCTION_FORMAT FunctionErrorEnum_FunctionError = 2
+	// Operand data types do not match.
+	FunctionErrorEnum_DATA_TYPE_MISMATCH FunctionErrorEnum_FunctionError = 3
+	// The operands cannot be used together in a conjunction.
+	FunctionErrorEnum_INVALID_CONJUNCTION_OPERANDS FunctionErrorEnum_FunctionError = 4
+	// Invalid numer of Operands.
+	FunctionErrorEnum_INVALID_NUMBER_OF_OPERANDS FunctionErrorEnum_FunctionError = 5
+	// Operand Type not supported.
+	FunctionErrorEnum_INVALID_OPERAND_TYPE FunctionErrorEnum_FunctionError = 6
+	// Operator not supported.
+	FunctionErrorEnum_INVALID_OPERATOR FunctionErrorEnum_FunctionError = 7
+	// Request context type not supported.
+	FunctionErrorEnum_INVALID_REQUEST_CONTEXT_TYPE FunctionErrorEnum_FunctionError = 8
+	// The matching function is not allowed for call placeholders
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_CALL_PLACEHOLDER FunctionErrorEnum_FunctionError = 9
+	// The matching function is not allowed for the specified placeholder
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_PLACEHOLDER FunctionErrorEnum_FunctionError = 10
+	// Invalid operand.
+	FunctionErrorEnum_INVALID_OPERAND FunctionErrorEnum_FunctionError = 11
+	// Missing value for the constant operand.
+	FunctionErrorEnum_MISSING_CONSTANT_OPERAND_VALUE FunctionErrorEnum_FunctionError = 12
+	// The value of the constant operand is invalid.
+	FunctionErrorEnum_INVALID_CONSTANT_OPERAND_VALUE FunctionErrorEnum_FunctionError = 13
+	// Invalid function nesting.
+	FunctionErrorEnum_INVALID_NESTING FunctionErrorEnum_FunctionError = 14
+	// The Feed ID was different from another Feed ID in the same function.
+	FunctionErrorEnum_MULTIPLE_FEED_IDS_NOT_SUPPORTED FunctionErrorEnum_FunctionError = 15
+	// The matching function is invalid for use with a feed with a fixed schema.
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA FunctionErrorEnum_FunctionError = 16
+	// Invalid attribute name.
+	FunctionErrorEnum_INVALID_ATTRIBUTE_NAME FunctionErrorEnum_FunctionError = 17
+)
+
+var FunctionErrorEnum_FunctionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_FUNCTION_FORMAT",
+	3:  "DATA_TYPE_MISMATCH",
+	4:  "INVALID_CONJUNCTION_OPERANDS",
+	5:  "INVALID_NUMBER_OF_OPERANDS",
+	6:  "INVALID_OPERAND_TYPE",
+	7:  "INVALID_OPERATOR",
+	8:  "INVALID_REQUEST_CONTEXT_TYPE",
+	9:  "INVALID_FUNCTION_FOR_CALL_PLACEHOLDER",
+	10: "INVALID_FUNCTION_FOR_PLACEHOLDER",
+	11: "INVALID_OPERAND",
+	12: "MISSING_CONSTANT_OPERAND_VALUE",
+	13: "INVALID_CONSTANT_OPERAND_VALUE",
+	14: "INVALID_NESTING",
+	15: "MULTIPLE_FEED_IDS_NOT_SUPPORTED",
+	16: "INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA",
+	17: "INVALID_ATTRIBUTE_NAME",
+}
+
+var FunctionErrorEnum_FunctionError_value = map[string]int32{
+	"UNSPECIFIED":                                 0,
+	"UNKNOWN":                                     1,
+	"INVALID_FUNCTION_FORMAT":                     2,
+	"DATA_TYPE_MISMATCH":                          3,
+	"INVALID_CONJUNCTION_OPERANDS":                4,
+	"INVALID_NUMBER_OF_OPERANDS":                  5,
+	"INVALID_OPERAND_TYPE":                        6,
+	"INVALID_OPERATOR":                            7,
+	"INVALID_REQUEST_CONTEXT_TYPE":                8,
+	"INVALID_FUNCTION_FOR_CALL_PLACEHOLDER":       9,
+	"INVALID_FUNCTION_FOR_PLACEHOLDER":            10,
+	"INVALID_OPERAND":                             11,
+	"MISSING_CONSTANT_OPERAND_VALUE":              12,
+	"INVALID_CONSTANT_OPERAND_VALUE":              13,
+	"INVALID_NESTING":                             14,
+	"MULTIPLE_FEED_IDS_NOT_SUPPORTED":             15,
+	"INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA": 16,
+	"INVALID_ATTRIBUTE_NAME":                      17,
+}
+
+func (x FunctionErrorEnum_FunctionError) String() string {
+	return proto.EnumName(FunctionErrorEnum_FunctionError_name, int32(x))
+}
+
+func (FunctionErrorEnum_FunctionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6dede647b246289c, []int{0, 0}
+}
+
+// Container for enum describing possible function errors.
+type FunctionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FunctionErrorEnum) Reset()         { *m = FunctionErrorEnum{} }
+func (m *FunctionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FunctionErrorEnum) ProtoMessage()    {}
+func (*FunctionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6dede647b246289c, []int{0}
+}
+
+func (m *FunctionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FunctionErrorEnum.Unmarshal(m, b)
+}
+func (m *FunctionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FunctionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FunctionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FunctionErrorEnum.Merge(m, src)
+}
+func (m *FunctionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FunctionErrorEnum.Size(m)
+}
+func (m *FunctionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FunctionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FunctionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FunctionErrorEnum_FunctionError", FunctionErrorEnum_FunctionError_name, FunctionErrorEnum_FunctionError_value)
+	proto.RegisterType((*FunctionErrorEnum)(nil), "google.ads.googleads.v3.errors.FunctionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/function_error.proto", fileDescriptor_6dede647b246289c)
+}
+
+var fileDescriptor_6dede647b246289c = []byte{
+	// 539 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xc1, 0x6e, 0xd3, 0x40,
+	0x10, 0x86, 0x49, 0x1a, 0x5a, 0xd8, 0x50, 0xb2, 0x5d, 0xaa, 0x82, 0x42, 0x15, 0xaa, 0x00, 0x07,
+	0x84, 0x64, 0x1f, 0x7c, 0x33, 0xa7, 0x8d, 0x3d, 0x4e, 0x16, 0xec, 0xb5, 0xb1, 0xd7, 0x69, 0x41,
+	0x91, 0x56, 0xa1, 0x09, 0x56, 0xa4, 0xd6, 0x8e, 0xe2, 0xb4, 0x0f, 0xc4, 0x11, 0x9e, 0x82, 0x2b,
+	0x8f, 0x82, 0xc4, 0x3b, 0x20, 0x7b, 0xe3, 0x90, 0xa0, 0xc0, 0xc9, 0xe3, 0x99, 0xef, 0x9f, 0x7f,
+	0x76, 0x35, 0x8b, 0x8c, 0x24, 0xcb, 0x92, 0xab, 0xa9, 0x3e, 0x9e, 0xe4, 0xba, 0x0a, 0x8b, 0xe8,
+	0xd6, 0xd0, 0xa7, 0x8b, 0x45, 0xb6, 0xc8, 0xf5, 0xcf, 0x37, 0xe9, 0xe5, 0x72, 0x96, 0xa5, 0xb2,
+	0xfc, 0xd7, 0xe6, 0x8b, 0x6c, 0x99, 0x91, 0x8e, 0x22, 0xb5, 0xf1, 0x24, 0xd7, 0xd6, 0x22, 0xed,
+	0xd6, 0xd0, 0x94, 0xa8, 0x7d, 0x5a, 0x35, 0x9d, 0xcf, 0xf4, 0x71, 0x9a, 0x66, 0xcb, 0x71, 0xd1,
+	0x22, 0x57, 0xea, 0xee, 0xf7, 0x06, 0x3a, 0x72, 0x56, 0x6d, 0xa1, 0x10, 0x40, 0x7a, 0x73, 0xdd,
+	0xfd, 0xd6, 0x40, 0x87, 0x5b, 0x59, 0xd2, 0x42, 0xcd, 0x98, 0x47, 0x01, 0x58, 0xcc, 0x61, 0x60,
+	0xe3, 0x3b, 0xa4, 0x89, 0x0e, 0x62, 0xfe, 0x8e, 0xfb, 0xe7, 0x1c, 0xd7, 0xc8, 0x53, 0xf4, 0x98,
+	0xf1, 0x21, 0x75, 0x99, 0x2d, 0x9d, 0x98, 0x5b, 0x82, 0xf9, 0x5c, 0x3a, 0x7e, 0xe8, 0x51, 0x81,
+	0xeb, 0xe4, 0x04, 0x11, 0x9b, 0x0a, 0x2a, 0xc5, 0x87, 0x00, 0xa4, 0xc7, 0x22, 0x8f, 0x0a, 0x6b,
+	0x80, 0xf7, 0xc8, 0x19, 0x3a, 0xad, 0x44, 0x96, 0xcf, 0xdf, 0x56, 0x3a, 0x3f, 0x80, 0x90, 0x72,
+	0x3b, 0xc2, 0x0d, 0xd2, 0x41, 0xed, 0x8a, 0xe0, 0xb1, 0xd7, 0x83, 0x50, 0xfa, 0xce, 0x9f, 0xfa,
+	0x5d, 0xf2, 0x04, 0x1d, 0x57, 0xf5, 0x55, 0xb6, 0x34, 0xc1, 0xfb, 0xe4, 0x18, 0xe1, 0xad, 0x8a,
+	0xf0, 0x43, 0x7c, 0xb0, 0xe9, 0x18, 0xc2, 0xfb, 0x18, 0x22, 0x51, 0x38, 0x0b, 0xb8, 0x10, 0x4a,
+	0x77, 0x8f, 0xbc, 0x42, 0x2f, 0x77, 0x1d, 0x44, 0x5a, 0xd4, 0x75, 0x65, 0xe0, 0x52, 0x0b, 0x06,
+	0xbe, 0x6b, 0x43, 0x88, 0xef, 0x93, 0x17, 0xe8, 0x6c, 0x27, 0xba, 0x49, 0x21, 0xf2, 0x08, 0xb5,
+	0xfe, 0x1a, 0x11, 0x37, 0x49, 0x17, 0x75, 0x3c, 0x16, 0x45, 0x8c, 0xf7, 0x0b, 0xff, 0x48, 0x50,
+	0x2e, 0xd6, 0x07, 0x18, 0x52, 0x37, 0x06, 0xfc, 0xa0, 0x60, 0x36, 0x6e, 0x67, 0x17, 0x73, 0xb8,
+	0xd9, 0x9c, 0x43, 0x24, 0x18, 0xef, 0xe3, 0x87, 0xe4, 0x39, 0x7a, 0xe6, 0xc5, 0xae, 0x60, 0x81,
+	0x0b, 0xd2, 0x01, 0xb0, 0x25, 0xb3, 0x23, 0xc9, 0x7d, 0x21, 0xa3, 0x38, 0x08, 0xfc, 0x50, 0x80,
+	0x8d, 0x5b, 0x44, 0x47, 0xaf, 0x77, 0x0e, 0x5f, 0x0a, 0xce, 0x99, 0x18, 0x48, 0x87, 0x5d, 0x80,
+	0x2d, 0x23, 0x6b, 0x00, 0x1e, 0xc5, 0x98, 0xb4, 0xd1, 0x49, 0x25, 0xa0, 0x42, 0x84, 0xac, 0x17,
+	0x0b, 0x90, 0x9c, 0x7a, 0x80, 0x8f, 0x7a, 0xbf, 0x6a, 0xa8, 0x7b, 0x99, 0x5d, 0x6b, 0xff, 0x5f,
+	0xc4, 0x1e, 0xd9, 0xda, 0xa8, 0xa0, 0x58, 0xbf, 0xa0, 0xf6, 0xd1, 0x5e, 0xa9, 0x92, 0xec, 0x6a,
+	0x9c, 0x26, 0x5a, 0xb6, 0x48, 0xf4, 0x64, 0x9a, 0x96, 0xcb, 0x59, 0xbd, 0x81, 0xf9, 0x2c, 0xff,
+	0xd7, 0x93, 0x78, 0xa3, 0x3e, 0x5f, 0xea, 0x7b, 0x7d, 0x4a, 0xbf, 0xd6, 0x3b, 0x7d, 0xd5, 0x8c,
+	0x4e, 0x72, 0x4d, 0x85, 0x45, 0x34, 0x34, 0xb4, 0xd2, 0x32, 0xff, 0x51, 0x01, 0x23, 0x3a, 0xc9,
+	0x47, 0x6b, 0x60, 0x34, 0x34, 0x46, 0x0a, 0xf8, 0x59, 0xef, 0xaa, 0xac, 0x69, 0xd2, 0x49, 0x6e,
+	0x9a, 0x6b, 0xc4, 0x34, 0x87, 0x86, 0x69, 0x2a, 0xe8, 0xd3, 0x7e, 0x39, 0x9d, 0xf1, 0x3b, 0x00,
+	0x00, 0xff, 0xff, 0x9e, 0x8b, 0xb5, 0x38, 0xaf, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/function_parsing_error.pb.go b/googleapis/ads/googleads/v3/errors/function_parsing_error.pb.go
new file mode 100644
index 0000000..deabb92
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/function_parsing_error.pb.go
@@ -0,0 +1,171 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/function_parsing_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible function parsing errors.
+type FunctionParsingErrorEnum_FunctionParsingError int32
+
+const (
+	// Enum unspecified.
+	FunctionParsingErrorEnum_UNSPECIFIED FunctionParsingErrorEnum_FunctionParsingError = 0
+	// The received error code is not known in this version.
+	FunctionParsingErrorEnum_UNKNOWN FunctionParsingErrorEnum_FunctionParsingError = 1
+	// Unexpected end of function string.
+	FunctionParsingErrorEnum_NO_MORE_INPUT FunctionParsingErrorEnum_FunctionParsingError = 2
+	// Could not find an expected character.
+	FunctionParsingErrorEnum_EXPECTED_CHARACTER FunctionParsingErrorEnum_FunctionParsingError = 3
+	// Unexpected separator character.
+	FunctionParsingErrorEnum_UNEXPECTED_SEPARATOR FunctionParsingErrorEnum_FunctionParsingError = 4
+	// Unmatched left bracket or parenthesis.
+	FunctionParsingErrorEnum_UNMATCHED_LEFT_BRACKET FunctionParsingErrorEnum_FunctionParsingError = 5
+	// Unmatched right bracket or parenthesis.
+	FunctionParsingErrorEnum_UNMATCHED_RIGHT_BRACKET FunctionParsingErrorEnum_FunctionParsingError = 6
+	// Functions are nested too deeply.
+	FunctionParsingErrorEnum_TOO_MANY_NESTED_FUNCTIONS FunctionParsingErrorEnum_FunctionParsingError = 7
+	// Missing right-hand-side operand.
+	FunctionParsingErrorEnum_MISSING_RIGHT_HAND_OPERAND FunctionParsingErrorEnum_FunctionParsingError = 8
+	// Invalid operator/function name.
+	FunctionParsingErrorEnum_INVALID_OPERATOR_NAME FunctionParsingErrorEnum_FunctionParsingError = 9
+	// Feed attribute operand's argument is not an integer.
+	FunctionParsingErrorEnum_FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER FunctionParsingErrorEnum_FunctionParsingError = 10
+	// Missing function operands.
+	FunctionParsingErrorEnum_NO_OPERANDS FunctionParsingErrorEnum_FunctionParsingError = 11
+	// Function had too many operands.
+	FunctionParsingErrorEnum_TOO_MANY_OPERANDS FunctionParsingErrorEnum_FunctionParsingError = 12
+)
+
+var FunctionParsingErrorEnum_FunctionParsingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "NO_MORE_INPUT",
+	3:  "EXPECTED_CHARACTER",
+	4:  "UNEXPECTED_SEPARATOR",
+	5:  "UNMATCHED_LEFT_BRACKET",
+	6:  "UNMATCHED_RIGHT_BRACKET",
+	7:  "TOO_MANY_NESTED_FUNCTIONS",
+	8:  "MISSING_RIGHT_HAND_OPERAND",
+	9:  "INVALID_OPERATOR_NAME",
+	10: "FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER",
+	11: "NO_OPERANDS",
+	12: "TOO_MANY_OPERANDS",
+}
+
+var FunctionParsingErrorEnum_FunctionParsingError_value = map[string]int32{
+	"UNSPECIFIED":                                 0,
+	"UNKNOWN":                                     1,
+	"NO_MORE_INPUT":                               2,
+	"EXPECTED_CHARACTER":                          3,
+	"UNEXPECTED_SEPARATOR":                        4,
+	"UNMATCHED_LEFT_BRACKET":                      5,
+	"UNMATCHED_RIGHT_BRACKET":                     6,
+	"TOO_MANY_NESTED_FUNCTIONS":                   7,
+	"MISSING_RIGHT_HAND_OPERAND":                  8,
+	"INVALID_OPERATOR_NAME":                       9,
+	"FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER": 10,
+	"NO_OPERANDS":                                 11,
+	"TOO_MANY_OPERANDS":                           12,
+}
+
+func (x FunctionParsingErrorEnum_FunctionParsingError) String() string {
+	return proto.EnumName(FunctionParsingErrorEnum_FunctionParsingError_name, int32(x))
+}
+
+func (FunctionParsingErrorEnum_FunctionParsingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_48110c2fcce1f98f, []int{0, 0}
+}
+
+// Container for enum describing possible function parsing errors.
+type FunctionParsingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FunctionParsingErrorEnum) Reset()         { *m = FunctionParsingErrorEnum{} }
+func (m *FunctionParsingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FunctionParsingErrorEnum) ProtoMessage()    {}
+func (*FunctionParsingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_48110c2fcce1f98f, []int{0}
+}
+
+func (m *FunctionParsingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Unmarshal(m, b)
+}
+func (m *FunctionParsingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *FunctionParsingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FunctionParsingErrorEnum.Merge(m, src)
+}
+func (m *FunctionParsingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Size(m)
+}
+func (m *FunctionParsingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FunctionParsingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FunctionParsingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.FunctionParsingErrorEnum_FunctionParsingError", FunctionParsingErrorEnum_FunctionParsingError_name, FunctionParsingErrorEnum_FunctionParsingError_value)
+	proto.RegisterType((*FunctionParsingErrorEnum)(nil), "google.ads.googleads.v3.errors.FunctionParsingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/function_parsing_error.proto", fileDescriptor_48110c2fcce1f98f)
+}
+
+var fileDescriptor_48110c2fcce1f98f = []byte{
+	// 487 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x6f, 0xd3, 0x30,
+	0x18, 0xc6, 0x69, 0x0b, 0x1b, 0xb8, 0x20, 0x3c, 0x6b, 0x1b, 0x6b, 0x81, 0x1e, 0x7a, 0x45, 0x4a,
+	0x0e, 0xb9, 0x65, 0x27, 0x37, 0x79, 0x9b, 0x5a, 0x5b, 0xec, 0xc8, 0x71, 0xca, 0x1f, 0x55, 0xb2,
+	0xc2, 0x5a, 0xa2, 0x4a, 0x5b, 0x52, 0x25, 0xdd, 0x3e, 0x00, 0x1f, 0x85, 0x23, 0x1f, 0x85, 0xef,
+	0xc1, 0x85, 0x33, 0x1f, 0x00, 0xa5, 0x6e, 0xb2, 0xcb, 0xd8, 0x29, 0xaf, 0xde, 0xe7, 0xf9, 0x3d,
+	0xb1, 0xfc, 0x18, 0x9d, 0x67, 0x45, 0x91, 0x5d, 0xaf, 0xec, 0x74, 0x59, 0xd9, 0x66, 0xac, 0xa7,
+	0x3b, 0xc7, 0x5e, 0x95, 0x65, 0x51, 0x56, 0xf6, 0xb7, 0xdb, 0xfc, 0x6a, 0xbb, 0x2e, 0x72, 0xbd,
+	0x49, 0xcb, 0x6a, 0x9d, 0x67, 0x7a, 0xb7, 0xb7, 0x36, 0x65, 0xb1, 0x2d, 0xc8, 0xc8, 0x10, 0x56,
+	0xba, 0xac, 0xac, 0x16, 0xb6, 0xee, 0x1c, 0xcb, 0xc0, 0xc3, 0x77, 0x4d, 0xf8, 0x66, 0x6d, 0xa7,
+	0x79, 0x5e, 0x6c, 0xd3, 0x3a, 0xaa, 0x32, 0xf4, 0xf8, 0x7b, 0x0f, 0x9d, 0x4d, 0xf7, 0xf1, 0x91,
+	0x49, 0x87, 0x9a, 0x83, 0xfc, 0xf6, 0x66, 0xfc, 0xbb, 0x8b, 0x8e, 0x1f, 0x12, 0xc9, 0x6b, 0xd4,
+	0x4f, 0x78, 0x1c, 0x81, 0xc7, 0xa6, 0x0c, 0x7c, 0xfc, 0x84, 0xf4, 0xd1, 0x61, 0xc2, 0x2f, 0xb8,
+	0xf8, 0xc8, 0x71, 0x87, 0x1c, 0xa1, 0x57, 0x5c, 0xe8, 0x50, 0x48, 0xd0, 0x8c, 0x47, 0x89, 0xc2,
+	0x5d, 0x72, 0x8a, 0x08, 0x7c, 0x8a, 0xc0, 0x53, 0xe0, 0x6b, 0x6f, 0x46, 0x25, 0xf5, 0x14, 0x48,
+	0xdc, 0x23, 0x67, 0xe8, 0x38, 0xe1, 0xad, 0x12, 0x43, 0x44, 0x25, 0x55, 0x42, 0xe2, 0xa7, 0x64,
+	0x88, 0x4e, 0x13, 0x1e, 0x52, 0xe5, 0xcd, 0xc0, 0xd7, 0x97, 0x30, 0x55, 0x7a, 0x22, 0xa9, 0x77,
+	0x01, 0x0a, 0x3f, 0x23, 0x6f, 0xd1, 0x9b, 0x7b, 0x4d, 0xb2, 0x60, 0x76, 0x2f, 0x1e, 0x90, 0xf7,
+	0x68, 0xa0, 0x84, 0xd0, 0x21, 0xe5, 0x9f, 0x35, 0x87, 0xb8, 0xce, 0x9d, 0x26, 0xdc, 0x53, 0x4c,
+	0xf0, 0x18, 0x1f, 0x92, 0x11, 0x1a, 0x86, 0x2c, 0x8e, 0x19, 0x0f, 0xf6, 0xe4, 0x8c, 0x72, 0x5f,
+	0x8b, 0x08, 0x24, 0xe5, 0x3e, 0x7e, 0x4e, 0x06, 0xe8, 0x84, 0xf1, 0x39, 0xbd, 0x64, 0xfb, 0xa5,
+	0x12, 0x52, 0x73, 0x1a, 0x02, 0x7e, 0x41, 0x6c, 0xf4, 0x61, 0x0a, 0xe0, 0x6b, 0xaa, 0x94, 0x64,
+	0x93, 0x44, 0x41, 0x83, 0x69, 0x2a, 0x83, 0x24, 0x04, 0xae, 0x34, 0x17, 0x4a, 0x33, 0xae, 0x20,
+	0x00, 0x89, 0x51, 0x7d, 0x4d, 0x5c, 0x34, 0xa6, 0x18, 0xf7, 0xc9, 0x09, 0x3a, 0x6a, 0xcf, 0xd6,
+	0xae, 0x5f, 0x4e, 0xfe, 0x76, 0xd0, 0xf8, 0xaa, 0xb8, 0xb1, 0x1e, 0x6f, 0x72, 0x32, 0x78, 0xa8,
+	0x8b, 0xa8, 0xae, 0x31, 0xea, 0x7c, 0xf1, 0xf7, 0x70, 0x56, 0x5c, 0xa7, 0x79, 0x66, 0x15, 0x65,
+	0x66, 0x67, 0xab, 0x7c, 0x57, 0x72, 0xf3, 0xa6, 0x36, 0xeb, 0xea, 0x7f, 0x4f, 0xec, 0xdc, 0x7c,
+	0x7e, 0x74, 0x7b, 0x01, 0xa5, 0x3f, 0xbb, 0xa3, 0xc0, 0x84, 0xd1, 0x65, 0x65, 0x99, 0xb1, 0x9e,
+	0xe6, 0x8e, 0xb5, 0xfb, 0x65, 0xf5, 0xab, 0x31, 0x2c, 0xe8, 0xb2, 0x5a, 0xb4, 0x86, 0xc5, 0xdc,
+	0x59, 0x18, 0xc3, 0x9f, 0xee, 0xd8, 0x6c, 0x5d, 0x97, 0x2e, 0x2b, 0xd7, 0x6d, 0x2d, 0xae, 0x3b,
+	0x77, 0x5c, 0xd7, 0x98, 0xbe, 0x1e, 0xec, 0x4e, 0xe7, 0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc3,
+	0x2b, 0xe9, 0x1a, 0xff, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/geo_target_constant_suggestion_error.pb.go b/googleapis/ads/googleads/v3/errors/geo_target_constant_suggestion_error.pb.go
new file mode 100644
index 0000000..1c5f857
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/geo_target_constant_suggestion_error.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/geo_target_constant_suggestion_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible geo target constant suggestion errors.
+type GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError int32
+
+const (
+	// Enum unspecified.
+	GeoTargetConstantSuggestionErrorEnum_UNSPECIFIED GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 0
+	// The received error code is not known in this version.
+	GeoTargetConstantSuggestionErrorEnum_UNKNOWN GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 1
+	// A location name cannot be greater than 300 characters.
+	GeoTargetConstantSuggestionErrorEnum_LOCATION_NAME_SIZE_LIMIT GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 2
+	// At most 25 location names can be specified in a SuggestGeoTargetConstants
+	// method.
+	GeoTargetConstantSuggestionErrorEnum_LOCATION_NAME_LIMIT GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 3
+	// The country code is invalid.
+	GeoTargetConstantSuggestionErrorEnum_INVALID_COUNTRY_CODE GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 4
+	// Geo target constant resource names or location names must be provided in
+	// the request.
+	GeoTargetConstantSuggestionErrorEnum_REQUEST_PARAMETERS_UNSET GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 5
+)
+
+var GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOCATION_NAME_SIZE_LIMIT",
+	3: "LOCATION_NAME_LIMIT",
+	4: "INVALID_COUNTRY_CODE",
+	5: "REQUEST_PARAMETERS_UNSET",
+}
+
+var GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"LOCATION_NAME_SIZE_LIMIT": 2,
+	"LOCATION_NAME_LIMIT":      3,
+	"INVALID_COUNTRY_CODE":     4,
+	"REQUEST_PARAMETERS_UNSET": 5,
+}
+
+func (x GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError) String() string {
+	return proto.EnumName(GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name, int32(x))
+}
+
+func (GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_15abcc5da870aafb, []int{0, 0}
+}
+
+// Container for enum describing possible geo target constant suggestion errors.
+type GeoTargetConstantSuggestionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetConstantSuggestionErrorEnum) Reset()         { *m = GeoTargetConstantSuggestionErrorEnum{} }
+func (m *GeoTargetConstantSuggestionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantSuggestionErrorEnum) ProtoMessage()    {}
+func (*GeoTargetConstantSuggestionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15abcc5da870aafb, []int{0}
+}
+
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Merge(m, src)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Size(m)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError", GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name, GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_value)
+	proto.RegisterType((*GeoTargetConstantSuggestionErrorEnum)(nil), "google.ads.googleads.v3.errors.GeoTargetConstantSuggestionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/geo_target_constant_suggestion_error.proto", fileDescriptor_15abcc5da870aafb)
+}
+
+var fileDescriptor_15abcc5da870aafb = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcf, 0xaa, 0xd4, 0x30,
+	0x14, 0xc6, 0x6d, 0xaf, 0x7f, 0x20, 0x77, 0x61, 0xa9, 0x82, 0x17, 0xb9, 0x0c, 0x52, 0x74, 0x9b,
+	0x2e, 0xba, 0x8b, 0xab, 0x4c, 0x1b, 0x87, 0xe0, 0x4c, 0x5a, 0xfb, 0x4f, 0x1c, 0x0a, 0xa1, 0x4e,
+	0x4b, 0x18, 0x98, 0x49, 0x86, 0xa6, 0x33, 0x6b, 0x9f, 0xc5, 0xa5, 0x1b, 0xdf, 0xc3, 0x27, 0xf0,
+	0x19, 0x7c, 0x0a, 0x69, 0x33, 0x53, 0x70, 0xe1, 0x9d, 0x55, 0x3e, 0x72, 0xbe, 0xf3, 0xfb, 0x92,
+	0x73, 0x00, 0x15, 0x4a, 0x89, 0x5d, 0xeb, 0xd7, 0x8d, 0xf6, 0x8d, 0x1c, 0xd4, 0x29, 0xf0, 0xdb,
+	0xae, 0x53, 0x9d, 0xf6, 0x45, 0xab, 0x78, 0x5f, 0x77, 0xa2, 0xed, 0xf9, 0x46, 0x49, 0xdd, 0xd7,
+	0xb2, 0xe7, 0xfa, 0x28, 0x44, 0xab, 0xfb, 0xad, 0x92, 0x7c, 0x74, 0xc1, 0x43, 0xa7, 0x7a, 0xe5,
+	0xce, 0x4c, 0x3f, 0xac, 0x1b, 0x0d, 0x27, 0x14, 0x3c, 0x05, 0xd0, 0xa0, 0x5e, 0xdf, 0x5f, 0xa2,
+	0x0e, 0x5b, 0xbf, 0x96, 0x52, 0xf5, 0xf5, 0x80, 0xd0, 0xa6, 0xdb, 0xfb, 0x6d, 0x81, 0xb7, 0x8b,
+	0x56, 0xe5, 0x63, 0x56, 0x78, 0x8e, 0xca, 0xa6, 0x24, 0x32, 0x30, 0x88, 0x3c, 0xee, 0xbd, 0x9f,
+	0x16, 0x78, 0x73, 0xcd, 0xe8, 0x3e, 0x07, 0xb7, 0x05, 0xcb, 0x12, 0x12, 0xd2, 0x0f, 0x94, 0x44,
+	0xce, 0x23, 0xf7, 0x16, 0x3c, 0x2b, 0xd8, 0x47, 0x16, 0x7f, 0x66, 0x8e, 0xe5, 0xde, 0x83, 0xbb,
+	0x65, 0x1c, 0xe2, 0x9c, 0xc6, 0x8c, 0x33, 0xbc, 0x22, 0x3c, 0xa3, 0x6b, 0xc2, 0x97, 0x74, 0x45,
+	0x73, 0xc7, 0x76, 0x5f, 0x81, 0x17, 0xff, 0x56, 0x4d, 0xe1, 0xc6, 0xbd, 0x03, 0x2f, 0x29, 0x2b,
+	0xf1, 0x92, 0x46, 0x3c, 0x8c, 0x0b, 0x96, 0xa7, 0x5f, 0x78, 0x18, 0x47, 0xc4, 0x79, 0x3c, 0x00,
+	0x53, 0xf2, 0xa9, 0x20, 0x59, 0xce, 0x13, 0x9c, 0xe2, 0x15, 0xc9, 0x49, 0x9a, 0xf1, 0x82, 0x65,
+	0x24, 0x77, 0x9e, 0xcc, 0xbf, 0xd9, 0xc0, 0xdb, 0xa8, 0x3d, 0x7c, 0x78, 0x3e, 0xf3, 0x77, 0xd7,
+	0x7e, 0x95, 0x0c, 0x83, 0x4a, 0xac, 0x75, 0x74, 0x06, 0x09, 0xb5, 0xab, 0xa5, 0x80, 0xaa, 0x13,
+	0xbe, 0x68, 0xe5, 0x38, 0xc6, 0xcb, 0x0e, 0x0f, 0x5b, 0xfd, 0xbf, 0x95, 0xbe, 0x37, 0xc7, 0x77,
+	0xfb, 0x66, 0x81, 0xf1, 0x0f, 0x7b, 0xb6, 0x30, 0x30, 0xdc, 0x68, 0x68, 0xe4, 0xa0, 0xca, 0x00,
+	0x8e, 0x91, 0xfa, 0xd7, 0xc5, 0x50, 0xe1, 0x46, 0x57, 0x93, 0xa1, 0x2a, 0x83, 0xca, 0x18, 0xfe,
+	0xd8, 0x9e, 0xb9, 0x45, 0x08, 0x37, 0x1a, 0xa1, 0xc9, 0x82, 0x50, 0x19, 0x20, 0x64, 0x4c, 0x5f,
+	0x9f, 0x8e, 0xaf, 0x0b, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x60, 0x53, 0x5d, 0x6f, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/header_error.pb.go b/googleapis/ads/googleads/v3/errors/header_error.pb.go
new file mode 100644
index 0000000..e7f62e5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/header_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/header_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible header errors.
+type HeaderErrorEnum_HeaderError int32
+
+const (
+	// Enum unspecified.
+	HeaderErrorEnum_UNSPECIFIED HeaderErrorEnum_HeaderError = 0
+	// The received error code is not known in this version.
+	HeaderErrorEnum_UNKNOWN HeaderErrorEnum_HeaderError = 1
+	// The login customer id could not be validated.
+	HeaderErrorEnum_INVALID_LOGIN_CUSTOMER_ID HeaderErrorEnum_HeaderError = 3
+)
+
+var HeaderErrorEnum_HeaderError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "INVALID_LOGIN_CUSTOMER_ID",
+}
+
+var HeaderErrorEnum_HeaderError_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"INVALID_LOGIN_CUSTOMER_ID": 3,
+}
+
+func (x HeaderErrorEnum_HeaderError) String() string {
+	return proto.EnumName(HeaderErrorEnum_HeaderError_name, int32(x))
+}
+
+func (HeaderErrorEnum_HeaderError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_312d60bf0fc920b6, []int{0, 0}
+}
+
+// Container for enum describing possible header errors.
+type HeaderErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HeaderErrorEnum) Reset()         { *m = HeaderErrorEnum{} }
+func (m *HeaderErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*HeaderErrorEnum) ProtoMessage()    {}
+func (*HeaderErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_312d60bf0fc920b6, []int{0}
+}
+
+func (m *HeaderErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HeaderErrorEnum.Unmarshal(m, b)
+}
+func (m *HeaderErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HeaderErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *HeaderErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HeaderErrorEnum.Merge(m, src)
+}
+func (m *HeaderErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_HeaderErrorEnum.Size(m)
+}
+func (m *HeaderErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HeaderErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HeaderErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.HeaderErrorEnum_HeaderError", HeaderErrorEnum_HeaderError_name, HeaderErrorEnum_HeaderError_value)
+	proto.RegisterType((*HeaderErrorEnum)(nil), "google.ads.googleads.v3.errors.HeaderErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/header_error.proto", fileDescriptor_312d60bf0fc920b6)
+}
+
+var fileDescriptor_312d60bf0fc920b6 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xdd, 0x06, 0x0a, 0xd9, 0x61, 0xa5, 0x37, 0x45, 0x77, 0xe8, 0x03, 0x24, 0x48, 0x6e,
+	0xf1, 0x94, 0xad, 0x75, 0x46, 0x67, 0x36, 0x9c, 0xab, 0x20, 0x95, 0x12, 0x4d, 0x89, 0x83, 0x2d,
+	0x19, 0x49, 0xdd, 0x03, 0x79, 0xf4, 0x51, 0x7c, 0x14, 0x7d, 0x09, 0x69, 0x63, 0xcb, 0x2e, 0x7a,
+	0xca, 0x97, 0x3f, 0xbf, 0xef, 0xfb, 0x7f, 0xfc, 0xc1, 0xb9, 0x32, 0x46, 0xad, 0x0b, 0x24, 0xa4,
+	0x43, 0x5e, 0x56, 0x6a, 0x87, 0x51, 0x61, 0xad, 0xb1, 0x0e, 0xbd, 0x16, 0x42, 0x16, 0x36, 0xaf,
+	0x7f, 0x70, 0x6b, 0x4d, 0x69, 0xc2, 0xa1, 0xe7, 0xa0, 0x90, 0x0e, 0xb6, 0x16, 0xb8, 0xc3, 0xd0,
+	0x5b, 0x4e, 0x4e, 0x9b, 0xc8, 0xed, 0x0a, 0x09, 0xad, 0x4d, 0x29, 0xca, 0x95, 0xd1, 0xce, 0xbb,
+	0xa3, 0x27, 0x30, 0xb8, 0xaa, 0x33, 0x93, 0x8a, 0x4e, 0xf4, 0xdb, 0x26, 0xba, 0x06, 0xfd, 0xbd,
+	0x51, 0x38, 0x00, 0xfd, 0x25, 0x5f, 0xcc, 0x93, 0x31, 0xbb, 0x64, 0x49, 0x1c, 0x1c, 0x84, 0x7d,
+	0x70, 0xb4, 0xe4, 0x37, 0x7c, 0xf6, 0xc0, 0x83, 0x4e, 0x78, 0x06, 0x8e, 0x19, 0x4f, 0xe9, 0x94,
+	0xc5, 0xf9, 0x74, 0x36, 0x61, 0x3c, 0x1f, 0x2f, 0x17, 0xf7, 0xb3, 0xdb, 0xe4, 0x2e, 0x67, 0x71,
+	0xd0, 0x1b, 0x7d, 0x77, 0x40, 0xf4, 0x62, 0x36, 0xf0, 0xff, 0x8e, 0xa3, 0x60, 0x6f, 0xe1, 0xbc,
+	0xea, 0x35, 0xef, 0x3c, 0xc6, 0xbf, 0x1e, 0x65, 0xd6, 0x42, 0x2b, 0x68, 0xac, 0x42, 0xaa, 0xd0,
+	0x75, 0xeb, 0xe6, 0x34, 0xdb, 0x95, 0xfb, 0xeb, 0x52, 0x17, 0xfe, 0x79, 0xef, 0xf6, 0x26, 0x94,
+	0x7e, 0x74, 0x87, 0x13, 0x1f, 0x46, 0xa5, 0x83, 0x5e, 0x56, 0x2a, 0xc5, 0xb0, 0x5e, 0xe9, 0x3e,
+	0x1b, 0x20, 0xa3, 0xd2, 0x65, 0x2d, 0x90, 0xa5, 0x38, 0xf3, 0xc0, 0x57, 0x37, 0xf2, 0x53, 0x42,
+	0xa8, 0x74, 0x84, 0xb4, 0x08, 0x21, 0x29, 0x26, 0xc4, 0x43, 0xcf, 0x87, 0x75, 0x3b, 0xfc, 0x13,
+	0x00, 0x00, 0xff, 0xff, 0xfb, 0x94, 0xbc, 0x71, 0xc6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/id_error.pb.go b/googleapis/ads/googleads/v3/errors/id_error.pb.go
new file mode 100644
index 0000000..3c3c5fc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/id_error.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/id_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible id errors.
+type IdErrorEnum_IdError int32
+
+const (
+	// Enum unspecified.
+	IdErrorEnum_UNSPECIFIED IdErrorEnum_IdError = 0
+	// The received error code is not known in this version.
+	IdErrorEnum_UNKNOWN IdErrorEnum_IdError = 1
+	// Id not found
+	IdErrorEnum_NOT_FOUND IdErrorEnum_IdError = 2
+)
+
+var IdErrorEnum_IdError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOT_FOUND",
+}
+
+var IdErrorEnum_IdError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NOT_FOUND":   2,
+}
+
+func (x IdErrorEnum_IdError) String() string {
+	return proto.EnumName(IdErrorEnum_IdError_name, int32(x))
+}
+
+func (IdErrorEnum_IdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bbd2ce57bfc4276b, []int{0, 0}
+}
+
+// Container for enum describing possible id errors.
+type IdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IdErrorEnum) Reset()         { *m = IdErrorEnum{} }
+func (m *IdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*IdErrorEnum) ProtoMessage()    {}
+func (*IdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bbd2ce57bfc4276b, []int{0}
+}
+
+func (m *IdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IdErrorEnum.Unmarshal(m, b)
+}
+func (m *IdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IdErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *IdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IdErrorEnum.Merge(m, src)
+}
+func (m *IdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_IdErrorEnum.Size(m)
+}
+func (m *IdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_IdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.IdErrorEnum_IdError", IdErrorEnum_IdError_name, IdErrorEnum_IdError_value)
+	proto.RegisterType((*IdErrorEnum)(nil), "google.ads.googleads.v3.errors.IdErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/id_error.proto", fileDescriptor_bbd2ce57bfc4276b)
+}
+
+var fileDescriptor_bbd2ce57bfc4276b = []byte{
+	// 279 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x6d, 0x05, 0x87, 0xa9, 0x62, 0xe9, 0x51, 0x64, 0x87, 0xde, 0x4d, 0x0e, 0x01, 0x0f,
+	0xf1, 0xd4, 0xd9, 0x6e, 0x14, 0x21, 0x2d, 0x68, 0x2b, 0x48, 0x61, 0x54, 0x53, 0x42, 0x61, 0x4b,
+	0x4a, 0x53, 0xf7, 0x40, 0x1e, 0x7d, 0x14, 0x5f, 0x44, 0xf0, 0x29, 0xa4, 0xfd, 0xda, 0xde, 0xdc,
+	0x29, 0xbf, 0x84, 0x5f, 0xfe, 0xdf, 0x3f, 0x41, 0xb7, 0x52, 0x6b, 0xb9, 0xab, 0x48, 0x29, 0x0c,
+	0x01, 0xec, 0xe9, 0x40, 0x49, 0xd5, 0xb6, 0xba, 0x35, 0xa4, 0x16, 0xdb, 0x81, 0x70, 0xd3, 0xea,
+	0x4e, 0x7b, 0x4b, 0x70, 0x70, 0x29, 0x0c, 0x9e, 0x75, 0x7c, 0xa0, 0x18, 0xf4, 0xeb, 0x9b, 0x29,
+	0xae, 0xa9, 0x49, 0xa9, 0x94, 0xee, 0xca, 0xae, 0xd6, 0xca, 0xc0, 0x6d, 0x3f, 0x42, 0x4e, 0x2c,
+	0xa2, 0xde, 0x8c, 0xd4, 0xc7, 0xde, 0xbf, 0x43, 0x8b, 0x71, 0xeb, 0x5d, 0x21, 0x27, 0xe3, 0x4f,
+	0x69, 0xf4, 0x10, 0xaf, 0xe3, 0x28, 0x74, 0x4f, 0x3c, 0x07, 0x2d, 0x32, 0xfe, 0xc8, 0x93, 0x17,
+	0xee, 0x5a, 0xde, 0x25, 0x3a, 0xe7, 0xc9, 0xf3, 0x76, 0x9d, 0x64, 0x3c, 0x74, 0xed, 0xd5, 0x8f,
+	0x85, 0xfc, 0x77, 0xbd, 0xc7, 0xc7, 0xbb, 0xac, 0x2e, 0xc6, 0xf0, 0xb4, 0x9f, 0x9d, 0x5a, 0xaf,
+	0xe1, 0xe8, 0x4b, 0xbd, 0x2b, 0x95, 0xc4, 0xba, 0x95, 0x44, 0x56, 0x6a, 0x68, 0x36, 0x3d, 0xbd,
+	0xa9, 0xcd, 0x7f, 0x3f, 0x71, 0x0f, 0xcb, 0xa7, 0x7d, 0xba, 0x09, 0x82, 0x2f, 0x7b, 0xb9, 0x81,
+	0xb0, 0x40, 0x18, 0x0c, 0xd8, 0x53, 0x4e, 0xf1, 0x30, 0xd2, 0x7c, 0x4f, 0x42, 0x11, 0x08, 0x53,
+	0xcc, 0x42, 0x91, 0xd3, 0x02, 0x84, 0x5f, 0xdb, 0x87, 0x53, 0xc6, 0x02, 0x61, 0x18, 0x9b, 0x15,
+	0xc6, 0x72, 0xca, 0x18, 0x48, 0x6f, 0x67, 0x43, 0x3b, 0xfa, 0x17, 0x00, 0x00, 0xff, 0xff, 0x3d,
+	0xdf, 0x17, 0xb0, 0xa6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/image_error.pb.go b/googleapis/ads/googleads/v3/errors/image_error.pb.go
new file mode 100644
index 0000000..a6974e3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/image_error.pb.go
@@ -0,0 +1,302 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/image_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible image errors.
+type ImageErrorEnum_ImageError int32
+
+const (
+	// Enum unspecified.
+	ImageErrorEnum_UNSPECIFIED ImageErrorEnum_ImageError = 0
+	// The received error code is not known in this version.
+	ImageErrorEnum_UNKNOWN ImageErrorEnum_ImageError = 1
+	// The image is not valid.
+	ImageErrorEnum_INVALID_IMAGE ImageErrorEnum_ImageError = 2
+	// The image could not be stored.
+	ImageErrorEnum_STORAGE_ERROR ImageErrorEnum_ImageError = 3
+	// There was a problem with the request.
+	ImageErrorEnum_BAD_REQUEST ImageErrorEnum_ImageError = 4
+	// The image is not of legal dimensions.
+	ImageErrorEnum_UNEXPECTED_SIZE ImageErrorEnum_ImageError = 5
+	// Animated image are not permitted.
+	ImageErrorEnum_ANIMATED_NOT_ALLOWED ImageErrorEnum_ImageError = 6
+	// Animation is too long.
+	ImageErrorEnum_ANIMATION_TOO_LONG ImageErrorEnum_ImageError = 7
+	// There was an error on the server.
+	ImageErrorEnum_SERVER_ERROR ImageErrorEnum_ImageError = 8
+	// Image cannot be in CMYK color format.
+	ImageErrorEnum_CMYK_JPEG_NOT_ALLOWED ImageErrorEnum_ImageError = 9
+	// Flash images are not permitted.
+	ImageErrorEnum_FLASH_NOT_ALLOWED ImageErrorEnum_ImageError = 10
+	// Flash images must support clickTag.
+	ImageErrorEnum_FLASH_WITHOUT_CLICKTAG ImageErrorEnum_ImageError = 11
+	// A flash error has occurred after fixing the click tag.
+	ImageErrorEnum_FLASH_ERROR_AFTER_FIXING_CLICK_TAG ImageErrorEnum_ImageError = 12
+	// Unacceptable visual effects.
+	ImageErrorEnum_ANIMATED_VISUAL_EFFECT ImageErrorEnum_ImageError = 13
+	// There was a problem with the flash image.
+	ImageErrorEnum_FLASH_ERROR ImageErrorEnum_ImageError = 14
+	// Incorrect image layout.
+	ImageErrorEnum_LAYOUT_PROBLEM ImageErrorEnum_ImageError = 15
+	// There was a problem reading the image file.
+	ImageErrorEnum_PROBLEM_READING_IMAGE_FILE ImageErrorEnum_ImageError = 16
+	// There was an error storing the image.
+	ImageErrorEnum_ERROR_STORING_IMAGE ImageErrorEnum_ImageError = 17
+	// The aspect ratio of the image is not allowed.
+	ImageErrorEnum_ASPECT_RATIO_NOT_ALLOWED ImageErrorEnum_ImageError = 18
+	// Flash cannot have network objects.
+	ImageErrorEnum_FLASH_HAS_NETWORK_OBJECTS ImageErrorEnum_ImageError = 19
+	// Flash cannot have network methods.
+	ImageErrorEnum_FLASH_HAS_NETWORK_METHODS ImageErrorEnum_ImageError = 20
+	// Flash cannot have a Url.
+	ImageErrorEnum_FLASH_HAS_URL ImageErrorEnum_ImageError = 21
+	// Flash cannot use mouse tracking.
+	ImageErrorEnum_FLASH_HAS_MOUSE_TRACKING ImageErrorEnum_ImageError = 22
+	// Flash cannot have a random number.
+	ImageErrorEnum_FLASH_HAS_RANDOM_NUM ImageErrorEnum_ImageError = 23
+	// Ad click target cannot be '_self'.
+	ImageErrorEnum_FLASH_SELF_TARGETS ImageErrorEnum_ImageError = 24
+	// GetUrl method should only use '_blank'.
+	ImageErrorEnum_FLASH_BAD_GETURL_TARGET ImageErrorEnum_ImageError = 25
+	// Flash version is not supported.
+	ImageErrorEnum_FLASH_VERSION_NOT_SUPPORTED ImageErrorEnum_ImageError = 26
+	// Flash movies need to have hard coded click URL or clickTAG
+	ImageErrorEnum_FLASH_WITHOUT_HARD_CODED_CLICK_URL ImageErrorEnum_ImageError = 27
+	// Uploaded flash file is corrupted.
+	ImageErrorEnum_INVALID_FLASH_FILE ImageErrorEnum_ImageError = 28
+	// Uploaded flash file can be parsed, but the click tag can not be fixed
+	// properly.
+	ImageErrorEnum_FAILED_TO_FIX_CLICK_TAG_IN_FLASH ImageErrorEnum_ImageError = 29
+	// Flash movie accesses network resources
+	ImageErrorEnum_FLASH_ACCESSES_NETWORK_RESOURCES ImageErrorEnum_ImageError = 30
+	// Flash movie attempts to call external javascript code
+	ImageErrorEnum_FLASH_EXTERNAL_JS_CALL ImageErrorEnum_ImageError = 31
+	// Flash movie attempts to call flash system commands
+	ImageErrorEnum_FLASH_EXTERNAL_FS_CALL ImageErrorEnum_ImageError = 32
+	// Image file is too large.
+	ImageErrorEnum_FILE_TOO_LARGE ImageErrorEnum_ImageError = 33
+	// Image data is too large.
+	ImageErrorEnum_IMAGE_DATA_TOO_LARGE ImageErrorEnum_ImageError = 34
+	// Error while processing the image.
+	ImageErrorEnum_IMAGE_PROCESSING_ERROR ImageErrorEnum_ImageError = 35
+	// Image is too small.
+	ImageErrorEnum_IMAGE_TOO_SMALL ImageErrorEnum_ImageError = 36
+	// Input was invalid.
+	ImageErrorEnum_INVALID_INPUT ImageErrorEnum_ImageError = 37
+	// There was a problem reading the image file.
+	ImageErrorEnum_PROBLEM_READING_FILE ImageErrorEnum_ImageError = 38
+	// Image constraints are violated, but details like ASPECT_RATIO_NOT_ALLOWED
+	// can't be provided. This happens when asset spec contains more than one
+	// constraint and different criteria of different constraints are violated.
+	ImageErrorEnum_IMAGE_CONSTRAINTS_VIOLATED ImageErrorEnum_ImageError = 39
+)
+
+var ImageErrorEnum_ImageError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_IMAGE",
+	3:  "STORAGE_ERROR",
+	4:  "BAD_REQUEST",
+	5:  "UNEXPECTED_SIZE",
+	6:  "ANIMATED_NOT_ALLOWED",
+	7:  "ANIMATION_TOO_LONG",
+	8:  "SERVER_ERROR",
+	9:  "CMYK_JPEG_NOT_ALLOWED",
+	10: "FLASH_NOT_ALLOWED",
+	11: "FLASH_WITHOUT_CLICKTAG",
+	12: "FLASH_ERROR_AFTER_FIXING_CLICK_TAG",
+	13: "ANIMATED_VISUAL_EFFECT",
+	14: "FLASH_ERROR",
+	15: "LAYOUT_PROBLEM",
+	16: "PROBLEM_READING_IMAGE_FILE",
+	17: "ERROR_STORING_IMAGE",
+	18: "ASPECT_RATIO_NOT_ALLOWED",
+	19: "FLASH_HAS_NETWORK_OBJECTS",
+	20: "FLASH_HAS_NETWORK_METHODS",
+	21: "FLASH_HAS_URL",
+	22: "FLASH_HAS_MOUSE_TRACKING",
+	23: "FLASH_HAS_RANDOM_NUM",
+	24: "FLASH_SELF_TARGETS",
+	25: "FLASH_BAD_GETURL_TARGET",
+	26: "FLASH_VERSION_NOT_SUPPORTED",
+	27: "FLASH_WITHOUT_HARD_CODED_CLICK_URL",
+	28: "INVALID_FLASH_FILE",
+	29: "FAILED_TO_FIX_CLICK_TAG_IN_FLASH",
+	30: "FLASH_ACCESSES_NETWORK_RESOURCES",
+	31: "FLASH_EXTERNAL_JS_CALL",
+	32: "FLASH_EXTERNAL_FS_CALL",
+	33: "FILE_TOO_LARGE",
+	34: "IMAGE_DATA_TOO_LARGE",
+	35: "IMAGE_PROCESSING_ERROR",
+	36: "IMAGE_TOO_SMALL",
+	37: "INVALID_INPUT",
+	38: "PROBLEM_READING_FILE",
+	39: "IMAGE_CONSTRAINTS_VIOLATED",
+}
+
+var ImageErrorEnum_ImageError_value = map[string]int32{
+	"UNSPECIFIED":                        0,
+	"UNKNOWN":                            1,
+	"INVALID_IMAGE":                      2,
+	"STORAGE_ERROR":                      3,
+	"BAD_REQUEST":                        4,
+	"UNEXPECTED_SIZE":                    5,
+	"ANIMATED_NOT_ALLOWED":               6,
+	"ANIMATION_TOO_LONG":                 7,
+	"SERVER_ERROR":                       8,
+	"CMYK_JPEG_NOT_ALLOWED":              9,
+	"FLASH_NOT_ALLOWED":                  10,
+	"FLASH_WITHOUT_CLICKTAG":             11,
+	"FLASH_ERROR_AFTER_FIXING_CLICK_TAG": 12,
+	"ANIMATED_VISUAL_EFFECT":             13,
+	"FLASH_ERROR":                        14,
+	"LAYOUT_PROBLEM":                     15,
+	"PROBLEM_READING_IMAGE_FILE":         16,
+	"ERROR_STORING_IMAGE":                17,
+	"ASPECT_RATIO_NOT_ALLOWED":           18,
+	"FLASH_HAS_NETWORK_OBJECTS":          19,
+	"FLASH_HAS_NETWORK_METHODS":          20,
+	"FLASH_HAS_URL":                      21,
+	"FLASH_HAS_MOUSE_TRACKING":           22,
+	"FLASH_HAS_RANDOM_NUM":               23,
+	"FLASH_SELF_TARGETS":                 24,
+	"FLASH_BAD_GETURL_TARGET":            25,
+	"FLASH_VERSION_NOT_SUPPORTED":        26,
+	"FLASH_WITHOUT_HARD_CODED_CLICK_URL": 27,
+	"INVALID_FLASH_FILE":                 28,
+	"FAILED_TO_FIX_CLICK_TAG_IN_FLASH":   29,
+	"FLASH_ACCESSES_NETWORK_RESOURCES":   30,
+	"FLASH_EXTERNAL_JS_CALL":             31,
+	"FLASH_EXTERNAL_FS_CALL":             32,
+	"FILE_TOO_LARGE":                     33,
+	"IMAGE_DATA_TOO_LARGE":               34,
+	"IMAGE_PROCESSING_ERROR":             35,
+	"IMAGE_TOO_SMALL":                    36,
+	"INVALID_INPUT":                      37,
+	"PROBLEM_READING_FILE":               38,
+	"IMAGE_CONSTRAINTS_VIOLATED":         39,
+}
+
+func (x ImageErrorEnum_ImageError) String() string {
+	return proto.EnumName(ImageErrorEnum_ImageError_name, int32(x))
+}
+
+func (ImageErrorEnum_ImageError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_276eefc416298097, []int{0, 0}
+}
+
+// Container for enum describing possible image errors.
+type ImageErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ImageErrorEnum) Reset()         { *m = ImageErrorEnum{} }
+func (m *ImageErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ImageErrorEnum) ProtoMessage()    {}
+func (*ImageErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276eefc416298097, []int{0}
+}
+
+func (m *ImageErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageErrorEnum.Unmarshal(m, b)
+}
+func (m *ImageErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ImageErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageErrorEnum.Merge(m, src)
+}
+func (m *ImageErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ImageErrorEnum.Size(m)
+}
+func (m *ImageErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ImageErrorEnum_ImageError", ImageErrorEnum_ImageError_name, ImageErrorEnum_ImageError_value)
+	proto.RegisterType((*ImageErrorEnum)(nil), "google.ads.googleads.v3.errors.ImageErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/image_error.proto", fileDescriptor_276eefc416298097)
+}
+
+var fileDescriptor_276eefc416298097 = []byte{
+	// 801 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x6e, 0x1b, 0x37,
+	0x10, 0xae, 0x9d, 0x36, 0x71, 0xe9, 0xc4, 0xa6, 0xe9, 0xf8, 0xdf, 0x71, 0x52, 0x35, 0x4d, 0x6f,
+	0x52, 0x01, 0xdd, 0xd4, 0x13, 0xb5, 0x3b, 0xbb, 0xa2, 0xc5, 0x25, 0xb7, 0x24, 0x57, 0x76, 0x02,
+	0x03, 0x84, 0x5a, 0x19, 0x82, 0x81, 0x58, 0x6b, 0x68, 0xdd, 0xbc, 0x4a, 0xef, 0x3d, 0xe6, 0x51,
+	0xfa, 0x28, 0x79, 0x8a, 0x62, 0x96, 0x92, 0x36, 0x2e, 0xd2, 0x9c, 0x44, 0xcd, 0xf7, 0xf1, 0x9b,
+	0xe1, 0x7c, 0xb3, 0x43, 0x7e, 0x99, 0x96, 0xe5, 0xf4, 0xfd, 0x75, 0x67, 0x3c, 0xa9, 0x3a, 0xe1,
+	0x88, 0xa7, 0x0f, 0xdd, 0xce, 0xf5, 0x7c, 0x5e, 0xce, 0xab, 0xce, 0xcd, 0xed, 0x78, 0x7a, 0xed,
+	0xeb, 0x3f, 0xed, 0xbb, 0x79, 0x79, 0x5f, 0xb2, 0xb3, 0x40, 0x6b, 0x8f, 0x27, 0x55, 0x7b, 0x75,
+	0xa3, 0xfd, 0xa1, 0xdb, 0x0e, 0x37, 0x8e, 0x4f, 0x97, 0x8a, 0x77, 0x37, 0x9d, 0xf1, 0x6c, 0x56,
+	0xde, 0x8f, 0xef, 0x6f, 0xca, 0x59, 0x15, 0x6e, 0xb7, 0x3e, 0x6e, 0x90, 0x2d, 0x81, 0x9a, 0x80,
+	0x6c, 0x98, 0xfd, 0x79, 0xdb, 0xfa, 0x6b, 0x83, 0x90, 0x26, 0xc4, 0xb6, 0xc9, 0x66, 0xa1, 0x6c,
+	0x0e, 0x91, 0x48, 0x04, 0xc4, 0xf4, 0x1b, 0xb6, 0x49, 0x9e, 0x14, 0x6a, 0xa8, 0xf4, 0x85, 0xa2,
+	0x6b, 0x6c, 0x87, 0x3c, 0x13, 0x6a, 0xc4, 0xa5, 0x88, 0xbd, 0xc8, 0x78, 0x0a, 0x74, 0x1d, 0x43,
+	0xd6, 0x69, 0xc3, 0x53, 0xf0, 0x60, 0x8c, 0x36, 0xf4, 0x11, 0x6a, 0xf4, 0x79, 0xec, 0x0d, 0xfc,
+	0x56, 0x80, 0x75, 0xf4, 0x5b, 0xb6, 0x4b, 0xb6, 0x0b, 0x05, 0x97, 0x39, 0x44, 0x0e, 0x62, 0x6f,
+	0xc5, 0x3b, 0xa0, 0xdf, 0xb1, 0x43, 0xf2, 0x9c, 0x2b, 0x91, 0x71, 0x0c, 0x29, 0xed, 0x3c, 0x97,
+	0x52, 0x5f, 0x40, 0x4c, 0x1f, 0xb3, 0x7d, 0xc2, 0x02, 0x22, 0xb4, 0xf2, 0x4e, 0x6b, 0x2f, 0xb5,
+	0x4a, 0xe9, 0x13, 0x46, 0xc9, 0x53, 0x0b, 0x66, 0x04, 0x66, 0x91, 0x69, 0x83, 0x1d, 0x91, 0xbd,
+	0x28, 0x7b, 0x3b, 0xf4, 0xe7, 0x39, 0xa4, 0x0f, 0x44, 0xbe, 0x67, 0x7b, 0x64, 0x27, 0x91, 0xdc,
+	0x0e, 0x1e, 0x84, 0x09, 0x3b, 0x26, 0xfb, 0x21, 0x7c, 0x21, 0xdc, 0x40, 0x17, 0xce, 0x47, 0x52,
+	0x44, 0x43, 0xc7, 0x53, 0xba, 0xc9, 0xde, 0x90, 0x56, 0xc0, 0x6a, 0x79, 0xcf, 0x13, 0x07, 0xc6,
+	0x27, 0xe2, 0x52, 0xa8, 0x34, 0xd0, 0x3c, 0xf2, 0x9e, 0xa2, 0xc6, 0xaa, 0xf2, 0x91, 0xb0, 0x05,
+	0x97, 0x1e, 0x92, 0x04, 0x22, 0x47, 0x9f, 0xe1, 0xdb, 0x3f, 0xd3, 0xa0, 0x5b, 0x8c, 0x91, 0x2d,
+	0xc9, 0xdf, 0x62, 0xa6, 0xdc, 0xe8, 0xbe, 0x84, 0x8c, 0x6e, 0xb3, 0x33, 0x72, 0xbc, 0xf8, 0xe3,
+	0x0d, 0xf0, 0x18, 0xf5, 0xeb, 0x76, 0xfa, 0x44, 0x48, 0xa0, 0x94, 0x1d, 0x90, 0xdd, 0x50, 0x02,
+	0x76, 0x76, 0x85, 0xd2, 0x1d, 0x76, 0x4a, 0x0e, 0x39, 0x9a, 0xe3, 0xbc, 0xc1, 0xee, 0x3c, 0x78,
+	0x1b, 0x63, 0x2f, 0xc8, 0x51, 0xc8, 0x3d, 0xe0, 0xd6, 0x2b, 0x70, 0x17, 0xda, 0x0c, 0xbd, 0xee,
+	0x9f, 0x43, 0xe4, 0x2c, 0xdd, 0xfd, 0x32, 0x9c, 0x81, 0x1b, 0xe8, 0xd8, 0xd2, 0xe7, 0x68, 0x64,
+	0x03, 0x17, 0x46, 0xd2, 0x3d, 0x4c, 0xd7, 0x84, 0x32, 0x5d, 0x58, 0xf0, 0xce, 0xf0, 0x68, 0x28,
+	0x54, 0x4a, 0xf7, 0xd1, 0xc0, 0x06, 0x35, 0x5c, 0xc5, 0x3a, 0xf3, 0xaa, 0xc8, 0xe8, 0x01, 0x1a,
+	0x18, 0x10, 0x0b, 0x32, 0xf1, 0x8e, 0x9b, 0x14, 0x9c, 0xa5, 0x87, 0xec, 0x84, 0x1c, 0x84, 0x38,
+	0x8e, 0x47, 0x0a, 0xae, 0x30, 0x72, 0x81, 0xd2, 0x23, 0xf6, 0x92, 0x9c, 0x04, 0x70, 0x04, 0xc6,
+	0xa2, 0xf3, 0xf8, 0x38, 0x5b, 0xe4, 0xb9, 0x36, 0x0e, 0x62, 0x7a, 0xdc, 0xd8, 0xb3, 0xb4, 0x6e,
+	0xc0, 0x4d, 0xec, 0x23, 0x1d, 0x43, 0xbc, 0xb0, 0x07, 0xab, 0x3e, 0xc1, 0xec, 0xcb, 0x21, 0x0d,
+	0xfc, 0xba, 0xab, 0xa7, 0xec, 0x35, 0x79, 0x95, 0x70, 0x21, 0x21, 0xf6, 0x4e, 0xa3, 0xad, 0x8d,
+	0xa7, 0x5e, 0xa8, 0x40, 0xa5, 0x2f, 0x6a, 0x56, 0x7d, 0x8b, 0x47, 0x11, 0x58, 0x0b, 0x4d, 0xab,
+	0x0c, 0x58, 0x5d, 0x98, 0x08, 0x2c, 0x3d, 0x6b, 0xc6, 0x08, 0x2e, 0x1d, 0x18, 0xc5, 0xa5, 0x3f,
+	0xb7, 0x3e, 0xe2, 0x52, 0xd2, 0x97, 0x5f, 0xc0, 0x92, 0x05, 0xf6, 0x0a, 0xa7, 0x01, 0xab, 0x09,
+	0x53, 0x8d, 0x2f, 0xa7, 0x3f, 0x60, 0x1f, 0x83, 0xfb, 0x31, 0x77, 0xfc, 0x33, 0xa4, 0x85, 0x4a,
+	0x01, 0xc9, 0x8d, 0xc6, 0x62, 0x70, 0x14, 0xc2, 0x5c, 0xfd, 0x88, 0xdf, 0x54, 0xc0, 0xf0, 0x82,
+	0xcd, 0x50, 0xfe, 0xf5, 0x83, 0xef, 0x53, 0xe5, 0x85, 0xa3, 0x3f, 0xa1, 0xfa, 0x7f, 0x67, 0xad,
+	0xee, 0xc7, 0x1b, 0x9c, 0xc2, 0xa0, 0x10, 0x69, 0x65, 0x9d, 0xe1, 0x42, 0x39, 0xeb, 0x47, 0x42,
+	0x4b, 0x1c, 0x6c, 0xfa, 0x73, 0xff, 0xd3, 0x1a, 0x69, 0xfd, 0x51, 0xde, 0xb6, 0xbf, 0xbe, 0x71,
+	0xfa, 0xdb, 0xcd, 0xf6, 0xc8, 0x71, 0xc9, 0xe4, 0x6b, 0xef, 0xe2, 0xc5, 0x95, 0x69, 0xf9, 0x7e,
+	0x3c, 0x9b, 0xb6, 0xcb, 0xf9, 0xb4, 0x33, 0xbd, 0x9e, 0xd5, 0x2b, 0x68, 0xb9, 0xe6, 0xee, 0x6e,
+	0xaa, 0xff, 0xdb, 0x7a, 0xbf, 0x86, 0x9f, 0xbf, 0xd7, 0x1f, 0xa5, 0x9c, 0x7f, 0x5c, 0x3f, 0x4b,
+	0x83, 0x18, 0x9f, 0x54, 0xed, 0x70, 0xc4, 0xd3, 0xa8, 0xdb, 0xae, 0x53, 0x56, 0xff, 0x2c, 0x09,
+	0x57, 0x7c, 0x52, 0x5d, 0xad, 0x08, 0x57, 0xa3, 0xee, 0x55, 0x20, 0x7c, 0x5a, 0x6f, 0x85, 0x68,
+	0xaf, 0xc7, 0x27, 0x55, 0xaf, 0xb7, 0xa2, 0xf4, 0x7a, 0xa3, 0x6e, 0xaf, 0x17, 0x48, 0xbf, 0x3f,
+	0xae, 0xab, 0xeb, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xeb, 0x84, 0xf4, 0x92, 0x05, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/internal_error.pb.go b/googleapis/ads/googleads/v3/errors/internal_error.pb.go
new file mode 100644
index 0000000..d06fab5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/internal_error.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/internal_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible internal errors.
+type InternalErrorEnum_InternalError int32
+
+const (
+	// Enum unspecified.
+	InternalErrorEnum_UNSPECIFIED InternalErrorEnum_InternalError = 0
+	// The received error code is not known in this version.
+	InternalErrorEnum_UNKNOWN InternalErrorEnum_InternalError = 1
+	// Google Ads API encountered unexpected internal error.
+	InternalErrorEnum_INTERNAL_ERROR InternalErrorEnum_InternalError = 2
+	// The intended error code doesn't exist in specified API version. It will
+	// be released in a future API version.
+	InternalErrorEnum_ERROR_CODE_NOT_PUBLISHED InternalErrorEnum_InternalError = 3
+	// Google Ads API encountered an unexpected transient error. The user
+	// should retry their request in these cases.
+	InternalErrorEnum_TRANSIENT_ERROR InternalErrorEnum_InternalError = 4
+	// The request took longer than a deadline.
+	InternalErrorEnum_DEADLINE_EXCEEDED InternalErrorEnum_InternalError = 5
+)
+
+var InternalErrorEnum_InternalError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INTERNAL_ERROR",
+	3: "ERROR_CODE_NOT_PUBLISHED",
+	4: "TRANSIENT_ERROR",
+	5: "DEADLINE_EXCEEDED",
+}
+
+var InternalErrorEnum_InternalError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"INTERNAL_ERROR":           2,
+	"ERROR_CODE_NOT_PUBLISHED": 3,
+	"TRANSIENT_ERROR":          4,
+	"DEADLINE_EXCEEDED":        5,
+}
+
+func (x InternalErrorEnum_InternalError) String() string {
+	return proto.EnumName(InternalErrorEnum_InternalError_name, int32(x))
+}
+
+func (InternalErrorEnum_InternalError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a22b88d5b68074b5, []int{0, 0}
+}
+
+// Container for enum describing possible internal errors.
+type InternalErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InternalErrorEnum) Reset()         { *m = InternalErrorEnum{} }
+func (m *InternalErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*InternalErrorEnum) ProtoMessage()    {}
+func (*InternalErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a22b88d5b68074b5, []int{0}
+}
+
+func (m *InternalErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InternalErrorEnum.Unmarshal(m, b)
+}
+func (m *InternalErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InternalErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *InternalErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InternalErrorEnum.Merge(m, src)
+}
+func (m *InternalErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_InternalErrorEnum.Size(m)
+}
+func (m *InternalErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InternalErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InternalErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.InternalErrorEnum_InternalError", InternalErrorEnum_InternalError_name, InternalErrorEnum_InternalError_value)
+	proto.RegisterType((*InternalErrorEnum)(nil), "google.ads.googleads.v3.errors.InternalErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/internal_error.proto", fileDescriptor_a22b88d5b68074b5)
+}
+
+var fileDescriptor_a22b88d5b68074b5 = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x14, 0xc7, 0xbf, 0x76, 0x9f, 0x0a, 0x19, 0xba, 0x2e, 0x22, 0x88, 0x8c, 0x5d, 0xf4, 0x01, 0xd2,
+	0x8b, 0xde, 0xc5, 0xab, 0x6c, 0x89, 0xb3, 0x38, 0xd2, 0xd2, 0x75, 0x53, 0xa4, 0x50, 0xaa, 0x2d,
+	0xa5, 0xb0, 0x25, 0xa3, 0xa9, 0x7b, 0x09, 0x9f, 0x42, 0x2f, 0x7d, 0x14, 0x1f, 0x45, 0xf0, 0x1d,
+	0xa4, 0xcd, 0x36, 0xd8, 0x85, 0x5e, 0xf5, 0xdf, 0xc3, 0xef, 0x77, 0x72, 0xce, 0x01, 0x6e, 0x21,
+	0x65, 0xb1, 0xcc, 0x9d, 0x34, 0x53, 0x8e, 0x8e, 0x4d, 0xda, 0xb8, 0x4e, 0x5e, 0x55, 0xb2, 0x52,
+	0x4e, 0x29, 0xea, 0xbc, 0x12, 0xe9, 0x32, 0x69, 0xff, 0xd1, 0xba, 0x92, 0xb5, 0x84, 0x43, 0x4d,
+	0xa2, 0x34, 0x53, 0x68, 0x2f, 0xa1, 0x8d, 0x8b, 0xb4, 0x74, 0x35, 0xd8, 0x35, 0x5d, 0x97, 0x4e,
+	0x2a, 0x84, 0xac, 0xd3, 0xba, 0x94, 0x42, 0x69, 0xdb, 0x7e, 0x33, 0x40, 0xdf, 0xdb, 0xb6, 0x65,
+	0x8d, 0xc0, 0xc4, 0xcb, 0xca, 0x7e, 0x35, 0xc0, 0xe9, 0x41, 0x15, 0xf6, 0x40, 0x77, 0xce, 0x67,
+	0x01, 0x1b, 0x7b, 0x37, 0x1e, 0xa3, 0xd6, 0x3f, 0xd8, 0x05, 0x27, 0x73, 0x7e, 0xc7, 0xfd, 0x7b,
+	0x6e, 0x19, 0x10, 0x82, 0x33, 0x8f, 0x47, 0x2c, 0xe4, 0x64, 0x9a, 0xb0, 0x30, 0xf4, 0x43, 0xcb,
+	0x84, 0x03, 0x70, 0xd9, 0xc6, 0x64, 0xec, 0x53, 0x96, 0x70, 0x3f, 0x4a, 0x82, 0xf9, 0x68, 0xea,
+	0xcd, 0x6e, 0x19, 0xb5, 0x3a, 0xf0, 0x1c, 0xf4, 0xa2, 0x90, 0xf0, 0x99, 0xc7, 0x78, 0xb4, 0x55,
+	0xfe, 0xc3, 0x0b, 0xd0, 0xa7, 0x8c, 0xd0, 0xa9, 0xc7, 0x59, 0xc2, 0x1e, 0xc6, 0x8c, 0x51, 0x46,
+	0xad, 0xa3, 0xd1, 0xb7, 0x01, 0xec, 0x67, 0xb9, 0x42, 0x7f, 0x2f, 0x3a, 0x82, 0x07, 0x13, 0x07,
+	0xcd, 0x7a, 0x81, 0xf1, 0x48, 0xb7, 0x56, 0x21, 0x97, 0xa9, 0x28, 0x90, 0xac, 0x0a, 0xa7, 0xc8,
+	0x45, 0xbb, 0xfc, 0xee, 0xc6, 0xeb, 0x52, 0xfd, 0x76, 0xf2, 0x6b, 0xfd, 0x79, 0x37, 0x3b, 0x13,
+	0x42, 0x3e, 0xcc, 0xe1, 0x44, 0x37, 0x23, 0x99, 0x42, 0x3a, 0x36, 0x69, 0xe1, 0xa2, 0xf6, 0x49,
+	0xf5, 0xb9, 0x03, 0x62, 0x92, 0xa9, 0x78, 0x0f, 0xc4, 0x0b, 0x37, 0xd6, 0xc0, 0x97, 0x69, 0xeb,
+	0x2a, 0xc6, 0x24, 0x53, 0x18, 0xef, 0x11, 0x8c, 0x17, 0x2e, 0xc6, 0x1a, 0x7a, 0x3a, 0x6e, 0xa7,
+	0x73, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xe4, 0x1f, 0x5f, 0x0f, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/invoice_error.pb.go b/googleapis/ads/googleads/v3/errors/invoice_error.pb.go
new file mode 100644
index 0000000..dcdff9a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/invoice_error.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/invoice_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible invoice errors.
+type InvoiceErrorEnum_InvoiceError int32
+
+const (
+	// Enum unspecified.
+	InvoiceErrorEnum_UNSPECIFIED InvoiceErrorEnum_InvoiceError = 0
+	// The received error code is not known in this version.
+	InvoiceErrorEnum_UNKNOWN InvoiceErrorEnum_InvoiceError = 1
+	// Cannot request invoices issued before 2019-01-01.
+	InvoiceErrorEnum_YEAR_MONTH_TOO_OLD InvoiceErrorEnum_InvoiceError = 2
+	// Cannot request invoices for customer who doesn't receive invoices.
+	InvoiceErrorEnum_NOT_INVOICED_CUSTOMER InvoiceErrorEnum_InvoiceError = 3
+)
+
+var InvoiceErrorEnum_InvoiceError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "YEAR_MONTH_TOO_OLD",
+	3: "NOT_INVOICED_CUSTOMER",
+}
+
+var InvoiceErrorEnum_InvoiceError_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"YEAR_MONTH_TOO_OLD":    2,
+	"NOT_INVOICED_CUSTOMER": 3,
+}
+
+func (x InvoiceErrorEnum_InvoiceError) String() string {
+	return proto.EnumName(InvoiceErrorEnum_InvoiceError_name, int32(x))
+}
+
+func (InvoiceErrorEnum_InvoiceError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_971f5ea52cc1e028, []int{0, 0}
+}
+
+// Container for enum describing possible invoice errors.
+type InvoiceErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InvoiceErrorEnum) Reset()         { *m = InvoiceErrorEnum{} }
+func (m *InvoiceErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*InvoiceErrorEnum) ProtoMessage()    {}
+func (*InvoiceErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_971f5ea52cc1e028, []int{0}
+}
+
+func (m *InvoiceErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InvoiceErrorEnum.Unmarshal(m, b)
+}
+func (m *InvoiceErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InvoiceErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *InvoiceErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InvoiceErrorEnum.Merge(m, src)
+}
+func (m *InvoiceErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_InvoiceErrorEnum.Size(m)
+}
+func (m *InvoiceErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InvoiceErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InvoiceErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.InvoiceErrorEnum_InvoiceError", InvoiceErrorEnum_InvoiceError_name, InvoiceErrorEnum_InvoiceError_value)
+	proto.RegisterType((*InvoiceErrorEnum)(nil), "google.ads.googleads.v3.errors.InvoiceErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/invoice_error.proto", fileDescriptor_971f5ea52cc1e028)
+}
+
+var fileDescriptor_971f5ea52cc1e028 = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x1c, 0xc5, 0xbf, 0x75, 0xf0, 0x09, 0x99, 0x60, 0x2d, 0x28, 0x28, 0xb2, 0x8b, 0x3e, 0x40, 0x02,
+	0xe6, 0x2e, 0x5e, 0x65, 0x6b, 0x9c, 0x45, 0x97, 0x8c, 0xad, 0xab, 0x28, 0x85, 0x50, 0xd7, 0x12,
+	0x0a, 0x5b, 0x32, 0x9a, 0xb9, 0x07, 0xf2, 0xd2, 0x47, 0xf1, 0x51, 0xc4, 0x87, 0x90, 0x36, 0x6e,
+	0xec, 0x46, 0xaf, 0x72, 0xf2, 0xe7, 0x77, 0x4e, 0x4e, 0xfe, 0xe0, 0x5a, 0x19, 0xa3, 0x96, 0x25,
+	0xca, 0x0b, 0x8b, 0x9c, 0x6c, 0xd4, 0x16, 0xa3, 0xb2, 0xae, 0x4d, 0x6d, 0x51, 0xa5, 0xb7, 0xa6,
+	0x5a, 0x94, 0xb2, 0xbd, 0xc2, 0x75, 0x6d, 0x36, 0x26, 0xe8, 0x3b, 0x10, 0xe6, 0x85, 0x85, 0x7b,
+	0x0f, 0xdc, 0x62, 0xe8, 0x3c, 0x97, 0x57, 0xbb, 0xcc, 0x75, 0x85, 0x72, 0xad, 0xcd, 0x26, 0xdf,
+	0x54, 0x46, 0x5b, 0xe7, 0x0e, 0x2d, 0xf0, 0x63, 0x17, 0xca, 0x1a, 0x9c, 0xe9, 0xd7, 0x55, 0x28,
+	0xc1, 0xf1, 0xe1, 0x2c, 0x38, 0x01, 0xbd, 0x39, 0x9f, 0x4d, 0xd8, 0x30, 0xbe, 0x8d, 0x59, 0xe4,
+	0xff, 0x0b, 0x7a, 0xe0, 0x68, 0xce, 0xef, 0xb9, 0x78, 0xe4, 0x7e, 0x27, 0x38, 0x07, 0xc1, 0x13,
+	0xa3, 0x53, 0x39, 0x16, 0x3c, 0xb9, 0x93, 0x89, 0x10, 0x52, 0x3c, 0x44, 0xbe, 0x17, 0x5c, 0x80,
+	0x33, 0x2e, 0x12, 0x19, 0xf3, 0x54, 0xc4, 0x43, 0x16, 0xc9, 0xe1, 0x7c, 0x96, 0x88, 0x31, 0x9b,
+	0xfa, 0xdd, 0xc1, 0x57, 0x07, 0x84, 0x0b, 0xb3, 0x82, 0x7f, 0x37, 0x1f, 0x9c, 0x1e, 0xb6, 0x98,
+	0x34, 0x75, 0x27, 0x9d, 0xe7, 0xe8, 0xc7, 0xa4, 0xcc, 0x32, 0xd7, 0x0a, 0x9a, 0x5a, 0x21, 0x55,
+	0xea, 0xf6, 0x33, 0xbb, 0x95, 0xad, 0x2b, 0xfb, 0xdb, 0x06, 0x6f, 0xdc, 0xf1, 0xe6, 0x75, 0x47,
+	0x94, 0xbe, 0x7b, 0xfd, 0x91, 0x0b, 0xa3, 0x85, 0x85, 0x4e, 0x36, 0x2a, 0xc5, 0xb0, 0x7d, 0xd2,
+	0x7e, 0xec, 0x80, 0x8c, 0x16, 0x36, 0xdb, 0x03, 0x59, 0x8a, 0x33, 0x07, 0x7c, 0x7a, 0xa1, 0x9b,
+	0x12, 0x42, 0x0b, 0x4b, 0xc8, 0x1e, 0x21, 0x24, 0xc5, 0x84, 0x38, 0xe8, 0xe5, 0x7f, 0xdb, 0x0e,
+	0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x0d, 0x0d, 0x7e, 0xde, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_ad_group_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_ad_group_error.pb.go
new file mode 100644
index 0000000..725b878
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_ad_group_error.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_ad_group_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan ad group.
+type KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanAdGroupErrorEnum_UNSPECIFIED KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 0
+	// The received error code is not known in this version.
+	KeywordPlanAdGroupErrorEnum_UNKNOWN KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 1
+	// The keyword plan ad group name is missing, empty, longer than allowed
+	// limit or contains invalid chars.
+	KeywordPlanAdGroupErrorEnum_INVALID_NAME KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 2
+	// The keyword plan ad group name is duplicate to an existing keyword plan
+	// AdGroup name or other keyword plan AdGroup name in the request.
+	KeywordPlanAdGroupErrorEnum_DUPLICATE_NAME KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 3
+)
+
+var KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_NAME",
+	3: "DUPLICATE_NAME",
+}
+
+var KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"INVALID_NAME":   2,
+	"DUPLICATE_NAME": 3,
+}
+
+func (x KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError) String() string {
+	return proto.EnumName(KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name, int32(x))
+}
+
+func (KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ac04c755a98bdfee, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// ad group.
+type KeywordPlanAdGroupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupErrorEnum) Reset()         { *m = KeywordPlanAdGroupErrorEnum{} }
+func (m *KeywordPlanAdGroupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanAdGroupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ac04c755a98bdfee, []int{0}
+}
+
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Size(m)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError", KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name, KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_value)
+	proto.RegisterType((*KeywordPlanAdGroupErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanAdGroupErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_ad_group_error.proto", fileDescriptor_ac04c755a98bdfee)
+}
+
+var fileDescriptor_ac04c755a98bdfee = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcd, 0x4a, 0xf3, 0x40,
+	0x14, 0xfd, 0x9a, 0xc2, 0x27, 0x4c, 0x45, 0x43, 0x36, 0x82, 0x96, 0x2e, 0xf2, 0x00, 0x93, 0x45,
+	0x76, 0xe3, 0xc6, 0x69, 0x13, 0x4b, 0x68, 0x1d, 0x03, 0xda, 0x08, 0x12, 0x09, 0xa3, 0x13, 0x86,
+	0x62, 0x3a, 0x13, 0x66, 0xda, 0x8a, 0xe0, 0xd3, 0xb8, 0xf4, 0x51, 0x7c, 0x14, 0x5f, 0xc0, 0xad,
+	0x24, 0xd7, 0x76, 0x17, 0x57, 0x73, 0x98, 0x7b, 0x7e, 0xee, 0xb9, 0xe8, 0x42, 0x6a, 0x2d, 0xab,
+	0x32, 0xe0, 0xc2, 0x06, 0x00, 0x1b, 0xb4, 0x0d, 0x83, 0xd2, 0x18, 0x6d, 0x6c, 0xf0, 0x5c, 0xbe,
+	0xbe, 0x68, 0x23, 0x8a, 0xba, 0xe2, 0xaa, 0xe0, 0xa2, 0x90, 0x46, 0x6f, 0xea, 0xa2, 0x1d, 0xe2,
+	0xda, 0xe8, 0xb5, 0xf6, 0x46, 0x20, 0xc3, 0x5c, 0x58, 0xbc, 0x77, 0xc0, 0xdb, 0x10, 0x83, 0xc3,
+	0xe9, 0x70, 0x97, 0x50, 0x2f, 0x03, 0xae, 0x94, 0x5e, 0xf3, 0xf5, 0x52, 0x2b, 0x0b, 0x6a, 0xff,
+	0x0d, 0x9d, 0xcd, 0x20, 0x22, 0xad, 0xb8, 0xa2, 0x62, 0xda, 0xf8, 0xc7, 0x8d, 0x32, 0x56, 0x9b,
+	0x95, 0xff, 0x80, 0x4e, 0x3a, 0xc6, 0xde, 0x31, 0x1a, 0x2c, 0xd8, 0x4d, 0x1a, 0x4f, 0x92, 0xcb,
+	0x24, 0x8e, 0xdc, 0x7f, 0xde, 0x00, 0x1d, 0x2c, 0xd8, 0x8c, 0x5d, 0xdf, 0x31, 0xb7, 0xe7, 0xb9,
+	0xe8, 0x30, 0x61, 0x19, 0x9d, 0x27, 0x51, 0xc1, 0xe8, 0x55, 0xec, 0x3a, 0x9e, 0x87, 0x8e, 0xa2,
+	0x45, 0x3a, 0x4f, 0x26, 0xf4, 0x36, 0x86, 0xbf, 0xfe, 0xf8, 0xbb, 0x87, 0xfc, 0x27, 0xbd, 0xc2,
+	0x7f, 0x57, 0x18, 0x0f, 0x3b, 0x76, 0x48, 0x9b, 0x0a, 0x69, 0xef, 0x3e, 0xfa, 0xd5, 0x4b, 0x5d,
+	0x71, 0x25, 0xb1, 0x36, 0x32, 0x90, 0xa5, 0x6a, 0x0b, 0xee, 0x8e, 0x5a, 0x2f, 0x6d, 0xd7, 0x8d,
+	0xcf, 0xe1, 0x79, 0x77, 0xfa, 0x53, 0x4a, 0x3f, 0x9c, 0xd1, 0x14, 0xcc, 0xa8, 0xb0, 0x18, 0x60,
+	0x83, 0xb2, 0x10, 0xb7, 0x91, 0xf6, 0x73, 0x47, 0xc8, 0xa9, 0xb0, 0xf9, 0x9e, 0x90, 0x67, 0x61,
+	0x0e, 0x84, 0x2f, 0xc7, 0x87, 0x5f, 0x42, 0xa8, 0xb0, 0x84, 0xec, 0x29, 0x84, 0x64, 0x21, 0x21,
+	0x40, 0x7a, 0xfc, 0xdf, 0x6e, 0x17, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x36, 0x45, 0x78, 0xc9,
+	0x00, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_campaign_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_campaign_error.pb.go
new file mode 100644
index 0000000..612a5b1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_campaign_error.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_campaign_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan campaign.
+type KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanCampaignErrorEnum_UNSPECIFIED KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 0
+	// The received error code is not known in this version.
+	KeywordPlanCampaignErrorEnum_UNKNOWN KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 1
+	// A keyword plan campaign name is missing, empty, longer than allowed limit
+	// or contains invalid chars.
+	KeywordPlanCampaignErrorEnum_INVALID_NAME KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 2
+	// A keyword plan campaign contains one or more untargetable languages.
+	KeywordPlanCampaignErrorEnum_INVALID_LANGUAGES KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 3
+	// A keyword plan campaign contains one or more invalid geo targets.
+	KeywordPlanCampaignErrorEnum_INVALID_GEOS KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 4
+	// The keyword plan campaign name is duplicate to an existing keyword plan
+	// campaign name or other keyword plan campaign name in the request.
+	KeywordPlanCampaignErrorEnum_DUPLICATE_NAME KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 5
+	// The number of geo targets in the keyword plan campaign exceeds limits.
+	KeywordPlanCampaignErrorEnum_MAX_GEOS_EXCEEDED KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 6
+)
+
+var KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_NAME",
+	3: "INVALID_LANGUAGES",
+	4: "INVALID_GEOS",
+	5: "DUPLICATE_NAME",
+	6: "MAX_GEOS_EXCEEDED",
+}
+
+var KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"INVALID_NAME":      2,
+	"INVALID_LANGUAGES": 3,
+	"INVALID_GEOS":      4,
+	"DUPLICATE_NAME":    5,
+	"MAX_GEOS_EXCEEDED": 6,
+}
+
+func (x KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError) String() string {
+	return proto.EnumName(KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name, int32(x))
+}
+
+func (KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_919a79ad2f4c50d2, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// campaign.
+type KeywordPlanCampaignErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanCampaignErrorEnum) Reset()         { *m = KeywordPlanCampaignErrorEnum{} }
+func (m *KeywordPlanCampaignErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanCampaignErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_919a79ad2f4c50d2, []int{0}
+}
+
+func (m *KeywordPlanCampaignErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Size(m)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError", KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name, KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_value)
+	proto.RegisterType((*KeywordPlanCampaignErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanCampaignErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_campaign_error.proto", fileDescriptor_919a79ad2f4c50d2)
+}
+
+var fileDescriptor_919a79ad2f4c50d2 = []byte{
+	// 366 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4e, 0xab, 0x40,
+	0x18, 0x85, 0x2f, 0xf4, 0xde, 0xde, 0x64, 0x7a, 0x73, 0x45, 0x12, 0x13, 0x63, 0x6a, 0x17, 0x3c,
+	0xc0, 0xb0, 0x60, 0x37, 0x6e, 0x9c, 0xc2, 0x48, 0x48, 0x5b, 0x4a, 0x52, 0xc1, 0xc6, 0x90, 0x90,
+	0xb1, 0x10, 0x42, 0xa4, 0x33, 0x84, 0xa9, 0x35, 0xbe, 0x8c, 0x0b, 0x97, 0xbe, 0x84, 0x7b, 0x1f,
+	0xc5, 0x27, 0x70, 0x69, 0x60, 0x4a, 0xe3, 0xa6, 0xae, 0x38, 0xf9, 0xf9, 0xce, 0x39, 0xf0, 0xff,
+	0xe0, 0x32, 0xe7, 0x3c, 0x2f, 0x33, 0x93, 0xa6, 0xc2, 0x94, 0xb2, 0x51, 0x5b, 0xcb, 0xcc, 0xea,
+	0x9a, 0xd7, 0xc2, 0xbc, 0xcf, 0x9e, 0x1e, 0x79, 0x9d, 0x26, 0x55, 0x49, 0x59, 0xb2, 0xa2, 0xeb,
+	0x8a, 0x16, 0x39, 0x4b, 0xda, 0x97, 0xb0, 0xaa, 0xf9, 0x86, 0xeb, 0x23, 0x69, 0x83, 0x34, 0x15,
+	0x70, 0x9f, 0x00, 0xb7, 0x16, 0x94, 0x09, 0x67, 0xc3, 0xae, 0xa1, 0x2a, 0x4c, 0xca, 0x18, 0xdf,
+	0xd0, 0x4d, 0xc1, 0x99, 0x90, 0x6e, 0xe3, 0x4d, 0x01, 0xc3, 0x89, 0xec, 0x08, 0x4a, 0xca, 0xec,
+	0x5d, 0x03, 0x69, 0xbc, 0x84, 0x3d, 0xac, 0x8d, 0x67, 0x05, 0x9c, 0x1e, 0x02, 0xf4, 0x23, 0x30,
+	0x08, 0xfd, 0x45, 0x40, 0x6c, 0xef, 0xca, 0x23, 0x8e, 0xf6, 0x4b, 0x1f, 0x80, 0xbf, 0xa1, 0x3f,
+	0xf1, 0xe7, 0x37, 0xbe, 0xa6, 0xe8, 0x1a, 0xf8, 0xe7, 0xf9, 0x11, 0x9e, 0x7a, 0x4e, 0xe2, 0xe3,
+	0x19, 0xd1, 0x54, 0xfd, 0x04, 0x1c, 0x77, 0x93, 0x29, 0xf6, 0xdd, 0x10, 0xbb, 0x64, 0xa1, 0xf5,
+	0xbe, 0x83, 0x2e, 0x99, 0x2f, 0xb4, 0xdf, 0xba, 0x0e, 0xfe, 0x3b, 0x61, 0x30, 0xf5, 0x6c, 0x7c,
+	0x4d, 0xa4, 0xf9, 0x4f, 0x63, 0x9e, 0xe1, 0x65, 0x4b, 0x24, 0x64, 0x69, 0x13, 0xe2, 0x10, 0x47,
+	0xeb, 0x8f, 0x3f, 0x15, 0x60, 0xac, 0xf8, 0x1a, 0xfe, 0xbc, 0x86, 0xf1, 0xf9, 0xa1, 0x9f, 0x08,
+	0x9a, 0x3d, 0x04, 0xca, 0xad, 0xb3, 0x0b, 0xc8, 0x79, 0x49, 0x59, 0x0e, 0x79, 0x9d, 0x9b, 0x79,
+	0xc6, 0xda, 0x2d, 0x75, 0x97, 0xa9, 0x0a, 0x71, 0xe8, 0x50, 0x17, 0xf2, 0xf1, 0xa2, 0xf6, 0x5c,
+	0x8c, 0x5f, 0xd5, 0x91, 0x2b, 0xc3, 0x70, 0x2a, 0xa0, 0x94, 0x8d, 0x8a, 0x2c, 0xd8, 0x56, 0x8a,
+	0xf7, 0x0e, 0x88, 0x71, 0x2a, 0xe2, 0x3d, 0x10, 0x47, 0x56, 0x2c, 0x81, 0x0f, 0xd5, 0x90, 0x53,
+	0x84, 0x70, 0x2a, 0x10, 0xda, 0x23, 0x08, 0x45, 0x16, 0x42, 0x12, 0xba, 0xeb, 0xb7, 0x5f, 0x67,
+	0x7d, 0x05, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xd2, 0x49, 0x66, 0x45, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_error.pb.go
new file mode 100644
index 0000000..5195401
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_error.pb.go
@@ -0,0 +1,187 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan.
+type KeywordPlanErrorEnum_KeywordPlanError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanErrorEnum_UNSPECIFIED KeywordPlanErrorEnum_KeywordPlanError = 0
+	// The received error code is not known in this version.
+	KeywordPlanErrorEnum_UNKNOWN KeywordPlanErrorEnum_KeywordPlanError = 1
+	// The plan's bid multiplier value is outside the valid range.
+	KeywordPlanErrorEnum_BID_MULTIPLIER_OUT_OF_RANGE KeywordPlanErrorEnum_KeywordPlanError = 2
+	// The plan's bid value is too high.
+	KeywordPlanErrorEnum_BID_TOO_HIGH KeywordPlanErrorEnum_KeywordPlanError = 3
+	// The plan's bid value is too low.
+	KeywordPlanErrorEnum_BID_TOO_LOW KeywordPlanErrorEnum_KeywordPlanError = 4
+	// The plan's cpc bid is not a multiple of the minimum billable unit.
+	KeywordPlanErrorEnum_BID_TOO_MANY_FRACTIONAL_DIGITS KeywordPlanErrorEnum_KeywordPlanError = 5
+	// The plan's daily budget value is too low.
+	KeywordPlanErrorEnum_DAILY_BUDGET_TOO_LOW KeywordPlanErrorEnum_KeywordPlanError = 6
+	// The plan's daily budget is not a multiple of the minimum billable unit.
+	KeywordPlanErrorEnum_DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS KeywordPlanErrorEnum_KeywordPlanError = 7
+	// The input has an invalid value.
+	KeywordPlanErrorEnum_INVALID_VALUE KeywordPlanErrorEnum_KeywordPlanError = 8
+	// The plan has no keyword.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_HAS_NO_KEYWORDS KeywordPlanErrorEnum_KeywordPlanError = 9
+	// The plan is not enabled and API cannot provide mutation, forecast or
+	// stats.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_NOT_ENABLED KeywordPlanErrorEnum_KeywordPlanError = 10
+	// The requested plan cannot be found for providing forecast or stats.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_NOT_FOUND KeywordPlanErrorEnum_KeywordPlanError = 11
+	// The plan is missing a cpc bid.
+	KeywordPlanErrorEnum_MISSING_BID KeywordPlanErrorEnum_KeywordPlanError = 13
+	// The plan is missing required forecast_period field.
+	KeywordPlanErrorEnum_MISSING_FORECAST_PERIOD KeywordPlanErrorEnum_KeywordPlanError = 14
+	// The plan's forecast_period has invalid forecast date range.
+	KeywordPlanErrorEnum_INVALID_FORECAST_DATE_RANGE KeywordPlanErrorEnum_KeywordPlanError = 15
+	// The plan's name is invalid.
+	KeywordPlanErrorEnum_INVALID_NAME KeywordPlanErrorEnum_KeywordPlanError = 16
+)
+
+var KeywordPlanErrorEnum_KeywordPlanError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BID_MULTIPLIER_OUT_OF_RANGE",
+	3:  "BID_TOO_HIGH",
+	4:  "BID_TOO_LOW",
+	5:  "BID_TOO_MANY_FRACTIONAL_DIGITS",
+	6:  "DAILY_BUDGET_TOO_LOW",
+	7:  "DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS",
+	8:  "INVALID_VALUE",
+	9:  "KEYWORD_PLAN_HAS_NO_KEYWORDS",
+	10: "KEYWORD_PLAN_NOT_ENABLED",
+	11: "KEYWORD_PLAN_NOT_FOUND",
+	13: "MISSING_BID",
+	14: "MISSING_FORECAST_PERIOD",
+	15: "INVALID_FORECAST_DATE_RANGE",
+	16: "INVALID_NAME",
+}
+
+var KeywordPlanErrorEnum_KeywordPlanError_value = map[string]int32{
+	"UNSPECIFIED":                             0,
+	"UNKNOWN":                                 1,
+	"BID_MULTIPLIER_OUT_OF_RANGE":             2,
+	"BID_TOO_HIGH":                            3,
+	"BID_TOO_LOW":                             4,
+	"BID_TOO_MANY_FRACTIONAL_DIGITS":          5,
+	"DAILY_BUDGET_TOO_LOW":                    6,
+	"DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS": 7,
+	"INVALID_VALUE":                           8,
+	"KEYWORD_PLAN_HAS_NO_KEYWORDS":            9,
+	"KEYWORD_PLAN_NOT_ENABLED":                10,
+	"KEYWORD_PLAN_NOT_FOUND":                  11,
+	"MISSING_BID":                             13,
+	"MISSING_FORECAST_PERIOD":                 14,
+	"INVALID_FORECAST_DATE_RANGE":             15,
+	"INVALID_NAME":                            16,
+}
+
+func (x KeywordPlanErrorEnum_KeywordPlanError) String() string {
+	return proto.EnumName(KeywordPlanErrorEnum_KeywordPlanError_name, int32(x))
+}
+
+func (KeywordPlanErrorEnum_KeywordPlanError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_93fd9cdbc08c3d07, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// resource (keyword plan, keyword plan campaign, keyword plan ad group or
+// keyword plan keyword) or KeywordPlanService RPC.
+type KeywordPlanErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanErrorEnum) Reset()         { *m = KeywordPlanErrorEnum{} }
+func (m *KeywordPlanErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_93fd9cdbc08c3d07, []int{0}
+}
+
+func (m *KeywordPlanErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Size(m)
+}
+func (m *KeywordPlanErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanErrorEnum_KeywordPlanError", KeywordPlanErrorEnum_KeywordPlanError_name, KeywordPlanErrorEnum_KeywordPlanError_value)
+	proto.RegisterType((*KeywordPlanErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_error.proto", fileDescriptor_93fd9cdbc08c3d07)
+}
+
+var fileDescriptor_93fd9cdbc08c3d07 = []byte{
+	// 506 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x6f, 0xd3, 0x30,
+	0x18, 0xc6, 0x69, 0x0b, 0x1b, 0xb8, 0x8c, 0x19, 0x6b, 0xc0, 0xb4, 0x55, 0x05, 0xf5, 0xc2, 0x01,
+	0x29, 0x39, 0xe4, 0x80, 0x14, 0x4e, 0x4e, 0xed, 0xa6, 0x56, 0x53, 0x3b, 0xca, 0x9f, 0x56, 0x45,
+	0x95, 0xac, 0x40, 0xaa, 0xa8, 0xa2, 0x8b, 0xab, 0xa4, 0x0c, 0xf1, 0x75, 0x38, 0x72, 0xe1, 0x6b,
+	0x20, 0x3e, 0x0a, 0x27, 0x3e, 0x02, 0x4a, 0xdd, 0x44, 0x62, 0xd3, 0x38, 0xe5, 0xd5, 0xf3, 0xfe,
+	0x9e, 0x27, 0x8e, 0xf3, 0x80, 0xb7, 0x99, 0x52, 0xd9, 0x66, 0x65, 0x26, 0x69, 0x69, 0xea, 0xb1,
+	0x9a, 0xae, 0x2d, 0x73, 0x55, 0x14, 0xaa, 0x28, 0xcd, 0x4f, 0xab, 0xaf, 0x5f, 0x54, 0x91, 0xca,
+	0xed, 0x26, 0xc9, 0xe5, 0x5e, 0x33, 0xb6, 0x85, 0xda, 0x29, 0xd4, 0xd7, 0xb4, 0x91, 0xa4, 0xa5,
+	0xd1, 0x18, 0x8d, 0x6b, 0xcb, 0xd0, 0xc6, 0x8b, 0x5e, 0x1d, 0xbc, 0x5d, 0x9b, 0x49, 0x9e, 0xab,
+	0x5d, 0xb2, 0x5b, 0xab, 0xbc, 0xd4, 0xee, 0xc1, 0xcf, 0x0e, 0x38, 0x9b, 0xe8, 0x68, 0x7f, 0x93,
+	0xe4, 0xb4, 0xf2, 0xd0, 0xfc, 0xf3, 0xd5, 0xe0, 0x47, 0x07, 0xc0, 0x9b, 0x0b, 0x74, 0x0a, 0xba,
+	0x31, 0x0f, 0x7d, 0x3a, 0x64, 0x23, 0x46, 0x09, 0xbc, 0x87, 0xba, 0xe0, 0x38, 0xe6, 0x13, 0x2e,
+	0xe6, 0x1c, 0xb6, 0xd0, 0x4b, 0x70, 0xe9, 0x30, 0x22, 0xa7, 0xb1, 0x17, 0x31, 0xdf, 0x63, 0x34,
+	0x90, 0x22, 0x8e, 0xa4, 0x18, 0xc9, 0x00, 0x73, 0x97, 0xc2, 0x36, 0x82, 0xe0, 0x71, 0x05, 0x44,
+	0x42, 0xc8, 0x31, 0x73, 0xc7, 0xb0, 0x53, 0x05, 0xd6, 0x8a, 0x27, 0xe6, 0xf0, 0x3e, 0x1a, 0x80,
+	0x7e, 0x2d, 0x4c, 0x31, 0x5f, 0xc8, 0x51, 0x80, 0x87, 0x11, 0x13, 0x1c, 0x7b, 0x92, 0x30, 0x97,
+	0x45, 0x21, 0x7c, 0x80, 0xce, 0xc1, 0x19, 0xc1, 0xcc, 0x5b, 0x48, 0x27, 0x26, 0x2e, 0x8d, 0x1a,
+	0xf7, 0x11, 0x7a, 0x03, 0x5e, 0xdf, 0xda, 0xdc, 0x11, 0x73, 0x8c, 0x9e, 0x82, 0x13, 0xc6, 0x67,
+	0xd8, 0x63, 0x44, 0xce, 0xb0, 0x17, 0x53, 0xf8, 0x10, 0xbd, 0x02, 0xbd, 0x09, 0x5d, 0xcc, 0x45,
+	0x40, 0xa4, 0xef, 0x61, 0x2e, 0xc7, 0x38, 0x94, 0x5c, 0xc8, 0x83, 0x16, 0xc2, 0x47, 0xa8, 0x07,
+	0xce, 0xff, 0x21, 0xb8, 0x88, 0x24, 0xe5, 0xd8, 0xf1, 0x28, 0x81, 0x00, 0x5d, 0x80, 0xe7, 0xb7,
+	0xb6, 0x23, 0x11, 0x73, 0x02, 0xbb, 0xd5, 0xa7, 0x4e, 0x59, 0x18, 0x32, 0xee, 0x4a, 0x87, 0x11,
+	0x78, 0x82, 0x2e, 0xc1, 0x8b, 0x5a, 0x18, 0x89, 0x80, 0x0e, 0x71, 0x18, 0x49, 0x9f, 0x06, 0x4c,
+	0x10, 0xf8, 0xa4, 0xba, 0xcb, 0xfa, 0x70, 0xcd, 0x92, 0xe0, 0x88, 0x1e, 0xee, 0xf2, 0xb4, 0xba,
+	0xcb, 0x1a, 0xe0, 0x78, 0x4a, 0x21, 0x74, 0xfe, 0xb4, 0xc0, 0xe0, 0xa3, 0xba, 0x32, 0xfe, 0xdf,
+	0x07, 0xe7, 0xd9, 0xcd, 0xbf, 0xea, 0x57, 0x45, 0xf0, 0x5b, 0xef, 0xc9, 0xc1, 0x98, 0xa9, 0x4d,
+	0x92, 0x67, 0x86, 0x2a, 0x32, 0x33, 0x5b, 0xe5, 0xfb, 0x9a, 0xd4, 0x8d, 0xdc, 0xae, 0xcb, 0xbb,
+	0x0a, 0xfa, 0x4e, 0x3f, 0xbe, 0xb5, 0x3b, 0x2e, 0xc6, 0xdf, 0xdb, 0x7d, 0x57, 0x87, 0xe1, 0xb4,
+	0x34, 0xf4, 0x58, 0x4d, 0x33, 0xcb, 0xd8, 0xbf, 0xb2, 0xfc, 0x55, 0x03, 0x4b, 0x9c, 0x96, 0xcb,
+	0x06, 0x58, 0xce, 0xac, 0xa5, 0x06, 0x7e, 0xb7, 0x07, 0x5a, 0xb5, 0x6d, 0x9c, 0x96, 0xb6, 0xdd,
+	0x20, 0xb6, 0x3d, 0xb3, 0x6c, 0x5b, 0x43, 0x1f, 0x8e, 0xf6, 0xa7, 0xb3, 0xfe, 0x06, 0x00, 0x00,
+	0xff, 0xff, 0xec, 0x38, 0x0a, 0xed, 0x3d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_idea_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_idea_error.pb.go
new file mode 100644
index 0000000..f0ee61b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_idea_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_idea_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from KeywordPlanIdeaService.
+type KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanIdeaErrorEnum_UNSPECIFIED KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 0
+	// The received error code is not known in this version.
+	KeywordPlanIdeaErrorEnum_UNKNOWN KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 1
+	// Error when crawling the input URL.
+	KeywordPlanIdeaErrorEnum_URL_CRAWL_ERROR KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 2
+	// The input has an invalid value.
+	KeywordPlanIdeaErrorEnum_INVALID_VALUE KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 3
+)
+
+var KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "URL_CRAWL_ERROR",
+	3: "INVALID_VALUE",
+}
+
+var KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"URL_CRAWL_ERROR": 2,
+	"INVALID_VALUE":   3,
+}
+
+func (x KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError) String() string {
+	return proto.EnumName(KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name, int32(x))
+}
+
+func (KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8882a7b91aa207aa, []int{0, 0}
+}
+
+// Container for enum describing possible errors from KeywordPlanIdeaService.
+type KeywordPlanIdeaErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanIdeaErrorEnum) Reset()         { *m = KeywordPlanIdeaErrorEnum{} }
+func (m *KeywordPlanIdeaErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanIdeaErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanIdeaErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8882a7b91aa207aa, []int{0}
+}
+
+func (m *KeywordPlanIdeaErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanIdeaErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Size(m)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanIdeaErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanIdeaErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError", KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name, KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_value)
+	proto.RegisterType((*KeywordPlanIdeaErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanIdeaErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_idea_error.proto", fileDescriptor_8882a7b91aa207aa)
+}
+
+var fileDescriptor_8882a7b91aa207aa = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x07, 0x0a, 0x19, 0xb2, 0x5a, 0x3d, 0xa8, 0xc8, 0x0e, 0x7d, 0x80, 0xf4, 0xd0,
+	0x5b, 0xf4, 0x92, 0x6d, 0x75, 0x94, 0x95, 0xae, 0x54, 0xda, 0x81, 0x14, 0x4a, 0x34, 0x21, 0x14,
+	0xbb, 0xa4, 0x24, 0x73, 0xea, 0xeb, 0x78, 0xf4, 0x51, 0x7c, 0x14, 0xcf, 0x3e, 0x80, 0xb4, 0x71,
+	0x3b, 0x4d, 0x4f, 0xf9, 0xc8, 0xff, 0xfb, 0x7d, 0xf9, 0xf2, 0x07, 0x37, 0x5c, 0x4a, 0x5e, 0x33,
+	0x8f, 0x50, 0xed, 0x19, 0xd9, 0xaa, 0x8d, 0xef, 0x31, 0xa5, 0xa4, 0xd2, 0xde, 0x13, 0x7b, 0x7b,
+	0x91, 0x8a, 0x96, 0x4d, 0x4d, 0x44, 0x59, 0x51, 0x46, 0xca, 0x6e, 0x00, 0x1b, 0x25, 0xd7, 0xd2,
+	0x19, 0x19, 0x04, 0x12, 0xaa, 0xe1, 0x8e, 0x86, 0x1b, 0x1f, 0x1a, 0xfa, 0xf2, 0x6a, 0x9b, 0xde,
+	0x54, 0x1e, 0x11, 0x42, 0xae, 0xc9, 0xba, 0x92, 0x42, 0x1b, 0xda, 0x7d, 0x05, 0xe7, 0x73, 0x13,
+	0x9f, 0xd4, 0x44, 0x84, 0x94, 0x91, 0xa0, 0xc5, 0x02, 0xf1, 0xbc, 0x72, 0x0b, 0x70, 0xb6, 0x6f,
+	0xe6, 0x0c, 0xc1, 0x20, 0x8b, 0xef, 0x92, 0x60, 0x12, 0xde, 0x86, 0xc1, 0xd4, 0x3e, 0x70, 0x06,
+	0xe0, 0x28, 0x8b, 0xe7, 0xf1, 0x62, 0x19, 0xdb, 0x3d, 0xe7, 0x14, 0x0c, 0xb3, 0x34, 0x2a, 0x27,
+	0x29, 0x5e, 0x46, 0x65, 0x90, 0xa6, 0x8b, 0xd4, 0xb6, 0x9c, 0x13, 0x70, 0x1c, 0xc6, 0x39, 0x8e,
+	0xc2, 0x69, 0x99, 0xe3, 0x28, 0x0b, 0xec, 0xfe, 0xf8, 0xbb, 0x07, 0xdc, 0x47, 0xb9, 0x82, 0xff,
+	0xd7, 0x1f, 0x5f, 0xec, 0xab, 0x90, 0xb4, 0xdd, 0x93, 0xde, 0xfd, 0xf4, 0x17, 0xe6, 0xb2, 0x26,
+	0x82, 0x43, 0xa9, 0xb8, 0xc7, 0x99, 0xe8, 0x7e, 0xb6, 0xdd, 0x64, 0x53, 0xe9, 0xbf, 0x16, 0x7b,
+	0x6d, 0x8e, 0x77, 0xab, 0x3f, 0xc3, 0xf8, 0xc3, 0x1a, 0xcd, 0x4c, 0x18, 0xa6, 0x1a, 0x1a, 0xd9,
+	0xaa, 0xdc, 0x87, 0xdd, 0x93, 0xfa, 0x73, 0x6b, 0x28, 0x30, 0xd5, 0xc5, 0xce, 0x50, 0xe4, 0x7e,
+	0x61, 0x0c, 0x5f, 0x96, 0x6b, 0x6e, 0x11, 0xc2, 0x54, 0x23, 0xb4, 0xb3, 0x20, 0x94, 0xfb, 0x08,
+	0x19, 0xd3, 0xc3, 0x61, 0xd7, 0xce, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x72, 0x8f, 0x66, 0x11,
+	0xf5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_keyword_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_keyword_error.pb.go
new file mode 100644
index 0000000..8ca67fb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_keyword_error.pb.go
@@ -0,0 +1,147 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_keyword_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan keyword.
+type KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanKeywordErrorEnum_UNSPECIFIED KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 0
+	// The received error code is not known in this version.
+	KeywordPlanKeywordErrorEnum_UNKNOWN KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 1
+	// A keyword or negative keyword has invalid match type.
+	KeywordPlanKeywordErrorEnum_INVALID_KEYWORD_MATCH_TYPE KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 2
+	// A keyword or negative keyword with same text and match type already
+	// exists.
+	KeywordPlanKeywordErrorEnum_DUPLICATE_KEYWORD KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 3
+	// Keyword or negative keyword text exceeds the allowed limit.
+	KeywordPlanKeywordErrorEnum_KEYWORD_TEXT_TOO_LONG KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 4
+	// Keyword or negative keyword text has invalid characters or symbols.
+	KeywordPlanKeywordErrorEnum_KEYWORD_HAS_INVALID_CHARS KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 5
+	// Keyword or negative keyword text has too many words.
+	KeywordPlanKeywordErrorEnum_KEYWORD_HAS_TOO_MANY_WORDS KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 6
+	// Keyword or negative keyword has invalid text.
+	KeywordPlanKeywordErrorEnum_INVALID_KEYWORD_TEXT KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 7
+)
+
+var KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_KEYWORD_MATCH_TYPE",
+	3: "DUPLICATE_KEYWORD",
+	4: "KEYWORD_TEXT_TOO_LONG",
+	5: "KEYWORD_HAS_INVALID_CHARS",
+	6: "KEYWORD_HAS_TOO_MANY_WORDS",
+	7: "INVALID_KEYWORD_TEXT",
+}
+
+var KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"INVALID_KEYWORD_MATCH_TYPE": 2,
+	"DUPLICATE_KEYWORD":          3,
+	"KEYWORD_TEXT_TOO_LONG":      4,
+	"KEYWORD_HAS_INVALID_CHARS":  5,
+	"KEYWORD_HAS_TOO_MANY_WORDS": 6,
+	"INVALID_KEYWORD_TEXT":       7,
+}
+
+func (x KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError) String() string {
+	return proto.EnumName(KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name, int32(x))
+}
+
+func (KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0ba4e4719ffcf21f, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword or a
+// negative keyword from a keyword plan.
+type KeywordPlanKeywordErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanKeywordErrorEnum) Reset()         { *m = KeywordPlanKeywordErrorEnum{} }
+func (m *KeywordPlanKeywordErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanKeywordErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ba4e4719ffcf21f, []int{0}
+}
+
+func (m *KeywordPlanKeywordErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Size(m)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError", KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name, KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_value)
+	proto.RegisterType((*KeywordPlanKeywordErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanKeywordErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_keyword_error.proto", fileDescriptor_0ba4e4719ffcf21f)
+}
+
+var fileDescriptor_0ba4e4719ffcf21f = []byte{
+	// 394 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcd, 0x6e, 0xd3, 0x30,
+	0x00, 0xa6, 0x19, 0x6c, 0x92, 0x77, 0xc0, 0x58, 0x4c, 0xb0, 0x31, 0x7a, 0xc8, 0x03, 0x38, 0x87,
+	0xdc, 0xcc, 0x01, 0x79, 0x89, 0x69, 0xa3, 0x76, 0x49, 0xb4, 0xa4, 0x19, 0x45, 0x91, 0xac, 0x40,
+	0xa2, 0xa8, 0x22, 0xb3, 0xa3, 0xb8, 0x0c, 0x71, 0xe5, 0x51, 0x38, 0xf2, 0x28, 0x3c, 0x06, 0x47,
+	0x5e, 0x80, 0x2b, 0x72, 0x5c, 0x57, 0x08, 0xa9, 0x9c, 0xf2, 0xc5, 0xdf, 0x9f, 0xf5, 0x19, 0xbc,
+	0x6e, 0xa5, 0x6c, 0xbb, 0xc6, 0xab, 0x6a, 0xe5, 0x19, 0xa8, 0xd1, 0xbd, 0xef, 0x35, 0xc3, 0x20,
+	0x07, 0xe5, 0x7d, 0x6c, 0xbe, 0x7c, 0x96, 0x43, 0xcd, 0xfb, 0xae, 0x12, 0xdc, 0xfe, 0x8c, 0x1c,
+	0xee, 0x07, 0xb9, 0x95, 0x68, 0x6a, 0x5c, 0xb8, 0xaa, 0x15, 0xde, 0x07, 0xe0, 0x7b, 0x1f, 0x9b,
+	0x80, 0x8b, 0x4b, 0x5b, 0xd0, 0x6f, 0xbc, 0x4a, 0x08, 0xb9, 0xad, 0xb6, 0x1b, 0x29, 0x94, 0x71,
+	0xbb, 0x5f, 0x1d, 0xf0, 0x62, 0x61, 0x52, 0xd3, 0xae, 0x12, 0x3b, 0xc8, 0xb4, 0x95, 0x89, 0x4f,
+	0x77, 0xee, 0xcf, 0x09, 0x78, 0x76, 0x80, 0x47, 0x8f, 0xc1, 0xe9, 0x2a, 0xce, 0x52, 0x16, 0x44,
+	0x6f, 0x22, 0x16, 0xc2, 0x07, 0xe8, 0x14, 0x9c, 0xac, 0xe2, 0x45, 0x9c, 0xdc, 0xc6, 0x70, 0x82,
+	0xa6, 0xe0, 0x22, 0x8a, 0x0b, 0xba, 0x8c, 0x42, 0xbe, 0x60, 0xeb, 0xdb, 0xe4, 0x26, 0xe4, 0xd7,
+	0x34, 0x0f, 0xe6, 0x3c, 0x5f, 0xa7, 0x0c, 0x3a, 0xe8, 0x0c, 0x3c, 0x09, 0x57, 0xe9, 0x32, 0x0a,
+	0x68, 0xce, 0xac, 0x02, 0x1e, 0xa1, 0x73, 0x70, 0x66, 0xe5, 0x39, 0x7b, 0x9b, 0xf3, 0x3c, 0x49,
+	0xf8, 0x32, 0x89, 0x67, 0xf0, 0x21, 0x7a, 0x09, 0xce, 0x2d, 0x35, 0xa7, 0x19, 0xb7, 0xe9, 0xc1,
+	0x9c, 0xde, 0x64, 0xf0, 0x91, 0x2e, 0xfc, 0x9b, 0xd6, 0xc6, 0x6b, 0x1a, 0xaf, 0xb9, 0x3e, 0xc9,
+	0xe0, 0x31, 0x7a, 0x0e, 0x9e, 0xfe, 0x7b, 0x21, 0xdd, 0x00, 0x4f, 0xae, 0x7e, 0x4f, 0x80, 0xfb,
+	0x41, 0xde, 0xe1, 0xff, 0x2f, 0x79, 0x75, 0x79, 0x60, 0x88, 0x54, 0x2f, 0x99, 0x4e, 0xde, 0x85,
+	0x3b, 0x7f, 0x2b, 0xbb, 0x4a, 0xb4, 0x58, 0x0e, 0xad, 0xd7, 0x36, 0x62, 0xdc, 0xd9, 0x3e, 0x6d,
+	0xbf, 0x51, 0x87, 0x5e, 0xfa, 0x95, 0xf9, 0x7c, 0x73, 0x8e, 0x66, 0x94, 0x7e, 0x77, 0xa6, 0x33,
+	0x13, 0x46, 0x6b, 0x85, 0x0d, 0xd4, 0xa8, 0xf0, 0xf1, 0x58, 0xa9, 0x7e, 0x58, 0x41, 0x49, 0x6b,
+	0x55, 0xee, 0x05, 0x65, 0xe1, 0x97, 0x46, 0xf0, 0xcb, 0x71, 0xcd, 0x29, 0x21, 0xb4, 0x56, 0x84,
+	0xec, 0x25, 0x84, 0x14, 0x3e, 0x21, 0x46, 0xf4, 0xfe, 0x78, 0xbc, 0x9d, 0xff, 0x27, 0x00, 0x00,
+	0xff, 0xff, 0x49, 0xc0, 0xcb, 0xc7, 0x86, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/keyword_plan_negative_keyword_error.pb.go b/googleapis/ads/googleads/v3/errors/keyword_plan_negative_keyword_error.pb.go
new file mode 100644
index 0000000..ee75e25
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/keyword_plan_negative_keyword_error.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/keyword_plan_negative_keyword_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan negative
+// keyword.
+type KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanNegativeKeywordErrorEnum_UNSPECIFIED KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError = 0
+	// The received error code is not known in this version.
+	KeywordPlanNegativeKeywordErrorEnum_UNKNOWN KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError = 1
+)
+
+var KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+}
+
+var KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+}
+
+func (x KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError) String() string {
+	return proto.EnumName(KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name, int32(x))
+}
+
+func (KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1d72670cdea957a8, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// negative keyword.
+type KeywordPlanNegativeKeywordErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeywordErrorEnum) Reset()         { *m = KeywordPlanNegativeKeywordErrorEnum{} }
+func (m *KeywordPlanNegativeKeywordErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeywordErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeywordErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1d72670cdea957a8, []int{0}
+}
+
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Merge(m, src)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Size(m)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError", KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name, KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_value)
+	proto.RegisterType((*KeywordPlanNegativeKeywordErrorEnum)(nil), "google.ads.googleads.v3.errors.KeywordPlanNegativeKeywordErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/keyword_plan_negative_keyword_error.proto", fileDescriptor_1d72670cdea957a8)
+}
+
+var fileDescriptor_1d72670cdea957a8 = []byte{
+	// 296 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x86, 0xdd, 0x04, 0x85, 0xec, 0xe0, 0xe8, 0x51, 0x64, 0x42, 0xf5, 0x9c, 0x1c, 0x72, 0x8b,
+	0x07, 0xe9, 0x5c, 0x9d, 0x63, 0x50, 0x0b, 0xb2, 0x0a, 0x52, 0x28, 0xd1, 0xc4, 0x50, 0xec, 0x92,
+	0x92, 0xd4, 0x8a, 0x7f, 0xc7, 0xa3, 0x3f, 0xc5, 0x9f, 0xe2, 0x9f, 0x50, 0xda, 0xaf, 0xed, 0x4d,
+	0x77, 0xca, 0xcb, 0xc7, 0xf3, 0xbd, 0xef, 0x9b, 0x0f, 0xdd, 0x28, 0x63, 0x54, 0x21, 0x09, 0x17,
+	0x8e, 0x80, 0x6c, 0x54, 0x4d, 0x89, 0xb4, 0xd6, 0x58, 0x47, 0x5e, 0xe4, 0xfb, 0x9b, 0xb1, 0x22,
+	0x2b, 0x0b, 0xae, 0x33, 0x2d, 0x15, 0xaf, 0xf2, 0x5a, 0x66, 0xfd, 0xb4, 0x85, 0x70, 0x69, 0x4d,
+	0x65, 0xbc, 0x19, 0xac, 0x63, 0x2e, 0x1c, 0x1e, 0x9c, 0x70, 0x4d, 0x31, 0x38, 0x1d, 0x9f, 0xf4,
+	0x49, 0x65, 0x4e, 0xb8, 0xd6, 0xa6, 0xe2, 0x55, 0x6e, 0xb4, 0x83, 0x6d, 0xff, 0x19, 0x9d, 0xad,
+	0xc1, 0x34, 0x2e, 0xb8, 0x8e, 0xba, 0xa0, 0x6e, 0x14, 0x36, 0x0e, 0xa1, 0x7e, 0xdd, 0xfa, 0x97,
+	0xe8, 0x74, 0x07, 0xe6, 0x1d, 0xa1, 0xc9, 0x26, 0xba, 0x8b, 0xc3, 0xab, 0xd5, 0xf5, 0x2a, 0x5c,
+	0x4c, 0xf7, 0xbc, 0x09, 0x3a, 0xdc, 0x44, 0xeb, 0xe8, 0xf6, 0x3e, 0x9a, 0x8e, 0xe6, 0x3f, 0x23,
+	0xe4, 0x3f, 0x99, 0x2d, 0xfe, 0xbf, 0xec, 0xfc, 0x7c, 0x47, 0x4a, 0xdc, 0x94, 0x8e, 0x47, 0x0f,
+	0x8b, 0xce, 0x47, 0x99, 0x82, 0x6b, 0x85, 0x8d, 0x55, 0x44, 0x49, 0xdd, 0x7e, 0xa9, 0x3f, 0x67,
+	0x99, 0xbb, 0xbf, 0xae, 0x7b, 0x01, 0xcf, 0xc7, 0x78, 0x7f, 0x19, 0x04, 0x9f, 0xe3, 0xd9, 0x12,
+	0xcc, 0x02, 0xe1, 0x30, 0xc8, 0x46, 0x25, 0x14, 0xb7, 0x91, 0xee, 0xab, 0x07, 0xd2, 0x40, 0xb8,
+	0x74, 0x00, 0xd2, 0x84, 0xa6, 0x00, 0x7c, 0x8f, 0x7d, 0x98, 0x32, 0x16, 0x08, 0xc7, 0xd8, 0x80,
+	0x30, 0x96, 0x50, 0xc6, 0x00, 0x7a, 0x3c, 0x68, 0xdb, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x8a, 0x92, 0x1d, 0x9d, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/label_error.pb.go b/googleapis/ads/googleads/v3/errors/label_error.pb.go
new file mode 100644
index 0000000..6446a7d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/label_error.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/label_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible label errors.
+type LabelErrorEnum_LabelError int32
+
+const (
+	// Enum unspecified.
+	LabelErrorEnum_UNSPECIFIED LabelErrorEnum_LabelError = 0
+	// The received error code is not known in this version.
+	LabelErrorEnum_UNKNOWN LabelErrorEnum_LabelError = 1
+	// An inactive label cannot be applied.
+	LabelErrorEnum_CANNOT_APPLY_INACTIVE_LABEL LabelErrorEnum_LabelError = 2
+	// A label cannot be applied to a disabled ad group criterion.
+	LabelErrorEnum_CANNOT_APPLY_LABEL_TO_DISABLED_AD_GROUP_CRITERION LabelErrorEnum_LabelError = 3
+	// A label cannot be applied to a negative ad group criterion.
+	LabelErrorEnum_CANNOT_APPLY_LABEL_TO_NEGATIVE_AD_GROUP_CRITERION LabelErrorEnum_LabelError = 4
+	// Cannot apply more than 50 labels per resource.
+	LabelErrorEnum_EXCEEDED_LABEL_LIMIT_PER_TYPE LabelErrorEnum_LabelError = 5
+	// Labels from a manager account cannot be applied to campaign, ad group,
+	// ad group ad, or ad group criterion resources.
+	LabelErrorEnum_INVALID_RESOURCE_FOR_MANAGER_LABEL LabelErrorEnum_LabelError = 6
+	// Label names must be unique.
+	LabelErrorEnum_DUPLICATE_NAME LabelErrorEnum_LabelError = 7
+	// Label names cannot be empty.
+	LabelErrorEnum_INVALID_LABEL_NAME LabelErrorEnum_LabelError = 8
+	// Labels cannot be applied to a draft.
+	LabelErrorEnum_CANNOT_ATTACH_LABEL_TO_DRAFT LabelErrorEnum_LabelError = 9
+	// Labels not from a manager account cannot be applied to the customer
+	// resource.
+	LabelErrorEnum_CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER LabelErrorEnum_LabelError = 10
+)
+
+var LabelErrorEnum_LabelError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_APPLY_INACTIVE_LABEL",
+	3:  "CANNOT_APPLY_LABEL_TO_DISABLED_AD_GROUP_CRITERION",
+	4:  "CANNOT_APPLY_LABEL_TO_NEGATIVE_AD_GROUP_CRITERION",
+	5:  "EXCEEDED_LABEL_LIMIT_PER_TYPE",
+	6:  "INVALID_RESOURCE_FOR_MANAGER_LABEL",
+	7:  "DUPLICATE_NAME",
+	8:  "INVALID_LABEL_NAME",
+	9:  "CANNOT_ATTACH_LABEL_TO_DRAFT",
+	10: "CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER",
+}
+
+var LabelErrorEnum_LabelError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CANNOT_APPLY_INACTIVE_LABEL": 2,
+	"CANNOT_APPLY_LABEL_TO_DISABLED_AD_GROUP_CRITERION": 3,
+	"CANNOT_APPLY_LABEL_TO_NEGATIVE_AD_GROUP_CRITERION": 4,
+	"EXCEEDED_LABEL_LIMIT_PER_TYPE":                     5,
+	"INVALID_RESOURCE_FOR_MANAGER_LABEL":                6,
+	"DUPLICATE_NAME":                                    7,
+	"INVALID_LABEL_NAME":                                8,
+	"CANNOT_ATTACH_LABEL_TO_DRAFT":                      9,
+	"CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER":       10,
+}
+
+func (x LabelErrorEnum_LabelError) String() string {
+	return proto.EnumName(LabelErrorEnum_LabelError_name, int32(x))
+}
+
+func (LabelErrorEnum_LabelError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7ab0c51c11d34350, []int{0, 0}
+}
+
+// Container for enum describing possible label errors.
+type LabelErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LabelErrorEnum) Reset()         { *m = LabelErrorEnum{} }
+func (m *LabelErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*LabelErrorEnum) ProtoMessage()    {}
+func (*LabelErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ab0c51c11d34350, []int{0}
+}
+
+func (m *LabelErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LabelErrorEnum.Unmarshal(m, b)
+}
+func (m *LabelErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LabelErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *LabelErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LabelErrorEnum.Merge(m, src)
+}
+func (m *LabelErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_LabelErrorEnum.Size(m)
+}
+func (m *LabelErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LabelErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabelErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.LabelErrorEnum_LabelError", LabelErrorEnum_LabelError_name, LabelErrorEnum_LabelError_value)
+	proto.RegisterType((*LabelErrorEnum)(nil), "google.ads.googleads.v3.errors.LabelErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/label_error.proto", fileDescriptor_7ab0c51c11d34350)
+}
+
+var fileDescriptor_7ab0c51c11d34350 = []byte{
+	// 465 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x6e, 0xd3, 0x40,
+	0x10, 0x40, 0x69, 0x02, 0x2d, 0x6c, 0xa5, 0xd6, 0xda, 0x03, 0x07, 0x28, 0x05, 0x72, 0xe0, 0x82,
+	0x64, 0x83, 0x2c, 0x2e, 0xe6, 0x34, 0xb1, 0x27, 0x66, 0x85, 0xb3, 0xb6, 0x36, 0x6b, 0x43, 0x51,
+	0xa4, 0x95, 0x8b, 0x23, 0x2b, 0x52, 0xea, 0x8d, 0xec, 0xd0, 0x1f, 0xe0, 0x1f, 0xf8, 0x00, 0x8e,
+	0x7c, 0x0a, 0x9f, 0xd2, 0xaf, 0x40, 0xf6, 0xc6, 0x29, 0x91, 0x28, 0x27, 0x8f, 0x47, 0xef, 0xcd,
+	0xcc, 0x6a, 0x86, 0xbc, 0x29, 0xb5, 0x2e, 0x57, 0x0b, 0x27, 0x2f, 0x1a, 0xc7, 0x84, 0x6d, 0x74,
+	0xed, 0x3a, 0x8b, 0xba, 0xd6, 0x75, 0xe3, 0xac, 0xf2, 0xcb, 0xc5, 0x4a, 0x75, 0x3f, 0xf6, 0xba,
+	0xd6, 0x1b, 0x4d, 0xcf, 0x0d, 0x66, 0xe7, 0x45, 0x63, 0xef, 0x0c, 0xfb, 0xda, 0xb5, 0x8d, 0xf1,
+	0xe4, 0xac, 0xaf, 0xb8, 0x5e, 0x3a, 0x79, 0x55, 0xe9, 0x4d, 0xbe, 0x59, 0xea, 0xaa, 0x31, 0xf6,
+	0xe8, 0xc7, 0x90, 0x9c, 0x44, 0x6d, 0x4d, 0x6c, 0x69, 0xac, 0xbe, 0x5d, 0x8d, 0xbe, 0x0f, 0x09,
+	0xb9, 0x4d, 0xd1, 0x53, 0x72, 0x9c, 0xf2, 0x59, 0x82, 0x3e, 0x9b, 0x30, 0x0c, 0xac, 0x7b, 0xf4,
+	0x98, 0x1c, 0xa5, 0xfc, 0x23, 0x8f, 0x3f, 0x71, 0xeb, 0x80, 0x3e, 0x27, 0x4f, 0x7d, 0xe0, 0x3c,
+	0x96, 0x0a, 0x92, 0x24, 0xba, 0x50, 0x8c, 0x83, 0x2f, 0x59, 0x86, 0x2a, 0x82, 0x31, 0x46, 0xd6,
+	0x80, 0xbe, 0x23, 0x6f, 0xf7, 0x80, 0x2e, 0xaf, 0x64, 0xac, 0x02, 0x36, 0x83, 0x71, 0x84, 0x81,
+	0x82, 0x40, 0x85, 0x22, 0x4e, 0x13, 0xe5, 0x0b, 0x26, 0x51, 0xb0, 0x98, 0x5b, 0xc3, 0xbb, 0x35,
+	0x8e, 0x21, 0x74, 0x0d, 0xfe, 0xa1, 0xdd, 0xa7, 0x2f, 0xc9, 0x33, 0xfc, 0xec, 0x23, 0x06, 0x18,
+	0x6c, 0x95, 0x88, 0x4d, 0x99, 0x54, 0x09, 0x0a, 0x25, 0x2f, 0x12, 0xb4, 0x1e, 0xd0, 0x57, 0x64,
+	0xc4, 0x78, 0x06, 0x11, 0x0b, 0x94, 0xc0, 0x59, 0x9c, 0x0a, 0x1f, 0xd5, 0x24, 0x16, 0x6a, 0x0a,
+	0x1c, 0x42, 0x14, 0xdb, 0xc1, 0x0f, 0x29, 0x25, 0x27, 0x41, 0x9a, 0x44, 0xcc, 0x07, 0x89, 0x8a,
+	0xc3, 0x14, 0xad, 0x23, 0xfa, 0x98, 0xd0, 0xde, 0x35, 0xd5, 0xbb, 0xfc, 0x43, 0xfa, 0x82, 0x9c,
+	0xf5, 0xd3, 0x4a, 0x09, 0xfe, 0x87, 0xbf, 0x5e, 0x29, 0x60, 0x22, 0xad, 0x47, 0xd4, 0x21, 0xaf,
+	0xf7, 0x09, 0x1e, 0xf3, 0xfd, 0x96, 0x2d, 0xed, 0xa7, 0x33, 0x19, 0x4f, 0x51, 0x58, 0x64, 0x7c,
+	0x73, 0x40, 0x46, 0x5f, 0xf5, 0x95, 0xfd, 0xff, 0xed, 0x8e, 0x4f, 0x6f, 0x37, 0x95, 0xb4, 0x0b,
+	0x4d, 0x0e, 0xbe, 0x04, 0x5b, 0xa5, 0xd4, 0xab, 0xbc, 0x2a, 0x6d, 0x5d, 0x97, 0x4e, 0xb9, 0xa8,
+	0xba, 0x75, 0xf7, 0x27, 0xb5, 0x5e, 0x36, 0x77, 0x5d, 0xd8, 0x7b, 0xf3, 0xf9, 0x39, 0x18, 0x86,
+	0x00, 0xbf, 0x06, 0xe7, 0xa1, 0x29, 0x06, 0x45, 0x63, 0x9b, 0xb0, 0x8d, 0x32, 0xd7, 0xee, 0x5a,
+	0x36, 0xbf, 0x7b, 0x60, 0x0e, 0x45, 0x33, 0xdf, 0x01, 0xf3, 0xcc, 0x9d, 0x1b, 0xe0, 0x66, 0x30,
+	0x32, 0x59, 0xcf, 0x83, 0xa2, 0xf1, 0xbc, 0x1d, 0xe2, 0x79, 0x99, 0xeb, 0x79, 0x06, 0xba, 0x3c,
+	0xec, 0xa6, 0x73, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x13, 0xda, 0x7d, 0x22, 0xfe, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/language_code_error.pb.go b/googleapis/ads/googleads/v3/errors/language_code_error.pb.go
new file mode 100644
index 0000000..a4abf64
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/language_code_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/language_code_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing language code errors.
+type LanguageCodeErrorEnum_LanguageCodeError int32
+
+const (
+	// Enum unspecified.
+	LanguageCodeErrorEnum_UNSPECIFIED LanguageCodeErrorEnum_LanguageCodeError = 0
+	// The received error code is not known in this version.
+	LanguageCodeErrorEnum_UNKNOWN LanguageCodeErrorEnum_LanguageCodeError = 1
+	// The input language code is not recognized.
+	LanguageCodeErrorEnum_LANGUAGE_CODE_NOT_FOUND LanguageCodeErrorEnum_LanguageCodeError = 2
+	// The language is not allowed to use.
+	LanguageCodeErrorEnum_INVALID_LANGUAGE_CODE LanguageCodeErrorEnum_LanguageCodeError = 3
+)
+
+var LanguageCodeErrorEnum_LanguageCodeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LANGUAGE_CODE_NOT_FOUND",
+	3: "INVALID_LANGUAGE_CODE",
+}
+
+var LanguageCodeErrorEnum_LanguageCodeError_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"LANGUAGE_CODE_NOT_FOUND": 2,
+	"INVALID_LANGUAGE_CODE":   3,
+}
+
+func (x LanguageCodeErrorEnum_LanguageCodeError) String() string {
+	return proto.EnumName(LanguageCodeErrorEnum_LanguageCodeError_name, int32(x))
+}
+
+func (LanguageCodeErrorEnum_LanguageCodeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1a902c8bd78e0aea, []int{0, 0}
+}
+
+// Container for enum describing language code errors.
+type LanguageCodeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LanguageCodeErrorEnum) Reset()         { *m = LanguageCodeErrorEnum{} }
+func (m *LanguageCodeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*LanguageCodeErrorEnum) ProtoMessage()    {}
+func (*LanguageCodeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a902c8bd78e0aea, []int{0}
+}
+
+func (m *LanguageCodeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LanguageCodeErrorEnum.Unmarshal(m, b)
+}
+func (m *LanguageCodeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LanguageCodeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *LanguageCodeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LanguageCodeErrorEnum.Merge(m, src)
+}
+func (m *LanguageCodeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_LanguageCodeErrorEnum.Size(m)
+}
+func (m *LanguageCodeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LanguageCodeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LanguageCodeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.LanguageCodeErrorEnum_LanguageCodeError", LanguageCodeErrorEnum_LanguageCodeError_name, LanguageCodeErrorEnum_LanguageCodeError_value)
+	proto.RegisterType((*LanguageCodeErrorEnum)(nil), "google.ads.googleads.v3.errors.LanguageCodeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/language_code_error.proto", fileDescriptor_1a902c8bd78e0aea)
+}
+
+var fileDescriptor_1a902c8bd78e0aea = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0xbf, 0xa4, 0xf0, 0x09, 0xd3, 0x85, 0x31, 0x50, 0xc5, 0x3f, 0x74, 0x91, 0x07, 0x98,
+	0x2c, 0xb2, 0x91, 0x71, 0x35, 0x6d, 0xd2, 0x10, 0x2c, 0x93, 0x82, 0x26, 0x82, 0x04, 0x42, 0xec,
+	0x0c, 0x43, 0xa0, 0x9d, 0x5b, 0x32, 0x6d, 0x1f, 0xc0, 0x47, 0x71, 0xe9, 0xa3, 0xf8, 0x28, 0xee,
+	0x7c, 0x03, 0x49, 0xa6, 0x2d, 0x48, 0xd1, 0x55, 0x0e, 0x37, 0xbf, 0x73, 0xe7, 0x9e, 0x83, 0x6e,
+	0x25, 0x80, 0x5c, 0x08, 0xbf, 0xe2, 0xda, 0x37, 0xb2, 0x55, 0xdb, 0xc0, 0x17, 0x4d, 0x03, 0x8d,
+	0xf6, 0x17, 0x95, 0x92, 0x9b, 0x4a, 0x8a, 0x72, 0x0e, 0x5c, 0x94, 0xdd, 0x10, 0xaf, 0x1a, 0x58,
+	0x83, 0x3b, 0x34, 0x38, 0xae, 0xb8, 0xc6, 0x07, 0x27, 0xde, 0x06, 0xd8, 0x38, 0xaf, 0x6e, 0xf6,
+	0x9b, 0x57, 0xb5, 0x5f, 0x29, 0x05, 0xeb, 0x6a, 0x5d, 0x83, 0xd2, 0xc6, 0xed, 0xbd, 0x5a, 0x68,
+	0x30, 0xdd, 0xed, 0x1e, 0x03, 0x17, 0x51, 0x6b, 0x8a, 0xd4, 0x66, 0xe9, 0xd5, 0xe8, 0xec, 0xe8,
+	0x87, 0x7b, 0x8a, 0xfa, 0x19, 0x7b, 0x98, 0x45, 0xe3, 0x64, 0x92, 0x44, 0xa1, 0xf3, 0xcf, 0xed,
+	0xa3, 0x93, 0x8c, 0xdd, 0xb3, 0xf4, 0x89, 0x39, 0x96, 0x7b, 0x8d, 0x2e, 0xa6, 0x94, 0xc5, 0x19,
+	0x8d, 0xa3, 0x72, 0x9c, 0x86, 0x51, 0xc9, 0xd2, 0xc7, 0x72, 0x92, 0x66, 0x2c, 0x74, 0x6c, 0xf7,
+	0x12, 0x0d, 0x12, 0x96, 0xd3, 0x69, 0x12, 0x96, 0x3f, 0x20, 0xa7, 0x37, 0xfa, 0xb2, 0x90, 0x37,
+	0x87, 0x25, 0xfe, 0x3b, 0xc9, 0xe8, 0xfc, 0xe8, 0x9e, 0x59, 0x9b, 0x61, 0x66, 0x3d, 0x87, 0x3b,
+	0xa7, 0x84, 0xb6, 0x27, 0x0c, 0x8d, 0xf4, 0xa5, 0x50, 0x5d, 0xc2, 0x7d, 0x9b, 0xab, 0x5a, 0xff,
+	0x56, 0xee, 0x9d, 0xf9, 0xbc, 0xd9, 0xbd, 0x98, 0xd2, 0x77, 0x7b, 0x18, 0x9b, 0x65, 0x94, 0x6b,
+	0x6c, 0x64, 0xab, 0xf2, 0x00, 0x77, 0x4f, 0xea, 0x8f, 0x3d, 0x50, 0x50, 0xae, 0x8b, 0x03, 0x50,
+	0xe4, 0x41, 0x61, 0x80, 0x4f, 0xdb, 0x33, 0x53, 0x42, 0x28, 0xd7, 0x84, 0x1c, 0x10, 0x42, 0xf2,
+	0x80, 0x10, 0x03, 0xbd, 0xfc, 0xef, 0xae, 0x0b, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa9, 0xa5,
+	0x9d, 0xc0, 0xf9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/list_operation_error.pb.go b/googleapis/ads/googleads/v3/errors/list_operation_error.pb.go
new file mode 100644
index 0000000..3a64520
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/list_operation_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/list_operation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible list operation errors.
+type ListOperationErrorEnum_ListOperationError int32
+
+const (
+	// Enum unspecified.
+	ListOperationErrorEnum_UNSPECIFIED ListOperationErrorEnum_ListOperationError = 0
+	// The received error code is not known in this version.
+	ListOperationErrorEnum_UNKNOWN ListOperationErrorEnum_ListOperationError = 1
+	// Field required in value is missing.
+	ListOperationErrorEnum_REQUIRED_FIELD_MISSING ListOperationErrorEnum_ListOperationError = 7
+	// Duplicate or identical value is sent in multiple list operations.
+	ListOperationErrorEnum_DUPLICATE_VALUES ListOperationErrorEnum_ListOperationError = 8
+)
+
+var ListOperationErrorEnum_ListOperationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	7: "REQUIRED_FIELD_MISSING",
+	8: "DUPLICATE_VALUES",
+}
+
+var ListOperationErrorEnum_ListOperationError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"REQUIRED_FIELD_MISSING": 7,
+	"DUPLICATE_VALUES":       8,
+}
+
+func (x ListOperationErrorEnum_ListOperationError) String() string {
+	return proto.EnumName(ListOperationErrorEnum_ListOperationError_name, int32(x))
+}
+
+func (ListOperationErrorEnum_ListOperationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4d4bd5dcfdab7508, []int{0, 0}
+}
+
+// Container for enum describing possible list operation errors.
+type ListOperationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListOperationErrorEnum) Reset()         { *m = ListOperationErrorEnum{} }
+func (m *ListOperationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ListOperationErrorEnum) ProtoMessage()    {}
+func (*ListOperationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d4bd5dcfdab7508, []int{0}
+}
+
+func (m *ListOperationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOperationErrorEnum.Unmarshal(m, b)
+}
+func (m *ListOperationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOperationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ListOperationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOperationErrorEnum.Merge(m, src)
+}
+func (m *ListOperationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ListOperationErrorEnum.Size(m)
+}
+func (m *ListOperationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOperationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOperationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ListOperationErrorEnum_ListOperationError", ListOperationErrorEnum_ListOperationError_name, ListOperationErrorEnum_ListOperationError_value)
+	proto.RegisterType((*ListOperationErrorEnum)(nil), "google.ads.googleads.v3.errors.ListOperationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/list_operation_error.proto", fileDescriptor_4d4bd5dcfdab7508)
+}
+
+var fileDescriptor_4d4bd5dcfdab7508 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0xff, 0xf6, 0x07, 0x2b, 0xd3, 0x85, 0x21, 0x48, 0x85, 0x22, 0x5d, 0xe4, 0x01, 0x26,
+	0x8b, 0xac, 0x1c, 0x57, 0xd3, 0x66, 0x5a, 0x06, 0x63, 0x1a, 0x1b, 0x13, 0x41, 0x02, 0x21, 0x3a,
+	0x61, 0x08, 0xb4, 0x33, 0x61, 0x26, 0x76, 0xe9, 0xc3, 0xb8, 0xf4, 0x51, 0x7c, 0x14, 0x97, 0x3e,
+	0x81, 0x24, 0x63, 0xba, 0x29, 0xba, 0xca, 0xe1, 0xe6, 0x3b, 0x67, 0xce, 0xbd, 0xe0, 0x8a, 0x4b,
+	0xc9, 0xb7, 0xa5, 0x5b, 0x30, 0xed, 0x1a, 0xd9, 0xaa, 0xbd, 0xe7, 0x96, 0x4a, 0x49, 0xa5, 0xdd,
+	0x6d, 0xa5, 0x9b, 0x5c, 0xd6, 0xa5, 0x2a, 0x9a, 0x4a, 0x8a, 0xbc, 0x9b, 0xc2, 0x5a, 0xc9, 0x46,
+	0xda, 0x33, 0xc3, 0xc3, 0x82, 0x69, 0x78, 0xb0, 0xc2, 0xbd, 0x07, 0x8d, 0x75, 0x7a, 0xd9, 0x47,
+	0xd7, 0x95, 0x5b, 0x08, 0x21, 0x9b, 0x2e, 0x42, 0x1b, 0xb7, 0xf3, 0x0a, 0x26, 0x41, 0xa5, 0x9b,
+	0x75, 0x1f, 0x4d, 0x5a, 0x13, 0x11, 0x2f, 0x3b, 0x87, 0x01, 0xfb, 0xf8, 0x8f, 0x7d, 0x06, 0xc6,
+	0x49, 0x18, 0x47, 0x64, 0x41, 0x97, 0x94, 0xf8, 0xd6, 0x3f, 0x7b, 0x0c, 0x46, 0x49, 0x78, 0x13,
+	0xae, 0x1f, 0x42, 0x6b, 0x60, 0x4f, 0xc1, 0x64, 0x43, 0xee, 0x12, 0xba, 0x21, 0x7e, 0xbe, 0xa4,
+	0x24, 0xf0, 0xf3, 0x5b, 0x1a, 0xc7, 0x34, 0x5c, 0x59, 0x23, 0xfb, 0x1c, 0x58, 0x7e, 0x12, 0x05,
+	0x74, 0x81, 0xef, 0x49, 0x9e, 0xe2, 0x20, 0x21, 0xb1, 0x75, 0x3a, 0xff, 0x1a, 0x00, 0xe7, 0x59,
+	0xee, 0xe0, 0xdf, 0x4b, 0xcc, 0x2f, 0x8e, 0xab, 0x44, 0x6d, 0xff, 0x68, 0xf0, 0xe8, 0xff, 0x58,
+	0xb9, 0xdc, 0x16, 0x82, 0x43, 0xa9, 0xb8, 0xcb, 0x4b, 0xd1, 0x6d, 0xd7, 0x9f, 0xb2, 0xae, 0xf4,
+	0x6f, 0x97, 0xbd, 0x36, 0x9f, 0xb7, 0xe1, 0xff, 0x15, 0xc6, 0xef, 0xc3, 0xd9, 0xca, 0x84, 0x61,
+	0xa6, 0xa1, 0x91, 0xad, 0x4a, 0x3d, 0xd8, 0x3d, 0xa9, 0x3f, 0x7a, 0x20, 0xc3, 0x4c, 0x67, 0x07,
+	0x20, 0x4b, 0xbd, 0xcc, 0x00, 0x9f, 0x43, 0xc7, 0x4c, 0x11, 0xc2, 0x4c, 0x23, 0x74, 0x40, 0x10,
+	0x4a, 0x3d, 0x84, 0x0c, 0xf4, 0x74, 0xd2, 0xb5, 0xf3, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdf,
+	0x04, 0xee, 0x90, 0xf6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/manager_link_error.pb.go b/googleapis/ads/googleads/v3/errors/manager_link_error.pb.go
new file mode 100644
index 0000000..82a7ede
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/manager_link_error.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/manager_link_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible ManagerLink errors.
+type ManagerLinkErrorEnum_ManagerLinkError int32
+
+const (
+	// Enum unspecified.
+	ManagerLinkErrorEnum_UNSPECIFIED ManagerLinkErrorEnum_ManagerLinkError = 0
+	// The received error code is not known in this version.
+	ManagerLinkErrorEnum_UNKNOWN ManagerLinkErrorEnum_ManagerLinkError = 1
+	// The manager and client have incompatible account types.
+	ManagerLinkErrorEnum_ACCOUNTS_NOT_COMPATIBLE_FOR_LINKING ManagerLinkErrorEnum_ManagerLinkError = 2
+	// Client is already linked to too many managers.
+	ManagerLinkErrorEnum_TOO_MANY_MANAGERS ManagerLinkErrorEnum_ManagerLinkError = 3
+	// Manager has too many pending invitations.
+	ManagerLinkErrorEnum_TOO_MANY_INVITES ManagerLinkErrorEnum_ManagerLinkError = 4
+	// Client is already invited by this manager.
+	ManagerLinkErrorEnum_ALREADY_INVITED_BY_THIS_MANAGER ManagerLinkErrorEnum_ManagerLinkError = 5
+	// The client is already managed by this manager.
+	ManagerLinkErrorEnum_ALREADY_MANAGED_BY_THIS_MANAGER ManagerLinkErrorEnum_ManagerLinkError = 6
+	// Client is already managed in hierarchy.
+	ManagerLinkErrorEnum_ALREADY_MANAGED_IN_HIERARCHY ManagerLinkErrorEnum_ManagerLinkError = 7
+	// Manger and sub-manager to be linked have duplicate client.
+	ManagerLinkErrorEnum_DUPLICATE_CHILD_FOUND ManagerLinkErrorEnum_ManagerLinkError = 8
+	// Client has no active user that can access the client account.
+	ManagerLinkErrorEnum_CLIENT_HAS_NO_ADMIN_USER ManagerLinkErrorEnum_ManagerLinkError = 9
+	// Adding this link would exceed the maximum hierarchy depth.
+	ManagerLinkErrorEnum_MAX_DEPTH_EXCEEDED ManagerLinkErrorEnum_ManagerLinkError = 10
+	// Adding this link will create a cycle.
+	ManagerLinkErrorEnum_CYCLE_NOT_ALLOWED ManagerLinkErrorEnum_ManagerLinkError = 11
+	// Manager account has the maximum number of linked clients.
+	ManagerLinkErrorEnum_TOO_MANY_ACCOUNTS ManagerLinkErrorEnum_ManagerLinkError = 12
+	// Parent manager account has the maximum number of linked clients.
+	ManagerLinkErrorEnum_TOO_MANY_ACCOUNTS_AT_MANAGER ManagerLinkErrorEnum_ManagerLinkError = 13
+	// The account is not authorized owner.
+	ManagerLinkErrorEnum_NON_OWNER_USER_CANNOT_MODIFY_LINK ManagerLinkErrorEnum_ManagerLinkError = 14
+	// Your manager account is suspended, and you are no longer allowed to link
+	// to clients.
+	ManagerLinkErrorEnum_SUSPENDED_ACCOUNT_CANNOT_ADD_CLIENTS ManagerLinkErrorEnum_ManagerLinkError = 15
+	// You are not allowed to move a client to a manager that is not under your
+	// current hierarchy.
+	ManagerLinkErrorEnum_CLIENT_OUTSIDE_TREE ManagerLinkErrorEnum_ManagerLinkError = 16
+)
+
+var ManagerLinkErrorEnum_ManagerLinkError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ACCOUNTS_NOT_COMPATIBLE_FOR_LINKING",
+	3:  "TOO_MANY_MANAGERS",
+	4:  "TOO_MANY_INVITES",
+	5:  "ALREADY_INVITED_BY_THIS_MANAGER",
+	6:  "ALREADY_MANAGED_BY_THIS_MANAGER",
+	7:  "ALREADY_MANAGED_IN_HIERARCHY",
+	8:  "DUPLICATE_CHILD_FOUND",
+	9:  "CLIENT_HAS_NO_ADMIN_USER",
+	10: "MAX_DEPTH_EXCEEDED",
+	11: "CYCLE_NOT_ALLOWED",
+	12: "TOO_MANY_ACCOUNTS",
+	13: "TOO_MANY_ACCOUNTS_AT_MANAGER",
+	14: "NON_OWNER_USER_CANNOT_MODIFY_LINK",
+	15: "SUSPENDED_ACCOUNT_CANNOT_ADD_CLIENTS",
+	16: "CLIENT_OUTSIDE_TREE",
+}
+
+var ManagerLinkErrorEnum_ManagerLinkError_value = map[string]int32{
+	"UNSPECIFIED":                          0,
+	"UNKNOWN":                              1,
+	"ACCOUNTS_NOT_COMPATIBLE_FOR_LINKING":  2,
+	"TOO_MANY_MANAGERS":                    3,
+	"TOO_MANY_INVITES":                     4,
+	"ALREADY_INVITED_BY_THIS_MANAGER":      5,
+	"ALREADY_MANAGED_BY_THIS_MANAGER":      6,
+	"ALREADY_MANAGED_IN_HIERARCHY":         7,
+	"DUPLICATE_CHILD_FOUND":                8,
+	"CLIENT_HAS_NO_ADMIN_USER":             9,
+	"MAX_DEPTH_EXCEEDED":                   10,
+	"CYCLE_NOT_ALLOWED":                    11,
+	"TOO_MANY_ACCOUNTS":                    12,
+	"TOO_MANY_ACCOUNTS_AT_MANAGER":         13,
+	"NON_OWNER_USER_CANNOT_MODIFY_LINK":    14,
+	"SUSPENDED_ACCOUNT_CANNOT_ADD_CLIENTS": 15,
+	"CLIENT_OUTSIDE_TREE":                  16,
+}
+
+func (x ManagerLinkErrorEnum_ManagerLinkError) String() string {
+	return proto.EnumName(ManagerLinkErrorEnum_ManagerLinkError_name, int32(x))
+}
+
+func (ManagerLinkErrorEnum_ManagerLinkError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_aba35d6dfea2fe63, []int{0, 0}
+}
+
+// Container for enum describing possible ManagerLink errors.
+type ManagerLinkErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagerLinkErrorEnum) Reset()         { *m = ManagerLinkErrorEnum{} }
+func (m *ManagerLinkErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ManagerLinkErrorEnum) ProtoMessage()    {}
+func (*ManagerLinkErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aba35d6dfea2fe63, []int{0}
+}
+
+func (m *ManagerLinkErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagerLinkErrorEnum.Unmarshal(m, b)
+}
+func (m *ManagerLinkErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagerLinkErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ManagerLinkErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagerLinkErrorEnum.Merge(m, src)
+}
+func (m *ManagerLinkErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ManagerLinkErrorEnum.Size(m)
+}
+func (m *ManagerLinkErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagerLinkErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagerLinkErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ManagerLinkErrorEnum_ManagerLinkError", ManagerLinkErrorEnum_ManagerLinkError_name, ManagerLinkErrorEnum_ManagerLinkError_value)
+	proto.RegisterType((*ManagerLinkErrorEnum)(nil), "google.ads.googleads.v3.errors.ManagerLinkErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/manager_link_error.proto", fileDescriptor_aba35d6dfea2fe63)
+}
+
+var fileDescriptor_aba35d6dfea2fe63 = []byte{
+	// 556 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdf, 0x6e, 0xd3, 0x3e,
+	0x14, 0xc7, 0x7f, 0xeb, 0xf6, 0xdb, 0xc0, 0x03, 0x66, 0xcc, 0xc6, 0x3f, 0x4d, 0x03, 0x3a, 0x10,
+	0x5c, 0xa5, 0x17, 0xbd, 0x40, 0x0a, 0x57, 0xae, 0x7d, 0xda, 0x58, 0x4b, 0xec, 0x28, 0x71, 0xba,
+	0x15, 0x55, 0xb2, 0x02, 0xad, 0xa2, 0x6a, 0x5b, 0x32, 0x25, 0x63, 0x8f, 0xc2, 0x03, 0x70, 0xc9,
+	0xa3, 0xf0, 0x28, 0x5c, 0xf1, 0x02, 0x48, 0x28, 0xf1, 0x52, 0x41, 0x27, 0xb8, 0x49, 0x8e, 0xbe,
+	0xfe, 0x7c, 0x8f, 0x7d, 0x8e, 0xbe, 0xe8, 0x6d, 0x56, 0x14, 0xd9, 0xd9, 0xbc, 0x97, 0xce, 0xaa,
+	0x9e, 0x2d, 0xeb, 0xea, 0xaa, 0xdf, 0x9b, 0x97, 0x65, 0x51, 0x56, 0xbd, 0xf3, 0x34, 0x4f, 0xb3,
+	0x79, 0x69, 0xce, 0x16, 0xf9, 0xa9, 0x69, 0x34, 0xe7, 0xa2, 0x2c, 0x2e, 0x0b, 0x72, 0x60, 0x69,
+	0x27, 0x9d, 0x55, 0xce, 0xd2, 0xe8, 0x5c, 0xf5, 0x1d, 0x6b, 0x7c, 0xba, 0xdf, 0x36, 0xbe, 0x58,
+	0xf4, 0xd2, 0x3c, 0x2f, 0x2e, 0xd3, 0xcb, 0x45, 0x91, 0x57, 0xd6, 0xdd, 0xfd, 0xbc, 0x81, 0x76,
+	0x03, 0xdb, 0xda, 0x5f, 0xe4, 0xa7, 0x50, 0x7b, 0x20, 0xff, 0x74, 0xde, 0xfd, 0xb9, 0x8e, 0xf0,
+	0xea, 0x01, 0xd9, 0x41, 0xdb, 0x89, 0x8c, 0x43, 0x60, 0x62, 0x28, 0x80, 0xe3, 0xff, 0xc8, 0x36,
+	0xda, 0x4a, 0xe4, 0x91, 0x54, 0xc7, 0x12, 0xaf, 0x91, 0xd7, 0xe8, 0x90, 0x32, 0xa6, 0x12, 0xa9,
+	0x63, 0x23, 0x95, 0x36, 0x4c, 0x05, 0x21, 0xd5, 0x62, 0xe0, 0x83, 0x19, 0xaa, 0xc8, 0xf8, 0x42,
+	0x1e, 0x09, 0x39, 0xc2, 0x1d, 0xb2, 0x87, 0xee, 0x6b, 0xa5, 0x4c, 0x40, 0xe5, 0xa4, 0xfe, 0xd0,
+	0x11, 0x44, 0x31, 0x5e, 0x27, 0xbb, 0x08, 0x2f, 0x65, 0x21, 0xc7, 0x42, 0x43, 0x8c, 0x37, 0xc8,
+	0x21, 0x7a, 0x46, 0xfd, 0x08, 0x28, 0x6f, 0x45, 0x6e, 0x06, 0x13, 0xa3, 0x3d, 0x11, 0xb7, 0x5e,
+	0xfc, 0xff, 0xef, 0x90, 0x15, 0x6f, 0x42, 0x9b, 0xe4, 0x39, 0xda, 0x5f, 0x85, 0x84, 0x34, 0x9e,
+	0x80, 0x88, 0x46, 0xcc, 0x9b, 0xe0, 0x2d, 0xf2, 0x04, 0xed, 0xf1, 0x24, 0xf4, 0x05, 0xa3, 0x1a,
+	0x0c, 0xf3, 0x84, 0xcf, 0xcd, 0x50, 0x25, 0x92, 0xe3, 0x5b, 0x64, 0x1f, 0x3d, 0x66, 0xbe, 0x00,
+	0xa9, 0x8d, 0x47, 0xeb, 0xf1, 0x0c, 0xe5, 0x81, 0x90, 0x26, 0x89, 0x21, 0xc2, 0xb7, 0xc9, 0x43,
+	0x44, 0x02, 0x7a, 0x62, 0x38, 0x84, 0xda, 0x33, 0x70, 0xc2, 0x00, 0x38, 0x70, 0x8c, 0xea, 0x49,
+	0xd9, 0x84, 0xf9, 0xd0, 0xec, 0x83, 0xfa, 0xbe, 0x3a, 0x06, 0x8e, 0xb7, 0xff, 0x58, 0x40, 0xbb,
+	0x32, 0x7c, 0xa7, 0x7e, 0xe0, 0x0d, 0xd9, 0x50, 0xbd, 0x1c, 0xe1, 0x2e, 0x79, 0x85, 0x5e, 0x48,
+	0x25, 0x8d, 0x3a, 0x96, 0x10, 0x35, 0x77, 0x1b, 0x46, 0x65, 0xdd, 0x3b, 0x50, 0x5c, 0x0c, 0x27,
+	0xcd, 0x8e, 0xf1, 0x3d, 0xf2, 0x06, 0xbd, 0x8c, 0x93, 0x38, 0x04, 0xc9, 0x81, 0xb7, 0x9d, 0x5a,
+	0x92, 0x72, 0x6e, 0xec, 0x24, 0x31, 0xde, 0x21, 0x8f, 0xd0, 0x83, 0xeb, 0xb1, 0x54, 0xa2, 0x63,
+	0xc1, 0xc1, 0xe8, 0x08, 0x00, 0xe3, 0xc1, 0x8f, 0x35, 0xd4, 0xfd, 0x58, 0x9c, 0x3b, 0xff, 0x4e,
+	0xd7, 0x60, 0x6f, 0x35, 0x23, 0x61, 0x1d, 0xab, 0x70, 0xed, 0x3d, 0xbf, 0x36, 0x66, 0xc5, 0x59,
+	0x9a, 0x67, 0x4e, 0x51, 0x66, 0xbd, 0x6c, 0x9e, 0x37, 0xa1, 0x6b, 0xf3, 0x7d, 0xb1, 0xa8, 0xfe,
+	0x16, 0xf7, 0x77, 0xf6, 0xf7, 0xa5, 0xb3, 0x3e, 0xa2, 0xf4, 0x6b, 0xe7, 0x60, 0x64, 0x9b, 0xd1,
+	0x59, 0xe5, 0xd8, 0xb2, 0xae, 0xc6, 0x7d, 0xa7, 0xb9, 0xb2, 0xfa, 0xd6, 0x02, 0x53, 0x3a, 0xab,
+	0xa6, 0x4b, 0x60, 0x3a, 0xee, 0x4f, 0x2d, 0xf0, 0xbd, 0xd3, 0xb5, 0xaa, 0xeb, 0xd2, 0x59, 0xe5,
+	0xba, 0x4b, 0xc4, 0x75, 0xc7, 0x7d, 0xd7, 0xb5, 0xd0, 0x87, 0xcd, 0xe6, 0x75, 0xfd, 0x5f, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x75, 0x31, 0x98, 0x66, 0x8b, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/media_bundle_error.pb.go b/googleapis/ads/googleads/v3/errors/media_bundle_error.pb.go
new file mode 100644
index 0000000..fa97896
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/media_bundle_error.pb.go
@@ -0,0 +1,225 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/media_bundle_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible media bundle errors.
+type MediaBundleErrorEnum_MediaBundleError int32
+
+const (
+	// Enum unspecified.
+	MediaBundleErrorEnum_UNSPECIFIED MediaBundleErrorEnum_MediaBundleError = 0
+	// The received error code is not known in this version.
+	MediaBundleErrorEnum_UNKNOWN MediaBundleErrorEnum_MediaBundleError = 1
+	// There was a problem with the request.
+	MediaBundleErrorEnum_BAD_REQUEST MediaBundleErrorEnum_MediaBundleError = 3
+	// HTML5 ads using DoubleClick Studio created ZIP files are not supported.
+	MediaBundleErrorEnum_DOUBLECLICK_BUNDLE_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 4
+	// Cannot reference URL external to the media bundle.
+	MediaBundleErrorEnum_EXTERNAL_URL_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 5
+	// Media bundle file is too large.
+	MediaBundleErrorEnum_FILE_TOO_LARGE MediaBundleErrorEnum_MediaBundleError = 6
+	// ZIP file from Google Web Designer is not published.
+	MediaBundleErrorEnum_GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED MediaBundleErrorEnum_MediaBundleError = 7
+	// Input was invalid.
+	MediaBundleErrorEnum_INVALID_INPUT MediaBundleErrorEnum_MediaBundleError = 8
+	// There was a problem with the media bundle.
+	MediaBundleErrorEnum_INVALID_MEDIA_BUNDLE MediaBundleErrorEnum_MediaBundleError = 9
+	// There was a problem with one or more of the media bundle entries.
+	MediaBundleErrorEnum_INVALID_MEDIA_BUNDLE_ENTRY MediaBundleErrorEnum_MediaBundleError = 10
+	// The media bundle contains a file with an unknown mime type
+	MediaBundleErrorEnum_INVALID_MIME_TYPE MediaBundleErrorEnum_MediaBundleError = 11
+	// The media bundle contain an invalid asset path.
+	MediaBundleErrorEnum_INVALID_PATH MediaBundleErrorEnum_MediaBundleError = 12
+	// HTML5 ad is trying to reference an asset not in .ZIP file
+	MediaBundleErrorEnum_INVALID_URL_REFERENCE MediaBundleErrorEnum_MediaBundleError = 13
+	// Media data is too large.
+	MediaBundleErrorEnum_MEDIA_DATA_TOO_LARGE MediaBundleErrorEnum_MediaBundleError = 14
+	// The media bundle contains no primary entry.
+	MediaBundleErrorEnum_MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY MediaBundleErrorEnum_MediaBundleError = 15
+	// There was an error on the server.
+	MediaBundleErrorEnum_SERVER_ERROR MediaBundleErrorEnum_MediaBundleError = 16
+	// The image could not be stored.
+	MediaBundleErrorEnum_STORAGE_ERROR MediaBundleErrorEnum_MediaBundleError = 17
+	// Media bundle created with the Swiffy tool is not allowed.
+	MediaBundleErrorEnum_SWIFFY_BUNDLE_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 18
+	// The media bundle contains too many files.
+	MediaBundleErrorEnum_TOO_MANY_FILES MediaBundleErrorEnum_MediaBundleError = 19
+	// The media bundle is not of legal dimensions.
+	MediaBundleErrorEnum_UNEXPECTED_SIZE MediaBundleErrorEnum_MediaBundleError = 20
+	// Google Web Designer not created for "Google Ads" environment.
+	MediaBundleErrorEnum_UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT MediaBundleErrorEnum_MediaBundleError = 21
+	// Unsupported HTML5 feature in HTML5 asset.
+	MediaBundleErrorEnum_UNSUPPORTED_HTML5_FEATURE MediaBundleErrorEnum_MediaBundleError = 22
+	// URL in HTML5 entry is not ssl compliant.
+	MediaBundleErrorEnum_URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT MediaBundleErrorEnum_MediaBundleError = 23
+	// Custom exits not allowed in HTML5 entry.
+	MediaBundleErrorEnum_CUSTOM_EXIT_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 24
+)
+
+var MediaBundleErrorEnum_MediaBundleError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "BAD_REQUEST",
+	4:  "DOUBLECLICK_BUNDLE_NOT_ALLOWED",
+	5:  "EXTERNAL_URL_NOT_ALLOWED",
+	6:  "FILE_TOO_LARGE",
+	7:  "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED",
+	8:  "INVALID_INPUT",
+	9:  "INVALID_MEDIA_BUNDLE",
+	10: "INVALID_MEDIA_BUNDLE_ENTRY",
+	11: "INVALID_MIME_TYPE",
+	12: "INVALID_PATH",
+	13: "INVALID_URL_REFERENCE",
+	14: "MEDIA_DATA_TOO_LARGE",
+	15: "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY",
+	16: "SERVER_ERROR",
+	17: "STORAGE_ERROR",
+	18: "SWIFFY_BUNDLE_NOT_ALLOWED",
+	19: "TOO_MANY_FILES",
+	20: "UNEXPECTED_SIZE",
+	21: "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT",
+	22: "UNSUPPORTED_HTML5_FEATURE",
+	23: "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT",
+	24: "CUSTOM_EXIT_NOT_ALLOWED",
+}
+
+var MediaBundleErrorEnum_MediaBundleError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"BAD_REQUEST":                    3,
+	"DOUBLECLICK_BUNDLE_NOT_ALLOWED": 4,
+	"EXTERNAL_URL_NOT_ALLOWED":       5,
+	"FILE_TOO_LARGE":                 6,
+	"GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED": 7,
+	"INVALID_INPUT":                               8,
+	"INVALID_MEDIA_BUNDLE":                        9,
+	"INVALID_MEDIA_BUNDLE_ENTRY":                  10,
+	"INVALID_MIME_TYPE":                           11,
+	"INVALID_PATH":                                12,
+	"INVALID_URL_REFERENCE":                       13,
+	"MEDIA_DATA_TOO_LARGE":                        14,
+	"MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY":          15,
+	"SERVER_ERROR":                                16,
+	"STORAGE_ERROR":                               17,
+	"SWIFFY_BUNDLE_NOT_ALLOWED":                   18,
+	"TOO_MANY_FILES":                              19,
+	"UNEXPECTED_SIZE":                             20,
+	"UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT": 21,
+	"UNSUPPORTED_HTML5_FEATURE":                   22,
+	"URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT":       23,
+	"CUSTOM_EXIT_NOT_ALLOWED":                     24,
+}
+
+func (x MediaBundleErrorEnum_MediaBundleError) String() string {
+	return proto.EnumName(MediaBundleErrorEnum_MediaBundleError_name, int32(x))
+}
+
+func (MediaBundleErrorEnum_MediaBundleError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_13a0331a34c9b73f, []int{0, 0}
+}
+
+// Container for enum describing possible media bundle errors.
+type MediaBundleErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaBundleErrorEnum) Reset()         { *m = MediaBundleErrorEnum{} }
+func (m *MediaBundleErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaBundleErrorEnum) ProtoMessage()    {}
+func (*MediaBundleErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_13a0331a34c9b73f, []int{0}
+}
+
+func (m *MediaBundleErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaBundleErrorEnum.Unmarshal(m, b)
+}
+func (m *MediaBundleErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaBundleErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MediaBundleErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaBundleErrorEnum.Merge(m, src)
+}
+func (m *MediaBundleErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaBundleErrorEnum.Size(m)
+}
+func (m *MediaBundleErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaBundleErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaBundleErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MediaBundleErrorEnum_MediaBundleError", MediaBundleErrorEnum_MediaBundleError_name, MediaBundleErrorEnum_MediaBundleError_value)
+	proto.RegisterType((*MediaBundleErrorEnum)(nil), "google.ads.googleads.v3.errors.MediaBundleErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/media_bundle_error.proto", fileDescriptor_13a0331a34c9b73f)
+}
+
+var fileDescriptor_13a0331a34c9b73f = []byte{
+	// 643 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xdb, 0x4e, 0x1b, 0x3b,
+	0x14, 0x3d, 0xc0, 0x01, 0xce, 0x31, 0x37, 0x63, 0xc8, 0xe1, 0x72, 0x68, 0x1e, 0x22, 0xb5, 0x52,
+	0x5b, 0x69, 0xf2, 0x10, 0x55, 0x95, 0xa6, 0x4f, 0x9e, 0xcc, 0xce, 0x60, 0xe1, 0xb1, 0xa7, 0xb6,
+	0x27, 0x21, 0x28, 0x92, 0x15, 0x9a, 0x28, 0x8a, 0x04, 0x19, 0x94, 0x01, 0x7e, 0xa7, 0x52, 0x1f,
+	0xfb, 0x05, 0xfd, 0x86, 0x7e, 0x4a, 0x9f, 0xfa, 0x09, 0x95, 0x67, 0x48, 0x04, 0x28, 0xed, 0x93,
+	0xb7, 0xd6, 0x5e, 0x6b, 0xed, 0x8b, 0xbc, 0xd1, 0xfb, 0x51, 0x96, 0x8d, 0xae, 0x86, 0xf5, 0xfe,
+	0x20, 0xaf, 0x97, 0xa1, 0x8b, 0xee, 0x1b, 0xf5, 0xe1, 0x74, 0x9a, 0x4d, 0xf3, 0xfa, 0xf5, 0x70,
+	0x30, 0xee, 0xdb, 0xcb, 0xbb, 0xc9, 0xe0, 0x6a, 0x68, 0x0b, 0xcc, 0xbb, 0x99, 0x66, 0xb7, 0x19,
+	0xa9, 0x96, 0x6c, 0xaf, 0x3f, 0xc8, 0xbd, 0xb9, 0xd0, 0xbb, 0x6f, 0x78, 0xa5, 0xf0, 0xf8, 0x64,
+	0x66, 0x7c, 0x33, 0xae, 0xf7, 0x27, 0x93, 0xec, 0xb6, 0x7f, 0x3b, 0xce, 0x26, 0x79, 0xa9, 0xae,
+	0x7d, 0x5b, 0x45, 0xfb, 0xb1, 0xb3, 0x0e, 0x0a, 0x67, 0x70, 0x1a, 0x98, 0xdc, 0x5d, 0xd7, 0x3e,
+	0xaf, 0x22, 0xfc, 0x3c, 0x41, 0x76, 0xd0, 0x46, 0x2a, 0x74, 0x02, 0x4d, 0xd6, 0x62, 0x10, 0xe2,
+	0xbf, 0xc8, 0x06, 0x5a, 0x4f, 0xc5, 0x99, 0x90, 0x1d, 0x81, 0x97, 0x5c, 0x36, 0xa0, 0xa1, 0x55,
+	0xf0, 0x31, 0x05, 0x6d, 0xf0, 0x0a, 0xa9, 0xa1, 0x6a, 0x28, 0xd3, 0x80, 0x43, 0x93, 0xb3, 0xe6,
+	0x99, 0x0d, 0x52, 0x11, 0x72, 0xb0, 0x42, 0x1a, 0x4b, 0x39, 0x97, 0x1d, 0x08, 0xf1, 0xdf, 0xe4,
+	0x04, 0x1d, 0xc2, 0xb9, 0x01, 0x25, 0x28, 0xb7, 0xa9, 0xe2, 0x4f, 0xb2, 0xab, 0x84, 0xa0, 0xed,
+	0x16, 0xe3, 0x60, 0x8d, 0x94, 0x96, 0x53, 0x15, 0x01, 0x5e, 0x23, 0x1e, 0x7a, 0x13, 0x49, 0x19,
+	0x71, 0xb0, 0x1d, 0x08, 0x6c, 0x08, 0x9a, 0x45, 0x02, 0x94, 0xbd, 0x60, 0x89, 0x2d, 0xb8, 0xce,
+	0x21, 0x49, 0x03, 0xce, 0xf4, 0x29, 0x84, 0x78, 0x9d, 0xec, 0xa2, 0x2d, 0x26, 0xda, 0x94, 0xb3,
+	0xd0, 0x32, 0x91, 0xa4, 0x06, 0xff, 0x43, 0x0e, 0xd1, 0xfe, 0x0c, 0x8a, 0x21, 0x64, 0xf4, 0xa1,
+	0x35, 0xfc, 0x2f, 0xa9, 0xa2, 0xe3, 0x45, 0x19, 0x0b, 0xc2, 0xa8, 0x2e, 0x46, 0xa4, 0x82, 0x76,
+	0xe7, 0x79, 0x16, 0x83, 0x35, 0xdd, 0x04, 0xf0, 0x06, 0xc1, 0x68, 0x73, 0x06, 0x27, 0xd4, 0x9c,
+	0xe2, 0x4d, 0x72, 0x84, 0x2a, 0x33, 0xc4, 0x8d, 0xa5, 0xa0, 0x05, 0x0a, 0x44, 0x13, 0xf0, 0x96,
+	0xab, 0x5e, 0x7a, 0x87, 0xd4, 0xd0, 0x47, 0xa3, 0x6d, 0x93, 0x57, 0xa8, 0x16, 0x33, 0xad, 0x99,
+	0x88, 0x6c, 0xa2, 0x58, 0x4c, 0x55, 0x77, 0x51, 0x17, 0x3b, 0xae, 0x9c, 0x06, 0xd5, 0x06, 0x65,
+	0x41, 0x29, 0xa9, 0x30, 0x76, 0x43, 0x6a, 0x23, 0x15, 0x8d, 0xe0, 0x01, 0xda, 0x25, 0x2f, 0xd0,
+	0x91, 0xee, 0xb0, 0x56, 0xab, 0xbb, 0x68, 0xf1, 0xc4, 0xad, 0xd6, 0x95, 0x8e, 0xa9, 0xe8, 0x16,
+	0x7b, 0xd3, 0x78, 0x8f, 0xec, 0xa1, 0x9d, 0x54, 0xc0, 0x79, 0x02, 0x4d, 0x03, 0xa1, 0xd5, 0xec,
+	0x02, 0xf0, 0x3e, 0xa9, 0xa3, 0xb7, 0xa9, 0xd0, 0x69, 0x92, 0x48, 0xe5, 0xd0, 0x45, 0xbb, 0x07,
+	0xd1, 0x66, 0x4a, 0x8a, 0x18, 0x84, 0xc1, 0x15, 0x57, 0xf8, 0xb1, 0xe0, 0xd4, 0xc4, 0xfc, 0x9d,
+	0x6d, 0x01, 0x35, 0xa9, 0x02, 0xfc, 0x1f, 0x79, 0x8d, 0x5e, 0xba, 0x8d, 0x30, 0xf1, 0x74, 0x36,
+	0xd7, 0x9d, 0xd6, 0xdc, 0x36, 0x65, 0x9c, 0x70, 0x46, 0x85, 0xc1, 0x07, 0xe4, 0x7f, 0x74, 0xd0,
+	0x4c, 0xb5, 0x91, 0xb1, 0x85, 0x73, 0x66, 0x9e, 0x0c, 0x70, 0x18, 0xfc, 0x5c, 0x42, 0xb5, 0x4f,
+	0xd9, 0xb5, 0xf7, 0xe7, 0xff, 0x1f, 0x54, 0x9e, 0xff, 0xe2, 0xc4, 0x7d, 0xfc, 0x64, 0xe9, 0x22,
+	0x7c, 0x10, 0x8e, 0xb2, 0xab, 0xfe, 0x64, 0xe4, 0x65, 0xd3, 0x51, 0x7d, 0x34, 0x9c, 0x14, 0x67,
+	0x31, 0xbb, 0xc0, 0x9b, 0x71, 0xfe, 0xbb, 0x83, 0xfc, 0x50, 0x3e, 0x5f, 0x96, 0x57, 0x22, 0x4a,
+	0xbf, 0x2e, 0x57, 0xa3, 0xd2, 0x8c, 0x0e, 0x72, 0xaf, 0x0c, 0x5d, 0xd4, 0x6e, 0x78, 0x45, 0xc9,
+	0xfc, 0xfb, 0x8c, 0xd0, 0xa3, 0x83, 0xbc, 0x37, 0x27, 0xf4, 0xda, 0x8d, 0x5e, 0x49, 0xf8, 0xb1,
+	0x5c, 0x2b, 0x51, 0xdf, 0xa7, 0x83, 0xdc, 0xf7, 0xe7, 0x14, 0xdf, 0x6f, 0x37, 0x7c, 0xbf, 0x24,
+	0x5d, 0xae, 0x15, 0xdd, 0x35, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x97, 0xf5, 0xa9, 0xdd, 0x2d,
+	0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/media_file_error.pb.go b/googleapis/ads/googleads/v3/errors/media_file_error.pb.go
new file mode 100644
index 0000000..7e363ac
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/media_file_error.pb.go
@@ -0,0 +1,230 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/media_file_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible media file errors.
+type MediaFileErrorEnum_MediaFileError int32
+
+const (
+	// Enum unspecified.
+	MediaFileErrorEnum_UNSPECIFIED MediaFileErrorEnum_MediaFileError = 0
+	// The received error code is not known in this version.
+	MediaFileErrorEnum_UNKNOWN MediaFileErrorEnum_MediaFileError = 1
+	// Cannot create a standard icon type.
+	MediaFileErrorEnum_CANNOT_CREATE_STANDARD_ICON MediaFileErrorEnum_MediaFileError = 2
+	// May only select Standard Icons alone.
+	MediaFileErrorEnum_CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES MediaFileErrorEnum_MediaFileError = 3
+	// Image contains both a media file ID and data.
+	MediaFileErrorEnum_CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA MediaFileErrorEnum_MediaFileError = 4
+	// A media file with given type and reference ID already exists.
+	MediaFileErrorEnum_DUPLICATE_MEDIA MediaFileErrorEnum_MediaFileError = 5
+	// A required field was not specified or is an empty string.
+	MediaFileErrorEnum_EMPTY_FIELD MediaFileErrorEnum_MediaFileError = 6
+	// A media file may only be modified once per call.
+	MediaFileErrorEnum_RESOURCE_REFERENCED_IN_MULTIPLE_OPS MediaFileErrorEnum_MediaFileError = 7
+	// Field is not supported for the media sub type.
+	MediaFileErrorEnum_FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE MediaFileErrorEnum_MediaFileError = 8
+	// The media file ID is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_FILE_ID MediaFileErrorEnum_MediaFileError = 9
+	// The media subtype is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_SUB_TYPE MediaFileErrorEnum_MediaFileError = 10
+	// The media file type is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_FILE_TYPE MediaFileErrorEnum_MediaFileError = 11
+	// The mimetype is invalid.
+	MediaFileErrorEnum_INVALID_MIME_TYPE MediaFileErrorEnum_MediaFileError = 12
+	// The media reference ID is invalid.
+	MediaFileErrorEnum_INVALID_REFERENCE_ID MediaFileErrorEnum_MediaFileError = 13
+	// The YouTube video ID is invalid.
+	MediaFileErrorEnum_INVALID_YOU_TUBE_ID MediaFileErrorEnum_MediaFileError = 14
+	// Media file has failed transcoding
+	MediaFileErrorEnum_MEDIA_FILE_FAILED_TRANSCODING MediaFileErrorEnum_MediaFileError = 15
+	// Media file has not been transcoded.
+	MediaFileErrorEnum_MEDIA_NOT_TRANSCODED MediaFileErrorEnum_MediaFileError = 16
+	// The media type does not match the actual media file's type.
+	MediaFileErrorEnum_MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE MediaFileErrorEnum_MediaFileError = 17
+	// None of the fields have been specified.
+	MediaFileErrorEnum_NO_FIELDS_SPECIFIED MediaFileErrorEnum_MediaFileError = 18
+	// One of reference ID or media file ID must be specified.
+	MediaFileErrorEnum_NULL_REFERENCE_ID_AND_MEDIA_ID MediaFileErrorEnum_MediaFileError = 19
+	// The string has too many characters.
+	MediaFileErrorEnum_TOO_LONG MediaFileErrorEnum_MediaFileError = 20
+	// The specified type is not supported.
+	MediaFileErrorEnum_UNSUPPORTED_TYPE MediaFileErrorEnum_MediaFileError = 21
+	// YouTube is unavailable for requesting video data.
+	MediaFileErrorEnum_YOU_TUBE_SERVICE_UNAVAILABLE MediaFileErrorEnum_MediaFileError = 22
+	// The YouTube video has a non positive duration.
+	MediaFileErrorEnum_YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION MediaFileErrorEnum_MediaFileError = 23
+	// The YouTube video ID is syntactically valid but the video was not found.
+	MediaFileErrorEnum_YOU_TUBE_VIDEO_NOT_FOUND MediaFileErrorEnum_MediaFileError = 24
+)
+
+var MediaFileErrorEnum_MediaFileError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_CREATE_STANDARD_ICON",
+	3:  "CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES",
+	4:  "CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA",
+	5:  "DUPLICATE_MEDIA",
+	6:  "EMPTY_FIELD",
+	7:  "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
+	8:  "FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE",
+	9:  "INVALID_MEDIA_FILE_ID",
+	10: "INVALID_MEDIA_SUB_TYPE",
+	11: "INVALID_MEDIA_FILE_TYPE",
+	12: "INVALID_MIME_TYPE",
+	13: "INVALID_REFERENCE_ID",
+	14: "INVALID_YOU_TUBE_ID",
+	15: "MEDIA_FILE_FAILED_TRANSCODING",
+	16: "MEDIA_NOT_TRANSCODED",
+	17: "MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE",
+	18: "NO_FIELDS_SPECIFIED",
+	19: "NULL_REFERENCE_ID_AND_MEDIA_ID",
+	20: "TOO_LONG",
+	21: "UNSUPPORTED_TYPE",
+	22: "YOU_TUBE_SERVICE_UNAVAILABLE",
+	23: "YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION",
+	24: "YOU_TUBE_VIDEO_NOT_FOUND",
+}
+
+var MediaFileErrorEnum_MediaFileError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CANNOT_CREATE_STANDARD_ICON": 2,
+	"CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES": 3,
+	"CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA":        4,
+	"DUPLICATE_MEDIA":                              5,
+	"EMPTY_FIELD":                                  6,
+	"RESOURCE_REFERENCED_IN_MULTIPLE_OPS":          7,
+	"FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE":       8,
+	"INVALID_MEDIA_FILE_ID":                        9,
+	"INVALID_MEDIA_SUB_TYPE":                       10,
+	"INVALID_MEDIA_FILE_TYPE":                      11,
+	"INVALID_MIME_TYPE":                            12,
+	"INVALID_REFERENCE_ID":                         13,
+	"INVALID_YOU_TUBE_ID":                          14,
+	"MEDIA_FILE_FAILED_TRANSCODING":                15,
+	"MEDIA_NOT_TRANSCODED":                         16,
+	"MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE":    17,
+	"NO_FIELDS_SPECIFIED":                          18,
+	"NULL_REFERENCE_ID_AND_MEDIA_ID":               19,
+	"TOO_LONG":                                     20,
+	"UNSUPPORTED_TYPE":                             21,
+	"YOU_TUBE_SERVICE_UNAVAILABLE":                 22,
+	"YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION":     23,
+	"YOU_TUBE_VIDEO_NOT_FOUND":                     24,
+}
+
+func (x MediaFileErrorEnum_MediaFileError) String() string {
+	return proto.EnumName(MediaFileErrorEnum_MediaFileError_name, int32(x))
+}
+
+func (MediaFileErrorEnum_MediaFileError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a6f239b6b744c564, []int{0, 0}
+}
+
+// Container for enum describing possible media file errors.
+type MediaFileErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaFileErrorEnum) Reset()         { *m = MediaFileErrorEnum{} }
+func (m *MediaFileErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaFileErrorEnum) ProtoMessage()    {}
+func (*MediaFileErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a6f239b6b744c564, []int{0}
+}
+
+func (m *MediaFileErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFileErrorEnum.Unmarshal(m, b)
+}
+func (m *MediaFileErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFileErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MediaFileErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFileErrorEnum.Merge(m, src)
+}
+func (m *MediaFileErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaFileErrorEnum.Size(m)
+}
+func (m *MediaFileErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFileErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFileErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MediaFileErrorEnum_MediaFileError", MediaFileErrorEnum_MediaFileError_name, MediaFileErrorEnum_MediaFileError_value)
+	proto.RegisterType((*MediaFileErrorEnum)(nil), "google.ads.googleads.v3.errors.MediaFileErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/media_file_error.proto", fileDescriptor_a6f239b6b744c564)
+}
+
+var fileDescriptor_a6f239b6b744c564 = []byte{
+	// 672 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xcb, 0x6e, 0xd3, 0x40,
+	0x14, 0xa5, 0x29, 0xa4, 0x65, 0x5a, 0xda, 0xe9, 0xa4, 0x2f, 0xda, 0x52, 0x20, 0x88, 0x47, 0x51,
+	0x71, 0x90, 0x22, 0x36, 0x66, 0x35, 0xf1, 0x5c, 0x27, 0x23, 0x9c, 0x19, 0xcb, 0x1e, 0xbb, 0x0a,
+	0x8a, 0x34, 0x0a, 0x24, 0x44, 0x91, 0xd2, 0xb8, 0x8a, 0x4b, 0xd7, 0xfc, 0x05, 0x7b, 0x96, 0x7c,
+	0x0a, 0x9f, 0xc2, 0x82, 0x6f, 0x40, 0xf6, 0x24, 0x2e, 0xe1, 0xb5, 0xca, 0xd5, 0x3d, 0xe7, 0xdc,
+	0x73, 0xee, 0xc4, 0x17, 0xbd, 0x1a, 0x26, 0xc9, 0x70, 0x3c, 0xa8, 0xf5, 0xfa, 0x69, 0xcd, 0x94,
+	0x59, 0x75, 0x55, 0xaf, 0x0d, 0xa6, 0xd3, 0x64, 0x9a, 0xd6, 0xce, 0x07, 0xfd, 0x51, 0x4f, 0x7f,
+	0x18, 0x8d, 0x07, 0x3a, 0xef, 0x58, 0x17, 0xd3, 0xe4, 0x32, 0x21, 0xc7, 0x86, 0x6b, 0xf5, 0xfa,
+	0xa9, 0x55, 0xc8, 0xac, 0xab, 0xba, 0x65, 0x64, 0x07, 0x47, 0xf3, 0xb1, 0x17, 0xa3, 0x5a, 0x6f,
+	0x32, 0x49, 0x2e, 0x7b, 0x97, 0xa3, 0x64, 0x92, 0x1a, 0x75, 0xf5, 0x73, 0x19, 0x91, 0x76, 0x36,
+	0xd8, 0x1d, 0x8d, 0x07, 0x90, 0x29, 0x60, 0xf2, 0xf1, 0xbc, 0xfa, 0xa9, 0x8c, 0x36, 0x16, 0xdb,
+	0x64, 0x13, 0xad, 0x45, 0x22, 0xf4, 0xc1, 0xe1, 0x2e, 0x07, 0x86, 0x6f, 0x90, 0x35, 0xb4, 0x12,
+	0x89, 0x37, 0x42, 0x9e, 0x09, 0xbc, 0x44, 0xee, 0xa3, 0x43, 0x87, 0x0a, 0x21, 0x95, 0x76, 0x02,
+	0xa0, 0x0a, 0x74, 0xa8, 0xa8, 0x60, 0x34, 0x60, 0x9a, 0x3b, 0x52, 0xe0, 0x12, 0x79, 0x89, 0x4e,
+	0x67, 0x84, 0x10, 0x3c, 0x70, 0xd4, 0x22, 0x41, 0x9f, 0x71, 0xd5, 0xd2, 0x52, 0xb5, 0x20, 0xd0,
+	0xaa, 0xe3, 0x43, 0x88, 0x97, 0xc9, 0x09, 0x7a, 0x3c, 0x57, 0xe4, 0xae, 0x1d, 0xdd, 0x06, 0xc6,
+	0xa9, 0x76, 0xb9, 0x07, 0x9a, 0x33, 0x4d, 0x05, 0xd3, 0x8c, 0x2a, 0x8a, 0x6f, 0x92, 0x0a, 0xda,
+	0x64, 0x91, 0xef, 0x71, 0x27, 0x73, 0xce, 0x59, 0xf8, 0x56, 0x16, 0x18, 0xda, 0xbe, 0xea, 0x68,
+	0x97, 0x83, 0xc7, 0x70, 0x99, 0x3c, 0x45, 0x8f, 0x02, 0x08, 0x65, 0x14, 0x38, 0xa0, 0x03, 0x70,
+	0x21, 0x00, 0xe1, 0x00, 0xd3, 0x5c, 0xe8, 0x76, 0xe4, 0x29, 0xee, 0x7b, 0xa0, 0xa5, 0x1f, 0xe2,
+	0x15, 0xf2, 0x1c, 0x3d, 0xc9, 0x35, 0x3a, 0x37, 0x8f, 0x7c, 0x5f, 0x06, 0x0a, 0x98, 0x76, 0x65,
+	0x30, 0x8b, 0x10, 0x46, 0x8d, 0x3c, 0x26, 0x5e, 0x25, 0x77, 0xd1, 0x0e, 0x17, 0x31, 0xf5, 0x38,
+	0x5b, 0x8c, 0x87, 0x6f, 0x93, 0x03, 0xb4, 0xbb, 0x08, 0x15, 0x32, 0x44, 0x0e, 0xd1, 0xde, 0x5f,
+	0x64, 0x39, 0xb8, 0x46, 0x76, 0xd0, 0x56, 0x01, 0xf2, 0xf6, 0xac, 0xbd, 0x4e, 0xf6, 0xd1, 0xf6,
+	0xbc, 0x5d, 0xc4, 0xcf, 0x9c, 0xee, 0x90, 0x3d, 0x54, 0x99, 0x23, 0x1d, 0x19, 0x69, 0x15, 0x35,
+	0x72, 0x60, 0x83, 0x3c, 0x44, 0xf7, 0x7e, 0x19, 0xef, 0x52, 0xee, 0x01, 0xd3, 0x2a, 0xa0, 0x22,
+	0x74, 0x24, 0xe3, 0xa2, 0x89, 0x37, 0xb3, 0xa9, 0x86, 0x92, 0x2d, 0x3b, 0x87, 0x80, 0x61, 0x4c,
+	0x5e, 0xa0, 0x13, 0x83, 0x64, 0xfe, 0x9a, 0x49, 0x08, 0x73, 0x4e, 0x9b, 0x2a, 0xa7, 0xf5, 0x47,
+	0xea, 0xad, 0x2c, 0x84, 0x90, 0xe6, 0xb1, 0x43, 0x7d, 0xfd, 0xa1, 0x10, 0x52, 0x45, 0xc7, 0x22,
+	0xf2, 0xbc, 0x85, 0xd0, 0xf9, 0xbf, 0x67, 0x66, 0x70, 0x86, 0x2b, 0x64, 0x1d, 0xad, 0x2a, 0x29,
+	0xb5, 0x27, 0x45, 0x13, 0x6f, 0x93, 0x6d, 0x84, 0x23, 0x71, 0xfd, 0xf0, 0xb9, 0xc1, 0x0e, 0x79,
+	0x80, 0x8e, 0x8a, 0xed, 0x42, 0x08, 0x62, 0xee, 0x80, 0x8e, 0x04, 0x8d, 0x29, 0xf7, 0x68, 0xc3,
+	0x03, 0xbc, 0x4b, 0x4e, 0xd1, 0xb3, 0x82, 0x11, 0x73, 0x06, 0x52, 0xb7, 0x68, 0x16, 0x5a, 0x68,
+	0x5f, 0x86, 0x5c, 0xf1, 0x18, 0x34, 0x8b, 0x02, 0xaa, 0xb8, 0x14, 0x78, 0x8f, 0x1c, 0xa1, 0xfd,
+	0xdf, 0xd8, 0xd9, 0x7a, 0xae, 0x8c, 0x04, 0xc3, 0xfb, 0x8d, 0x1f, 0x4b, 0xa8, 0xfa, 0x3e, 0x39,
+	0xb7, 0xfe, 0x7f, 0x5e, 0x8d, 0xca, 0xe2, 0x99, 0xf8, 0xd9, 0x55, 0xf9, 0x4b, 0x6f, 0xd9, 0x4c,
+	0x36, 0x4c, 0xc6, 0xbd, 0xc9, 0xd0, 0x4a, 0xa6, 0xc3, 0xda, 0x70, 0x30, 0xc9, 0x6f, 0x6e, 0x7e,
+	0xdc, 0x17, 0xa3, 0xf4, 0x5f, 0xb7, 0xfe, 0xda, 0xfc, 0x7c, 0x29, 0x2d, 0x37, 0x29, 0xfd, 0x5a,
+	0x3a, 0x6e, 0x9a, 0x61, 0xb4, 0x9f, 0x5a, 0xa6, 0xcc, 0xaa, 0xb8, 0x6e, 0xe5, 0x96, 0xe9, 0xb7,
+	0x39, 0xa1, 0x4b, 0xfb, 0x69, 0xb7, 0x20, 0x74, 0xe3, 0x7a, 0xd7, 0x10, 0xbe, 0x97, 0xaa, 0xa6,
+	0x6b, 0xdb, 0xb4, 0x9f, 0xda, 0x76, 0x41, 0xb1, 0xed, 0xb8, 0x6e, 0xdb, 0x86, 0xf4, 0xae, 0x9c,
+	0xa7, 0xab, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x9e, 0xce, 0x44, 0x88, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/media_upload_error.pb.go b/googleapis/ads/googleads/v3/errors/media_upload_error.pb.go
new file mode 100644
index 0000000..a3421f9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/media_upload_error.pb.go
@@ -0,0 +1,151 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/media_upload_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible media uploading errors.
+type MediaUploadErrorEnum_MediaUploadError int32
+
+const (
+	// Enum unspecified.
+	MediaUploadErrorEnum_UNSPECIFIED MediaUploadErrorEnum_MediaUploadError = 0
+	// The received error code is not known in this version.
+	MediaUploadErrorEnum_UNKNOWN MediaUploadErrorEnum_MediaUploadError = 1
+	// The uploaded file is too big.
+	MediaUploadErrorEnum_FILE_TOO_BIG MediaUploadErrorEnum_MediaUploadError = 2
+	// Image data is unparseable.
+	MediaUploadErrorEnum_UNPARSEABLE_IMAGE MediaUploadErrorEnum_MediaUploadError = 3
+	// Animated images are not allowed.
+	MediaUploadErrorEnum_ANIMATED_IMAGE_NOT_ALLOWED MediaUploadErrorEnum_MediaUploadError = 4
+	// The image or media bundle format is not allowed.
+	MediaUploadErrorEnum_FORMAT_NOT_ALLOWED MediaUploadErrorEnum_MediaUploadError = 5
+	// Cannot reference URL external to the media bundle.
+	MediaUploadErrorEnum_EXTERNAL_URL_NOT_ALLOWED MediaUploadErrorEnum_MediaUploadError = 6
+	// HTML5 ad is trying to reference an asset not in .ZIP file.
+	MediaUploadErrorEnum_INVALID_URL_REFERENCE MediaUploadErrorEnum_MediaUploadError = 7
+	// The media bundle contains no primary entry.
+	MediaUploadErrorEnum_MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY MediaUploadErrorEnum_MediaUploadError = 8
+)
+
+var MediaUploadErrorEnum_MediaUploadError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FILE_TOO_BIG",
+	3: "UNPARSEABLE_IMAGE",
+	4: "ANIMATED_IMAGE_NOT_ALLOWED",
+	5: "FORMAT_NOT_ALLOWED",
+	6: "EXTERNAL_URL_NOT_ALLOWED",
+	7: "INVALID_URL_REFERENCE",
+	8: "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY",
+}
+
+var MediaUploadErrorEnum_MediaUploadError_value = map[string]int32{
+	"UNSPECIFIED":                        0,
+	"UNKNOWN":                            1,
+	"FILE_TOO_BIG":                       2,
+	"UNPARSEABLE_IMAGE":                  3,
+	"ANIMATED_IMAGE_NOT_ALLOWED":         4,
+	"FORMAT_NOT_ALLOWED":                 5,
+	"EXTERNAL_URL_NOT_ALLOWED":           6,
+	"INVALID_URL_REFERENCE":              7,
+	"MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY": 8,
+}
+
+func (x MediaUploadErrorEnum_MediaUploadError) String() string {
+	return proto.EnumName(MediaUploadErrorEnum_MediaUploadError_name, int32(x))
+}
+
+func (MediaUploadErrorEnum_MediaUploadError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_982d4add0547991f, []int{0, 0}
+}
+
+// Container for enum describing possible media uploading errors.
+type MediaUploadErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaUploadErrorEnum) Reset()         { *m = MediaUploadErrorEnum{} }
+func (m *MediaUploadErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaUploadErrorEnum) ProtoMessage()    {}
+func (*MediaUploadErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_982d4add0547991f, []int{0}
+}
+
+func (m *MediaUploadErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaUploadErrorEnum.Unmarshal(m, b)
+}
+func (m *MediaUploadErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaUploadErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MediaUploadErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaUploadErrorEnum.Merge(m, src)
+}
+func (m *MediaUploadErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaUploadErrorEnum.Size(m)
+}
+func (m *MediaUploadErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaUploadErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaUploadErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MediaUploadErrorEnum_MediaUploadError", MediaUploadErrorEnum_MediaUploadError_name, MediaUploadErrorEnum_MediaUploadError_value)
+	proto.RegisterType((*MediaUploadErrorEnum)(nil), "google.ads.googleads.v3.errors.MediaUploadErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/media_upload_error.proto", fileDescriptor_982d4add0547991f)
+}
+
+var fileDescriptor_982d4add0547991f = []byte{
+	// 421 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcf, 0x8a, 0xd3, 0x40,
+	0x1c, 0xb6, 0x59, 0xdd, 0x95, 0x59, 0xc1, 0x71, 0xb0, 0xa2, 0xcb, 0xd2, 0x43, 0x0e, 0x1e, 0x27,
+	0x87, 0x1c, 0x84, 0x78, 0x9a, 0x6c, 0x7e, 0x0d, 0x83, 0xc9, 0x24, 0x4c, 0x93, 0xae, 0x2b, 0x85,
+	0x21, 0x9a, 0x12, 0x0a, 0x6d, 0x26, 0x64, 0xba, 0xfb, 0x12, 0xbe, 0x85, 0x47, 0x1f, 0xc5, 0x47,
+	0xf1, 0x24, 0x3e, 0x81, 0x24, 0x63, 0x0b, 0xbb, 0xa0, 0xa7, 0x7c, 0x7c, 0xff, 0x32, 0x7c, 0x3f,
+	0xf4, 0xae, 0xd1, 0xba, 0xd9, 0xae, 0xbd, 0xaa, 0x36, 0x9e, 0x85, 0x03, 0xba, 0xf3, 0xbd, 0x75,
+	0xdf, 0xeb, 0xde, 0x78, 0xbb, 0x75, 0xbd, 0xa9, 0xd4, 0x6d, 0xb7, 0xd5, 0x55, 0xad, 0x46, 0x8e,
+	0x76, 0xbd, 0xde, 0x6b, 0x32, 0xb3, 0x6e, 0x5a, 0xd5, 0x86, 0x1e, 0x83, 0xf4, 0xce, 0xa7, 0x36,
+	0x78, 0x71, 0x79, 0x28, 0xee, 0x36, 0x5e, 0xd5, 0xb6, 0x7a, 0x5f, 0xed, 0x37, 0xba, 0x35, 0x36,
+	0xed, 0x7e, 0x75, 0xd0, 0xcb, 0x74, 0xa8, 0x2e, 0xc7, 0x66, 0x18, 0x32, 0xd0, 0xde, 0xee, 0xdc,
+	0xdf, 0x13, 0x84, 0x1f, 0x0a, 0xe4, 0x39, 0x3a, 0x2f, 0xc5, 0x22, 0x87, 0x2b, 0x3e, 0xe7, 0x10,
+	0xe1, 0x47, 0xe4, 0x1c, 0x9d, 0x95, 0xe2, 0x83, 0xc8, 0xae, 0x05, 0x9e, 0x10, 0x8c, 0x9e, 0xcd,
+	0x79, 0x02, 0xaa, 0xc8, 0x32, 0x15, 0xf2, 0x18, 0x3b, 0x64, 0x8a, 0x5e, 0x94, 0x22, 0x67, 0x72,
+	0x01, 0x2c, 0x4c, 0x40, 0xf1, 0x94, 0xc5, 0x80, 0x4f, 0xc8, 0x0c, 0x5d, 0x30, 0xc1, 0x53, 0x56,
+	0x40, 0x64, 0x39, 0x25, 0xb2, 0x42, 0xb1, 0x24, 0xc9, 0xae, 0x21, 0xc2, 0x8f, 0xc9, 0x2b, 0x44,
+	0xe6, 0x99, 0x4c, 0x59, 0x71, 0x8f, 0x7f, 0x42, 0x2e, 0xd1, 0x6b, 0xf8, 0x58, 0x80, 0x14, 0x2c,
+	0x51, 0xa5, 0x4c, 0xee, 0xa9, 0xa7, 0xe4, 0x0d, 0x9a, 0x72, 0xb1, 0x64, 0x09, 0x8f, 0x46, 0x51,
+	0xc2, 0x1c, 0x24, 0x88, 0x2b, 0xc0, 0x67, 0xe4, 0x2d, 0x72, 0x53, 0xbe, 0x58, 0x70, 0x11, 0xab,
+	0x5c, 0xf2, 0x94, 0xc9, 0x1b, 0x95, 0x42, 0xc4, 0x99, 0x0a, 0x4b, 0x11, 0x25, 0xa0, 0x40, 0x14,
+	0xf2, 0x06, 0x3f, 0x0d, 0x7f, 0x4d, 0x90, 0xfb, 0x45, 0xef, 0xe8, 0xff, 0x27, 0x0d, 0xa7, 0x0f,
+	0x87, 0xc9, 0x87, 0x2d, 0xf3, 0xc9, 0xa7, 0xe8, 0x6f, 0xb0, 0xd1, 0xdb, 0xaa, 0x6d, 0xa8, 0xee,
+	0x1b, 0xaf, 0x59, 0xb7, 0xe3, 0xd2, 0x87, 0xa3, 0x76, 0x1b, 0xf3, 0xaf, 0x1b, 0xbf, 0xb7, 0x9f,
+	0x6f, 0xce, 0x49, 0xcc, 0xd8, 0x77, 0x67, 0x16, 0xdb, 0x32, 0x56, 0x1b, 0x6a, 0xe1, 0x80, 0x96,
+	0x3e, 0x1d, 0x7f, 0x69, 0x7e, 0x1c, 0x0c, 0x2b, 0x56, 0x9b, 0xd5, 0xd1, 0xb0, 0x5a, 0xfa, 0x2b,
+	0x6b, 0xf8, 0xe9, 0xb8, 0x96, 0x0d, 0x02, 0x56, 0x9b, 0x20, 0x38, 0x5a, 0x82, 0x60, 0xe9, 0x07,
+	0x81, 0x35, 0x7d, 0x3e, 0x1d, 0x5f, 0xe7, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x42, 0x05, 0x58,
+	0x25, 0x80, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/multiplier_error.pb.go b/googleapis/ads/googleads/v3/errors/multiplier_error.pb.go
new file mode 100644
index 0000000..d679a6d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/multiplier_error.pb.go
@@ -0,0 +1,178 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/multiplier_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible multiplier errors.
+type MultiplierErrorEnum_MultiplierError int32
+
+const (
+	// Enum unspecified.
+	MultiplierErrorEnum_UNSPECIFIED MultiplierErrorEnum_MultiplierError = 0
+	// The received error code is not known in this version.
+	MultiplierErrorEnum_UNKNOWN MultiplierErrorEnum_MultiplierError = 1
+	// Multiplier value is too high
+	MultiplierErrorEnum_MULTIPLIER_TOO_HIGH MultiplierErrorEnum_MultiplierError = 2
+	// Multiplier value is too low
+	MultiplierErrorEnum_MULTIPLIER_TOO_LOW MultiplierErrorEnum_MultiplierError = 3
+	// Too many fractional digits
+	MultiplierErrorEnum_TOO_MANY_FRACTIONAL_DIGITS MultiplierErrorEnum_MultiplierError = 4
+	// A multiplier cannot be set for this bidding strategy
+	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY MultiplierErrorEnum_MultiplierError = 5
+	// A multiplier cannot be set when there is no base bid (e.g., content max
+	// cpc)
+	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING MultiplierErrorEnum_MultiplierError = 6
+	// A bid multiplier must be specified
+	MultiplierErrorEnum_NO_MULTIPLIER_SPECIFIED MultiplierErrorEnum_MultiplierError = 7
+	// Multiplier causes bid to exceed daily budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET MultiplierErrorEnum_MultiplierError = 8
+	// Multiplier causes bid to exceed monthly budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET MultiplierErrorEnum_MultiplierError = 9
+	// Multiplier causes bid to exceed custom budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET MultiplierErrorEnum_MultiplierError = 10
+	// Multiplier causes bid to exceed maximum allowed bid
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID MultiplierErrorEnum_MultiplierError = 11
+	// Multiplier causes bid to become less than the minimum bid allowed
+	MultiplierErrorEnum_BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER MultiplierErrorEnum_MultiplierError = 12
+	// Multiplier type (cpc vs. cpm) needs to match campaign's bidding strategy
+	MultiplierErrorEnum_MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH MultiplierErrorEnum_MultiplierError = 13
+)
+
+var MultiplierErrorEnum_MultiplierError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "MULTIPLIER_TOO_HIGH",
+	3:  "MULTIPLIER_TOO_LOW",
+	4:  "TOO_MANY_FRACTIONAL_DIGITS",
+	5:  "MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY",
+	6:  "MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING",
+	7:  "NO_MULTIPLIER_SPECIFIED",
+	8:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET",
+	9:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET",
+	10: "MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET",
+	11: "MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID",
+	12: "BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER",
+	13: "MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH",
+}
+
+var MultiplierErrorEnum_MultiplierError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"MULTIPLIER_TOO_HIGH":        2,
+	"MULTIPLIER_TOO_LOW":         3,
+	"TOO_MANY_FRACTIONAL_DIGITS": 4,
+	"MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY":     5,
+	"MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING": 6,
+	"NO_MULTIPLIER_SPECIFIED":                         7,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET":    8,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET":  9,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET":   10,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID": 11,
+	"BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER":   12,
+	"MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH":   13,
+}
+
+func (x MultiplierErrorEnum_MultiplierError) String() string {
+	return proto.EnumName(MultiplierErrorEnum_MultiplierError_name, int32(x))
+}
+
+func (MultiplierErrorEnum_MultiplierError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6fca1f045fa667f7, []int{0, 0}
+}
+
+// Container for enum describing possible multiplier errors.
+type MultiplierErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MultiplierErrorEnum) Reset()         { *m = MultiplierErrorEnum{} }
+func (m *MultiplierErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MultiplierErrorEnum) ProtoMessage()    {}
+func (*MultiplierErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6fca1f045fa667f7, []int{0}
+}
+
+func (m *MultiplierErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MultiplierErrorEnum.Unmarshal(m, b)
+}
+func (m *MultiplierErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MultiplierErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MultiplierErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MultiplierErrorEnum.Merge(m, src)
+}
+func (m *MultiplierErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MultiplierErrorEnum.Size(m)
+}
+func (m *MultiplierErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MultiplierErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MultiplierErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MultiplierErrorEnum_MultiplierError", MultiplierErrorEnum_MultiplierError_name, MultiplierErrorEnum_MultiplierError_value)
+	proto.RegisterType((*MultiplierErrorEnum)(nil), "google.ads.googleads.v3.errors.MultiplierErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/multiplier_error.proto", fileDescriptor_6fca1f045fa667f7)
+}
+
+var fileDescriptor_6fca1f045fa667f7 = []byte{
+	// 521 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xc1, 0x8e, 0xd3, 0x30,
+	0x10, 0x86, 0x69, 0xb7, 0xec, 0x82, 0x0b, 0x5a, 0xcb, 0x8b, 0x58, 0x69, 0x41, 0x3d, 0xf4, 0x0a,
+	0x24, 0x40, 0xc4, 0x25, 0x9c, 0x9c, 0xd8, 0x4d, 0x2c, 0x12, 0xbb, 0xaa, 0x9d, 0x76, 0x8b, 0x2a,
+	0x59, 0x85, 0x56, 0x51, 0xa5, 0x36, 0xa9, 0x92, 0xee, 0x3e, 0x10, 0x47, 0x5e, 0x80, 0x77, 0xe0,
+	0xc2, 0x7b, 0x70, 0xe1, 0x15, 0x50, 0x6a, 0xda, 0xad, 0x02, 0xcb, 0x9e, 0x32, 0x19, 0xff, 0xdf,
+	0x8c, 0x67, 0xf4, 0x1b, 0xbc, 0x4b, 0xf3, 0x3c, 0x5d, 0xce, 0xed, 0xe9, 0xac, 0xb4, 0x4d, 0x58,
+	0x45, 0xd7, 0x8e, 0x3d, 0x2f, 0x8a, 0xbc, 0x28, 0xed, 0xd5, 0xd5, 0x72, 0xb3, 0x58, 0x2f, 0x17,
+	0xf3, 0x42, 0x6f, 0x33, 0xd6, 0xba, 0xc8, 0x37, 0x39, 0xea, 0x18, 0xad, 0x35, 0x9d, 0x95, 0xd6,
+	0x1e, 0xb3, 0xae, 0x1d, 0xcb, 0x60, 0x17, 0xcf, 0x77, 0x65, 0xd7, 0x0b, 0x7b, 0x9a, 0x65, 0xf9,
+	0x66, 0xba, 0x59, 0xe4, 0x59, 0x69, 0xe8, 0xee, 0x8f, 0x16, 0x38, 0x8b, 0xf7, 0x85, 0x69, 0x85,
+	0xd0, 0xec, 0x6a, 0xd5, 0xfd, 0xd6, 0x02, 0xa7, 0xb5, 0x3c, 0x3a, 0x05, 0xed, 0x84, 0xcb, 0x3e,
+	0xf5, 0x59, 0x8f, 0x51, 0x02, 0xef, 0xa1, 0x36, 0x38, 0x49, 0xf8, 0x07, 0x2e, 0x46, 0x1c, 0x36,
+	0xd0, 0x39, 0x38, 0x8b, 0x93, 0x48, 0xb1, 0x7e, 0xc4, 0xe8, 0x40, 0x2b, 0x21, 0x74, 0xc8, 0x82,
+	0x10, 0x36, 0xd1, 0x53, 0x80, 0x6a, 0x07, 0x91, 0x18, 0xc1, 0x23, 0xd4, 0x01, 0x17, 0xd5, 0x4f,
+	0x8c, 0xf9, 0x58, 0xf7, 0x06, 0xd8, 0x57, 0x4c, 0x70, 0x1c, 0x69, 0xc2, 0x02, 0xa6, 0x24, 0x6c,
+	0x21, 0x1b, 0xbc, 0x38, 0xe0, 0xb8, 0x50, 0x1a, 0x47, 0x91, 0x18, 0x51, 0xa2, 0x7b, 0x62, 0xa0,
+	0x3d, 0x46, 0x08, 0xe3, 0x81, 0x96, 0x6a, 0x80, 0x15, 0x0d, 0xc6, 0xf0, 0x3e, 0x72, 0x80, 0x7d,
+	0x0b, 0x30, 0x0a, 0x29, 0xd7, 0x1e, 0x96, 0xb4, 0xc2, 0x34, 0x93, 0x3a, 0x66, 0x52, 0x32, 0x1e,
+	0xc0, 0x63, 0xf4, 0x0c, 0x9c, 0x73, 0xa1, 0x0f, 0xb8, 0x9b, 0x01, 0x4f, 0xd0, 0x6b, 0xf0, 0xf2,
+	0xe0, 0xc4, 0xc7, 0x89, 0xa4, 0x72, 0x5b, 0x42, 0x09, 0x4d, 0x2f, 0x7d, 0x4a, 0x89, 0x26, 0x98,
+	0x45, 0x63, 0xed, 0x25, 0x24, 0xa0, 0x0a, 0x3e, 0x40, 0x6f, 0x81, 0x75, 0x17, 0x11, 0x0b, 0xae,
+	0xc2, 0x1b, 0xe6, 0x21, 0x7a, 0x03, 0x5e, 0xdd, 0xc5, 0xf8, 0x89, 0x54, 0x22, 0xde, 0x21, 0xa0,
+	0x36, 0xea, 0xbf, 0xdb, 0xe0, 0xcb, 0xfd, 0xfc, 0x1e, 0x23, 0xb0, 0x5d, 0xf5, 0xa9, 0x24, 0x11,
+	0x95, 0x52, 0xab, 0x10, 0x73, 0x1d, 0x33, 0x7e, 0x28, 0xd1, 0x23, 0xa6, 0xc2, 0x83, 0x55, 0xc0,
+	0x47, 0xb5, 0xab, 0x61, 0x4e, 0xfe, 0xda, 0xbb, 0x56, 0xe3, 0x3e, 0xad, 0xf6, 0x19, 0x63, 0xe5,
+	0x87, 0xf0, 0xb1, 0xf7, 0xab, 0x01, 0xba, 0x9f, 0xf3, 0x95, 0xf5, 0x7f, 0x5b, 0x7a, 0x4f, 0x6a,
+	0xee, 0xea, 0x57, 0x76, 0xec, 0x37, 0x3e, 0x92, 0x3f, 0x5c, 0x9a, 0x2f, 0xa7, 0x59, 0x6a, 0xe5,
+	0x45, 0x6a, 0xa7, 0xf3, 0x6c, 0x6b, 0xd6, 0xdd, 0xab, 0x58, 0x2f, 0xca, 0xdb, 0x1e, 0xc9, 0x7b,
+	0xf3, 0xf9, 0xd2, 0x3c, 0x0a, 0x30, 0xfe, 0xda, 0xec, 0x04, 0xa6, 0x18, 0x9e, 0x95, 0x96, 0x09,
+	0xab, 0x68, 0xe8, 0x58, 0xdb, 0x96, 0xe5, 0xf7, 0x9d, 0x60, 0x82, 0x67, 0xe5, 0x64, 0x2f, 0x98,
+	0x0c, 0x9d, 0x89, 0x11, 0xfc, 0x6c, 0x76, 0x4d, 0xd6, 0x75, 0xf1, 0xac, 0x74, 0xdd, 0xbd, 0xc4,
+	0x75, 0x87, 0x8e, 0xeb, 0x1a, 0xd1, 0xa7, 0xe3, 0xed, 0xed, 0x9c, 0xdf, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x59, 0x40, 0x32, 0xd8, 0xc1, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/mutate_error.pb.go b/googleapis/ads/googleads/v3/errors/mutate_error.pb.go
new file mode 100644
index 0000000..26077b0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/mutate_error.pb.go
@@ -0,0 +1,146 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/mutate_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible mutate errors.
+type MutateErrorEnum_MutateError int32
+
+const (
+	// Enum unspecified.
+	MutateErrorEnum_UNSPECIFIED MutateErrorEnum_MutateError = 0
+	// The received error code is not known in this version.
+	MutateErrorEnum_UNKNOWN MutateErrorEnum_MutateError = 1
+	// Requested resource was not found.
+	MutateErrorEnum_RESOURCE_NOT_FOUND MutateErrorEnum_MutateError = 3
+	// Cannot mutate the same resource twice in one request.
+	MutateErrorEnum_ID_EXISTS_IN_MULTIPLE_MUTATES MutateErrorEnum_MutateError = 7
+	// The field's contents don't match another field that represents the same
+	// data.
+	MutateErrorEnum_INCONSISTENT_FIELD_VALUES MutateErrorEnum_MutateError = 8
+	// Mutates are not allowed for the requested resource.
+	MutateErrorEnum_MUTATE_NOT_ALLOWED MutateErrorEnum_MutateError = 9
+	// The resource isn't in Google Ads. It belongs to another ads system.
+	MutateErrorEnum_RESOURCE_NOT_IN_GOOGLE_ADS MutateErrorEnum_MutateError = 10
+	// The resource being created already exists.
+	MutateErrorEnum_RESOURCE_ALREADY_EXISTS MutateErrorEnum_MutateError = 11
+)
+
+var MutateErrorEnum_MutateError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "RESOURCE_NOT_FOUND",
+	7:  "ID_EXISTS_IN_MULTIPLE_MUTATES",
+	8:  "INCONSISTENT_FIELD_VALUES",
+	9:  "MUTATE_NOT_ALLOWED",
+	10: "RESOURCE_NOT_IN_GOOGLE_ADS",
+	11: "RESOURCE_ALREADY_EXISTS",
+}
+
+var MutateErrorEnum_MutateError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"RESOURCE_NOT_FOUND":            3,
+	"ID_EXISTS_IN_MULTIPLE_MUTATES": 7,
+	"INCONSISTENT_FIELD_VALUES":     8,
+	"MUTATE_NOT_ALLOWED":            9,
+	"RESOURCE_NOT_IN_GOOGLE_ADS":    10,
+	"RESOURCE_ALREADY_EXISTS":       11,
+}
+
+func (x MutateErrorEnum_MutateError) String() string {
+	return proto.EnumName(MutateErrorEnum_MutateError_name, int32(x))
+}
+
+func (MutateErrorEnum_MutateError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_29e86d4daa207c30, []int{0, 0}
+}
+
+// Container for enum describing possible mutate errors.
+type MutateErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateErrorEnum) Reset()         { *m = MutateErrorEnum{} }
+func (m *MutateErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MutateErrorEnum) ProtoMessage()    {}
+func (*MutateErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_29e86d4daa207c30, []int{0}
+}
+
+func (m *MutateErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateErrorEnum.Unmarshal(m, b)
+}
+func (m *MutateErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MutateErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateErrorEnum.Merge(m, src)
+}
+func (m *MutateErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MutateErrorEnum.Size(m)
+}
+func (m *MutateErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MutateErrorEnum_MutateError", MutateErrorEnum_MutateError_name, MutateErrorEnum_MutateError_value)
+	proto.RegisterType((*MutateErrorEnum)(nil), "google.ads.googleads.v3.errors.MutateErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/mutate_error.proto", fileDescriptor_29e86d4daa207c30)
+}
+
+var fileDescriptor_29e86d4daa207c30 = []byte{
+	// 399 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x8e, 0xd3, 0x30,
+	0x18, 0x85, 0x49, 0x47, 0x62, 0xc0, 0x5d, 0x8c, 0xe5, 0x05, 0x88, 0x81, 0xa9, 0x44, 0x0f, 0xe0,
+	0x08, 0x65, 0x67, 0x56, 0x9e, 0xda, 0xad, 0x2c, 0x5c, 0xbb, 0xaa, 0x93, 0x0e, 0xa0, 0x4a, 0x56,
+	0x20, 0x51, 0x54, 0x69, 0x1a, 0x57, 0x71, 0x66, 0x0e, 0xc4, 0x92, 0xa3, 0x70, 0x04, 0x8e, 0x00,
+	0x12, 0x67, 0x40, 0x89, 0xa7, 0x51, 0x59, 0x30, 0xab, 0xbc, 0xd8, 0xdf, 0x7b, 0xfe, 0xf5, 0x7e,
+	0xf0, 0xae, 0x72, 0xae, 0xba, 0x2d, 0xe3, 0xbc, 0xf0, 0x71, 0x90, 0x9d, 0xba, 0x4f, 0xe2, 0xb2,
+	0x69, 0x5c, 0xe3, 0xe3, 0xfd, 0x5d, 0x9b, 0xb7, 0xa5, 0xed, 0xff, 0xf0, 0xa1, 0x71, 0xad, 0x43,
+	0x93, 0xc0, 0xe1, 0xbc, 0xf0, 0x78, 0xb0, 0xe0, 0xfb, 0x04, 0x07, 0xcb, 0xe5, 0x9b, 0x63, 0xe4,
+	0x61, 0x17, 0xe7, 0x75, 0xed, 0xda, 0xbc, 0xdd, 0xb9, 0xda, 0x07, 0xf7, 0xf4, 0x4f, 0x04, 0x2e,
+	0x96, 0x7d, 0x28, 0xef, 0x70, 0x5e, 0xdf, 0xed, 0xa7, 0x3f, 0x23, 0x30, 0x3e, 0x39, 0x43, 0x17,
+	0x60, 0x9c, 0x29, 0xb3, 0xe2, 0x33, 0x31, 0x17, 0x9c, 0xc1, 0x27, 0x68, 0x0c, 0xce, 0x33, 0xf5,
+	0x41, 0xe9, 0x1b, 0x05, 0x23, 0xf4, 0x02, 0xa0, 0x35, 0x37, 0x3a, 0x5b, 0xcf, 0xb8, 0x55, 0x3a,
+	0xb5, 0x73, 0x9d, 0x29, 0x06, 0xcf, 0xd0, 0x5b, 0x70, 0x25, 0x98, 0xe5, 0x1f, 0x85, 0x49, 0x8d,
+	0x15, 0xca, 0x2e, 0x33, 0x99, 0x8a, 0x95, 0xe4, 0x76, 0x99, 0xa5, 0x34, 0xe5, 0x06, 0x9e, 0xa3,
+	0x2b, 0xf0, 0x4a, 0xa8, 0x99, 0x56, 0x46, 0x98, 0x94, 0xab, 0xd4, 0xce, 0x05, 0x97, 0xcc, 0x6e,
+	0xa8, 0xcc, 0xb8, 0x81, 0xcf, 0xba, 0xe4, 0xc0, 0xf6, 0xb9, 0x54, 0x4a, 0x7d, 0xc3, 0x19, 0x7c,
+	0x8e, 0x26, 0xe0, 0xf2, 0x9f, 0x17, 0x85, 0xb2, 0x0b, 0xad, 0x17, 0x92, 0x5b, 0xca, 0x0c, 0x04,
+	0xe8, 0x35, 0x78, 0x39, 0xdc, 0x53, 0xb9, 0xe6, 0x94, 0x7d, 0x7a, 0x98, 0x03, 0x8e, 0xaf, 0x7f,
+	0x47, 0x60, 0xfa, 0xd5, 0xed, 0xf1, 0xe3, 0xad, 0x5d, 0xc3, 0x93, 0x02, 0x56, 0x5d, 0x53, 0xab,
+	0xe8, 0x33, 0x7b, 0xf0, 0x54, 0xee, 0x36, 0xaf, 0x2b, 0xec, 0x9a, 0x2a, 0xae, 0xca, 0xba, 0xef,
+	0xf1, 0xb8, 0xac, 0xc3, 0xce, 0xff, 0x6f, 0x77, 0xef, 0xc3, 0xe7, 0xdb, 0xe8, 0x6c, 0x41, 0xe9,
+	0xf7, 0xd1, 0x64, 0x11, 0xc2, 0x68, 0xe1, 0x71, 0x90, 0x9d, 0xda, 0x24, 0xb8, 0x7f, 0xd2, 0xff,
+	0x38, 0x02, 0x5b, 0x5a, 0xf8, 0xed, 0x00, 0x6c, 0x37, 0xc9, 0x36, 0x00, 0xbf, 0x46, 0xd3, 0x70,
+	0x4a, 0x08, 0x2d, 0x3c, 0x21, 0x03, 0x42, 0xc8, 0x26, 0x21, 0x24, 0x40, 0x5f, 0x9e, 0xf6, 0xd3,
+	0x25, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x09, 0x19, 0x3b, 0x84, 0x58, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/mutate_job_error.pb.go b/googleapis/ads/googleads/v3/errors/mutate_job_error.pb.go
new file mode 100644
index 0000000..883a95c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/mutate_job_error.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/mutate_job_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible request errors.
+type MutateJobErrorEnum_MutateJobError int32
+
+const (
+	// Enum unspecified.
+	MutateJobErrorEnum_UNSPECIFIED MutateJobErrorEnum_MutateJobError = 0
+	// The received error code is not known in this version.
+	MutateJobErrorEnum_UNKNOWN MutateJobErrorEnum_MutateJobError = 1
+	// The mutate job cannot add more operations or run after it has started
+	// running.
+	MutateJobErrorEnum_CANNOT_MODIFY_JOB_AFTER_JOB_STARTS_RUNNING MutateJobErrorEnum_MutateJobError = 2
+	// The operations for an AddMutateJobOperations request were empty.
+	MutateJobErrorEnum_EMPTY_OPERATIONS MutateJobErrorEnum_MutateJobError = 3
+	// The sequence token for an AddMutateJobOperations request was invalid.
+	MutateJobErrorEnum_INVALID_SEQUENCE_TOKEN MutateJobErrorEnum_MutateJobError = 4
+	// Mutate Job Results can only be retrieved once the job is finished.
+	MutateJobErrorEnum_RESULTS_NOT_READY MutateJobErrorEnum_MutateJobError = 5
+	// The page size for ListMutateJobResults was invalid.
+	MutateJobErrorEnum_INVALID_PAGE_SIZE MutateJobErrorEnum_MutateJobError = 6
+)
+
+var MutateJobErrorEnum_MutateJobError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_MODIFY_JOB_AFTER_JOB_STARTS_RUNNING",
+	3: "EMPTY_OPERATIONS",
+	4: "INVALID_SEQUENCE_TOKEN",
+	5: "RESULTS_NOT_READY",
+	6: "INVALID_PAGE_SIZE",
+}
+
+var MutateJobErrorEnum_MutateJobError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CANNOT_MODIFY_JOB_AFTER_JOB_STARTS_RUNNING": 2,
+	"EMPTY_OPERATIONS":                           3,
+	"INVALID_SEQUENCE_TOKEN":                     4,
+	"RESULTS_NOT_READY":                          5,
+	"INVALID_PAGE_SIZE":                          6,
+}
+
+func (x MutateJobErrorEnum_MutateJobError) String() string {
+	return proto.EnumName(MutateJobErrorEnum_MutateJobError_name, int32(x))
+}
+
+func (MutateJobErrorEnum_MutateJobError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa41785fa27c2e49, []int{0, 0}
+}
+
+// Container for enum describing possible mutate job errors.
+type MutateJobErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateJobErrorEnum) Reset()         { *m = MutateJobErrorEnum{} }
+func (m *MutateJobErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MutateJobErrorEnum) ProtoMessage()    {}
+func (*MutateJobErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa41785fa27c2e49, []int{0}
+}
+
+func (m *MutateJobErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateJobErrorEnum.Unmarshal(m, b)
+}
+func (m *MutateJobErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateJobErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *MutateJobErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateJobErrorEnum.Merge(m, src)
+}
+func (m *MutateJobErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MutateJobErrorEnum.Size(m)
+}
+func (m *MutateJobErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateJobErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateJobErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.MutateJobErrorEnum_MutateJobError", MutateJobErrorEnum_MutateJobError_name, MutateJobErrorEnum_MutateJobError_value)
+	proto.RegisterType((*MutateJobErrorEnum)(nil), "google.ads.googleads.v3.errors.MutateJobErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/mutate_job_error.proto", fileDescriptor_fa41785fa27c2e49)
+}
+
+var fileDescriptor_fa41785fa27c2e49 = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x6e, 0xd4, 0x30,
+	0x18, 0xc5, 0xc9, 0x14, 0x8a, 0xe4, 0x4a, 0x60, 0xcc, 0x9f, 0x45, 0x85, 0xba, 0x98, 0x25, 0x0b,
+	0x67, 0x11, 0xb1, 0x31, 0x2b, 0xcf, 0xc4, 0x13, 0xb9, 0xed, 0x38, 0x21, 0x76, 0x82, 0xa6, 0x8a,
+	0x64, 0x65, 0x48, 0x14, 0x0d, 0xea, 0xc4, 0xa3, 0x38, 0xed, 0x81, 0x58, 0x72, 0x08, 0x0e, 0xc0,
+	0x9e, 0x4b, 0xb0, 0xe0, 0x0c, 0x28, 0x31, 0x19, 0xa9, 0x0b, 0x58, 0xe5, 0xe9, 0xe9, 0xfd, 0xbe,
+	0x2f, 0x7e, 0x1f, 0x78, 0xdf, 0x18, 0xd3, 0xdc, 0xd6, 0x7e, 0x59, 0x59, 0xdf, 0xc9, 0x41, 0xdd,
+	0x07, 0x7e, 0xdd, 0x75, 0xa6, 0xb3, 0xfe, 0xfe, 0xae, 0x2f, 0xfb, 0x5a, 0x7f, 0x31, 0x5b, 0x3d,
+	0x3a, 0xf8, 0xd0, 0x99, 0xde, 0xa0, 0x0b, 0x97, 0xc5, 0x65, 0x65, 0xf1, 0x11, 0xc3, 0xf7, 0x01,
+	0x76, 0xd8, 0xf9, 0xdb, 0x69, 0xec, 0x61, 0xe7, 0x97, 0x6d, 0x6b, 0xfa, 0xb2, 0xdf, 0x99, 0xd6,
+	0x3a, 0x7a, 0xfe, 0xd3, 0x03, 0x68, 0x3d, 0x0e, 0xbe, 0x34, 0x5b, 0x36, 0x10, 0xac, 0xbd, 0xdb,
+	0xcf, 0xbf, 0x7b, 0xe0, 0xd9, 0x43, 0x1b, 0x3d, 0x07, 0x67, 0x99, 0x90, 0x09, 0x5b, 0xf2, 0x15,
+	0x67, 0x21, 0x7c, 0x84, 0xce, 0xc0, 0xd3, 0x4c, 0x5c, 0x89, 0xf8, 0x93, 0x80, 0x1e, 0xc2, 0xe0,
+	0xdd, 0x92, 0x0a, 0x11, 0x2b, 0xbd, 0x8e, 0x43, 0xbe, 0xda, 0xe8, 0xcb, 0x78, 0xa1, 0xe9, 0x4a,
+	0xb1, 0x74, 0x54, 0x52, 0xd1, 0x54, 0x49, 0x9d, 0x66, 0x42, 0x70, 0x11, 0xc1, 0x19, 0x7a, 0x05,
+	0x20, 0x5b, 0x27, 0x6a, 0xa3, 0xe3, 0x84, 0xa5, 0x54, 0xf1, 0x58, 0x48, 0x78, 0x82, 0xce, 0xc1,
+	0x1b, 0x2e, 0x72, 0x7a, 0xcd, 0x43, 0x2d, 0xd9, 0xc7, 0x8c, 0x89, 0x25, 0xd3, 0x2a, 0xbe, 0x62,
+	0x02, 0x3e, 0x46, 0xaf, 0xc1, 0x8b, 0x94, 0xc9, 0xec, 0x5a, 0x49, 0x3d, 0xac, 0x49, 0x19, 0x0d,
+	0x37, 0xf0, 0xc9, 0x60, 0x4f, 0x48, 0x42, 0x23, 0xa6, 0x25, 0xbf, 0x61, 0xf0, 0x74, 0xf1, 0xdb,
+	0x03, 0xf3, 0xcf, 0x66, 0x8f, 0xff, 0x5f, 0xce, 0xe2, 0xe5, 0xc3, 0x47, 0x26, 0x43, 0x27, 0x89,
+	0x77, 0x13, 0xfe, 0xc5, 0x1a, 0x73, 0x5b, 0xb6, 0x0d, 0x36, 0x5d, 0xe3, 0x37, 0x75, 0x3b, 0x36,
+	0x36, 0x9d, 0xe6, 0xb0, 0xb3, 0xff, 0xba, 0xd4, 0x07, 0xf7, 0xf9, 0x3a, 0x3b, 0x89, 0x28, 0xfd,
+	0x36, 0xbb, 0x88, 0xdc, 0x30, 0x5a, 0x59, 0xec, 0xe4, 0xa0, 0xf2, 0x00, 0x8f, 0x2b, 0xed, 0x8f,
+	0x29, 0x50, 0xd0, 0xca, 0x16, 0xc7, 0x40, 0x91, 0x07, 0x85, 0x0b, 0xfc, 0x9a, 0xcd, 0x9d, 0x4b,
+	0x08, 0xad, 0x2c, 0x21, 0xc7, 0x08, 0x21, 0x79, 0x40, 0x88, 0x0b, 0x6d, 0x4f, 0xc7, 0xbf, 0x0b,
+	0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x60, 0x66, 0xf4, 0xa3, 0x46, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/new_resource_creation_error.pb.go b/googleapis/ads/googleads/v3/errors/new_resource_creation_error.pb.go
new file mode 100644
index 0000000..0d822f8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/new_resource_creation_error.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/new_resource_creation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible new resource creation errors.
+type NewResourceCreationErrorEnum_NewResourceCreationError int32
+
+const (
+	// Enum unspecified.
+	NewResourceCreationErrorEnum_UNSPECIFIED NewResourceCreationErrorEnum_NewResourceCreationError = 0
+	// The received error code is not known in this version.
+	NewResourceCreationErrorEnum_UNKNOWN NewResourceCreationErrorEnum_NewResourceCreationError = 1
+	// Do not set the id field while creating new resources.
+	NewResourceCreationErrorEnum_CANNOT_SET_ID_FOR_CREATE NewResourceCreationErrorEnum_NewResourceCreationError = 2
+	// Creating more than one resource with the same temp ID is not allowed.
+	NewResourceCreationErrorEnum_DUPLICATE_TEMP_IDS NewResourceCreationErrorEnum_NewResourceCreationError = 3
+	// Parent resource with specified temp ID failed validation, so no
+	// validation will be done for this child resource.
+	NewResourceCreationErrorEnum_TEMP_ID_RESOURCE_HAD_ERRORS NewResourceCreationErrorEnum_NewResourceCreationError = 4
+)
+
+var NewResourceCreationErrorEnum_NewResourceCreationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_SET_ID_FOR_CREATE",
+	3: "DUPLICATE_TEMP_IDS",
+	4: "TEMP_ID_RESOURCE_HAD_ERRORS",
+}
+
+var NewResourceCreationErrorEnum_NewResourceCreationError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CANNOT_SET_ID_FOR_CREATE":    2,
+	"DUPLICATE_TEMP_IDS":          3,
+	"TEMP_ID_RESOURCE_HAD_ERRORS": 4,
+}
+
+func (x NewResourceCreationErrorEnum_NewResourceCreationError) String() string {
+	return proto.EnumName(NewResourceCreationErrorEnum_NewResourceCreationError_name, int32(x))
+}
+
+func (NewResourceCreationErrorEnum_NewResourceCreationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_629e6b04c6296440, []int{0, 0}
+}
+
+// Container for enum describing possible new resource creation errors.
+type NewResourceCreationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NewResourceCreationErrorEnum) Reset()         { *m = NewResourceCreationErrorEnum{} }
+func (m *NewResourceCreationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NewResourceCreationErrorEnum) ProtoMessage()    {}
+func (*NewResourceCreationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_629e6b04c6296440, []int{0}
+}
+
+func (m *NewResourceCreationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Unmarshal(m, b)
+}
+func (m *NewResourceCreationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *NewResourceCreationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NewResourceCreationErrorEnum.Merge(m, src)
+}
+func (m *NewResourceCreationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Size(m)
+}
+func (m *NewResourceCreationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NewResourceCreationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NewResourceCreationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.NewResourceCreationErrorEnum_NewResourceCreationError", NewResourceCreationErrorEnum_NewResourceCreationError_name, NewResourceCreationErrorEnum_NewResourceCreationError_value)
+	proto.RegisterType((*NewResourceCreationErrorEnum)(nil), "google.ads.googleads.v3.errors.NewResourceCreationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/new_resource_creation_error.proto", fileDescriptor_629e6b04c6296440)
+}
+
+var fileDescriptor_629e6b04c6296440 = []byte{
+	// 366 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x6e, 0xa3, 0x30,
+	0x14, 0xc6, 0x07, 0x32, 0x9a, 0x91, 0x9c, 0xc5, 0x20, 0x16, 0xa3, 0x68, 0x26, 0x93, 0x91, 0x38,
+	0x80, 0x59, 0xb0, 0xf3, 0x6c, 0xc6, 0x01, 0x27, 0x45, 0x6d, 0x01, 0x19, 0x48, 0xa5, 0x0a, 0xc9,
+	0xa2, 0xc1, 0x42, 0x91, 0x12, 0x1c, 0xd9, 0xf9, 0x73, 0x8c, 0xde, 0xa1, 0xcb, 0xae, 0x7a, 0x8e,
+	0x1e, 0xa5, 0x27, 0xe8, 0xb2, 0x02, 0x93, 0xec, 0xd2, 0x15, 0x1f, 0xf6, 0xef, 0x7d, 0xdf, 0x7b,
+	0x7e, 0xe0, 0x7f, 0x2d, 0x44, 0xbd, 0xe6, 0x6e, 0x59, 0x29, 0x57, 0xcb, 0x56, 0x1d, 0x3c, 0x97,
+	0x4b, 0x29, 0xa4, 0x72, 0x1b, 0x7e, 0x64, 0x92, 0x2b, 0xb1, 0x97, 0x4b, 0xce, 0x96, 0x92, 0x97,
+	0xbb, 0x95, 0x68, 0x58, 0x77, 0x09, 0xb7, 0x52, 0xec, 0x84, 0x3d, 0xd1, 0x65, 0xb0, 0xac, 0x14,
+	0x3c, 0x3b, 0xc0, 0x83, 0x07, 0xb5, 0xc3, 0xaf, 0xf1, 0x29, 0x61, 0xbb, 0x72, 0xcb, 0xa6, 0x11,
+	0xbb, 0xce, 0x42, 0xe9, 0x6a, 0xe7, 0xc5, 0x00, 0xe3, 0x88, 0x1f, 0x69, 0x1f, 0xe1, 0xf7, 0x09,
+	0xa4, 0xad, 0x25, 0xcd, 0x7e, 0xe3, 0x3c, 0x1a, 0x60, 0x74, 0x09, 0xb0, 0x7f, 0x80, 0x61, 0x1e,
+	0xa5, 0x09, 0xf1, 0xc3, 0x59, 0x48, 0x02, 0xeb, 0x8b, 0x3d, 0x04, 0xdf, 0xf3, 0xe8, 0x3a, 0x8a,
+	0xef, 0x22, 0xcb, 0xb0, 0xc7, 0x60, 0xe4, 0xe3, 0x28, 0x8a, 0x33, 0x96, 0x92, 0x8c, 0x85, 0x01,
+	0x9b, 0xc5, 0x94, 0xf9, 0x94, 0xe0, 0x8c, 0x58, 0xa6, 0xfd, 0x13, 0xd8, 0x41, 0x9e, 0xdc, 0x84,
+	0x3e, 0xce, 0x08, 0xcb, 0xc8, 0x6d, 0xc2, 0xc2, 0x20, 0xb5, 0x06, 0xf6, 0x5f, 0xf0, 0xbb, 0xff,
+	0x63, 0x94, 0xa4, 0x71, 0x4e, 0x7d, 0xc2, 0xae, 0x70, 0xc0, 0x08, 0xa5, 0x31, 0x4d, 0xad, 0xaf,
+	0xd3, 0x77, 0x03, 0x38, 0x4b, 0xb1, 0x81, 0x9f, 0xcf, 0x3d, 0xfd, 0x73, 0xa9, 0xeb, 0xa4, 0x1d,
+	0x3c, 0x31, 0xee, 0x83, 0xde, 0xa0, 0x16, 0xeb, 0xb2, 0xa9, 0xa1, 0x90, 0xb5, 0x5b, 0xf3, 0xa6,
+	0x7b, 0x96, 0xd3, 0x2a, 0xb6, 0x2b, 0x75, 0x69, 0x33, 0xff, 0xf4, 0xe7, 0xc9, 0x1c, 0xcc, 0x31,
+	0x7e, 0x36, 0x27, 0x73, 0x6d, 0x86, 0x2b, 0x05, 0xb5, 0x6c, 0xd5, 0xc2, 0x83, 0x5d, 0xa4, 0x7a,
+	0x3d, 0x01, 0x05, 0xae, 0x54, 0x71, 0x06, 0x8a, 0x85, 0x57, 0x68, 0xe0, 0xcd, 0x74, 0xf4, 0x29,
+	0x42, 0xb8, 0x52, 0x08, 0x9d, 0x11, 0x84, 0x16, 0x1e, 0x42, 0x1a, 0x7a, 0xf8, 0xd6, 0x75, 0xe7,
+	0x7d, 0x04, 0x00, 0x00, 0xff, 0xff, 0x61, 0xf5, 0xa1, 0xda, 0x36, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/not_empty_error.pb.go b/googleapis/ads/googleads/v3/errors/not_empty_error.pb.go
new file mode 100644
index 0000000..7d02dfd
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/not_empty_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/not_empty_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible not empty errors.
+type NotEmptyErrorEnum_NotEmptyError int32
+
+const (
+	// Enum unspecified.
+	NotEmptyErrorEnum_UNSPECIFIED NotEmptyErrorEnum_NotEmptyError = 0
+	// The received error code is not known in this version.
+	NotEmptyErrorEnum_UNKNOWN NotEmptyErrorEnum_NotEmptyError = 1
+	// Empty list.
+	NotEmptyErrorEnum_EMPTY_LIST NotEmptyErrorEnum_NotEmptyError = 2
+)
+
+var NotEmptyErrorEnum_NotEmptyError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EMPTY_LIST",
+}
+
+var NotEmptyErrorEnum_NotEmptyError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EMPTY_LIST":  2,
+}
+
+func (x NotEmptyErrorEnum_NotEmptyError) String() string {
+	return proto.EnumName(NotEmptyErrorEnum_NotEmptyError_name, int32(x))
+}
+
+func (NotEmptyErrorEnum_NotEmptyError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_b44457b47b4528e8, []int{0, 0}
+}
+
+// Container for enum describing possible not empty errors.
+type NotEmptyErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NotEmptyErrorEnum) Reset()         { *m = NotEmptyErrorEnum{} }
+func (m *NotEmptyErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NotEmptyErrorEnum) ProtoMessage()    {}
+func (*NotEmptyErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b44457b47b4528e8, []int{0}
+}
+
+func (m *NotEmptyErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotEmptyErrorEnum.Unmarshal(m, b)
+}
+func (m *NotEmptyErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotEmptyErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *NotEmptyErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotEmptyErrorEnum.Merge(m, src)
+}
+func (m *NotEmptyErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NotEmptyErrorEnum.Size(m)
+}
+func (m *NotEmptyErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotEmptyErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotEmptyErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.NotEmptyErrorEnum_NotEmptyError", NotEmptyErrorEnum_NotEmptyError_name, NotEmptyErrorEnum_NotEmptyError_value)
+	proto.RegisterType((*NotEmptyErrorEnum)(nil), "google.ads.googleads.v3.errors.NotEmptyErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/not_empty_error.proto", fileDescriptor_b44457b47b4528e8)
+}
+
+var fileDescriptor_b44457b47b4528e8 = []byte{
+	// 293 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4a, 0xc4, 0x30,
+	0x18, 0x85, 0x9d, 0x0a, 0x0a, 0x19, 0xd4, 0xda, 0xa5, 0xc8, 0x2c, 0x7a, 0x80, 0x64, 0x11, 0x57,
+	0x11, 0x17, 0x1d, 0x27, 0x0e, 0x45, 0xad, 0xc5, 0x99, 0xa9, 0x28, 0x85, 0x52, 0x6d, 0x09, 0x85,
+	0x69, 0xfe, 0xd2, 0xc4, 0x01, 0xaf, 0xe3, 0xd2, 0xa3, 0x78, 0x14, 0xc1, 0x3b, 0x48, 0x1a, 0x5b,
+	0x98, 0x85, 0xae, 0xf2, 0x78, 0x7c, 0xef, 0xe5, 0xf1, 0xa3, 0x33, 0x01, 0x20, 0xd6, 0x25, 0xc9,
+	0x0b, 0x45, 0xac, 0x34, 0x6a, 0x43, 0x49, 0xd9, 0xb6, 0xd0, 0x2a, 0x22, 0x41, 0x67, 0x65, 0xdd,
+	0xe8, 0xb7, 0xac, 0x33, 0x70, 0xd3, 0x82, 0x06, 0x6f, 0x62, 0x51, 0x9c, 0x17, 0x0a, 0x0f, 0x29,
+	0xbc, 0xa1, 0xd8, 0xa6, 0x4e, 0x4e, 0xfb, 0xd6, 0xa6, 0x22, 0xb9, 0x94, 0xa0, 0x73, 0x5d, 0x81,
+	0x54, 0x36, 0xed, 0xdf, 0xa3, 0xe3, 0x08, 0x34, 0x37, 0xad, 0xdc, 0xf0, 0x5c, 0xbe, 0xd6, 0xfe,
+	0x05, 0x3a, 0xd8, 0x32, 0xbd, 0x23, 0x34, 0x5e, 0x45, 0x8b, 0x98, 0x5f, 0x86, 0x57, 0x21, 0x9f,
+	0xb9, 0x3b, 0xde, 0x18, 0xed, 0xaf, 0xa2, 0xeb, 0xe8, 0xee, 0x21, 0x72, 0x47, 0xde, 0x21, 0x42,
+	0xfc, 0x36, 0x5e, 0x3e, 0x66, 0x37, 0xe1, 0x62, 0xe9, 0x3a, 0xd3, 0xef, 0x11, 0xf2, 0x5f, 0xa0,
+	0xc6, 0xff, 0x0f, 0x9b, 0x7a, 0x5b, 0x7f, 0xc4, 0x66, 0x4e, 0x3c, 0x7a, 0x9a, 0xfd, 0xa6, 0x04,
+	0xac, 0x73, 0x29, 0x30, 0xb4, 0x82, 0x88, 0x52, 0x76, 0x63, 0xfb, 0xa3, 0x34, 0x95, 0xfa, 0xeb,
+	0x46, 0xe7, 0xf6, 0x79, 0x77, 0x76, 0xe7, 0x41, 0xf0, 0xe1, 0x4c, 0xe6, 0xb6, 0x2c, 0x28, 0x14,
+	0xb6, 0xd2, 0xa8, 0x84, 0xe2, 0xee, 0x4b, 0xf5, 0xd9, 0x03, 0x69, 0x50, 0xa8, 0x74, 0x00, 0xd2,
+	0x84, 0xa6, 0x16, 0xf8, 0x72, 0x7c, 0xeb, 0x32, 0x16, 0x14, 0x8a, 0xb1, 0x01, 0x61, 0x2c, 0xa1,
+	0x8c, 0x59, 0xe8, 0x79, 0xaf, 0x5b, 0x47, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x97, 0xe0,
+	0x28, 0xc0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/not_whitelisted_error.pb.go b/googleapis/ads/googleads/v3/errors/not_whitelisted_error.pb.go
new file mode 100644
index 0000000..c7d5c92
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/not_whitelisted_error.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/not_whitelisted_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible not whitelisted errors.
+type NotWhitelistedErrorEnum_NotWhitelistedError int32
+
+const (
+	// Enum unspecified.
+	NotWhitelistedErrorEnum_UNSPECIFIED NotWhitelistedErrorEnum_NotWhitelistedError = 0
+	// The received error code is not known in this version.
+	NotWhitelistedErrorEnum_UNKNOWN NotWhitelistedErrorEnum_NotWhitelistedError = 1
+	// Customer is not whitelisted for accessing this feature.
+	NotWhitelistedErrorEnum_CUSTOMER_NOT_WHITELISTED_FOR_THIS_FEATURE NotWhitelistedErrorEnum_NotWhitelistedError = 2
+)
+
+var NotWhitelistedErrorEnum_NotWhitelistedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOMER_NOT_WHITELISTED_FOR_THIS_FEATURE",
+}
+
+var NotWhitelistedErrorEnum_NotWhitelistedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CUSTOMER_NOT_WHITELISTED_FOR_THIS_FEATURE": 2,
+}
+
+func (x NotWhitelistedErrorEnum_NotWhitelistedError) String() string {
+	return proto.EnumName(NotWhitelistedErrorEnum_NotWhitelistedError_name, int32(x))
+}
+
+func (NotWhitelistedErrorEnum_NotWhitelistedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ff351e315ddc124d, []int{0, 0}
+}
+
+// Container for enum describing possible not whitelisted errors.
+type NotWhitelistedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NotWhitelistedErrorEnum) Reset()         { *m = NotWhitelistedErrorEnum{} }
+func (m *NotWhitelistedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NotWhitelistedErrorEnum) ProtoMessage()    {}
+func (*NotWhitelistedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ff351e315ddc124d, []int{0}
+}
+
+func (m *NotWhitelistedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotWhitelistedErrorEnum.Unmarshal(m, b)
+}
+func (m *NotWhitelistedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotWhitelistedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *NotWhitelistedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotWhitelistedErrorEnum.Merge(m, src)
+}
+func (m *NotWhitelistedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NotWhitelistedErrorEnum.Size(m)
+}
+func (m *NotWhitelistedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotWhitelistedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotWhitelistedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.NotWhitelistedErrorEnum_NotWhitelistedError", NotWhitelistedErrorEnum_NotWhitelistedError_name, NotWhitelistedErrorEnum_NotWhitelistedError_value)
+	proto.RegisterType((*NotWhitelistedErrorEnum)(nil), "google.ads.googleads.v3.errors.NotWhitelistedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/not_whitelisted_error.proto", fileDescriptor_ff351e315ddc124d)
+}
+
+var fileDescriptor_ff351e315ddc124d = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4e, 0xc3, 0x30,
+	0x14, 0x45, 0x69, 0x90, 0x40, 0x72, 0x07, 0xaa, 0x30, 0x80, 0x10, 0xea, 0x90, 0x8d, 0x01, 0x67,
+	0xc8, 0x66, 0xa6, 0xb4, 0x75, 0xdb, 0x08, 0x48, 0xaa, 0x26, 0x69, 0x25, 0x14, 0xc9, 0x4a, 0x71,
+	0x64, 0x22, 0xb5, 0x7e, 0x55, 0x6c, 0xca, 0xc4, 0xcf, 0x30, 0xf2, 0x29, 0x7c, 0x0a, 0x2b, 0x3f,
+	0x80, 0x12, 0xd3, 0xb2, 0x14, 0xa6, 0x5c, 0xbd, 0xdc, 0x73, 0x7d, 0xdf, 0x43, 0x44, 0x00, 0x88,
+	0x65, 0xe1, 0xe6, 0x5c, 0xb9, 0x46, 0xd6, 0x6a, 0xe3, 0xb9, 0x45, 0x55, 0x41, 0xa5, 0x5c, 0x09,
+	0x9a, 0xbd, 0x3c, 0x95, 0xba, 0x58, 0x96, 0x4a, 0x17, 0x9c, 0x35, 0x63, 0xbc, 0xae, 0x40, 0x83,
+	0xdd, 0x35, 0x00, 0xce, 0xb9, 0xc2, 0x3b, 0x16, 0x6f, 0x3c, 0x6c, 0xd8, 0x8b, 0xcb, 0x6d, 0xf6,
+	0xba, 0x74, 0x73, 0x29, 0x41, 0xe7, 0xba, 0x04, 0xa9, 0x0c, 0xed, 0xbc, 0xa2, 0xb3, 0x10, 0xf4,
+	0xfc, 0x37, 0x9b, 0xd6, 0x14, 0x95, 0xcf, 0x2b, 0x67, 0x81, 0x4e, 0xf7, 0xfc, 0xb2, 0x4f, 0x50,
+	0x3b, 0x0d, 0xe3, 0x09, 0xed, 0x07, 0xc3, 0x80, 0x0e, 0x3a, 0x07, 0x76, 0x1b, 0x1d, 0xa7, 0xe1,
+	0x6d, 0x18, 0xcd, 0xc3, 0x4e, 0xcb, 0xbe, 0x46, 0x57, 0xfd, 0x34, 0x4e, 0xa2, 0x7b, 0x3a, 0x65,
+	0x61, 0x94, 0xb0, 0xf9, 0x38, 0x48, 0xe8, 0x5d, 0x10, 0x27, 0x74, 0xc0, 0x86, 0xd1, 0x94, 0x25,
+	0xe3, 0x20, 0x66, 0x43, 0xea, 0x27, 0xe9, 0x94, 0x76, 0xac, 0xde, 0x57, 0x0b, 0x39, 0x8f, 0xb0,
+	0xc2, 0xff, 0xef, 0xd0, 0x3b, 0xdf, 0x53, 0x64, 0x52, 0xf7, 0x9f, 0xb4, 0x1e, 0x06, 0x3f, 0xac,
+	0x80, 0x65, 0x2e, 0x05, 0x86, 0x4a, 0xb8, 0xa2, 0x90, 0xcd, 0x76, 0xdb, 0x5b, 0xae, 0x4b, 0xf5,
+	0xd7, 0x69, 0x6f, 0xcc, 0xe7, 0xcd, 0x3a, 0x1c, 0xf9, 0xfe, 0xbb, 0xd5, 0x1d, 0x99, 0x30, 0x9f,
+	0x2b, 0x6c, 0x64, 0xad, 0x66, 0x1e, 0x6e, 0x9e, 0x54, 0x1f, 0x5b, 0x43, 0xe6, 0x73, 0x95, 0xed,
+	0x0c, 0xd9, 0xcc, 0xcb, 0x8c, 0xe1, 0xd3, 0x72, 0xcc, 0x94, 0x10, 0x9f, 0x2b, 0x42, 0x76, 0x16,
+	0x42, 0x66, 0x1e, 0x21, 0xc6, 0xb4, 0x38, 0x6a, 0xda, 0x79, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x73, 0xc3, 0x90, 0x71, 0xf7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/null_error.pb.go b/googleapis/ads/googleads/v3/errors/null_error.pb.go
new file mode 100644
index 0000000..f2a4af6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/null_error.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/null_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible null errors.
+type NullErrorEnum_NullError int32
+
+const (
+	// Enum unspecified.
+	NullErrorEnum_UNSPECIFIED NullErrorEnum_NullError = 0
+	// The received error code is not known in this version.
+	NullErrorEnum_UNKNOWN NullErrorEnum_NullError = 1
+	// Specified list/container must not contain any null elements
+	NullErrorEnum_NULL_CONTENT NullErrorEnum_NullError = 2
+)
+
+var NullErrorEnum_NullError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NULL_CONTENT",
+}
+
+var NullErrorEnum_NullError_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"NULL_CONTENT": 2,
+}
+
+func (x NullErrorEnum_NullError) String() string {
+	return proto.EnumName(NullErrorEnum_NullError_name, int32(x))
+}
+
+func (NullErrorEnum_NullError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7b038dfbd21869d6, []int{0, 0}
+}
+
+// Container for enum describing possible null errors.
+type NullErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NullErrorEnum) Reset()         { *m = NullErrorEnum{} }
+func (m *NullErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NullErrorEnum) ProtoMessage()    {}
+func (*NullErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7b038dfbd21869d6, []int{0}
+}
+
+func (m *NullErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NullErrorEnum.Unmarshal(m, b)
+}
+func (m *NullErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NullErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *NullErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NullErrorEnum.Merge(m, src)
+}
+func (m *NullErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NullErrorEnum.Size(m)
+}
+func (m *NullErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NullErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NullErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.NullErrorEnum_NullError", NullErrorEnum_NullError_name, NullErrorEnum_NullError_value)
+	proto.RegisterType((*NullErrorEnum)(nil), "google.ads.googleads.v3.errors.NullErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/null_error.proto", fileDescriptor_7b038dfbd21869d6)
+}
+
+var fileDescriptor_7b038dfbd21869d6 = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x14, 0xc6, 0x5d, 0x05, 0xc5, 0xcc, 0x3f, 0xa5, 0x97, 0x22, 0xbb, 0xe8, 0x03, 0x24, 0x17, 0xb9,
+	0xcb, 0xae, 0xba, 0xad, 0x8e, 0x61, 0xc9, 0x0a, 0xae, 0x15, 0xa4, 0x30, 0xaa, 0x2d, 0xa1, 0x90,
+	0xe5, 0x94, 0xa6, 0xdd, 0x03, 0x79, 0xe9, 0xa3, 0xf8, 0x26, 0xfa, 0x14, 0xd2, 0x66, 0xcd, 0x9d,
+	0x5e, 0xe5, 0x47, 0xf8, 0x7d, 0xe7, 0x7c, 0x1c, 0x44, 0x04, 0x80, 0x90, 0x25, 0xc9, 0x0b, 0x7d,
+	0xc2, 0x9e, 0x8e, 0x94, 0x94, 0x4d, 0x03, 0x8d, 0x26, 0xaa, 0x93, 0x72, 0x3f, 0x30, 0xae, 0x1b,
+	0x68, 0xc1, 0x9b, 0x19, 0x0b, 0xe7, 0x85, 0xc6, 0x36, 0x80, 0x8f, 0x14, 0x9b, 0xc0, 0xfd, 0xc3,
+	0x38, 0xb0, 0xae, 0x48, 0xae, 0x14, 0xb4, 0x79, 0x5b, 0x81, 0xd2, 0x26, 0xed, 0x47, 0xe8, 0x86,
+	0x77, 0x52, 0x86, 0xbd, 0x1b, 0xaa, 0xee, 0xe0, 0xcf, 0xd1, 0x95, 0xfd, 0xf0, 0xee, 0xd0, 0x34,
+	0xe1, 0xcf, 0x71, 0xb8, 0xdc, 0x3c, 0x6e, 0xc2, 0x95, 0x7b, 0xe6, 0x4d, 0xd1, 0x65, 0xc2, 0x9f,
+	0xf8, 0xf6, 0x85, 0xbb, 0x13, 0xcf, 0x45, 0xd7, 0x3c, 0x89, 0xa2, 0xfd, 0x72, 0xcb, 0x77, 0x21,
+	0xdf, 0xb9, 0xce, 0xe2, 0x7b, 0x82, 0xfc, 0x77, 0x38, 0xe0, 0xff, 0x2b, 0x2d, 0x6e, 0xed, 0x86,
+	0xb8, 0x2f, 0x11, 0x4f, 0x5e, 0x57, 0xa7, 0x84, 0x00, 0x99, 0x2b, 0x81, 0xa1, 0x11, 0x44, 0x94,
+	0x6a, 0xa8, 0x38, 0x5e, 0xa1, 0xae, 0xf4, 0x5f, 0x47, 0x99, 0x9b, 0xe7, 0xc3, 0x39, 0x5f, 0x07,
+	0xc1, 0xa7, 0x33, 0x5b, 0x9b, 0x61, 0x41, 0xa1, 0xb1, 0xc1, 0x9e, 0x52, 0x8a, 0x87, 0x95, 0xfa,
+	0x6b, 0x14, 0xb2, 0xa0, 0xd0, 0x99, 0x15, 0xb2, 0x94, 0x66, 0x46, 0xf8, 0x71, 0x7c, 0xf3, 0xcb,
+	0x58, 0x50, 0x68, 0xc6, 0xac, 0xc2, 0x58, 0x4a, 0x19, 0x33, 0xd2, 0xdb, 0xc5, 0xd0, 0x8e, 0xfe,
+	0x06, 0x00, 0x00, 0xff, 0xff, 0x79, 0x9c, 0x26, 0x48, 0xb1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/operation_access_denied_error.pb.go b/googleapis/ads/googleads/v3/errors/operation_access_denied_error.pb.go
new file mode 100644
index 0000000..009c33b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/operation_access_denied_error.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/operation_access_denied_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible operation access denied errors.
+type OperationAccessDeniedErrorEnum_OperationAccessDeniedError int32
+
+const (
+	// Enum unspecified.
+	OperationAccessDeniedErrorEnum_UNSPECIFIED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 0
+	// The received error code is not known in this version.
+	OperationAccessDeniedErrorEnum_UNKNOWN OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 1
+	// Unauthorized invocation of a service's method (get, mutate, etc.)
+	OperationAccessDeniedErrorEnum_ACTION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 2
+	// Unauthorized CREATE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_CREATE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 3
+	// Unauthorized REMOVE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_REMOVE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 4
+	// Unauthorized UPDATE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_UPDATE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 5
+	// A mutate action is not allowed on this campaign, from this client.
+	OperationAccessDeniedErrorEnum_MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 6
+	// This operation is not permitted on this campaign type
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 7
+	// A CREATE operation may not set status to REMOVED.
+	OperationAccessDeniedErrorEnum_CREATE_AS_REMOVED_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 8
+	// This operation is not allowed because the campaign or adgroup is removed.
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 9
+	// This operation is not permitted on this ad group type.
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 10
+	// The mutate is not allowed for this customer.
+	OperationAccessDeniedErrorEnum_MUTATE_NOT_PERMITTED_FOR_CUSTOMER OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 11
+)
+
+var OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ACTION_NOT_PERMITTED",
+	3:  "CREATE_OPERATION_NOT_PERMITTED",
+	4:  "REMOVE_OPERATION_NOT_PERMITTED",
+	5:  "UPDATE_OPERATION_NOT_PERMITTED",
+	6:  "MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT",
+	7:  "OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE",
+	8:  "CREATE_AS_REMOVED_NOT_PERMITTED",
+	9:  "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE",
+	10: "OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE",
+	11: "MUTATE_NOT_PERMITTED_FOR_CUSTOMER",
+}
+
+var OperationAccessDeniedErrorEnum_OperationAccessDeniedError_value = map[string]int32{
+	"UNSPECIFIED":                                  0,
+	"UNKNOWN":                                      1,
+	"ACTION_NOT_PERMITTED":                         2,
+	"CREATE_OPERATION_NOT_PERMITTED":               3,
+	"REMOVE_OPERATION_NOT_PERMITTED":               4,
+	"UPDATE_OPERATION_NOT_PERMITTED":               5,
+	"MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT":       6,
+	"OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE":    7,
+	"CREATE_AS_REMOVED_NOT_PERMITTED":              8,
+	"OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE": 9,
+	"OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE":    10,
+	"MUTATE_NOT_PERMITTED_FOR_CUSTOMER":            11,
+}
+
+func (x OperationAccessDeniedErrorEnum_OperationAccessDeniedError) String() string {
+	return proto.EnumName(OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name, int32(x))
+}
+
+func (OperationAccessDeniedErrorEnum_OperationAccessDeniedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_df7a6e22c97aafa3, []int{0, 0}
+}
+
+// Container for enum describing possible operation access denied errors.
+type OperationAccessDeniedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperationAccessDeniedErrorEnum) Reset()         { *m = OperationAccessDeniedErrorEnum{} }
+func (m *OperationAccessDeniedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*OperationAccessDeniedErrorEnum) ProtoMessage()    {}
+func (*OperationAccessDeniedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df7a6e22c97aafa3, []int{0}
+}
+
+func (m *OperationAccessDeniedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Unmarshal(m, b)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperationAccessDeniedErrorEnum.Merge(m, src)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Size(m)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperationAccessDeniedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperationAccessDeniedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.OperationAccessDeniedErrorEnum_OperationAccessDeniedError", OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name, OperationAccessDeniedErrorEnum_OperationAccessDeniedError_value)
+	proto.RegisterType((*OperationAccessDeniedErrorEnum)(nil), "google.ads.googleads.v3.errors.OperationAccessDeniedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/operation_access_denied_error.proto", fileDescriptor_df7a6e22c97aafa3)
+}
+
+var fileDescriptor_df7a6e22c97aafa3 = []byte{
+	// 448 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x8a, 0xd3, 0x40,
+	0x1c, 0xc6, 0x6d, 0xab, 0xbb, 0x3a, 0x3d, 0x18, 0x06, 0x0f, 0xb2, 0x48, 0x17, 0x23, 0x0a, 0x8a,
+	0x4e, 0x84, 0xdc, 0xe2, 0x69, 0x9a, 0xcc, 0x96, 0xa0, 0x99, 0x19, 0xa6, 0x93, 0x8a, 0x52, 0x18,
+	0x62, 0x13, 0x42, 0x61, 0x37, 0x13, 0x32, 0x75, 0x1f, 0xc8, 0xa3, 0x4f, 0x22, 0x3e, 0x8a, 0xbe,
+	0x81, 0x27, 0x49, 0xa6, 0xe9, 0x41, 0x9a, 0x7a, 0xca, 0x9f, 0xe4, 0xf7, 0xff, 0xbe, 0xef, 0x4f,
+	0x3e, 0x30, 0x2f, 0xb5, 0x2e, 0xaf, 0x0b, 0x2f, 0xcb, 0x8d, 0x67, 0xc7, 0x76, 0xba, 0xf5, 0xbd,
+	0xa2, 0x69, 0x74, 0x63, 0x3c, 0x5d, 0x17, 0x4d, 0xb6, 0xdb, 0xea, 0x4a, 0x65, 0x9b, 0x4d, 0x61,
+	0x8c, 0xca, 0x8b, 0x6a, 0x5b, 0xe4, 0xaa, 0xfb, 0x8c, 0xea, 0x46, 0xef, 0x34, 0x9c, 0xd9, 0x45,
+	0x94, 0xe5, 0x06, 0x1d, 0x34, 0xd0, 0xad, 0x8f, 0xac, 0xc6, 0xc5, 0x93, 0xde, 0xa3, 0xde, 0x7a,
+	0x59, 0x55, 0xe9, 0x5d, 0x27, 0x68, 0xec, 0xb6, 0xfb, 0x7b, 0x02, 0x66, 0xac, 0x77, 0xc1, 0x9d,
+	0x49, 0xd4, 0x79, 0x90, 0x76, 0x9b, 0x54, 0x5f, 0x6f, 0xdc, 0x1f, 0x13, 0x70, 0x31, 0x8c, 0xc0,
+	0x87, 0x60, 0x9a, 0xd2, 0x25, 0x27, 0x61, 0x7c, 0x15, 0x93, 0xc8, 0xb9, 0x03, 0xa7, 0xe0, 0x3c,
+	0xa5, 0xef, 0x29, 0xfb, 0x48, 0x9d, 0x11, 0x7c, 0x0c, 0x1e, 0xe1, 0x50, 0xc6, 0x8c, 0x2a, 0xca,
+	0xa4, 0xe2, 0x44, 0x24, 0xb1, 0x94, 0x24, 0x72, 0xc6, 0xd0, 0x05, 0xb3, 0x50, 0x10, 0x2c, 0x89,
+	0x62, 0x9c, 0x08, 0x7c, 0x84, 0x99, 0xb4, 0x8c, 0x20, 0x09, 0x5b, 0x0d, 0x33, 0x77, 0x5b, 0x26,
+	0xe5, 0xd1, 0x29, 0x9d, 0x7b, 0xf0, 0x15, 0x78, 0x91, 0xa4, 0xb2, 0x65, 0x8e, 0x85, 0x51, 0x57,
+	0x4c, 0xa8, 0xf0, 0x43, 0x4c, 0xa8, 0x74, 0xce, 0xe0, 0x1b, 0xf0, 0x72, 0x40, 0xc8, 0x72, 0x38,
+	0xe1, 0x38, 0x5e, 0x50, 0x25, 0x3f, 0x71, 0xe2, 0x9c, 0xc3, 0x67, 0xe0, 0x72, 0x7f, 0x06, 0x5e,
+	0x2a, 0x1b, 0x36, 0xfa, 0xc7, 0xff, 0x3e, 0x7c, 0x0b, 0x5e, 0x9f, 0xd2, 0xec, 0xd7, 0x04, 0x59,
+	0xb2, 0x54, 0x84, 0xc4, 0x79, 0xf0, 0xbf, 0x14, 0x38, 0x52, 0x0b, 0xc1, 0x52, 0x6e, 0x53, 0x00,
+	0xf8, 0x1c, 0x3c, 0xdd, 0x1f, 0x78, 0x24, 0x71, 0xba, 0x94, 0x2c, 0x21, 0xc2, 0x99, 0xce, 0xff,
+	0x8c, 0x80, 0xbb, 0xd1, 0x37, 0xe8, 0x74, 0x65, 0xe6, 0x97, 0xc3, 0xbf, 0x9b, 0xb7, 0xad, 0xe1,
+	0xa3, 0xcf, 0xd1, 0x5e, 0xa2, 0xd4, 0xd7, 0x59, 0x55, 0x22, 0xdd, 0x94, 0x5e, 0x59, 0x54, 0x5d,
+	0xa7, 0xfa, 0x26, 0xd7, 0x5b, 0x33, 0x54, 0xec, 0x77, 0xf6, 0xf1, 0x6d, 0x3c, 0x59, 0x60, 0xfc,
+	0x7d, 0x3c, 0x5b, 0x58, 0x31, 0x9c, 0x1b, 0x64, 0xc7, 0x76, 0x5a, 0xf9, 0xa8, 0xb3, 0x34, 0x3f,
+	0x7b, 0x60, 0x8d, 0x73, 0xb3, 0x3e, 0x00, 0xeb, 0x95, 0xbf, 0xb6, 0xc0, 0xaf, 0xb1, 0x6b, 0xdf,
+	0x06, 0x01, 0xce, 0x4d, 0x10, 0x1c, 0x90, 0x20, 0x58, 0xf9, 0x41, 0x60, 0xa1, 0x2f, 0x67, 0x5d,
+	0x3a, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x47, 0x53, 0x4a, 0x75, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/operator_error.pb.go b/googleapis/ads/googleads/v3/errors/operator_error.pb.go
new file mode 100644
index 0000000..ce723df
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/operator_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/operator_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible operator errors.
+type OperatorErrorEnum_OperatorError int32
+
+const (
+	// Enum unspecified.
+	OperatorErrorEnum_UNSPECIFIED OperatorErrorEnum_OperatorError = 0
+	// The received error code is not known in this version.
+	OperatorErrorEnum_UNKNOWN OperatorErrorEnum_OperatorError = 1
+	// Operator not supported.
+	OperatorErrorEnum_OPERATOR_NOT_SUPPORTED OperatorErrorEnum_OperatorError = 2
+)
+
+var OperatorErrorEnum_OperatorError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPERATOR_NOT_SUPPORTED",
+}
+
+var OperatorErrorEnum_OperatorError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"OPERATOR_NOT_SUPPORTED": 2,
+}
+
+func (x OperatorErrorEnum_OperatorError) String() string {
+	return proto.EnumName(OperatorErrorEnum_OperatorError_name, int32(x))
+}
+
+func (OperatorErrorEnum_OperatorError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1f0a54780911972f, []int{0, 0}
+}
+
+// Container for enum describing possible operator errors.
+type OperatorErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperatorErrorEnum) Reset()         { *m = OperatorErrorEnum{} }
+func (m *OperatorErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*OperatorErrorEnum) ProtoMessage()    {}
+func (*OperatorErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1f0a54780911972f, []int{0}
+}
+
+func (m *OperatorErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperatorErrorEnum.Unmarshal(m, b)
+}
+func (m *OperatorErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperatorErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *OperatorErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperatorErrorEnum.Merge(m, src)
+}
+func (m *OperatorErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_OperatorErrorEnum.Size(m)
+}
+func (m *OperatorErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperatorErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperatorErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.OperatorErrorEnum_OperatorError", OperatorErrorEnum_OperatorError_name, OperatorErrorEnum_OperatorError_value)
+	proto.RegisterType((*OperatorErrorEnum)(nil), "google.ads.googleads.v3.errors.OperatorErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/operator_error.proto", fileDescriptor_1f0a54780911972f)
+}
+
+var fileDescriptor_1f0a54780911972f = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0x33, 0x31,
+	0x14, 0xc5, 0xbf, 0xce, 0x07, 0x0a, 0x29, 0x62, 0x9d, 0x85, 0x8b, 0x22, 0x5d, 0xcc, 0x03, 0x24,
+	0x8b, 0xec, 0xe2, 0x2a, 0xb5, 0xb1, 0x14, 0x61, 0x12, 0xfa, 0x4f, 0x90, 0xc1, 0x12, 0x9d, 0x21,
+	0x14, 0xda, 0xdc, 0x21, 0x19, 0xfb, 0x40, 0x2e, 0x7d, 0x14, 0x1f, 0x45, 0xf0, 0x1d, 0x64, 0x26,
+	0x9d, 0x81, 0x2e, 0x74, 0x95, 0x93, 0xcb, 0xef, 0x9c, 0x7b, 0xb8, 0x88, 0x1a, 0x00, 0xb3, 0x2b,
+	0x88, 0xce, 0x3d, 0x09, 0xb2, 0x56, 0x07, 0x4a, 0x0a, 0xe7, 0xc0, 0x79, 0x02, 0x65, 0xe1, 0x74,
+	0x05, 0x6e, 0xd3, 0xfc, 0x71, 0xe9, 0xa0, 0x82, 0x78, 0x14, 0x48, 0xac, 0x73, 0x8f, 0x3b, 0x13,
+	0x3e, 0x50, 0x1c, 0x4c, 0xc3, 0x9b, 0x36, 0xb4, 0xdc, 0x12, 0x6d, 0x2d, 0x54, 0xba, 0xda, 0x82,
+	0xf5, 0xc1, 0x9d, 0x3c, 0xa3, 0x2b, 0x79, 0x4c, 0x15, 0x35, 0x2f, 0xec, 0xdb, 0x3e, 0x99, 0xa1,
+	0x8b, 0x93, 0x61, 0x7c, 0x89, 0xfa, 0xab, 0x74, 0xa1, 0xc4, 0xdd, 0xec, 0x7e, 0x26, 0x26, 0x83,
+	0x7f, 0x71, 0x1f, 0x9d, 0xaf, 0xd2, 0x87, 0x54, 0x3e, 0xa6, 0x83, 0x5e, 0x3c, 0x44, 0xd7, 0x52,
+	0x89, 0x39, 0x5f, 0xca, 0xf9, 0x26, 0x95, 0xcb, 0xcd, 0x62, 0xa5, 0x94, 0x9c, 0x2f, 0xc5, 0x64,
+	0x10, 0x8d, 0xbf, 0x7b, 0x28, 0x79, 0x85, 0x3d, 0xfe, 0xbb, 0xe4, 0x38, 0x3e, 0xd9, 0xa7, 0xea,
+	0x6a, 0xaa, 0xf7, 0x34, 0x39, 0xba, 0x0c, 0xec, 0xb4, 0x35, 0x18, 0x9c, 0x21, 0xa6, 0xb0, 0x4d,
+	0xf1, 0xf6, 0x3e, 0xe5, 0xd6, 0xff, 0x76, 0xae, 0xdb, 0xf0, 0xbc, 0x47, 0xff, 0xa7, 0x9c, 0x7f,
+	0x44, 0xa3, 0x69, 0x08, 0xe3, 0xb9, 0xc7, 0x41, 0xd6, 0x6a, 0x4d, 0x71, 0xb3, 0xd2, 0x7f, 0xb6,
+	0x40, 0xc6, 0x73, 0x9f, 0x75, 0x40, 0xb6, 0xa6, 0x59, 0x00, 0xbe, 0xa2, 0x24, 0x4c, 0x19, 0xe3,
+	0xb9, 0x67, 0xac, 0x43, 0x18, 0x5b, 0x53, 0xc6, 0x02, 0xf4, 0x72, 0xd6, 0xb4, 0xa3, 0x3f, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x53, 0xbe, 0x42, 0x33, 0xcb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/partial_failure_error.pb.go b/googleapis/ads/googleads/v3/errors/partial_failure_error.pb.go
new file mode 100644
index 0000000..6982f70
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/partial_failure_error.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/partial_failure_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible partial failure errors.
+type PartialFailureErrorEnum_PartialFailureError int32
+
+const (
+	// Enum unspecified.
+	PartialFailureErrorEnum_UNSPECIFIED PartialFailureErrorEnum_PartialFailureError = 0
+	// The received error code is not known in this version.
+	PartialFailureErrorEnum_UNKNOWN PartialFailureErrorEnum_PartialFailureError = 1
+	// The partial failure field was false in the request.
+	// This method requires this field be set to true.
+	PartialFailureErrorEnum_PARTIAL_FAILURE_MODE_REQUIRED PartialFailureErrorEnum_PartialFailureError = 2
+)
+
+var PartialFailureErrorEnum_PartialFailureError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PARTIAL_FAILURE_MODE_REQUIRED",
+}
+
+var PartialFailureErrorEnum_PartialFailureError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"PARTIAL_FAILURE_MODE_REQUIRED": 2,
+}
+
+func (x PartialFailureErrorEnum_PartialFailureError) String() string {
+	return proto.EnumName(PartialFailureErrorEnum_PartialFailureError_name, int32(x))
+}
+
+func (PartialFailureErrorEnum_PartialFailureError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_6ff0908682efac2c, []int{0, 0}
+}
+
+// Container for enum describing possible partial failure errors.
+type PartialFailureErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PartialFailureErrorEnum) Reset()         { *m = PartialFailureErrorEnum{} }
+func (m *PartialFailureErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PartialFailureErrorEnum) ProtoMessage()    {}
+func (*PartialFailureErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6ff0908682efac2c, []int{0}
+}
+
+func (m *PartialFailureErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PartialFailureErrorEnum.Unmarshal(m, b)
+}
+func (m *PartialFailureErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PartialFailureErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *PartialFailureErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PartialFailureErrorEnum.Merge(m, src)
+}
+func (m *PartialFailureErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PartialFailureErrorEnum.Size(m)
+}
+func (m *PartialFailureErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PartialFailureErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PartialFailureErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.PartialFailureErrorEnum_PartialFailureError", PartialFailureErrorEnum_PartialFailureError_name, PartialFailureErrorEnum_PartialFailureError_value)
+	proto.RegisterType((*PartialFailureErrorEnum)(nil), "google.ads.googleads.v3.errors.PartialFailureErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/partial_failure_error.proto", fileDescriptor_6ff0908682efac2c)
+}
+
+var fileDescriptor_6ff0908682efac2c = []byte{
+	// 314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4e, 0x83, 0x40,
+	0x14, 0x86, 0x2d, 0x26, 0x9a, 0x4c, 0x17, 0x36, 0xb8, 0xd0, 0x18, 0x6d, 0x22, 0x07, 0x18, 0x16,
+	0xec, 0xc6, 0xd5, 0x54, 0xa6, 0x0d, 0xb1, 0x52, 0x44, 0xc1, 0xc4, 0x90, 0x90, 0x51, 0x70, 0x42,
+	0x42, 0x67, 0x70, 0x86, 0xf6, 0x40, 0x2e, 0x3d, 0x8a, 0x47, 0x71, 0xeb, 0x05, 0x0c, 0x3c, 0xdb,
+	0x55, 0x75, 0xc5, 0x9f, 0xc7, 0xff, 0xfd, 0xef, 0x9f, 0x87, 0x88, 0x50, 0x4a, 0xd4, 0xa5, 0xcb,
+	0x0b, 0xe3, 0x82, 0xec, 0xd4, 0xda, 0x73, 0x4b, 0xad, 0x95, 0x36, 0x6e, 0xc3, 0x75, 0x5b, 0xf1,
+	0x3a, 0x7f, 0xe5, 0x55, 0xbd, 0xd2, 0x65, 0xde, 0x8f, 0x71, 0xa3, 0x55, 0xab, 0xec, 0x31, 0x00,
+	0x98, 0x17, 0x06, 0x6f, 0x59, 0xbc, 0xf6, 0x30, 0xb0, 0x67, 0xe7, 0x9b, 0xec, 0xa6, 0x72, 0xb9,
+	0x94, 0xaa, 0xe5, 0x6d, 0xa5, 0xa4, 0x01, 0xda, 0x79, 0x43, 0x27, 0x11, 0x84, 0x4f, 0x21, 0x9b,
+	0x75, 0x14, 0x93, 0xab, 0xa5, 0x93, 0xa2, 0xe3, 0x1d, 0xbf, 0xec, 0x23, 0x34, 0x4c, 0xc2, 0xfb,
+	0x88, 0x5d, 0x07, 0xd3, 0x80, 0xf9, 0xa3, 0x3d, 0x7b, 0x88, 0x0e, 0x93, 0xf0, 0x26, 0x5c, 0x3c,
+	0x86, 0xa3, 0x81, 0x7d, 0x89, 0x2e, 0x22, 0x1a, 0x3f, 0x04, 0x74, 0x9e, 0x4f, 0x69, 0x30, 0x4f,
+	0x62, 0x96, 0xdf, 0x2e, 0x7c, 0x96, 0xc7, 0xec, 0x2e, 0x09, 0x62, 0xe6, 0x8f, 0xac, 0xc9, 0xf7,
+	0x00, 0x39, 0x2f, 0x6a, 0x89, 0xff, 0xef, 0x3d, 0x39, 0xdd, 0xb1, 0x3c, 0xea, 0x3a, 0x47, 0x83,
+	0x27, 0xff, 0x97, 0x15, 0xaa, 0xe6, 0x52, 0x60, 0xa5, 0x85, 0x2b, 0x4a, 0xd9, 0xbf, 0x68, 0x73,
+	0xbf, 0xa6, 0x32, 0x7f, 0x9d, 0xf3, 0x0a, 0x3e, 0xef, 0xd6, 0xfe, 0x8c, 0xd2, 0x0f, 0x6b, 0x3c,
+	0x83, 0x30, 0x5a, 0x18, 0x0c, 0xb2, 0x53, 0xa9, 0x87, 0xfb, 0x95, 0xe6, 0x73, 0x63, 0xc8, 0x68,
+	0x61, 0xb2, 0xad, 0x21, 0x4b, 0xbd, 0x0c, 0x0c, 0x5f, 0x96, 0x03, 0x53, 0x42, 0x68, 0x61, 0x08,
+	0xd9, 0x5a, 0x08, 0x49, 0x3d, 0x42, 0xc0, 0xf4, 0x7c, 0xd0, 0xb7, 0xf3, 0x7e, 0x02, 0x00, 0x00,
+	0xff, 0xff, 0x77, 0x25, 0x10, 0x84, 0xeb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/payments_account_error.pb.go b/googleapis/ads/googleads/v3/errors/payments_account_error.pb.go
new file mode 100644
index 0000000..3b77d00
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/payments_account_error.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/payments_account_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors in payments account service.
+type PaymentsAccountErrorEnum_PaymentsAccountError int32
+
+const (
+	// Enum unspecified.
+	PaymentsAccountErrorEnum_UNSPECIFIED PaymentsAccountErrorEnum_PaymentsAccountError = 0
+	// The received error code is not known in this version.
+	PaymentsAccountErrorEnum_UNKNOWN PaymentsAccountErrorEnum_PaymentsAccountError = 1
+	// Manager customers are not supported for payments account service.
+	PaymentsAccountErrorEnum_NOT_SUPPORTED_FOR_MANAGER_CUSTOMER PaymentsAccountErrorEnum_PaymentsAccountError = 2
+)
+
+var PaymentsAccountErrorEnum_PaymentsAccountError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOT_SUPPORTED_FOR_MANAGER_CUSTOMER",
+}
+
+var PaymentsAccountErrorEnum_PaymentsAccountError_value = map[string]int32{
+	"UNSPECIFIED":                        0,
+	"UNKNOWN":                            1,
+	"NOT_SUPPORTED_FOR_MANAGER_CUSTOMER": 2,
+}
+
+func (x PaymentsAccountErrorEnum_PaymentsAccountError) String() string {
+	return proto.EnumName(PaymentsAccountErrorEnum_PaymentsAccountError_name, int32(x))
+}
+
+func (PaymentsAccountErrorEnum_PaymentsAccountError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4aeb35bbf3b6a431, []int{0, 0}
+}
+
+// Container for enum describing possible errors in payments account service.
+type PaymentsAccountErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PaymentsAccountErrorEnum) Reset()         { *m = PaymentsAccountErrorEnum{} }
+func (m *PaymentsAccountErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PaymentsAccountErrorEnum) ProtoMessage()    {}
+func (*PaymentsAccountErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4aeb35bbf3b6a431, []int{0}
+}
+
+func (m *PaymentsAccountErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentsAccountErrorEnum.Unmarshal(m, b)
+}
+func (m *PaymentsAccountErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentsAccountErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *PaymentsAccountErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentsAccountErrorEnum.Merge(m, src)
+}
+func (m *PaymentsAccountErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PaymentsAccountErrorEnum.Size(m)
+}
+func (m *PaymentsAccountErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentsAccountErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaymentsAccountErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.PaymentsAccountErrorEnum_PaymentsAccountError", PaymentsAccountErrorEnum_PaymentsAccountError_name, PaymentsAccountErrorEnum_PaymentsAccountError_value)
+	proto.RegisterType((*PaymentsAccountErrorEnum)(nil), "google.ads.googleads.v3.errors.PaymentsAccountErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/payments_account_error.proto", fileDescriptor_4aeb35bbf3b6a431)
+}
+
+var fileDescriptor_4aeb35bbf3b6a431 = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x6a, 0xeb, 0x30,
+	0x18, 0x85, 0x6f, 0x7c, 0xa1, 0x05, 0x65, 0x68, 0x30, 0x1d, 0xda, 0x52, 0x32, 0x78, 0xe8, 0x28,
+	0x0f, 0xda, 0x94, 0x49, 0x49, 0x94, 0x10, 0x4a, 0x64, 0xe1, 0xc4, 0x29, 0x14, 0x83, 0x50, 0x63,
+	0x23, 0x02, 0x89, 0x64, 0x2c, 0x27, 0xb4, 0xaf, 0xd3, 0xb1, 0x8f, 0xd2, 0x47, 0xe9, 0xdc, 0x07,
+	0x28, 0xb6, 0x12, 0x4f, 0x69, 0x27, 0x1d, 0x7e, 0x9d, 0xef, 0xe8, 0xe8, 0x07, 0x03, 0x65, 0x8c,
+	0xda, 0xe6, 0xa1, 0xcc, 0x6c, 0xe8, 0x64, 0xad, 0x0e, 0x28, 0xcc, 0xcb, 0xd2, 0x94, 0x36, 0x2c,
+	0xe4, 0xdb, 0x2e, 0xd7, 0x95, 0x15, 0x72, 0xbd, 0x36, 0x7b, 0x5d, 0x89, 0x66, 0x0e, 0x8b, 0xd2,
+	0x54, 0xc6, 0xef, 0x3b, 0x02, 0xca, 0xcc, 0xc2, 0x16, 0x86, 0x07, 0x04, 0x1d, 0x7c, 0x77, 0x7f,
+	0x0a, 0x2f, 0x36, 0xa1, 0xd4, 0xda, 0x54, 0xb2, 0xda, 0x18, 0x6d, 0x1d, 0x1d, 0xbc, 0x82, 0x1b,
+	0x7e, 0x4c, 0x27, 0x2e, 0x9c, 0xd6, 0x18, 0xd5, 0xfb, 0x5d, 0x90, 0x82, 0xeb, 0x73, 0x77, 0xfe,
+	0x15, 0xe8, 0x26, 0x6c, 0xc1, 0xe9, 0x68, 0x36, 0x99, 0xd1, 0x71, 0xef, 0x9f, 0xdf, 0x05, 0x97,
+	0x09, 0x7b, 0x64, 0xd1, 0x13, 0xeb, 0x75, 0xfc, 0x07, 0x10, 0xb0, 0x68, 0x29, 0x16, 0x09, 0xe7,
+	0x51, 0xbc, 0xa4, 0x63, 0x31, 0x89, 0x62, 0x31, 0x27, 0x8c, 0x4c, 0x69, 0x2c, 0x46, 0xc9, 0x62,
+	0x19, 0xcd, 0x69, 0xdc, 0xf3, 0x86, 0xdf, 0x1d, 0x10, 0xac, 0xcd, 0x0e, 0xfe, 0x5d, 0x7f, 0x78,
+	0x7b, 0xae, 0x02, 0xaf, 0xbb, 0xf3, 0xce, 0xf3, 0xf8, 0x08, 0x2b, 0xb3, 0x95, 0x5a, 0x41, 0x53,
+	0xaa, 0x50, 0xe5, 0xba, 0xf9, 0xd9, 0x69, 0x91, 0xc5, 0xc6, 0xfe, 0xb6, 0xd7, 0x81, 0x3b, 0xde,
+	0xbd, 0xff, 0x53, 0x42, 0x3e, 0xbc, 0xfe, 0xd4, 0x85, 0x91, 0xcc, 0x42, 0x27, 0x6b, 0xb5, 0x42,
+	0xb0, 0x79, 0xd2, 0x7e, 0x9e, 0x0c, 0x29, 0xc9, 0x6c, 0xda, 0x1a, 0xd2, 0x15, 0x4a, 0x9d, 0xe1,
+	0xcb, 0x0b, 0xdc, 0x14, 0x63, 0x92, 0x59, 0x8c, 0x5b, 0x0b, 0xc6, 0x2b, 0x84, 0xb1, 0x33, 0xbd,
+	0x5c, 0x34, 0xed, 0xd0, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x74, 0x12, 0x6c, 0xf4, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/policy_finding_error.pb.go b/googleapis/ads/googleads/v3/errors/policy_finding_error.pb.go
new file mode 100644
index 0000000..8bc774f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/policy_finding_error.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/policy_finding_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible policy finding errors.
+type PolicyFindingErrorEnum_PolicyFindingError int32
+
+const (
+	// Enum unspecified.
+	PolicyFindingErrorEnum_UNSPECIFIED PolicyFindingErrorEnum_PolicyFindingError = 0
+	// The received error code is not known in this version.
+	PolicyFindingErrorEnum_UNKNOWN PolicyFindingErrorEnum_PolicyFindingError = 1
+	// The resource has been disapproved since the policy summary includes
+	// policy topics of type PROHIBITED.
+	PolicyFindingErrorEnum_POLICY_FINDING PolicyFindingErrorEnum_PolicyFindingError = 2
+	// The given policy topic does not exist.
+	PolicyFindingErrorEnum_POLICY_TOPIC_NOT_FOUND PolicyFindingErrorEnum_PolicyFindingError = 3
+)
+
+var PolicyFindingErrorEnum_PolicyFindingError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "POLICY_FINDING",
+	3: "POLICY_TOPIC_NOT_FOUND",
+}
+
+var PolicyFindingErrorEnum_PolicyFindingError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"POLICY_FINDING":         2,
+	"POLICY_TOPIC_NOT_FOUND": 3,
+}
+
+func (x PolicyFindingErrorEnum_PolicyFindingError) String() string {
+	return proto.EnumName(PolicyFindingErrorEnum_PolicyFindingError_name, int32(x))
+}
+
+func (PolicyFindingErrorEnum_PolicyFindingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_f57e9417b2a9ec9c, []int{0, 0}
+}
+
+// Container for enum describing possible policy finding errors.
+type PolicyFindingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyFindingErrorEnum) Reset()         { *m = PolicyFindingErrorEnum{} }
+func (m *PolicyFindingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyFindingErrorEnum) ProtoMessage()    {}
+func (*PolicyFindingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f57e9417b2a9ec9c, []int{0}
+}
+
+func (m *PolicyFindingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Unmarshal(m, b)
+}
+func (m *PolicyFindingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyFindingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyFindingErrorEnum.Merge(m, src)
+}
+func (m *PolicyFindingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Size(m)
+}
+func (m *PolicyFindingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyFindingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyFindingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.PolicyFindingErrorEnum_PolicyFindingError", PolicyFindingErrorEnum_PolicyFindingError_name, PolicyFindingErrorEnum_PolicyFindingError_value)
+	proto.RegisterType((*PolicyFindingErrorEnum)(nil), "google.ads.googleads.v3.errors.PolicyFindingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/policy_finding_error.proto", fileDescriptor_f57e9417b2a9ec9c)
+}
+
+var fileDescriptor_f57e9417b2a9ec9c = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xfb, 0x30,
+	0x18, 0xc6, 0xff, 0xeb, 0xe0, 0x2f, 0x64, 0xa0, 0x25, 0x87, 0x09, 0x43, 0x76, 0xe8, 0x07, 0x48,
+	0x0f, 0x39, 0x19, 0x4f, 0xdd, 0xda, 0x8e, 0xa0, 0xa4, 0x01, 0xb7, 0x89, 0x52, 0x28, 0xdd, 0x32,
+	0x43, 0x60, 0x4b, 0x4a, 0x33, 0x07, 0x82, 0x9f, 0xc6, 0xa3, 0x1f, 0xc5, 0x8f, 0xe2, 0xd1, 0x4f,
+	0x20, 0x6d, 0xb6, 0x5d, 0x86, 0x9e, 0xfa, 0xf0, 0xf6, 0xf7, 0x3c, 0x79, 0xde, 0x17, 0x5c, 0x4b,
+	0x63, 0xe4, 0x7a, 0x15, 0x96, 0xc2, 0x86, 0x4e, 0x36, 0x6a, 0x87, 0xc3, 0x55, 0x5d, 0x9b, 0xda,
+	0x86, 0x95, 0x59, 0xab, 0xe5, 0x6b, 0xf1, 0xac, 0xb4, 0x50, 0x5a, 0x16, 0xed, 0x14, 0x55, 0xb5,
+	0xd9, 0x1a, 0x38, 0x74, 0x3c, 0x2a, 0x85, 0x45, 0x47, 0x2b, 0xda, 0x61, 0xe4, 0xac, 0x83, 0xab,
+	0x43, 0x74, 0xa5, 0xc2, 0x52, 0x6b, 0xb3, 0x2d, 0xb7, 0xca, 0x68, 0xeb, 0xdc, 0xc1, 0x1b, 0xe8,
+	0xf3, 0x36, 0x3b, 0x75, 0xd1, 0x49, 0x63, 0x4a, 0xf4, 0xcb, 0x26, 0x58, 0x00, 0x78, 0xfa, 0x07,
+	0x5e, 0x80, 0xde, 0x8c, 0xdd, 0xf3, 0x64, 0x4c, 0x53, 0x9a, 0xc4, 0xfe, 0x3f, 0xd8, 0x03, 0x67,
+	0x33, 0x76, 0xcb, 0xb2, 0x07, 0xe6, 0x77, 0x20, 0x04, 0xe7, 0x3c, 0xbb, 0xa3, 0xe3, 0xc7, 0x22,
+	0xa5, 0x2c, 0xa6, 0x6c, 0xe2, 0x7b, 0x70, 0x00, 0xfa, 0xfb, 0xd9, 0x34, 0xe3, 0x74, 0x5c, 0xb0,
+	0x6c, 0x5a, 0xa4, 0xd9, 0x8c, 0xc5, 0x7e, 0x77, 0xf4, 0xdd, 0x01, 0xc1, 0xd2, 0x6c, 0xd0, 0xdf,
+	0x2b, 0x8c, 0x2e, 0x4f, 0x8b, 0xf0, 0xa6, 0x3d, 0xef, 0x3c, 0xc5, 0x7b, 0xab, 0x34, 0xeb, 0x52,
+	0x4b, 0x64, 0x6a, 0x19, 0xca, 0x95, 0x6e, 0x77, 0x3b, 0x1c, 0xb2, 0x52, 0xf6, 0xb7, 0xbb, 0xde,
+	0xb8, 0xcf, 0xbb, 0xd7, 0x9d, 0x44, 0xd1, 0x87, 0x37, 0x9c, 0xb8, 0xb0, 0x48, 0x58, 0xe4, 0x64,
+	0xa3, 0xe6, 0x18, 0xb5, 0x4f, 0xda, 0xcf, 0x03, 0x90, 0x47, 0xc2, 0xe6, 0x47, 0x20, 0x9f, 0xe3,
+	0xdc, 0x01, 0x5f, 0x5e, 0xe0, 0xa6, 0x84, 0x44, 0xc2, 0x12, 0x72, 0x44, 0x08, 0x99, 0x63, 0x42,
+	0x1c, 0xb4, 0xf8, 0xdf, 0xb6, 0xc3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x42, 0x34, 0x20,
+	0xf4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/policy_validation_parameter_error.pb.go b/googleapis/ads/googleads/v3/errors/policy_validation_parameter_error.pb.go
new file mode 100644
index 0000000..320ba46
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/policy_validation_parameter_error.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/policy_validation_parameter_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible policy validation parameter errors.
+type PolicyValidationParameterErrorEnum_PolicyValidationParameterError int32
+
+const (
+	// Enum unspecified.
+	PolicyValidationParameterErrorEnum_UNSPECIFIED PolicyValidationParameterErrorEnum_PolicyValidationParameterError = 0
+	// The received error code is not known in this version.
+	PolicyValidationParameterErrorEnum_UNKNOWN PolicyValidationParameterErrorEnum_PolicyValidationParameterError = 1
+	// Ignorable policy topics are not supported for the ad type.
+	PolicyValidationParameterErrorEnum_UNSUPPORTED_AD_TYPE_FOR_IGNORABLE_POLICY_TOPICS PolicyValidationParameterErrorEnum_PolicyValidationParameterError = 2
+	// Exempt policy violation keys are not supported for the ad type.
+	PolicyValidationParameterErrorEnum_UNSUPPORTED_AD_TYPE_FOR_EXEMPT_POLICY_VIOLATION_KEYS PolicyValidationParameterErrorEnum_PolicyValidationParameterError = 3
+	// Cannot set ignorable policy topics and exempt policy violation keys in
+	// the same policy violation parameter.
+	PolicyValidationParameterErrorEnum_CANNOT_SET_BOTH_IGNORABLE_POLICY_TOPICS_AND_EXEMPT_POLICY_VIOLATION_KEYS PolicyValidationParameterErrorEnum_PolicyValidationParameterError = 4
+)
+
+var PolicyValidationParameterErrorEnum_PolicyValidationParameterError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNSUPPORTED_AD_TYPE_FOR_IGNORABLE_POLICY_TOPICS",
+	3: "UNSUPPORTED_AD_TYPE_FOR_EXEMPT_POLICY_VIOLATION_KEYS",
+	4: "CANNOT_SET_BOTH_IGNORABLE_POLICY_TOPICS_AND_EXEMPT_POLICY_VIOLATION_KEYS",
+}
+
+var PolicyValidationParameterErrorEnum_PolicyValidationParameterError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UNSUPPORTED_AD_TYPE_FOR_IGNORABLE_POLICY_TOPICS":                          2,
+	"UNSUPPORTED_AD_TYPE_FOR_EXEMPT_POLICY_VIOLATION_KEYS":                     3,
+	"CANNOT_SET_BOTH_IGNORABLE_POLICY_TOPICS_AND_EXEMPT_POLICY_VIOLATION_KEYS": 4,
+}
+
+func (x PolicyValidationParameterErrorEnum_PolicyValidationParameterError) String() string {
+	return proto.EnumName(PolicyValidationParameterErrorEnum_PolicyValidationParameterError_name, int32(x))
+}
+
+func (PolicyValidationParameterErrorEnum_PolicyValidationParameterError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_55f02adfac78c457, []int{0, 0}
+}
+
+// Container for enum describing possible policy validation parameter errors.
+type PolicyValidationParameterErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyValidationParameterErrorEnum) Reset()         { *m = PolicyValidationParameterErrorEnum{} }
+func (m *PolicyValidationParameterErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyValidationParameterErrorEnum) ProtoMessage()    {}
+func (*PolicyValidationParameterErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_55f02adfac78c457, []int{0}
+}
+
+func (m *PolicyValidationParameterErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyValidationParameterErrorEnum.Unmarshal(m, b)
+}
+func (m *PolicyValidationParameterErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyValidationParameterErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyValidationParameterErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyValidationParameterErrorEnum.Merge(m, src)
+}
+func (m *PolicyValidationParameterErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyValidationParameterErrorEnum.Size(m)
+}
+func (m *PolicyValidationParameterErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyValidationParameterErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyValidationParameterErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.PolicyValidationParameterErrorEnum_PolicyValidationParameterError", PolicyValidationParameterErrorEnum_PolicyValidationParameterError_name, PolicyValidationParameterErrorEnum_PolicyValidationParameterError_value)
+	proto.RegisterType((*PolicyValidationParameterErrorEnum)(nil), "google.ads.googleads.v3.errors.PolicyValidationParameterErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/policy_validation_parameter_error.proto", fileDescriptor_55f02adfac78c457)
+}
+
+var fileDescriptor_55f02adfac78c457 = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xb1, 0xaa, 0xdb, 0x30,
+	0x18, 0x85, 0x1b, 0xdf, 0xd2, 0x82, 0xee, 0xd0, 0xe0, 0xb1, 0x94, 0x0c, 0xee, 0x2e, 0x0f, 0xee,
+	0x50, 0xd4, 0x49, 0x89, 0x95, 0x5c, 0x73, 0x53, 0x49, 0xc4, 0x8a, 0xdb, 0x14, 0x83, 0x50, 0xaf,
+	0x8d, 0x31, 0x38, 0x96, 0xb1, 0xdc, 0x40, 0x5f, 0x27, 0x63, 0x1f, 0xa5, 0x8f, 0xd2, 0x57, 0x28,
+	0x94, 0x62, 0xeb, 0xda, 0x5b, 0x3c, 0xe9, 0x20, 0xce, 0xf9, 0x8e, 0xf8, 0xf5, 0x83, 0x6d, 0xa1,
+	0x75, 0x51, 0xe5, 0xbe, 0xca, 0x8c, 0x6f, 0x65, 0xaf, 0x2e, 0x81, 0x9f, 0xb7, 0xad, 0x6e, 0x8d,
+	0xdf, 0xe8, 0xaa, 0x7c, 0xfa, 0x29, 0x2f, 0xaa, 0x2a, 0x33, 0xd5, 0x95, 0xba, 0x96, 0x8d, 0x6a,
+	0xd5, 0x39, 0xef, 0xf2, 0x56, 0x0e, 0x16, 0xd8, 0xb4, 0xba, 0xd3, 0xee, 0xca, 0x86, 0xa1, 0xca,
+	0x0c, 0x9c, 0x38, 0xf0, 0x12, 0x40, 0xcb, 0x79, 0xfb, 0x6e, 0xec, 0x69, 0x4a, 0x5f, 0xd5, 0xb5,
+	0xee, 0x06, 0x98, 0xb1, 0x69, 0xef, 0xea, 0x00, 0x8f, 0x0f, 0x4d, 0xc9, 0x54, 0xc4, 0xc7, 0x1e,
+	0xd2, 0x13, 0x48, 0xfd, 0xe3, 0xec, 0xfd, 0x5d, 0x80, 0xd5, 0xbc, 0xcd, 0x7d, 0x03, 0xee, 0x8f,
+	0x34, 0xe6, 0x64, 0x13, 0x6d, 0x23, 0x12, 0x2e, 0x5f, 0xb8, 0xf7, 0xe0, 0xf5, 0x91, 0x3e, 0x52,
+	0xf6, 0x85, 0x2e, 0x17, 0x6e, 0x00, 0xfc, 0x23, 0x8d, 0x8f, 0x9c, 0xb3, 0x83, 0x20, 0xa1, 0xc4,
+	0xa1, 0x14, 0x27, 0x4e, 0xe4, 0x96, 0x1d, 0x64, 0xb4, 0xa3, 0xec, 0x80, 0xd7, 0x7b, 0x22, 0x39,
+	0xdb, 0x47, 0x9b, 0x93, 0x14, 0x8c, 0x47, 0x9b, 0x78, 0xe9, 0xb8, 0x1f, 0xc1, 0x87, 0x5b, 0x21,
+	0xf2, 0x95, 0x7c, 0xe6, 0x62, 0x4c, 0x24, 0x11, 0xdb, 0x63, 0x11, 0x31, 0x2a, 0x1f, 0xc9, 0x29,
+	0x5e, 0xde, 0xb9, 0x7b, 0xf0, 0xb0, 0xc1, 0x94, 0x32, 0x21, 0x63, 0x22, 0xe4, 0x9a, 0x89, 0x87,
+	0x5b, 0x35, 0x12, 0xd3, 0x70, 0x9e, 0xf6, 0x72, 0xfd, 0x6f, 0x01, 0xbc, 0x27, 0x7d, 0x86, 0xf3,
+	0x93, 0x5e, 0xbf, 0x9f, 0x9f, 0x10, 0xef, 0x07, 0xce, 0x17, 0xdf, 0xc2, 0x67, 0x4c, 0xa1, 0x2b,
+	0x55, 0x17, 0x50, 0xb7, 0x85, 0x5f, 0xe4, 0xf5, 0xf0, 0x1d, 0xe3, 0x22, 0x34, 0xa5, 0xb9, 0xb5,
+	0x17, 0x9f, 0xec, 0x71, 0x75, 0xee, 0x76, 0x18, 0xff, 0x72, 0x56, 0x3b, 0x0b, 0xc3, 0x99, 0x81,
+	0x56, 0xf6, 0x2a, 0x09, 0xe0, 0x50, 0x69, 0x7e, 0x8f, 0x86, 0x14, 0x67, 0x26, 0x9d, 0x0c, 0x69,
+	0x12, 0xa4, 0xd6, 0xf0, 0xc7, 0xf1, 0xec, 0x2d, 0x42, 0x38, 0x33, 0x08, 0x4d, 0x16, 0x84, 0x92,
+	0x00, 0x21, 0x6b, 0xfa, 0xfe, 0x6a, 0x78, 0x5d, 0xf0, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xfc,
+	0xe9, 0xc6, 0xb4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/policy_violation_error.pb.go b/googleapis/ads/googleads/v3/errors/policy_violation_error.pb.go
new file mode 100644
index 0000000..559f1ac
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/policy_violation_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/policy_violation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible policy violation errors.
+type PolicyViolationErrorEnum_PolicyViolationError int32
+
+const (
+	// Enum unspecified.
+	PolicyViolationErrorEnum_UNSPECIFIED PolicyViolationErrorEnum_PolicyViolationError = 0
+	// The received error code is not known in this version.
+	PolicyViolationErrorEnum_UNKNOWN PolicyViolationErrorEnum_PolicyViolationError = 1
+	// A policy was violated. See PolicyViolationDetails for more detail.
+	PolicyViolationErrorEnum_POLICY_ERROR PolicyViolationErrorEnum_PolicyViolationError = 2
+)
+
+var PolicyViolationErrorEnum_PolicyViolationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "POLICY_ERROR",
+}
+
+var PolicyViolationErrorEnum_PolicyViolationError_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"POLICY_ERROR": 2,
+}
+
+func (x PolicyViolationErrorEnum_PolicyViolationError) String() string {
+	return proto.EnumName(PolicyViolationErrorEnum_PolicyViolationError_name, int32(x))
+}
+
+func (PolicyViolationErrorEnum_PolicyViolationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a359cb15eb993566, []int{0, 0}
+}
+
+// Container for enum describing possible policy violation errors.
+type PolicyViolationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyViolationErrorEnum) Reset()         { *m = PolicyViolationErrorEnum{} }
+func (m *PolicyViolationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyViolationErrorEnum) ProtoMessage()    {}
+func (*PolicyViolationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a359cb15eb993566, []int{0}
+}
+
+func (m *PolicyViolationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyViolationErrorEnum.Unmarshal(m, b)
+}
+func (m *PolicyViolationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyViolationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *PolicyViolationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyViolationErrorEnum.Merge(m, src)
+}
+func (m *PolicyViolationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyViolationErrorEnum.Size(m)
+}
+func (m *PolicyViolationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyViolationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyViolationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.PolicyViolationErrorEnum_PolicyViolationError", PolicyViolationErrorEnum_PolicyViolationError_name, PolicyViolationErrorEnum_PolicyViolationError_value)
+	proto.RegisterType((*PolicyViolationErrorEnum)(nil), "google.ads.googleads.v3.errors.PolicyViolationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/policy_violation_error.proto", fileDescriptor_a359cb15eb993566)
+}
+
+var fileDescriptor_a359cb15eb993566 = []byte{
+	// 301 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0x84, 0x40,
+	0x18, 0xc7, 0x5b, 0x83, 0x82, 0xd9, 0x20, 0x91, 0x0e, 0x15, 0xb1, 0x07, 0x1f, 0x60, 0xe6, 0x30,
+	0xb7, 0xd9, 0x93, 0xbb, 0xeb, 0x2e, 0x52, 0xa8, 0x18, 0x6b, 0x14, 0x82, 0xb8, 0xab, 0x0c, 0x82,
+	0x3b, 0x9f, 0x38, 0x26, 0xf4, 0x3a, 0x1d, 0x7b, 0x94, 0x1e, 0xa5, 0x73, 0x0f, 0x10, 0xce, 0xa4,
+	0xa7, 0xad, 0x93, 0x7f, 0x3e, 0xff, 0xbf, 0xff, 0xf7, 0x9f, 0x0f, 0xcd, 0x39, 0x00, 0xaf, 0x0a,
+	0x92, 0xe5, 0x92, 0x68, 0xd9, 0xab, 0x8e, 0x92, 0xa2, 0x69, 0xa0, 0x91, 0xa4, 0x86, 0xaa, 0xdc,
+	0xbf, 0xa5, 0x5d, 0x09, 0x55, 0xd6, 0x96, 0x20, 0x52, 0x35, 0xc7, 0x75, 0x03, 0x2d, 0x58, 0x33,
+	0x4d, 0xe0, 0x2c, 0x97, 0x78, 0x84, 0x71, 0x47, 0xb1, 0x86, 0x6f, 0xef, 0x86, 0xf0, 0xba, 0x24,
+	0x99, 0x10, 0xd0, 0xaa, 0x08, 0xa9, 0x69, 0x7b, 0x87, 0xae, 0x43, 0x95, 0x1e, 0x0f, 0xe1, 0x6e,
+	0x8f, 0xb9, 0xe2, 0xf5, 0x60, 0xaf, 0xd1, 0xd5, 0xb1, 0x7f, 0xd6, 0x25, 0x9a, 0x6e, 0xfd, 0xc7,
+	0xd0, 0x5d, 0x7a, 0x6b, 0xcf, 0x5d, 0x99, 0x27, 0xd6, 0x14, 0x9d, 0x6f, 0xfd, 0x7b, 0x3f, 0x78,
+	0xf2, 0xcd, 0x89, 0x65, 0xa2, 0x8b, 0x30, 0x78, 0xf0, 0x96, 0xcf, 0xa9, 0x1b, 0x45, 0x41, 0x64,
+	0x1a, 0x8b, 0xef, 0x09, 0xb2, 0xf7, 0x70, 0xc0, 0xff, 0x17, 0x5d, 0xdc, 0x1c, 0x5b, 0x16, 0xf6,
+	0x2d, 0xc3, 0xc9, 0xcb, 0xea, 0x17, 0xe6, 0x50, 0x65, 0x82, 0x63, 0x68, 0x38, 0xe1, 0x85, 0x50,
+	0x6f, 0x18, 0x4e, 0x56, 0x97, 0xf2, 0xaf, 0x0b, 0xce, 0xf5, 0xe7, 0xdd, 0x38, 0xdd, 0x38, 0xce,
+	0x87, 0x31, 0xdb, 0xe8, 0x30, 0x27, 0x97, 0x58, 0xcb, 0x5e, 0xc5, 0x14, 0xab, 0x95, 0xf2, 0x73,
+	0x30, 0x24, 0x4e, 0x2e, 0x93, 0xd1, 0x90, 0xc4, 0x34, 0xd1, 0x86, 0x2f, 0xc3, 0xd6, 0x53, 0xc6,
+	0x9c, 0x5c, 0x32, 0x36, 0x5a, 0x18, 0x8b, 0x29, 0x63, 0xda, 0xb4, 0x3b, 0x53, 0xed, 0xe8, 0x4f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xed, 0x8e, 0x0c, 0xa1, 0xde, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/query_error.pb.go b/googleapis/ads/googleads/v3/errors/query_error.pb.go
new file mode 100644
index 0000000..9c6a29e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/query_error.pb.go
@@ -0,0 +1,385 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/query_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible query errors.
+type QueryErrorEnum_QueryError int32
+
+const (
+	// Name unspecified.
+	QueryErrorEnum_UNSPECIFIED QueryErrorEnum_QueryError = 0
+	// The received error code is not known in this version.
+	QueryErrorEnum_UNKNOWN QueryErrorEnum_QueryError = 1
+	// Returned if all other query error reasons are not applicable.
+	QueryErrorEnum_QUERY_ERROR QueryErrorEnum_QueryError = 50
+	// A condition used in the query references an invalid enum constant.
+	QueryErrorEnum_BAD_ENUM_CONSTANT QueryErrorEnum_QueryError = 18
+	// Query contains an invalid escape sequence.
+	QueryErrorEnum_BAD_ESCAPE_SEQUENCE QueryErrorEnum_QueryError = 7
+	// Field name is invalid.
+	QueryErrorEnum_BAD_FIELD_NAME QueryErrorEnum_QueryError = 12
+	// Limit value is invalid (i.e. not a number)
+	QueryErrorEnum_BAD_LIMIT_VALUE QueryErrorEnum_QueryError = 15
+	// Encountered number can not be parsed.
+	QueryErrorEnum_BAD_NUMBER QueryErrorEnum_QueryError = 5
+	// Invalid operator encountered.
+	QueryErrorEnum_BAD_OPERATOR QueryErrorEnum_QueryError = 3
+	// Parameter unknown or not supported.
+	QueryErrorEnum_BAD_PARAMETER_NAME QueryErrorEnum_QueryError = 61
+	// Parameter have invalid value.
+	QueryErrorEnum_BAD_PARAMETER_VALUE QueryErrorEnum_QueryError = 62
+	// Invalid resource type was specified in the FROM clause.
+	QueryErrorEnum_BAD_RESOURCE_TYPE_IN_FROM_CLAUSE QueryErrorEnum_QueryError = 45
+	// Non-ASCII symbol encountered outside of strings.
+	QueryErrorEnum_BAD_SYMBOL QueryErrorEnum_QueryError = 2
+	// Value is invalid.
+	QueryErrorEnum_BAD_VALUE QueryErrorEnum_QueryError = 4
+	// Date filters fail to restrict date to a range smaller than 31 days.
+	// Applicable if the query is segmented by date.
+	QueryErrorEnum_DATE_RANGE_TOO_WIDE QueryErrorEnum_QueryError = 36
+	// Filters on date/week/month/quarter have a start date after
+	// end date.
+	QueryErrorEnum_DATE_RANGE_TOO_NARROW QueryErrorEnum_QueryError = 60
+	// Expected AND between values with BETWEEN operator.
+	QueryErrorEnum_EXPECTED_AND QueryErrorEnum_QueryError = 30
+	// Expecting ORDER BY to have BY.
+	QueryErrorEnum_EXPECTED_BY QueryErrorEnum_QueryError = 14
+	// There was no dimension field selected.
+	QueryErrorEnum_EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 37
+	// Missing filters on date related fields.
+	QueryErrorEnum_EXPECTED_FILTERS_ON_DATE_RANGE QueryErrorEnum_QueryError = 55
+	// Missing FROM clause.
+	QueryErrorEnum_EXPECTED_FROM QueryErrorEnum_QueryError = 44
+	// The operator used in the conditions requires the value to be a list.
+	QueryErrorEnum_EXPECTED_LIST QueryErrorEnum_QueryError = 41
+	// Fields used in WHERE or ORDER BY clauses are missing from the SELECT
+	// clause.
+	QueryErrorEnum_EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 16
+	// SELECT is missing at the beginning of query.
+	QueryErrorEnum_EXPECTED_SELECT QueryErrorEnum_QueryError = 13
+	// A list was passed as a value to a condition whose operator expects a
+	// single value.
+	QueryErrorEnum_EXPECTED_SINGLE_VALUE QueryErrorEnum_QueryError = 42
+	// Missing one or both values with BETWEEN operator.
+	QueryErrorEnum_EXPECTED_VALUE_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 29
+	// Invalid date format. Expected 'YYYY-MM-DD'.
+	QueryErrorEnum_INVALID_DATE_FORMAT QueryErrorEnum_QueryError = 38
+	// Value passed was not a string when it should have been. I.e., it was a
+	// number or unquoted literal.
+	QueryErrorEnum_INVALID_STRING_VALUE QueryErrorEnum_QueryError = 57
+	// A String value passed to the BETWEEN operator does not parse as a date.
+	QueryErrorEnum_INVALID_VALUE_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 26
+	// The value passed to the DURING operator is not a Date range literal
+	QueryErrorEnum_INVALID_VALUE_WITH_DURING_OPERATOR QueryErrorEnum_QueryError = 22
+	// A non-string value was passed to the LIKE operator.
+	QueryErrorEnum_INVALID_VALUE_WITH_LIKE_OPERATOR QueryErrorEnum_QueryError = 56
+	// An operator was provided that is inapplicable to the field being
+	// filtered.
+	QueryErrorEnum_OPERATOR_FIELD_MISMATCH QueryErrorEnum_QueryError = 35
+	// A Condition was found with an empty list.
+	QueryErrorEnum_PROHIBITED_EMPTY_LIST_IN_CONDITION QueryErrorEnum_QueryError = 28
+	// A condition used in the query references an unsupported enum constant.
+	QueryErrorEnum_PROHIBITED_ENUM_CONSTANT QueryErrorEnum_QueryError = 54
+	// Fields that are not allowed to be selected together were included in
+	// the SELECT clause.
+	QueryErrorEnum_PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 31
+	// A field that is not orderable was included in the ORDER BY clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE QueryErrorEnum_QueryError = 40
+	// A field that is not selectable was included in the SELECT clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 23
+	// A field that is not filterable was included in the WHERE clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_WHERE_CLAUSE QueryErrorEnum_QueryError = 24
+	// Resource type specified in the FROM clause is not supported by this
+	// service.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE QueryErrorEnum_QueryError = 43
+	// A field that comes from an incompatible resource was included in the
+	// SELECT clause.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 48
+	// A field that comes from an incompatible resource was included in the
+	// WHERE clause.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE QueryErrorEnum_QueryError = 58
+	// A metric incompatible with the main resource or other selected
+	// segmenting resources was included in the SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 49
+	// A segment incompatible with the main resource or other selected
+	// segmenting resources was included in the SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 51
+	// A segment in the SELECT clause is incompatible with a metric in the
+	// SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 53
+	// The value passed to the limit clause is too low.
+	QueryErrorEnum_LIMIT_VALUE_TOO_LOW QueryErrorEnum_QueryError = 25
+	// Query has a string containing a newline character.
+	QueryErrorEnum_PROHIBITED_NEWLINE_IN_STRING QueryErrorEnum_QueryError = 8
+	// List contains values of different types.
+	QueryErrorEnum_PROHIBITED_VALUE_COMBINATION_IN_LIST QueryErrorEnum_QueryError = 10
+	// The values passed to the BETWEEN operator are not of the same type.
+	QueryErrorEnum_PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 21
+	// Query contains unterminated string.
+	QueryErrorEnum_STRING_NOT_TERMINATED QueryErrorEnum_QueryError = 6
+	// Too many segments are specified in SELECT clause.
+	QueryErrorEnum_TOO_MANY_SEGMENTS QueryErrorEnum_QueryError = 34
+	// Query is incomplete and cannot be parsed.
+	QueryErrorEnum_UNEXPECTED_END_OF_QUERY QueryErrorEnum_QueryError = 9
+	// FROM clause cannot be specified in this query.
+	QueryErrorEnum_UNEXPECTED_FROM_CLAUSE QueryErrorEnum_QueryError = 47
+	// Query contains one or more unrecognized fields.
+	QueryErrorEnum_UNRECOGNIZED_FIELD QueryErrorEnum_QueryError = 32
+	// Query has an unexpected extra part.
+	QueryErrorEnum_UNEXPECTED_INPUT QueryErrorEnum_QueryError = 11
+	// Metrics cannot be requested for a manager account. To retrieve metrics,
+	// issue separate requests against each client account under the manager
+	// account.
+	QueryErrorEnum_REQUESTED_METRICS_FOR_MANAGER QueryErrorEnum_QueryError = 59
+)
+
+var QueryErrorEnum_QueryError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	50: "QUERY_ERROR",
+	18: "BAD_ENUM_CONSTANT",
+	7:  "BAD_ESCAPE_SEQUENCE",
+	12: "BAD_FIELD_NAME",
+	15: "BAD_LIMIT_VALUE",
+	5:  "BAD_NUMBER",
+	3:  "BAD_OPERATOR",
+	61: "BAD_PARAMETER_NAME",
+	62: "BAD_PARAMETER_VALUE",
+	45: "BAD_RESOURCE_TYPE_IN_FROM_CLAUSE",
+	2:  "BAD_SYMBOL",
+	4:  "BAD_VALUE",
+	36: "DATE_RANGE_TOO_WIDE",
+	60: "DATE_RANGE_TOO_NARROW",
+	30: "EXPECTED_AND",
+	14: "EXPECTED_BY",
+	37: "EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE",
+	55: "EXPECTED_FILTERS_ON_DATE_RANGE",
+	44: "EXPECTED_FROM",
+	41: "EXPECTED_LIST",
+	16: "EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE",
+	13: "EXPECTED_SELECT",
+	42: "EXPECTED_SINGLE_VALUE",
+	29: "EXPECTED_VALUE_WITH_BETWEEN_OPERATOR",
+	38: "INVALID_DATE_FORMAT",
+	57: "INVALID_STRING_VALUE",
+	26: "INVALID_VALUE_WITH_BETWEEN_OPERATOR",
+	22: "INVALID_VALUE_WITH_DURING_OPERATOR",
+	56: "INVALID_VALUE_WITH_LIKE_OPERATOR",
+	35: "OPERATOR_FIELD_MISMATCH",
+	28: "PROHIBITED_EMPTY_LIST_IN_CONDITION",
+	54: "PROHIBITED_ENUM_CONSTANT",
+	31: "PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE",
+	40: "PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE",
+	23: "PROHIBITED_FIELD_IN_SELECT_CLAUSE",
+	24: "PROHIBITED_FIELD_IN_WHERE_CLAUSE",
+	43: "PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE",
+	48: "PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE",
+	58: "PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE",
+	49: "PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
+	51: "PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE",
+	53: "PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
+	25: "LIMIT_VALUE_TOO_LOW",
+	8:  "PROHIBITED_NEWLINE_IN_STRING",
+	10: "PROHIBITED_VALUE_COMBINATION_IN_LIST",
+	21: "PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR",
+	6:  "STRING_NOT_TERMINATED",
+	34: "TOO_MANY_SEGMENTS",
+	9:  "UNEXPECTED_END_OF_QUERY",
+	47: "UNEXPECTED_FROM_CLAUSE",
+	32: "UNRECOGNIZED_FIELD",
+	11: "UNEXPECTED_INPUT",
+	59: "REQUESTED_METRICS_FOR_MANAGER",
+}
+
+var QueryErrorEnum_QueryError_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"QUERY_ERROR":                      50,
+	"BAD_ENUM_CONSTANT":                18,
+	"BAD_ESCAPE_SEQUENCE":              7,
+	"BAD_FIELD_NAME":                   12,
+	"BAD_LIMIT_VALUE":                  15,
+	"BAD_NUMBER":                       5,
+	"BAD_OPERATOR":                     3,
+	"BAD_PARAMETER_NAME":               61,
+	"BAD_PARAMETER_VALUE":              62,
+	"BAD_RESOURCE_TYPE_IN_FROM_CLAUSE": 45,
+	"BAD_SYMBOL":                       2,
+	"BAD_VALUE":                        4,
+	"DATE_RANGE_TOO_WIDE":              36,
+	"DATE_RANGE_TOO_NARROW":            60,
+	"EXPECTED_AND":                     30,
+	"EXPECTED_BY":                      14,
+	"EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE":                37,
+	"EXPECTED_FILTERS_ON_DATE_RANGE":                           55,
+	"EXPECTED_FROM":                                            44,
+	"EXPECTED_LIST":                                            41,
+	"EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE":               16,
+	"EXPECTED_SELECT":                                          13,
+	"EXPECTED_SINGLE_VALUE":                                    42,
+	"EXPECTED_VALUE_WITH_BETWEEN_OPERATOR":                     29,
+	"INVALID_DATE_FORMAT":                                      38,
+	"INVALID_STRING_VALUE":                                     57,
+	"INVALID_VALUE_WITH_BETWEEN_OPERATOR":                      26,
+	"INVALID_VALUE_WITH_DURING_OPERATOR":                       22,
+	"INVALID_VALUE_WITH_LIKE_OPERATOR":                         56,
+	"OPERATOR_FIELD_MISMATCH":                                  35,
+	"PROHIBITED_EMPTY_LIST_IN_CONDITION":                       28,
+	"PROHIBITED_ENUM_CONSTANT":                                 54,
+	"PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE":            31,
+	"PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE":                      40,
+	"PROHIBITED_FIELD_IN_SELECT_CLAUSE":                        23,
+	"PROHIBITED_FIELD_IN_WHERE_CLAUSE":                         24,
+	"PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE":                  43,
+	"PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE":                48,
+	"PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE":                 58,
+	"PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE":              49,
+	"PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE":             51,
+	"PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE": 53,
+	"LIMIT_VALUE_TOO_LOW":                                      25,
+	"PROHIBITED_NEWLINE_IN_STRING":                             8,
+	"PROHIBITED_VALUE_COMBINATION_IN_LIST":                     10,
+	"PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR":       21,
+	"STRING_NOT_TERMINATED":                                    6,
+	"TOO_MANY_SEGMENTS":                                        34,
+	"UNEXPECTED_END_OF_QUERY":                                  9,
+	"UNEXPECTED_FROM_CLAUSE":                                   47,
+	"UNRECOGNIZED_FIELD":                                       32,
+	"UNEXPECTED_INPUT":                                         11,
+	"REQUESTED_METRICS_FOR_MANAGER":                            59,
+}
+
+func (x QueryErrorEnum_QueryError) String() string {
+	return proto.EnumName(QueryErrorEnum_QueryError_name, int32(x))
+}
+
+func (QueryErrorEnum_QueryError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c9d0f0ce5b4b6acb, []int{0, 0}
+}
+
+// Container for enum describing possible query errors.
+type QueryErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QueryErrorEnum) Reset()         { *m = QueryErrorEnum{} }
+func (m *QueryErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*QueryErrorEnum) ProtoMessage()    {}
+func (*QueryErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c9d0f0ce5b4b6acb, []int{0}
+}
+
+func (m *QueryErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QueryErrorEnum.Unmarshal(m, b)
+}
+func (m *QueryErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QueryErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *QueryErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryErrorEnum.Merge(m, src)
+}
+func (m *QueryErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_QueryErrorEnum.Size(m)
+}
+func (m *QueryErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.QueryErrorEnum_QueryError", QueryErrorEnum_QueryError_name, QueryErrorEnum_QueryError_value)
+	proto.RegisterType((*QueryErrorEnum)(nil), "google.ads.googleads.v3.errors.QueryErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/query_error.proto", fileDescriptor_c9d0f0ce5b4b6acb)
+}
+
+var fileDescriptor_c9d0f0ce5b4b6acb = []byte{
+	// 981 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6f, 0x73, 0xd3, 0xc6,
+	0x13, 0xfe, 0x25, 0xfc, 0x0a, 0x65, 0x43, 0x92, 0xe3, 0x20, 0x7f, 0x48, 0x43, 0x1a, 0x4c, 0x80,
+	0x40, 0x12, 0x3b, 0xe0, 0x29, 0xa5, 0x86, 0x76, 0xe6, 0x24, 0xad, 0x9d, 0x1b, 0xa4, 0x3b, 0xe5,
+	0x74, 0x8a, 0x6b, 0x26, 0x33, 0x37, 0x69, 0x93, 0xf1, 0x64, 0x06, 0xac, 0xd4, 0x0e, 0xcc, 0xf4,
+	0xeb, 0xf4, 0x65, 0x3f, 0x45, 0x5f, 0xf7, 0x6d, 0xbf, 0x05, 0x9f, 0xa2, 0x73, 0x92, 0x25, 0xcb,
+	0x60, 0xdc, 0x57, 0xd2, 0xed, 0x3e, 0xcf, 0x73, 0x7b, 0x7b, 0xbb, 0xb7, 0xb0, 0xdf, 0x4d, 0x92,
+	0xee, 0xdb, 0xb3, 0xda, 0xc9, 0xe9, 0xa0, 0x96, 0xfd, 0xda, 0xbf, 0x0f, 0xf5, 0xda, 0x59, 0xbf,
+	0x9f, 0xf4, 0x07, 0xb5, 0xdf, 0xde, 0x9f, 0xf5, 0x7f, 0x37, 0xe9, 0xa2, 0x7a, 0xd1, 0x4f, 0x2e,
+	0x13, 0xba, 0x91, 0xc1, 0xaa, 0x27, 0xa7, 0x83, 0x6a, 0xc1, 0xa8, 0x7e, 0xa8, 0x57, 0x33, 0xc6,
+	0xda, 0x7a, 0xae, 0x78, 0x71, 0x5e, 0x3b, 0xe9, 0xf5, 0x92, 0xcb, 0x93, 0xcb, 0xf3, 0xa4, 0x37,
+	0xc8, 0xd8, 0x95, 0x7f, 0xe6, 0x61, 0xe1, 0xd0, 0x6a, 0xa2, 0x45, 0x63, 0xef, 0xfd, 0xbb, 0xca,
+	0x5f, 0xf3, 0x00, 0x23, 0x13, 0x5d, 0x84, 0xb9, 0x58, 0x44, 0x21, 0xba, 0xbc, 0xc9, 0xd1, 0x23,
+	0xff, 0xa3, 0x73, 0x70, 0x2d, 0x16, 0xaf, 0x85, 0x6c, 0x0b, 0x32, 0x63, 0xbd, 0x87, 0x31, 0xaa,
+	0x8e, 0x41, 0xa5, 0xa4, 0x22, 0xcf, 0xe8, 0x12, 0xdc, 0x74, 0x98, 0x67, 0x50, 0xc4, 0x81, 0x71,
+	0xa5, 0x88, 0x34, 0x13, 0x9a, 0x50, 0xba, 0x02, 0xb7, 0x52, 0x73, 0xe4, 0xb2, 0x10, 0x4d, 0x84,
+	0x87, 0x31, 0x0a, 0x17, 0xc9, 0x35, 0x4a, 0x61, 0xc1, 0x3a, 0x9a, 0x1c, 0x7d, 0xcf, 0x08, 0x16,
+	0x20, 0xb9, 0x41, 0x6f, 0xc1, 0xa2, 0xb5, 0xf9, 0x3c, 0xe0, 0xda, 0x1c, 0x31, 0x3f, 0x46, 0xb2,
+	0x48, 0x17, 0x00, 0xac, 0x51, 0xc4, 0x81, 0x83, 0x8a, 0x7c, 0x45, 0x09, 0xdc, 0xb0, 0x6b, 0x19,
+	0xa2, 0x62, 0x5a, 0x2a, 0x72, 0x85, 0x2e, 0x03, 0xb5, 0x96, 0x90, 0x29, 0x16, 0xa0, 0x46, 0x95,
+	0xc9, 0xfd, 0x98, 0xef, 0x3d, 0xb2, 0x67, 0x92, 0x3f, 0xd1, 0x2d, 0xd8, 0xb4, 0x0e, 0x85, 0x91,
+	0x8c, 0x95, 0x8b, 0x46, 0x77, 0x42, 0x34, 0x5c, 0x98, 0xa6, 0x92, 0x81, 0x71, 0x7d, 0x16, 0x47,
+	0x48, 0xf6, 0xf2, 0x8d, 0xa3, 0x4e, 0xe0, 0x48, 0x9f, 0xcc, 0xd2, 0x79, 0xb8, 0x6e, 0xd7, 0x99,
+	0xc8, 0xff, 0xad, 0xba, 0xc7, 0x34, 0x1a, 0xc5, 0x44, 0x0b, 0x8d, 0x96, 0xd2, 0xb4, 0xb9, 0x87,
+	0x64, 0x8b, 0xde, 0x81, 0xa5, 0x4f, 0x1c, 0x82, 0x29, 0x25, 0xdb, 0xe4, 0x95, 0x8d, 0x1d, 0x7f,
+	0x0e, 0xd1, 0xd5, 0xe8, 0x19, 0x26, 0x3c, 0xb2, 0x61, 0xf3, 0x58, 0x58, 0x9c, 0x0e, 0x59, 0xa0,
+	0x7b, 0xf0, 0xb8, 0x30, 0x78, 0x3c, 0x40, 0x11, 0x71, 0x29, 0x86, 0x69, 0xe2, 0xc2, 0x44, 0xe8,
+	0xa3, 0xab, 0xf3, 0x20, 0x1f, 0xd0, 0x0a, 0x6c, 0x14, 0xf0, 0x26, 0xf7, 0x35, 0xaa, 0xc8, 0x48,
+	0x61, 0x46, 0x01, 0x90, 0xef, 0xe9, 0x4d, 0x98, 0x1f, 0x61, 0x94, 0x0c, 0xc8, 0xee, 0x98, 0xc9,
+	0xe7, 0x91, 0x26, 0x8f, 0x69, 0x15, 0x9e, 0x14, 0x26, 0x85, 0x4d, 0x54, 0xf6, 0xa2, 0xbc, 0x2f,
+	0xed, 0x4c, 0xec, 0x65, 0x15, 0xf8, 0xcc, 0x47, 0xe6, 0xed, 0xd9, 0x47, 0x46, 0x2e, 0x5a, 0x3e,
+	0x0e, 0xf3, 0xf5, 0x84, 0x6e, 0xc3, 0x56, 0xe1, 0x4a, 0x6d, 0xa6, 0xcd, 0xf5, 0x81, 0x71, 0x50,
+	0xb7, 0x11, 0xc5, 0xe8, 0x3e, 0xef, 0xda, 0xcc, 0x72, 0x71, 0xc4, 0x7c, 0xee, 0x65, 0xe7, 0x68,
+	0x4a, 0x15, 0x30, 0x4d, 0x1e, 0xd2, 0x55, 0xb8, 0x9d, 0x3b, 0x22, 0xad, 0xb8, 0x68, 0x0d, 0xc5,
+	0x7f, 0xa0, 0x8f, 0xe0, 0x7e, 0xee, 0x99, 0xa6, 0xbd, 0x46, 0x1f, 0x42, 0x65, 0x02, 0xd0, 0x8b,
+	0x53, 0xb5, 0x02, 0xb7, 0x6c, 0x4b, 0x64, 0x02, 0xce, 0xe7, 0xaf, 0x71, 0x84, 0x7a, 0x41, 0xbf,
+	0x81, 0x95, 0x7c, 0x35, 0x4c, 0x54, 0xc0, 0xa3, 0x80, 0x69, 0xf7, 0x80, 0xdc, 0xb7, 0x5b, 0x85,
+	0x4a, 0x1e, 0x70, 0x87, 0xdb, 0x23, 0x63, 0x10, 0xea, 0x4e, 0x9a, 0x6b, 0x9b, 0x4c, 0x57, 0x0a,
+	0x8f, 0x6b, 0x2e, 0x05, 0x59, 0xa7, 0xeb, 0xb0, 0x5a, 0xc6, 0x8d, 0x35, 0xd0, 0x73, 0xfa, 0x14,
+	0xf6, 0x4a, 0xde, 0x6c, 0x13, 0x57, 0x06, 0x0e, 0x17, 0xcc, 0xf2, 0x3f, 0xbf, 0x99, 0x6f, 0x6d,
+	0x32, 0x3e, 0xa3, 0x70, 0x61, 0xa4, 0xf2, 0x50, 0x19, 0xa7, 0x93, 0x03, 0xb7, 0xe9, 0x03, 0xb8,
+	0x37, 0x09, 0x38, 0xae, 0xb7, 0x62, 0x73, 0x31, 0x09, 0xd6, 0x3e, 0x40, 0x85, 0x39, 0x6a, 0x95,
+	0xee, 0xc0, 0xa3, 0x12, 0x6a, 0x6a, 0x6f, 0xed, 0xd8, 0x2a, 0x9f, 0x06, 0x1e, 0x8f, 0x60, 0x9f,
+	0xee, 0xc2, 0xf6, 0x34, 0xf8, 0x58, 0x24, 0x0d, 0x5a, 0x83, 0x9d, 0x12, 0x3a, 0x40, 0xad, 0xb8,
+	0x5b, 0x52, 0x95, 0x6a, 0x9c, 0xf0, 0x94, 0xee, 0xc3, 0x6e, 0x89, 0x10, 0x61, 0x2b, 0x40, 0xa1,
+	0xa7, 0x30, 0xea, 0xf4, 0x15, 0xbc, 0x98, 0xc0, 0x48, 0x6b, 0xe4, 0x3f, 0xf7, 0xfb, 0xce, 0x16,
+	0x78, 0xe9, 0x8d, 0x4b, 0x9f, 0x08, 0x5f, 0xb6, 0xc9, 0x1d, 0xba, 0x09, 0xeb, 0x25, 0x59, 0x81,
+	0x6d, 0x9f, 0x8b, 0x2c, 0x21, 0x69, 0xb9, 0x93, 0xaf, 0x6d, 0x17, 0x95, 0x10, 0x19, 0xff, 0x93,
+	0x72, 0x48, 0xfb, 0x19, 0xe8, 0x73, 0x78, 0x36, 0x15, 0x39, 0xb9, 0x43, 0x96, 0x6c, 0x0b, 0x0f,
+	0x9b, 0x4b, 0x48, 0x6d, 0x34, 0xaa, 0xc0, 0x32, 0xd0, 0x23, 0x57, 0xed, 0x1b, 0x6f, 0x63, 0x0d,
+	0x98, 0xe8, 0xe4, 0x67, 0x8e, 0x48, 0xc5, 0x76, 0x41, 0x2c, 0x8a, 0xde, 0x46, 0xe1, 0x19, 0xd9,
+	0x34, 0xe9, 0x74, 0x20, 0xd7, 0xe9, 0x1a, 0x2c, 0x97, 0x9c, 0xe5, 0x2a, 0xa8, 0xd9, 0x87, 0x3b,
+	0x16, 0x0a, 0x5d, 0xd9, 0x12, 0xfc, 0x4d, 0x5e, 0x5a, 0x64, 0x93, 0xde, 0x06, 0x52, 0xe2, 0x70,
+	0x11, 0xc6, 0x9a, 0xcc, 0xd1, 0x7b, 0x70, 0x57, 0xd9, 0xf9, 0x11, 0x8d, 0x6e, 0x35, 0xb2, 0x6f,
+	0x83, 0x8d, 0x87, 0xb5, 0x50, 0x91, 0x97, 0xce, 0xc7, 0x19, 0xa8, 0xfc, 0x9a, 0xbc, 0xab, 0x4e,
+	0x1f, 0x8d, 0xce, 0xe2, 0x68, 0xcc, 0x85, 0x76, 0x1a, 0x86, 0x33, 0x6f, 0xbc, 0x21, 0xa5, 0x9b,
+	0xbc, 0x3d, 0xe9, 0x75, 0xab, 0x49, 0xbf, 0x5b, 0xeb, 0x9e, 0xf5, 0xd2, 0x59, 0x99, 0xcf, 0xe3,
+	0x8b, 0xf3, 0xc1, 0x97, 0xc6, 0xf3, 0xcb, 0xec, 0xf3, 0xc7, 0xec, 0x95, 0x16, 0x63, 0x7f, 0xce,
+	0x6e, 0xb4, 0x32, 0x31, 0x76, 0x3a, 0xa8, 0x66, 0xbf, 0xf6, 0xef, 0xa8, 0x5e, 0x4d, 0xb7, 0x1c,
+	0xfc, 0x9d, 0x03, 0x8e, 0xd9, 0xe9, 0xe0, 0xb8, 0x00, 0x1c, 0x1f, 0xd5, 0x8f, 0x33, 0xc0, 0xc7,
+	0xd9, 0x4a, 0x66, 0x6d, 0x34, 0xd8, 0xe9, 0xa0, 0xd1, 0x28, 0x20, 0x8d, 0xc6, 0x51, 0xbd, 0xd1,
+	0xc8, 0x40, 0xbf, 0x5c, 0x4d, 0xa3, 0xab, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x37, 0x99,
+	0x77, 0x3b, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/quota_error.pb.go b/googleapis/ads/googleads/v3/errors/quota_error.pb.go
new file mode 100644
index 0000000..9f9bab3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/quota_error.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/quota_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible quota errors.
+type QuotaErrorEnum_QuotaError int32
+
+const (
+	// Enum unspecified.
+	QuotaErrorEnum_UNSPECIFIED QuotaErrorEnum_QuotaError = 0
+	// The received error code is not known in this version.
+	QuotaErrorEnum_UNKNOWN QuotaErrorEnum_QuotaError = 1
+	// Too many requests.
+	QuotaErrorEnum_RESOURCE_EXHAUSTED QuotaErrorEnum_QuotaError = 2
+	// Access is prohibited.
+	QuotaErrorEnum_ACCESS_PROHIBITED QuotaErrorEnum_QuotaError = 3
+	// Too many requests in a short amount of time.
+	QuotaErrorEnum_RESOURCE_TEMPORARILY_EXHAUSTED QuotaErrorEnum_QuotaError = 4
+)
+
+var QuotaErrorEnum_QuotaError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RESOURCE_EXHAUSTED",
+	3: "ACCESS_PROHIBITED",
+	4: "RESOURCE_TEMPORARILY_EXHAUSTED",
+}
+
+var QuotaErrorEnum_QuotaError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"RESOURCE_EXHAUSTED":             2,
+	"ACCESS_PROHIBITED":              3,
+	"RESOURCE_TEMPORARILY_EXHAUSTED": 4,
+}
+
+func (x QuotaErrorEnum_QuotaError) String() string {
+	return proto.EnumName(QuotaErrorEnum_QuotaError_name, int32(x))
+}
+
+func (QuotaErrorEnum_QuotaError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_74f0d03d4b2122e8, []int{0, 0}
+}
+
+// Container for enum describing possible quota errors.
+type QuotaErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QuotaErrorEnum) Reset()         { *m = QuotaErrorEnum{} }
+func (m *QuotaErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*QuotaErrorEnum) ProtoMessage()    {}
+func (*QuotaErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_74f0d03d4b2122e8, []int{0}
+}
+
+func (m *QuotaErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QuotaErrorEnum.Unmarshal(m, b)
+}
+func (m *QuotaErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QuotaErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *QuotaErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QuotaErrorEnum.Merge(m, src)
+}
+func (m *QuotaErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_QuotaErrorEnum.Size(m)
+}
+func (m *QuotaErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QuotaErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QuotaErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.QuotaErrorEnum_QuotaError", QuotaErrorEnum_QuotaError_name, QuotaErrorEnum_QuotaError_value)
+	proto.RegisterType((*QuotaErrorEnum)(nil), "google.ads.googleads.v3.errors.QuotaErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/quota_error.proto", fileDescriptor_74f0d03d4b2122e8)
+}
+
+var fileDescriptor_74f0d03d4b2122e8 = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4e, 0x83, 0x40,
+	0x18, 0xc5, 0x85, 0x1a, 0x4d, 0xa6, 0x89, 0xad, 0x93, 0xe8, 0xc2, 0x98, 0x2e, 0x38, 0xc0, 0x60,
+	0xc2, 0x6e, 0x5c, 0x4d, 0xe9, 0xd8, 0x12, 0x15, 0x10, 0x4a, 0xfd, 0x13, 0x92, 0x06, 0xa5, 0x99,
+	0x34, 0x69, 0x67, 0x2a, 0x43, 0xbb, 0xf3, 0x0c, 0xde, 0xc1, 0xa5, 0x47, 0xf1, 0x28, 0x3d, 0x85,
+	0x19, 0x46, 0xa8, 0x1b, 0x5d, 0xf1, 0xf8, 0xf2, 0x7b, 0x6f, 0xbe, 0xf7, 0x81, 0x0b, 0x26, 0x04,
+	0x5b, 0xcc, 0xec, 0x2c, 0x97, 0xb6, 0x96, 0x4a, 0x6d, 0x1c, 0x7b, 0x56, 0x14, 0xa2, 0x90, 0xf6,
+	0xeb, 0x5a, 0x94, 0xd9, 0xb4, 0xfa, 0x41, 0xab, 0x42, 0x94, 0x02, 0xf6, 0x34, 0x86, 0xb2, 0x5c,
+	0xa2, 0xc6, 0x81, 0x36, 0x0e, 0xd2, 0x8e, 0xb3, 0xf3, 0x3a, 0x71, 0x35, 0xb7, 0x33, 0xce, 0x45,
+	0x99, 0x95, 0x73, 0xc1, 0xa5, 0x76, 0x5b, 0xef, 0x06, 0x38, 0xba, 0x53, 0x99, 0x54, 0xd1, 0x94,
+	0xaf, 0x97, 0xd6, 0x1b, 0x00, 0xbb, 0x09, 0xec, 0x80, 0x76, 0xe2, 0xc7, 0x21, 0x75, 0xbd, 0x2b,
+	0x8f, 0x0e, 0xba, 0x7b, 0xb0, 0x0d, 0x0e, 0x13, 0xff, 0xda, 0x0f, 0xee, 0xfd, 0xae, 0x01, 0x4f,
+	0x01, 0x8c, 0x68, 0x1c, 0x24, 0x91, 0x4b, 0xa7, 0xf4, 0x61, 0x44, 0x92, 0x78, 0x4c, 0x07, 0x5d,
+	0x13, 0x9e, 0x80, 0x63, 0xe2, 0xba, 0x34, 0x8e, 0xa7, 0x61, 0x14, 0x8c, 0xbc, 0xbe, 0xa7, 0xc6,
+	0x2d, 0x68, 0x81, 0x5e, 0x83, 0x8f, 0xe9, 0x6d, 0x18, 0x44, 0x24, 0xf2, 0x6e, 0x1e, 0x7f, 0x59,
+	0xf7, 0xfb, 0x5b, 0x03, 0x58, 0x2f, 0x62, 0x89, 0xfe, 0xaf, 0xd5, 0xef, 0xec, 0x76, 0x0c, 0x55,
+	0x93, 0xd0, 0x78, 0x1a, 0xfc, 0x58, 0x98, 0x58, 0x64, 0x9c, 0x21, 0x51, 0x30, 0x9b, 0xcd, 0x78,
+	0xd5, 0xb3, 0xbe, 0xe5, 0x6a, 0x2e, 0xff, 0x3a, 0xed, 0xa5, 0xfe, 0x7c, 0x98, 0xad, 0x21, 0x21,
+	0x9f, 0x66, 0x6f, 0xa8, 0xc3, 0x48, 0x2e, 0x91, 0x96, 0x4a, 0x4d, 0x1c, 0x54, 0x3d, 0x29, 0xbf,
+	0x6a, 0x20, 0x25, 0xb9, 0x4c, 0x1b, 0x20, 0x9d, 0x38, 0xa9, 0x06, 0xb6, 0xa6, 0xa5, 0xa7, 0x18,
+	0x93, 0x5c, 0x62, 0xdc, 0x20, 0x18, 0x4f, 0x1c, 0x8c, 0x35, 0xf4, 0x7c, 0x50, 0x6d, 0xe7, 0x7c,
+	0x07, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x06, 0xb6, 0xd1, 0xf7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/range_error.pb.go b/googleapis/ads/googleads/v3/errors/range_error.pb.go
new file mode 100644
index 0000000..e7c950c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/range_error.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/range_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible range errors.
+type RangeErrorEnum_RangeError int32
+
+const (
+	// Enum unspecified.
+	RangeErrorEnum_UNSPECIFIED RangeErrorEnum_RangeError = 0
+	// The received error code is not known in this version.
+	RangeErrorEnum_UNKNOWN RangeErrorEnum_RangeError = 1
+	// Too low.
+	RangeErrorEnum_TOO_LOW RangeErrorEnum_RangeError = 2
+	// Too high.
+	RangeErrorEnum_TOO_HIGH RangeErrorEnum_RangeError = 3
+)
+
+var RangeErrorEnum_RangeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TOO_LOW",
+	3: "TOO_HIGH",
+}
+
+var RangeErrorEnum_RangeError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"TOO_LOW":     2,
+	"TOO_HIGH":    3,
+}
+
+func (x RangeErrorEnum_RangeError) String() string {
+	return proto.EnumName(RangeErrorEnum_RangeError_name, int32(x))
+}
+
+func (RangeErrorEnum_RangeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2ccd0a5d18cd27d7, []int{0, 0}
+}
+
+// Container for enum describing possible range errors.
+type RangeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RangeErrorEnum) Reset()         { *m = RangeErrorEnum{} }
+func (m *RangeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RangeErrorEnum) ProtoMessage()    {}
+func (*RangeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2ccd0a5d18cd27d7, []int{0}
+}
+
+func (m *RangeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RangeErrorEnum.Unmarshal(m, b)
+}
+func (m *RangeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RangeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *RangeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RangeErrorEnum.Merge(m, src)
+}
+func (m *RangeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RangeErrorEnum.Size(m)
+}
+func (m *RangeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RangeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RangeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.RangeErrorEnum_RangeError", RangeErrorEnum_RangeError_name, RangeErrorEnum_RangeError_value)
+	proto.RegisterType((*RangeErrorEnum)(nil), "google.ads.googleads.v3.errors.RangeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/range_error.proto", fileDescriptor_2ccd0a5d18cd27d7)
+}
+
+var fileDescriptor_2ccd0a5d18cd27d7 = []byte{
+	// 290 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xc3, 0x30,
+	0x18, 0x85, 0x6d, 0x07, 0x2a, 0x99, 0xb8, 0xd2, 0x4b, 0x91, 0x5d, 0xf4, 0x01, 0x12, 0x21, 0x77,
+	0xf1, 0xaa, 0x73, 0xb5, 0x2b, 0x4a, 0x5b, 0xd4, 0xb5, 0x20, 0x85, 0x11, 0x4d, 0x09, 0x85, 0x2d,
+	0x29, 0x49, 0xdd, 0x03, 0x79, 0xe9, 0xa3, 0xf8, 0x28, 0x7b, 0x0a, 0x49, 0x63, 0xbb, 0x2b, 0xbd,
+	0xca, 0xf9, 0xc3, 0x77, 0xce, 0x7f, 0xf8, 0xc1, 0x0d, 0x97, 0x92, 0x6f, 0x6b, 0x44, 0x99, 0x46,
+	0x56, 0x1a, 0xb5, 0xc7, 0xa8, 0x56, 0x4a, 0x2a, 0x8d, 0x14, 0x15, 0xbc, 0xde, 0xf4, 0x03, 0x6c,
+	0x95, 0xec, 0xa4, 0x3f, 0xb7, 0x18, 0xa4, 0x4c, 0xc3, 0xd1, 0x01, 0xf7, 0x18, 0x5a, 0xc7, 0xd5,
+	0xf5, 0x90, 0xd8, 0x36, 0x88, 0x0a, 0x21, 0x3b, 0xda, 0x35, 0x52, 0x68, 0xeb, 0x0e, 0x4a, 0x70,
+	0xf9, 0x64, 0x22, 0x23, 0x03, 0x47, 0xe2, 0x63, 0x17, 0x44, 0x00, 0x1c, 0x7f, 0xfc, 0x19, 0x98,
+	0xae, 0xd3, 0xe7, 0x3c, 0xba, 0x4b, 0xee, 0x93, 0x68, 0xe9, 0x9d, 0xf8, 0x53, 0x70, 0xb6, 0x4e,
+	0x1f, 0xd2, 0xac, 0x4c, 0x3d, 0xc7, 0x0c, 0x2f, 0x59, 0xb6, 0x79, 0xcc, 0x4a, 0xcf, 0xf5, 0x2f,
+	0xc0, 0xb9, 0x19, 0x56, 0x49, 0xbc, 0xf2, 0x26, 0x8b, 0x83, 0x03, 0x82, 0x77, 0xb9, 0x83, 0xff,
+	0xb7, 0x5b, 0xcc, 0x8e, 0xbb, 0x72, 0x53, 0x28, 0x77, 0x5e, 0x97, 0xbf, 0x16, 0x2e, 0xb7, 0x54,
+	0x70, 0x28, 0x15, 0x47, 0xbc, 0x16, 0x7d, 0xdd, 0xe1, 0x24, 0x6d, 0xa3, 0xff, 0xba, 0xd0, 0xad,
+	0x7d, 0x3e, 0xdd, 0x49, 0x1c, 0x86, 0x5f, 0xee, 0x3c, 0xb6, 0x61, 0x21, 0xd3, 0xd0, 0x4a, 0xa3,
+	0x0a, 0x0c, 0xfb, 0x95, 0xfa, 0x7b, 0x00, 0xaa, 0x90, 0xe9, 0x6a, 0x04, 0xaa, 0x02, 0x57, 0x16,
+	0x38, 0xb8, 0x81, 0xfd, 0x25, 0x24, 0x64, 0x9a, 0x90, 0x11, 0x21, 0xa4, 0xc0, 0x84, 0x58, 0xe8,
+	0xed, 0xb4, 0x6f, 0x87, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xcb, 0xe5, 0x3f, 0xbe, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/reach_plan_error.pb.go b/googleapis/ads/googleads/v3/errors/reach_plan_error.pb.go
new file mode 100644
index 0000000..79a6cb9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/reach_plan_error.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/reach_plan_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from ReachPlanService.
+type ReachPlanErrorEnum_ReachPlanError int32
+
+const (
+	// Enum unspecified.
+	ReachPlanErrorEnum_UNSPECIFIED ReachPlanErrorEnum_ReachPlanError = 0
+	// The received error code is not known in this version.
+	ReachPlanErrorEnum_UNKNOWN ReachPlanErrorEnum_ReachPlanError = 1
+)
+
+var ReachPlanErrorEnum_ReachPlanError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+}
+
+var ReachPlanErrorEnum_ReachPlanError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+}
+
+func (x ReachPlanErrorEnum_ReachPlanError) String() string {
+	return proto.EnumName(ReachPlanErrorEnum_ReachPlanError_name, int32(x))
+}
+
+func (ReachPlanErrorEnum_ReachPlanError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8373892c2e751e6f, []int{0, 0}
+}
+
+// Container for enum describing possible errors returned from
+// the ReachPlanService.
+type ReachPlanErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ReachPlanErrorEnum) Reset()         { *m = ReachPlanErrorEnum{} }
+func (m *ReachPlanErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ReachPlanErrorEnum) ProtoMessage()    {}
+func (*ReachPlanErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8373892c2e751e6f, []int{0}
+}
+
+func (m *ReachPlanErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachPlanErrorEnum.Unmarshal(m, b)
+}
+func (m *ReachPlanErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachPlanErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ReachPlanErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachPlanErrorEnum.Merge(m, src)
+}
+func (m *ReachPlanErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ReachPlanErrorEnum.Size(m)
+}
+func (m *ReachPlanErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachPlanErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachPlanErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ReachPlanErrorEnum_ReachPlanError", ReachPlanErrorEnum_ReachPlanError_name, ReachPlanErrorEnum_ReachPlanError_value)
+	proto.RegisterType((*ReachPlanErrorEnum)(nil), "google.ads.googleads.v3.errors.ReachPlanErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/reach_plan_error.proto", fileDescriptor_8373892c2e751e6f)
+}
+
+var fileDescriptor_8373892c2e751e6f = []byte{
+	// 280 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4a, 0xc3, 0x40,
+	0x18, 0x85, 0x4d, 0x04, 0x85, 0x29, 0x68, 0x89, 0x3b, 0x91, 0x2e, 0x72, 0x80, 0x99, 0xc5, 0xe0,
+	0x66, 0x5c, 0xa5, 0x26, 0x96, 0x22, 0xc4, 0xa0, 0x34, 0x82, 0x04, 0xca, 0xd8, 0x84, 0x31, 0x90,
+	0xce, 0x1f, 0x66, 0x62, 0x0f, 0xe4, 0xd2, 0xa3, 0x78, 0x14, 0x17, 0x9e, 0x41, 0x26, 0xbf, 0x09,
+	0x74, 0x61, 0x57, 0xf3, 0x78, 0x7c, 0xef, 0xcd, 0xe3, 0x27, 0xd7, 0x0a, 0x40, 0x35, 0x15, 0x93,
+	0xa5, 0x65, 0x28, 0x9d, 0xda, 0x71, 0x56, 0x19, 0x03, 0xc6, 0x32, 0x53, 0xc9, 0xcd, 0xdb, 0xba,
+	0x6d, 0xa4, 0x5e, 0xf7, 0x0e, 0x6d, 0x0d, 0x74, 0x10, 0xcc, 0x90, 0xa5, 0xb2, 0xb4, 0x74, 0x8c,
+	0xd1, 0x1d, 0xa7, 0x18, 0xbb, 0xbc, 0x1a, 0x6a, 0xdb, 0x9a, 0x49, 0xad, 0xa1, 0x93, 0x5d, 0x0d,
+	0xda, 0x62, 0x3a, 0x8c, 0x49, 0xf0, 0xe8, 0x7a, 0xb3, 0x46, 0xea, 0xc4, 0x05, 0x12, 0xfd, 0xbe,
+	0x0d, 0x29, 0x39, 0xdb, 0x77, 0x83, 0x73, 0x32, 0x59, 0xa5, 0x4f, 0x59, 0x72, 0xbb, 0xbc, 0x5b,
+	0x26, 0xf1, 0xf4, 0x28, 0x98, 0x90, 0xd3, 0x55, 0x7a, 0x9f, 0x3e, 0x3c, 0xa7, 0x53, 0x6f, 0xfe,
+	0xe3, 0x91, 0x70, 0x03, 0x5b, 0x7a, 0x78, 0xca, 0xfc, 0x62, 0xbf, 0x34, 0x73, 0x0b, 0x32, 0xef,
+	0x25, 0xfe, 0x8b, 0x29, 0x68, 0xa4, 0x56, 0x14, 0x8c, 0x62, 0xaa, 0xd2, 0xfd, 0xbe, 0xe1, 0x10,
+	0x6d, 0x6d, 0xff, 0xbb, 0xcb, 0x0d, 0x3e, 0x1f, 0xfe, 0xf1, 0x22, 0x8a, 0x3e, 0xfd, 0xd9, 0x02,
+	0xcb, 0xa2, 0xd2, 0x52, 0x94, 0x4e, 0xe5, 0x9c, 0xf6, 0x5f, 0xda, 0xaf, 0x01, 0x28, 0xa2, 0xd2,
+	0x16, 0x23, 0x50, 0xe4, 0xbc, 0x40, 0xe0, 0xdb, 0x0f, 0xd1, 0x15, 0x22, 0x2a, 0xad, 0x10, 0x23,
+	0x22, 0x44, 0xce, 0x85, 0x40, 0xe8, 0xf5, 0xa4, 0x5f, 0xc7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0x97, 0x50, 0x2d, 0x4b, 0xb4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/recommendation_error.pb.go b/googleapis/ads/googleads/v3/errors/recommendation_error.pb.go
new file mode 100644
index 0000000..6a8d844
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/recommendation_error.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/recommendation_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible errors from applying a recommendation.
+type RecommendationErrorEnum_RecommendationError int32
+
+const (
+	// Enum unspecified.
+	RecommendationErrorEnum_UNSPECIFIED RecommendationErrorEnum_RecommendationError = 0
+	// The received error code is not known in this version.
+	RecommendationErrorEnum_UNKNOWN RecommendationErrorEnum_RecommendationError = 1
+	// The specified budget amount is too low e.g. lower than minimum currency
+	// unit or lower than ad group minimum cost-per-click.
+	RecommendationErrorEnum_BUDGET_AMOUNT_TOO_SMALL RecommendationErrorEnum_RecommendationError = 2
+	// The specified budget amount is too large.
+	RecommendationErrorEnum_BUDGET_AMOUNT_TOO_LARGE RecommendationErrorEnum_RecommendationError = 3
+	// The specified budget amount is not a valid amount. e.g. not a multiple
+	// of minimum currency unit.
+	RecommendationErrorEnum_INVALID_BUDGET_AMOUNT RecommendationErrorEnum_RecommendationError = 4
+	// The specified keyword or ad violates ad policy.
+	RecommendationErrorEnum_POLICY_ERROR RecommendationErrorEnum_RecommendationError = 5
+	// The specified bid amount is not valid. e.g. too many fractional digits,
+	// or negative amount.
+	RecommendationErrorEnum_INVALID_BID_AMOUNT RecommendationErrorEnum_RecommendationError = 6
+	// The number of keywords in ad group have reached the maximum allowed.
+	RecommendationErrorEnum_ADGROUP_KEYWORD_LIMIT RecommendationErrorEnum_RecommendationError = 7
+	// The recommendation requested to apply has already been applied.
+	RecommendationErrorEnum_RECOMMENDATION_ALREADY_APPLIED RecommendationErrorEnum_RecommendationError = 8
+	// The recommendation requested to apply has been invalidated.
+	RecommendationErrorEnum_RECOMMENDATION_INVALIDATED RecommendationErrorEnum_RecommendationError = 9
+	// The number of operations in a single request exceeds the maximum allowed.
+	RecommendationErrorEnum_TOO_MANY_OPERATIONS RecommendationErrorEnum_RecommendationError = 10
+	// There are no operations in the request.
+	RecommendationErrorEnum_NO_OPERATIONS RecommendationErrorEnum_RecommendationError = 11
+	// Operations with multiple recommendation types are not supported when
+	// partial failure mode is not enabled.
+	RecommendationErrorEnum_DIFFERENT_TYPES_NOT_SUPPORTED RecommendationErrorEnum_RecommendationError = 12
+	// Request contains multiple operations with the same resource_name.
+	RecommendationErrorEnum_DUPLICATE_RESOURCE_NAME RecommendationErrorEnum_RecommendationError = 13
+	// The recommendation requested to dismiss has already been dismissed.
+	RecommendationErrorEnum_RECOMMENDATION_ALREADY_DISMISSED RecommendationErrorEnum_RecommendationError = 14
+	// The recommendation apply request was malformed and invalid.
+	RecommendationErrorEnum_INVALID_APPLY_REQUEST RecommendationErrorEnum_RecommendationError = 15
+)
+
+var RecommendationErrorEnum_RecommendationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BUDGET_AMOUNT_TOO_SMALL",
+	3:  "BUDGET_AMOUNT_TOO_LARGE",
+	4:  "INVALID_BUDGET_AMOUNT",
+	5:  "POLICY_ERROR",
+	6:  "INVALID_BID_AMOUNT",
+	7:  "ADGROUP_KEYWORD_LIMIT",
+	8:  "RECOMMENDATION_ALREADY_APPLIED",
+	9:  "RECOMMENDATION_INVALIDATED",
+	10: "TOO_MANY_OPERATIONS",
+	11: "NO_OPERATIONS",
+	12: "DIFFERENT_TYPES_NOT_SUPPORTED",
+	13: "DUPLICATE_RESOURCE_NAME",
+	14: "RECOMMENDATION_ALREADY_DISMISSED",
+	15: "INVALID_APPLY_REQUEST",
+}
+
+var RecommendationErrorEnum_RecommendationError_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"BUDGET_AMOUNT_TOO_SMALL":          2,
+	"BUDGET_AMOUNT_TOO_LARGE":          3,
+	"INVALID_BUDGET_AMOUNT":            4,
+	"POLICY_ERROR":                     5,
+	"INVALID_BID_AMOUNT":               6,
+	"ADGROUP_KEYWORD_LIMIT":            7,
+	"RECOMMENDATION_ALREADY_APPLIED":   8,
+	"RECOMMENDATION_INVALIDATED":       9,
+	"TOO_MANY_OPERATIONS":              10,
+	"NO_OPERATIONS":                    11,
+	"DIFFERENT_TYPES_NOT_SUPPORTED":    12,
+	"DUPLICATE_RESOURCE_NAME":          13,
+	"RECOMMENDATION_ALREADY_DISMISSED": 14,
+	"INVALID_APPLY_REQUEST":            15,
+}
+
+func (x RecommendationErrorEnum_RecommendationError) String() string {
+	return proto.EnumName(RecommendationErrorEnum_RecommendationError_name, int32(x))
+}
+
+func (RecommendationErrorEnum_RecommendationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_222bd14d82b9986e, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a recommendation.
+type RecommendationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RecommendationErrorEnum) Reset()         { *m = RecommendationErrorEnum{} }
+func (m *RecommendationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RecommendationErrorEnum) ProtoMessage()    {}
+func (*RecommendationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_222bd14d82b9986e, []int{0}
+}
+
+func (m *RecommendationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RecommendationErrorEnum.Unmarshal(m, b)
+}
+func (m *RecommendationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RecommendationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *RecommendationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RecommendationErrorEnum.Merge(m, src)
+}
+func (m *RecommendationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RecommendationErrorEnum.Size(m)
+}
+func (m *RecommendationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RecommendationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RecommendationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.RecommendationErrorEnum_RecommendationError", RecommendationErrorEnum_RecommendationError_name, RecommendationErrorEnum_RecommendationError_value)
+	proto.RegisterType((*RecommendationErrorEnum)(nil), "google.ads.googleads.v3.errors.RecommendationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/recommendation_error.proto", fileDescriptor_222bd14d82b9986e)
+}
+
+var fileDescriptor_222bd14d82b9986e = []byte{
+	// 516 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6e, 0xd3, 0x3e,
+	0x14, 0xc6, 0xff, 0x6d, 0xff, 0x6c, 0xe0, 0x6e, 0xcc, 0x78, 0x82, 0xc2, 0x80, 0x0a, 0x2a, 0xae,
+	0x93, 0x8b, 0x5c, 0x11, 0xae, 0xdc, 0xfa, 0xb4, 0xb2, 0x96, 0xd8, 0xc6, 0x49, 0x3a, 0x05, 0x55,
+	0xb2, 0xca, 0x52, 0x45, 0x95, 0xd6, 0xa4, 0x4a, 0xca, 0x1e, 0x88, 0x4b, 0x1e, 0x82, 0x07, 0xe0,
+	0x11, 0x78, 0x04, 0x6e, 0x79, 0x01, 0x94, 0x64, 0xad, 0x36, 0xd4, 0x71, 0x95, 0xa3, 0xe3, 0xdf,
+	0xf7, 0xf9, 0x1c, 0xe7, 0x43, 0xef, 0xd3, 0x3c, 0x4f, 0xaf, 0x16, 0xf6, 0x3c, 0x29, 0xed, 0xa6,
+	0xac, 0xaa, 0x6b, 0xc7, 0x5e, 0x14, 0x45, 0x5e, 0x94, 0x76, 0xb1, 0xb8, 0xcc, 0x57, 0xab, 0x45,
+	0x96, 0xcc, 0x37, 0xcb, 0x3c, 0x33, 0x75, 0xd7, 0x5a, 0x17, 0xf9, 0x26, 0x27, 0xfd, 0x86, 0xb7,
+	0xe6, 0x49, 0x69, 0xed, 0xa4, 0xd6, 0xb5, 0x63, 0x35, 0xd2, 0xb3, 0x57, 0x5b, 0xeb, 0xf5, 0xd2,
+	0x9e, 0x67, 0x59, 0xbe, 0xa9, 0x2d, 0xca, 0x46, 0x3d, 0xf8, 0xd9, 0x41, 0x3d, 0x7d, 0xc7, 0x1c,
+	0x2a, 0x19, 0x64, 0x5f, 0x56, 0x83, 0xef, 0x1d, 0x74, 0xba, 0xe7, 0x8c, 0x9c, 0xa0, 0x6e, 0x24,
+	0x02, 0x05, 0x23, 0x3e, 0xe6, 0xc0, 0xf0, 0x7f, 0xa4, 0x8b, 0x0e, 0x23, 0x71, 0x2e, 0xe4, 0x85,
+	0xc0, 0x2d, 0xf2, 0x12, 0xf5, 0x86, 0x11, 0x9b, 0x40, 0x68, 0xa8, 0x2f, 0x23, 0x11, 0x9a, 0x50,
+	0x4a, 0x13, 0xf8, 0xd4, 0xf3, 0x70, 0x7b, 0xff, 0xa1, 0x47, 0xf5, 0x04, 0x70, 0x87, 0xbc, 0x40,
+	0x4f, 0xb9, 0x98, 0x52, 0x8f, 0x33, 0x73, 0x07, 0xc2, 0xff, 0x13, 0x8c, 0x8e, 0x94, 0xf4, 0xf8,
+	0x28, 0x36, 0xa0, 0xb5, 0xd4, 0xf8, 0x01, 0x79, 0x86, 0xc8, 0x0e, 0xe6, 0x6c, 0x4b, 0x1e, 0x54,
+	0x26, 0x94, 0x4d, 0xb4, 0x8c, 0x94, 0x39, 0x87, 0xf8, 0x42, 0x6a, 0x66, 0x3c, 0xee, 0xf3, 0x10,
+	0x1f, 0x92, 0x01, 0xea, 0x6b, 0x18, 0x49, 0xdf, 0x07, 0xc1, 0x68, 0xc8, 0xa5, 0x30, 0xd4, 0xd3,
+	0x40, 0x59, 0x6c, 0xa8, 0x52, 0x5e, 0xb5, 0xca, 0x43, 0xd2, 0x47, 0x67, 0x7f, 0x31, 0x37, 0xb7,
+	0xd0, 0x10, 0x18, 0x7e, 0x44, 0x7a, 0xe8, 0xb4, 0x1a, 0xd9, 0xa7, 0x22, 0x36, 0x52, 0x81, 0xae,
+	0x99, 0x00, 0x23, 0xf2, 0x04, 0x1d, 0x0b, 0x79, 0xbb, 0xd5, 0x25, 0x6f, 0xd1, 0x6b, 0xc6, 0xc7,
+	0x63, 0xd0, 0x50, 0x2d, 0x1a, 0x2b, 0x08, 0x8c, 0x90, 0xa1, 0x09, 0x22, 0xa5, 0xa4, 0xae, 0xec,
+	0x8e, 0xaa, 0xf7, 0x60, 0x91, 0xf2, 0xf8, 0x88, 0x86, 0x60, 0x34, 0x04, 0x32, 0xd2, 0x23, 0x30,
+	0x82, 0xfa, 0x80, 0x8f, 0xc9, 0x3b, 0xf4, 0xe6, 0x9e, 0x79, 0x19, 0x0f, 0x7c, 0x1e, 0x04, 0xc0,
+	0xf0, 0xe3, 0xdb, 0xaf, 0x56, 0xad, 0x11, 0x1b, 0x0d, 0x1f, 0x23, 0x08, 0x42, 0x7c, 0x32, 0xfc,
+	0xdd, 0x42, 0x83, 0xcb, 0x7c, 0x65, 0xfd, 0x3b, 0x21, 0xc3, 0xe7, 0x7b, 0x7e, 0xb2, 0xaa, 0xd2,
+	0xa1, 0x5a, 0x9f, 0xd8, 0x8d, 0x36, 0xcd, 0xaf, 0xe6, 0x59, 0x6a, 0xe5, 0x45, 0x6a, 0xa7, 0x8b,
+	0xac, 0xce, 0xce, 0x36, 0xa8, 0xeb, 0x65, 0x79, 0x5f, 0x6e, 0x3f, 0x34, 0x9f, 0xaf, 0xed, 0xce,
+	0x84, 0xd2, 0x6f, 0xed, 0xfe, 0xa4, 0x31, 0xa3, 0x49, 0x69, 0x35, 0x65, 0x55, 0x4d, 0x1d, 0xab,
+	0xbe, 0xb2, 0xfc, 0xb1, 0x05, 0x66, 0x34, 0x29, 0x67, 0x3b, 0x60, 0x36, 0x75, 0x66, 0x0d, 0xf0,
+	0xab, 0x3d, 0x68, 0xba, 0xae, 0x4b, 0x93, 0xd2, 0x75, 0x77, 0x88, 0xeb, 0x4e, 0x1d, 0xd7, 0x6d,
+	0xa0, 0xcf, 0x07, 0xf5, 0x74, 0xce, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x84, 0x41, 0x6b, 0x56,
+	0x54, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/region_code_error.pb.go b/googleapis/ads/googleads/v3/errors/region_code_error.pb.go
new file mode 100644
index 0000000..8b75314
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/region_code_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/region_code_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible region code errors.
+type RegionCodeErrorEnum_RegionCodeError int32
+
+const (
+	// Enum unspecified.
+	RegionCodeErrorEnum_UNSPECIFIED RegionCodeErrorEnum_RegionCodeError = 0
+	// The received error code is not known in this version.
+	RegionCodeErrorEnum_UNKNOWN RegionCodeErrorEnum_RegionCodeError = 1
+	// Invalid region code.
+	RegionCodeErrorEnum_INVALID_REGION_CODE RegionCodeErrorEnum_RegionCodeError = 2
+)
+
+var RegionCodeErrorEnum_RegionCodeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_REGION_CODE",
+}
+
+var RegionCodeErrorEnum_RegionCodeError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"INVALID_REGION_CODE": 2,
+}
+
+func (x RegionCodeErrorEnum_RegionCodeError) String() string {
+	return proto.EnumName(RegionCodeErrorEnum_RegionCodeError_name, int32(x))
+}
+
+func (RegionCodeErrorEnum_RegionCodeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_82b26e9ba20863ce, []int{0, 0}
+}
+
+// Container for enum describing possible region code errors.
+type RegionCodeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RegionCodeErrorEnum) Reset()         { *m = RegionCodeErrorEnum{} }
+func (m *RegionCodeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RegionCodeErrorEnum) ProtoMessage()    {}
+func (*RegionCodeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_82b26e9ba20863ce, []int{0}
+}
+
+func (m *RegionCodeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RegionCodeErrorEnum.Unmarshal(m, b)
+}
+func (m *RegionCodeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RegionCodeErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *RegionCodeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RegionCodeErrorEnum.Merge(m, src)
+}
+func (m *RegionCodeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RegionCodeErrorEnum.Size(m)
+}
+func (m *RegionCodeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RegionCodeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RegionCodeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.RegionCodeErrorEnum_RegionCodeError", RegionCodeErrorEnum_RegionCodeError_name, RegionCodeErrorEnum_RegionCodeError_value)
+	proto.RegisterType((*RegionCodeErrorEnum)(nil), "google.ads.googleads.v3.errors.RegionCodeErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/region_code_error.proto", fileDescriptor_82b26e9ba20863ce)
+}
+
+var fileDescriptor_82b26e9ba20863ce = []byte{
+	// 302 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4a, 0x03, 0x31,
+	0x18, 0x85, 0xed, 0x08, 0x0a, 0xe9, 0xa2, 0x65, 0x2a, 0x08, 0x22, 0x5d, 0xcc, 0x01, 0x92, 0x45,
+	0xc0, 0x45, 0x5c, 0xa5, 0x9d, 0x58, 0x07, 0x25, 0x2d, 0x95, 0x8e, 0x20, 0x03, 0xc3, 0xd8, 0x84,
+	0x30, 0xd0, 0xe6, 0x2f, 0x49, 0xed, 0x81, 0x5c, 0x7a, 0x14, 0x8f, 0xe2, 0xc6, 0x2b, 0xc8, 0x4c,
+	0x6c, 0x17, 0x05, 0x5d, 0xe5, 0xf1, 0xf8, 0xde, 0xcb, 0xe3, 0x47, 0x37, 0x06, 0xc0, 0xac, 0x34,
+	0xa9, 0x94, 0x27, 0x41, 0x36, 0x6a, 0x47, 0x89, 0x76, 0x0e, 0x9c, 0x27, 0x4e, 0x9b, 0x1a, 0x6c,
+	0xb9, 0x04, 0xa5, 0xcb, 0xd6, 0xc2, 0x1b, 0x07, 0x5b, 0x88, 0x87, 0x01, 0xc6, 0x95, 0xf2, 0xf8,
+	0x90, 0xc3, 0x3b, 0x8a, 0x43, 0xee, 0xea, 0x7a, 0xdf, 0xbb, 0xa9, 0x49, 0x65, 0x2d, 0x6c, 0xab,
+	0x6d, 0x0d, 0xd6, 0x87, 0x74, 0x52, 0xa2, 0xc1, 0xbc, 0x2d, 0x1e, 0x83, 0xd2, 0xa2, 0x49, 0x08,
+	0xfb, 0xb6, 0x4e, 0xee, 0x51, 0xef, 0xc8, 0x8e, 0x7b, 0xa8, 0xbb, 0x90, 0x4f, 0x33, 0x31, 0xce,
+	0xee, 0x32, 0x91, 0xf6, 0x4f, 0xe2, 0x2e, 0x3a, 0x5f, 0xc8, 0x07, 0x39, 0x7d, 0x96, 0xfd, 0x4e,
+	0x7c, 0x89, 0x06, 0x99, 0xcc, 0xf9, 0x63, 0x96, 0x96, 0x73, 0x31, 0xc9, 0xa6, 0xb2, 0x1c, 0x4f,
+	0x53, 0xd1, 0x8f, 0x46, 0xdf, 0x1d, 0x94, 0x2c, 0x61, 0x8d, 0xff, 0x5f, 0x39, 0xba, 0x38, 0xfa,
+	0x6e, 0xd6, 0xac, 0x9b, 0x75, 0x5e, 0xd2, 0xdf, 0x9c, 0x81, 0x55, 0x65, 0x0d, 0x06, 0x67, 0x88,
+	0xd1, 0xb6, 0xdd, 0xbe, 0xbf, 0xd2, 0xa6, 0xf6, 0x7f, 0x1d, 0xed, 0x36, 0x3c, 0xef, 0xd1, 0xe9,
+	0x84, 0xf3, 0x8f, 0x68, 0x38, 0x09, 0x65, 0x5c, 0x79, 0x1c, 0x64, 0xa3, 0x72, 0x8a, 0xdb, 0x2f,
+	0xfd, 0xe7, 0x1e, 0x28, 0xb8, 0xf2, 0xc5, 0x01, 0x28, 0x72, 0x5a, 0x04, 0xe0, 0x2b, 0x4a, 0x82,
+	0xcb, 0x18, 0x57, 0x9e, 0xb1, 0x03, 0xc2, 0x58, 0x4e, 0x19, 0x0b, 0xd0, 0xeb, 0x59, 0xbb, 0x8e,
+	0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xd3, 0xa4, 0x21, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/request_error.pb.go b/googleapis/ads/googleads/v3/errors/request_error.pb.go
new file mode 100644
index 0000000..f742113
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/request_error.pb.go
@@ -0,0 +1,232 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/request_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible request errors.
+type RequestErrorEnum_RequestError int32
+
+const (
+	// Enum unspecified.
+	RequestErrorEnum_UNSPECIFIED RequestErrorEnum_RequestError = 0
+	// The received error code is not known in this version.
+	RequestErrorEnum_UNKNOWN RequestErrorEnum_RequestError = 1
+	// Resource name is required for this request.
+	RequestErrorEnum_RESOURCE_NAME_MISSING RequestErrorEnum_RequestError = 3
+	// Resource name provided is malformed.
+	RequestErrorEnum_RESOURCE_NAME_MALFORMED RequestErrorEnum_RequestError = 4
+	// Resource name provided is malformed.
+	RequestErrorEnum_BAD_RESOURCE_ID RequestErrorEnum_RequestError = 17
+	// Customer ID is invalid.
+	RequestErrorEnum_INVALID_CUSTOMER_ID RequestErrorEnum_RequestError = 16
+	// Mutate operation should have either create, update, or remove specified.
+	RequestErrorEnum_OPERATION_REQUIRED RequestErrorEnum_RequestError = 5
+	// Requested resource not found.
+	RequestErrorEnum_RESOURCE_NOT_FOUND RequestErrorEnum_RequestError = 6
+	// Next page token specified in user request is invalid.
+	RequestErrorEnum_INVALID_PAGE_TOKEN RequestErrorEnum_RequestError = 7
+	// Next page token specified in user request has expired.
+	RequestErrorEnum_EXPIRED_PAGE_TOKEN RequestErrorEnum_RequestError = 8
+	// Page size specified in user request is invalid.
+	RequestErrorEnum_INVALID_PAGE_SIZE RequestErrorEnum_RequestError = 22
+	// Required field is missing.
+	RequestErrorEnum_REQUIRED_FIELD_MISSING RequestErrorEnum_RequestError = 9
+	// The field cannot be modified because it's immutable. It's also possible
+	// that the field can be modified using 'create' operation but not 'update'.
+	RequestErrorEnum_IMMUTABLE_FIELD RequestErrorEnum_RequestError = 11
+	// Received too many entries in request.
+	RequestErrorEnum_TOO_MANY_MUTATE_OPERATIONS RequestErrorEnum_RequestError = 13
+	// Request cannot be executed by a manager account.
+	RequestErrorEnum_CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT RequestErrorEnum_RequestError = 14
+	// Mutate request was attempting to modify a readonly field.
+	// For instance, Budget fields can be requested for Ad Group,
+	// but are read-only for adGroups:mutate.
+	RequestErrorEnum_CANNOT_MODIFY_FOREIGN_FIELD RequestErrorEnum_RequestError = 15
+	// Enum value is not permitted.
+	RequestErrorEnum_INVALID_ENUM_VALUE RequestErrorEnum_RequestError = 18
+	// The developer-token parameter is required for all requests.
+	RequestErrorEnum_DEVELOPER_TOKEN_PARAMETER_MISSING RequestErrorEnum_RequestError = 19
+	// The login-customer-id parameter is required for this request.
+	RequestErrorEnum_LOGIN_CUSTOMER_ID_PARAMETER_MISSING RequestErrorEnum_RequestError = 20
+	// page_token is set in the validate only request
+	RequestErrorEnum_VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN RequestErrorEnum_RequestError = 21
+	// return_summary_row cannot be enabled if request did not select any
+	// metrics field.
+	RequestErrorEnum_CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS RequestErrorEnum_RequestError = 29
+	// return_summary_row should not be enabled for validate only requests.
+	RequestErrorEnum_CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS RequestErrorEnum_RequestError = 30
+	// return_summary_row parameter value should be the same between requests
+	// with page_token field set and their original request.
+	RequestErrorEnum_INCONSISTENT_RETURN_SUMMARY_ROW_VALUE RequestErrorEnum_RequestError = 31
+	// The total results count cannot be returned if it was not requested in the
+	// original request.
+	RequestErrorEnum_TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED RequestErrorEnum_RequestError = 32
+)
+
+var RequestErrorEnum_RequestError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "RESOURCE_NAME_MISSING",
+	4:  "RESOURCE_NAME_MALFORMED",
+	17: "BAD_RESOURCE_ID",
+	16: "INVALID_CUSTOMER_ID",
+	5:  "OPERATION_REQUIRED",
+	6:  "RESOURCE_NOT_FOUND",
+	7:  "INVALID_PAGE_TOKEN",
+	8:  "EXPIRED_PAGE_TOKEN",
+	22: "INVALID_PAGE_SIZE",
+	9:  "REQUIRED_FIELD_MISSING",
+	11: "IMMUTABLE_FIELD",
+	13: "TOO_MANY_MUTATE_OPERATIONS",
+	14: "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT",
+	15: "CANNOT_MODIFY_FOREIGN_FIELD",
+	18: "INVALID_ENUM_VALUE",
+	19: "DEVELOPER_TOKEN_PARAMETER_MISSING",
+	20: "LOGIN_CUSTOMER_ID_PARAMETER_MISSING",
+	21: "VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN",
+	29: "CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS",
+	30: "CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS",
+	31: "INCONSISTENT_RETURN_SUMMARY_ROW_VALUE",
+	32: "TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED",
+}
+
+var RequestErrorEnum_RequestError_value = map[string]int32{
+	"UNSPECIFIED":                                           0,
+	"UNKNOWN":                                               1,
+	"RESOURCE_NAME_MISSING":                                 3,
+	"RESOURCE_NAME_MALFORMED":                               4,
+	"BAD_RESOURCE_ID":                                       17,
+	"INVALID_CUSTOMER_ID":                                   16,
+	"OPERATION_REQUIRED":                                    5,
+	"RESOURCE_NOT_FOUND":                                    6,
+	"INVALID_PAGE_TOKEN":                                    7,
+	"EXPIRED_PAGE_TOKEN":                                    8,
+	"INVALID_PAGE_SIZE":                                     22,
+	"REQUIRED_FIELD_MISSING":                                9,
+	"IMMUTABLE_FIELD":                                       11,
+	"TOO_MANY_MUTATE_OPERATIONS":                            13,
+	"CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT":                 14,
+	"CANNOT_MODIFY_FOREIGN_FIELD":                           15,
+	"INVALID_ENUM_VALUE":                                    18,
+	"DEVELOPER_TOKEN_PARAMETER_MISSING":                     19,
+	"LOGIN_CUSTOMER_ID_PARAMETER_MISSING":                   20,
+	"VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN":                  21,
+	"CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS": 29,
+	"CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS":  30,
+	"INCONSISTENT_RETURN_SUMMARY_ROW_VALUE":                 31,
+	"TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED":          32,
+}
+
+func (x RequestErrorEnum_RequestError) String() string {
+	return proto.EnumName(RequestErrorEnum_RequestError_name, int32(x))
+}
+
+func (RequestErrorEnum_RequestError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7bc15dc4a4456f34, []int{0, 0}
+}
+
+// Container for enum describing possible request errors.
+type RequestErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RequestErrorEnum) Reset()         { *m = RequestErrorEnum{} }
+func (m *RequestErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RequestErrorEnum) ProtoMessage()    {}
+func (*RequestErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7bc15dc4a4456f34, []int{0}
+}
+
+func (m *RequestErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RequestErrorEnum.Unmarshal(m, b)
+}
+func (m *RequestErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RequestErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *RequestErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RequestErrorEnum.Merge(m, src)
+}
+func (m *RequestErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RequestErrorEnum.Size(m)
+}
+func (m *RequestErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RequestErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RequestErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.RequestErrorEnum_RequestError", RequestErrorEnum_RequestError_name, RequestErrorEnum_RequestError_value)
+	proto.RegisterType((*RequestErrorEnum)(nil), "google.ads.googleads.v3.errors.RequestErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/request_error.proto", fileDescriptor_7bc15dc4a4456f34)
+}
+
+var fileDescriptor_7bc15dc4a4456f34 = []byte{
+	// 661 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xe1, 0x4e, 0x13, 0x41,
+	0x10, 0x16, 0xd0, 0xa2, 0x8b, 0xca, 0xb2, 0x08, 0x44, 0xd0, 0xa2, 0x55, 0xa2, 0x26, 0xe6, 0x6a,
+	0xac, 0x26, 0x7a, 0xfe, 0xda, 0xde, 0x4d, 0x8f, 0x0d, 0x77, 0xbb, 0x75, 0x6f, 0xb7, 0x50, 0xd2,
+	0x64, 0x53, 0x6d, 0xd3, 0x90, 0x40, 0x0f, 0x7b, 0x85, 0x87, 0xf0, 0x25, 0x4c, 0xfc, 0xe9, 0xa3,
+	0xf8, 0x28, 0xc6, 0x87, 0x30, 0x7b, 0xd7, 0x1e, 0xd5, 0x20, 0xbf, 0x6e, 0x6e, 0xe6, 0xfb, 0x66,
+	0xbe, 0x99, 0xec, 0x87, 0x5e, 0x0f, 0x92, 0x64, 0x70, 0xdc, 0xaf, 0x76, 0x7b, 0x69, 0x35, 0x0f,
+	0x6d, 0x74, 0x5e, 0xab, 0xf6, 0x47, 0xa3, 0x64, 0x94, 0x56, 0x47, 0xfd, 0x2f, 0x67, 0xfd, 0x74,
+	0x6c, 0xb2, 0x5f, 0xe7, 0x74, 0x94, 0x8c, 0x13, 0x52, 0xce, 0x81, 0x4e, 0xb7, 0x97, 0x3a, 0x05,
+	0xc7, 0x39, 0xaf, 0x39, 0x39, 0x67, 0xf3, 0xc1, 0xb4, 0xe7, 0xe9, 0x51, 0xb5, 0x3b, 0x1c, 0x26,
+	0xe3, 0xee, 0xf8, 0x28, 0x19, 0xa6, 0x39, 0xbb, 0xf2, 0xad, 0x84, 0xb0, 0xcc, 0xbb, 0x82, 0xc5,
+	0xc3, 0xf0, 0xec, 0xa4, 0xf2, 0xb5, 0x84, 0x6e, 0xcf, 0x26, 0xc9, 0x32, 0x5a, 0xd2, 0x3c, 0x6e,
+	0x82, 0xc7, 0x1a, 0x0c, 0x7c, 0x7c, 0x8d, 0x2c, 0xa1, 0x45, 0xcd, 0xf7, 0xb8, 0xd8, 0xe7, 0x78,
+	0x8e, 0xdc, 0x47, 0x6b, 0x12, 0x62, 0xa1, 0xa5, 0x07, 0x86, 0xd3, 0x08, 0x4c, 0xc4, 0xe2, 0x98,
+	0xf1, 0x00, 0x2f, 0x90, 0x2d, 0xb4, 0xf1, 0x4f, 0x89, 0x86, 0x0d, 0x21, 0x23, 0xf0, 0xf1, 0x75,
+	0xb2, 0x8a, 0x96, 0xeb, 0xd4, 0x37, 0x05, 0x80, 0xf9, 0x78, 0x85, 0x6c, 0xa0, 0x55, 0xc6, 0x5b,
+	0x34, 0x64, 0xbe, 0xf1, 0x74, 0xac, 0x44, 0x04, 0xd2, 0x16, 0x30, 0x59, 0x47, 0x44, 0x34, 0x41,
+	0x52, 0xc5, 0x04, 0x37, 0x12, 0x3e, 0x6a, 0x26, 0xc1, 0xc7, 0x37, 0x6c, 0xfe, 0x62, 0x84, 0x50,
+	0xa6, 0x21, 0x34, 0xf7, 0x71, 0xc9, 0xe6, 0xa7, 0x8d, 0x9a, 0x34, 0x00, 0xa3, 0xc4, 0x1e, 0x70,
+	0xbc, 0x68, 0xf3, 0x70, 0xd0, 0xb4, 0xe4, 0xd9, 0xfc, 0x4d, 0xb2, 0x86, 0x56, 0xfe, 0xc2, 0xc7,
+	0xec, 0x10, 0xf0, 0x3a, 0xd9, 0x44, 0xeb, 0xd3, 0x61, 0xa6, 0xc1, 0x20, 0xf4, 0x8b, 0xed, 0x6e,
+	0xd9, 0x05, 0x58, 0x14, 0x69, 0x45, 0xeb, 0x21, 0xe4, 0x45, 0xbc, 0x44, 0xca, 0x68, 0x53, 0x09,
+	0x61, 0x22, 0xca, 0xdb, 0xc6, 0xd6, 0x14, 0x98, 0x42, 0x77, 0x8c, 0xef, 0x90, 0x17, 0x68, 0xc7,
+	0xa3, 0xdc, 0x2a, 0xad, 0x83, 0x81, 0x03, 0xf0, 0xb4, 0x02, 0xdf, 0xd4, 0xdb, 0x96, 0x41, 0x03,
+	0x90, 0x86, 0x7a, 0x9e, 0xd0, 0x5c, 0xe1, 0xbb, 0x64, 0x1b, 0x6d, 0x4d, 0xa0, 0x91, 0xf0, 0x59,
+	0xa3, 0x6d, 0x1a, 0x42, 0x02, 0x0b, 0xf8, 0x64, 0xd6, 0xf2, 0xec, 0x8e, 0xc0, 0x75, 0x64, 0x5a,
+	0x34, 0xd4, 0x80, 0x09, 0xd9, 0x41, 0x8f, 0x7d, 0x68, 0x41, 0x68, 0x07, 0xe7, 0x0b, 0x9a, 0x26,
+	0x95, 0x34, 0x02, 0x05, 0xb2, 0xd0, 0xbf, 0x4a, 0x9e, 0xa1, 0x27, 0xa1, 0x08, 0x18, 0x9f, 0xbd,
+	0xf4, 0x25, 0xc0, 0x7b, 0xe4, 0x39, 0x7a, 0x9a, 0x4d, 0xc9, 0x96, 0xe1, 0x61, 0x3b, 0xbb, 0x3f,
+	0xc4, 0xca, 0xec, 0xd2, 0x78, 0xf6, 0x8a, 0x6b, 0xe4, 0x3d, 0x7a, 0x3b, 0x91, 0x2c, 0x41, 0x69,
+	0xc9, 0x4d, 0xac, 0xa3, 0x88, 0xca, 0xb6, 0x91, 0x62, 0xdf, 0xca, 0x2f, 0x98, 0xfb, 0x4c, 0xed,
+	0x0a, 0xad, 0x4c, 0x04, 0x4a, 0x32, 0x2f, 0xc6, 0x0f, 0xc9, 0x3b, 0xf4, 0xe6, 0x6a, 0xea, 0xa5,
+	0x12, 0x62, 0x5c, 0xb6, 0x27, 0x65, 0xdc, 0x13, 0x3c, 0x66, 0xb1, 0x02, 0x7e, 0x29, 0x3f, 0xbf,
+	0xcc, 0x36, 0x79, 0x85, 0x5e, 0x2a, 0xa1, 0x68, 0x68, 0x5f, 0x9d, 0x0e, 0x55, 0x6c, 0xb2, 0x5b,
+	0x67, 0x0f, 0x47, 0x48, 0x16, 0x30, 0x4e, 0xc3, 0x8b, 0xde, 0xe0, 0xe3, 0x47, 0xf5, 0xdf, 0x73,
+	0xa8, 0xf2, 0x39, 0x39, 0x71, 0xae, 0xb6, 0x59, 0x7d, 0x65, 0xd6, 0x30, 0x4d, 0xeb, 0xad, 0xe6,
+	0xdc, 0xa1, 0x3f, 0x21, 0x0d, 0x92, 0xe3, 0xee, 0x70, 0xe0, 0x24, 0xa3, 0x41, 0x75, 0xd0, 0x1f,
+	0x66, 0xce, 0x9b, 0xfa, 0xfb, 0xf4, 0x28, 0xfd, 0x9f, 0xdd, 0x3f, 0xe4, 0x9f, 0xef, 0xf3, 0x0b,
+	0x01, 0xa5, 0x3f, 0xe6, 0xcb, 0x41, 0xde, 0x8c, 0xf6, 0x52, 0x27, 0x0f, 0x6d, 0xd4, 0xaa, 0x39,
+	0xd9, 0xc8, 0xf4, 0xe7, 0x14, 0xd0, 0xa1, 0xbd, 0xb4, 0x53, 0x00, 0x3a, 0xad, 0x5a, 0x27, 0x07,
+	0xfc, 0x9a, 0xaf, 0xe4, 0x59, 0xd7, 0xa5, 0xbd, 0xd4, 0x75, 0x0b, 0x88, 0xeb, 0xb6, 0x6a, 0xae,
+	0x9b, 0x83, 0x3e, 0x95, 0x32, 0x75, 0xb5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0x5a, 0x4d,
+	0x14, 0x8b, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/resource_access_denied_error.pb.go b/googleapis/ads/googleads/v3/errors/resource_access_denied_error.pb.go
new file mode 100644
index 0000000..f472de6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/resource_access_denied_error.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/resource_access_denied_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible resource access denied errors.
+type ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError int32
+
+const (
+	// Enum unspecified.
+	ResourceAccessDeniedErrorEnum_UNSPECIFIED ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 0
+	// The received error code is not known in this version.
+	ResourceAccessDeniedErrorEnum_UNKNOWN ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 1
+	// User did not have write access.
+	ResourceAccessDeniedErrorEnum_WRITE_ACCESS_DENIED ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 3
+)
+
+var ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "WRITE_ACCESS_DENIED",
+}
+
+var ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"WRITE_ACCESS_DENIED": 3,
+}
+
+func (x ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError) String() string {
+	return proto.EnumName(ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name, int32(x))
+}
+
+func (ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2995c18210d516d0, []int{0, 0}
+}
+
+// Container for enum describing possible resource access denied errors.
+type ResourceAccessDeniedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResourceAccessDeniedErrorEnum) Reset()         { *m = ResourceAccessDeniedErrorEnum{} }
+func (m *ResourceAccessDeniedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ResourceAccessDeniedErrorEnum) ProtoMessage()    {}
+func (*ResourceAccessDeniedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2995c18210d516d0, []int{0}
+}
+
+func (m *ResourceAccessDeniedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Unmarshal(m, b)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceAccessDeniedErrorEnum.Merge(m, src)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Size(m)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceAccessDeniedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceAccessDeniedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError", ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name, ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_value)
+	proto.RegisterType((*ResourceAccessDeniedErrorEnum)(nil), "google.ads.googleads.v3.errors.ResourceAccessDeniedErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/resource_access_denied_error.proto", fileDescriptor_2995c18210d516d0)
+}
+
+var fileDescriptor_2995c18210d516d0 = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x6a, 0x02, 0x31,
+	0x18, 0x85, 0xab, 0x42, 0x0b, 0x71, 0x51, 0x99, 0x2e, 0x4a, 0x4b, 0xeb, 0x62, 0x0e, 0x90, 0x2c,
+	0xb2, 0x4b, 0x57, 0xd1, 0x49, 0x45, 0x0a, 0x53, 0xd1, 0xaa, 0x50, 0x06, 0x86, 0x74, 0x12, 0xc2,
+	0x80, 0x26, 0x92, 0x5f, 0x3d, 0x50, 0x97, 0x3d, 0x4a, 0x8f, 0xd2, 0x1b, 0x74, 0x57, 0x26, 0x51,
+	0x77, 0x76, 0x95, 0x47, 0xf2, 0xfd, 0xef, 0xbd, 0xfc, 0x88, 0x1b, 0xe7, 0xcc, 0x4a, 0x13, 0xa9,
+	0x80, 0x44, 0xd9, 0xa8, 0x3d, 0x25, 0xda, 0x7b, 0xe7, 0x81, 0x78, 0x0d, 0x6e, 0xe7, 0x2b, 0x5d,
+	0xca, 0xaa, 0xd2, 0x00, 0xa5, 0xd2, 0xb6, 0xd6, 0xaa, 0x0c, 0xaf, 0x78, 0xe3, 0xdd, 0xd6, 0x25,
+	0xfd, 0x38, 0x87, 0xa5, 0x02, 0x7c, 0xb2, 0xc0, 0x7b, 0x8a, 0xa3, 0xc5, 0xfd, 0xc3, 0x31, 0x62,
+	0x53, 0x13, 0x69, 0xad, 0xdb, 0xca, 0x6d, 0xed, 0x2c, 0xc4, 0xe9, 0x14, 0xd0, 0xe3, 0xf4, 0x90,
+	0xc1, 0x43, 0x44, 0x16, 0x12, 0x44, 0x33, 0x2b, 0xec, 0x6e, 0x9d, 0x4e, 0xd1, 0xdd, 0x59, 0x20,
+	0xb9, 0x46, 0xdd, 0x79, 0x3e, 0x9b, 0x88, 0xe1, 0xf8, 0x79, 0x2c, 0xb2, 0xde, 0x45, 0xd2, 0x45,
+	0x57, 0xf3, 0xfc, 0x25, 0x7f, 0x5d, 0xe6, 0xbd, 0x56, 0x72, 0x8b, 0x6e, 0x96, 0xd3, 0xf1, 0x9b,
+	0x28, 0xf9, 0x70, 0x28, 0x66, 0xb3, 0x32, 0x13, 0x79, 0x43, 0x75, 0x06, 0xbf, 0x2d, 0x94, 0x56,
+	0x6e, 0x8d, 0xff, 0x6f, 0x3e, 0xe8, 0x9f, 0x0d, 0x9e, 0x34, 0xdd, 0x27, 0xad, 0xf7, 0xec, 0xe0,
+	0x60, 0xdc, 0x4a, 0x5a, 0x83, 0x9d, 0x37, 0xc4, 0x68, 0x1b, 0x7e, 0x76, 0x5c, 0xe7, 0xa6, 0x86,
+	0x73, 0xdb, 0x7d, 0x8a, 0xc7, 0x67, 0xbb, 0x33, 0xe2, 0xfc, 0xab, 0xdd, 0x1f, 0x45, 0x33, 0xae,
+	0x00, 0x47, 0xd9, 0xa8, 0x05, 0xc5, 0x21, 0x12, 0xbe, 0x8f, 0x40, 0xc1, 0x15, 0x14, 0x27, 0xa0,
+	0x58, 0xd0, 0x22, 0x02, 0x3f, 0xed, 0x34, 0xde, 0x32, 0xc6, 0x15, 0x30, 0x76, 0x42, 0x18, 0x5b,
+	0x50, 0xc6, 0x22, 0xf4, 0x71, 0x19, 0xda, 0xd1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0x24,
+	0x4d, 0x25, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/resource_count_limit_exceeded_error.pb.go b/googleapis/ads/googleads/v3/errors/resource_count_limit_exceeded_error.pb.go
new file mode 100644
index 0000000..027e199
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/resource_count_limit_exceeded_error.pb.go
@@ -0,0 +1,182 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/resource_count_limit_exceeded_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible resource count limit exceeded errors.
+type ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError int32
+
+const (
+	// Enum unspecified.
+	ResourceCountLimitExceededErrorEnum_UNSPECIFIED ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 0
+	// The received error code is not known in this version.
+	ResourceCountLimitExceededErrorEnum_UNKNOWN ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 1
+	// Indicates that this request would exceed the number of allowed resources
+	// for the Google Ads account. The exact resource type and limit being
+	// checked can be inferred from accountLimitType.
+	ResourceCountLimitExceededErrorEnum_ACCOUNT_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 2
+	// Indicates that this request would exceed the number of allowed resources
+	// in a Campaign. The exact resource type and limit being checked can be
+	// inferred from accountLimitType, and the numeric id of the
+	// Campaign involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_CAMPAIGN_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 3
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group. The exact resource type and limit being checked can be
+	// inferred from accountLimitType, and the numeric id of the
+	// ad group involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_ADGROUP_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 4
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group ad. The exact resource type and limit being checked can
+	// be inferred from accountLimitType, and the enclosingId
+	// contains the ad group id followed by the ad id, separated by a single
+	// comma (,).
+	ResourceCountLimitExceededErrorEnum_AD_GROUP_AD_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 5
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group criterion. The exact resource type and limit being checked
+	// can be inferred from accountLimitType, and the
+	// enclosingId contains the ad group id followed by the
+	// criterion id, separated by a single comma (,).
+	ResourceCountLimitExceededErrorEnum_AD_GROUP_CRITERION_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 6
+	// Indicates that this request would exceed the number of allowed resources
+	// in this shared set. The exact resource type and limit being checked can
+	// be inferred from accountLimitType, and the numeric id of the
+	// shared set involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_SHARED_SET_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 7
+	// Exceeds a limit related to a matching function.
+	ResourceCountLimitExceededErrorEnum_MATCHING_FUNCTION_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 8
+	// The response for this request would exceed the maximum number of rows
+	// that can be returned.
+	ResourceCountLimitExceededErrorEnum_RESPONSE_ROW_LIMIT_EXCEEDED ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 9
+	// This request would exceed a limit on the number of allowed resources.
+	// The details of which type of limit was exceeded will eventually be
+	// returned in ErrorDetails.
+	ResourceCountLimitExceededErrorEnum_RESOURCE_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 10
+)
+
+var ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ACCOUNT_LIMIT",
+	3:  "CAMPAIGN_LIMIT",
+	4:  "ADGROUP_LIMIT",
+	5:  "AD_GROUP_AD_LIMIT",
+	6:  "AD_GROUP_CRITERION_LIMIT",
+	7:  "SHARED_SET_LIMIT",
+	8:  "MATCHING_FUNCTION_LIMIT",
+	9:  "RESPONSE_ROW_LIMIT_EXCEEDED",
+	10: "RESOURCE_LIMIT",
+}
+
+var ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"ACCOUNT_LIMIT":               2,
+	"CAMPAIGN_LIMIT":              3,
+	"ADGROUP_LIMIT":               4,
+	"AD_GROUP_AD_LIMIT":           5,
+	"AD_GROUP_CRITERION_LIMIT":    6,
+	"SHARED_SET_LIMIT":            7,
+	"MATCHING_FUNCTION_LIMIT":     8,
+	"RESPONSE_ROW_LIMIT_EXCEEDED": 9,
+	"RESOURCE_LIMIT":              10,
+}
+
+func (x ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError) String() string {
+	return proto.EnumName(ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name, int32(x))
+}
+
+func (ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_637849f04cc1d370, []int{0, 0}
+}
+
+// Container for enum describing possible resource count limit exceeded errors.
+type ResourceCountLimitExceededErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResourceCountLimitExceededErrorEnum) Reset()         { *m = ResourceCountLimitExceededErrorEnum{} }
+func (m *ResourceCountLimitExceededErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ResourceCountLimitExceededErrorEnum) ProtoMessage()    {}
+func (*ResourceCountLimitExceededErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_637849f04cc1d370, []int{0}
+}
+
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Unmarshal(m, b)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Merge(m, src)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Size(m)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceCountLimitExceededErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceCountLimitExceededErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError", ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name, ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_value)
+	proto.RegisterType((*ResourceCountLimitExceededErrorEnum)(nil), "google.ads.googleads.v3.errors.ResourceCountLimitExceededErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/resource_count_limit_exceeded_error.proto", fileDescriptor_637849f04cc1d370)
+}
+
+var fileDescriptor_637849f04cc1d370 = []byte{
+	// 440 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
+	0x18, 0x85, 0x69, 0x06, 0x1b, 0x78, 0x02, 0x32, 0x0b, 0x04, 0x62, 0xd3, 0x26, 0x15, 0xae, 0x9d,
+	0x8b, 0xdc, 0x85, 0x2b, 0xcf, 0xf1, 0xd2, 0x88, 0xd5, 0x89, 0x9c, 0xa4, 0x43, 0xa8, 0x92, 0x15,
+	0x1a, 0x2b, 0x8a, 0xd4, 0xc6, 0x55, 0x9c, 0x4e, 0x3c, 0x09, 0x0f, 0xc0, 0x25, 0x0f, 0xc1, 0x03,
+	0xf0, 0x28, 0xbc, 0x04, 0x28, 0x71, 0x52, 0xae, 0xa0, 0x57, 0xf9, 0x75, 0xf4, 0x9d, 0x73, 0xac,
+	0xfc, 0x3f, 0x98, 0x95, 0x4a, 0x95, 0x6b, 0xe9, 0xe4, 0x85, 0x76, 0xcc, 0xd8, 0x4d, 0xf7, 0xae,
+	0x23, 0x9b, 0x46, 0x35, 0xda, 0x69, 0xa4, 0x56, 0xbb, 0x66, 0x25, 0xc5, 0x4a, 0xed, 0xea, 0x56,
+	0xac, 0xab, 0x4d, 0xd5, 0x0a, 0xf9, 0x65, 0x25, 0x65, 0x21, 0x0b, 0xd1, 0x43, 0x68, 0xdb, 0xa8,
+	0x56, 0xc1, 0x4b, 0x63, 0x47, 0x79, 0xa1, 0xd1, 0x3e, 0x09, 0xdd, 0xbb, 0xc8, 0x24, 0xbd, 0xb9,
+	0x18, 0x9b, 0xb6, 0x95, 0x93, 0xd7, 0xb5, 0x6a, 0xf3, 0xb6, 0x52, 0xb5, 0x36, 0xee, 0xe9, 0x0f,
+	0x0b, 0xbc, 0xe5, 0x43, 0x17, 0xe9, 0xaa, 0x6e, 0xbb, 0x26, 0x3a, 0x14, 0xd1, 0x2e, 0x82, 0xd6,
+	0xbb, 0xcd, 0xf4, 0xab, 0x05, 0xae, 0x0e, 0x70, 0xf0, 0x39, 0x38, 0xcd, 0x58, 0x12, 0x53, 0x12,
+	0xde, 0x84, 0xd4, 0xb7, 0x1f, 0xc0, 0x53, 0x70, 0x92, 0xb1, 0x0f, 0x2c, 0xba, 0x63, 0xf6, 0x04,
+	0x9e, 0x81, 0xa7, 0x98, 0x90, 0x28, 0x63, 0xa9, 0xb8, 0x0d, 0xe7, 0x61, 0x6a, 0x5b, 0x10, 0x82,
+	0x67, 0x04, 0xcf, 0x63, 0x1c, 0x06, 0x6c, 0xd0, 0x8e, 0x7a, 0xcc, 0x0f, 0x78, 0x94, 0xc5, 0x83,
+	0xf4, 0x10, 0xbe, 0x04, 0x67, 0xd8, 0x17, 0x46, 0xc3, 0xfe, 0x20, 0x3f, 0x82, 0x17, 0xe0, 0xf5,
+	0x5e, 0x26, 0x3c, 0x4c, 0x29, 0x0f, 0xa3, 0x31, 0xe7, 0x18, 0xbe, 0x00, 0x76, 0x32, 0xc3, 0x9c,
+	0xfa, 0x22, 0xa1, 0x63, 0xe3, 0x09, 0x3c, 0x07, 0xaf, 0xe6, 0x38, 0x25, 0xb3, 0x90, 0x05, 0xe2,
+	0x26, 0x63, 0x24, 0xfd, 0x6b, 0x79, 0x0c, 0xaf, 0xc0, 0x39, 0xa7, 0x49, 0x1c, 0xb1, 0x84, 0x0a,
+	0x1e, 0xdd, 0x19, 0x5d, 0xd0, 0x8f, 0x84, 0x52, 0x9f, 0xfa, 0xf6, 0x93, 0xee, 0xbd, 0x9c, 0x26,
+	0x51, 0xc6, 0x09, 0x1d, 0x4c, 0xe0, 0xfa, 0xf7, 0x04, 0x4c, 0x57, 0x6a, 0x83, 0xfe, 0xbf, 0x85,
+	0xeb, 0x77, 0x07, 0x7e, 0x5e, 0xdc, 0x6d, 0x23, 0x9e, 0x7c, 0xf2, 0x87, 0x9c, 0x52, 0xad, 0xf3,
+	0xba, 0x44, 0xaa, 0x29, 0x9d, 0x52, 0xd6, 0xfd, 0xae, 0xc6, 0x3b, 0xd9, 0x56, 0xfa, 0x5f, 0x67,
+	0xf3, 0xde, 0x7c, 0xbe, 0x59, 0x47, 0x01, 0xc6, 0xdf, 0xad, 0xcb, 0xc0, 0x84, 0xe1, 0x42, 0x23,
+	0x33, 0x76, 0xd3, 0xc2, 0x45, 0x7d, 0xa5, 0xfe, 0x39, 0x02, 0x4b, 0x5c, 0xe8, 0xe5, 0x1e, 0x58,
+	0x2e, 0xdc, 0xa5, 0x01, 0x7e, 0x59, 0x53, 0xa3, 0x7a, 0x1e, 0x2e, 0xb4, 0xe7, 0xed, 0x11, 0xcf,
+	0x5b, 0xb8, 0x9e, 0x67, 0xa0, 0xcf, 0xc7, 0xfd, 0xeb, 0xdc, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0xa5, 0x01, 0x0f, 0x4c, 0xd3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/setting_error.pb.go b/googleapis/ads/googleads/v3/errors/setting_error.pb.go
new file mode 100644
index 0000000..43ac592
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/setting_error.pb.go
@@ -0,0 +1,179 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/setting_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible setting errors.
+type SettingErrorEnum_SettingError int32
+
+const (
+	// Enum unspecified.
+	SettingErrorEnum_UNSPECIFIED SettingErrorEnum_SettingError = 0
+	// The received error code is not known in this version.
+	SettingErrorEnum_UNKNOWN SettingErrorEnum_SettingError = 1
+	// The campaign setting is not available for this Google Ads account.
+	SettingErrorEnum_SETTING_TYPE_IS_NOT_AVAILABLE SettingErrorEnum_SettingError = 3
+	// The setting is not compatible with the campaign.
+	SettingErrorEnum_SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN SettingErrorEnum_SettingError = 4
+	// The supplied TargetingSetting contains an invalid CriterionTypeGroup. See
+	// CriterionTypeGroup documentation for CriterionTypeGroups allowed
+	// in Campaign or AdGroup TargetingSettings.
+	SettingErrorEnum_TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP SettingErrorEnum_SettingError = 5
+	// TargetingSetting must not explicitly
+	// set any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER,
+	// PARENT, INCOME_RANGE) to false (it's okay to not set them at all, in
+	// which case the system will set them to true automatically).
+	SettingErrorEnum_TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL SettingErrorEnum_SettingError = 6
+	// TargetingSetting cannot change any of
+	// the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT,
+	// INCOME_RANGE) from true to false.
+	SettingErrorEnum_TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP SettingErrorEnum_SettingError = 7
+	// At least one feed id should be present.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT SettingErrorEnum_SettingError = 8
+	// The supplied DynamicSearchAdsSetting contains an invalid domain name.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME SettingErrorEnum_SettingError = 9
+	// The supplied DynamicSearchAdsSetting contains a subdomain name.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME SettingErrorEnum_SettingError = 10
+	// The supplied DynamicSearchAdsSetting contains an invalid language code.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE SettingErrorEnum_SettingError = 11
+	// TargetingSettings in search campaigns should not have
+	// CriterionTypeGroup.PLACEMENT set to targetAll.
+	SettingErrorEnum_TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN SettingErrorEnum_SettingError = 12
+)
+
+var SettingErrorEnum_SettingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "SETTING_TYPE_IS_NOT_AVAILABLE",
+	4:  "SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN",
+	5:  "TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP",
+	6:  "TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL",
+	7:  "TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP",
+	8:  "DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT",
+	9:  "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME",
+	10: "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME",
+	11: "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE",
+	12: "TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN",
+}
+
+var SettingErrorEnum_SettingError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"SETTING_TYPE_IS_NOT_AVAILABLE": 3,
+	"SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN":                                             4,
+	"TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP":                                  5,
+	"TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL":            6,
+	"TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP": 7,
+	"DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT":                          8,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME":                                  9,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME":                                       10,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE":                                11,
+	"TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN":                               12,
+}
+
+func (x SettingErrorEnum_SettingError) String() string {
+	return proto.EnumName(SettingErrorEnum_SettingError_name, int32(x))
+}
+
+func (SettingErrorEnum_SettingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_92dd27a02f2d7da1, []int{0, 0}
+}
+
+// Container for enum describing possible setting errors.
+type SettingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SettingErrorEnum) Reset()         { *m = SettingErrorEnum{} }
+func (m *SettingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SettingErrorEnum) ProtoMessage()    {}
+func (*SettingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_92dd27a02f2d7da1, []int{0}
+}
+
+func (m *SettingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SettingErrorEnum.Unmarshal(m, b)
+}
+func (m *SettingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SettingErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *SettingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SettingErrorEnum.Merge(m, src)
+}
+func (m *SettingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SettingErrorEnum.Size(m)
+}
+func (m *SettingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SettingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SettingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.SettingErrorEnum_SettingError", SettingErrorEnum_SettingError_name, SettingErrorEnum_SettingError_value)
+	proto.RegisterType((*SettingErrorEnum)(nil), "google.ads.googleads.v3.errors.SettingErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/setting_error.proto", fileDescriptor_92dd27a02f2d7da1)
+}
+
+var fileDescriptor_92dd27a02f2d7da1 = []byte{
+	// 551 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xe1, 0x6a, 0x13, 0x41,
+	0x10, 0xc7, 0x6d, 0x6b, 0x5b, 0xdd, 0x16, 0x3c, 0xf7, 0xa3, 0x68, 0xc1, 0x7c, 0x96, 0x8b, 0x34,
+	0xa0, 0x78, 0x45, 0x65, 0x72, 0x37, 0xb9, 0x2c, 0xee, 0xed, 0x9e, 0xb7, 0x9b, 0xd4, 0x4a, 0x60,
+	0x88, 0x26, 0x1c, 0x81, 0xf6, 0xae, 0xe4, 0x62, 0x1f, 0xc8, 0x4f, 0xe2, 0x3b, 0xf8, 0x02, 0x3e,
+	0x8a, 0xf8, 0x10, 0x72, 0xb7, 0x26, 0x04, 0x1a, 0xab, 0x7e, 0xca, 0x64, 0xf9, 0xff, 0xfe, 0xff,
+	0xb9, 0x61, 0x86, 0x1d, 0xe7, 0x65, 0x99, 0x9f, 0x4f, 0xdb, 0xe3, 0x49, 0xd5, 0x76, 0x65, 0x5d,
+	0x5d, 0x75, 0xda, 0xd3, 0xf9, 0xbc, 0x9c, 0x57, 0xed, 0x6a, 0xba, 0x58, 0xcc, 0x8a, 0x9c, 0x9a,
+	0xbf, 0xfe, 0xe5, 0xbc, 0x5c, 0x94, 0xfc, 0xc8, 0x09, 0xfd, 0xf1, 0xa4, 0xf2, 0x57, 0x8c, 0x7f,
+	0xd5, 0xf1, 0x1d, 0xf3, 0xe0, 0xe1, 0xd2, 0xf3, 0x72, 0xd6, 0x1e, 0x17, 0x45, 0xb9, 0x18, 0x2f,
+	0x66, 0x65, 0x51, 0x39, 0xba, 0xf5, 0x6d, 0x97, 0x79, 0xc6, 0xb9, 0x62, 0xad, 0xc7, 0xe2, 0xd3,
+	0x45, 0xeb, 0xcb, 0x2e, 0x3b, 0x5c, 0x7f, 0xe4, 0xf7, 0xd8, 0xc1, 0x40, 0x99, 0x14, 0x43, 0xd1,
+	0x13, 0x18, 0x79, 0xb7, 0xf8, 0x01, 0xdb, 0x1f, 0xa8, 0x37, 0x4a, 0x9f, 0x2a, 0x6f, 0x8b, 0x3f,
+	0x66, 0x8f, 0x0c, 0x5a, 0x2b, 0x54, 0x4c, 0xf6, 0x2c, 0x45, 0x12, 0x86, 0x94, 0xb6, 0x04, 0x43,
+	0x10, 0x12, 0xba, 0x12, 0xbd, 0x1d, 0xfe, 0x94, 0x3d, 0xd9, 0x24, 0x09, 0x75, 0x92, 0x82, 0x15,
+	0x5d, 0x89, 0x74, 0x2a, 0x6c, 0x9f, 0x42, 0x48, 0x52, 0x10, 0xb1, 0xf2, 0x6e, 0xf3, 0x13, 0xf6,
+	0xdc, 0x42, 0x16, 0x63, 0xc3, 0x2c, 0xd9, 0x50, 0x2b, 0x0b, 0x42, 0x19, 0x12, 0x6a, 0x08, 0x52,
+	0x44, 0x14, 0x66, 0xc2, 0x62, 0x26, 0xb4, 0x72, 0xb6, 0x71, 0xa6, 0x07, 0xa9, 0xb7, 0xcb, 0xdf,
+	0xb2, 0xe4, 0x3a, 0x1c, 0x61, 0xa2, 0xe3, 0x0c, 0xd2, 0xbe, 0x08, 0x37, 0x72, 0x86, 0x92, 0x81,
+	0xb1, 0xd4, 0xc5, 0x9a, 0x20, 0xab, 0xc9, 0x59, 0x10, 0x48, 0xe9, 0xed, 0xf1, 0x11, 0x7b, 0xb7,
+	0xa1, 0x1f, 0x50, 0xcd, 0x67, 0xf4, 0x41, 0xc5, 0xb8, 0xa6, 0xaf, 0xe9, 0x1e, 0x48, 0x83, 0xd4,
+	0xd3, 0xd9, 0x5f, 0x83, 0xbd, 0x7d, 0x1e, 0xb2, 0xd7, 0xd1, 0x99, 0x82, 0x44, 0x84, 0x64, 0x10,
+	0xb2, 0xb0, 0x4f, 0x10, 0x99, 0x55, 0x0c, 0x58, 0x92, 0x08, 0xc6, 0x92, 0x56, 0x48, 0x3d, 0xc4,
+	0x88, 0x44, 0xb4, 0x6a, 0x36, 0xcd, 0xd0, 0xa0, 0xb2, 0xde, 0x9d, 0x7a, 0x64, 0x37, 0x98, 0x5c,
+	0x9b, 0x5d, 0xa4, 0x13, 0x10, 0x8a, 0x14, 0x24, 0xe8, 0xdd, 0xe5, 0xcf, 0xd8, 0xf1, 0xbf, 0xc0,
+	0x66, 0xd0, 0x5d, 0xe7, 0x18, 0x7f, 0xc9, 0x5e, 0xfc, 0x4f, 0xa8, 0x04, 0x15, 0x0f, 0x20, 0x46,
+	0x0a, 0x75, 0x84, 0xde, 0x01, 0x7f, 0xc5, 0x82, 0xb5, 0xb1, 0x2d, 0x37, 0x47, 0x4a, 0x7d, 0x8a,
+	0x51, 0x33, 0xbc, 0x54, 0x42, 0x88, 0x09, 0x2a, 0x4b, 0x42, 0x2d, 0x13, 0x56, 0x6b, 0x72, 0xd8,
+	0xfd, 0xb9, 0xc5, 0x5a, 0x1f, 0xcb, 0x0b, 0xff, 0xe6, 0x23, 0xe8, 0xde, 0x5f, 0x5f, 0xe7, 0xb4,
+	0xde, 0xfc, 0x74, 0xeb, 0x7d, 0xf4, 0x1b, 0xca, 0xcb, 0xf3, 0x71, 0x91, 0xfb, 0xe5, 0x3c, 0x6f,
+	0xe7, 0xd3, 0xa2, 0xb9, 0x8b, 0xe5, 0xf5, 0x5d, 0xce, 0xaa, 0x3f, 0x1d, 0xe3, 0x89, 0xfb, 0xf9,
+	0xbc, 0xbd, 0x13, 0x03, 0x7c, 0xdd, 0x3e, 0x8a, 0x9d, 0x19, 0x4c, 0x2a, 0xdf, 0x95, 0x75, 0x35,
+	0xec, 0xf8, 0x4d, 0x64, 0xf5, 0x7d, 0x29, 0x18, 0xc1, 0xa4, 0x1a, 0xad, 0x04, 0xa3, 0x61, 0x67,
+	0xe4, 0x04, 0x3f, 0xb6, 0x5b, 0xee, 0x35, 0x08, 0x60, 0x52, 0x05, 0xc1, 0x4a, 0x12, 0x04, 0xc3,
+	0x4e, 0x10, 0x38, 0xd1, 0x87, 0xbd, 0xa6, 0xbb, 0xce, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x51,
+	0x92, 0x3e, 0xf8, 0x29, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/shared_criterion_error.pb.go b/googleapis/ads/googleads/v3/errors/shared_criterion_error.pb.go
new file mode 100644
index 0000000..a332d1d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/shared_criterion_error.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/shared_criterion_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible shared criterion errors.
+type SharedCriterionErrorEnum_SharedCriterionError int32
+
+const (
+	// Enum unspecified.
+	SharedCriterionErrorEnum_UNSPECIFIED SharedCriterionErrorEnum_SharedCriterionError = 0
+	// The received error code is not known in this version.
+	SharedCriterionErrorEnum_UNKNOWN SharedCriterionErrorEnum_SharedCriterionError = 1
+	// The criterion is not appropriate for the shared set type.
+	SharedCriterionErrorEnum_CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE SharedCriterionErrorEnum_SharedCriterionError = 2
+)
+
+var SharedCriterionErrorEnum_SharedCriterionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE",
+}
+
+var SharedCriterionErrorEnum_SharedCriterionError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE": 2,
+}
+
+func (x SharedCriterionErrorEnum_SharedCriterionError) String() string {
+	return proto.EnumName(SharedCriterionErrorEnum_SharedCriterionError_name, int32(x))
+}
+
+func (SharedCriterionErrorEnum_SharedCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4025b0e5768e09e, []int{0, 0}
+}
+
+// Container for enum describing possible shared criterion errors.
+type SharedCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedCriterionErrorEnum) Reset()         { *m = SharedCriterionErrorEnum{} }
+func (m *SharedCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterionErrorEnum) ProtoMessage()    {}
+func (*SharedCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4025b0e5768e09e, []int{0}
+}
+
+func (m *SharedCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *SharedCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *SharedCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterionErrorEnum.Merge(m, src)
+}
+func (m *SharedCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Size(m)
+}
+func (m *SharedCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.SharedCriterionErrorEnum_SharedCriterionError", SharedCriterionErrorEnum_SharedCriterionError_name, SharedCriterionErrorEnum_SharedCriterionError_value)
+	proto.RegisterType((*SharedCriterionErrorEnum)(nil), "google.ads.googleads.v3.errors.SharedCriterionErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/shared_criterion_error.proto", fileDescriptor_c4025b0e5768e09e)
+}
+
+var fileDescriptor_c4025b0e5768e09e = []byte{
+	// 331 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4e, 0xf3, 0x30,
+	0x10, 0x85, 0xff, 0xe4, 0x97, 0x40, 0x72, 0x17, 0x54, 0x11, 0x0b, 0x40, 0xa8, 0x8b, 0x1c, 0xc0,
+	0x91, 0xc8, 0xce, 0x5d, 0xb9, 0x8d, 0x5b, 0x22, 0xaa, 0x24, 0x4a, 0xd2, 0x56, 0xa0, 0x48, 0x56,
+	0x68, 0xa2, 0x34, 0x52, 0x6b, 0x57, 0x76, 0xe8, 0x09, 0x38, 0x09, 0x4b, 0x8e, 0xc2, 0x51, 0x58,
+	0x73, 0x00, 0x14, 0x9b, 0x64, 0x55, 0x58, 0xf9, 0x69, 0xe6, 0x7d, 0xcf, 0x33, 0x03, 0xc6, 0x15,
+	0xe7, 0xd5, 0xae, 0x74, 0xf2, 0x42, 0x3a, 0x5a, 0xb6, 0xea, 0xe8, 0x3a, 0xa5, 0x10, 0x5c, 0x48,
+	0x47, 0x6e, 0x73, 0x51, 0x16, 0x74, 0x23, 0xea, 0xa6, 0x14, 0x35, 0x67, 0x54, 0xd5, 0xe1, 0x41,
+	0xf0, 0x86, 0x5b, 0x23, 0x4d, 0xc0, 0xbc, 0x90, 0xb0, 0x87, 0xe1, 0xd1, 0x85, 0x1a, 0xbe, 0xb9,
+	0xed, 0xc2, 0x0f, 0xb5, 0x93, 0x33, 0xc6, 0x9b, 0xbc, 0xa9, 0x39, 0x93, 0x9a, 0xb6, 0x5f, 0x0d,
+	0x70, 0x95, 0xa8, 0xf8, 0x69, 0x97, 0x4e, 0x5a, 0x8e, 0xb0, 0x97, 0xbd, 0xbd, 0x05, 0x97, 0xa7,
+	0x7a, 0xd6, 0x05, 0x18, 0x2c, 0x83, 0x24, 0x22, 0x53, 0x7f, 0xe6, 0x13, 0x6f, 0xf8, 0xcf, 0x1a,
+	0x80, 0xf3, 0x65, 0xf0, 0x10, 0x84, 0xeb, 0x60, 0x68, 0x58, 0x77, 0x00, 0x4e, 0x63, 0x3f, 0x25,
+	0xb1, 0x1f, 0x06, 0x34, 0x7d, 0x8c, 0x08, 0x0d, 0xc2, 0x94, 0xe2, 0xc5, 0x22, 0x5c, 0x13, 0x8f,
+	0xce, 0xc2, 0x98, 0x26, 0xf7, 0x38, 0x26, 0x1e, 0x4d, 0x48, 0xaa, 0xfa, 0x43, 0x73, 0xf2, 0x65,
+	0x00, 0x7b, 0xc3, 0xf7, 0xf0, 0xef, 0x5d, 0x26, 0xd7, 0xa7, 0xc6, 0x89, 0xda, 0x45, 0x22, 0xe3,
+	0xc9, 0xfb, 0x81, 0x2b, 0xbe, 0xcb, 0x59, 0x05, 0xb9, 0xa8, 0x9c, 0xaa, 0x64, 0x6a, 0xcd, 0xee,
+	0xaa, 0x87, 0x5a, 0xfe, 0x76, 0xe4, 0xb1, 0x7e, 0xde, 0xcc, 0xff, 0x73, 0x8c, 0xdf, 0xcd, 0xd1,
+	0x5c, 0x87, 0xe1, 0x42, 0x42, 0x2d, 0x5b, 0xb5, 0x72, 0xa1, 0xfa, 0x52, 0x7e, 0x74, 0x86, 0x0c,
+	0x17, 0x32, 0xeb, 0x0d, 0xd9, 0xca, 0xcd, 0xb4, 0xe1, 0xd3, 0xb4, 0x75, 0x15, 0x21, 0x5c, 0x48,
+	0x84, 0x7a, 0x0b, 0x42, 0x2b, 0x17, 0x21, 0x6d, 0x7a, 0x3e, 0x53, 0xd3, 0xb9, 0xdf, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0xc5, 0x8d, 0x33, 0x50, 0x01, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/shared_set_error.pb.go b/googleapis/ads/googleads/v3/errors/shared_set_error.pb.go
new file mode 100644
index 0000000..711741b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/shared_set_error.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/shared_set_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible shared set errors.
+type SharedSetErrorEnum_SharedSetError int32
+
+const (
+	// Enum unspecified.
+	SharedSetErrorEnum_UNSPECIFIED SharedSetErrorEnum_SharedSetError = 0
+	// The received error code is not known in this version.
+	SharedSetErrorEnum_UNKNOWN SharedSetErrorEnum_SharedSetError = 1
+	// The customer cannot create this type of shared set.
+	SharedSetErrorEnum_CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE SharedSetErrorEnum_SharedSetError = 2
+	// A shared set with this name already exists.
+	SharedSetErrorEnum_DUPLICATE_NAME SharedSetErrorEnum_SharedSetError = 3
+	// Removed shared sets cannot be mutated.
+	SharedSetErrorEnum_SHARED_SET_REMOVED SharedSetErrorEnum_SharedSetError = 4
+	// The shared set cannot be removed because it is in use.
+	SharedSetErrorEnum_SHARED_SET_IN_USE SharedSetErrorEnum_SharedSetError = 5
+)
+
+var SharedSetErrorEnum_SharedSetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE",
+	3: "DUPLICATE_NAME",
+	4: "SHARED_SET_REMOVED",
+	5: "SHARED_SET_IN_USE",
+}
+
+var SharedSetErrorEnum_SharedSetError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE": 2,
+	"DUPLICATE_NAME":     3,
+	"SHARED_SET_REMOVED": 4,
+	"SHARED_SET_IN_USE":  5,
+}
+
+func (x SharedSetErrorEnum_SharedSetError) String() string {
+	return proto.EnumName(SharedSetErrorEnum_SharedSetError_name, int32(x))
+}
+
+func (SharedSetErrorEnum_SharedSetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fd9cfde91a5a7f46, []int{0, 0}
+}
+
+// Container for enum describing possible shared set errors.
+type SharedSetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetErrorEnum) Reset()         { *m = SharedSetErrorEnum{} }
+func (m *SharedSetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetErrorEnum) ProtoMessage()    {}
+func (*SharedSetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fd9cfde91a5a7f46, []int{0}
+}
+
+func (m *SharedSetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetErrorEnum.Unmarshal(m, b)
+}
+func (m *SharedSetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *SharedSetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetErrorEnum.Merge(m, src)
+}
+func (m *SharedSetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetErrorEnum.Size(m)
+}
+func (m *SharedSetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.SharedSetErrorEnum_SharedSetError", SharedSetErrorEnum_SharedSetError_name, SharedSetErrorEnum_SharedSetError_value)
+	proto.RegisterType((*SharedSetErrorEnum)(nil), "google.ads.googleads.v3.errors.SharedSetErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/shared_set_error.proto", fileDescriptor_fd9cfde91a5a7f46)
+}
+
+var fileDescriptor_fd9cfde91a5a7f46 = []byte{
+	// 372 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xdf, 0x8a, 0x9b, 0x40,
+	0x18, 0xc5, 0xab, 0xe9, 0x1f, 0x98, 0x40, 0x6a, 0xa7, 0xb4, 0x17, 0xa5, 0xe4, 0xc2, 0x07, 0x18,
+	0xa1, 0xd2, 0x9b, 0xe9, 0xd5, 0x44, 0x27, 0x89, 0xb4, 0x19, 0xc5, 0x51, 0x4b, 0x8b, 0x30, 0xd8,
+	0x2a, 0x6e, 0x20, 0x71, 0x82, 0xe3, 0xe6, 0x81, 0x16, 0xf6, 0x66, 0x9f, 0x61, 0x9f, 0x60, 0x1f,
+	0x65, 0x2f, 0xf6, 0x19, 0x16, 0x9d, 0x4d, 0x48, 0x2e, 0x76, 0xaf, 0x3c, 0x1c, 0x7e, 0xe7, 0x38,
+	0xdf, 0xf7, 0x81, 0xef, 0xb5, 0x94, 0xf5, 0xa6, 0x72, 0x8a, 0x52, 0x39, 0x5a, 0xf6, 0x6a, 0xef,
+	0x3a, 0x55, 0xdb, 0xca, 0x56, 0x39, 0xea, 0xa2, 0x68, 0xab, 0x52, 0xa8, 0xaa, 0x13, 0x83, 0x83,
+	0x76, 0xad, 0xec, 0x24, 0x9c, 0x6a, 0x16, 0x15, 0xa5, 0x42, 0xc7, 0x18, 0xda, 0xbb, 0x48, 0xc7,
+	0xbe, 0x7c, 0x3d, 0xd4, 0xee, 0xd6, 0x4e, 0xd1, 0x34, 0xb2, 0x2b, 0xba, 0xb5, 0x6c, 0x94, 0x4e,
+	0xdb, 0xb7, 0x06, 0x80, 0x7c, 0x28, 0xe6, 0x55, 0x47, 0xfb, 0x04, 0x6d, 0x2e, 0xb7, 0xf6, 0xb5,
+	0x01, 0x26, 0xe7, 0x36, 0x7c, 0x0f, 0xc6, 0x29, 0xe3, 0x11, 0xf5, 0x82, 0x79, 0x40, 0x7d, 0xeb,
+	0x15, 0x1c, 0x83, 0x77, 0x29, 0xfb, 0xc9, 0xc2, 0xdf, 0xcc, 0x32, 0xe0, 0x37, 0x80, 0xbc, 0x94,
+	0x27, 0xe1, 0x8a, 0xc6, 0xc2, 0x23, 0x8c, 0x85, 0x89, 0xf0, 0x62, 0x4a, 0x12, 0x2a, 0xf8, 0x92,
+	0xc4, 0xd4, 0x17, 0x9c, 0x26, 0x22, 0x9c, 0x8b, 0x64, 0x19, 0x70, 0x91, 0xfc, 0x89, 0xa8, 0x65,
+	0x42, 0x08, 0x26, 0x7e, 0x1a, 0xfd, 0x0a, 0xbc, 0x1e, 0x63, 0x64, 0x45, 0xad, 0x11, 0xfc, 0x0c,
+	0xe0, 0x49, 0x20, 0xa6, 0xab, 0x30, 0xa3, 0xbe, 0xf5, 0x1a, 0x7e, 0x02, 0x1f, 0x4e, 0xfc, 0x80,
+	0x89, 0x94, 0x53, 0xeb, 0xcd, 0xec, 0xc1, 0x00, 0xf6, 0x7f, 0xb9, 0x45, 0x2f, 0xef, 0x60, 0xf6,
+	0xf1, 0x7c, 0x96, 0xa8, 0x1f, 0x3d, 0x32, 0xfe, 0xfa, 0x4f, 0xb1, 0x5a, 0x6e, 0x8a, 0xa6, 0x46,
+	0xb2, 0xad, 0x9d, 0xba, 0x6a, 0x86, 0xc5, 0x1c, 0x2e, 0xb0, 0x5b, 0xab, 0xe7, 0x0e, 0xf2, 0x43,
+	0x7f, 0xae, 0xcc, 0xd1, 0x82, 0x90, 0x1b, 0x73, 0xba, 0xd0, 0x65, 0xa4, 0x54, 0x48, 0xcb, 0x5e,
+	0x65, 0x2e, 0x1a, 0x7e, 0xa9, 0xee, 0x0e, 0x40, 0x4e, 0x4a, 0x95, 0x1f, 0x81, 0x3c, 0x73, 0x73,
+	0x0d, 0xdc, 0x9b, 0xb6, 0x76, 0x31, 0x26, 0xa5, 0xc2, 0xf8, 0x88, 0x60, 0x9c, 0xb9, 0x18, 0x6b,
+	0xe8, 0xdf, 0xdb, 0xe1, 0x75, 0xee, 0x63, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xea, 0x14, 0x99,
+	0x2d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/size_limit_error.pb.go b/googleapis/ads/googleads/v3/errors/size_limit_error.pb.go
new file mode 100644
index 0000000..0149f1b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/size_limit_error.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/size_limit_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible size limit errors.
+type SizeLimitErrorEnum_SizeLimitError int32
+
+const (
+	// Enum unspecified.
+	SizeLimitErrorEnum_UNSPECIFIED SizeLimitErrorEnum_SizeLimitError = 0
+	// The received error code is not known in this version.
+	SizeLimitErrorEnum_UNKNOWN SizeLimitErrorEnum_SizeLimitError = 1
+	// The number of entries in the request exceeds the system limit.
+	SizeLimitErrorEnum_REQUEST_SIZE_LIMIT_EXCEEDED SizeLimitErrorEnum_SizeLimitError = 2
+	// The number of entries in the response exceeds the system limit.
+	SizeLimitErrorEnum_RESPONSE_SIZE_LIMIT_EXCEEDED SizeLimitErrorEnum_SizeLimitError = 3
+)
+
+var SizeLimitErrorEnum_SizeLimitError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REQUEST_SIZE_LIMIT_EXCEEDED",
+	3: "RESPONSE_SIZE_LIMIT_EXCEEDED",
+}
+
+var SizeLimitErrorEnum_SizeLimitError_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"REQUEST_SIZE_LIMIT_EXCEEDED":  2,
+	"RESPONSE_SIZE_LIMIT_EXCEEDED": 3,
+}
+
+func (x SizeLimitErrorEnum_SizeLimitError) String() string {
+	return proto.EnumName(SizeLimitErrorEnum_SizeLimitError_name, int32(x))
+}
+
+func (SizeLimitErrorEnum_SizeLimitError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_2576de26de4e0e5e, []int{0, 0}
+}
+
+// Container for enum describing possible size limit errors.
+type SizeLimitErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SizeLimitErrorEnum) Reset()         { *m = SizeLimitErrorEnum{} }
+func (m *SizeLimitErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SizeLimitErrorEnum) ProtoMessage()    {}
+func (*SizeLimitErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2576de26de4e0e5e, []int{0}
+}
+
+func (m *SizeLimitErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SizeLimitErrorEnum.Unmarshal(m, b)
+}
+func (m *SizeLimitErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SizeLimitErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *SizeLimitErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SizeLimitErrorEnum.Merge(m, src)
+}
+func (m *SizeLimitErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SizeLimitErrorEnum.Size(m)
+}
+func (m *SizeLimitErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SizeLimitErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SizeLimitErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.SizeLimitErrorEnum_SizeLimitError", SizeLimitErrorEnum_SizeLimitError_name, SizeLimitErrorEnum_SizeLimitError_value)
+	proto.RegisterType((*SizeLimitErrorEnum)(nil), "google.ads.googleads.v3.errors.SizeLimitErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/size_limit_error.proto", fileDescriptor_2576de26de4e0e5e)
+}
+
+var fileDescriptor_2576de26de4e0e5e = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0xff, 0xa4, 0xf0, 0x0b, 0x53, 0xd0, 0x12, 0x77, 0x5a, 0xaa, 0xe4, 0x01, 0x26, 0x8b,
+	0xe0, 0x66, 0x5c, 0xa5, 0xcd, 0xb5, 0x04, 0x6b, 0x1a, 0x3b, 0x6d, 0x95, 0x12, 0x08, 0xd1, 0x84,
+	0x61, 0xa0, 0x9d, 0xa9, 0x99, 0xd8, 0x45, 0x5f, 0xc0, 0xf7, 0x70, 0xe9, 0xa3, 0xf8, 0x28, 0x2e,
+	0x7c, 0x06, 0x49, 0xc6, 0x06, 0x0a, 0xea, 0x6a, 0x0e, 0x97, 0xef, 0x9c, 0xb9, 0xe7, 0xa2, 0x0b,
+	0x26, 0x25, 0x5b, 0xe6, 0x4e, 0x9a, 0x29, 0x47, 0xcb, 0x4a, 0x6d, 0x5c, 0x27, 0x2f, 0x0a, 0x59,
+	0x28, 0x47, 0xf1, 0x6d, 0x9e, 0x2c, 0xf9, 0x8a, 0x97, 0x49, 0x3d, 0xc1, 0xeb, 0x42, 0x96, 0xd2,
+	0xea, 0x69, 0x16, 0xa7, 0x99, 0xc2, 0x8d, 0x0d, 0x6f, 0x5c, 0xac, 0x6d, 0x27, 0xdd, 0x5d, 0xec,
+	0x9a, 0x3b, 0xa9, 0x10, 0xb2, 0x4c, 0x4b, 0x2e, 0x85, 0xd2, 0x6e, 0xfb, 0xc5, 0x40, 0x16, 0xe5,
+	0xdb, 0x7c, 0x54, 0xe5, 0x42, 0xe5, 0x00, 0xf1, 0xbc, 0xb2, 0x9f, 0xd0, 0xe1, 0xfe, 0xd4, 0x3a,
+	0x42, 0xed, 0x59, 0x48, 0x23, 0x18, 0x04, 0x57, 0x01, 0xf8, 0x9d, 0x7f, 0x56, 0x1b, 0x1d, 0xcc,
+	0xc2, 0xeb, 0x70, 0x7c, 0x17, 0x76, 0x0c, 0xeb, 0x0c, 0x9d, 0x4e, 0xe0, 0x76, 0x06, 0x74, 0x9a,
+	0xd0, 0x60, 0x01, 0xc9, 0x28, 0xb8, 0x09, 0xa6, 0x09, 0xdc, 0x0f, 0x00, 0x7c, 0xf0, 0x3b, 0xa6,
+	0x75, 0x8e, 0xba, 0x13, 0xa0, 0xd1, 0x38, 0xa4, 0xf0, 0x23, 0xd1, 0xea, 0x7f, 0x1a, 0xc8, 0x7e,
+	0x94, 0x2b, 0xfc, 0x77, 0x9d, 0xfe, 0xf1, 0xfe, 0x5e, 0x51, 0xd5, 0x22, 0x32, 0x16, 0xfe, 0xb7,
+	0x8d, 0xc9, 0x65, 0x2a, 0x18, 0x96, 0x05, 0x73, 0x58, 0x2e, 0xea, 0x8e, 0xbb, 0x63, 0xae, 0xb9,
+	0xfa, 0xed, 0xb6, 0x97, 0xfa, 0x79, 0x35, 0x5b, 0x43, 0xcf, 0x7b, 0x33, 0x7b, 0x43, 0x1d, 0xe6,
+	0x65, 0x0a, 0x6b, 0x59, 0xa9, 0xb9, 0x8b, 0xeb, 0x2f, 0xd5, 0xfb, 0x0e, 0x88, 0xbd, 0x4c, 0xc5,
+	0x0d, 0x10, 0xcf, 0xdd, 0x58, 0x03, 0x1f, 0xa6, 0xad, 0xa7, 0x84, 0x78, 0x99, 0x22, 0xa4, 0x41,
+	0x08, 0x99, 0xbb, 0x84, 0x68, 0xe8, 0xe1, 0x7f, 0xbd, 0x9d, 0xfb, 0x15, 0x00, 0x00, 0xff, 0xff,
+	0xda, 0x18, 0x3a, 0xb9, 0xf8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/string_format_error.pb.go b/googleapis/ads/googleads/v3/errors/string_format_error.pb.go
new file mode 100644
index 0000000..c4305e8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/string_format_error.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/string_format_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible string format errors.
+type StringFormatErrorEnum_StringFormatError int32
+
+const (
+	// Enum unspecified.
+	StringFormatErrorEnum_UNSPECIFIED StringFormatErrorEnum_StringFormatError = 0
+	// The received error code is not known in this version.
+	StringFormatErrorEnum_UNKNOWN StringFormatErrorEnum_StringFormatError = 1
+	// The input string value contains disallowed characters.
+	StringFormatErrorEnum_ILLEGAL_CHARS StringFormatErrorEnum_StringFormatError = 2
+	// The input string value is invalid for the associated field.
+	StringFormatErrorEnum_INVALID_FORMAT StringFormatErrorEnum_StringFormatError = 3
+)
+
+var StringFormatErrorEnum_StringFormatError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ILLEGAL_CHARS",
+	3: "INVALID_FORMAT",
+}
+
+var StringFormatErrorEnum_StringFormatError_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ILLEGAL_CHARS":  2,
+	"INVALID_FORMAT": 3,
+}
+
+func (x StringFormatErrorEnum_StringFormatError) String() string {
+	return proto.EnumName(StringFormatErrorEnum_StringFormatError_name, int32(x))
+}
+
+func (StringFormatErrorEnum_StringFormatError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_550e7d5be9ec8b30, []int{0, 0}
+}
+
+// Container for enum describing possible string format errors.
+type StringFormatErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StringFormatErrorEnum) Reset()         { *m = StringFormatErrorEnum{} }
+func (m *StringFormatErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*StringFormatErrorEnum) ProtoMessage()    {}
+func (*StringFormatErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_550e7d5be9ec8b30, []int{0}
+}
+
+func (m *StringFormatErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StringFormatErrorEnum.Unmarshal(m, b)
+}
+func (m *StringFormatErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StringFormatErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *StringFormatErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StringFormatErrorEnum.Merge(m, src)
+}
+func (m *StringFormatErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_StringFormatErrorEnum.Size(m)
+}
+func (m *StringFormatErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StringFormatErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StringFormatErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.StringFormatErrorEnum_StringFormatError", StringFormatErrorEnum_StringFormatError_name, StringFormatErrorEnum_StringFormatError_value)
+	proto.RegisterType((*StringFormatErrorEnum)(nil), "google.ads.googleads.v3.errors.StringFormatErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/string_format_error.proto", fileDescriptor_550e7d5be9ec8b30)
+}
+
+var fileDescriptor_550e7d5be9ec8b30 = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4e, 0xf3, 0x30,
+	0x14, 0x85, 0xff, 0xa6, 0xd2, 0x8f, 0xe4, 0x0a, 0x48, 0x2d, 0xc1, 0x80, 0x50, 0x87, 0x3c, 0x80,
+	0x3d, 0x78, 0x41, 0x66, 0x72, 0xdb, 0xb4, 0x44, 0x84, 0xb4, 0x6a, 0x69, 0x40, 0x28, 0x52, 0x64,
+	0x48, 0xb1, 0x22, 0xb5, 0x76, 0xb1, 0x43, 0x1f, 0x88, 0x91, 0x47, 0xe1, 0x51, 0xd8, 0x78, 0x03,
+	0x14, 0x9b, 0x66, 0xa9, 0x60, 0xca, 0xd1, 0xcd, 0x77, 0xce, 0x3d, 0xbe, 0xe0, 0x42, 0x28, 0x25,
+	0x56, 0x4b, 0xcc, 0x0b, 0x83, 0x9d, 0xac, 0xd5, 0x96, 0xe0, 0xa5, 0xd6, 0x4a, 0x1b, 0x6c, 0x2a,
+	0x5d, 0x4a, 0x91, 0x3f, 0x2b, 0xbd, 0xe6, 0x55, 0x6e, 0x87, 0x68, 0xa3, 0x55, 0xa5, 0x60, 0xcf,
+	0xe1, 0x88, 0x17, 0x06, 0x35, 0x4e, 0xb4, 0x25, 0xc8, 0x39, 0xcf, 0xce, 0x77, 0xc9, 0x9b, 0x12,
+	0x73, 0x29, 0x55, 0xc5, 0xab, 0x52, 0x49, 0xe3, 0xdc, 0xc1, 0x0b, 0x38, 0x99, 0xdb, 0xe8, 0x91,
+	0x4d, 0x0e, 0x6b, 0x4f, 0x28, 0x5f, 0xd7, 0xc1, 0x3d, 0xe8, 0xee, 0xfd, 0x80, 0xc7, 0xa0, 0xb3,
+	0x48, 0xe6, 0xd3, 0x70, 0x10, 0x8d, 0xa2, 0x70, 0xe8, 0xff, 0x83, 0x1d, 0x70, 0xb0, 0x48, 0xae,
+	0x93, 0xc9, 0x5d, 0xe2, 0xb7, 0x60, 0x17, 0x1c, 0x46, 0x71, 0x1c, 0x8e, 0x59, 0x9c, 0x0f, 0xae,
+	0xd8, 0x6c, 0xee, 0x7b, 0x10, 0x82, 0xa3, 0x28, 0x49, 0x59, 0x1c, 0x0d, 0xf3, 0xd1, 0x64, 0x76,
+	0xc3, 0x6e, 0xfd, 0x76, 0xff, 0xab, 0x05, 0x82, 0x27, 0xb5, 0x46, 0x7f, 0xf7, 0xee, 0x9f, 0xee,
+	0xad, 0x9f, 0xd6, 0x8d, 0xa7, 0xad, 0x87, 0xe1, 0x8f, 0x53, 0xa8, 0x15, 0x97, 0x02, 0x29, 0x2d,
+	0xb0, 0x58, 0x4a, 0xfb, 0x9e, 0xdd, 0xed, 0x36, 0xa5, 0xf9, 0xed, 0x94, 0x97, 0xee, 0xf3, 0xe6,
+	0xb5, 0xc7, 0x8c, 0xbd, 0x7b, 0xbd, 0xb1, 0x0b, 0x63, 0x85, 0x41, 0x4e, 0xd6, 0x2a, 0x25, 0xc8,
+	0xae, 0x34, 0x1f, 0x3b, 0x20, 0x63, 0x85, 0xc9, 0x1a, 0x20, 0x4b, 0x49, 0xe6, 0x80, 0x4f, 0x2f,
+	0x70, 0x53, 0x4a, 0x59, 0x61, 0x28, 0x6d, 0x10, 0x4a, 0x53, 0x42, 0xa9, 0x83, 0x1e, 0xff, 0xdb,
+	0x76, 0xe4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x5c, 0x61, 0x8e, 0xe7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/string_length_error.pb.go b/googleapis/ads/googleads/v3/errors/string_length_error.pb.go
new file mode 100644
index 0000000..3ee61d4
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/string_length_error.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/string_length_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible string length errors.
+type StringLengthErrorEnum_StringLengthError int32
+
+const (
+	// Enum unspecified.
+	StringLengthErrorEnum_UNSPECIFIED StringLengthErrorEnum_StringLengthError = 0
+	// The received error code is not known in this version.
+	StringLengthErrorEnum_UNKNOWN StringLengthErrorEnum_StringLengthError = 1
+	// The specified field should have a least one non-whitespace character in
+	// it.
+	StringLengthErrorEnum_EMPTY StringLengthErrorEnum_StringLengthError = 4
+	// Too short.
+	StringLengthErrorEnum_TOO_SHORT StringLengthErrorEnum_StringLengthError = 2
+	// Too long.
+	StringLengthErrorEnum_TOO_LONG StringLengthErrorEnum_StringLengthError = 3
+)
+
+var StringLengthErrorEnum_StringLengthError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	4: "EMPTY",
+	2: "TOO_SHORT",
+	3: "TOO_LONG",
+}
+
+var StringLengthErrorEnum_StringLengthError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EMPTY":       4,
+	"TOO_SHORT":   2,
+	"TOO_LONG":    3,
+}
+
+func (x StringLengthErrorEnum_StringLengthError) String() string {
+	return proto.EnumName(StringLengthErrorEnum_StringLengthError_name, int32(x))
+}
+
+func (StringLengthErrorEnum_StringLengthError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_529ee6d26aa7d91e, []int{0, 0}
+}
+
+// Container for enum describing possible string length errors.
+type StringLengthErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StringLengthErrorEnum) Reset()         { *m = StringLengthErrorEnum{} }
+func (m *StringLengthErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*StringLengthErrorEnum) ProtoMessage()    {}
+func (*StringLengthErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_529ee6d26aa7d91e, []int{0}
+}
+
+func (m *StringLengthErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StringLengthErrorEnum.Unmarshal(m, b)
+}
+func (m *StringLengthErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StringLengthErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *StringLengthErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StringLengthErrorEnum.Merge(m, src)
+}
+func (m *StringLengthErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_StringLengthErrorEnum.Size(m)
+}
+func (m *StringLengthErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StringLengthErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StringLengthErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.StringLengthErrorEnum_StringLengthError", StringLengthErrorEnum_StringLengthError_name, StringLengthErrorEnum_StringLengthError_value)
+	proto.RegisterType((*StringLengthErrorEnum)(nil), "google.ads.googleads.v3.errors.StringLengthErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/string_length_error.proto", fileDescriptor_529ee6d26aa7d91e)
+}
+
+var fileDescriptor_529ee6d26aa7d91e = []byte{
+	// 320 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4b, 0x4e, 0xf3, 0x30,
+	0x14, 0x85, 0xff, 0xa6, 0x3f, 0x8f, 0xba, 0x20, 0x82, 0x25, 0x18, 0x20, 0xd4, 0x41, 0x16, 0x60,
+	0x0f, 0x3c, 0x41, 0x66, 0x94, 0xd2, 0x50, 0x2a, 0x4a, 0x12, 0xd1, 0x07, 0x2a, 0x8a, 0x14, 0x05,
+	0x12, 0x99, 0x48, 0xa9, 0x1d, 0xd9, 0xa1, 0x0b, 0x62, 0xc8, 0x52, 0x58, 0x0a, 0x33, 0x76, 0x80,
+	0x62, 0x93, 0x4c, 0x2a, 0x18, 0xf9, 0xf8, 0xfa, 0x3b, 0xe7, 0x5e, 0x5f, 0x70, 0xc1, 0x84, 0x60,
+	0x45, 0x86, 0x93, 0x54, 0x61, 0x23, 0x6b, 0xb5, 0x21, 0x38, 0x93, 0x52, 0x48, 0x85, 0x55, 0x25,
+	0x73, 0xce, 0xe2, 0x22, 0xe3, 0xac, 0x7a, 0x89, 0x75, 0x11, 0x95, 0x52, 0x54, 0x02, 0x0e, 0x0c,
+	0x8e, 0x92, 0x54, 0xa1, 0xd6, 0x89, 0x36, 0x04, 0x19, 0xe7, 0xd9, 0x79, 0x93, 0x5c, 0xe6, 0x38,
+	0xe1, 0x5c, 0x54, 0x49, 0x95, 0x0b, 0xae, 0x8c, 0xdb, 0x91, 0xe0, 0x64, 0xa6, 0xa3, 0xa7, 0x3a,
+	0xd9, 0xab, 0x3d, 0x1e, 0x7f, 0x5d, 0x3b, 0x2b, 0x70, 0xbc, 0xf5, 0x00, 0x8f, 0x40, 0x7f, 0xe1,
+	0xcf, 0x42, 0xef, 0x6a, 0x72, 0x3d, 0xf1, 0x46, 0xf6, 0x3f, 0xd8, 0x07, 0x7b, 0x0b, 0xff, 0xd6,
+	0x0f, 0x1e, 0x7c, 0xbb, 0x03, 0x7b, 0x60, 0xc7, 0xbb, 0x0b, 0xe7, 0x2b, 0xfb, 0x3f, 0x3c, 0x04,
+	0xbd, 0x79, 0x10, 0xc4, 0xb3, 0x9b, 0xe0, 0x7e, 0x6e, 0x5b, 0xf0, 0x00, 0xec, 0xd7, 0xd7, 0x69,
+	0xe0, 0x8f, 0xed, 0xee, 0xf0, 0xab, 0x03, 0x9c, 0x67, 0xb1, 0x46, 0x7f, 0x0f, 0x3e, 0x3c, 0xdd,
+	0xea, 0x1f, 0xd6, 0x23, 0x87, 0x9d, 0xc7, 0xd1, 0x8f, 0x93, 0x89, 0x22, 0xe1, 0x0c, 0x09, 0xc9,
+	0x30, 0xcb, 0xb8, 0xfe, 0x50, 0xb3, 0xbc, 0x32, 0x57, 0xbf, 0xed, 0xf2, 0xd2, 0x1c, 0x6f, 0x56,
+	0x77, 0xec, 0xba, 0xef, 0xd6, 0x60, 0x6c, 0xc2, 0xdc, 0x54, 0x21, 0x23, 0x6b, 0xb5, 0x24, 0x48,
+	0xb7, 0x54, 0x1f, 0x0d, 0x10, 0xb9, 0xa9, 0x8a, 0x5a, 0x20, 0x5a, 0x92, 0xc8, 0x00, 0x9f, 0x96,
+	0x63, 0xaa, 0x94, 0xba, 0xa9, 0xa2, 0xb4, 0x45, 0x28, 0x5d, 0x12, 0x4a, 0x0d, 0xf4, 0xb4, 0xab,
+	0xa7, 0x23, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x13, 0x23, 0x37, 0x69, 0xe8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/time_zone_error.pb.go b/googleapis/ads/googleads/v3/errors/time_zone_error.pb.go
new file mode 100644
index 0000000..b7bba56
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/time_zone_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/time_zone_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible currency code errors.
+type TimeZoneErrorEnum_TimeZoneError int32
+
+const (
+	// Enum unspecified.
+	TimeZoneErrorEnum_UNSPECIFIED TimeZoneErrorEnum_TimeZoneError = 0
+	// The received error code is not known in this version.
+	TimeZoneErrorEnum_UNKNOWN TimeZoneErrorEnum_TimeZoneError = 1
+	// Time zone is not valid.
+	TimeZoneErrorEnum_INVALID_TIME_ZONE TimeZoneErrorEnum_TimeZoneError = 5
+)
+
+var TimeZoneErrorEnum_TimeZoneError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	5: "INVALID_TIME_ZONE",
+}
+
+var TimeZoneErrorEnum_TimeZoneError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"INVALID_TIME_ZONE": 5,
+}
+
+func (x TimeZoneErrorEnum_TimeZoneError) String() string {
+	return proto.EnumName(TimeZoneErrorEnum_TimeZoneError_name, int32(x))
+}
+
+func (TimeZoneErrorEnum_TimeZoneError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8e4bfbe09bff50c3, []int{0, 0}
+}
+
+// Container for enum describing possible time zone errors.
+type TimeZoneErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TimeZoneErrorEnum) Reset()         { *m = TimeZoneErrorEnum{} }
+func (m *TimeZoneErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*TimeZoneErrorEnum) ProtoMessage()    {}
+func (*TimeZoneErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8e4bfbe09bff50c3, []int{0}
+}
+
+func (m *TimeZoneErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimeZoneErrorEnum.Unmarshal(m, b)
+}
+func (m *TimeZoneErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimeZoneErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *TimeZoneErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeZoneErrorEnum.Merge(m, src)
+}
+func (m *TimeZoneErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_TimeZoneErrorEnum.Size(m)
+}
+func (m *TimeZoneErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimeZoneErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimeZoneErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.TimeZoneErrorEnum_TimeZoneError", TimeZoneErrorEnum_TimeZoneError_name, TimeZoneErrorEnum_TimeZoneError_value)
+	proto.RegisterType((*TimeZoneErrorEnum)(nil), "google.ads.googleads.v3.errors.TimeZoneErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/time_zone_error.proto", fileDescriptor_8e4bfbe09bff50c3)
+}
+
+var fileDescriptor_8e4bfbe09bff50c3 = []byte{
+	// 302 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0xff, 0xf6, 0x47, 0x85, 0x29, 0x62, 0x1b, 0x70, 0x23, 0xd2, 0x45, 0x1e, 0x60, 0x66,
+	0x31, 0xae, 0xc6, 0xd5, 0xd4, 0x8c, 0x25, 0xa8, 0xd3, 0x82, 0x6d, 0xc4, 0x12, 0x08, 0xd1, 0x0c,
+	0x43, 0xa0, 0x99, 0x1b, 0x32, 0xb1, 0x0b, 0x1f, 0xc7, 0xa5, 0x8f, 0xe2, 0xa3, 0x08, 0xbe, 0x83,
+	0x24, 0x63, 0x02, 0x5d, 0xe8, 0xea, 0x1e, 0x0e, 0xdf, 0xb9, 0xf7, 0x70, 0xd1, 0x85, 0x06, 0xd0,
+	0x5b, 0x45, 0xd2, 0xcc, 0x12, 0x27, 0x1b, 0xb5, 0xa3, 0x44, 0x55, 0x15, 0x54, 0x96, 0xd4, 0x79,
+	0xa1, 0x92, 0x57, 0x30, 0x2a, 0x69, 0x0d, 0x5c, 0x56, 0x50, 0x83, 0x37, 0x75, 0x28, 0x4e, 0x33,
+	0x8b, 0xfb, 0x14, 0xde, 0x51, 0xec, 0x52, 0x67, 0xe7, 0xdd, 0xd6, 0x32, 0x27, 0xa9, 0x31, 0x50,
+	0xa7, 0x75, 0x0e, 0xc6, 0xba, 0xb4, 0xff, 0x88, 0x26, 0xab, 0xbc, 0x50, 0x1b, 0x30, 0x4a, 0x34,
+	0xbc, 0x30, 0x2f, 0x85, 0x1f, 0xa0, 0xe3, 0x3d, 0xd3, 0x3b, 0x41, 0xa3, 0xb5, 0xbc, 0x5f, 0x8a,
+	0xab, 0xf0, 0x3a, 0x14, 0xc1, 0xf8, 0x9f, 0x37, 0x42, 0x47, 0x6b, 0x79, 0x23, 0x17, 0x0f, 0x72,
+	0x3c, 0xf0, 0x4e, 0xd1, 0x24, 0x94, 0x11, 0xbf, 0x0d, 0x83, 0x64, 0x15, 0xde, 0x89, 0x64, 0xb3,
+	0x90, 0x62, 0x7c, 0x30, 0xfb, 0x1a, 0x20, 0xff, 0x19, 0x0a, 0xfc, 0x77, 0xbf, 0x99, 0xb7, 0x77,
+	0x6a, 0xd9, 0xb4, 0x5a, 0x0e, 0x36, 0xc1, 0x4f, 0x4a, 0xc3, 0x36, 0x35, 0x1a, 0x43, 0xa5, 0x89,
+	0x56, 0xa6, 0xed, 0xdc, 0xfd, 0xa6, 0xcc, 0xed, 0x6f, 0xaf, 0xba, 0x74, 0xe3, 0x6d, 0xf8, 0x7f,
+	0xce, 0xf9, 0xfb, 0x70, 0x3a, 0x77, 0xcb, 0x78, 0x66, 0xb1, 0x93, 0x8d, 0x8a, 0x28, 0x6e, 0x4f,
+	0xda, 0x8f, 0x0e, 0x88, 0x79, 0x66, 0xe3, 0x1e, 0x88, 0x23, 0x1a, 0x3b, 0xe0, 0x73, 0xe8, 0x3b,
+	0x97, 0x31, 0x9e, 0x59, 0xc6, 0x7a, 0x84, 0xb1, 0x88, 0x32, 0xe6, 0xa0, 0xa7, 0xc3, 0xb6, 0x1d,
+	0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x34, 0x85, 0x53, 0x87, 0xc7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/url_field_error.pb.go b/googleapis/ads/googleads/v3/errors/url_field_error.pb.go
new file mode 100644
index 0000000..c2cc5ad
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/url_field_error.pb.go
@@ -0,0 +1,374 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/url_field_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible url field errors.
+type UrlFieldErrorEnum_UrlFieldError int32
+
+const (
+	// Enum unspecified.
+	UrlFieldErrorEnum_UNSPECIFIED UrlFieldErrorEnum_UrlFieldError = 0
+	// The received error code is not known in this version.
+	UrlFieldErrorEnum_UNKNOWN UrlFieldErrorEnum_UrlFieldError = 1
+	// The tracking url template is invalid.
+	UrlFieldErrorEnum_INVALID_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 2
+	// The tracking url template contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 3
+	// The tracking url template must contain at least one tag (e.g. {lpurl}),
+	// This applies only to tracking url template associated with website ads or
+	// product ads.
+	UrlFieldErrorEnum_MISSING_TRACKING_URL_TEMPLATE_TAG UrlFieldErrorEnum_UrlFieldError = 4
+	// The tracking url template must start with a valid protocol (or lpurl
+	// tag).
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 5
+	// The tracking url template starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 6
+	// The tracking url template contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 7
+	// The tracking url template must contain a host name (or lpurl tag).
+	UrlFieldErrorEnum_MISSING_HOST_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 8
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 9
+	// The tracking url template contains nested occurrences of the same
+	// conditional tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG UrlFieldErrorEnum_UrlFieldError = 10
+	// The final url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 11
+	// The final url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 12
+	// The final url contains nested occurrences of the same conditional tag
+	// (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_URL_TAG UrlFieldErrorEnum_UrlFieldError = 13
+	// The final url must start with a valid protocol.
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 14
+	// The final url starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 15
+	// The final url contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 16
+	// The final url must contain a host name.
+	UrlFieldErrorEnum_MISSING_HOST_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 17
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 18
+	// The final mobile url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 19
+	// The final mobile url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 20
+	// The final mobile url contains nested occurrences of the same conditional
+	// tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG UrlFieldErrorEnum_UrlFieldError = 21
+	// The final mobile url must start with a valid protocol.
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 22
+	// The final mobile url starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 23
+	// The final mobile url contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 24
+	// The final mobile url must contain a host name.
+	UrlFieldErrorEnum_MISSING_HOST_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 25
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 26
+	// The final app url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_APP_URL UrlFieldErrorEnum_UrlFieldError = 27
+	// The final app url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_APP_URL UrlFieldErrorEnum_UrlFieldError = 28
+	// The final app url contains nested occurrences of the same conditional tag
+	// (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_APP_URL_TAG UrlFieldErrorEnum_UrlFieldError = 29
+	// More than one app url found for the same OS type.
+	UrlFieldErrorEnum_MULTIPLE_APP_URLS_FOR_OSTYPE UrlFieldErrorEnum_UrlFieldError = 30
+	// The OS type given for an app url is not valid.
+	UrlFieldErrorEnum_INVALID_OSTYPE UrlFieldErrorEnum_UrlFieldError = 31
+	// The protocol given for an app url is not valid. (E.g. "android-app://")
+	UrlFieldErrorEnum_INVALID_PROTOCOL_FOR_APP_URL UrlFieldErrorEnum_UrlFieldError = 32
+	// The package id (app id) given for an app url is not valid.
+	UrlFieldErrorEnum_INVALID_PACKAGE_ID_FOR_APP_URL UrlFieldErrorEnum_UrlFieldError = 33
+	// The number of url custom parameters for an resource exceeds the maximum
+	// limit allowed.
+	UrlFieldErrorEnum_URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT UrlFieldErrorEnum_UrlFieldError = 34
+	// An invalid character appears in the parameter key.
+	UrlFieldErrorEnum_INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY UrlFieldErrorEnum_UrlFieldError = 39
+	// An invalid character appears in the parameter value.
+	UrlFieldErrorEnum_INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE UrlFieldErrorEnum_UrlFieldError = 40
+	// The url custom parameter value fails url tag validation.
+	UrlFieldErrorEnum_INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE UrlFieldErrorEnum_UrlFieldError = 41
+	// The custom parameter contains nested occurrences of the same conditional
+	// tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG UrlFieldErrorEnum_UrlFieldError = 42
+	// The protocol (http:// or https://) is missing.
+	UrlFieldErrorEnum_MISSING_PROTOCOL UrlFieldErrorEnum_UrlFieldError = 43
+	// Unsupported protocol in URL. Only http and https are supported.
+	UrlFieldErrorEnum_INVALID_PROTOCOL UrlFieldErrorEnum_UrlFieldError = 52
+	// The url is invalid.
+	UrlFieldErrorEnum_INVALID_URL UrlFieldErrorEnum_UrlFieldError = 44
+	// Destination Url is deprecated.
+	UrlFieldErrorEnum_DESTINATION_URL_DEPRECATED UrlFieldErrorEnum_UrlFieldError = 45
+	// The url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_URL UrlFieldErrorEnum_UrlFieldError = 46
+	// The url must contain at least one tag (e.g. {lpurl}), This applies only
+	// to urls associated with website ads or product ads.
+	UrlFieldErrorEnum_MISSING_URL_TAG UrlFieldErrorEnum_UrlFieldError = 47
+	// Duplicate url id.
+	UrlFieldErrorEnum_DUPLICATE_URL_ID UrlFieldErrorEnum_UrlFieldError = 48
+	// Invalid url id.
+	UrlFieldErrorEnum_INVALID_URL_ID UrlFieldErrorEnum_UrlFieldError = 49
+	// The final url suffix cannot begin with '?' or '&' characters and must be
+	// a valid query string.
+	UrlFieldErrorEnum_FINAL_URL_SUFFIX_MALFORMED UrlFieldErrorEnum_UrlFieldError = 50
+	// The final url suffix cannot contain {lpurl} related or {ignore} tags.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_URL_SUFFIX UrlFieldErrorEnum_UrlFieldError = 51
+	// The top level domain is invalid, e.g, not a public top level domain
+	// listed in publicsuffix.org.
+	UrlFieldErrorEnum_INVALID_TOP_LEVEL_DOMAIN UrlFieldErrorEnum_UrlFieldError = 53
+	// Malformed top level domain in URL.
+	UrlFieldErrorEnum_MALFORMED_TOP_LEVEL_DOMAIN UrlFieldErrorEnum_UrlFieldError = 54
+	// Malformed URL.
+	UrlFieldErrorEnum_MALFORMED_URL UrlFieldErrorEnum_UrlFieldError = 55
+	// No host found in URL.
+	UrlFieldErrorEnum_MISSING_HOST UrlFieldErrorEnum_UrlFieldError = 56
+	// Custom parameter value cannot be null.
+	UrlFieldErrorEnum_NULL_CUSTOM_PARAMETER_VALUE UrlFieldErrorEnum_UrlFieldError = 57
+)
+
+var UrlFieldErrorEnum_UrlFieldError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_TRACKING_URL_TEMPLATE",
+	3:  "INVALID_TAG_IN_TRACKING_URL_TEMPLATE",
+	4:  "MISSING_TRACKING_URL_TEMPLATE_TAG",
+	5:  "MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
+	6:  "INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
+	7:  "MALFORMED_TRACKING_URL_TEMPLATE",
+	8:  "MISSING_HOST_IN_TRACKING_URL_TEMPLATE",
+	9:  "INVALID_TLD_IN_TRACKING_URL_TEMPLATE",
+	10: "REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG",
+	11: "INVALID_FINAL_URL",
+	12: "INVALID_TAG_IN_FINAL_URL",
+	13: "REDUNDANT_NESTED_FINAL_URL_TAG",
+	14: "MISSING_PROTOCOL_IN_FINAL_URL",
+	15: "INVALID_PROTOCOL_IN_FINAL_URL",
+	16: "MALFORMED_FINAL_URL",
+	17: "MISSING_HOST_IN_FINAL_URL",
+	18: "INVALID_TLD_IN_FINAL_URL",
+	19: "INVALID_FINAL_MOBILE_URL",
+	20: "INVALID_TAG_IN_FINAL_MOBILE_URL",
+	21: "REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG",
+	22: "MISSING_PROTOCOL_IN_FINAL_MOBILE_URL",
+	23: "INVALID_PROTOCOL_IN_FINAL_MOBILE_URL",
+	24: "MALFORMED_FINAL_MOBILE_URL",
+	25: "MISSING_HOST_IN_FINAL_MOBILE_URL",
+	26: "INVALID_TLD_IN_FINAL_MOBILE_URL",
+	27: "INVALID_FINAL_APP_URL",
+	28: "INVALID_TAG_IN_FINAL_APP_URL",
+	29: "REDUNDANT_NESTED_FINAL_APP_URL_TAG",
+	30: "MULTIPLE_APP_URLS_FOR_OSTYPE",
+	31: "INVALID_OSTYPE",
+	32: "INVALID_PROTOCOL_FOR_APP_URL",
+	33: "INVALID_PACKAGE_ID_FOR_APP_URL",
+	34: "URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT",
+	39: "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY",
+	40: "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE",
+	41: "INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE",
+	42: "REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG",
+	43: "MISSING_PROTOCOL",
+	52: "INVALID_PROTOCOL",
+	44: "INVALID_URL",
+	45: "DESTINATION_URL_DEPRECATED",
+	46: "INVALID_TAG_IN_URL",
+	47: "MISSING_URL_TAG",
+	48: "DUPLICATE_URL_ID",
+	49: "INVALID_URL_ID",
+	50: "FINAL_URL_SUFFIX_MALFORMED",
+	51: "INVALID_TAG_IN_FINAL_URL_SUFFIX",
+	53: "INVALID_TOP_LEVEL_DOMAIN",
+	54: "MALFORMED_TOP_LEVEL_DOMAIN",
+	55: "MALFORMED_URL",
+	56: "MISSING_HOST",
+	57: "NULL_CUSTOM_PARAMETER_VALUE",
+}
+
+var UrlFieldErrorEnum_UrlFieldError_value = map[string]int32{
+	"UNSPECIFIED":                                      0,
+	"UNKNOWN":                                          1,
+	"INVALID_TRACKING_URL_TEMPLATE":                    2,
+	"INVALID_TAG_IN_TRACKING_URL_TEMPLATE":             3,
+	"MISSING_TRACKING_URL_TEMPLATE_TAG":                4,
+	"MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE":        5,
+	"INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE":        6,
+	"MALFORMED_TRACKING_URL_TEMPLATE":                  7,
+	"MISSING_HOST_IN_TRACKING_URL_TEMPLATE":            8,
+	"INVALID_TLD_IN_TRACKING_URL_TEMPLATE":             9,
+	"REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG":       10,
+	"INVALID_FINAL_URL":                                11,
+	"INVALID_TAG_IN_FINAL_URL":                         12,
+	"REDUNDANT_NESTED_FINAL_URL_TAG":                   13,
+	"MISSING_PROTOCOL_IN_FINAL_URL":                    14,
+	"INVALID_PROTOCOL_IN_FINAL_URL":                    15,
+	"MALFORMED_FINAL_URL":                              16,
+	"MISSING_HOST_IN_FINAL_URL":                        17,
+	"INVALID_TLD_IN_FINAL_URL":                         18,
+	"INVALID_FINAL_MOBILE_URL":                         19,
+	"INVALID_TAG_IN_FINAL_MOBILE_URL":                  20,
+	"REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG":            21,
+	"MISSING_PROTOCOL_IN_FINAL_MOBILE_URL":             22,
+	"INVALID_PROTOCOL_IN_FINAL_MOBILE_URL":             23,
+	"MALFORMED_FINAL_MOBILE_URL":                       24,
+	"MISSING_HOST_IN_FINAL_MOBILE_URL":                 25,
+	"INVALID_TLD_IN_FINAL_MOBILE_URL":                  26,
+	"INVALID_FINAL_APP_URL":                            27,
+	"INVALID_TAG_IN_FINAL_APP_URL":                     28,
+	"REDUNDANT_NESTED_FINAL_APP_URL_TAG":               29,
+	"MULTIPLE_APP_URLS_FOR_OSTYPE":                     30,
+	"INVALID_OSTYPE":                                   31,
+	"INVALID_PROTOCOL_FOR_APP_URL":                     32,
+	"INVALID_PACKAGE_ID_FOR_APP_URL":                   33,
+	"URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT":        34,
+	"INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY":   39,
+	"INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE": 40,
+	"INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE":        41,
+	"REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG":        42,
+	"MISSING_PROTOCOL":                                 43,
+	"INVALID_PROTOCOL":                                 52,
+	"INVALID_URL":                                      44,
+	"DESTINATION_URL_DEPRECATED":                       45,
+	"INVALID_TAG_IN_URL":                               46,
+	"MISSING_URL_TAG":                                  47,
+	"DUPLICATE_URL_ID":                                 48,
+	"INVALID_URL_ID":                                   49,
+	"FINAL_URL_SUFFIX_MALFORMED":                       50,
+	"INVALID_TAG_IN_FINAL_URL_SUFFIX":                  51,
+	"INVALID_TOP_LEVEL_DOMAIN":                         53,
+	"MALFORMED_TOP_LEVEL_DOMAIN":                       54,
+	"MALFORMED_URL":                                    55,
+	"MISSING_HOST":                                     56,
+	"NULL_CUSTOM_PARAMETER_VALUE":                      57,
+}
+
+func (x UrlFieldErrorEnum_UrlFieldError) String() string {
+	return proto.EnumName(UrlFieldErrorEnum_UrlFieldError_name, int32(x))
+}
+
+func (UrlFieldErrorEnum_UrlFieldError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fda0f9682a3a1a06, []int{0, 0}
+}
+
+// Container for enum describing possible url field errors.
+type UrlFieldErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UrlFieldErrorEnum) Reset()         { *m = UrlFieldErrorEnum{} }
+func (m *UrlFieldErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*UrlFieldErrorEnum) ProtoMessage()    {}
+func (*UrlFieldErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fda0f9682a3a1a06, []int{0}
+}
+
+func (m *UrlFieldErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UrlFieldErrorEnum.Unmarshal(m, b)
+}
+func (m *UrlFieldErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UrlFieldErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *UrlFieldErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UrlFieldErrorEnum.Merge(m, src)
+}
+func (m *UrlFieldErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_UrlFieldErrorEnum.Size(m)
+}
+func (m *UrlFieldErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UrlFieldErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UrlFieldErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.UrlFieldErrorEnum_UrlFieldError", UrlFieldErrorEnum_UrlFieldError_name, UrlFieldErrorEnum_UrlFieldError_value)
+	proto.RegisterType((*UrlFieldErrorEnum)(nil), "google.ads.googleads.v3.errors.UrlFieldErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/url_field_error.proto", fileDescriptor_fda0f9682a3a1a06)
+}
+
+var fileDescriptor_fda0f9682a3a1a06 = []byte{
+	// 865 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xdd, 0x6e, 0xdb, 0x36,
+	0x14, 0xc7, 0x97, 0x74, 0x6b, 0xb7, 0x93, 0x26, 0x61, 0x4e, 0x9a, 0xb6, 0x49, 0x13, 0x27, 0xf1,
+	0xda, 0xad, 0xe9, 0x56, 0xb9, 0xab, 0xb3, 0x2f, 0xef, 0x8a, 0x91, 0x68, 0x97, 0x08, 0x45, 0x09,
+	0x12, 0xe5, 0xb5, 0x43, 0x00, 0xc2, 0x9b, 0x33, 0x23, 0x80, 0x6b, 0x05, 0x56, 0xda, 0xe7, 0x19,
+	0x76, 0xb9, 0x07, 0xd8, 0x43, 0xec, 0x51, 0x06, 0xec, 0x1d, 0x06, 0x4a, 0x96, 0x25, 0x3b, 0x56,
+	0x86, 0x5d, 0x99, 0x38, 0xe7, 0x77, 0x3e, 0xf8, 0x3f, 0x22, 0x69, 0x38, 0x1e, 0xc4, 0xf1, 0x60,
+	0x78, 0xde, 0xe8, 0xf5, 0x93, 0x46, 0xb6, 0x34, 0xab, 0xf7, 0xcd, 0xc6, 0xf9, 0x78, 0x1c, 0x8f,
+	0x93, 0xc6, 0xbb, 0xf1, 0x50, 0xff, 0x7a, 0x71, 0x3e, 0xec, 0xeb, 0xd4, 0x60, 0x5d, 0x8e, 0xe3,
+	0xab, 0x18, 0x6b, 0x19, 0x6a, 0xf5, 0xfa, 0x89, 0x35, 0x8d, 0xb2, 0xde, 0x37, 0xad, 0x2c, 0x6a,
+	0x67, 0x37, 0xcf, 0x7a, 0x79, 0xd1, 0xe8, 0x8d, 0x46, 0xf1, 0x55, 0xef, 0xea, 0x22, 0x1e, 0x25,
+	0x59, 0x74, 0xfd, 0xcf, 0x35, 0xd8, 0x88, 0xc6, 0xc3, 0xb6, 0x49, 0xcb, 0x4c, 0x00, 0x1b, 0xbd,
+	0x7b, 0x5b, 0xff, 0x6d, 0x0d, 0x56, 0x67, 0xac, 0xb8, 0x0e, 0x2b, 0x91, 0x0c, 0x7d, 0x66, 0xf3,
+	0x36, 0x67, 0x0e, 0xf9, 0x00, 0x57, 0xe0, 0x4e, 0x24, 0x4f, 0xa5, 0xf7, 0xa3, 0x24, 0x4b, 0x78,
+	0x08, 0x7b, 0x5c, 0x76, 0xa9, 0xe0, 0x8e, 0x56, 0x01, 0xb5, 0x4f, 0xb9, 0xec, 0xe8, 0x28, 0x10,
+	0x5a, 0x31, 0xd7, 0x17, 0x54, 0x31, 0xb2, 0x8c, 0x4f, 0xe1, 0xf1, 0x14, 0xa1, 0x1d, 0xcd, 0x65,
+	0x05, 0x79, 0x0b, 0x9f, 0xc0, 0xa1, 0xcb, 0xc3, 0xd0, 0x78, 0x16, 0x22, 0x26, 0x9e, 0x7c, 0x88,
+	0xcf, 0xe1, 0x28, 0xc7, 0xfc, 0xc0, 0x53, 0x9e, 0xed, 0x89, 0xea, 0xac, 0x1f, 0x19, 0x3c, 0xaf,
+	0xff, 0xdf, 0xf8, 0x6d, 0xfc, 0x14, 0xf6, 0x5d, 0x2a, 0xda, 0x5e, 0xe0, 0xb2, 0xaa, 0x3d, 0xdd,
+	0xc1, 0x23, 0x78, 0x92, 0xb7, 0xf0, 0xca, 0x0b, 0x55, 0x75, 0xbe, 0x8f, 0x67, 0xb6, 0x2f, 0x9c,
+	0x6a, 0xf2, 0x13, 0xb4, 0xe0, 0x59, 0xc0, 0x9c, 0x48, 0x3a, 0x54, 0x2a, 0x2d, 0x59, 0xa8, 0xaa,
+	0x1a, 0x48, 0x75, 0x00, 0xdc, 0x82, 0x8d, 0x3c, 0x73, 0x9b, 0x4b, 0x2a, 0x0c, 0x43, 0x56, 0x70,
+	0x17, 0x1e, 0xce, 0xe9, 0x5d, 0x78, 0xef, 0x62, 0x1d, 0x6a, 0xd7, 0x8a, 0x4c, 0xfd, 0x69, 0xe2,
+	0x55, 0x33, 0xd4, 0x45, 0x02, 0x17, 0x69, 0xd6, 0xca, 0x73, 0x5f, 0x8c, 0xac, 0xe3, 0x03, 0xd8,
+	0x2c, 0x84, 0x2c, 0x1c, 0x04, 0xf7, 0x60, 0x7b, 0x5e, 0xbc, 0xc2, 0xbd, 0x31, 0xd3, 0x7f, 0x26,
+	0x58, 0xe1, 0xc5, 0xb2, 0x37, 0x33, 0xbb, 0xde, 0x09, 0x17, 0x2c, 0xf5, 0x6e, 0x9a, 0xe1, 0x2d,
+	0xdc, 0x7b, 0x09, 0xba, 0x67, 0x86, 0x57, 0x21, 0x41, 0x81, 0xa5, 0x4a, 0x6c, 0x99, 0xe1, 0x55,
+	0x2b, 0x51, 0x4a, 0x7a, 0xbf, 0x3c, 0xe6, 0x1b, 0xc9, 0x07, 0x58, 0x83, 0x9d, 0x79, 0x5d, 0x4a,
+	0xfe, 0x87, 0xf8, 0x18, 0x0e, 0x16, 0xcb, 0x53, 0xa2, 0xb6, 0x67, 0x76, 0x5a, 0x56, 0xa9, 0x04,
+	0xed, 0xe0, 0x36, 0x6c, 0xcd, 0x8a, 0x45, 0x7d, 0x3f, 0x75, 0x3d, 0xc2, 0x03, 0xd8, 0x5d, 0xa8,
+	0x54, 0x4e, 0xec, 0xe2, 0x67, 0x50, 0xaf, 0x90, 0x69, 0xc2, 0xa4, 0x1a, 0xed, 0x99, 0x4c, 0x6e,
+	0x24, 0x14, 0xf7, 0x05, 0xcb, 0x3d, 0xa1, 0x6e, 0x7b, 0x81, 0xf6, 0x42, 0xf5, 0xc6, 0x67, 0xa4,
+	0x86, 0x08, 0x6b, 0x79, 0xad, 0x89, 0x6d, 0xbf, 0x5c, 0x7f, 0xaa, 0x97, 0x09, 0xca, 0xeb, 0x1f,
+	0x98, 0x2f, 0x75, 0x4a, 0x50, 0xfb, 0x94, 0x76, 0x98, 0x36, 0xfb, 0x28, 0x31, 0x87, 0xe6, 0x6c,
+	0x9b, 0x46, 0xec, 0x28, 0x54, 0x9e, 0xab, 0x7d, 0x1a, 0x50, 0x97, 0x29, 0x16, 0x84, 0xda, 0xf6,
+	0x22, 0xa9, 0x34, 0x7b, 0x6d, 0x33, 0xe6, 0x84, 0x5a, 0x70, 0x97, 0x2b, 0x52, 0xc7, 0x97, 0x60,
+	0xe5, 0x29, 0xed, 0x57, 0x34, 0xa0, 0x76, 0xca, 0x72, 0xa9, 0x17, 0x25, 0xd1, 0xa7, 0xec, 0x0d,
+	0xf9, 0x1c, 0x8f, 0xe1, 0xc5, 0xff, 0x88, 0xe9, 0x52, 0x11, 0x31, 0xf2, 0xb4, 0x7c, 0xe9, 0x4c,
+	0xe4, 0xbd, 0x01, 0x3f, 0x32, 0xf8, 0x35, 0xad, 0x17, 0x06, 0x18, 0xc9, 0x9f, 0xe1, 0x3d, 0x20,
+	0xf3, 0x9f, 0x25, 0xf9, 0xc2, 0x58, 0xe7, 0x25, 0x25, 0xc7, 0xe6, 0xfe, 0xce, 0xad, 0x46, 0xb3,
+	0x2f, 0xcd, 0xf7, 0xe7, 0xb0, 0x50, 0x71, 0x49, 0x15, 0xf7, 0xb2, 0xbe, 0x1c, 0xe6, 0x07, 0xcc,
+	0xa6, 0x8a, 0x39, 0xe4, 0x39, 0xde, 0x07, 0xbc, 0xde, 0x3a, 0xb1, 0x70, 0x13, 0xd6, 0xf3, 0xa2,
+	0xf9, 0xf0, 0x1b, 0xa6, 0xa6, 0x13, 0xf9, 0x82, 0x9b, 0xe0, 0xd4, 0xcc, 0x1d, 0xf2, 0xa2, 0x3c,
+	0xf0, 0x89, 0xed, 0x2b, 0x53, 0xb6, 0xb8, 0x67, 0xc2, 0xa8, 0xdd, 0xe6, 0xaf, 0xf5, 0xf4, 0x1c,
+	0x90, 0x97, 0x95, 0x47, 0xb7, 0xc0, 0x49, 0x73, 0xe6, 0x6e, 0xf0, 0x7c, 0x2d, 0x58, 0x97, 0x09,
+	0xed, 0x78, 0x2e, 0xe5, 0x92, 0x7c, 0x3d, 0x7b, 0xb2, 0xae, 0xf9, 0xbf, 0xc1, 0x0d, 0x58, 0x2d,
+	0xfc, 0x66, 0x53, 0xdf, 0x22, 0x81, 0xbb, 0xe5, 0xc3, 0x46, 0xbe, 0xc3, 0x7d, 0x78, 0x24, 0x23,
+	0x51, 0x39, 0xab, 0xef, 0x4f, 0xfe, 0x59, 0x82, 0xfa, 0x2f, 0xf1, 0x5b, 0xeb, 0xe6, 0xd7, 0xf7,
+	0x04, 0x67, 0x9e, 0x51, 0xdf, 0xbc, 0xb9, 0xfe, 0xd2, 0x4f, 0xce, 0x24, 0x6a, 0x10, 0x0f, 0x7b,
+	0xa3, 0x81, 0x15, 0x8f, 0x07, 0x8d, 0xc1, 0xf9, 0x28, 0x7d, 0x91, 0xf3, 0x97, 0xff, 0xf2, 0x22,
+	0xa9, 0xfa, 0x23, 0xf0, 0x43, 0xf6, 0xf3, 0xfb, 0xf2, 0xad, 0x0e, 0xa5, 0x7f, 0x2c, 0xd7, 0x3a,
+	0x59, 0x32, 0xda, 0x4f, 0xac, 0x6c, 0x69, 0x56, 0xdd, 0xa6, 0x95, 0x96, 0x4c, 0xfe, 0xca, 0x81,
+	0x33, 0xda, 0x4f, 0xce, 0xa6, 0xc0, 0x59, 0xb7, 0x79, 0x96, 0x01, 0x7f, 0x2f, 0xd7, 0x33, 0x6b,
+	0xab, 0x45, 0xfb, 0x49, 0xab, 0x35, 0x45, 0x5a, 0xad, 0x6e, 0xb3, 0xd5, 0xca, 0xa0, 0x9f, 0x6f,
+	0xa7, 0xdd, 0x35, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xcf, 0x6b, 0x07, 0xa5, 0x08, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/user_list_error.pb.go b/googleapis/ads/googleads/v3/errors/user_list_error.pb.go
new file mode 100644
index 0000000..c6feb4d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/user_list_error.pb.go
@@ -0,0 +1,254 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/user_list_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing possible user list errors.
+type UserListErrorEnum_UserListError int32
+
+const (
+	// Enum unspecified.
+	UserListErrorEnum_UNSPECIFIED UserListErrorEnum_UserListError = 0
+	// The received error code is not known in this version.
+	UserListErrorEnum_UNKNOWN UserListErrorEnum_UserListError = 1
+	// Creating and updating external remarketing user lists is not supported.
+	UserListErrorEnum_EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED UserListErrorEnum_UserListError = 2
+	// Concrete type of user list is required.
+	UserListErrorEnum_CONCRETE_TYPE_REQUIRED UserListErrorEnum_UserListError = 3
+	// Creating/updating user list conversion types requires specifying the
+	// conversion type Id.
+	UserListErrorEnum_CONVERSION_TYPE_ID_REQUIRED UserListErrorEnum_UserListError = 4
+	// Remarketing user list cannot have duplicate conversion types.
+	UserListErrorEnum_DUPLICATE_CONVERSION_TYPES UserListErrorEnum_UserListError = 5
+	// Conversion type is invalid/unknown.
+	UserListErrorEnum_INVALID_CONVERSION_TYPE UserListErrorEnum_UserListError = 6
+	// User list description is empty or invalid.
+	UserListErrorEnum_INVALID_DESCRIPTION UserListErrorEnum_UserListError = 7
+	// User list name is empty or invalid.
+	UserListErrorEnum_INVALID_NAME UserListErrorEnum_UserListError = 8
+	// Type of the UserList does not match.
+	UserListErrorEnum_INVALID_TYPE UserListErrorEnum_UserListError = 9
+	// Embedded logical user lists are not allowed.
+	UserListErrorEnum_CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND UserListErrorEnum_UserListError = 10
+	// User list rule operand is invalid.
+	UserListErrorEnum_INVALID_USER_LIST_LOGICAL_RULE_OPERAND UserListErrorEnum_UserListError = 11
+	// Name is already being used for another user list for the account.
+	UserListErrorEnum_NAME_ALREADY_USED UserListErrorEnum_UserListError = 12
+	// Name is required when creating a new conversion type.
+	UserListErrorEnum_NEW_CONVERSION_TYPE_NAME_REQUIRED UserListErrorEnum_UserListError = 13
+	// The given conversion type name has been used.
+	UserListErrorEnum_CONVERSION_TYPE_NAME_ALREADY_USED UserListErrorEnum_UserListError = 14
+	// Only an owner account may edit a user list.
+	UserListErrorEnum_OWNERSHIP_REQUIRED_FOR_SET UserListErrorEnum_UserListError = 15
+	// Creating user list without setting type in oneof user_list field, or
+	// creating/updating read-only user list types is not allowed.
+	UserListErrorEnum_USER_LIST_MUTATE_NOT_SUPPORTED UserListErrorEnum_UserListError = 16
+	// Rule is invalid.
+	UserListErrorEnum_INVALID_RULE UserListErrorEnum_UserListError = 17
+	// The specified date range is empty.
+	UserListErrorEnum_INVALID_DATE_RANGE UserListErrorEnum_UserListError = 27
+	// A UserList which is privacy sensitive or legal rejected cannot be mutated
+	// by external users.
+	UserListErrorEnum_CAN_NOT_MUTATE_SENSITIVE_USERLIST UserListErrorEnum_UserListError = 28
+	// Maximum number of rulebased user lists a customer can have.
+	UserListErrorEnum_MAX_NUM_RULEBASED_USERLISTS UserListErrorEnum_UserListError = 29
+	// BasicUserList's billable record field cannot be modified once it is set.
+	UserListErrorEnum_CANNOT_MODIFY_BILLABLE_RECORD_COUNT UserListErrorEnum_UserListError = 30
+	// crm_based_user_list.app_id field must be set when upload_key_type is
+	// MOBILE_ADVERTISING_ID.
+	UserListErrorEnum_APP_ID_NOT_SET UserListErrorEnum_UserListError = 31
+	// Name of the user list is reserved for system generated lists and cannot
+	// be used.
+	UserListErrorEnum_USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST UserListErrorEnum_UserListError = 32
+	// Advertiser needs to be whitelisted to use remarketing lists created from
+	// advertiser uploaded data (e.g., Customer Match lists).
+	UserListErrorEnum_ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA UserListErrorEnum_UserListError = 33
+	// The provided rule_type is not supported for the user list.
+	UserListErrorEnum_RULE_TYPE_IS_NOT_SUPPORTED UserListErrorEnum_UserListError = 34
+	// Similar user list cannot be used as a logical user list operand.
+	UserListErrorEnum_CAN_NOT_ADD_A_SIMILAR_USERLIST_AS_LOGICAL_LIST_OPERAND UserListErrorEnum_UserListError = 35
+	// Logical user list should not have a mix of CRM based user list and other
+	// types of lists in its rules.
+	UserListErrorEnum_CAN_NOT_MIX_CRM_BASED_IN_LOGICAL_LIST_WITH_OTHER_LISTS UserListErrorEnum_UserListError = 36
+)
+
+var UserListErrorEnum_UserListError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED",
+	3:  "CONCRETE_TYPE_REQUIRED",
+	4:  "CONVERSION_TYPE_ID_REQUIRED",
+	5:  "DUPLICATE_CONVERSION_TYPES",
+	6:  "INVALID_CONVERSION_TYPE",
+	7:  "INVALID_DESCRIPTION",
+	8:  "INVALID_NAME",
+	9:  "INVALID_TYPE",
+	10: "CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND",
+	11: "INVALID_USER_LIST_LOGICAL_RULE_OPERAND",
+	12: "NAME_ALREADY_USED",
+	13: "NEW_CONVERSION_TYPE_NAME_REQUIRED",
+	14: "CONVERSION_TYPE_NAME_ALREADY_USED",
+	15: "OWNERSHIP_REQUIRED_FOR_SET",
+	16: "USER_LIST_MUTATE_NOT_SUPPORTED",
+	17: "INVALID_RULE",
+	27: "INVALID_DATE_RANGE",
+	28: "CAN_NOT_MUTATE_SENSITIVE_USERLIST",
+	29: "MAX_NUM_RULEBASED_USERLISTS",
+	30: "CANNOT_MODIFY_BILLABLE_RECORD_COUNT",
+	31: "APP_ID_NOT_SET",
+	32: "USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST",
+	33: "ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA",
+	34: "RULE_TYPE_IS_NOT_SUPPORTED",
+	35: "CAN_NOT_ADD_A_SIMILAR_USERLIST_AS_LOGICAL_LIST_OPERAND",
+	36: "CAN_NOT_MIX_CRM_BASED_IN_LOGICAL_LIST_WITH_OTHER_LISTS",
+}
+
+var UserListErrorEnum_UserListError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED":    2,
+	"CONCRETE_TYPE_REQUIRED":                                 3,
+	"CONVERSION_TYPE_ID_REQUIRED":                            4,
+	"DUPLICATE_CONVERSION_TYPES":                             5,
+	"INVALID_CONVERSION_TYPE":                                6,
+	"INVALID_DESCRIPTION":                                    7,
+	"INVALID_NAME":                                           8,
+	"INVALID_TYPE":                                           9,
+	"CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND":       10,
+	"INVALID_USER_LIST_LOGICAL_RULE_OPERAND":                 11,
+	"NAME_ALREADY_USED":                                      12,
+	"NEW_CONVERSION_TYPE_NAME_REQUIRED":                      13,
+	"CONVERSION_TYPE_NAME_ALREADY_USED":                      14,
+	"OWNERSHIP_REQUIRED_FOR_SET":                             15,
+	"USER_LIST_MUTATE_NOT_SUPPORTED":                         16,
+	"INVALID_RULE":                                           17,
+	"INVALID_DATE_RANGE":                                     27,
+	"CAN_NOT_MUTATE_SENSITIVE_USERLIST":                      28,
+	"MAX_NUM_RULEBASED_USERLISTS":                            29,
+	"CANNOT_MODIFY_BILLABLE_RECORD_COUNT":                    30,
+	"APP_ID_NOT_SET":                                         31,
+	"USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST":              32,
+	"ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA":     33,
+	"RULE_TYPE_IS_NOT_SUPPORTED":                             34,
+	"CAN_NOT_ADD_A_SIMILAR_USERLIST_AS_LOGICAL_LIST_OPERAND": 35,
+	"CAN_NOT_MIX_CRM_BASED_IN_LOGICAL_LIST_WITH_OTHER_LISTS": 36,
+}
+
+func (x UserListErrorEnum_UserListError) String() string {
+	return proto.EnumName(UserListErrorEnum_UserListError_name, int32(x))
+}
+
+func (UserListErrorEnum_UserListError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_94d23c47a73d2df0, []int{0, 0}
+}
+
+// Container for enum describing possible user list errors.
+type UserListErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListErrorEnum) Reset()         { *m = UserListErrorEnum{} }
+func (m *UserListErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListErrorEnum) ProtoMessage()    {}
+func (*UserListErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_94d23c47a73d2df0, []int{0}
+}
+
+func (m *UserListErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListErrorEnum.Unmarshal(m, b)
+}
+func (m *UserListErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *UserListErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListErrorEnum.Merge(m, src)
+}
+func (m *UserListErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListErrorEnum.Size(m)
+}
+func (m *UserListErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.UserListErrorEnum_UserListError", UserListErrorEnum_UserListError_name, UserListErrorEnum_UserListError_value)
+	proto.RegisterType((*UserListErrorEnum)(nil), "google.ads.googleads.v3.errors.UserListErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/user_list_error.proto", fileDescriptor_94d23c47a73d2df0)
+}
+
+var fileDescriptor_94d23c47a73d2df0 = []byte{
+	// 741 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xed, 0x6e, 0x23, 0x35,
+	0x14, 0xa5, 0x59, 0xd8, 0x80, 0xbb, 0x1f, 0xae, 0x11, 0xbb, 0x52, 0xbb, 0x64, 0xd9, 0x2c, 0x1f,
+	0x02, 0x89, 0x09, 0x22, 0x55, 0x91, 0x86, 0x5f, 0xce, 0xf8, 0x36, 0xb1, 0x3a, 0xe3, 0x19, 0x6c,
+	0xcf, 0xa4, 0x41, 0x91, 0xac, 0x40, 0xa2, 0x28, 0x52, 0x9b, 0xa9, 0x32, 0x69, 0x1f, 0x88, 0x9f,
+	0x3c, 0x0a, 0x0f, 0xc0, 0x43, 0x20, 0x78, 0x07, 0x64, 0x4f, 0x66, 0x9a, 0x44, 0x94, 0xfd, 0x15,
+	0xc7, 0xf7, 0x9c, 0xe3, 0x7b, 0xcf, 0xbd, 0x73, 0xd1, 0xe9, 0x3c, 0xcf, 0xe7, 0x57, 0xb3, 0xce,
+	0x64, 0x5a, 0x74, 0xca, 0xa3, 0x3d, 0xdd, 0x75, 0x3b, 0xb3, 0xd5, 0x2a, 0x5f, 0x15, 0x9d, 0xdb,
+	0x62, 0xb6, 0x32, 0x57, 0x8b, 0x62, 0x6d, 0xdc, 0x85, 0x77, 0xb3, 0xca, 0xd7, 0x39, 0x69, 0x95,
+	0x50, 0x6f, 0x32, 0x2d, 0xbc, 0x9a, 0xe5, 0xdd, 0x75, 0xbd, 0x92, 0x75, 0xfc, 0xaa, 0x52, 0xbd,
+	0x59, 0x74, 0x26, 0xcb, 0x65, 0xbe, 0x9e, 0xac, 0x17, 0xf9, 0xb2, 0x28, 0xd9, 0xed, 0xbf, 0x9b,
+	0xe8, 0x28, 0x2d, 0x66, 0xab, 0x70, 0x51, 0xac, 0xc1, 0x12, 0x60, 0x79, 0x7b, 0xdd, 0xfe, 0xb3,
+	0x89, 0x9e, 0xee, 0xdc, 0x92, 0xe7, 0xe8, 0x30, 0x15, 0x2a, 0x81, 0x80, 0x9f, 0x73, 0x60, 0xf8,
+	0x3d, 0x72, 0x88, 0x9a, 0xa9, 0xb8, 0x10, 0xf1, 0x50, 0xe0, 0x03, 0xf2, 0x03, 0xea, 0xc2, 0xa5,
+	0x06, 0x29, 0x68, 0x68, 0x24, 0x44, 0x54, 0x5e, 0x80, 0xe6, 0xa2, 0x6f, 0x52, 0x05, 0xd2, 0x84,
+	0x5c, 0x69, 0x13, 0xa5, 0x9a, 0x6a, 0x30, 0x22, 0xd6, 0x46, 0xa5, 0x49, 0x12, 0x4b, 0x0d, 0x0c,
+	0x37, 0xc8, 0x31, 0x7a, 0x11, 0xc4, 0x22, 0x90, 0xa0, 0xc1, 0xe8, 0x51, 0x02, 0x46, 0xc2, 0x4f,
+	0x29, 0x97, 0xc0, 0xf0, 0x23, 0xf2, 0x1a, 0x9d, 0x04, 0xb1, 0xc8, 0x40, 0x2a, 0x1e, 0x8b, 0x32,
+	0xca, 0xd9, 0x3d, 0xe0, 0x7d, 0xd2, 0x42, 0xc7, 0x2c, 0x4d, 0x42, 0x1e, 0x58, 0xe5, 0x3d, 0xa8,
+	0xc2, 0x1f, 0x90, 0x13, 0xf4, 0x92, 0x8b, 0x8c, 0x86, 0x9c, 0xed, 0x47, 0xf1, 0x63, 0xf2, 0x12,
+	0x7d, 0x5c, 0x05, 0x19, 0xa8, 0x40, 0xf2, 0x44, 0xf3, 0x58, 0xe0, 0x26, 0xc1, 0xe8, 0x49, 0x15,
+	0x10, 0x34, 0x02, 0xfc, 0xe1, 0xf6, 0x8d, 0x23, 0x7f, 0x44, 0x4e, 0xd1, 0x77, 0x01, 0x15, 0xae,
+	0x1a, 0xca, 0x98, 0x09, 0xe3, 0x3e, 0x0f, 0x68, 0x58, 0x56, 0x4a, 0xd5, 0xee, 0xff, 0x38, 0x01,
+	0x49, 0x05, 0xc3, 0x88, 0x7c, 0x83, 0xbe, 0xac, 0x74, 0xee, 0x8d, 0xa9, 0xb0, 0x32, 0x0d, 0xa1,
+	0xc6, 0x1e, 0x92, 0x4f, 0xd0, 0x91, 0x7d, 0xdd, 0xd0, 0x50, 0x02, 0x65, 0x23, 0x4b, 0x60, 0xf8,
+	0x09, 0xf9, 0x02, 0xbd, 0x11, 0x30, 0xdc, 0x2f, 0xc7, 0x25, 0x7a, 0xef, 0xcc, 0x53, 0x0b, 0xfb,
+	0x4f, 0xc8, 0x8e, 0xda, 0x33, 0x6b, 0x60, 0x3c, 0x14, 0x20, 0xd5, 0x80, 0x27, 0x35, 0xdd, 0x9c,
+	0xc7, 0xd2, 0x28, 0xd0, 0xf8, 0x39, 0x69, 0xa3, 0xd6, 0x3b, 0x3a, 0x88, 0xb7, 0xcd, 0xb1, 0x25,
+	0xe0, 0x23, 0xf2, 0x02, 0x91, 0xda, 0x59, 0xcb, 0x90, 0x54, 0xf4, 0x01, 0x9f, 0xb8, 0xa4, 0x36,
+	0xa6, 0x6d, 0xb4, 0x14, 0x08, 0xc5, 0x35, 0xcf, 0xc0, 0xf9, 0x61, 0x5f, 0xc1, 0xaf, 0x6c, 0xdb,
+	0x23, 0x7a, 0x69, 0x44, 0x1a, 0x39, 0xc1, 0x1e, 0x55, 0xc0, 0xea, 0xb8, 0xc2, 0x9f, 0x92, 0xaf,
+	0xd0, 0xdb, 0x80, 0x0a, 0x27, 0x13, 0x33, 0x7e, 0x3e, 0x32, 0x3d, 0x1e, 0x86, 0xb4, 0x17, 0x5a,
+	0x07, 0x82, 0x58, 0xda, 0x66, 0xa7, 0x42, 0xe3, 0x16, 0x21, 0xe8, 0x19, 0x4d, 0x12, 0x3b, 0x34,
+	0x2e, 0x69, 0xd0, 0xf8, 0x35, 0xf9, 0x16, 0x7d, 0x5d, 0x69, 0x95, 0x96, 0x70, 0x65, 0x24, 0x28,
+	0x90, 0x59, 0x55, 0xf9, 0x48, 0x69, 0x88, 0x5c, 0xc9, 0xf8, 0x33, 0x72, 0x86, 0xbe, 0xa7, 0x2c,
+	0x03, 0xa9, 0xb9, 0xf5, 0xc1, 0xca, 0x0c, 0x07, 0x5c, 0x83, 0x8d, 0x6e, 0xf0, 0xa9, 0x72, 0x83,
+	0x9e, 0x84, 0x31, 0x65, 0xe0, 0x2a, 0xa6, 0xf8, 0x8d, 0x75, 0xd6, 0x35, 0xb4, 0x9c, 0x5a, 0xb5,
+	0xe7, 0x5a, 0x9b, 0xf8, 0xe8, 0x6c, 0x7b, 0x80, 0xa8, 0x51, 0x3c, 0xe2, 0x21, 0x95, 0x75, 0xa1,
+	0x0f, 0x8e, 0xd1, 0xdb, 0x6d, 0x6e, 0xc4, 0x2f, 0x4d, 0x20, 0x23, 0x53, 0x9a, 0xc4, 0xc5, 0x2e,
+	0x65, 0xc8, 0xf5, 0xc0, 0xc4, 0x7a, 0xb0, 0xe9, 0xa0, 0xc2, 0x9f, 0xf7, 0xfe, 0x39, 0x40, 0xed,
+	0x5f, 0xf3, 0x6b, 0xef, 0xff, 0x77, 0x46, 0x8f, 0xec, 0x7c, 0xfc, 0x89, 0xdd, 0x14, 0xc9, 0xc1,
+	0xcf, 0x6c, 0xc3, 0x9a, 0xe7, 0x57, 0x93, 0xe5, 0xdc, 0xcb, 0x57, 0xf3, 0xce, 0x7c, 0xb6, 0x74,
+	0x7b, 0xa4, 0xda, 0x57, 0x37, 0x8b, 0xe2, 0xa1, 0xf5, 0xf5, 0x63, 0xf9, 0xf3, 0x5b, 0xe3, 0x51,
+	0x9f, 0xd2, 0xdf, 0x1b, 0xad, 0x7e, 0x29, 0x46, 0xa7, 0x85, 0x57, 0x1e, 0xed, 0x29, 0xeb, 0x7a,
+	0xee, 0xc9, 0xe2, 0x8f, 0x0a, 0x30, 0xa6, 0xd3, 0x62, 0x5c, 0x03, 0xc6, 0x59, 0x77, 0x5c, 0x02,
+	0xfe, 0x6a, 0xb4, 0xcb, 0x5b, 0xdf, 0xa7, 0xd3, 0xc2, 0xf7, 0x6b, 0x88, 0xef, 0x67, 0x5d, 0xdf,
+	0x2f, 0x41, 0xbf, 0x3c, 0x76, 0xd9, 0x75, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x4c, 0x0e,
+	0x3e, 0x5b, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/errors/youtube_video_registration_error.pb.go b/googleapis/ads/googleads/v3/errors/youtube_video_registration_error.pb.go
new file mode 100644
index 0000000..3a2933f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/errors/youtube_video_registration_error.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/errors/youtube_video_registration_error.proto
+
+package errors
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Enum describing YouTube video registration errors.
+type YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError int32
+
+const (
+	// Enum unspecified.
+	YoutubeVideoRegistrationErrorEnum_UNSPECIFIED YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError = 0
+	// The received error code is not known in this version.
+	YoutubeVideoRegistrationErrorEnum_UNKNOWN YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError = 1
+	// Video to be registered wasn't found.
+	YoutubeVideoRegistrationErrorEnum_VIDEO_NOT_FOUND YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError = 2
+	// Video to be registered is not accessible (e.g. private).
+	YoutubeVideoRegistrationErrorEnum_VIDEO_NOT_ACCESSIBLE YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError = 3
+	// Video to be registered is not eligible (e.g. mature content).
+	YoutubeVideoRegistrationErrorEnum_VIDEO_NOT_ELIGIBLE YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError = 4
+)
+
+var YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "VIDEO_NOT_FOUND",
+	3: "VIDEO_NOT_ACCESSIBLE",
+	4: "VIDEO_NOT_ELIGIBLE",
+}
+
+var YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"VIDEO_NOT_FOUND":      2,
+	"VIDEO_NOT_ACCESSIBLE": 3,
+	"VIDEO_NOT_ELIGIBLE":   4,
+}
+
+func (x YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError) String() string {
+	return proto.EnumName(YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError_name, int32(x))
+}
+
+func (YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_37f72673454cf2d4, []int{0, 0}
+}
+
+// Container for enum describing YouTube video registration errors.
+type YoutubeVideoRegistrationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *YoutubeVideoRegistrationErrorEnum) Reset()         { *m = YoutubeVideoRegistrationErrorEnum{} }
+func (m *YoutubeVideoRegistrationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*YoutubeVideoRegistrationErrorEnum) ProtoMessage()    {}
+func (*YoutubeVideoRegistrationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37f72673454cf2d4, []int{0}
+}
+
+func (m *YoutubeVideoRegistrationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YoutubeVideoRegistrationErrorEnum.Unmarshal(m, b)
+}
+func (m *YoutubeVideoRegistrationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YoutubeVideoRegistrationErrorEnum.Marshal(b, m, deterministic)
+}
+func (m *YoutubeVideoRegistrationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YoutubeVideoRegistrationErrorEnum.Merge(m, src)
+}
+func (m *YoutubeVideoRegistrationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_YoutubeVideoRegistrationErrorEnum.Size(m)
+}
+func (m *YoutubeVideoRegistrationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_YoutubeVideoRegistrationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YoutubeVideoRegistrationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.errors.YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError", YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError_name, YoutubeVideoRegistrationErrorEnum_YoutubeVideoRegistrationError_value)
+	proto.RegisterType((*YoutubeVideoRegistrationErrorEnum)(nil), "google.ads.googleads.v3.errors.YoutubeVideoRegistrationErrorEnum")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/errors/youtube_video_registration_error.proto", fileDescriptor_37f72673454cf2d4)
+}
+
+var fileDescriptor_37f72673454cf2d4 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc3, 0x40,
+	0x10, 0x86, 0x4d, 0x2a, 0x0a, 0xdb, 0x43, 0xc3, 0x2a, 0x22, 0xa2, 0x05, 0xf3, 0x00, 0x9b, 0x43,
+	0x6e, 0xeb, 0x29, 0x6d, 0xb6, 0x25, 0x58, 0x92, 0x62, 0x6d, 0x44, 0x09, 0x84, 0xd4, 0x84, 0x25,
+	0xd0, 0x66, 0xca, 0x6e, 0x5a, 0xf0, 0xee, 0x93, 0x78, 0xec, 0xa3, 0xf8, 0x28, 0xbe, 0x83, 0x20,
+	0xd9, 0xb5, 0xad, 0x17, 0x7b, 0xca, 0xcf, 0xe4, 0x9b, 0xff, 0x9f, 0xd9, 0x41, 0x8c, 0x03, 0xf0,
+	0x79, 0xe1, 0x64, 0xb9, 0x74, 0xb4, 0x6c, 0xd4, 0xda, 0x75, 0x0a, 0x21, 0x40, 0x48, 0xe7, 0x0d,
+	0x56, 0xf5, 0x6a, 0x56, 0xa4, 0xeb, 0x32, 0x2f, 0x20, 0x15, 0x05, 0x2f, 0x65, 0x2d, 0xb2, 0xba,
+	0x84, 0x2a, 0x55, 0x04, 0x59, 0x0a, 0xa8, 0x01, 0x77, 0x75, 0x2f, 0xc9, 0x72, 0x49, 0x76, 0x36,
+	0x64, 0xed, 0x12, 0x6d, 0x73, 0x75, 0xbd, 0x8d, 0x59, 0x96, 0x4e, 0x56, 0x55, 0x50, 0x2b, 0x0b,
+	0xa9, 0xbb, 0xed, 0x8d, 0x81, 0x6e, 0x9f, 0x75, 0x50, 0xdc, 0xe4, 0x3c, 0xfc, 0x89, 0x61, 0x8d,
+	0x01, 0xab, 0x56, 0x0b, 0xfb, 0xdd, 0x40, 0x37, 0x07, 0x29, 0xdc, 0x41, 0xed, 0x69, 0x38, 0x19,
+	0xb3, 0x7e, 0x30, 0x08, 0x98, 0x6f, 0x1d, 0xe1, 0x36, 0x3a, 0x9d, 0x86, 0xf7, 0x61, 0xf4, 0x14,
+	0x5a, 0x06, 0x3e, 0x43, 0x9d, 0x38, 0xf0, 0x59, 0x94, 0x86, 0xd1, 0x63, 0x3a, 0x88, 0xa6, 0xa1,
+	0x6f, 0x99, 0xf8, 0x12, 0x9d, 0xef, 0x8b, 0x5e, 0xbf, 0xcf, 0x26, 0x93, 0xa0, 0x37, 0x62, 0x56,
+	0x0b, 0x5f, 0x20, 0xbc, 0xff, 0xc3, 0x46, 0xc1, 0x50, 0xd5, 0x8f, 0x7b, 0xdf, 0x06, 0xb2, 0x5f,
+	0x61, 0x41, 0x0e, 0x6f, 0xdc, 0xb3, 0x0f, 0x8e, 0x3a, 0x6e, 0xf6, 0x1e, 0x1b, 0x2f, 0xfe, 0xaf,
+	0x0b, 0x87, 0x79, 0x56, 0x71, 0x02, 0x82, 0x3b, 0xbc, 0xa8, 0xd4, 0xab, 0x6c, 0xcf, 0xb1, 0x2c,
+	0xe5, 0x7f, 0xd7, 0xb9, 0xd3, 0x9f, 0x0f, 0xb3, 0x35, 0xf4, 0xbc, 0x8d, 0xd9, 0x1d, 0x6a, 0x33,
+	0x2f, 0x97, 0x44, 0xcb, 0x46, 0xc5, 0x2e, 0x51, 0x91, 0xf2, 0x73, 0x0b, 0x24, 0x5e, 0x2e, 0x93,
+	0x1d, 0x90, 0xc4, 0x6e, 0xa2, 0x81, 0x2f, 0xd3, 0xd6, 0x55, 0x4a, 0xbd, 0x5c, 0x52, 0xba, 0x43,
+	0x28, 0x8d, 0x5d, 0x4a, 0x35, 0x34, 0x3b, 0x51, 0xd3, 0xb9, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0xf2, 0xe2, 0x8c, 0xd1, 0x3a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/account_budget.pb.go b/googleapis/ads/googleads/v3/resources/account_budget.pb.go
new file mode 100644
index 0000000..f085eb0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/account_budget.pb.go
@@ -0,0 +1,724 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/account_budget.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An account-level budget. It contains information about the budget itself,
+// as well as the most recently approved changes to the budget and proposed
+// changes that are pending approval. The proposed changes that are pending
+// approval, if any, are found in 'pending_proposal'.  Effective details about
+// the budget are found in fields prefixed 'approved_', 'adjusted_' and those
+// without a prefix.  Since some effective details may differ from what the user
+// had originally requested (e.g. spending limit), these differences are
+// juxtaposed via 'proposed_', 'approved_', and possibly 'adjusted_' fields.
+//
+// This resource is mutated using AccountBudgetProposal and cannot be mutated
+// directly. A budget may have at most one pending proposal at any given time.
+// It is read through pending_proposal.
+//
+// Once approved, a budget may be subject to adjustments, such as credit
+// adjustments.  Adjustments create differences between the 'approved' and
+// 'adjusted' fields, which would otherwise be identical.
+type AccountBudget struct {
+	// The resource name of the account-level budget.
+	// AccountBudget resource names have the form:
+	//
+	// `customers/{customer_id}/accountBudgets/{account_budget_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the account-level budget.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The resource name of the billing setup associated with this account-level
+	// budget.  BillingSetup resource names have the form:
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	BillingSetup *wrappers.StringValue `protobuf:"bytes,3,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The status of this account-level budget.
+	Status enums.AccountBudgetStatusEnum_AccountBudgetStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.AccountBudgetStatusEnum_AccountBudgetStatus" json:"status,omitempty"`
+	// The name of the account-level budget.
+	Name *wrappers.StringValue `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+	// The proposed start time of the account-level budget in
+	// yyyy-MM-dd HH:mm:ss format.  If a start time type of NOW was proposed,
+	// this is the time of request.
+	ProposedStartDateTime *wrappers.StringValue `protobuf:"bytes,6,opt,name=proposed_start_date_time,json=proposedStartDateTime,proto3" json:"proposed_start_date_time,omitempty"`
+	// The approved start time of the account-level budget in yyyy-MM-dd HH:mm:ss
+	// format.
+	//
+	// For example, if a new budget is approved after the proposed start time,
+	// the approved start time is the time of approval.
+	ApprovedStartDateTime *wrappers.StringValue `protobuf:"bytes,7,opt,name=approved_start_date_time,json=approvedStartDateTime,proto3" json:"approved_start_date_time,omitempty"`
+	// The total adjustments amount.
+	//
+	// An example of an adjustment is courtesy credits.
+	TotalAdjustmentsMicros *wrappers.Int64Value `protobuf:"bytes,18,opt,name=total_adjustments_micros,json=totalAdjustmentsMicros,proto3" json:"total_adjustments_micros,omitempty"`
+	// The value of Ads that have been served, in micros.
+	//
+	// This includes overdelivery costs, in which case a credit might be
+	// automatically applied to the budget (see total_adjustments_micros).
+	AmountServedMicros *wrappers.Int64Value `protobuf:"bytes,19,opt,name=amount_served_micros,json=amountServedMicros,proto3" json:"amount_served_micros,omitempty"`
+	// A purchase order number is a value that helps users reference this budget
+	// in their monthly invoices.
+	PurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,20,opt,name=purchase_order_number,json=purchaseOrderNumber,proto3" json:"purchase_order_number,omitempty"`
+	// Notes associated with the budget.
+	Notes *wrappers.StringValue `protobuf:"bytes,21,opt,name=notes,proto3" json:"notes,omitempty"`
+	// The pending proposal to modify this budget, if applicable.
+	PendingProposal *AccountBudget_PendingAccountBudgetProposal `protobuf:"bytes,22,opt,name=pending_proposal,json=pendingProposal,proto3" json:"pending_proposal,omitempty"`
+	// The proposed end time of the account-level budget.
+	//
+	// Types that are valid to be assigned to ProposedEndTime:
+	//	*AccountBudget_ProposedEndDateTime
+	//	*AccountBudget_ProposedEndTimeType
+	ProposedEndTime isAccountBudget_ProposedEndTime `protobuf_oneof:"proposed_end_time"`
+	// The approved end time of the account-level budget.
+	//
+	// For example, if a budget's end time is updated and the proposal is approved
+	// after the proposed end time, the approved end time is the time of approval.
+	//
+	// Types that are valid to be assigned to ApprovedEndTime:
+	//	*AccountBudget_ApprovedEndDateTime
+	//	*AccountBudget_ApprovedEndTimeType
+	ApprovedEndTime isAccountBudget_ApprovedEndTime `protobuf_oneof:"approved_end_time"`
+	// The proposed spending limit.
+	//
+	// Types that are valid to be assigned to ProposedSpendingLimit:
+	//	*AccountBudget_ProposedSpendingLimitMicros
+	//	*AccountBudget_ProposedSpendingLimitType
+	ProposedSpendingLimit isAccountBudget_ProposedSpendingLimit `protobuf_oneof:"proposed_spending_limit"`
+	// The approved spending limit.
+	//
+	// For example, if the amount already spent by the account exceeds the
+	// proposed spending limit at the time the proposal is approved, the approved
+	// spending limit is set to the amount already spent.
+	//
+	// Types that are valid to be assigned to ApprovedSpendingLimit:
+	//	*AccountBudget_ApprovedSpendingLimitMicros
+	//	*AccountBudget_ApprovedSpendingLimitType
+	ApprovedSpendingLimit isAccountBudget_ApprovedSpendingLimit `protobuf_oneof:"approved_spending_limit"`
+	// The spending limit after adjustments have been applied.  Adjustments are
+	// stored in total_adjustments_micros.
+	//
+	// This value has the final say on how much the account is allowed to spend.
+	//
+	// Types that are valid to be assigned to AdjustedSpendingLimit:
+	//	*AccountBudget_AdjustedSpendingLimitMicros
+	//	*AccountBudget_AdjustedSpendingLimitType
+	AdjustedSpendingLimit isAccountBudget_AdjustedSpendingLimit `protobuf_oneof:"adjusted_spending_limit"`
+	XXX_NoUnkeyedLiteral  struct{}                              `json:"-"`
+	XXX_unrecognized      []byte                                `json:"-"`
+	XXX_sizecache         int32                                 `json:"-"`
+}
+
+func (m *AccountBudget) Reset()         { *m = AccountBudget{} }
+func (m *AccountBudget) String() string { return proto.CompactTextString(m) }
+func (*AccountBudget) ProtoMessage()    {}
+func (*AccountBudget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b0ff171752da1201, []int{0}
+}
+
+func (m *AccountBudget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudget.Unmarshal(m, b)
+}
+func (m *AccountBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudget.Marshal(b, m, deterministic)
+}
+func (m *AccountBudget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudget.Merge(m, src)
+}
+func (m *AccountBudget) XXX_Size() int {
+	return xxx_messageInfo_AccountBudget.Size(m)
+}
+func (m *AccountBudget) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudget proto.InternalMessageInfo
+
+func (m *AccountBudget) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AccountBudget) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetBillingSetup() *wrappers.StringValue {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetStatus() enums.AccountBudgetStatusEnum_AccountBudgetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AccountBudgetStatusEnum_UNSPECIFIED
+}
+
+func (m *AccountBudget) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetTotalAdjustmentsMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAdjustmentsMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAmountServedMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountServedMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.Notes
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetPendingProposal() *AccountBudget_PendingAccountBudgetProposal {
+	if m != nil {
+		return m.PendingProposal
+	}
+	return nil
+}
+
+type isAccountBudget_ProposedEndTime interface {
+	isAccountBudget_ProposedEndTime()
+}
+
+type AccountBudget_ProposedEndDateTime struct {
+	ProposedEndDateTime *wrappers.StringValue `protobuf:"bytes,8,opt,name=proposed_end_date_time,json=proposedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudget_ProposedEndTimeType struct {
+	ProposedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,9,opt,name=proposed_end_time_type,json=proposedEndTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_ProposedEndDateTime) isAccountBudget_ProposedEndTime() {}
+
+func (*AccountBudget_ProposedEndTimeType) isAccountBudget_ProposedEndTime() {}
+
+func (m *AccountBudget) GetProposedEndTime() isAccountBudget_ProposedEndTime {
+	if m != nil {
+		return m.ProposedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedEndTime().(*AccountBudget_ProposedEndDateTime); ok {
+		return x.ProposedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedEndTime().(*AccountBudget_ProposedEndTimeType); ok {
+		return x.ProposedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ApprovedEndTime interface {
+	isAccountBudget_ApprovedEndTime()
+}
+
+type AccountBudget_ApprovedEndDateTime struct {
+	ApprovedEndDateTime *wrappers.StringValue `protobuf:"bytes,10,opt,name=approved_end_date_time,json=approvedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudget_ApprovedEndTimeType struct {
+	ApprovedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,11,opt,name=approved_end_time_type,json=approvedEndTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_ApprovedEndDateTime) isAccountBudget_ApprovedEndTime() {}
+
+func (*AccountBudget_ApprovedEndTimeType) isAccountBudget_ApprovedEndTime() {}
+
+func (m *AccountBudget) GetApprovedEndTime() isAccountBudget_ApprovedEndTime {
+	if m != nil {
+		return m.ApprovedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudget_ApprovedEndDateTime); ok {
+		return x.ApprovedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudget_ApprovedEndTimeType); ok {
+		return x.ApprovedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ProposedSpendingLimit interface {
+	isAccountBudget_ProposedSpendingLimit()
+}
+
+type AccountBudget_ProposedSpendingLimitMicros struct {
+	ProposedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,12,opt,name=proposed_spending_limit_micros,json=proposedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_ProposedSpendingLimitType struct {
+	ProposedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,13,opt,name=proposed_spending_limit_type,json=proposedSpendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_ProposedSpendingLimitMicros) isAccountBudget_ProposedSpendingLimit() {}
+
+func (*AccountBudget_ProposedSpendingLimitType) isAccountBudget_ProposedSpendingLimit() {}
+
+func (m *AccountBudget) GetProposedSpendingLimit() isAccountBudget_ProposedSpendingLimit {
+	if m != nil {
+		return m.ProposedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudget_ProposedSpendingLimitMicros); ok {
+		return x.ProposedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudget_ProposedSpendingLimitType); ok {
+		return x.ProposedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ApprovedSpendingLimit interface {
+	isAccountBudget_ApprovedSpendingLimit()
+}
+
+type AccountBudget_ApprovedSpendingLimitMicros struct {
+	ApprovedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=approved_spending_limit_micros,json=approvedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_ApprovedSpendingLimitType struct {
+	ApprovedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,15,opt,name=approved_spending_limit_type,json=approvedSpendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_ApprovedSpendingLimitMicros) isAccountBudget_ApprovedSpendingLimit() {}
+
+func (*AccountBudget_ApprovedSpendingLimitType) isAccountBudget_ApprovedSpendingLimit() {}
+
+func (m *AccountBudget) GetApprovedSpendingLimit() isAccountBudget_ApprovedSpendingLimit {
+	if m != nil {
+		return m.ApprovedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudget_ApprovedSpendingLimitMicros); ok {
+		return x.ApprovedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudget_ApprovedSpendingLimitType); ok {
+		return x.ApprovedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_AdjustedSpendingLimit interface {
+	isAccountBudget_AdjustedSpendingLimit()
+}
+
+type AccountBudget_AdjustedSpendingLimitMicros struct {
+	AdjustedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,16,opt,name=adjusted_spending_limit_micros,json=adjustedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_AdjustedSpendingLimitType struct {
+	AdjustedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,17,opt,name=adjusted_spending_limit_type,json=adjustedSpendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_AdjustedSpendingLimitMicros) isAccountBudget_AdjustedSpendingLimit() {}
+
+func (*AccountBudget_AdjustedSpendingLimitType) isAccountBudget_AdjustedSpendingLimit() {}
+
+func (m *AccountBudget) GetAdjustedSpendingLimit() isAccountBudget_AdjustedSpendingLimit {
+	if m != nil {
+		return m.AdjustedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAdjustedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetAdjustedSpendingLimit().(*AccountBudget_AdjustedSpendingLimitMicros); ok {
+		return x.AdjustedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAdjustedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetAdjustedSpendingLimit().(*AccountBudget_AdjustedSpendingLimitType); ok {
+		return x.AdjustedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AccountBudget) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AccountBudget_ProposedEndDateTime)(nil),
+		(*AccountBudget_ProposedEndTimeType)(nil),
+		(*AccountBudget_ApprovedEndDateTime)(nil),
+		(*AccountBudget_ApprovedEndTimeType)(nil),
+		(*AccountBudget_ProposedSpendingLimitMicros)(nil),
+		(*AccountBudget_ProposedSpendingLimitType)(nil),
+		(*AccountBudget_ApprovedSpendingLimitMicros)(nil),
+		(*AccountBudget_ApprovedSpendingLimitType)(nil),
+		(*AccountBudget_AdjustedSpendingLimitMicros)(nil),
+		(*AccountBudget_AdjustedSpendingLimitType)(nil),
+	}
+}
+
+// A pending proposal associated with the enclosing account-level budget,
+// if applicable.
+type AccountBudget_PendingAccountBudgetProposal struct {
+	// The resource name of the proposal.
+	// AccountBudgetProposal resource names have the form:
+	//
+	// `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
+	AccountBudgetProposal *wrappers.StringValue `protobuf:"bytes,1,opt,name=account_budget_proposal,json=accountBudgetProposal,proto3" json:"account_budget_proposal,omitempty"`
+	// The type of this proposal, e.g. END to end the budget associated
+	// with this proposal.
+	ProposalType enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType `protobuf:"varint,2,opt,name=proposal_type,json=proposalType,proto3,enum=google.ads.googleads.v3.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType" json:"proposal_type,omitempty"`
+	// The name to assign to the account-level budget.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The start time in yyyy-MM-dd HH:mm:ss format.
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
+	// A purchase order number is a value that helps users reference this budget
+	// in their monthly invoices.
+	PurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,9,opt,name=purchase_order_number,json=purchaseOrderNumber,proto3" json:"purchase_order_number,omitempty"`
+	// Notes associated with this budget.
+	Notes *wrappers.StringValue `protobuf:"bytes,10,opt,name=notes,proto3" json:"notes,omitempty"`
+	// The time when this account-level budget proposal was created.
+	// Formatted as yyyy-MM-dd HH:mm:ss.
+	CreationDateTime *wrappers.StringValue `protobuf:"bytes,11,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
+	// The end time of the account-level budget.
+	//
+	// Types that are valid to be assigned to EndTime:
+	//	*AccountBudget_PendingAccountBudgetProposal_EndDateTime
+	//	*AccountBudget_PendingAccountBudgetProposal_EndTimeType
+	EndTime isAccountBudget_PendingAccountBudgetProposal_EndTime `protobuf_oneof:"end_time"`
+	// The spending limit.
+	//
+	// Types that are valid to be assigned to SpendingLimit:
+	//	*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros
+	//	*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType
+	SpendingLimit        isAccountBudget_PendingAccountBudgetProposal_SpendingLimit `protobuf_oneof:"spending_limit"`
+	XXX_NoUnkeyedLiteral struct{}                                                   `json:"-"`
+	XXX_unrecognized     []byte                                                     `json:"-"`
+	XXX_sizecache        int32                                                      `json:"-"`
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) Reset() {
+	*m = AccountBudget_PendingAccountBudgetProposal{}
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AccountBudget_PendingAccountBudgetProposal) ProtoMessage() {}
+func (*AccountBudget_PendingAccountBudgetProposal) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b0ff171752da1201, []int{0, 0}
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Unmarshal(m, b)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Marshal(b, m, deterministic)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Merge(m, src)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Size() int {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Size(m)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal proto.InternalMessageInfo
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetAccountBudgetProposal() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudgetProposal
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetProposalType() enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType {
+	if m != nil {
+		return m.ProposalType
+	}
+	return enums.AccountBudgetProposalTypeEnum_UNSPECIFIED
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.Notes
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetCreationDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDateTime
+	}
+	return nil
+}
+
+type isAccountBudget_PendingAccountBudgetProposal_EndTime interface {
+	isAccountBudget_PendingAccountBudgetProposal_EndTime()
+}
+
+type AccountBudget_PendingAccountBudgetProposal_EndDateTime struct {
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=end_date_time,json=endDateTime,proto3,oneof"`
+}
+
+type AccountBudget_PendingAccountBudgetProposal_EndTimeType struct {
+	EndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,6,opt,name=end_time_type,json=endTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_EndDateTime) isAccountBudget_PendingAccountBudgetProposal_EndTime() {
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_EndTimeType) isAccountBudget_PendingAccountBudgetProposal_EndTime() {
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndTime() isAccountBudget_PendingAccountBudgetProposal_EndTime {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetEndTime().(*AccountBudget_PendingAccountBudgetProposal_EndDateTime); ok {
+		return x.EndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetEndTime().(*AccountBudget_PendingAccountBudgetProposal_EndTimeType); ok {
+		return x.EndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_PendingAccountBudgetProposal_SpendingLimit interface {
+	isAccountBudget_PendingAccountBudgetProposal_SpendingLimit()
+}
+
+type AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros struct {
+	SpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,7,opt,name=spending_limit_micros,json=spendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_PendingAccountBudgetProposal_SpendingLimitType struct {
+	SpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,8,opt,name=spending_limit_type,json=spendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros) isAccountBudget_PendingAccountBudgetProposal_SpendingLimit() {
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType) isAccountBudget_PendingAccountBudgetProposal_SpendingLimit() {
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimit() isAccountBudget_PendingAccountBudgetProposal_SpendingLimit {
+	if m != nil {
+		return m.SpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetSpendingLimit().(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros); ok {
+		return x.SpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetSpendingLimit().(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType); ok {
+		return x.SpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AccountBudget_PendingAccountBudgetProposal) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AccountBudget_PendingAccountBudgetProposal_EndDateTime)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_EndTimeType)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*AccountBudget)(nil), "google.ads.googleads.v3.resources.AccountBudget")
+	proto.RegisterType((*AccountBudget_PendingAccountBudgetProposal)(nil), "google.ads.googleads.v3.resources.AccountBudget.PendingAccountBudgetProposal")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/account_budget.proto", fileDescriptor_b0ff171752da1201)
+}
+
+var fileDescriptor_b0ff171752da1201 = []byte{
+	// 1054 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdd, 0x6e, 0xdb, 0x36,
+	0x14, 0x9e, 0x1c, 0xe7, 0x8f, 0x89, 0xf3, 0x23, 0x37, 0xa9, 0x9c, 0x04, 0x45, 0xba, 0xa1, 0x43,
+	0x80, 0x61, 0xd2, 0x10, 0x07, 0x1d, 0xe6, 0xdd, 0xcc, 0x46, 0xbb, 0x66, 0xc1, 0xd2, 0x65, 0x72,
+	0xe6, 0x8b, 0x22, 0x98, 0x40, 0x5b, 0x9c, 0xa6, 0xcd, 0x22, 0x05, 0x92, 0xca, 0x5a, 0x04, 0x7d,
+	0x80, 0xbe, 0xc6, 0x2e, 0xf7, 0x20, 0xbb, 0xd8, 0xa3, 0xf4, 0x25, 0x56, 0x88, 0x12, 0x69, 0xcb,
+	0x96, 0x22, 0x15, 0xc9, 0x1d, 0x45, 0x9e, 0xef, 0x3b, 0xe7, 0x23, 0x79, 0xce, 0xa1, 0xc0, 0x53,
+	0x8f, 0x10, 0x6f, 0x8c, 0x2c, 0xe8, 0x32, 0x2b, 0x19, 0xc6, 0xa3, 0xeb, 0xb6, 0x45, 0x11, 0x23,
+	0x11, 0x1d, 0x21, 0x66, 0xc1, 0xd1, 0x88, 0x44, 0x98, 0x3b, 0xc3, 0xc8, 0xf5, 0x10, 0x37, 0x43,
+	0x4a, 0x38, 0xd1, 0x1f, 0x27, 0xc6, 0x26, 0x74, 0x99, 0xa9, 0x70, 0xe6, 0x75, 0xdb, 0x54, 0xb8,
+	0xbd, 0xef, 0x8a, 0xa8, 0x11, 0x8e, 0x82, 0x59, 0x5a, 0x27, 0xa4, 0x24, 0x24, 0x0c, 0x8e, 0x1d,
+	0xfe, 0x26, 0x44, 0x89, 0x93, 0xbd, 0x6f, 0x3e, 0x8a, 0x81, 0x71, 0xc8, 0x23, 0x96, 0x42, 0xbf,
+	0xbe, 0x1d, 0xca, 0x42, 0x84, 0x5d, 0x1f, 0x7b, 0xce, 0xd8, 0x0f, 0x7c, 0x3e, 0xed, 0xf3, 0xcb,
+	0xdb, 0x81, 0xdc, 0x0f, 0xd0, 0xb4, 0x79, 0x4b, 0x9a, 0x87, 0xbe, 0xda, 0xb2, 0x74, 0xe9, 0x51,
+	0xba, 0x24, 0xbe, 0x86, 0xd1, 0x6f, 0xd6, 0x5f, 0x14, 0x86, 0x21, 0xa2, 0x32, 0xc4, 0x83, 0x29,
+	0x28, 0xc4, 0x98, 0x70, 0xc8, 0x7d, 0x82, 0xd3, 0xd5, 0x4f, 0xdf, 0xb5, 0x40, 0xa3, 0x9b, 0x08,
+	0xec, 0x09, 0x7d, 0xfa, 0x67, 0xa0, 0x21, 0x3d, 0x38, 0x18, 0x06, 0xc8, 0xd0, 0x0e, 0xb5, 0xa3,
+	0x55, 0x7b, 0x5d, 0x4e, 0xbe, 0x84, 0x01, 0xd2, 0xbf, 0x00, 0x35, 0xdf, 0x35, 0x6a, 0x87, 0xda,
+	0xd1, 0xda, 0xf1, 0x7e, 0x7a, 0x32, 0xa6, 0x8c, 0xc0, 0xfc, 0x01, 0xf3, 0xa7, 0x27, 0x03, 0x38,
+	0x8e, 0x90, 0x5d, 0xf3, 0x5d, 0xbd, 0x0b, 0x1a, 0x43, 0x7f, 0x3c, 0x8e, 0xf7, 0x81, 0x21, 0x1e,
+	0x85, 0xc6, 0x82, 0xc0, 0x1d, 0xcc, 0xe1, 0xfa, 0x9c, 0xfa, 0xd8, 0x4b, 0x80, 0xeb, 0x29, 0xa4,
+	0x1f, 0x23, 0xf4, 0x21, 0x58, 0x4a, 0xf6, 0xdd, 0xa8, 0x1f, 0x6a, 0x47, 0x1b, 0xc7, 0x67, 0x66,
+	0xd1, 0xc5, 0x10, 0xfb, 0x67, 0x66, 0x24, 0xf5, 0x05, 0xf2, 0x39, 0x8e, 0x82, 0xbc, 0x79, 0x3b,
+	0x65, 0xd6, 0xbf, 0x02, 0x75, 0xa1, 0x77, 0xb1, 0x42, 0x74, 0xc2, 0x52, 0xff, 0x05, 0x18, 0xc9,
+	0x7d, 0x42, 0x6e, 0x7c, 0x2d, 0x28, 0x77, 0x5c, 0xc8, 0x91, 0x13, 0x1f, 0x9e, 0xb1, 0x54, 0x81,
+	0x65, 0x47, 0xa2, 0xfb, 0x31, 0xf8, 0x19, 0xe4, 0xe8, 0xd2, 0x4f, 0x68, 0x61, 0x18, 0x52, 0x72,
+	0x9d, 0x43, 0xbb, 0x5c, 0x85, 0x56, 0xa2, 0xe7, 0x68, 0x39, 0xe1, 0x70, 0xec, 0x40, 0xf7, 0x8f,
+	0x88, 0xf1, 0x00, 0x61, 0xce, 0x9c, 0xc0, 0x1f, 0x51, 0xc2, 0x0c, 0xbd, 0xfc, 0x24, 0x77, 0x05,
+	0xb8, 0x3b, 0xc1, 0x9e, 0x0b, 0xa8, 0x7e, 0x0e, 0x1e, 0xc0, 0x40, 0x24, 0x08, 0x43, 0x34, 0x0e,
+	0x39, 0xa5, 0x6c, 0x96, 0x53, 0xea, 0x09, 0xb0, 0x2f, 0x70, 0x29, 0xdd, 0x05, 0xd8, 0x09, 0x23,
+	0x3a, 0xfa, 0x1d, 0x32, 0xe4, 0x10, 0xea, 0x22, 0xea, 0xe0, 0x28, 0x18, 0x22, 0x6a, 0x3c, 0xa8,
+	0xa0, 0xbc, 0x29, 0xa1, 0x3f, 0xc5, 0xc8, 0x97, 0x02, 0xa8, 0x1f, 0x83, 0x45, 0x4c, 0x38, 0x62,
+	0xc6, 0x4e, 0x05, 0x86, 0xc4, 0x54, 0x7f, 0x0d, 0xb6, 0x64, 0xea, 0xca, 0x8a, 0x61, 0xec, 0x0a,
+	0xf8, 0xb9, 0x59, 0x5a, 0x92, 0xb2, 0xb7, 0xcc, 0xbc, 0x48, 0x88, 0x32, 0x93, 0x17, 0x29, 0xa9,
+	0xbd, 0x99, 0xba, 0x91, 0x13, 0x7a, 0x1f, 0xec, 0xaa, 0x3b, 0x85, 0xb0, 0x3b, 0x75, 0xf4, 0x2b,
+	0xe5, 0xe1, 0x9f, 0x7e, 0x62, 0x37, 0x25, 0xfa, 0x39, 0x76, 0xd5, 0xd1, 0xff, 0x39, 0x43, 0xaa,
+	0xca, 0x8b, 0xb1, 0x2a, 0xd2, 0xe9, 0xa4, 0x24, 0x9d, 0x62, 0x92, 0xcb, 0x37, 0x21, 0x12, 0x39,
+	0x24, 0x3f, 0x66, 0x9c, 0xc9, 0xe9, 0x58, 0x81, 0xba, 0xbe, 0x59, 0x05, 0xa0, 0x82, 0x02, 0xcd,
+	0x6e, 0x4a, 0xf4, 0x8c, 0x82, 0x0c, 0xe9, 0x44, 0xc1, 0xda, 0x1d, 0x14, 0x64, 0x9d, 0x29, 0x05,
+	0x43, 0xf0, 0x68, 0x92, 0xd7, 0xd9, 0x12, 0x9e, 0x5e, 0xee, 0xf5, 0xd2, 0xcb, 0x7d, 0x5a, 0xb3,
+	0xf7, 0x55, 0x7a, 0xa7, 0x1c, 0x3f, 0xc6, 0x14, 0xe9, 0x3d, 0x7f, 0xa7, 0x81, 0x83, 0x22, 0x27,
+	0x42, 0x57, 0x43, 0xe8, 0xfa, 0xbe, 0x44, 0x57, 0x86, 0x5a, 0x09, 0x9c, 0x9b, 0x3d, 0xad, 0xd9,
+	0xad, 0xdc, 0x68, 0xa4, 0xde, 0x49, 0xc1, 0xc9, 0xd5, 0xbb, 0x51, 0xae, 0x77, 0xc1, 0xde, 0x57,
+	0x75, 0xa7, 0x40, 0x6f, 0x91, 0x13, 0xa1, 0x77, 0xf3, 0x5e, 0xf5, 0x2e, 0xd8, 0xad, 0xdc, 0x68,
+	0x94, 0x5e, 0x51, 0xc7, 0x0a, 0xf5, 0x6e, 0x95, 0xeb, 0xad, 0xdb, 0xfb, 0x92, 0xa4, 0x50, 0x6f,
+	0x81, 0x13, 0xa1, 0x77, 0xfb, 0x5e, 0xf5, 0xd6, 0xed, 0x56, 0x6e, 0x34, 0xf1, 0xe2, 0xde, 0xbf,
+	0xcb, 0xe0, 0xe0, 0xb6, 0x2a, 0xa4, 0x5f, 0x82, 0x87, 0x05, 0xef, 0x24, 0xd1, 0xfd, 0xcb, 0x1b,
+	0x4e, 0x2e, 0xeb, 0x0d, 0x68, 0x64, 0x9e, 0x5b, 0xe2, 0xbd, 0xb0, 0x71, 0x3c, 0xf8, 0x98, 0xde,
+	0x2d, 0xc9, 0x94, 0xf4, 0xc2, 0x55, 0x7b, 0x3d, 0x9c, 0xfa, 0x52, 0xdd, 0x7c, 0xa1, 0x72, 0x37,
+	0x7f, 0x06, 0x36, 0x67, 0xbb, 0x6d, 0xbd, 0x02, 0xb8, 0xc1, 0x32, 0x5d, 0xb6, 0xb0, 0x7f, 0xad,
+	0xde, 0xb9, 0x7f, 0x81, 0xea, 0xfd, 0xeb, 0x0c, 0xe8, 0x23, 0x8a, 0xc4, 0x4b, 0x6f, 0x4a, 0xce,
+	0x5a, 0x05, 0x82, 0x2d, 0x89, 0x53, 0x8a, 0x7a, 0xa0, 0x91, 0x2d, 0xe3, 0x8b, 0x95, 0x1a, 0xd1,
+	0x1a, 0x9a, 0x2a, 0xdf, 0xaf, 0x12, 0x8e, 0x49, 0xd5, 0x5e, 0xba, 0x53, 0xdf, 0x89, 0xb9, 0x55,
+	0xb5, 0xfe, 0x19, 0xec, 0xe4, 0x27, 0xf1, 0x72, 0x79, 0x12, 0x6b, 0x76, 0x93, 0xe5, 0x24, 0xef,
+	0x6b, 0xd0, 0xcc, 0x4b, 0xd9, 0x95, 0x7b, 0x4d, 0x59, 0xcd, 0xde, 0x66, 0xb3, 0x93, 0x3d, 0x00,
+	0x56, 0xe4, 0x46, 0xf5, 0xb6, 0xc0, 0x46, 0x36, 0x8a, 0x0e, 0x7c, 0xdf, 0xfd, 0x15, 0x7c, 0x3e,
+	0xf1, 0x99, 0x8e, 0x42, 0x9f, 0x99, 0x23, 0x12, 0x58, 0xd9, 0x87, 0xfc, 0xc9, 0x28, 0x62, 0x9c,
+	0x04, 0x88, 0x32, 0xeb, 0x46, 0x0e, 0xdf, 0x5a, 0x99, 0x54, 0x65, 0xd6, 0x4d, 0x36, 0xef, 0xdf,
+	0xf6, 0x9a, 0x60, 0x7b, 0xee, 0xa9, 0x10, 0x4f, 0xce, 0x75, 0xdf, 0x5e, 0x0b, 0x3c, 0x2c, 0x68,
+	0x60, 0xf1, 0x52, 0x41, 0xad, 0x17, 0x4b, 0xf9, 0x65, 0xb1, 0xf7, 0xbf, 0x06, 0x9e, 0x8c, 0x48,
+	0x50, 0xfe, 0xc0, 0xea, 0xe9, 0xb3, 0x55, 0x80, 0x93, 0x0b, 0xed, 0xd5, 0x59, 0x0a, 0xf4, 0xc8,
+	0x18, 0x62, 0xcf, 0x24, 0xd4, 0xb3, 0x3c, 0x84, 0xc5, 0xb1, 0x5b, 0x93, 0x9d, 0xba, 0xe5, 0x1f,
+	0xf4, 0x5b, 0x35, 0xfa, 0xbb, 0xb6, 0xf0, 0xa2, 0xdb, 0xfd, 0xa7, 0xf6, 0xf8, 0x45, 0x42, 0xd9,
+	0x75, 0x99, 0x99, 0x0c, 0xe3, 0xd1, 0xa0, 0x6d, 0xda, 0xd2, 0xf2, 0x3f, 0x69, 0x73, 0xd5, 0x75,
+	0xd9, 0x95, 0xb2, 0xb9, 0x1a, 0xb4, 0xaf, 0x94, 0xcd, 0xfb, 0xda, 0x93, 0x64, 0xa1, 0xd3, 0xe9,
+	0xba, 0xac, 0xd3, 0x51, 0x56, 0x9d, 0xce, 0xa0, 0xdd, 0xe9, 0x28, 0xbb, 0xe1, 0x92, 0x08, 0xb6,
+	0xfd, 0x21, 0x00, 0x00, 0xff, 0xff, 0x51, 0xdf, 0xb3, 0x5b, 0x2f, 0x0f, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/account_budget_proposal.pb.go b/googleapis/ads/googleads/v3/resources/account_budget_proposal.pb.go
new file mode 100644
index 0000000..24fffdc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/account_budget_proposal.pb.go
@@ -0,0 +1,486 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/account_budget_proposal.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An account-level budget proposal.
+//
+// All fields prefixed with 'proposed' may not necessarily be applied directly.
+// For example, proposed spending limits may be adjusted before their
+// application.  This is true if the 'proposed' field has an 'approved'
+// counterpart, e.g. spending limits.
+//
+// Please note that the proposal type (proposal_type) changes which fields are
+// required and which must remain empty.
+type AccountBudgetProposal struct {
+	// The resource name of the proposal.
+	// AccountBudgetProposal resource names have the form:
+	//
+	// `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the proposal.
+	Id *wrappers.Int64Value `protobuf:"bytes,14,opt,name=id,proto3" json:"id,omitempty"`
+	// The resource name of the billing setup associated with this proposal.
+	BillingSetup *wrappers.StringValue `protobuf:"bytes,2,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The resource name of the account-level budget associated with this
+	// proposal.
+	AccountBudget *wrappers.StringValue `protobuf:"bytes,3,opt,name=account_budget,json=accountBudget,proto3" json:"account_budget,omitempty"`
+	// The type of this proposal, e.g. END to end the budget associated with this
+	// proposal.
+	ProposalType enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType `protobuf:"varint,4,opt,name=proposal_type,json=proposalType,proto3,enum=google.ads.googleads.v3.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType" json:"proposal_type,omitempty"`
+	// The status of this proposal.
+	// When a new proposal is created, the status defaults to PENDING.
+	Status enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus `protobuf:"varint,15,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus" json:"status,omitempty"`
+	// The name to assign to the account-level budget.
+	ProposedName *wrappers.StringValue `protobuf:"bytes,5,opt,name=proposed_name,json=proposedName,proto3" json:"proposed_name,omitempty"`
+	// The approved start date time in yyyy-mm-dd hh:mm:ss format.
+	ApprovedStartDateTime *wrappers.StringValue `protobuf:"bytes,20,opt,name=approved_start_date_time,json=approvedStartDateTime,proto3" json:"approved_start_date_time,omitempty"`
+	// A purchase order number is a value that enables the user to help them
+	// reference this budget in their monthly invoices.
+	ProposedPurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,12,opt,name=proposed_purchase_order_number,json=proposedPurchaseOrderNumber,proto3" json:"proposed_purchase_order_number,omitempty"`
+	// Notes associated with this budget.
+	ProposedNotes *wrappers.StringValue `protobuf:"bytes,13,opt,name=proposed_notes,json=proposedNotes,proto3" json:"proposed_notes,omitempty"`
+	// The date time when this account-level budget proposal was created, which is
+	// not the same as its approval date time, if applicable.
+	CreationDateTime *wrappers.StringValue `protobuf:"bytes,16,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
+	// The date time when this account-level budget was approved, if applicable.
+	ApprovalDateTime *wrappers.StringValue `protobuf:"bytes,17,opt,name=approval_date_time,json=approvalDateTime,proto3" json:"approval_date_time,omitempty"`
+	// The proposed start date time of the account-level budget, which cannot be
+	// in the past.
+	//
+	// Types that are valid to be assigned to ProposedStartTime:
+	//	*AccountBudgetProposal_ProposedStartDateTime
+	//	*AccountBudgetProposal_ProposedStartTimeType
+	ProposedStartTime isAccountBudgetProposal_ProposedStartTime `protobuf_oneof:"proposed_start_time"`
+	// The proposed end date time of the account-level budget, which cannot be in
+	// the past.
+	//
+	// Types that are valid to be assigned to ProposedEndTime:
+	//	*AccountBudgetProposal_ProposedEndDateTime
+	//	*AccountBudgetProposal_ProposedEndTimeType
+	ProposedEndTime isAccountBudgetProposal_ProposedEndTime `protobuf_oneof:"proposed_end_time"`
+	// The approved end date time of the account-level budget.
+	//
+	// Types that are valid to be assigned to ApprovedEndTime:
+	//	*AccountBudgetProposal_ApprovedEndDateTime
+	//	*AccountBudgetProposal_ApprovedEndTimeType
+	ApprovedEndTime isAccountBudgetProposal_ApprovedEndTime `protobuf_oneof:"approved_end_time"`
+	// The proposed spending limit.
+	//
+	// Types that are valid to be assigned to ProposedSpendingLimit:
+	//	*AccountBudgetProposal_ProposedSpendingLimitMicros
+	//	*AccountBudgetProposal_ProposedSpendingLimitType
+	ProposedSpendingLimit isAccountBudgetProposal_ProposedSpendingLimit `protobuf_oneof:"proposed_spending_limit"`
+	// The approved spending limit.
+	//
+	// Types that are valid to be assigned to ApprovedSpendingLimit:
+	//	*AccountBudgetProposal_ApprovedSpendingLimitMicros
+	//	*AccountBudgetProposal_ApprovedSpendingLimitType
+	ApprovedSpendingLimit isAccountBudgetProposal_ApprovedSpendingLimit `protobuf_oneof:"approved_spending_limit"`
+	XXX_NoUnkeyedLiteral  struct{}                                      `json:"-"`
+	XXX_unrecognized      []byte                                        `json:"-"`
+	XXX_sizecache         int32                                         `json:"-"`
+}
+
+func (m *AccountBudgetProposal) Reset()         { *m = AccountBudgetProposal{} }
+func (m *AccountBudgetProposal) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposal) ProtoMessage()    {}
+func (*AccountBudgetProposal) Descriptor() ([]byte, []int) {
+	return fileDescriptor_97474d5a9610a949, []int{0}
+}
+
+func (m *AccountBudgetProposal) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposal.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposal.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetProposal) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposal.Merge(m, src)
+}
+func (m *AccountBudgetProposal) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposal.Size(m)
+}
+func (m *AccountBudgetProposal) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposal.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposal proto.InternalMessageInfo
+
+func (m *AccountBudgetProposal) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AccountBudgetProposal) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetBillingSetup() *wrappers.StringValue {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetAccountBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudget
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposalType() enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType {
+	if m != nil {
+		return m.ProposalType
+	}
+	return enums.AccountBudgetProposalTypeEnum_UNSPECIFIED
+}
+
+func (m *AccountBudgetProposal) GetStatus() enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AccountBudgetProposalStatusEnum_UNSPECIFIED
+}
+
+func (m *AccountBudgetProposal) GetProposedName() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedName
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedPurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedNotes
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetCreationDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovalDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovalDateTime
+	}
+	return nil
+}
+
+type isAccountBudgetProposal_ProposedStartTime interface {
+	isAccountBudgetProposal_ProposedStartTime()
+}
+
+type AccountBudgetProposal_ProposedStartDateTime struct {
+	ProposedStartDateTime *wrappers.StringValue `protobuf:"bytes,18,opt,name=proposed_start_date_time,json=proposedStartDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedStartTimeType struct {
+	ProposedStartTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,7,opt,name=proposed_start_time_type,json=proposedStartTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedStartDateTime) isAccountBudgetProposal_ProposedStartTime() {}
+
+func (*AccountBudgetProposal_ProposedStartTimeType) isAccountBudgetProposal_ProposedStartTime() {}
+
+func (m *AccountBudgetProposal) GetProposedStartTime() isAccountBudgetProposal_ProposedStartTime {
+	if m != nil {
+		return m.ProposedStartTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedStartDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedStartTime().(*AccountBudgetProposal_ProposedStartDateTime); ok {
+		return x.ProposedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedStartTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedStartTime().(*AccountBudgetProposal_ProposedStartTimeType); ok {
+		return x.ProposedStartTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ProposedEndTime interface {
+	isAccountBudgetProposal_ProposedEndTime()
+}
+
+type AccountBudgetProposal_ProposedEndDateTime struct {
+	ProposedEndDateTime *wrappers.StringValue `protobuf:"bytes,19,opt,name=proposed_end_date_time,json=proposedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedEndTimeType struct {
+	ProposedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,9,opt,name=proposed_end_time_type,json=proposedEndTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedEndDateTime) isAccountBudgetProposal_ProposedEndTime() {}
+
+func (*AccountBudgetProposal_ProposedEndTimeType) isAccountBudgetProposal_ProposedEndTime() {}
+
+func (m *AccountBudgetProposal) GetProposedEndTime() isAccountBudgetProposal_ProposedEndTime {
+	if m != nil {
+		return m.ProposedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedEndTime().(*AccountBudgetProposal_ProposedEndDateTime); ok {
+		return x.ProposedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedEndTime().(*AccountBudgetProposal_ProposedEndTimeType); ok {
+		return x.ProposedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ApprovedEndTime interface {
+	isAccountBudgetProposal_ApprovedEndTime()
+}
+
+type AccountBudgetProposal_ApprovedEndDateTime struct {
+	ApprovedEndDateTime *wrappers.StringValue `protobuf:"bytes,21,opt,name=approved_end_date_time,json=approvedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ApprovedEndTimeType struct {
+	ApprovedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,22,opt,name=approved_end_time_type,json=approvedEndTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ApprovedEndDateTime) isAccountBudgetProposal_ApprovedEndTime() {}
+
+func (*AccountBudgetProposal_ApprovedEndTimeType) isAccountBudgetProposal_ApprovedEndTime() {}
+
+func (m *AccountBudgetProposal) GetApprovedEndTime() isAccountBudgetProposal_ApprovedEndTime {
+	if m != nil {
+		return m.ApprovedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudgetProposal_ApprovedEndDateTime); ok {
+		return x.ApprovedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudgetProposal_ApprovedEndTimeType); ok {
+		return x.ApprovedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ProposedSpendingLimit interface {
+	isAccountBudgetProposal_ProposedSpendingLimit()
+}
+
+type AccountBudgetProposal_ProposedSpendingLimitMicros struct {
+	ProposedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,10,opt,name=proposed_spending_limit_micros,json=proposedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedSpendingLimitType struct {
+	ProposedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,11,opt,name=proposed_spending_limit_type,json=proposedSpendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedSpendingLimitMicros) isAccountBudgetProposal_ProposedSpendingLimit() {
+}
+
+func (*AccountBudgetProposal_ProposedSpendingLimitType) isAccountBudgetProposal_ProposedSpendingLimit() {
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimit() isAccountBudgetProposal_ProposedSpendingLimit {
+	if m != nil {
+		return m.ProposedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudgetProposal_ProposedSpendingLimitMicros); ok {
+		return x.ProposedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudgetProposal_ProposedSpendingLimitType); ok {
+		return x.ProposedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ApprovedSpendingLimit interface {
+	isAccountBudgetProposal_ApprovedSpendingLimit()
+}
+
+type AccountBudgetProposal_ApprovedSpendingLimitMicros struct {
+	ApprovedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,23,opt,name=approved_spending_limit_micros,json=approvedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ApprovedSpendingLimitType struct {
+	ApprovedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,24,opt,name=approved_spending_limit_type,json=approvedSpendingLimitType,proto3,enum=google.ads.googleads.v3.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudgetProposal_ApprovedSpendingLimitMicros) isAccountBudgetProposal_ApprovedSpendingLimit() {
+}
+
+func (*AccountBudgetProposal_ApprovedSpendingLimitType) isAccountBudgetProposal_ApprovedSpendingLimit() {
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimit() isAccountBudgetProposal_ApprovedSpendingLimit {
+	if m != nil {
+		return m.ApprovedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudgetProposal_ApprovedSpendingLimitMicros); ok {
+		return x.ApprovedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudgetProposal_ApprovedSpendingLimitType); ok {
+		return x.ApprovedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AccountBudgetProposal) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AccountBudgetProposal_ProposedStartDateTime)(nil),
+		(*AccountBudgetProposal_ProposedStartTimeType)(nil),
+		(*AccountBudgetProposal_ProposedEndDateTime)(nil),
+		(*AccountBudgetProposal_ProposedEndTimeType)(nil),
+		(*AccountBudgetProposal_ApprovedEndDateTime)(nil),
+		(*AccountBudgetProposal_ApprovedEndTimeType)(nil),
+		(*AccountBudgetProposal_ProposedSpendingLimitMicros)(nil),
+		(*AccountBudgetProposal_ProposedSpendingLimitType)(nil),
+		(*AccountBudgetProposal_ApprovedSpendingLimitMicros)(nil),
+		(*AccountBudgetProposal_ApprovedSpendingLimitType)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*AccountBudgetProposal)(nil), "google.ads.googleads.v3.resources.AccountBudgetProposal")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/account_budget_proposal.proto", fileDescriptor_97474d5a9610a949)
+}
+
+var fileDescriptor_97474d5a9610a949 = []byte{
+	// 886 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdf, 0x6e, 0xdc, 0x44,
+	0x14, 0xc6, 0x59, 0x27, 0x14, 0x75, 0x9a, 0x0d, 0x8d, 0x97, 0x6d, 0x9d, 0x3f, 0xaa, 0x52, 0x50,
+	0xa5, 0x48, 0x08, 0x5b, 0xea, 0x56, 0x20, 0x99, 0x0b, 0xf0, 0x42, 0x68, 0x88, 0xa0, 0x44, 0xde,
+	0xb2, 0x48, 0x55, 0x24, 0x6b, 0xd6, 0x1e, 0x8c, 0x85, 0x3d, 0x63, 0xcd, 0x8c, 0x53, 0x95, 0xa8,
+	0xd7, 0x88, 0xd7, 0xe0, 0x92, 0x47, 0xe1, 0x1d, 0x78, 0x81, 0x3e, 0x05, 0x9a, 0xb1, 0x67, 0xd6,
+	0xce, 0xda, 0x59, 0xab, 0xe9, 0xdd, 0xac, 0xcf, 0xf9, 0xbe, 0x33, 0xbf, 0x39, 0x67, 0xbc, 0x06,
+	0x5f, 0xc5, 0x84, 0xc4, 0x29, 0x72, 0x60, 0xc4, 0x9c, 0x72, 0x29, 0x56, 0x17, 0x13, 0x87, 0x22,
+	0x46, 0x0a, 0x1a, 0x22, 0xe6, 0xc0, 0x30, 0x24, 0x05, 0xe6, 0xc1, 0xa2, 0x88, 0x62, 0xc4, 0x83,
+	0x9c, 0x92, 0x9c, 0x30, 0x98, 0xda, 0x39, 0x25, 0x9c, 0x98, 0x0f, 0x4b, 0x95, 0x0d, 0x23, 0x66,
+	0x6b, 0x03, 0xfb, 0x62, 0x62, 0x6b, 0x83, 0xbd, 0x69, 0x57, 0x0d, 0x84, 0x8b, 0xac, 0xd3, 0x3f,
+	0x60, 0x1c, 0xf2, 0x82, 0x95, 0x65, 0xf6, 0xbe, 0x7e, 0x3b, 0x0f, 0xfe, 0x2a, 0x47, 0x95, 0xc3,
+	0x17, 0xd7, 0x3b, 0xb0, 0x1c, 0xe1, 0x28, 0xc1, 0x71, 0x90, 0x26, 0x59, 0xc2, 0xeb, 0xc2, 0xcf,
+	0xae, 0x17, 0xf2, 0x24, 0x43, 0xf5, 0xf4, 0x5d, 0x95, 0x9e, 0x27, 0xfa, 0x10, 0xab, 0xd0, 0x83,
+	0x2a, 0x24, 0x7f, 0x2d, 0x8a, 0x5f, 0x9d, 0x97, 0x14, 0xe6, 0x39, 0xa2, 0x0a, 0xf2, 0xa0, 0x26,
+	0x85, 0x18, 0x13, 0x0e, 0x79, 0x42, 0x70, 0x15, 0xfd, 0xf8, 0xbf, 0x1d, 0x30, 0xf6, 0x4a, 0xce,
+	0xa9, 0xc4, 0x3c, 0xab, 0x28, 0xcd, 0x4f, 0xc0, 0x50, 0x55, 0x0a, 0x30, 0xcc, 0x90, 0x35, 0x38,
+	0x1c, 0x1c, 0xdd, 0xf6, 0xb7, 0xd4, 0xc3, 0x67, 0x30, 0x43, 0xe6, 0xa7, 0xc0, 0x48, 0x22, 0x6b,
+	0xfb, 0x70, 0x70, 0x74, 0xe7, 0xf1, 0x7e, 0xd5, 0x2a, 0x5b, 0xed, 0xc4, 0xfe, 0x1e, 0xf3, 0xcf,
+	0x9f, 0xcc, 0x61, 0x5a, 0x20, 0xdf, 0x48, 0x22, 0xd3, 0x03, 0xc3, 0x45, 0x92, 0xa6, 0xe2, 0x3c,
+	0x18, 0xe2, 0x45, 0x6e, 0x19, 0x52, 0x77, 0xb0, 0xa2, 0x9b, 0x71, 0x9a, 0xe0, 0xb8, 0x14, 0x6e,
+	0x55, 0x92, 0x99, 0x50, 0x98, 0xdf, 0x80, 0xed, 0x66, 0x57, 0xac, 0x8d, 0x1e, 0x1e, 0x43, 0x58,
+	0x27, 0x34, 0x2f, 0xc1, 0xb0, 0xd1, 0x4b, 0x6b, 0xf3, 0x70, 0x70, 0xb4, 0xfd, 0x78, 0x6e, 0x77,
+	0x4d, 0x9d, 0xec, 0x89, 0xdd, 0x7a, 0x4c, 0xcf, 0x5f, 0xe5, 0xe8, 0x18, 0x17, 0x59, 0x77, 0xd4,
+	0xdf, 0xca, 0x6b, 0xbf, 0x4c, 0x0a, 0x6e, 0x95, 0x33, 0x68, 0x7d, 0x28, 0xab, 0xbe, 0x78, 0x9b,
+	0xaa, 0x33, 0xe9, 0xd0, 0x5d, 0xb7, 0x8c, 0xfb, 0x55, 0x25, 0x71, 0xf0, 0xe5, 0x1e, 0x50, 0x54,
+	0xb6, 0xf2, 0xfd, 0x3e, 0x07, 0xaf, 0x24, 0xb2, 0xd1, 0x3f, 0x03, 0x0b, 0xe6, 0x39, 0x25, 0x17,
+	0x28, 0x12, 0x77, 0x88, 0xf2, 0x20, 0x82, 0x1c, 0x05, 0x62, 0x4e, 0xad, 0x8f, 0x7a, 0xb8, 0x8d,
+	0x95, 0x7a, 0x26, 0xc4, 0xdf, 0x42, 0x8e, 0x9e, 0x27, 0x19, 0x32, 0x21, 0x78, 0xa0, 0x77, 0x96,
+	0x17, 0x34, 0xfc, 0x0d, 0x32, 0x14, 0x10, 0x1a, 0x21, 0x1a, 0xe0, 0x22, 0x5b, 0x20, 0x6a, 0x6d,
+	0xf5, 0x30, 0xdf, 0x57, 0x1e, 0x67, 0x95, 0xc5, 0x4f, 0xc2, 0xe1, 0x99, 0x34, 0x10, 0x23, 0xb3,
+	0x84, 0x27, 0x1c, 0x31, 0x6b, 0xd8, 0x67, 0x64, 0x34, 0xbd, 0x90, 0x98, 0xa7, 0xc0, 0x0c, 0x29,
+	0x92, 0x37, 0xa7, 0x06, 0x7e, 0xb7, 0x87, 0xd1, 0x5d, 0xa5, 0xd3, 0xcc, 0xa7, 0xc0, 0x2c, 0x0f,
+	0x03, 0xa6, 0x35, 0xaf, 0x9d, 0x3e, 0x5e, 0x4a, 0xa7, 0xbd, 0x7e, 0x01, 0x96, 0x86, 0xbb, 0xda,
+	0x16, 0x73, 0xbd, 0xe3, 0xc9, 0x7b, 0xfe, 0x58, 0xe9, 0x9b, 0x8d, 0x21, 0x2b, 0xc6, 0xfa, 0x95,
+	0x64, 0x7d, 0x20, 0x07, 0xf7, 0xc9, 0x9a, 0xc1, 0x15, 0x36, 0xfa, 0x76, 0xa8, 0x1f, 0x2b, 0x05,
+	0x55, 0xc0, 0x9c, 0x81, 0x7b, 0xba, 0x20, 0xc2, 0x51, 0x8d, 0x63, 0xd4, 0x83, 0x63, 0xe0, 0x8f,
+	0x94, 0xfa, 0x18, 0x47, 0x9a, 0xe2, 0xf7, 0x2b, 0xa6, 0x4b, 0x86, 0xdb, 0x37, 0x60, 0x68, 0x16,
+	0xab, 0x13, 0xe8, 0x2b, 0xd2, 0x24, 0x18, 0xf7, 0x20, 0x30, 0xfc, 0x91, 0x52, 0x5f, 0x21, 0x68,
+	0x98, 0x2e, 0x09, 0xee, 0xdd, 0x80, 0xa0, 0x59, 0x4c, 0x13, 0x2c, 0x6a, 0xb7, 0xf1, 0xca, 0x5f,
+	0x57, 0x96, 0x84, 0x94, 0x30, 0x0b, 0xac, 0x7d, 0xd3, 0x9f, 0x6c, 0x2c, 0xaf, 0xe3, 0xac, 0xf2,
+	0xf8, 0x41, 0x58, 0xfc, 0x28, 0x1d, 0xcc, 0xbf, 0x06, 0xe0, 0xa0, 0xab, 0x88, 0xe4, 0xba, 0x23,
+	0xb9, 0xbe, 0x5b, 0xc3, 0xd5, 0xb0, 0xd6, 0x80, 0x2b, 0x4f, 0x4f, 0x36, 0xfc, 0xdd, 0xd6, 0xdd,
+	0x28, 0xde, 0xe5, 0x4b, 0xad, 0x95, 0xf7, 0xfe, 0x7a, 0xde, 0x4d, 0x7f, 0x5f, 0xbf, 0xdb, 0x3a,
+	0x78, 0xbb, 0x8a, 0x48, 0x5e, 0xeb, 0x9d, 0xf2, 0x6e, 0xfa, 0xbb, 0xad, 0xbb, 0x11, 0x41, 0xf7,
+	0x8f, 0x37, 0xde, 0x4b, 0x50, 0x73, 0xaf, 0x56, 0x79, 0xc2, 0xec, 0x90, 0x64, 0x4e, 0xfb, 0x77,
+	0xc0, 0x71, 0x58, 0x30, 0x4e, 0x32, 0x44, 0x99, 0x73, 0xa9, 0x96, 0xaf, 0x1d, 0xd8, 0x96, 0xcb,
+	0x9c, 0xcb, 0x8e, 0x6f, 0xa6, 0xd7, 0xd3, 0x31, 0x18, 0xb5, 0xbc, 0x50, 0xa6, 0x23, 0xb0, 0xb3,
+	0x72, 0x43, 0xc5, 0xc3, 0x95, 0xa1, 0x9f, 0xee, 0x82, 0xfb, 0x1d, 0x73, 0x23, 0x42, 0x1d, 0x47,
+	0x3c, 0xfd, 0xd3, 0x00, 0x8f, 0x42, 0x92, 0xd9, 0x6b, 0x3f, 0x28, 0xa7, 0x7b, 0xad, 0xf8, 0x67,
+	0xa2, 0xe3, 0x67, 0x83, 0x17, 0xa7, 0x95, 0x41, 0x4c, 0x52, 0x88, 0x63, 0x9b, 0xd0, 0xd8, 0x89,
+	0x11, 0x96, 0xf3, 0xe0, 0x2c, 0x8f, 0xf1, 0x9a, 0x2f, 0xde, 0x2f, 0xf5, 0xea, 0x6f, 0x63, 0xe3,
+	0xa9, 0xe7, 0xfd, 0x63, 0x3c, 0x7c, 0x5a, 0x5a, 0x7a, 0x11, 0xb3, 0xcb, 0xa5, 0x58, 0xcd, 0x27,
+	0xb6, 0xaf, 0x32, 0xff, 0x55, 0x39, 0xe7, 0x5e, 0xc4, 0xce, 0x75, 0xce, 0xf9, 0x7c, 0x72, 0xae,
+	0x73, 0xde, 0x18, 0x8f, 0xca, 0x80, 0xeb, 0x7a, 0x11, 0x73, 0x5d, 0x9d, 0xe5, 0xba, 0xf3, 0x89,
+	0xeb, 0xea, 0xbc, 0xc5, 0x2d, 0xb9, 0xd9, 0xc9, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x38, 0xa1,
+	0xad, 0x73, 0x9d, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad.pb.go b/googleapis/ads/googleads/v3/resources/ad.pb.go
new file mode 100644
index 0000000..5e47fd0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad.pb.go
@@ -0,0 +1,595 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad.
+type Ad struct {
+	// The resource name of the ad.
+	// Ad resource names have the form:
+	//
+	// `customers/{customer_id}/ads/{ad_id}`
+	ResourceName string `protobuf:"bytes,37,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the ad.
+	Id *wrappers.Int64Value `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The list of possible final URLs after all cross-domain redirects for the
+	// ad.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,2,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// A list of final app URLs that will be used on mobile if the user has the
+	// specific app installed.
+	FinalAppUrls []*common.FinalAppUrl `protobuf:"bytes,35,rep,name=final_app_urls,json=finalAppUrls,proto3" json:"final_app_urls,omitempty"`
+	// The list of possible final mobile URLs after all cross-domain redirects
+	// for the ad.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,16,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,12,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The suffix to use when constructing a final URL.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,38,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// The list of mappings that can be used to substitute custom parameter tags
+	// in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,10,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The URL that appears in the ad description for some ad formats.
+	DisplayUrl *wrappers.StringValue `protobuf:"bytes,4,opt,name=display_url,json=displayUrl,proto3" json:"display_url,omitempty"`
+	// The type of ad.
+	Type enums.AdTypeEnum_AdType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.AdTypeEnum_AdType" json:"type,omitempty"`
+	// Indicates if this ad was automatically added by Google Ads and not by a
+	// user. For example, this could happen when ads are automatically created as
+	// suggestions for new ads based on knowledge of how existing ads are
+	// performing.
+	AddedByGoogleAds *wrappers.BoolValue `protobuf:"bytes,19,opt,name=added_by_google_ads,json=addedByGoogleAds,proto3" json:"added_by_google_ads,omitempty"`
+	// The device preference for the ad. You can only specify a preference for
+	// mobile devices. When this preference is set the ad will be preferred over
+	// other ads when being displayed on a mobile device. The ad can still be
+	// displayed on other device types, e.g. if no other ads are available.
+	// If unspecified (no device preference), all devices are targeted.
+	// This is only supported by some ad types.
+	DevicePreference enums.DeviceEnum_Device `protobuf:"varint,20,opt,name=device_preference,json=devicePreference,proto3,enum=google.ads.googleads.v3.enums.DeviceEnum_Device" json:"device_preference,omitempty"`
+	// Additional URLs for the ad that are tagged with a unique identifier that
+	// can be referenced from other fields in the ad.
+	UrlCollections []*common.UrlCollection `protobuf:"bytes,26,rep,name=url_collections,json=urlCollections,proto3" json:"url_collections,omitempty"`
+	// The name of the ad. This is only used to be able to identify the ad. It
+	// does not need to be unique and does not affect the served ad.
+	Name *wrappers.StringValue `protobuf:"bytes,23,opt,name=name,proto3" json:"name,omitempty"`
+	// If this ad is system managed, then this field will indicate the source.
+	// This field is read-only.
+	SystemManagedResourceSource enums.SystemManagedResourceSourceEnum_SystemManagedResourceSource `protobuf:"varint,27,opt,name=system_managed_resource_source,json=systemManagedResourceSource,proto3,enum=google.ads.googleads.v3.enums.SystemManagedResourceSourceEnum_SystemManagedResourceSource" json:"system_managed_resource_source,omitempty"`
+	// Details pertinent to the ad type. Exactly one value must be set.
+	//
+	// Types that are valid to be assigned to AdData:
+	//	*Ad_TextAd
+	//	*Ad_ExpandedTextAd
+	//	*Ad_CallOnlyAd
+	//	*Ad_ExpandedDynamicSearchAd
+	//	*Ad_HotelAd
+	//	*Ad_ShoppingSmartAd
+	//	*Ad_ShoppingProductAd
+	//	*Ad_GmailAd
+	//	*Ad_ImageAd
+	//	*Ad_VideoAd
+	//	*Ad_ResponsiveSearchAd
+	//	*Ad_LegacyResponsiveDisplayAd
+	//	*Ad_AppAd
+	//	*Ad_LegacyAppInstallAd
+	//	*Ad_ResponsiveDisplayAd
+	//	*Ad_DisplayUploadAd
+	//	*Ad_AppEngagementAd
+	//	*Ad_ShoppingComparisonListingAd
+	AdData               isAd_AdData `protobuf_oneof:"ad_data"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *Ad) Reset()         { *m = Ad{} }
+func (m *Ad) String() string { return proto.CompactTextString(m) }
+func (*Ad) ProtoMessage()    {}
+func (*Ad) Descriptor() ([]byte, []int) {
+	return fileDescriptor_65b02bf52a660238, []int{0}
+}
+
+func (m *Ad) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Ad.Unmarshal(m, b)
+}
+func (m *Ad) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Ad.Marshal(b, m, deterministic)
+}
+func (m *Ad) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Ad.Merge(m, src)
+}
+func (m *Ad) XXX_Size() int {
+	return xxx_messageInfo_Ad.Size(m)
+}
+func (m *Ad) XXX_DiscardUnknown() {
+	xxx_messageInfo_Ad.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Ad proto.InternalMessageInfo
+
+func (m *Ad) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Ad) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalAppUrls() []*common.FinalAppUrl {
+	if m != nil {
+		return m.FinalAppUrls
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *Ad) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *Ad) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *Ad) GetDisplayUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.DisplayUrl
+	}
+	return nil
+}
+
+func (m *Ad) GetType() enums.AdTypeEnum_AdType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AdTypeEnum_UNSPECIFIED
+}
+
+func (m *Ad) GetAddedByGoogleAds() *wrappers.BoolValue {
+	if m != nil {
+		return m.AddedByGoogleAds
+	}
+	return nil
+}
+
+func (m *Ad) GetDevicePreference() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.DevicePreference
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+func (m *Ad) GetUrlCollections() []*common.UrlCollection {
+	if m != nil {
+		return m.UrlCollections
+	}
+	return nil
+}
+
+func (m *Ad) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Ad) GetSystemManagedResourceSource() enums.SystemManagedResourceSourceEnum_SystemManagedResourceSource {
+	if m != nil {
+		return m.SystemManagedResourceSource
+	}
+	return enums.SystemManagedResourceSourceEnum_UNSPECIFIED
+}
+
+type isAd_AdData interface {
+	isAd_AdData()
+}
+
+type Ad_TextAd struct {
+	TextAd *common.TextAdInfo `protobuf:"bytes,6,opt,name=text_ad,json=textAd,proto3,oneof"`
+}
+
+type Ad_ExpandedTextAd struct {
+	ExpandedTextAd *common.ExpandedTextAdInfo `protobuf:"bytes,7,opt,name=expanded_text_ad,json=expandedTextAd,proto3,oneof"`
+}
+
+type Ad_CallOnlyAd struct {
+	CallOnlyAd *common.CallOnlyAdInfo `protobuf:"bytes,13,opt,name=call_only_ad,json=callOnlyAd,proto3,oneof"`
+}
+
+type Ad_ExpandedDynamicSearchAd struct {
+	ExpandedDynamicSearchAd *common.ExpandedDynamicSearchAdInfo `protobuf:"bytes,14,opt,name=expanded_dynamic_search_ad,json=expandedDynamicSearchAd,proto3,oneof"`
+}
+
+type Ad_HotelAd struct {
+	HotelAd *common.HotelAdInfo `protobuf:"bytes,15,opt,name=hotel_ad,json=hotelAd,proto3,oneof"`
+}
+
+type Ad_ShoppingSmartAd struct {
+	ShoppingSmartAd *common.ShoppingSmartAdInfo `protobuf:"bytes,17,opt,name=shopping_smart_ad,json=shoppingSmartAd,proto3,oneof"`
+}
+
+type Ad_ShoppingProductAd struct {
+	ShoppingProductAd *common.ShoppingProductAdInfo `protobuf:"bytes,18,opt,name=shopping_product_ad,json=shoppingProductAd,proto3,oneof"`
+}
+
+type Ad_GmailAd struct {
+	GmailAd *common.GmailAdInfo `protobuf:"bytes,21,opt,name=gmail_ad,json=gmailAd,proto3,oneof"`
+}
+
+type Ad_ImageAd struct {
+	ImageAd *common.ImageAdInfo `protobuf:"bytes,22,opt,name=image_ad,json=imageAd,proto3,oneof"`
+}
+
+type Ad_VideoAd struct {
+	VideoAd *common.VideoAdInfo `protobuf:"bytes,24,opt,name=video_ad,json=videoAd,proto3,oneof"`
+}
+
+type Ad_ResponsiveSearchAd struct {
+	ResponsiveSearchAd *common.ResponsiveSearchAdInfo `protobuf:"bytes,25,opt,name=responsive_search_ad,json=responsiveSearchAd,proto3,oneof"`
+}
+
+type Ad_LegacyResponsiveDisplayAd struct {
+	LegacyResponsiveDisplayAd *common.LegacyResponsiveDisplayAdInfo `protobuf:"bytes,28,opt,name=legacy_responsive_display_ad,json=legacyResponsiveDisplayAd,proto3,oneof"`
+}
+
+type Ad_AppAd struct {
+	AppAd *common.AppAdInfo `protobuf:"bytes,29,opt,name=app_ad,json=appAd,proto3,oneof"`
+}
+
+type Ad_LegacyAppInstallAd struct {
+	LegacyAppInstallAd *common.LegacyAppInstallAdInfo `protobuf:"bytes,30,opt,name=legacy_app_install_ad,json=legacyAppInstallAd,proto3,oneof"`
+}
+
+type Ad_ResponsiveDisplayAd struct {
+	ResponsiveDisplayAd *common.ResponsiveDisplayAdInfo `protobuf:"bytes,31,opt,name=responsive_display_ad,json=responsiveDisplayAd,proto3,oneof"`
+}
+
+type Ad_DisplayUploadAd struct {
+	DisplayUploadAd *common.DisplayUploadAdInfo `protobuf:"bytes,33,opt,name=display_upload_ad,json=displayUploadAd,proto3,oneof"`
+}
+
+type Ad_AppEngagementAd struct {
+	AppEngagementAd *common.AppEngagementAdInfo `protobuf:"bytes,34,opt,name=app_engagement_ad,json=appEngagementAd,proto3,oneof"`
+}
+
+type Ad_ShoppingComparisonListingAd struct {
+	ShoppingComparisonListingAd *common.ShoppingComparisonListingAdInfo `protobuf:"bytes,36,opt,name=shopping_comparison_listing_ad,json=shoppingComparisonListingAd,proto3,oneof"`
+}
+
+func (*Ad_TextAd) isAd_AdData() {}
+
+func (*Ad_ExpandedTextAd) isAd_AdData() {}
+
+func (*Ad_CallOnlyAd) isAd_AdData() {}
+
+func (*Ad_ExpandedDynamicSearchAd) isAd_AdData() {}
+
+func (*Ad_HotelAd) isAd_AdData() {}
+
+func (*Ad_ShoppingSmartAd) isAd_AdData() {}
+
+func (*Ad_ShoppingProductAd) isAd_AdData() {}
+
+func (*Ad_GmailAd) isAd_AdData() {}
+
+func (*Ad_ImageAd) isAd_AdData() {}
+
+func (*Ad_VideoAd) isAd_AdData() {}
+
+func (*Ad_ResponsiveSearchAd) isAd_AdData() {}
+
+func (*Ad_LegacyResponsiveDisplayAd) isAd_AdData() {}
+
+func (*Ad_AppAd) isAd_AdData() {}
+
+func (*Ad_LegacyAppInstallAd) isAd_AdData() {}
+
+func (*Ad_ResponsiveDisplayAd) isAd_AdData() {}
+
+func (*Ad_DisplayUploadAd) isAd_AdData() {}
+
+func (*Ad_AppEngagementAd) isAd_AdData() {}
+
+func (*Ad_ShoppingComparisonListingAd) isAd_AdData() {}
+
+func (m *Ad) GetAdData() isAd_AdData {
+	if m != nil {
+		return m.AdData
+	}
+	return nil
+}
+
+func (m *Ad) GetTextAd() *common.TextAdInfo {
+	if x, ok := m.GetAdData().(*Ad_TextAd); ok {
+		return x.TextAd
+	}
+	return nil
+}
+
+func (m *Ad) GetExpandedTextAd() *common.ExpandedTextAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ExpandedTextAd); ok {
+		return x.ExpandedTextAd
+	}
+	return nil
+}
+
+func (m *Ad) GetCallOnlyAd() *common.CallOnlyAdInfo {
+	if x, ok := m.GetAdData().(*Ad_CallOnlyAd); ok {
+		return x.CallOnlyAd
+	}
+	return nil
+}
+
+func (m *Ad) GetExpandedDynamicSearchAd() *common.ExpandedDynamicSearchAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ExpandedDynamicSearchAd); ok {
+		return x.ExpandedDynamicSearchAd
+	}
+	return nil
+}
+
+func (m *Ad) GetHotelAd() *common.HotelAdInfo {
+	if x, ok := m.GetAdData().(*Ad_HotelAd); ok {
+		return x.HotelAd
+	}
+	return nil
+}
+
+func (m *Ad) GetShoppingSmartAd() *common.ShoppingSmartAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ShoppingSmartAd); ok {
+		return x.ShoppingSmartAd
+	}
+	return nil
+}
+
+func (m *Ad) GetShoppingProductAd() *common.ShoppingProductAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ShoppingProductAd); ok {
+		return x.ShoppingProductAd
+	}
+	return nil
+}
+
+func (m *Ad) GetGmailAd() *common.GmailAdInfo {
+	if x, ok := m.GetAdData().(*Ad_GmailAd); ok {
+		return x.GmailAd
+	}
+	return nil
+}
+
+func (m *Ad) GetImageAd() *common.ImageAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ImageAd); ok {
+		return x.ImageAd
+	}
+	return nil
+}
+
+func (m *Ad) GetVideoAd() *common.VideoAdInfo {
+	if x, ok := m.GetAdData().(*Ad_VideoAd); ok {
+		return x.VideoAd
+	}
+	return nil
+}
+
+func (m *Ad) GetResponsiveSearchAd() *common.ResponsiveSearchAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ResponsiveSearchAd); ok {
+		return x.ResponsiveSearchAd
+	}
+	return nil
+}
+
+func (m *Ad) GetLegacyResponsiveDisplayAd() *common.LegacyResponsiveDisplayAdInfo {
+	if x, ok := m.GetAdData().(*Ad_LegacyResponsiveDisplayAd); ok {
+		return x.LegacyResponsiveDisplayAd
+	}
+	return nil
+}
+
+func (m *Ad) GetAppAd() *common.AppAdInfo {
+	if x, ok := m.GetAdData().(*Ad_AppAd); ok {
+		return x.AppAd
+	}
+	return nil
+}
+
+func (m *Ad) GetLegacyAppInstallAd() *common.LegacyAppInstallAdInfo {
+	if x, ok := m.GetAdData().(*Ad_LegacyAppInstallAd); ok {
+		return x.LegacyAppInstallAd
+	}
+	return nil
+}
+
+func (m *Ad) GetResponsiveDisplayAd() *common.ResponsiveDisplayAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ResponsiveDisplayAd); ok {
+		return x.ResponsiveDisplayAd
+	}
+	return nil
+}
+
+func (m *Ad) GetDisplayUploadAd() *common.DisplayUploadAdInfo {
+	if x, ok := m.GetAdData().(*Ad_DisplayUploadAd); ok {
+		return x.DisplayUploadAd
+	}
+	return nil
+}
+
+func (m *Ad) GetAppEngagementAd() *common.AppEngagementAdInfo {
+	if x, ok := m.GetAdData().(*Ad_AppEngagementAd); ok {
+		return x.AppEngagementAd
+	}
+	return nil
+}
+
+func (m *Ad) GetShoppingComparisonListingAd() *common.ShoppingComparisonListingAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ShoppingComparisonListingAd); ok {
+		return x.ShoppingComparisonListingAd
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Ad) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Ad_TextAd)(nil),
+		(*Ad_ExpandedTextAd)(nil),
+		(*Ad_CallOnlyAd)(nil),
+		(*Ad_ExpandedDynamicSearchAd)(nil),
+		(*Ad_HotelAd)(nil),
+		(*Ad_ShoppingSmartAd)(nil),
+		(*Ad_ShoppingProductAd)(nil),
+		(*Ad_GmailAd)(nil),
+		(*Ad_ImageAd)(nil),
+		(*Ad_VideoAd)(nil),
+		(*Ad_ResponsiveSearchAd)(nil),
+		(*Ad_LegacyResponsiveDisplayAd)(nil),
+		(*Ad_AppAd)(nil),
+		(*Ad_LegacyAppInstallAd)(nil),
+		(*Ad_ResponsiveDisplayAd)(nil),
+		(*Ad_DisplayUploadAd)(nil),
+		(*Ad_AppEngagementAd)(nil),
+		(*Ad_ShoppingComparisonListingAd)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*Ad)(nil), "google.ads.googleads.v3.resources.Ad")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad.proto", fileDescriptor_65b02bf52a660238)
+}
+
+var fileDescriptor_65b02bf52a660238 = []byte{
+	// 1293 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x97, 0xdd, 0x72, 0xd4, 0x36,
+	0x14, 0xc7, 0xbb, 0x01, 0x92, 0x22, 0x42, 0x3e, 0x14, 0x52, 0x4c, 0x12, 0x68, 0x80, 0xd2, 0x49,
+	0x61, 0xea, 0x65, 0xb2, 0x85, 0xce, 0x2c, 0x65, 0xa8, 0x43, 0x02, 0x49, 0x07, 0xda, 0x74, 0x97,
+	0xe4, 0x82, 0x49, 0xeb, 0x51, 0x2c, 0xad, 0xe3, 0x22, 0x4b, 0x1a, 0xc9, 0x4e, 0xb3, 0x65, 0x98,
+	0xe9, 0x55, 0x5f, 0x83, 0x99, 0x5e, 0xf6, 0x51, 0xfa, 0x28, 0x5c, 0xf7, 0x01, 0x3a, 0x92, 0x6c,
+	0x6d, 0x36, 0x61, 0x63, 0xdf, 0x24, 0xfa, 0x38, 0xff, 0xdf, 0xff, 0xe8, 0xc8, 0x92, 0xbd, 0xe0,
+	0x6e, 0xcc, 0x79, 0x4c, 0x49, 0x13, 0x61, 0xd5, 0xb4, 0x4d, 0xdd, 0x3a, 0x6c, 0x35, 0x25, 0x51,
+	0x3c, 0x97, 0x11, 0x51, 0x4d, 0x84, 0x7d, 0x21, 0x79, 0xc6, 0xe1, 0x4d, 0x1b, 0xe0, 0x23, 0xac,
+	0x7c, 0x17, 0xeb, 0x1f, 0xb6, 0x7c, 0x17, 0xbb, 0xb0, 0x3a, 0x0a, 0x17, 0xf1, 0x34, 0xe5, 0xac,
+	0x89, 0x70, 0x98, 0xf5, 0x05, 0x09, 0x13, 0xd6, 0xe3, 0xca, 0x62, 0x17, 0x1e, 0x54, 0x68, 0xa2,
+	0x5c, 0x65, 0x3c, 0x0d, 0x05, 0x92, 0x28, 0x25, 0x19, 0x91, 0x85, 0xac, 0xca, 0xaa, 0x97, 0x30,
+	0x44, 0x43, 0x24, 0x44, 0x98, 0x4b, 0x5a, 0x68, 0x5a, 0x15, 0x9a, 0x5c, 0xd2, 0x30, 0xe2, 0x94,
+	0x92, 0x28, 0x4b, 0x38, 0x2b, 0x44, 0xf7, 0x46, 0x89, 0x08, 0xcb, 0x53, 0x55, 0x2e, 0xa9, 0x08,
+	0xbe, 0x7b, 0x76, 0x30, 0x26, 0x87, 0x49, 0x54, 0xc6, 0x7e, 0x7f, 0x76, 0xac, 0xea, 0xab, 0x8c,
+	0xa4, 0x61, 0x8a, 0x18, 0x8a, 0x09, 0x0e, 0x09, 0xcb, 0x92, 0xac, 0x1f, 0xda, 0x4a, 0x17, 0x84,
+	0x6b, 0x25, 0x41, 0x24, 0x6e, 0xc3, 0x8a, 0xa9, 0x1b, 0xc5, 0x94, 0xe9, 0xed, 0xe7, 0xbd, 0xe6,
+	0xef, 0x12, 0x09, 0x41, 0x64, 0x59, 0xf5, 0xa5, 0x63, 0x52, 0xc4, 0x18, 0xcf, 0x90, 0x5e, 0x72,
+	0x31, 0x7b, 0xeb, 0xfd, 0x55, 0x30, 0x16, 0x60, 0x78, 0x1b, 0x5c, 0x2e, 0xb1, 0x21, 0x43, 0x29,
+	0xf1, 0xee, 0x2c, 0x37, 0x56, 0x2e, 0x76, 0x26, 0xcb, 0xc1, 0x1f, 0x51, 0x4a, 0xe0, 0x3d, 0x30,
+	0x96, 0x60, 0xaf, 0xb1, 0xdc, 0x58, 0xb9, 0xb4, 0xba, 0x58, 0x3c, 0x18, 0x7e, 0x69, 0xeb, 0x6f,
+	0xb1, 0xec, 0xe1, 0x37, 0xbb, 0x88, 0xe6, 0xa4, 0x33, 0x96, 0x60, 0xf8, 0x08, 0x00, 0xbb, 0x31,
+	0xb9, 0xa4, 0xca, 0x1b, 0x5b, 0x3e, 0xb7, 0x72, 0x69, 0x75, 0xe9, 0x94, 0xa8, 0x9b, 0xc9, 0x84,
+	0xc5, 0x56, 0x75, 0xd1, 0xc4, 0xef, 0x48, 0xaa, 0xe0, 0xcf, 0x60, 0x6a, 0x68, 0x57, 0x95, 0x77,
+	0xdb, 0x00, 0xee, 0xf9, 0xa3, 0x9e, 0x4c, 0xbb, 0xaf, 0xfe, 0x33, 0xad, 0x0a, 0x84, 0xd8, 0x91,
+	0xb4, 0x33, 0xd9, 0x1b, 0x74, 0x14, 0xdc, 0x04, 0xb3, 0x16, 0x99, 0xf2, 0xfd, 0x84, 0x12, 0x4b,
+	0x9d, 0xa9, 0x91, 0xd6, 0xb4, 0x91, 0xbd, 0x34, 0x2a, 0x43, 0xda, 0x06, 0xf3, 0x99, 0x44, 0xd1,
+	0x9b, 0x84, 0xc5, 0x9a, 0x12, 0x66, 0x24, 0x15, 0x14, 0x65, 0xc4, 0x9b, 0x34, 0x95, 0x39, 0x9b,
+	0x36, 0x57, 0x4a, 0x77, 0x24, 0x7d, 0x55, 0x08, 0xe1, 0x33, 0x30, 0xe3, 0x6a, 0x15, 0xaa, 0xbc,
+	0xd7, 0x4b, 0x8e, 0xbc, 0x2f, 0x6b, 0xc0, 0xa6, 0xca, 0x8a, 0x75, 0x8d, 0x06, 0x46, 0x60, 0xde,
+	0x3c, 0xd8, 0x27, 0xce, 0x91, 0xf2, 0x80, 0x59, 0x67, 0xb3, 0xaa, 0x7a, 0x4f, 0x8d, 0x70, 0xbb,
+	0xd4, 0x75, 0xe6, 0x72, 0x49, 0x4f, 0x8c, 0x29, 0xf8, 0x18, 0x5c, 0xc2, 0x89, 0x12, 0x14, 0xf5,
+	0x75, 0xba, 0xde, 0xf9, 0x1a, 0x79, 0x82, 0x42, 0xb0, 0x23, 0x29, 0x5c, 0x07, 0xe7, 0xf5, 0x29,
+	0xf2, 0x2e, 0x2c, 0x37, 0x56, 0xa6, 0x56, 0xef, 0x8f, 0x4c, 0xc9, 0x1c, 0x0d, 0x3f, 0xc0, 0xaf,
+	0xfa, 0x82, 0x6c, 0xb0, 0x3c, 0x2d, 0x9a, 0x1d, 0xa3, 0x86, 0x5b, 0x60, 0x0e, 0x61, 0x4c, 0x70,
+	0xb8, 0xdf, 0x0f, 0xad, 0x2c, 0x44, 0x58, 0x79, 0x73, 0x26, 0x99, 0x85, 0x53, 0xc9, 0xac, 0x71,
+	0x4e, 0x6d, 0x2a, 0x33, 0x46, 0xb6, 0xd6, 0x7f, 0x6e, 0x22, 0x02, 0xac, 0xe0, 0x2f, 0x60, 0xd6,
+	0x1e, 0xd6, 0x50, 0x48, 0xd2, 0x23, 0x92, 0xb0, 0x88, 0x78, 0x57, 0x6a, 0x65, 0xb7, 0x6e, 0x74,
+	0x26, 0x3b, 0xdb, 0xec, 0xcc, 0x58, 0xd4, 0xb6, 0x23, 0xc1, 0x5d, 0x30, 0x3d, 0x7c, 0xd9, 0x28,
+	0x6f, 0xc1, 0xec, 0xc6, 0xd7, 0x55, 0xbb, 0xb1, 0x23, 0xe9, 0x53, 0xa7, 0xea, 0x4c, 0xe5, 0xc7,
+	0xbb, 0x0a, 0xde, 0x07, 0xe7, 0xcd, 0x41, 0xbd, 0x5a, 0xa3, 0xfe, 0x26, 0x12, 0xbe, 0x6f, 0x80,
+	0x1b, 0x27, 0xae, 0x1a, 0x77, 0xe6, 0xed, 0x3f, 0x6f, 0xd1, 0x2c, 0xfb, 0x75, 0xc5, 0xb2, 0xbb,
+	0x06, 0xf2, 0xd2, 0x32, 0x3a, 0x05, 0xa2, 0x6b, 0xfe, 0x9a, 0x5a, 0x9c, 0x31, 0xdf, 0x59, 0x54,
+	0xa3, 0x27, 0xe1, 0x06, 0x98, 0xc8, 0xc8, 0x51, 0x16, 0x22, 0xec, 0x8d, 0x9b, 0x65, 0xdd, 0xad,
+	0xaa, 0xd1, 0x2b, 0x72, 0x94, 0x05, 0x78, 0x8b, 0xf5, 0xf8, 0xe6, 0x27, 0x9d, 0xf1, 0xcc, 0xf4,
+	0xe0, 0xaf, 0x60, 0x86, 0x1c, 0x09, 0xc4, 0xf4, 0xf3, 0x51, 0xf2, 0x26, 0x0c, 0x6f, 0xb5, 0x8a,
+	0xb7, 0x51, 0xe8, 0x86, 0xb8, 0x53, 0x64, 0x68, 0x14, 0x76, 0xc0, 0x64, 0x84, 0x28, 0x0d, 0x39,
+	0xa3, 0x7d, 0xcd, 0xbe, 0x6c, 0xd8, 0x7e, 0xe5, 0xe9, 0x42, 0x94, 0xfe, 0xc4, 0x68, 0xdf, 0x71,
+	0x41, 0xe4, 0x46, 0xe0, 0x1f, 0x60, 0xc1, 0xe5, 0x8c, 0xfb, 0x0c, 0xa5, 0x49, 0x14, 0x2a, 0x82,
+	0x64, 0x74, 0xa0, 0x1d, 0xa6, 0x8c, 0xc3, 0xa3, 0xba, 0xd9, 0xaf, 0x5b, 0x40, 0xd7, 0xe8, 0x9d,
+	0xdd, 0x55, 0xf2, 0xf1, 0x69, 0xb8, 0x09, 0x3e, 0x3d, 0xe0, 0x19, 0xa1, 0xda, 0x69, 0xda, 0x38,
+	0x55, 0xde, 0xb3, 0x9b, 0x3a, 0xde, 0x91, 0x27, 0x0e, 0x6c, 0x17, 0x22, 0x30, 0xab, 0x0e, 0xb8,
+	0x10, 0xfa, 0x6a, 0x54, 0x29, 0x92, 0xa6, 0xf4, 0xb3, 0x06, 0xd9, 0xaa, 0x42, 0x76, 0x0b, 0x61,
+	0x57, 0xeb, 0x1c, 0x7a, 0x5a, 0x0d, 0x0f, 0xc3, 0x18, 0xcc, 0x39, 0x0b, 0x21, 0x39, 0xce, 0x23,
+	0x63, 0x02, 0x8d, 0xc9, 0x83, 0xba, 0x26, 0xdb, 0x56, 0xe9, 0x6c, 0x5c, 0xda, 0x6e, 0x42, 0x57,
+	0x25, 0x4e, 0x51, 0x62, 0xaa, 0x32, 0x5f, 0xaf, 0x2a, 0xcf, 0x75, 0xfc, 0xa0, 0x2a, 0xb1, 0xed,
+	0x6a, 0x52, 0x92, 0xa2, 0x58, 0x5f, 0x51, 0xde, 0x67, 0xf5, 0x48, 0x5b, 0x3a, 0x7e, 0x40, 0x4a,
+	0x6c, 0x57, 0x93, 0x0e, 0x13, 0x4c, 0xb8, 0x26, 0x79, 0xf5, 0x48, 0xbb, 0x3a, 0x7e, 0x40, 0x3a,
+	0xb4, 0x5d, 0xf8, 0x1b, 0xb8, 0x22, 0x89, 0x12, 0x9c, 0xa9, 0xe4, 0x90, 0x1c, 0x7b, 0xd2, 0xae,
+	0x19, 0xea, 0xc3, 0x2a, 0x6a, 0xc7, 0x69, 0x4f, 0x3c, 0x64, 0x50, 0x9e, 0x9a, 0x81, 0x7f, 0x36,
+	0xc0, 0x12, 0x25, 0x31, 0x8a, 0xfa, 0xe1, 0x31, 0xcf, 0xf2, 0x25, 0x82, 0xb0, 0xb7, 0x64, 0x4c,
+	0x1f, 0x57, 0x99, 0xbe, 0x30, 0x8c, 0x81, 0xf5, 0xba, 0x25, 0x38, 0xef, 0x6b, 0x74, 0x54, 0x00,
+	0x5c, 0x03, 0xe3, 0xfa, 0x53, 0x02, 0x61, 0xef, 0xba, 0xf1, 0xfa, 0xaa, 0xca, 0x2b, 0x10, 0xc2,
+	0x71, 0x2f, 0x20, 0xdd, 0x81, 0x6f, 0xc0, 0x7c, 0xb1, 0x0a, 0x8d, 0x4a, 0x98, 0xca, 0xf4, 0x25,
+	0x80, 0xb0, 0x77, 0xa3, 0x5e, 0xcd, 0x6c, 0xfa, 0x81, 0x10, 0x5b, 0x56, 0x3a, 0xa8, 0x19, 0x3d,
+	0x35, 0x03, 0x53, 0x30, 0xff, 0xf1, 0x5a, 0x7d, 0x6e, 0xcc, 0xbe, 0xad, 0xbf, 0x41, 0x27, 0xab,
+	0x34, 0x27, 0x3f, 0x52, 0x1f, 0x04, 0x66, 0xdd, 0x4b, 0x5d, 0x50, 0x8e, 0xb0, 0xb6, 0xba, 0x59,
+	0xef, 0xe0, 0x16, 0x94, 0x1d, 0xa3, 0x1b, 0x1c, 0x5c, 0x3c, 0x3c, 0xac, 0x2d, 0x74, 0xdd, 0x08,
+	0x8b, 0x51, 0x4c, 0x52, 0xc2, 0xcc, 0xb1, 0xbd, 0x55, 0xcf, 0x22, 0x10, 0x62, 0xc3, 0xe9, 0x06,
+	0x16, 0x68, 0x78, 0x18, 0xfe, 0xa5, 0xdf, 0x70, 0xe5, 0xe5, 0x10, 0xf1, 0x54, 0x20, 0x99, 0x28,
+	0xce, 0x42, 0x9a, 0xa8, 0x4c, 0x0f, 0x21, 0xec, 0x7d, 0x61, 0x0c, 0x9f, 0xd4, 0xbd, 0x27, 0x9e,
+	0x3a, 0xc8, 0x0b, 0xcb, 0x70, 0xe6, 0x8b, 0x6a, 0x74, 0x48, 0xfb, 0xc9, 0x87, 0xe0, 0x3b, 0xb0,
+	0x38, 0x00, 0x17, 0x2d, 0x91, 0x28, 0x6d, 0xd0, 0x0c, 0x30, 0xbc, 0x6e, 0x3f, 0xd2, 0x88, 0x54,
+	0xcd, 0xb7, 0x65, 0xf3, 0x9d, 0xf9, 0x81, 0xf0, 0x16, 0xe1, 0x77, 0x6b, 0x17, 0xc1, 0x04, 0xc2,
+	0x21, 0x46, 0x19, 0x5a, 0xfb, 0xaf, 0x01, 0xee, 0x44, 0x3c, 0xf5, 0x2b, 0x7f, 0x93, 0xad, 0x4d,
+	0x04, 0x78, 0x5b, 0xbf, 0xfe, 0xb7, 0x1b, 0xaf, 0x7f, 0x28, 0xa2, 0x63, 0x4e, 0x11, 0x8b, 0x7d,
+	0x2e, 0xe3, 0x66, 0x4c, 0x98, 0xf9, 0x38, 0x68, 0x0e, 0x92, 0x39, 0xe3, 0xc7, 0xe0, 0x23, 0xd7,
+	0xfa, 0x7b, 0xec, 0xdc, 0xf3, 0x20, 0xf8, 0x67, 0xec, 0xa6, 0xfd, 0x64, 0xf2, 0x03, 0xac, 0x7c,
+	0xf7, 0xf5, 0xe4, 0xef, 0xb6, 0xfc, 0xf2, 0x25, 0xae, 0xfe, 0x2d, 0x63, 0xf6, 0x02, 0xac, 0xf6,
+	0x5c, 0xcc, 0xde, 0x6e, 0x6b, 0xcf, 0xc5, 0x7c, 0x18, 0xbb, 0x63, 0x27, 0xda, 0xed, 0x00, 0xab,
+	0x76, 0xdb, 0x45, 0xb5, 0xdb, 0xbb, 0xad, 0x76, 0xdb, 0xc5, 0xed, 0x8f, 0x9b, 0x64, 0x5b, 0xff,
+	0x07, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x92, 0xc5, 0xb4, 0xb8, 0x0e, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group.pb.go b/googleapis/ads/googleads/v3/resources/ad_group.pb.go
new file mode 100644
index 0000000..2b1b26a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group.pb.go
@@ -0,0 +1,399 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group.
+type AdGroup struct {
+	// The resource name of the ad group.
+	// Ad group resource names have the form:
+	//
+	// `customers/{customer_id}/adGroups/{ad_group_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the ad group.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the ad group.
+	//
+	// This field is required and should not be empty when creating new ad
+	// groups.
+	//
+	// It must contain fewer than 255 UTF-8 full-width characters.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the ad group.
+	Status enums.AdGroupStatusEnum_AdGroupStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.AdGroupStatusEnum_AdGroupStatus" json:"status,omitempty"`
+	// The type of the ad group.
+	Type enums.AdGroupTypeEnum_AdGroupType `protobuf:"varint,12,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.AdGroupTypeEnum_AdGroupType" json:"type,omitempty"`
+	// The ad rotation mode of the ad group.
+	AdRotationMode enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode `protobuf:"varint,22,opt,name=ad_rotation_mode,json=adRotationMode,proto3,enum=google.ads.googleads.v3.enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode" json:"ad_rotation_mode,omitempty"`
+	// For draft or experiment ad groups, this field is the resource name of the
+	// base ad group from which this ad group was created. If a draft or
+	// experiment ad group does not have a base ad group, then this field is null.
+	//
+	// For base ad groups, this field equals the ad group resource name.
+	//
+	// This field is read-only.
+	BaseAdGroup *wrappers.StringValue `protobuf:"bytes,18,opt,name=base_ad_group,json=baseAdGroup,proto3" json:"base_ad_group,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,13,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,6,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The campaign to which the ad group belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,10,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The maximum CPC (cost-per-click) bid.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The maximum CPM (cost-per-thousand viewable impressions) bid.
+	CpmBidMicros *wrappers.Int64Value `protobuf:"bytes,15,opt,name=cpm_bid_micros,json=cpmBidMicros,proto3" json:"cpm_bid_micros,omitempty"`
+	// The target CPA (cost-per-acquisition).
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,27,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// The CPV (cost-per-view) bid.
+	CpvBidMicros *wrappers.Int64Value `protobuf:"bytes,17,opt,name=cpv_bid_micros,json=cpvBidMicros,proto3" json:"cpv_bid_micros,omitempty"`
+	// Average amount in micros that the advertiser is willing to pay for every
+	// thousand times the ad is shown.
+	TargetCpmMicros *wrappers.Int64Value `protobuf:"bytes,26,opt,name=target_cpm_micros,json=targetCpmMicros,proto3" json:"target_cpm_micros,omitempty"`
+	// The target ROAS (return-on-ad-spend) override. If the ad group's campaign
+	// bidding strategy is a standard Target ROAS strategy, then this field
+	// overrides the target ROAS specified in the campaign's bidding strategy.
+	// Otherwise, this value is ignored.
+	TargetRoas *wrappers.DoubleValue `protobuf:"bytes,30,opt,name=target_roas,json=targetRoas,proto3" json:"target_roas,omitempty"`
+	// The percent cpc bid amount, expressed as a fraction of the advertised price
+	// for some good or service. The valid range for the fraction is [0,1) and the
+	// value stored here is 1,000,000 * [fraction].
+	PercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,20,opt,name=percent_cpc_bid_micros,json=percentCpcBidMicros,proto3" json:"percent_cpc_bid_micros,omitempty"`
+	// Settings for the Display Campaign Optimizer, initially termed "Explorer".
+	ExplorerAutoOptimizerSetting *common.ExplorerAutoOptimizerSetting `protobuf:"bytes,21,opt,name=explorer_auto_optimizer_setting,json=explorerAutoOptimizerSetting,proto3" json:"explorer_auto_optimizer_setting,omitempty"`
+	// Allows advertisers to specify a targeting dimension on which to place
+	// absolute bids. This is only applicable for campaigns that target only the
+	// display network and not search.
+	DisplayCustomBidDimension enums.TargetingDimensionEnum_TargetingDimension `protobuf:"varint,23,opt,name=display_custom_bid_dimension,json=displayCustomBidDimension,proto3,enum=google.ads.googleads.v3.enums.TargetingDimensionEnum_TargetingDimension" json:"display_custom_bid_dimension,omitempty"`
+	// URL template for appending params to Final URL.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,24,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// Setting for targeting related features.
+	TargetingSetting *common.TargetingSetting `protobuf:"bytes,25,opt,name=targeting_setting,json=targetingSetting,proto3" json:"targeting_setting,omitempty"`
+	// The effective target CPA (cost-per-acquisition).
+	// This field is read-only.
+	EffectiveTargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,28,opt,name=effective_target_cpa_micros,json=effectiveTargetCpaMicros,proto3" json:"effective_target_cpa_micros,omitempty"`
+	// Source of the effective target CPA.
+	// This field is read-only.
+	EffectiveTargetCpaSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,29,opt,name=effective_target_cpa_source,json=effectiveTargetCpaSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_target_cpa_source,omitempty"`
+	// The effective target ROAS (return-on-ad-spend).
+	// This field is read-only.
+	EffectiveTargetRoas *wrappers.DoubleValue `protobuf:"bytes,31,opt,name=effective_target_roas,json=effectiveTargetRoas,proto3" json:"effective_target_roas,omitempty"`
+	// Source of the effective target ROAS.
+	// This field is read-only.
+	EffectiveTargetRoasSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,32,opt,name=effective_target_roas_source,json=effectiveTargetRoasSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_target_roas_source,omitempty"`
+	// The resource names of labels attached to this ad group.
+	Labels               []*wrappers.StringValue `protobuf:"bytes,33,rep,name=labels,proto3" json:"labels,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *AdGroup) Reset()         { *m = AdGroup{} }
+func (m *AdGroup) String() string { return proto.CompactTextString(m) }
+func (*AdGroup) ProtoMessage()    {}
+func (*AdGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3478586bae6468dc, []int{0}
+}
+
+func (m *AdGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroup.Unmarshal(m, b)
+}
+func (m *AdGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroup.Marshal(b, m, deterministic)
+}
+func (m *AdGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroup.Merge(m, src)
+}
+func (m *AdGroup) XXX_Size() int {
+	return xxx_messageInfo_AdGroup.Size(m)
+}
+func (m *AdGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroup proto.InternalMessageInfo
+
+func (m *AdGroup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AdGroup) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AdGroup) GetStatus() enums.AdGroupStatusEnum_AdGroupStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetType() enums.AdGroupTypeEnum_AdGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AdGroupTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetAdRotationMode() enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode {
+	if m != nil {
+		return m.AdRotationMode
+	}
+	return enums.AdGroupAdRotationModeEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetBaseAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.BaseAdGroup
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *AdGroup) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTargetCpmMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpmMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoas
+	}
+	return nil
+}
+
+func (m *AdGroup) GetPercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.PercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetExplorerAutoOptimizerSetting() *common.ExplorerAutoOptimizerSetting {
+	if m != nil {
+		return m.ExplorerAutoOptimizerSetting
+	}
+	return nil
+}
+
+func (m *AdGroup) GetDisplayCustomBidDimension() enums.TargetingDimensionEnum_TargetingDimension {
+	if m != nil {
+		return m.DisplayCustomBidDimension
+	}
+	return enums.TargetingDimensionEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTargetingSetting() *common.TargetingSetting {
+	if m != nil {
+		return m.TargetingSetting
+	}
+	return nil
+}
+
+func (m *AdGroup) GetEffectiveTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveTargetCpaMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetEffectiveTargetCpaSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveTargetCpaSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetEffectiveTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.EffectiveTargetRoas
+	}
+	return nil
+}
+
+func (m *AdGroup) GetEffectiveTargetRoasSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveTargetRoasSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetLabels() []*wrappers.StringValue {
+	if m != nil {
+		return m.Labels
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroup)(nil), "google.ads.googleads.v3.resources.AdGroup")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group.proto", fileDescriptor_3478586bae6468dc)
+}
+
+var fileDescriptor_3478586bae6468dc = []byte{
+	// 1026 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x6e, 0xe4, 0x34,
+	0x14, 0xc7, 0x35, 0x6d, 0x29, 0xe0, 0x7e, 0x6c, 0x9b, 0xd2, 0x25, 0x6d, 0x87, 0xdd, 0x29, 0x68,
+	0xa5, 0x4a, 0x48, 0x49, 0xe9, 0x2c, 0x0b, 0x0a, 0x2c, 0x22, 0x6d, 0x97, 0x02, 0x62, 0xbb, 0x55,
+	0xda, 0xed, 0xc5, 0xaa, 0x28, 0xf2, 0xc4, 0x9e, 0xc8, 0x22, 0x89, 0x23, 0xdb, 0x29, 0x2d, 0xab,
+	0x8a, 0x0b, 0xae, 0x78, 0x0d, 0x2e, 0x79, 0x06, 0x9e, 0x80, 0x47, 0xd9, 0x37, 0xe0, 0x0e, 0xc5,
+	0x1f, 0x99, 0x8f, 0x76, 0x26, 0x41, 0xe2, 0xce, 0xf1, 0x39, 0xff, 0x9f, 0x8f, 0xed, 0x73, 0x7c,
+	0x02, 0x76, 0x63, 0x4a, 0xe3, 0x04, 0xbb, 0x10, 0x71, 0x57, 0x0d, 0xcb, 0xd1, 0x65, 0xd7, 0x65,
+	0x98, 0xd3, 0x82, 0x45, 0x98, 0xbb, 0x10, 0x85, 0x31, 0xa3, 0x45, 0xee, 0xe4, 0x8c, 0x0a, 0x6a,
+	0x6d, 0x2b, 0x37, 0x07, 0x22, 0xee, 0x54, 0x0a, 0xe7, 0xb2, 0xeb, 0x54, 0x8a, 0xcd, 0x4f, 0x27,
+	0x41, 0x23, 0x9a, 0xa6, 0x34, 0x73, 0xa3, 0x82, 0x0b, 0x9a, 0x86, 0x39, 0x64, 0x30, 0xc5, 0x02,
+	0x33, 0x45, 0xde, 0x3c, 0xac, 0x91, 0xe1, 0xab, 0x3c, 0xa1, 0x0c, 0xb3, 0x10, 0x16, 0x82, 0x86,
+	0x34, 0x17, 0x24, 0x25, 0xbf, 0x60, 0x16, 0x72, 0x2c, 0x04, 0xc9, 0x62, 0x4d, 0x79, 0x52, 0x43,
+	0x11, 0x90, 0xc5, 0xb8, 0xf4, 0x1f, 0xd3, 0x3d, 0x9d, 0xa4, 0xc3, 0x59, 0x91, 0x0e, 0x4e, 0x21,
+	0x84, 0x28, 0x64, 0x54, 0x40, 0x41, 0x68, 0x16, 0xa6, 0x14, 0x61, 0x2d, 0xef, 0x36, 0x94, 0x73,
+	0x01, 0x45, 0xc1, 0xb5, 0xe8, 0x93, 0x86, 0x22, 0x71, 0x9d, 0x9b, 0x75, 0xf6, 0xa6, 0x4b, 0x7a,
+	0x04, 0x21, 0xb9, 0x37, 0x79, 0x15, 0x5a, 0xf3, 0xd9, 0x74, 0xcd, 0xe0, 0x44, 0x10, 0x49, 0x71,
+	0xc6, 0x09, 0xcd, 0xb4, 0x70, 0xc3, 0x08, 0x73, 0x52, 0x25, 0x84, 0x36, 0x3d, 0xd0, 0x26, 0xf9,
+	0xd5, 0x2b, 0xfa, 0xee, 0xcf, 0x0c, 0xe6, 0x39, 0x66, 0x66, 0x6b, 0xed, 0x21, 0x29, 0xcc, 0x32,
+	0x7d, 0x62, 0xda, 0xfa, 0xe1, 0x5f, 0xab, 0xe0, 0x6d, 0x1f, 0x1d, 0x95, 0x9b, 0xb3, 0x3e, 0x02,
+	0x4b, 0x86, 0x1d, 0x66, 0x30, 0xc5, 0x76, 0xab, 0xd3, 0xda, 0x79, 0x37, 0x58, 0x34, 0x93, 0xc7,
+	0x30, 0xc5, 0xd6, 0xc7, 0x60, 0x86, 0x20, 0x7b, 0xb6, 0xd3, 0xda, 0x59, 0xd8, 0xdb, 0xd2, 0x79,
+	0xe7, 0x98, 0xb5, 0x9d, 0xef, 0x32, 0xf1, 0xe4, 0xf1, 0x39, 0x4c, 0x0a, 0x1c, 0xcc, 0x10, 0x64,
+	0xed, 0x82, 0x39, 0x09, 0x9a, 0x93, 0xee, 0xed, 0x5b, 0xee, 0xa7, 0x82, 0x91, 0x2c, 0x56, 0xfe,
+	0xd2, 0xd3, 0x3a, 0x07, 0xf3, 0xea, 0x62, 0xec, 0xb7, 0x3a, 0xad, 0x9d, 0xe5, 0xbd, 0xaf, 0x9c,
+	0x49, 0x59, 0x2e, 0x8f, 0xcc, 0xd1, 0xb1, 0x9f, 0x4a, 0xcd, 0xb3, 0xac, 0x48, 0x47, 0x67, 0x02,
+	0x4d, 0xb3, 0x8e, 0xc1, 0x5c, 0x79, 0x77, 0xf6, 0xa2, 0xa4, 0x7a, 0xcd, 0xa8, 0x67, 0xd7, 0x39,
+	0x1e, 0x66, 0x96, 0xdf, 0x81, 0xe4, 0x58, 0x57, 0x60, 0x65, 0x3c, 0xff, 0xec, 0xfb, 0x92, 0x7d,
+	0xdc, 0x8c, 0xed, 0xa3, 0x40, 0x8b, 0x9f, 0x53, 0x34, 0xb2, 0xca, 0xa8, 0x25, 0x58, 0x86, 0x23,
+	0xdf, 0xd6, 0xd7, 0x60, 0xa9, 0x07, 0x39, 0x0e, 0x4d, 0x4e, 0xda, 0x56, 0x83, 0xc3, 0x5d, 0x28,
+	0x25, 0xe6, 0x9e, 0x4f, 0xc0, 0xba, 0x60, 0x30, 0xfa, 0xa9, 0x4c, 0xb4, 0x82, 0x25, 0xa1, 0xc0,
+	0x69, 0x9e, 0x40, 0x81, 0xed, 0xa5, 0x06, 0xa4, 0x35, 0x23, 0x7d, 0xc9, 0x92, 0x33, 0x2d, 0xb4,
+	0x22, 0xb0, 0x5e, 0x82, 0xc6, 0x9f, 0x13, 0x6e, 0xcf, 0x77, 0x66, 0x77, 0x16, 0xf6, 0xdc, 0x89,
+	0x47, 0xa2, 0x9e, 0x02, 0xe7, 0x40, 0x0a, 0x4f, 0x8c, 0x2e, 0x58, 0x2b, 0x58, 0x32, 0x36, 0xc7,
+	0xad, 0xcf, 0xc1, 0x3b, 0x11, 0x4c, 0x73, 0x48, 0xe2, 0xcc, 0x06, 0x0d, 0x22, 0xad, 0xbc, 0x2d,
+	0x1f, 0x2c, 0x47, 0x79, 0x14, 0xf6, 0x08, 0x0a, 0x53, 0x12, 0x31, 0xca, 0xed, 0xe5, 0xfa, 0xfc,
+	0x5d, 0x8c, 0xf2, 0x68, 0x9f, 0xa0, 0xe7, 0x52, 0xa0, 0x10, 0xe9, 0x30, 0xe2, 0x5e, 0x23, 0x44,
+	0x3a, 0x40, 0x1c, 0x81, 0x55, 0x55, 0xe0, 0x61, 0x94, 0x43, 0x43, 0xd9, 0xaa, 0xa7, 0xdc, 0x53,
+	0xaa, 0x83, 0x1c, 0x0e, 0xc7, 0x72, 0x39, 0x1c, 0xcb, 0x6a, 0xa3, 0x58, 0x2e, 0xef, 0x8e, 0x25,
+	0x35, 0x94, 0xcd, 0xff, 0x10, 0x4b, 0xaa, 0x41, 0x4f, 0xc1, 0x82, 0x06, 0x31, 0x0a, 0xb9, 0xfd,
+	0x60, 0xc2, 0xbd, 0x1c, 0xd2, 0xa2, 0x97, 0x60, 0xc5, 0x00, 0x4a, 0x10, 0x50, 0xc8, 0xad, 0x13,
+	0x70, 0x3f, 0xc7, 0x2c, 0xc2, 0x59, 0x19, 0xc8, 0xc8, 0x0d, 0xbd, 0x57, 0x1f, 0xcc, 0x9a, 0x96,
+	0x1e, 0x0c, 0x5f, 0xd4, 0x6f, 0x2d, 0xf0, 0xb0, 0xa6, 0x3f, 0xd9, 0xeb, 0x92, 0xfd, 0x65, 0x5d,
+	0x56, 0x3e, 0xd3, 0x18, 0xbf, 0x10, 0xf4, 0x85, 0x81, 0x9c, 0x2a, 0x46, 0xd0, 0xc6, 0x53, 0xac,
+	0xd6, 0xef, 0x2d, 0xd0, 0x46, 0x84, 0xe7, 0x09, 0xbc, 0x36, 0x55, 0x51, 0xee, 0xad, 0x7a, 0xd6,
+	0xed, 0xf7, 0xe5, 0x5b, 0xf1, 0x6d, 0xcd, 0x5b, 0x71, 0x66, 0x1a, 0xc2, 0xa1, 0x11, 0xca, 0x87,
+	0xe2, 0xf6, 0x74, 0xb0, 0xa1, 0x57, 0x53, 0x55, 0xb3, 0x4f, 0x50, 0x65, 0xb2, 0xbe, 0x01, 0x2b,
+	0x7d, 0x92, 0xc1, 0x44, 0xd6, 0x3a, 0x2f, 0xfa, 0x7d, 0x72, 0x65, 0xdb, 0x0d, 0xea, 0x67, 0x59,
+	0xaa, 0x5e, 0xb2, 0xe4, 0x54, 0x6a, 0xac, 0x1f, 0x4d, 0xce, 0x0c, 0xb5, 0x6c, 0x7b, 0x43, 0x82,
+	0x76, 0xeb, 0x8e, 0xb2, 0x8a, 0xd8, 0x1c, 0xdf, 0x8a, 0x18, 0x9b, 0xb1, 0x5e, 0x81, 0x2d, 0xdc,
+	0xef, 0xe3, 0x48, 0x90, 0x4b, 0x1c, 0xde, 0x2e, 0x94, 0x76, 0x7d, 0x3e, 0xd8, 0x95, 0xfe, 0x6c,
+	0xac, 0x62, 0x6e, 0x26, 0xb0, 0x55, 0x5f, 0xb3, 0x3f, 0x68, 0xd4, 0x6a, 0xf6, 0x55, 0x47, 0x3f,
+	0x95, 0x1a, 0x79, 0x0f, 0x23, 0x33, 0x77, 0x2d, 0xaf, 0x2c, 0xe5, 0x83, 0x7b, 0x6b, 0x79, 0x59,
+	0x2e, 0x0f, 0x1b, 0x94, 0xcb, 0xda, 0x18, 0x56, 0xd6, 0xcd, 0xaf, 0xa0, 0x7d, 0x27, 0xd1, 0xec,
+	0xa8, 0xf3, 0xbf, 0xec, 0x68, 0xe3, 0x8e, 0xa5, 0xf5, 0x96, 0x1e, 0x83, 0xf9, 0x04, 0xf6, 0x70,
+	0xc2, 0xed, 0x6d, 0xf9, 0xc4, 0x4f, 0x4f, 0x25, 0xed, 0xeb, 0xbd, 0x78, 0xe3, 0xff, 0x00, 0x3a,
+	0x83, 0x48, 0xf4, 0x28, 0x27, 0xbc, 0x4c, 0x14, 0xd7, 0x34, 0xa8, 0x1d, 0x55, 0x32, 0x98, 0x71,
+	0xf7, 0xb5, 0x19, 0xde, 0xb8, 0x50, 0x59, 0xb9, 0xfb, 0xda, 0xb4, 0xbe, 0x9b, 0xfd, 0x7f, 0x5a,
+	0xe0, 0x51, 0x44, 0x53, 0xa7, 0xf6, 0x57, 0x78, 0x7f, 0x51, 0xc3, 0x4f, 0xca, 0xf8, 0x4e, 0x5a,
+	0xaf, 0xbe, 0xd7, 0x92, 0x98, 0x26, 0x30, 0x8b, 0x1d, 0xca, 0x62, 0x37, 0xc6, 0x99, 0x8c, 0xde,
+	0x1d, 0x84, 0x35, 0xe5, 0x77, 0xfc, 0x8b, 0x6a, 0xf4, 0xc7, 0xcc, 0xec, 0x91, 0xef, 0xff, 0x39,
+	0xb3, 0x7d, 0xa4, 0x90, 0x3e, 0xe2, 0x8e, 0x1a, 0x96, 0xa3, 0xf3, 0xae, 0x13, 0x18, 0xcf, 0xbf,
+	0x8d, 0xcf, 0x85, 0x8f, 0xf8, 0x45, 0xe5, 0x73, 0x71, 0xde, 0xbd, 0xa8, 0x7c, 0xde, 0xcc, 0x3c,
+	0x52, 0x06, 0xcf, 0xf3, 0x11, 0xf7, 0xbc, 0xca, 0xcb, 0xf3, 0xce, 0xbb, 0x9e, 0x57, 0xf9, 0xf5,
+	0xe6, 0x65, 0xb0, 0xdd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x0f, 0xe9, 0xf5, 0xae, 0x3a, 0x0c,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_ad.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_ad.pb.go
new file mode 100644
index 0000000..3ebda82
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_ad.pb.go
@@ -0,0 +1,228 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_ad.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group ad.
+type AdGroupAd struct {
+	// The resource name of the ad.
+	// Ad group ad resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The status of the ad.
+	Status enums.AdGroupAdStatusEnum_AdGroupAdStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.AdGroupAdStatusEnum_AdGroupAdStatus" json:"status,omitempty"`
+	// The ad group to which the ad belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,4,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ad.
+	Ad *Ad `protobuf:"bytes,5,opt,name=ad,proto3" json:"ad,omitempty"`
+	// Policy information for the ad.
+	PolicySummary *AdGroupAdPolicySummary `protobuf:"bytes,6,opt,name=policy_summary,json=policySummary,proto3" json:"policy_summary,omitempty"`
+	// Overall ad strength for this ad group ad.
+	AdStrength           enums.AdStrengthEnum_AdStrength `protobuf:"varint,7,opt,name=ad_strength,json=adStrength,proto3,enum=google.ads.googleads.v3.enums.AdStrengthEnum_AdStrength" json:"ad_strength,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *AdGroupAd) Reset()         { *m = AdGroupAd{} }
+func (m *AdGroupAd) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAd) ProtoMessage()    {}
+func (*AdGroupAd) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1ed4b3c949da8cd1, []int{0}
+}
+
+func (m *AdGroupAd) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAd.Unmarshal(m, b)
+}
+func (m *AdGroupAd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAd.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAd) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAd.Merge(m, src)
+}
+func (m *AdGroupAd) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAd.Size(m)
+}
+func (m *AdGroupAd) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAd.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAd proto.InternalMessageInfo
+
+func (m *AdGroupAd) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupAd) GetStatus() enums.AdGroupAdStatusEnum_AdGroupAdStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupAdStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAd) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupAd) GetAd() *Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+func (m *AdGroupAd) GetPolicySummary() *AdGroupAdPolicySummary {
+	if m != nil {
+		return m.PolicySummary
+	}
+	return nil
+}
+
+func (m *AdGroupAd) GetAdStrength() enums.AdStrengthEnum_AdStrength {
+	if m != nil {
+		return m.AdStrength
+	}
+	return enums.AdStrengthEnum_UNSPECIFIED
+}
+
+// Contains policy information for an ad.
+type AdGroupAdPolicySummary struct {
+	// The list of policy findings for this ad.
+	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	// Where in the review process this ad is.
+	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,2,opt,name=review_status,json=reviewStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyReviewStatusEnum_PolicyReviewStatus" json:"review_status,omitempty"`
+	// The overall approval status of this ad, calculated based on the status of
+	// its individual policy topic entries.
+	ApprovalStatus       enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,3,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *AdGroupAdPolicySummary) Reset()         { *m = AdGroupAdPolicySummary{} }
+func (m *AdGroupAdPolicySummary) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdPolicySummary) ProtoMessage()    {}
+func (*AdGroupAdPolicySummary) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1ed4b3c949da8cd1, []int{1}
+}
+
+func (m *AdGroupAdPolicySummary) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Unmarshal(m, b)
+}
+func (m *AdGroupAdPolicySummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdPolicySummary) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdPolicySummary.Merge(m, src)
+}
+func (m *AdGroupAdPolicySummary) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Size(m)
+}
+func (m *AdGroupAdPolicySummary) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdPolicySummary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdPolicySummary proto.InternalMessageInfo
+
+func (m *AdGroupAdPolicySummary) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func (m *AdGroupAdPolicySummary) GetReviewStatus() enums.PolicyReviewStatusEnum_PolicyReviewStatus {
+	if m != nil {
+		return m.ReviewStatus
+	}
+	return enums.PolicyReviewStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAdPolicySummary) GetApprovalStatus() enums.PolicyApprovalStatusEnum_PolicyApprovalStatus {
+	if m != nil {
+		return m.ApprovalStatus
+	}
+	return enums.PolicyApprovalStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAd)(nil), "google.ads.googleads.v3.resources.AdGroupAd")
+	proto.RegisterType((*AdGroupAdPolicySummary)(nil), "google.ads.googleads.v3.resources.AdGroupAdPolicySummary")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_ad.proto", fileDescriptor_1ed4b3c949da8cd1)
+}
+
+var fileDescriptor_1ed4b3c949da8cd1 = []byte{
+	// 638 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xd1, 0x6a, 0xd4, 0x4c,
+	0x14, 0x26, 0x69, 0xff, 0xf6, 0xef, 0xd4, 0xae, 0x10, 0x44, 0x62, 0x29, 0xb2, 0xad, 0x14, 0x16,
+	0xc5, 0x19, 0x69, 0x50, 0x6b, 0xbc, 0x4a, 0xa1, 0x54, 0x44, 0xa4, 0x64, 0x65, 0xc1, 0xb2, 0xb0,
+	0x4e, 0x93, 0x31, 0x06, 0x36, 0x33, 0xc3, 0xcc, 0x64, 0xcb, 0x52, 0xfa, 0x10, 0xbe, 0x82, 0x97,
+	0x3e, 0x8a, 0x8f, 0xe1, 0x65, 0x5f, 0xc1, 0x1b, 0x49, 0x66, 0x26, 0xbb, 0xdb, 0xba, 0xdd, 0xbd,
+	0x3b, 0x33, 0xe7, 0xfb, 0xbe, 0xc9, 0xf9, 0xce, 0x39, 0x01, 0x41, 0xc6, 0x58, 0x36, 0x24, 0x08,
+	0xa7, 0x12, 0xe9, 0xb0, 0x8a, 0x46, 0x01, 0x12, 0x44, 0xb2, 0x52, 0x24, 0x44, 0x22, 0x9c, 0x0e,
+	0x32, 0xc1, 0x4a, 0x3e, 0xc0, 0x29, 0xe4, 0x82, 0x29, 0xe6, 0xed, 0x6a, 0x24, 0xc4, 0xa9, 0x84,
+	0x0d, 0x09, 0x8e, 0x02, 0xd8, 0x90, 0xb6, 0x9f, 0xcd, 0xd3, 0x4d, 0x58, 0x51, 0x30, 0x8a, 0x38,
+	0x1b, 0xe6, 0xc9, 0x58, 0xeb, 0x6d, 0xbf, 0x9a, 0x07, 0x26, 0xb4, 0x2c, 0x66, 0x3e, 0x60, 0x20,
+	0x15, 0x56, 0xa5, 0x34, 0x3c, 0xb4, 0x90, 0x27, 0x95, 0x20, 0x34, 0x53, 0xdf, 0x0c, 0x21, 0xbc,
+	0x9b, 0xa0, 0x3f, 0x6a, 0x80, 0x39, 0x17, 0x6c, 0x84, 0x87, 0xb3, 0x8f, 0x1d, 0x2e, 0xc5, 0x15,
+	0x64, 0x94, 0x93, 0x8b, 0x59, 0xe6, 0xd3, 0x65, 0x3c, 0x36, 0xd8, 0x47, 0x16, 0xcb, 0xf3, 0x26,
+	0x6d, 0x52, 0x8f, 0x4d, 0xaa, 0x3e, 0x9d, 0x97, 0x5f, 0xd1, 0x85, 0xc0, 0x9c, 0x13, 0x61, 0x9f,
+	0xd9, 0x99, 0xa2, 0x62, 0x4a, 0x99, 0xc2, 0x2a, 0x67, 0xd4, 0x64, 0xf7, 0xbe, 0xaf, 0x82, 0x8d,
+	0x28, 0x3d, 0xa9, 0x7c, 0x8c, 0x52, 0xef, 0x09, 0xd8, 0xb2, 0xea, 0x03, 0x8a, 0x0b, 0xe2, 0x3b,
+	0x6d, 0xa7, 0xb3, 0x11, 0xdf, 0xb3, 0x97, 0x1f, 0x71, 0x41, 0xbc, 0x33, 0xb0, 0xa6, 0xeb, 0xf0,
+	0x57, 0xda, 0x4e, 0xa7, 0x75, 0x70, 0x04, 0xe7, 0xf5, 0xbd, 0xb6, 0x00, 0x36, 0xf2, 0xdd, 0x9a,
+	0x75, 0x4c, 0xcb, 0xe2, 0xe6, 0x5d, 0x6c, 0x14, 0xbd, 0xd7, 0xe0, 0x7f, 0xdb, 0x56, 0x7f, 0xb5,
+	0xed, 0x74, 0x36, 0x0f, 0x76, 0xac, 0xba, 0xad, 0x0f, 0x76, 0x95, 0xc8, 0x69, 0xd6, 0xc3, 0xc3,
+	0x92, 0xc4, 0xeb, 0x58, 0x0b, 0x79, 0x2f, 0x81, 0x8b, 0x53, 0xff, 0xbf, 0x9a, 0xb2, 0x0f, 0x17,
+	0x0e, 0x22, 0x8c, 0xd2, 0xd8, 0xc5, 0xa9, 0xf7, 0x05, 0xb4, 0x4c, 0x87, 0x64, 0x59, 0x14, 0x58,
+	0x8c, 0xfd, 0xb5, 0x5a, 0xe2, 0xcd, 0x52, 0x12, 0xa6, 0x86, 0xd3, 0x5a, 0xa1, 0xab, 0x05, 0xe2,
+	0x2d, 0x3e, 0x7d, 0xf4, 0x3e, 0x83, 0xcd, 0xa9, 0x81, 0xf3, 0xd7, 0x6b, 0xcb, 0x0e, 0x17, 0x5a,
+	0xd6, 0x35, 0x04, 0xe3, 0x96, 0x3d, 0xc6, 0x00, 0x37, 0x71, 0xd8, 0xbb, 0x8e, 0xba, 0x60, 0x6f,
+	0x42, 0x37, 0x11, 0xcf, 0x25, 0x4c, 0x58, 0x81, 0x26, 0x6d, 0x7d, 0x9e, 0x94, 0x52, 0xb1, 0x82,
+	0x08, 0x89, 0x2e, 0x6d, 0x78, 0x85, 0xb0, 0xcd, 0x4b, 0x74, 0x39, 0xb5, 0x4b, 0x57, 0x7b, 0xbf,
+	0x5d, 0xf0, 0xf0, 0xdf, 0xc5, 0x79, 0xe7, 0xe0, 0x81, 0xf1, 0x4b, 0x31, 0x9e, 0x27, 0x03, 0x42,
+	0x95, 0xc8, 0x89, 0xf4, 0x9d, 0xf6, 0x4a, 0x67, 0xf3, 0xe0, 0xc5, 0xdc, 0xb2, 0xf4, 0x7a, 0x43,
+	0x2d, 0xf6, 0xa9, 0xa2, 0x1e, 0x53, 0x25, 0xc6, 0xb1, 0xc7, 0x67, 0x6f, 0x72, 0x22, 0xbd, 0xa2,
+	0x1a, 0xc2, 0xa9, 0x75, 0xf1, 0xdd, 0xda, 0xb3, 0x77, 0x0b, 0x3c, 0xd3, 0xda, 0x71, 0xcd, 0x9c,
+	0x9a, 0xb4, 0xdb, 0xd7, 0xd5, 0x38, 0x4f, 0x4e, 0x5e, 0x09, 0xee, 0xdf, 0xd8, 0x6c, 0x33, 0xd7,
+	0x1f, 0x96, 0x7a, 0x30, 0x32, 0xdc, 0x5b, 0x4f, 0xce, 0x26, 0xe2, 0x16, 0x9e, 0x39, 0x1f, 0xfd,
+	0x71, 0xc0, 0x7e, 0xc2, 0x8a, 0xc5, 0x73, 0x76, 0xd4, 0x9a, 0xf4, 0xa2, 0x5a, 0x81, 0x53, 0xe7,
+	0xec, 0xbd, 0x21, 0x65, 0x6c, 0x88, 0x69, 0x06, 0x99, 0xc8, 0x50, 0x46, 0x68, 0xbd, 0x20, 0x68,
+	0x32, 0x04, 0x77, 0xfc, 0x58, 0xde, 0x36, 0xd1, 0x0f, 0x77, 0xe5, 0x24, 0x8a, 0x7e, 0xba, 0xbb,
+	0x27, 0x5a, 0x32, 0x4a, 0x25, 0xd4, 0x61, 0x15, 0xf5, 0x02, 0x18, 0x5b, 0xe4, 0x2f, 0x8b, 0xe9,
+	0x47, 0xa9, 0xec, 0x37, 0x98, 0x7e, 0x2f, 0xe8, 0x37, 0x98, 0x6b, 0x77, 0x5f, 0x27, 0xc2, 0x30,
+	0x4a, 0x65, 0x18, 0x36, 0xa8, 0x30, 0xec, 0x05, 0x61, 0xd8, 0xe0, 0xce, 0xd7, 0xea, 0x8f, 0x0d,
+	0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x23, 0x16, 0x17, 0x68, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_ad_asset_view.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_ad_asset_view.pb.go
new file mode 100644
index 0000000..ec7ac41
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_ad_asset_view.pb.go
@@ -0,0 +1,230 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_ad_asset_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A link between an AdGroupAd and an Asset.
+type AdGroupAdAssetView struct {
+	// The resource name of the ad group ad asset view.
+	// Ad group ad asset view resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupAdAssets/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.asset_field_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group ad to which the asset is linked.
+	AdGroupAd *wrappers.StringValue `protobuf:"bytes,5,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The asset which is linked to the ad group ad.
+	Asset *wrappers.StringValue `protobuf:"bytes,6,opt,name=asset,proto3" json:"asset,omitempty"`
+	// Role that the asset takes in the ad.
+	FieldType enums.AssetFieldTypeEnum_AssetFieldType `protobuf:"varint,2,opt,name=field_type,json=fieldType,proto3,enum=google.ads.googleads.v3.enums.AssetFieldTypeEnum_AssetFieldType" json:"field_type,omitempty"`
+	// Policy information for the ad group ad asset.
+	PolicySummary *AdGroupAdAssetPolicySummary `protobuf:"bytes,3,opt,name=policy_summary,json=policySummary,proto3" json:"policy_summary,omitempty"`
+	// Performance of an asset linkage.
+	PerformanceLabel     enums.AssetPerformanceLabelEnum_AssetPerformanceLabel `protobuf:"varint,4,opt,name=performance_label,json=performanceLabel,proto3,enum=google.ads.googleads.v3.enums.AssetPerformanceLabelEnum_AssetPerformanceLabel" json:"performance_label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                              `json:"-"`
+	XXX_unrecognized     []byte                                                `json:"-"`
+	XXX_sizecache        int32                                                 `json:"-"`
+}
+
+func (m *AdGroupAdAssetView) Reset()         { *m = AdGroupAdAssetView{} }
+func (m *AdGroupAdAssetView) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdAssetView) ProtoMessage()    {}
+func (*AdGroupAdAssetView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ebd5d6a40ca3c8d6, []int{0}
+}
+
+func (m *AdGroupAdAssetView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdAssetView.Unmarshal(m, b)
+}
+func (m *AdGroupAdAssetView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdAssetView.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdAssetView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdAssetView.Merge(m, src)
+}
+func (m *AdGroupAdAssetView) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdAssetView.Size(m)
+}
+func (m *AdGroupAdAssetView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdAssetView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdAssetView proto.InternalMessageInfo
+
+func (m *AdGroupAdAssetView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupAdAssetView) GetAdGroupAd() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *AdGroupAdAssetView) GetAsset() *wrappers.StringValue {
+	if m != nil {
+		return m.Asset
+	}
+	return nil
+}
+
+func (m *AdGroupAdAssetView) GetFieldType() enums.AssetFieldTypeEnum_AssetFieldType {
+	if m != nil {
+		return m.FieldType
+	}
+	return enums.AssetFieldTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAdAssetView) GetPolicySummary() *AdGroupAdAssetPolicySummary {
+	if m != nil {
+		return m.PolicySummary
+	}
+	return nil
+}
+
+func (m *AdGroupAdAssetView) GetPerformanceLabel() enums.AssetPerformanceLabelEnum_AssetPerformanceLabel {
+	if m != nil {
+		return m.PerformanceLabel
+	}
+	return enums.AssetPerformanceLabelEnum_UNSPECIFIED
+}
+
+// Contains policy information for an ad group ad asset.
+type AdGroupAdAssetPolicySummary struct {
+	// The list of policy findings for the ad group ad asset.
+	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	// Where in the review process this ad group ad asset is.
+	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,2,opt,name=review_status,json=reviewStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyReviewStatusEnum_PolicyReviewStatus" json:"review_status,omitempty"`
+	// The overall approval status of this ad group ad asset, calculated based on
+	// the status of its individual policy topic entries.
+	ApprovalStatus       enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,3,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *AdGroupAdAssetPolicySummary) Reset()         { *m = AdGroupAdAssetPolicySummary{} }
+func (m *AdGroupAdAssetPolicySummary) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdAssetPolicySummary) ProtoMessage()    {}
+func (*AdGroupAdAssetPolicySummary) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ebd5d6a40ca3c8d6, []int{1}
+}
+
+func (m *AdGroupAdAssetPolicySummary) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdAssetPolicySummary.Unmarshal(m, b)
+}
+func (m *AdGroupAdAssetPolicySummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdAssetPolicySummary.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdAssetPolicySummary) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdAssetPolicySummary.Merge(m, src)
+}
+func (m *AdGroupAdAssetPolicySummary) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdAssetPolicySummary.Size(m)
+}
+func (m *AdGroupAdAssetPolicySummary) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdAssetPolicySummary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdAssetPolicySummary proto.InternalMessageInfo
+
+func (m *AdGroupAdAssetPolicySummary) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func (m *AdGroupAdAssetPolicySummary) GetReviewStatus() enums.PolicyReviewStatusEnum_PolicyReviewStatus {
+	if m != nil {
+		return m.ReviewStatus
+	}
+	return enums.PolicyReviewStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAdAssetPolicySummary) GetApprovalStatus() enums.PolicyApprovalStatusEnum_PolicyApprovalStatus {
+	if m != nil {
+		return m.ApprovalStatus
+	}
+	return enums.PolicyApprovalStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAdAssetView)(nil), "google.ads.googleads.v3.resources.AdGroupAdAssetView")
+	proto.RegisterType((*AdGroupAdAssetPolicySummary)(nil), "google.ads.googleads.v3.resources.AdGroupAdAssetPolicySummary")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_ad_asset_view.proto", fileDescriptor_ebd5d6a40ca3c8d6)
+}
+
+var fileDescriptor_ebd5d6a40ca3c8d6 = []byte{
+	// 672 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0x5d, 0x6b, 0xdb, 0x3c,
+	0x14, 0xc7, 0x49, 0xfa, 0x02, 0x55, 0x9f, 0xe6, 0xd9, 0xcc, 0x60, 0x5e, 0x57, 0x46, 0xda, 0x51,
+	0x08, 0x14, 0xe4, 0x91, 0xec, 0x62, 0xb8, 0x5b, 0x99, 0x0b, 0x5d, 0xc7, 0x28, 0x25, 0xb8, 0x25,
+	0x17, 0x23, 0x60, 0x14, 0x5b, 0x31, 0x06, 0xeb, 0x05, 0xc9, 0x4e, 0x09, 0xa5, 0x77, 0xfb, 0x24,
+	0xbb, 0xdc, 0x47, 0xd9, 0xb7, 0xd8, 0xd5, 0xa0, 0x9f, 0x62, 0x58, 0x92, 0x9d, 0xb7, 0xa6, 0xcd,
+	0xdd, 0x91, 0xce, 0xf9, 0x9d, 0x23, 0xfd, 0xcf, 0x91, 0x0d, 0x4e, 0x62, 0xc6, 0xe2, 0x14, 0x3b,
+	0x28, 0x92, 0x8e, 0x36, 0x0b, 0x6b, 0xd4, 0x71, 0x04, 0x96, 0x2c, 0x17, 0x21, 0x96, 0x0e, 0x8a,
+	0x82, 0x58, 0xb0, 0x9c, 0x07, 0x28, 0x0a, 0x90, 0x94, 0x38, 0x0b, 0x46, 0x09, 0xbe, 0x81, 0x5c,
+	0xb0, 0x8c, 0x59, 0xfb, 0x1a, 0x82, 0x28, 0x92, 0xb0, 0xe2, 0xe1, 0xa8, 0x03, 0x2b, 0x7e, 0xf7,
+	0x68, 0x59, 0x89, 0x90, 0x11, 0xc2, 0xa8, 0xc3, 0x59, 0x9a, 0x84, 0x63, 0x9d, 0x6f, 0xf7, 0xfd,
+	0xb2, 0x60, 0x4c, 0x73, 0x22, 0x1d, 0x5d, 0x7f, 0x98, 0xe0, 0x34, 0x0a, 0xb2, 0x31, 0xc7, 0x86,
+	0x3a, 0x5e, 0x85, 0xe2, 0x58, 0x0c, 0x99, 0x20, 0x88, 0x86, 0x38, 0x48, 0xd1, 0x00, 0xa7, 0x06,
+	0x76, 0x1f, 0x87, 0xf5, 0xf1, 0x02, 0xc4, 0xb9, 0x60, 0x23, 0x94, 0x06, 0x32, 0x43, 0x59, 0x2e,
+	0x0d, 0xfb, 0x61, 0x25, 0x56, 0xe0, 0x42, 0xb1, 0x59, 0xf2, 0x55, 0x49, 0xf2, 0xa4, 0xd2, 0xda,
+	0xb8, 0xde, 0x18, 0x97, 0x5a, 0x0d, 0xf2, 0xa1, 0x73, 0x23, 0x10, 0xe7, 0x58, 0x94, 0xe8, 0xde,
+	0x14, 0x8a, 0x28, 0x65, 0x19, 0xca, 0x12, 0x46, 0x8d, 0xf7, 0xe0, 0xcf, 0x3a, 0xb0, 0xbc, 0xe8,
+	0xbc, 0xe8, 0x98, 0x17, 0x79, 0xc5, 0xcd, 0x7b, 0x09, 0xbe, 0xb1, 0xde, 0x82, 0x9d, 0xb2, 0x4c,
+	0x40, 0x11, 0xc1, 0x76, 0xad, 0x59, 0x6b, 0x6d, 0xf9, 0xff, 0x95, 0x9b, 0x97, 0x88, 0x60, 0xeb,
+	0x23, 0xd8, 0x9e, 0xea, 0xb6, 0xbd, 0xd1, 0xac, 0xb5, 0xb6, 0xdb, 0x7b, 0xa6, 0xb1, 0xb0, 0x3c,
+	0x0f, 0xbc, 0xca, 0x44, 0x42, 0xe3, 0x1e, 0x4a, 0x73, 0xec, 0x6f, 0xa1, 0xb2, 0x96, 0xd5, 0x06,
+	0x1b, 0x4a, 0x69, 0x7b, 0x73, 0x05, 0x4e, 0x87, 0x5a, 0x01, 0x00, 0x93, 0x6e, 0xda, 0xf5, 0x66,
+	0xad, 0xd5, 0x68, 0x7f, 0x86, 0xcb, 0x86, 0x4a, 0xa9, 0x0a, 0xd5, 0xa5, 0xbe, 0x14, 0xd4, 0xf5,
+	0x98, 0xe3, 0x33, 0x9a, 0x93, 0xb9, 0x2d, 0x7f, 0x6b, 0x58, 0x9a, 0x16, 0x06, 0x0d, 0xd3, 0x05,
+	0x99, 0x13, 0x82, 0xc4, 0xd8, 0x5e, 0x53, 0xa7, 0x3b, 0x81, 0x4f, 0x4e, 0x2e, 0x9c, 0x95, 0xb1,
+	0xab, 0xd2, 0x5c, 0xe9, 0x2c, 0xfe, 0x0e, 0x9f, 0x5e, 0x5a, 0xb7, 0xe0, 0xf9, 0xc2, 0x7c, 0xd9,
+	0xeb, 0xea, 0x3a, 0x97, 0xab, 0x5c, 0xa7, 0x3b, 0x81, 0x2f, 0x0a, 0x76, 0x72, 0xab, 0x79, 0x8f,
+	0xff, 0x8c, 0xcf, 0xed, 0xb8, 0xec, 0xde, 0x4b, 0xc1, 0xd1, 0x24, 0xb5, 0xb1, 0x78, 0x22, 0x61,
+	0xc8, 0x88, 0xf3, 0xc0, 0x34, 0x7c, 0x0a, 0x73, 0x99, 0x31, 0x82, 0x85, 0x74, 0x6e, 0x4b, 0xf3,
+	0xce, 0x41, 0x33, 0x81, 0xd2, 0xb9, 0x7d, 0xf8, 0xe9, 0xdf, 0x1d, 0xfc, 0xad, 0x83, 0xd7, 0x8f,
+	0x88, 0x63, 0x0d, 0xc0, 0x0b, 0x23, 0x7a, 0xc6, 0x78, 0x12, 0x06, 0x98, 0x66, 0x22, 0xc1, 0xd2,
+	0xae, 0x35, 0xd7, 0x5a, 0xdb, 0xed, 0x77, 0x4b, 0x05, 0xd1, 0x5f, 0x04, 0xa8, 0x93, 0x5d, 0x17,
+	0xe8, 0x19, 0xcd, 0xc4, 0xd8, 0xb7, 0xf8, 0xec, 0x4e, 0x82, 0xa5, 0x45, 0x8a, 0x81, 0x9e, 0x7a,
+	0x57, 0x66, 0x78, 0xbe, 0x3e, 0xa1, 0xb6, 0xce, 0xed, 0x2b, 0xf2, 0x4a, 0x81, 0x4a, 0xea, 0xc5,
+	0xed, 0xe2, 0x69, 0x4c, 0x56, 0x56, 0x0e, 0xfe, 0x9f, 0xfb, 0x04, 0xa8, 0x41, 0x6a, 0xb4, 0x2f,
+	0x56, 0x2a, 0xe8, 0x19, 0x76, 0xa1, 0xe4, 0xac, 0xc3, 0x6f, 0xa0, 0x99, 0xf5, 0xe9, 0x8f, 0x3a,
+	0x38, 0x0c, 0x19, 0x79, 0x7a, 0x58, 0x4f, 0x5f, 0x2e, 0xb6, 0xb9, 0x5b, 0x3c, 0xbc, 0x6e, 0xed,
+	0xfb, 0x37, 0x43, 0xc7, 0x2c, 0x45, 0x34, 0x86, 0x4c, 0xc4, 0x4e, 0x8c, 0xa9, 0x7a, 0x96, 0xce,
+	0x64, 0x56, 0x1e, 0xf9, 0x07, 0x1c, 0x57, 0xd6, 0xcf, 0xfa, 0xda, 0xb9, 0xe7, 0xfd, 0xaa, 0xef,
+	0x9f, 0xeb, 0x94, 0x5e, 0x24, 0xa1, 0x36, 0x0b, 0xab, 0xd7, 0x81, 0x7e, 0x19, 0xf9, 0xbb, 0x8c,
+	0xe9, 0x7b, 0x91, 0xec, 0x57, 0x31, 0xfd, 0x5e, 0xa7, 0x5f, 0xc5, 0xdc, 0xd7, 0x0f, 0xb5, 0xc3,
+	0x75, 0xbd, 0x48, 0xba, 0x6e, 0x15, 0xe5, 0xba, 0xbd, 0x8e, 0xeb, 0x56, 0x71, 0x83, 0x4d, 0x75,
+	0xd8, 0xce, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x43, 0x05, 0xe1, 0xaf, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_ad_label.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_ad_label.pb.go
new file mode 100644
index 0000000..b89170d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_ad_label.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_ad_label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A relationship between an ad group ad and a label.
+type AdGroupAdLabel struct {
+	// The resource name of the ad group ad label.
+	// Ad group ad label resource names have the form:
+	// `customers/{customer_id}/adGroupAdLabels/{ad_group_id}~{ad_id}~{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group ad to which the label is attached.
+	AdGroupAd *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The label assigned to the ad group ad.
+	Label                *wrappers.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdGroupAdLabel) Reset()         { *m = AdGroupAdLabel{} }
+func (m *AdGroupAdLabel) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdLabel) ProtoMessage()    {}
+func (*AdGroupAdLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_668144ba7a9ba42f, []int{0}
+}
+
+func (m *AdGroupAdLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdLabel.Unmarshal(m, b)
+}
+func (m *AdGroupAdLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdLabel.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdLabel.Merge(m, src)
+}
+func (m *AdGroupAdLabel) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdLabel.Size(m)
+}
+func (m *AdGroupAdLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdLabel proto.InternalMessageInfo
+
+func (m *AdGroupAdLabel) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupAdLabel) GetAdGroupAd() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *AdGroupAdLabel) GetLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAdLabel)(nil), "google.ads.googleads.v3.resources.AdGroupAdLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_ad_label.proto", fileDescriptor_668144ba7a9ba42f)
+}
+
+var fileDescriptor_668144ba7a9ba42f = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x6b, 0xdb, 0x30,
+	0x18, 0xc6, 0xb1, 0xc3, 0x06, 0x71, 0xb6, 0x1d, 0xbc, 0x4b, 0x16, 0xc2, 0x48, 0x36, 0xc2, 0x72,
+	0x92, 0x20, 0xbe, 0x6c, 0xda, 0x2e, 0xca, 0x25, 0x30, 0x4a, 0x09, 0x29, 0xf8, 0x50, 0x0c, 0x46,
+	0xb1, 0x14, 0x61, 0xb0, 0x2d, 0x23, 0xd9, 0xe9, 0x21, 0x04, 0xfa, 0x0d, 0xfa, 0x1d, 0x7a, 0xec,
+	0x47, 0xe9, 0x47, 0xc9, 0xa7, 0x28, 0xfe, 0x23, 0x25, 0x69, 0xa1, 0xed, 0xed, 0xb1, 0xdf, 0xdf,
+	0xf3, 0xbe, 0xcf, 0x2b, 0xc9, 0xf9, 0xc3, 0x85, 0xe0, 0x09, 0x83, 0x84, 0x2a, 0xd8, 0xc8, 0x4a,
+	0x6d, 0x3d, 0x28, 0x99, 0x12, 0xa5, 0x8c, 0x98, 0x82, 0x84, 0x86, 0x5c, 0x8a, 0x32, 0x0f, 0x09,
+	0x0d, 0x13, 0xb2, 0x66, 0x09, 0xc8, 0xa5, 0x28, 0x84, 0x3b, 0x6e, 0x78, 0x40, 0xa8, 0x02, 0xc6,
+	0x0a, 0xb6, 0x1e, 0x30, 0xd6, 0xc1, 0x37, 0xdd, 0x3d, 0x8f, 0x4d, 0xc3, 0xc6, 0x3d, 0xf8, 0xde,
+	0x96, 0xea, 0xaf, 0x75, 0xb9, 0x81, 0x37, 0x92, 0xe4, 0x39, 0x93, 0xaa, 0xad, 0x0f, 0x4f, 0xac,
+	0x24, 0xcb, 0x44, 0x41, 0x8a, 0x58, 0x64, 0x6d, 0xf5, 0xc7, 0x9d, 0xed, 0x7c, 0xc1, 0x74, 0x51,
+	0xc5, 0xc2, 0xf4, 0xa2, 0x0a, 0xe5, 0xfe, 0x74, 0x3e, 0xeb, 0x11, 0x61, 0x46, 0x52, 0xd6, 0xb7,
+	0x46, 0xd6, 0xb4, 0xbb, 0xfa, 0xa4, 0x7f, 0x5e, 0x92, 0x94, 0xb9, 0xff, 0x9c, 0xde, 0xc9, 0x3a,
+	0x7d, 0x7b, 0x64, 0x4d, 0x7b, 0xb3, 0x61, 0x1b, 0x1f, 0xe8, 0x2c, 0xe0, 0xaa, 0x90, 0x71, 0xc6,
+	0x7d, 0x92, 0x94, 0x6c, 0xd5, 0x25, 0x7a, 0x8e, 0x3b, 0x73, 0x3e, 0xd4, 0x07, 0xd0, 0xef, 0xbc,
+	0xc3, 0xd7, 0xa0, 0x68, 0x73, 0xc0, 0x91, 0xf3, 0xeb, 0x78, 0x3e, 0xad, 0xca, 0x63, 0x05, 0x22,
+	0x91, 0xc2, 0x67, 0x4b, 0xfc, 0x8e, 0x4a, 0x55, 0x88, 0x94, 0x49, 0x05, 0x77, 0x5a, 0xee, 0x21,
+	0x39, 0x83, 0x14, 0xdc, 0xbd, 0xb8, 0x92, 0xfd, 0xfc, 0xd6, 0x76, 0x26, 0x91, 0x48, 0xc1, 0x9b,
+	0x97, 0x32, 0xff, 0x7a, 0x3e, 0x73, 0x59, 0x85, 0x5f, 0x5a, 0xd7, 0xff, 0x5b, 0x27, 0x17, 0x09,
+	0xc9, 0x38, 0x10, 0x92, 0x43, 0xce, 0xb2, 0x7a, 0x35, 0x78, 0x0c, 0xfd, 0xca, 0x43, 0xf9, 0x6b,
+	0xd4, 0xbd, 0xdd, 0x59, 0x60, 0xfc, 0x60, 0x8f, 0x17, 0x4d, 0x4b, 0x4c, 0x15, 0x68, 0x64, 0xa5,
+	0x7c, 0x0f, 0xac, 0x34, 0xf9, 0xa8, 0x99, 0x00, 0x53, 0x15, 0x18, 0x26, 0xf0, 0xbd, 0xc0, 0x30,
+	0x07, 0x7b, 0xd2, 0x14, 0x10, 0xc2, 0x54, 0x21, 0x64, 0x28, 0x84, 0x7c, 0x0f, 0x21, 0xc3, 0xad,
+	0x3f, 0xd6, 0x61, 0xbd, 0xa7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa9, 0xbe, 0x8e, 0xe2, 0xd4, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_audience_view.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_audience_view.pb.go
new file mode 100644
index 0000000..7bedf49
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_audience_view.pb.go
@@ -0,0 +1,103 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_audience_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group audience view.
+// Includes performance data from interests and remarketing lists for Display
+// Network and YouTube Network ads, and remarketing lists for search ads (RLSA),
+// aggregated at the audience level.
+type AdGroupAudienceView struct {
+	// The resource name of the ad group audience view.
+	// Ad group audience view resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupAudienceViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAudienceView) Reset()         { *m = AdGroupAudienceView{} }
+func (m *AdGroupAudienceView) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAudienceView) ProtoMessage()    {}
+func (*AdGroupAudienceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8a6b1c14a61738, []int{0}
+}
+
+func (m *AdGroupAudienceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAudienceView.Unmarshal(m, b)
+}
+func (m *AdGroupAudienceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAudienceView.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAudienceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAudienceView.Merge(m, src)
+}
+func (m *AdGroupAudienceView) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAudienceView.Size(m)
+}
+func (m *AdGroupAudienceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAudienceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAudienceView proto.InternalMessageInfo
+
+func (m *AdGroupAudienceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAudienceView)(nil), "google.ads.googleads.v3.resources.AdGroupAudienceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_audience_view.proto", fileDescriptor_4d8a6b1c14a61738)
+}
+
+var fileDescriptor_4d8a6b1c14a61738 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xbf, 0x6a, 0xf3, 0x30,
+	0x14, 0xc5, 0xb1, 0x3f, 0xf8, 0xa0, 0xa6, 0x5d, 0xd2, 0x25, 0x0d, 0x1d, 0x9a, 0x96, 0x40, 0x87,
+	0x22, 0x0d, 0xde, 0x54, 0x28, 0x28, 0x4b, 0xa0, 0x43, 0x09, 0x19, 0x3c, 0x14, 0x83, 0x51, 0x2d,
+	0x21, 0x0c, 0xb1, 0xae, 0xd1, 0xb5, 0x93, 0x21, 0x64, 0xec, 0x8b, 0x74, 0xec, 0xd6, 0xd7, 0xe8,
+	0xa3, 0xe4, 0x29, 0x8a, 0xa3, 0x58, 0x29, 0xd4, 0xb4, 0xdb, 0x41, 0xf7, 0x77, 0xce, 0xfd, 0xa3,
+	0xe8, 0x41, 0x03, 0xe8, 0xa5, 0xa2, 0x42, 0x22, 0x75, 0xb2, 0x55, 0xab, 0x98, 0x5a, 0x85, 0xd0,
+	0xd8, 0x5c, 0x21, 0x15, 0x32, 0xd3, 0x16, 0x9a, 0x2a, 0x13, 0x8d, 0x2c, 0x94, 0xc9, 0x55, 0xb6,
+	0x2a, 0xd4, 0x9a, 0x54, 0x16, 0x6a, 0x18, 0x8c, 0x9d, 0x89, 0x08, 0x89, 0xc4, 0xfb, 0xc9, 0x2a,
+	0x26, 0xde, 0x3f, 0xba, 0xe8, 0x5a, 0x54, 0x85, 0x4f, 0x75, 0xee, 0xd1, 0xe5, 0xb7, 0x92, 0x30,
+	0x06, 0x6a, 0x51, 0x17, 0x60, 0xd0, 0x55, 0xaf, 0x3f, 0x82, 0xe8, 0x9c, 0xcb, 0x59, 0xdb, 0x9b,
+	0x1f, 0x5a, 0x27, 0x85, 0x5a, 0x0f, 0x6e, 0xa2, 0xb3, 0x2e, 0x27, 0x33, 0xa2, 0x54, 0xc3, 0xe0,
+	0x2a, 0xb8, 0x3d, 0x59, 0x9c, 0x76, 0x8f, 0x4f, 0xa2, 0x54, 0xac, 0xd9, 0x71, 0x1b, 0xdd, 0x1d,
+	0x47, 0x3a, 0xa8, 0xaa, 0x40, 0x92, 0x43, 0x49, 0xfb, 0x72, 0xa7, 0x79, 0x83, 0x35, 0x94, 0xca,
+	0x22, 0xdd, 0x74, 0x72, 0x4b, 0xc5, 0x4f, 0x12, 0xe9, 0xa6, 0xff, 0x28, 0xdb, 0xe9, 0x6b, 0x18,
+	0x4d, 0x72, 0x28, 0xc9, 0x9f, 0x67, 0x99, 0x0e, 0x7b, 0x46, 0x98, 0xb7, 0x7b, 0xcf, 0x83, 0xe7,
+	0xc7, 0x83, 0x5d, 0xc3, 0x52, 0x18, 0x4d, 0xc0, 0x6a, 0xaa, 0x95, 0xd9, 0x5f, 0x85, 0x1e, 0x17,
+	0xf9, 0xe5, 0xd3, 0xee, 0xbd, 0x7a, 0x0b, 0xff, 0xcd, 0x38, 0x7f, 0x0f, 0xc7, 0x33, 0x17, 0xc9,
+	0x25, 0x12, 0x27, 0x5b, 0x95, 0xc4, 0x64, 0xd1, 0x91, 0x9f, 0x1d, 0x93, 0x72, 0x89, 0xa9, 0x67,
+	0xd2, 0x24, 0x4e, 0x3d, 0xb3, 0x0b, 0x27, 0xae, 0xc0, 0x18, 0x97, 0xc8, 0x98, 0xa7, 0x18, 0x4b,
+	0x62, 0xc6, 0x3c, 0xf7, 0xf2, 0x7f, 0x3f, 0x6c, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xf2,
+	0x24, 0x30, 0x60, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_bid_modifier.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_bid_modifier.pb.go
new file mode 100644
index 0000000..7968cea
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_bid_modifier.pb.go
@@ -0,0 +1,293 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_bid_modifier.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents an ad group bid modifier.
+type AdGroupBidModifier struct {
+	// The resource name of the ad group bid modifier.
+	// Ad group bid modifier resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}~{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group to which this criterion belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ID of the criterion to bid modify.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bid when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. The range is 1.0 - 6.0 for PreferredContent.
+	// Use 0 to opt out of a Device type.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The base ad group from which this draft/trial adgroup bid modifier was
+	// created. If ad_group is a base ad group then this field will be equal to
+	// ad_group. If the ad group was created in the draft or trial and has no
+	// corresponding base ad group, then this field will be null.
+	// This field is readonly.
+	BaseAdGroup *wrappers.StringValue `protobuf:"bytes,9,opt,name=base_ad_group,json=baseAdGroup,proto3" json:"base_ad_group,omitempty"`
+	// Bid modifier source.
+	BidModifierSource enums.BidModifierSourceEnum_BidModifierSource `protobuf:"varint,10,opt,name=bid_modifier_source,json=bidModifierSource,proto3,enum=google.ads.googleads.v3.enums.BidModifierSourceEnum_BidModifierSource" json:"bid_modifier_source,omitempty"`
+	// The criterion of this ad group bid modifier.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*AdGroupBidModifier_HotelDateSelectionType
+	//	*AdGroupBidModifier_HotelAdvanceBookingWindow
+	//	*AdGroupBidModifier_HotelLengthOfStay
+	//	*AdGroupBidModifier_HotelCheckInDay
+	//	*AdGroupBidModifier_Device
+	//	*AdGroupBidModifier_PreferredContent
+	Criterion            isAdGroupBidModifier_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *AdGroupBidModifier) Reset()         { *m = AdGroupBidModifier{} }
+func (m *AdGroupBidModifier) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifier) ProtoMessage()    {}
+func (*AdGroupBidModifier) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d9b50cb17f277d0c, []int{0}
+}
+
+func (m *AdGroupBidModifier) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifier.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifier.Marshal(b, m, deterministic)
+}
+func (m *AdGroupBidModifier) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifier.Merge(m, src)
+}
+func (m *AdGroupBidModifier) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifier.Size(m)
+}
+func (m *AdGroupBidModifier) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifier.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifier proto.InternalMessageInfo
+
+func (m *AdGroupBidModifier) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupBidModifier) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBaseAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.BaseAdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBidModifierSource() enums.BidModifierSourceEnum_BidModifierSource {
+	if m != nil {
+		return m.BidModifierSource
+	}
+	return enums.BidModifierSourceEnum_UNSPECIFIED
+}
+
+type isAdGroupBidModifier_Criterion interface {
+	isAdGroupBidModifier_Criterion()
+}
+
+type AdGroupBidModifier_HotelDateSelectionType struct {
+	HotelDateSelectionType *common.HotelDateSelectionTypeInfo `protobuf:"bytes,5,opt,name=hotel_date_selection_type,json=hotelDateSelectionType,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelAdvanceBookingWindow struct {
+	HotelAdvanceBookingWindow *common.HotelAdvanceBookingWindowInfo `protobuf:"bytes,6,opt,name=hotel_advance_booking_window,json=hotelAdvanceBookingWindow,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelLengthOfStay struct {
+	HotelLengthOfStay *common.HotelLengthOfStayInfo `protobuf:"bytes,7,opt,name=hotel_length_of_stay,json=hotelLengthOfStay,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelCheckInDay struct {
+	HotelCheckInDay *common.HotelCheckInDayInfo `protobuf:"bytes,8,opt,name=hotel_check_in_day,json=hotelCheckInDay,proto3,oneof"`
+}
+
+type AdGroupBidModifier_Device struct {
+	Device *common.DeviceInfo `protobuf:"bytes,11,opt,name=device,proto3,oneof"`
+}
+
+type AdGroupBidModifier_PreferredContent struct {
+	PreferredContent *common.PreferredContentInfo `protobuf:"bytes,12,opt,name=preferred_content,json=preferredContent,proto3,oneof"`
+}
+
+func (*AdGroupBidModifier_HotelDateSelectionType) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelAdvanceBookingWindow) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelLengthOfStay) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelCheckInDay) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_Device) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_PreferredContent) isAdGroupBidModifier_Criterion() {}
+
+func (m *AdGroupBidModifier) GetCriterion() isAdGroupBidModifier_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelDateSelectionType() *common.HotelDateSelectionTypeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelDateSelectionType); ok {
+		return x.HotelDateSelectionType
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelAdvanceBookingWindow() *common.HotelAdvanceBookingWindowInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelAdvanceBookingWindow); ok {
+		return x.HotelAdvanceBookingWindow
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelLengthOfStay() *common.HotelLengthOfStayInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelLengthOfStay); ok {
+		return x.HotelLengthOfStay
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelCheckInDay() *common.HotelCheckInDayInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelCheckInDay); ok {
+		return x.HotelCheckInDay
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetDevice() *common.DeviceInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_Device); ok {
+		return x.Device
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetPreferredContent() *common.PreferredContentInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_PreferredContent); ok {
+		return x.PreferredContent
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupBidModifier) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupBidModifier_HotelDateSelectionType)(nil),
+		(*AdGroupBidModifier_HotelAdvanceBookingWindow)(nil),
+		(*AdGroupBidModifier_HotelLengthOfStay)(nil),
+		(*AdGroupBidModifier_HotelCheckInDay)(nil),
+		(*AdGroupBidModifier_Device)(nil),
+		(*AdGroupBidModifier_PreferredContent)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*AdGroupBidModifier)(nil), "google.ads.googleads.v3.resources.AdGroupBidModifier")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_bid_modifier.proto", fileDescriptor_d9b50cb17f277d0c)
+}
+
+var fileDescriptor_d9b50cb17f277d0c = []byte{
+	// 739 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdf, 0x6e, 0xdb, 0x36,
+	0x14, 0xc6, 0x67, 0x67, 0x4b, 0x62, 0xda, 0xd9, 0x16, 0x6d, 0xd8, 0x94, 0x2c, 0x18, 0x92, 0x0d,
+	0x01, 0x82, 0x0d, 0x93, 0x80, 0x38, 0x5b, 0x00, 0x0d, 0xd9, 0x22, 0xc7, 0x6d, 0xe2, 0xa2, 0x7f,
+	0x02, 0xbb, 0x70, 0x81, 0xc2, 0x00, 0x41, 0x89, 0xb4, 0x2c, 0xc4, 0x22, 0x05, 0x92, 0xb2, 0x61,
+	0x04, 0x01, 0x7a, 0xd1, 0x27, 0x69, 0xef, 0xfa, 0x28, 0x7d, 0x94, 0x3c, 0x45, 0x21, 0x91, 0x52,
+	0xdc, 0xd8, 0x6e, 0x7c, 0x77, 0xcc, 0x73, 0x7e, 0xdf, 0x77, 0x78, 0x28, 0xd2, 0xe0, 0x24, 0x60,
+	0x2c, 0x18, 0x12, 0x1b, 0x61, 0x61, 0xab, 0x30, 0x8d, 0x46, 0x75, 0x9b, 0x13, 0xc1, 0x12, 0xee,
+	0x13, 0x61, 0x23, 0x0c, 0x03, 0xce, 0x92, 0x18, 0x7a, 0x21, 0x86, 0x11, 0xc3, 0x61, 0x3f, 0x24,
+	0xdc, 0x8a, 0x39, 0x93, 0xcc, 0xd8, 0x53, 0x8c, 0x85, 0xb0, 0xb0, 0x0a, 0xdc, 0x1a, 0xd5, 0xad,
+	0x02, 0xdf, 0xfe, 0x6b, 0x91, 0x83, 0xcf, 0xa2, 0x88, 0x51, 0xdb, 0xe7, 0xa1, 0x24, 0x3c, 0x44,
+	0x4a, 0x71, 0xfb, 0x78, 0x51, 0x39, 0xa1, 0x49, 0x24, 0xec, 0xe9, 0x1e, 0xa0, 0xb2, 0xd0, 0xe0,
+	0x56, 0x0e, 0xc6, 0x61, 0xd1, 0xbc, 0x4e, 0xfd, 0xaa, 0x53, 0xd9, 0x2f, 0x2f, 0xe9, 0xdb, 0x63,
+	0x8e, 0xe2, 0x98, 0x70, 0xa1, 0xf3, 0x3b, 0x53, 0x28, 0xa2, 0x94, 0x49, 0x24, 0x43, 0x46, 0x75,
+	0xf6, 0xb7, 0xf7, 0x15, 0x60, 0xb8, 0xf8, 0x3c, 0x1d, 0x41, 0x23, 0xc4, 0xcf, 0xb4, 0xb9, 0xf1,
+	0x3b, 0xd8, 0xc8, 0x6d, 0x20, 0x45, 0x11, 0x31, 0x4b, 0xbb, 0xa5, 0x83, 0x4a, 0xbb, 0x96, 0x2f,
+	0x3e, 0x47, 0x11, 0x31, 0x8e, 0xc1, 0x7a, 0x3e, 0x3e, 0xb3, 0xbc, 0x5b, 0x3a, 0xa8, 0x1e, 0xee,
+	0xe8, 0x39, 0x59, 0x79, 0x33, 0x56, 0x47, 0xf2, 0x90, 0x06, 0x5d, 0x34, 0x4c, 0x48, 0x7b, 0x0d,
+	0x29, 0x23, 0xe3, 0x3f, 0x50, 0xd3, 0x83, 0x61, 0x14, 0x86, 0xd8, 0x5c, 0xc9, 0xe0, 0x5f, 0x66,
+	0xe0, 0x16, 0x95, 0xff, 0x1c, 0x29, 0xb6, 0x5a, 0x00, 0x2d, 0x6c, 0xfc, 0x0f, 0x6a, 0xd3, 0xa3,
+	0x32, 0xbf, 0x5e, 0x60, 0xde, 0x64, 0x89, 0x37, 0x24, 0x5a, 0xc0, 0x9b, 0xda, 0xde, 0x29, 0xd8,
+	0xf0, 0x90, 0x20, 0xb0, 0x68, 0xbf, 0xb2, 0x44, 0xfb, 0xd5, 0x14, 0xd1, 0xb3, 0x32, 0x46, 0xe0,
+	0x87, 0x39, 0xa7, 0x65, 0x82, 0xdd, 0xd2, 0xc1, 0xb7, 0x87, 0x8f, 0xad, 0x45, 0x5f, 0x4e, 0x76,
+	0xce, 0xd6, 0xd4, 0xa4, 0x3b, 0x19, 0xf7, 0x88, 0x26, 0xd1, 0xec, 0x6a, 0x7b, 0xd3, 0xbb, 0xbf,
+	0x64, 0x8c, 0xc1, 0xd6, 0x80, 0x49, 0x32, 0x84, 0x18, 0x49, 0x02, 0x05, 0x19, 0x12, 0x3f, 0x3d,
+	0x4e, 0x28, 0x27, 0x31, 0x31, 0xbf, 0xc9, 0x76, 0xe1, 0x2c, 0x74, 0x57, 0x1f, 0xa5, 0x75, 0x91,
+	0x0a, 0x34, 0x91, 0x24, 0x9d, 0x1c, 0x7f, 0x39, 0x89, 0x49, 0x8b, 0xf6, 0xd9, 0xc5, 0x57, 0xed,
+	0x9f, 0x06, 0x73, 0xb3, 0xc6, 0x9b, 0x12, 0xd8, 0x51, 0xce, 0x08, 0x8f, 0x10, 0xf5, 0x09, 0xf4,
+	0x18, 0xbb, 0x0a, 0x69, 0x00, 0xc7, 0x21, 0xc5, 0x6c, 0x6c, 0xae, 0x66, 0xe6, 0x27, 0x4b, 0x99,
+	0xbb, 0x4a, 0xa2, 0xa1, 0x14, 0x5e, 0x65, 0x02, 0xda, 0x5f, 0x6d, 0x6f, 0x5e, 0x81, 0x31, 0x00,
+	0x3f, 0xaa, 0x0e, 0x86, 0x84, 0x06, 0x72, 0x00, 0x59, 0x1f, 0x0a, 0x89, 0x26, 0xe6, 0x5a, 0xe6,
+	0xfc, 0xf7, 0x52, 0xce, 0x4f, 0x33, 0xf4, 0x45, 0xbf, 0x23, 0xd1, 0x44, 0x3b, 0x6e, 0x0e, 0xee,
+	0x27, 0x0c, 0x0f, 0x18, 0xca, 0xc9, 0x1f, 0x10, 0xff, 0x0a, 0x86, 0x14, 0x62, 0x34, 0x31, 0xd7,
+	0x33, 0x9f, 0xfa, 0x52, 0x3e, 0x67, 0x29, 0xd8, 0xa2, 0xcd, 0xc2, 0xe5, 0xbb, 0xc1, 0xe7, 0xcb,
+	0x46, 0x13, 0xac, 0x62, 0x32, 0x0a, 0x7d, 0x62, 0x56, 0x33, 0xdd, 0x3f, 0x1e, 0xd2, 0x6d, 0x66,
+	0xd5, 0x5a, 0x4e, 0xb3, 0x86, 0x0f, 0x36, 0x63, 0x4e, 0xfa, 0x84, 0x73, 0x82, 0xa1, 0xcf, 0xa8,
+	0x24, 0x54, 0x9a, 0xb5, 0x4c, 0xf0, 0xe8, 0x21, 0xc1, 0xcb, 0x1c, 0x3c, 0x53, 0x9c, 0x96, 0xfe,
+	0x3e, 0xbe, 0xb7, 0xee, 0xf0, 0x5b, 0x97, 0x81, 0x3f, 0xef, 0x24, 0x74, 0x14, 0x87, 0x22, 0x95,
+	0xb2, 0xe7, 0xbc, 0x1f, 0xa7, 0x7e, 0x22, 0x24, 0x8b, 0x08, 0x17, 0xf6, 0x75, 0x1e, 0xde, 0xd8,
+	0x68, 0xa6, 0x50, 0xd8, 0xd7, 0x73, 0x5f, 0xe0, 0x9b, 0x46, 0x15, 0x54, 0x8a, 0x2b, 0xdf, 0x78,
+	0x5b, 0x06, 0xfb, 0x3e, 0x8b, 0xac, 0x07, 0x1f, 0xe4, 0xc6, 0xcf, 0xb3, 0xcd, 0x5c, 0xa6, 0x97,
+	0xf9, 0xb2, 0xf4, 0xfa, 0x89, 0xa6, 0x03, 0x36, 0x44, 0x34, 0xb0, 0x18, 0x0f, 0xec, 0x80, 0xd0,
+	0xec, 0xaa, 0xdb, 0x77, 0x3b, 0xfa, 0xc2, 0x9f, 0xc5, 0xbf, 0x45, 0xf4, 0xae, 0xbc, 0x72, 0xee,
+	0xba, 0x1f, 0xca, 0x7b, 0xe7, 0x4a, 0xd2, 0xc5, 0xc2, 0x52, 0x61, 0x1a, 0x75, 0xeb, 0x56, 0x3b,
+	0xaf, 0xfc, 0x98, 0xd7, 0xf4, 0x5c, 0x2c, 0x7a, 0x45, 0x4d, 0xaf, 0x5b, 0xef, 0x15, 0x35, 0xb7,
+	0xe5, 0x7d, 0x95, 0x70, 0x1c, 0x17, 0x0b, 0xc7, 0x29, 0xaa, 0x1c, 0xa7, 0x5b, 0x77, 0x9c, 0xa2,
+	0xce, 0x5b, 0xcd, 0x9a, 0xad, 0x7f, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x6a, 0xf7, 0x63, 0xec, 0xd8,
+	0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_criterion.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_criterion.pb.go
new file mode 100644
index 0000000..3eab7eb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_criterion.pb.go
@@ -0,0 +1,893 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_criterion.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group criterion.
+type AdGroupCriterion struct {
+	// The resource name of the ad group criterion.
+	// Ad group criterion resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,26,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The status of the criterion.
+	Status enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus" json:"status,omitempty"`
+	// Information regarding the quality of the criterion.
+	QualityInfo *AdGroupCriterion_QualityInfo `protobuf:"bytes,4,opt,name=quality_info,json=qualityInfo,proto3" json:"quality_info,omitempty"`
+	// The ad group to which the criterion belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,5,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,25,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// Whether to target (`false`) or exclude (`true`) the criterion.
+	//
+	// This field is immutable. To switch a criterion from positive to negative,
+	// remove then re-add it.
+	Negative *wrappers.BoolValue `protobuf:"bytes,31,opt,name=negative,proto3" json:"negative,omitempty"`
+	// Serving status of the criterion.
+	SystemServingStatus enums.CriterionSystemServingStatusEnum_CriterionSystemServingStatus `protobuf:"varint,52,opt,name=system_serving_status,json=systemServingStatus,proto3,enum=google.ads.googleads.v3.enums.CriterionSystemServingStatusEnum_CriterionSystemServingStatus" json:"system_serving_status,omitempty"`
+	// Approval status of the criterion.
+	ApprovalStatus enums.AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus `protobuf:"varint,53,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus" json:"approval_status,omitempty"`
+	// The modifier for the bid when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,44,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The CPC (cost-per-click) bid.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,16,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The CPM (cost-per-thousand viewable impressions) bid.
+	CpmBidMicros *wrappers.Int64Value `protobuf:"bytes,17,opt,name=cpm_bid_micros,json=cpmBidMicros,proto3" json:"cpm_bid_micros,omitempty"`
+	// The CPV (cost-per-view) bid.
+	CpvBidMicros *wrappers.Int64Value `protobuf:"bytes,24,opt,name=cpv_bid_micros,json=cpvBidMicros,proto3" json:"cpv_bid_micros,omitempty"`
+	// The CPC bid amount, expressed as a fraction of the advertised price
+	// for some good or service. The valid range for the fraction is [0,1) and the
+	// value stored here is 1,000,000 * [fraction].
+	PercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,33,opt,name=percent_cpc_bid_micros,json=percentCpcBidMicros,proto3" json:"percent_cpc_bid_micros,omitempty"`
+	// The effective CPC (cost-per-click) bid.
+	EffectiveCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,18,opt,name=effective_cpc_bid_micros,json=effectiveCpcBidMicros,proto3" json:"effective_cpc_bid_micros,omitempty"`
+	// The effective CPM (cost-per-thousand viewable impressions) bid.
+	EffectiveCpmBidMicros *wrappers.Int64Value `protobuf:"bytes,19,opt,name=effective_cpm_bid_micros,json=effectiveCpmBidMicros,proto3" json:"effective_cpm_bid_micros,omitempty"`
+	// The effective CPV (cost-per-view) bid.
+	EffectiveCpvBidMicros *wrappers.Int64Value `protobuf:"bytes,20,opt,name=effective_cpv_bid_micros,json=effectiveCpvBidMicros,proto3" json:"effective_cpv_bid_micros,omitempty"`
+	// The effective Percent CPC bid amount.
+	EffectivePercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,34,opt,name=effective_percent_cpc_bid_micros,json=effectivePercentCpcBidMicros,proto3" json:"effective_percent_cpc_bid_micros,omitempty"`
+	// Source of the effective CPC bid.
+	EffectiveCpcBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,21,opt,name=effective_cpc_bid_source,json=effectiveCpcBidSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpc_bid_source,omitempty"`
+	// Source of the effective CPM bid.
+	EffectiveCpmBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,22,opt,name=effective_cpm_bid_source,json=effectiveCpmBidSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpm_bid_source,omitempty"`
+	// Source of the effective CPV bid.
+	EffectiveCpvBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,23,opt,name=effective_cpv_bid_source,json=effectiveCpvBidSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpv_bid_source,omitempty"`
+	// Source of the effective Percent CPC bid.
+	EffectivePercentCpcBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,35,opt,name=effective_percent_cpc_bid_source,json=effectivePercentCpcBidSource,proto3,enum=google.ads.googleads.v3.enums.BiddingSourceEnum_BiddingSource" json:"effective_percent_cpc_bid_source,omitempty"`
+	// Estimates for criterion bids at various positions.
+	PositionEstimates *AdGroupCriterion_PositionEstimates `protobuf:"bytes,10,opt,name=position_estimates,json=positionEstimates,proto3" json:"position_estimates,omitempty"`
+	// The list of possible final URLs after all cross-domain redirects for the
+	// ad.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,11,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// The list of possible final mobile URLs after all cross-domain redirects.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,51,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// URL template for appending params to final URL.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,50,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,13,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,14,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The ad group criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*AdGroupCriterion_Keyword
+	//	*AdGroupCriterion_Placement
+	//	*AdGroupCriterion_MobileAppCategory
+	//	*AdGroupCriterion_MobileApplication
+	//	*AdGroupCriterion_ListingGroup
+	//	*AdGroupCriterion_AgeRange
+	//	*AdGroupCriterion_Gender
+	//	*AdGroupCriterion_IncomeRange
+	//	*AdGroupCriterion_ParentalStatus
+	//	*AdGroupCriterion_UserList
+	//	*AdGroupCriterion_YoutubeVideo
+	//	*AdGroupCriterion_YoutubeChannel
+	//	*AdGroupCriterion_Topic
+	//	*AdGroupCriterion_UserInterest
+	//	*AdGroupCriterion_Webpage
+	//	*AdGroupCriterion_AppPaymentModel
+	//	*AdGroupCriterion_CustomAffinity
+	//	*AdGroupCriterion_CustomIntent
+	Criterion            isAdGroupCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *AdGroupCriterion) Reset()         { *m = AdGroupCriterion{} }
+func (m *AdGroupCriterion) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion) ProtoMessage()    {}
+func (*AdGroupCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dbeea8b4a62ffe2f, []int{0}
+}
+
+func (m *AdGroupCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion.Merge(m, src)
+}
+func (m *AdGroupCriterion) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion.Size(m)
+}
+func (m *AdGroupCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion proto.InternalMessageInfo
+
+func (m *AdGroupCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetStatus() enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupCriterionStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetQualityInfo() *AdGroupCriterion_QualityInfo {
+	if m != nil {
+		return m.QualityInfo
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetNegative() *wrappers.BoolValue {
+	if m != nil {
+		return m.Negative
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetSystemServingStatus() enums.CriterionSystemServingStatusEnum_CriterionSystemServingStatus {
+	if m != nil {
+		return m.SystemServingStatus
+	}
+	return enums.CriterionSystemServingStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetApprovalStatus() enums.AdGroupCriterionApprovalStatusEnum_AdGroupCriterionApprovalStatus {
+	if m != nil {
+		return m.ApprovalStatus
+	}
+	return enums.AdGroupCriterionApprovalStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetPercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.PercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectivePercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectivePercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpcBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpcBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpmBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpmBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpvBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpvBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectivePercentCpcBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectivePercentCpcBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetPositionEstimates() *AdGroupCriterion_PositionEstimates {
+	if m != nil {
+		return m.PositionEstimates
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+type isAdGroupCriterion_Criterion interface {
+	isAdGroupCriterion_Criterion()
+}
+
+type AdGroupCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,27,opt,name=keyword,proto3,oneof"`
+}
+
+type AdGroupCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,28,opt,name=placement,proto3,oneof"`
+}
+
+type AdGroupCriterion_MobileAppCategory struct {
+	MobileAppCategory *common.MobileAppCategoryInfo `protobuf:"bytes,29,opt,name=mobile_app_category,json=mobileAppCategory,proto3,oneof"`
+}
+
+type AdGroupCriterion_MobileApplication struct {
+	MobileApplication *common.MobileApplicationInfo `protobuf:"bytes,30,opt,name=mobile_application,json=mobileApplication,proto3,oneof"`
+}
+
+type AdGroupCriterion_ListingGroup struct {
+	ListingGroup *common.ListingGroupInfo `protobuf:"bytes,32,opt,name=listing_group,json=listingGroup,proto3,oneof"`
+}
+
+type AdGroupCriterion_AgeRange struct {
+	AgeRange *common.AgeRangeInfo `protobuf:"bytes,36,opt,name=age_range,json=ageRange,proto3,oneof"`
+}
+
+type AdGroupCriterion_Gender struct {
+	Gender *common.GenderInfo `protobuf:"bytes,37,opt,name=gender,proto3,oneof"`
+}
+
+type AdGroupCriterion_IncomeRange struct {
+	IncomeRange *common.IncomeRangeInfo `protobuf:"bytes,38,opt,name=income_range,json=incomeRange,proto3,oneof"`
+}
+
+type AdGroupCriterion_ParentalStatus struct {
+	ParentalStatus *common.ParentalStatusInfo `protobuf:"bytes,39,opt,name=parental_status,json=parentalStatus,proto3,oneof"`
+}
+
+type AdGroupCriterion_UserList struct {
+	UserList *common.UserListInfo `protobuf:"bytes,42,opt,name=user_list,json=userList,proto3,oneof"`
+}
+
+type AdGroupCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,40,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type AdGroupCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,41,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type AdGroupCriterion_Topic struct {
+	Topic *common.TopicInfo `protobuf:"bytes,43,opt,name=topic,proto3,oneof"`
+}
+
+type AdGroupCriterion_UserInterest struct {
+	UserInterest *common.UserInterestInfo `protobuf:"bytes,45,opt,name=user_interest,json=userInterest,proto3,oneof"`
+}
+
+type AdGroupCriterion_Webpage struct {
+	Webpage *common.WebpageInfo `protobuf:"bytes,46,opt,name=webpage,proto3,oneof"`
+}
+
+type AdGroupCriterion_AppPaymentModel struct {
+	AppPaymentModel *common.AppPaymentModelInfo `protobuf:"bytes,47,opt,name=app_payment_model,json=appPaymentModel,proto3,oneof"`
+}
+
+type AdGroupCriterion_CustomAffinity struct {
+	CustomAffinity *common.CustomAffinityInfo `protobuf:"bytes,48,opt,name=custom_affinity,json=customAffinity,proto3,oneof"`
+}
+
+type AdGroupCriterion_CustomIntent struct {
+	CustomIntent *common.CustomIntentInfo `protobuf:"bytes,49,opt,name=custom_intent,json=customIntent,proto3,oneof"`
+}
+
+func (*AdGroupCriterion_Keyword) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Placement) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_MobileAppCategory) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_MobileApplication) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_ListingGroup) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_AgeRange) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Gender) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_IncomeRange) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_ParentalStatus) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_UserList) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_YoutubeVideo) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_YoutubeChannel) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Topic) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_UserInterest) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Webpage) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_AppPaymentModel) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_CustomAffinity) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_CustomIntent) isAdGroupCriterion_Criterion() {}
+
+func (m *AdGroupCriterion) GetCriterion() isAdGroupCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetMobileAppCategory() *common.MobileAppCategoryInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_MobileAppCategory); ok {
+		return x.MobileAppCategory
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetMobileApplication() *common.MobileApplicationInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_MobileApplication); ok {
+		return x.MobileApplication
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetListingGroup() *common.ListingGroupInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_ListingGroup); ok {
+		return x.ListingGroup
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetAgeRange() *common.AgeRangeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_AgeRange); ok {
+		return x.AgeRange
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetGender() *common.GenderInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Gender); ok {
+		return x.Gender
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetIncomeRange() *common.IncomeRangeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_IncomeRange); ok {
+		return x.IncomeRange
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetParentalStatus() *common.ParentalStatusInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_ParentalStatus); ok {
+		return x.ParentalStatus
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUserList() *common.UserListInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_UserList); ok {
+		return x.UserList
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetTopic() *common.TopicInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Topic); ok {
+		return x.Topic
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUserInterest() *common.UserInterestInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_UserInterest); ok {
+		return x.UserInterest
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetWebpage() *common.WebpageInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Webpage); ok {
+		return x.Webpage
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetAppPaymentModel() *common.AppPaymentModelInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_AppPaymentModel); ok {
+		return x.AppPaymentModel
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCustomAffinity() *common.CustomAffinityInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_CustomAffinity); ok {
+		return x.CustomAffinity
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCustomIntent() *common.CustomIntentInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_CustomIntent); ok {
+		return x.CustomIntent
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupCriterion) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupCriterion_Keyword)(nil),
+		(*AdGroupCriterion_Placement)(nil),
+		(*AdGroupCriterion_MobileAppCategory)(nil),
+		(*AdGroupCriterion_MobileApplication)(nil),
+		(*AdGroupCriterion_ListingGroup)(nil),
+		(*AdGroupCriterion_AgeRange)(nil),
+		(*AdGroupCriterion_Gender)(nil),
+		(*AdGroupCriterion_IncomeRange)(nil),
+		(*AdGroupCriterion_ParentalStatus)(nil),
+		(*AdGroupCriterion_UserList)(nil),
+		(*AdGroupCriterion_YoutubeVideo)(nil),
+		(*AdGroupCriterion_YoutubeChannel)(nil),
+		(*AdGroupCriterion_Topic)(nil),
+		(*AdGroupCriterion_UserInterest)(nil),
+		(*AdGroupCriterion_Webpage)(nil),
+		(*AdGroupCriterion_AppPaymentModel)(nil),
+		(*AdGroupCriterion_CustomAffinity)(nil),
+		(*AdGroupCriterion_CustomIntent)(nil),
+	}
+}
+
+// A container for ad group criterion quality information.
+type AdGroupCriterion_QualityInfo struct {
+	// The quality score.
+	//
+	// This field may not be populated if Google does not have enough
+	// information to determine a value.
+	QualityScore *wrappers.Int32Value `protobuf:"bytes,1,opt,name=quality_score,json=qualityScore,proto3" json:"quality_score,omitempty"`
+	// The performance of the ad compared to other advertisers.
+	CreativeQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,2,opt,name=creative_quality_score,json=creativeQualityScore,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"creative_quality_score,omitempty"`
+	// The quality score of the landing page.
+	PostClickQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,3,opt,name=post_click_quality_score,json=postClickQualityScore,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"post_click_quality_score,omitempty"`
+	// The click-through rate compared to that of other advertisers.
+	SearchPredictedCtr   enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,4,opt,name=search_predicted_ctr,json=searchPredictedCtr,proto3,enum=google.ads.googleads.v3.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"search_predicted_ctr,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *AdGroupCriterion_QualityInfo) Reset()         { *m = AdGroupCriterion_QualityInfo{} }
+func (m *AdGroupCriterion_QualityInfo) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion_QualityInfo) ProtoMessage()    {}
+func (*AdGroupCriterion_QualityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dbeea8b4a62ffe2f, []int{0, 0}
+}
+
+func (m *AdGroupCriterion_QualityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion_QualityInfo.Merge(m, src)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Size(m)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion_QualityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion_QualityInfo proto.InternalMessageInfo
+
+func (m *AdGroupCriterion_QualityInfo) GetQualityScore() *wrappers.Int32Value {
+	if m != nil {
+		return m.QualityScore
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetCreativeQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.CreativeQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetPostClickQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.PostClickQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetSearchPredictedCtr() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.SearchPredictedCtr
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+// Estimates for criterion bids at various positions.
+type AdGroupCriterion_PositionEstimates struct {
+	// The estimate of the CPC bid required for ad to be shown on first
+	// page of search results.
+	FirstPageCpcMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=first_page_cpc_micros,json=firstPageCpcMicros,proto3" json:"first_page_cpc_micros,omitempty"`
+	// The estimate of the CPC bid required for ad to be displayed in first
+	// position, at the top of the first page of search results.
+	FirstPositionCpcMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=first_position_cpc_micros,json=firstPositionCpcMicros,proto3" json:"first_position_cpc_micros,omitempty"`
+	// The estimate of the CPC bid required for ad to be displayed at the top
+	// of the first page of search results.
+	TopOfPageCpcMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=top_of_page_cpc_micros,json=topOfPageCpcMicros,proto3" json:"top_of_page_cpc_micros,omitempty"`
+	// Estimate of how many clicks per week you might get by changing your
+	// keyword bid to the value in first_position_cpc_micros.
+	EstimatedAddClicksAtFirstPositionCpc *wrappers.Int64Value `protobuf:"bytes,4,opt,name=estimated_add_clicks_at_first_position_cpc,json=estimatedAddClicksAtFirstPositionCpc,proto3" json:"estimated_add_clicks_at_first_position_cpc,omitempty"`
+	// Estimate of how your cost per week might change when changing your
+	// keyword bid to the value in first_position_cpc_micros.
+	EstimatedAddCostAtFirstPositionCpc *wrappers.Int64Value `protobuf:"bytes,5,opt,name=estimated_add_cost_at_first_position_cpc,json=estimatedAddCostAtFirstPositionCpc,proto3" json:"estimated_add_cost_at_first_position_cpc,omitempty"`
+	XXX_NoUnkeyedLiteral               struct{}             `json:"-"`
+	XXX_unrecognized                   []byte               `json:"-"`
+	XXX_sizecache                      int32                `json:"-"`
+}
+
+func (m *AdGroupCriterion_PositionEstimates) Reset()         { *m = AdGroupCriterion_PositionEstimates{} }
+func (m *AdGroupCriterion_PositionEstimates) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion_PositionEstimates) ProtoMessage()    {}
+func (*AdGroupCriterion_PositionEstimates) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dbeea8b4a62ffe2f, []int{0, 1}
+}
+
+func (m *AdGroupCriterion_PositionEstimates) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion_PositionEstimates.Merge(m, src)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Size(m)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion_PositionEstimates.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion_PositionEstimates proto.InternalMessageInfo
+
+func (m *AdGroupCriterion_PositionEstimates) GetFirstPageCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.FirstPageCpcMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetFirstPositionCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.FirstPositionCpcMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetTopOfPageCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TopOfPageCpcMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetEstimatedAddClicksAtFirstPositionCpc() *wrappers.Int64Value {
+	if m != nil {
+		return m.EstimatedAddClicksAtFirstPositionCpc
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetEstimatedAddCostAtFirstPositionCpc() *wrappers.Int64Value {
+	if m != nil {
+		return m.EstimatedAddCostAtFirstPositionCpc
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroupCriterion)(nil), "google.ads.googleads.v3.resources.AdGroupCriterion")
+	proto.RegisterType((*AdGroupCriterion_QualityInfo)(nil), "google.ads.googleads.v3.resources.AdGroupCriterion.QualityInfo")
+	proto.RegisterType((*AdGroupCriterion_PositionEstimates)(nil), "google.ads.googleads.v3.resources.AdGroupCriterion.PositionEstimates")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_criterion.proto", fileDescriptor_dbeea8b4a62ffe2f)
+}
+
+var fileDescriptor_dbeea8b4a62ffe2f = []byte{
+	// 1749 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x98, 0xdd, 0x72, 0x1b, 0xb7,
+	0x15, 0xc7, 0x4b, 0x29, 0x76, 0x2c, 0x48, 0x96, 0x2d, 0xc8, 0x52, 0x61, 0xc5, 0x4d, 0x65, 0x27,
+	0x6e, 0x65, 0x27, 0x26, 0x53, 0x31, 0x4e, 0x5b, 0x66, 0x9a, 0x94, 0x52, 0x6c, 0x59, 0x4d, 0x95,
+	0x30, 0x94, 0xac, 0x4c, 0x3b, 0xea, 0x6c, 0xc1, 0x5d, 0x70, 0x8d, 0xf1, 0xee, 0x02, 0x06, 0xb0,
+	0x74, 0xd9, 0x4c, 0x3a, 0xd3, 0x5e, 0x74, 0xa6, 0x77, 0x7d, 0x86, 0x5e, 0xf6, 0xa2, 0x0f, 0xd2,
+	0x9b, 0xbe, 0x47, 0x1e, 0xa0, 0xd7, 0x1d, 0x7c, 0x91, 0x4b, 0x52, 0xe4, 0x52, 0x1d, 0xdd, 0xed,
+	0x62, 0xcf, 0xff, 0x77, 0x0e, 0x0e, 0xce, 0x62, 0x0f, 0x16, 0x34, 0x62, 0xc6, 0xe2, 0x84, 0xd4,
+	0x70, 0x24, 0x6b, 0xf6, 0x52, 0x5f, 0xf5, 0xea, 0x35, 0x41, 0x24, 0xcb, 0x45, 0x48, 0x64, 0x0d,
+	0x47, 0x41, 0x2c, 0x58, 0xce, 0x83, 0x50, 0x50, 0x45, 0x04, 0x65, 0x59, 0x95, 0x0b, 0xa6, 0x18,
+	0xbc, 0x6b, 0x05, 0x55, 0x1c, 0xc9, 0xea, 0x40, 0x5b, 0xed, 0xd5, 0xab, 0x03, 0xed, 0xd6, 0xa3,
+	0x69, 0xf8, 0x90, 0xa5, 0x29, 0xcb, 0x6a, 0x0e, 0x89, 0x2d, 0x71, 0xeb, 0x71, 0x99, 0x79, 0x2e,
+	0x15, 0x4b, 0x03, 0x8e, 0x05, 0x4e, 0x89, 0x22, 0xc2, 0xc9, 0x9e, 0x4e, 0x93, 0x91, 0x2c, 0x4f,
+	0xcf, 0x9b, 0x40, 0x80, 0x39, 0x17, 0xac, 0x87, 0x93, 0x40, 0x2a, 0xac, 0x72, 0xe9, 0x38, 0xbf,
+	0xb8, 0x30, 0x67, 0x44, 0xbe, 0x3b, 0x5b, 0xde, 0xa1, 0x51, 0x44, 0xb3, 0x38, 0xb0, 0xb9, 0x71,
+	0x9a, 0xfd, 0xd9, 0x9a, 0x82, 0xa7, 0xbe, 0x54, 0x24, 0x0d, 0x24, 0x11, 0x3d, 0x03, 0xb9, 0x80,
+	0xe3, 0x21, 0x44, 0xf5, 0xb9, 0x77, 0xfc, 0xb3, 0xd9, 0x9a, 0x57, 0x39, 0x4e, 0xa8, 0xea, 0x07,
+	0x32, 0x64, 0x82, 0x04, 0x9d, 0x3c, 0x7c, 0x49, 0x94, 0x53, 0xde, 0xf6, 0x4a, 0x4e, 0x07, 0x55,
+	0xe2, 0x1e, 0xbd, 0xed, 0x1e, 0x99, 0xbb, 0x4e, 0xde, 0xad, 0xbd, 0x16, 0x98, 0x73, 0x22, 0x7c,
+	0xa0, 0x77, 0x0a, 0x52, 0x9c, 0x65, 0x4c, 0x61, 0x45, 0x59, 0xe6, 0x9e, 0xde, 0xfb, 0xd7, 0x0e,
+	0xb8, 0xd9, 0x8c, 0x0e, 0x74, 0x8a, 0xf7, 0x7d, 0xc8, 0xf0, 0x1d, 0x70, 0xdd, 0x3b, 0x09, 0x32,
+	0x9c, 0x12, 0x54, 0xd9, 0xae, 0xec, 0x2c, 0xb5, 0x57, 0xfc, 0xe0, 0x17, 0x38, 0x25, 0xf0, 0x13,
+	0xb0, 0x32, 0x9c, 0x24, 0x8d, 0xd0, 0xd6, 0x76, 0x65, 0x67, 0x79, 0xf7, 0x2d, 0x57, 0x95, 0x55,
+	0x1f, 0x4e, 0xf5, 0x30, 0x53, 0x1f, 0x7d, 0x78, 0x8a, 0x93, 0x9c, 0xb4, 0x97, 0x07, 0x82, 0xc3,
+	0x08, 0xbe, 0x00, 0x57, 0x6d, 0x42, 0xd1, 0xe2, 0x76, 0x65, 0x67, 0x75, 0xb7, 0x55, 0x9d, 0x56,
+	0xda, 0x26, 0x3b, 0xd5, 0xf1, 0x28, 0x8f, 0x8d, 0xf8, 0x49, 0x96, 0xa7, 0x53, 0x1e, 0xb5, 0x1d,
+	0x1f, 0x76, 0xc0, 0x8a, 0x4f, 0x2d, 0xcd, 0xba, 0x0c, 0xbd, 0x61, 0x22, 0xfd, 0xb4, 0x5a, 0xfa,
+	0x2a, 0x4d, 0x80, 0xab, 0x5f, 0x59, 0xce, 0x61, 0xd6, 0x65, 0xed, 0xe5, 0x57, 0xc3, 0x1b, 0xf8,
+	0x53, 0x70, 0xcd, 0x97, 0x2a, 0xba, 0x62, 0xf8, 0x77, 0x26, 0x32, 0x71, 0xac, 0x04, 0xcd, 0x62,
+	0x9b, 0x8a, 0x37, 0xb1, 0x45, 0xc3, 0x36, 0x78, 0x43, 0x57, 0x08, 0xba, 0x6d, 0x92, 0xf0, 0x49,
+	0x49, 0x12, 0x06, 0x91, 0x9c, 0xf4, 0x39, 0x31, 0x73, 0x1f, 0x19, 0x69, 0x1b, 0x16, 0xfc, 0x08,
+	0x5c, 0xcb, 0x48, 0x8c, 0x15, 0xed, 0x11, 0xf4, 0x43, 0x13, 0xcc, 0xd6, 0x44, 0x30, 0x7b, 0x8c,
+	0x25, 0x36, 0x94, 0x81, 0x2d, 0xfc, 0x7b, 0x05, 0x6c, 0x9c, 0x5b, 0xf3, 0xe8, 0x43, 0x13, 0xdd,
+	0xd9, 0xbc, 0xd1, 0x1d, 0x1b, 0xc8, 0xb1, 0x65, 0x14, 0x16, 0x6a, 0x96, 0x41, 0x7b, 0x5d, 0x4e,
+	0x0e, 0xc2, 0xbf, 0x55, 0xc0, 0x8d, 0xb1, 0x8d, 0x03, 0x3d, 0x36, 0xc1, 0xfc, 0xfe, 0x82, 0xf5,
+	0xd2, 0x74, 0x94, 0x19, 0x75, 0x33, 0x6a, 0xd2, 0x5e, 0xc5, 0x23, 0xf7, 0xf0, 0x53, 0xb0, 0xd2,
+	0xa1, 0x51, 0x90, 0xb2, 0x88, 0x76, 0x29, 0x11, 0xe8, 0xfd, 0x29, 0xeb, 0xfc, 0x19, 0xcb, 0x3b,
+	0x09, 0x71, 0x25, 0xdf, 0xa1, 0xd1, 0x91, 0x13, 0xc0, 0x26, 0x58, 0x0d, 0x79, 0x18, 0x18, 0x08,
+	0x0d, 0x05, 0x93, 0xe8, 0x66, 0xf9, 0x4b, 0xb3, 0x12, 0xf2, 0x70, 0x8f, 0x46, 0x47, 0x46, 0x60,
+	0x11, 0x69, 0x11, 0xb1, 0x36, 0x17, 0x22, 0x1d, 0x43, 0xf4, 0x8a, 0x08, 0x34, 0x17, 0xa2, 0x37,
+	0x44, 0xb4, 0xc0, 0x26, 0x27, 0x22, 0x24, 0x99, 0x0a, 0xc6, 0x26, 0x74, 0xb7, 0x1c, 0xb5, 0xee,
+	0xa4, 0xfb, 0xc5, 0x79, 0x9d, 0x00, 0x44, 0xba, 0x5d, 0x12, 0xea, 0x3a, 0x1c, 0x67, 0xc2, 0x72,
+	0xe6, 0xc6, 0x40, 0x3c, 0x8b, 0x3a, 0x92, 0xb7, 0xf5, 0x8b, 0x51, 0xd3, 0xa9, 0xd4, 0x91, 0x54,
+	0xde, 0xba, 0x18, 0xb5, 0x90, 0xd3, 0x10, 0x6c, 0x0f, 0xa9, 0x53, 0xb2, 0x7b, 0xaf, 0x9c, 0x7e,
+	0x67, 0x00, 0x69, 0x9d, 0x93, 0xe6, 0xd7, 0xe7, 0xa5, 0xd9, 0xee, 0x76, 0x68, 0x63, 0xae, 0x1d,
+	0x68, 0xcf, 0x7e, 0x51, 0x8f, 0x8d, 0xc6, 0xbc, 0x45, 0x23, 0x23, 0x13, 0x2b, 0x61, 0x87, 0xc7,
+	0x1d, 0xa7, 0x45, 0xc7, 0x9b, 0x97, 0xee, 0x38, 0x9d, 0xea, 0xb8, 0x57, 0x74, 0xfc, 0xfd, 0x4b,
+	0x77, 0xdc, 0x1b, 0x3a, 0xfe, 0x6b, 0x65, 0xd6, 0x82, 0xba, 0x08, 0xde, 0xb9, 0x94, 0x08, 0xa6,
+	0xac, 0xb9, 0x0b, 0x44, 0x01, 0xc8, 0x99, 0xa4, 0xfa, 0xab, 0x1f, 0x10, 0xa9, 0x68, 0x8a, 0x15,
+	0x91, 0x08, 0x98, 0x52, 0x7a, 0xf2, 0xff, 0x7c, 0x04, 0x5b, 0x8e, 0xf6, 0xc4, 0xc3, 0xda, 0x6b,
+	0x7c, 0x7c, 0x08, 0x7e, 0x0c, 0x40, 0x97, 0x66, 0x38, 0x09, 0x72, 0x91, 0x48, 0xb4, 0xbc, 0xbd,
+	0x58, 0xfa, 0x49, 0x5c, 0x32, 0xf6, 0xcf, 0x45, 0x22, 0xe1, 0x33, 0xb0, 0x66, 0xc5, 0x29, 0xeb,
+	0xd0, 0x84, 0x58, 0x46, 0x7d, 0x0e, 0xc6, 0x0d, 0x23, 0x3b, 0x32, 0x2a, 0x43, 0x7a, 0x0a, 0x6e,
+	0x0e, 0xc2, 0x08, 0x64, 0xde, 0xed, 0xd2, 0x3f, 0xa0, 0xdd, 0x39, 0xbe, 0xcf, 0xab, 0x3e, 0x98,
+	0x63, 0xa3, 0x81, 0x2d, 0xb0, 0xa1, 0x04, 0x0e, 0x5f, 0xea, 0x6f, 0xa2, 0x46, 0x29, 0x92, 0xf2,
+	0x04, 0x2b, 0x82, 0xae, 0xcf, 0x01, 0x5b, 0xf7, 0xd2, 0xe7, 0x22, 0x39, 0x71, 0x42, 0x18, 0x82,
+	0x0d, 0x0d, 0x1a, 0x6f, 0xaf, 0x25, 0x5a, 0x35, 0xf3, 0xac, 0x4d, 0x5d, 0x19, 0xdb, 0x97, 0x57,
+	0xf7, 0x8d, 0xb0, 0xe5, 0x75, 0xed, 0xf5, 0x5c, 0x24, 0x63, 0x63, 0x12, 0x1e, 0x80, 0x37, 0x5f,
+	0x92, 0xfe, 0x6b, 0x26, 0x22, 0xf4, 0x96, 0x09, 0xf4, 0xbd, 0x32, 0xec, 0xe7, 0xd6, 0x5c, 0x37,
+	0x35, 0xcf, 0xbe, 0xd7, 0xf6, 0x6a, 0x78, 0x04, 0x96, 0x78, 0x82, 0x43, 0x92, 0x92, 0x4c, 0xa1,
+	0x3b, 0x06, 0xf5, 0xa8, 0x0c, 0xd5, 0xf2, 0x02, 0x07, 0x1b, 0x12, 0x60, 0x0c, 0xd6, 0xdd, 0xd2,
+	0x62, 0xce, 0x83, 0x10, 0x2b, 0x12, 0x33, 0xd1, 0x47, 0x3f, 0x30, 0xe0, 0xc7, 0x65, 0x60, 0xbb,
+	0xbe, 0x4d, 0xce, 0xf7, 0x9d, 0xd0, 0x39, 0x58, 0x4b, 0xc7, 0x1f, 0xc0, 0x2e, 0x80, 0x43, 0x47,
+	0x09, 0x0d, 0x4d, 0xf3, 0x8b, 0xde, 0xbe, 0xa0, 0x1f, 0x2f, 0x9c, 0xf0, 0xe3, 0x1f, 0xc0, 0xaf,
+	0xc1, 0xf5, 0x84, 0x4a, 0xa5, 0xcb, 0xc3, 0x36, 0x81, 0xdb, 0xc6, 0xc5, 0x07, 0x65, 0x2e, 0x7e,
+	0x6d, 0x45, 0xe6, 0x0d, 0x73, 0xf4, 0x95, 0xa4, 0x30, 0x06, 0x3f, 0x07, 0x4b, 0x38, 0x26, 0x81,
+	0xc0, 0x59, 0x4c, 0xd0, 0xbb, 0x06, 0xfa, 0x7e, 0x19, 0xb4, 0x19, 0x93, 0xb6, 0xb6, 0x77, 0xc0,
+	0x6b, 0xd8, 0xdd, 0xc3, 0xcf, 0xc0, 0xd5, 0x98, 0x64, 0x11, 0x11, 0xe8, 0xbe, 0x21, 0x3d, 0x2c,
+	0x23, 0x1d, 0x18, 0x6b, 0xc7, 0x71, 0x5a, 0x78, 0x02, 0x56, 0x68, 0x16, 0xb2, 0xd4, 0x47, 0xf5,
+	0x23, 0xc3, 0x2a, 0x2d, 0xd8, 0x43, 0xa3, 0x29, 0x06, 0xb6, 0x4c, 0x87, 0x43, 0xf0, 0x77, 0xe0,
+	0x06, 0xc7, 0x82, 0x64, 0x6a, 0xd8, 0xe8, 0xfd, 0xd8, 0x80, 0x77, 0x4b, 0xeb, 0xcc, 0xc9, 0x6c,
+	0x9b, 0xe6, 0xd8, 0xab, 0x7c, 0x64, 0x54, 0xe7, 0x31, 0x97, 0x44, 0x04, 0x3a, 0xb9, 0xe8, 0xe1,
+	0x7c, 0x79, 0x7c, 0x2e, 0x89, 0xd0, 0x0b, 0xe4, 0xf3, 0x98, 0xbb, 0x7b, 0xbd, 0xda, 0x7d, 0x96,
+	0xab, 0xbc, 0x43, 0x82, 0x1e, 0x8d, 0x08, 0x43, 0x3b, 0xf3, 0xad, 0xf6, 0x6f, 0x58, 0x7e, 0x92,
+	0x77, 0xc8, 0xa9, 0xd6, 0xf8, 0xd5, 0x76, 0x20, 0x33, 0xa6, 0x93, 0xe0, 0xc1, 0xe1, 0x0b, 0x9c,
+	0x65, 0x24, 0x41, 0x0f, 0xe6, 0x4b, 0x82, 0x43, 0xef, 0x5b, 0x95, 0x4f, 0x82, 0x83, 0xb9, 0x51,
+	0xd8, 0x04, 0x57, 0x14, 0xe3, 0x34, 0x44, 0xef, 0x19, 0xe8, 0x83, 0x32, 0xe8, 0x89, 0x36, 0x76,
+	0x2c, 0xab, 0xd4, 0x53, 0x37, 0x79, 0xa4, 0x99, 0x22, 0x82, 0x48, 0x85, 0x1e, 0xcd, 0x37, 0x75,
+	0x9d, 0xcb, 0x43, 0xa7, 0xf1, 0x53, 0xcf, 0x0b, 0x63, 0x7a, 0xab, 0x7a, 0x4d, 0x3a, 0x1c, 0xc7,
+	0x04, 0x55, 0xe7, 0xdb, 0xaa, 0xbe, 0xb6, 0xe6, 0x7e, 0xab, 0x72, 0x6a, 0x88, 0xc1, 0x9a, 0xde,
+	0x54, 0x38, 0xee, 0xeb, 0xad, 0x46, 0xb7, 0xeb, 0x24, 0x41, 0x35, 0x83, 0xac, 0x97, 0xbe, 0x39,
+	0x9c, 0xb7, 0xac, 0xee, 0x48, 0xcb, 0x1c, 0x5a, 0x9f, 0x40, 0x8a, 0xc3, 0x7a, 0x99, 0xdc, 0xbe,
+	0x8d, 0xbb, 0x5d, 0x9a, 0x51, 0xd5, 0x47, 0x1f, 0xcc, 0xb7, 0x4c, 0x76, 0x87, 0x6e, 0x3a, 0x95,
+	0x5f, 0xa6, 0x70, 0x64, 0x54, 0xe7, 0xd8, 0xe1, 0x75, 0x96, 0x33, 0x85, 0x7e, 0x32, 0x5f, 0x8e,
+	0x2d, 0xfc, 0xd0, 0x68, 0x7c, 0x8e, 0xc3, 0xc2, 0xd8, 0xd6, 0x7f, 0x16, 0xc1, 0x72, 0xe1, 0x08,
+	0x0b, 0x7f, 0x09, 0xae, 0x8f, 0xfc, 0x74, 0x30, 0x07, 0xfd, 0x29, 0x0d, 0x66, 0x7d, 0xd7, 0x9d,
+	0x04, 0x9c, 0xe2, 0x58, 0x0b, 0xe0, 0x9f, 0xc0, 0x66, 0x28, 0x88, 0x39, 0x3e, 0x06, 0xa3, 0xa8,
+	0x05, 0xd3, 0xda, 0x3c, 0x2b, 0x69, 0x6d, 0xbe, 0x2a, 0xc0, 0xf6, 0xcc, 0x1f, 0x0f, 0xd3, 0xdf,
+	0x4c, 0x0e, 0xb7, 0x6f, 0x79, 0x3f, 0xc5, 0x67, 0xf0, 0xcf, 0x15, 0x80, 0x38, 0x93, 0x2a, 0x08,
+	0x13, 0x1a, 0xbe, 0x1c, 0x0b, 0x61, 0xf1, 0x92, 0x43, 0xd8, 0xd0, 0x9e, 0xf6, 0xb5, 0xa3, 0x91,
+	0x18, 0xfe, 0x08, 0x6e, 0x49, 0x82, 0x45, 0xf8, 0x22, 0xe0, 0x82, 0x44, 0x34, 0x54, 0x24, 0x0a,
+	0x42, 0x25, 0xcc, 0x7f, 0x86, 0xcb, 0x74, 0x0f, 0xad, 0x97, 0x96, 0x77, 0xb2, 0xaf, 0xc4, 0xd6,
+	0x7f, 0x17, 0xc1, 0xda, 0x44, 0x3f, 0x06, 0xbf, 0x00, 0x1b, 0x5d, 0x2a, 0xa4, 0x0a, 0xf4, 0x0b,
+	0x61, 0x7a, 0x4e, 0x77, 0x80, 0xa8, 0x94, 0x1f, 0x20, 0xa0, 0x51, 0xb6, 0x70, 0xac, 0x1b, 0x78,
+	0x77, 0x6c, 0x38, 0x05, 0xb7, 0x1d, 0xcf, 0x37, 0x92, 0x05, 0xe6, 0x42, 0x39, 0x73, 0xd3, 0x32,
+	0x9d, 0x78, 0xc8, 0xfd, 0x12, 0x6c, 0x2a, 0xc6, 0x03, 0xd6, 0x9d, 0x08, 0x74, 0x71, 0x8e, 0x40,
+	0x15, 0xe3, 0x5f, 0x76, 0x47, 0x03, 0xcd, 0xc1, 0x43, 0xdf, 0xe2, 0x46, 0x01, 0x8e, 0x22, 0x5b,
+	0x16, 0x32, 0xc0, 0x2a, 0x98, 0x9c, 0x80, 0xfb, 0x11, 0x34, 0xd3, 0xc9, 0xbb, 0x03, 0x5c, 0x33,
+	0x8a, 0xcc, 0xd2, 0xcb, 0xa6, 0x7a, 0x3a, 0x36, 0x1b, 0xf8, 0x0a, 0xec, 0x8c, 0xb9, 0xd5, 0x25,
+	0x79, 0xbe, 0xd3, 0x2b, 0xe5, 0x4e, 0xef, 0x8d, 0x38, 0x65, 0x52, 0x4d, 0xba, 0x6c, 0xd0, 0xef,
+	0x9a, 0x5d, 0xf0, 0x60, 0x58, 0x4f, 0xee, 0x8a, 0x53, 0xa9, 0x77, 0x83, 0xda, 0xc4, 0x3f, 0xbd,
+	0x9f, 0xdb, 0x8d, 0x80, 0x08, 0x59, 0xfb, 0xc6, 0x5f, 0x7e, 0x5b, 0xc3, 0x23, 0x66, 0xb8, 0xf6,
+	0xcd, 0xe4, 0xff, 0xd6, 0x6f, 0xf7, 0x96, 0xc1, 0xd2, 0xe0, 0x6e, 0xef, 0x2f, 0x0b, 0xe0, 0x7e,
+	0xc8, 0xd2, 0xf2, 0x73, 0xc3, 0xde, 0xc6, 0x78, 0x0c, 0x2d, 0x3d, 0xd5, 0x56, 0xe5, 0xb7, 0xbf,
+	0x72, 0xda, 0x98, 0x25, 0x38, 0x8b, 0xab, 0x4c, 0xc4, 0xb5, 0x98, 0x64, 0x26, 0x11, 0xb5, 0xe1,
+	0x34, 0x66, 0xfc, 0x1e, 0xff, 0x78, 0x70, 0xf5, 0x8f, 0x85, 0xc5, 0x83, 0x66, 0xf3, 0x9f, 0x0b,
+	0x77, 0x0f, 0x2c, 0xb2, 0x19, 0xc9, 0xaa, 0xbd, 0xd4, 0x57, 0xa7, 0xf5, 0x6a, 0xdb, 0x5b, 0xfe,
+	0xdb, 0xdb, 0x9c, 0x35, 0x23, 0x79, 0x36, 0xb0, 0x39, 0x3b, 0xad, 0x9f, 0x0d, 0x6c, 0xbe, 0x5b,
+	0xb8, 0x6f, 0x1f, 0x34, 0x1a, 0xcd, 0x48, 0x36, 0x1a, 0x03, 0xab, 0x46, 0xe3, 0xb4, 0xde, 0x68,
+	0x0c, 0xec, 0x3a, 0x57, 0x4d, 0xb0, 0xf5, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x85, 0xc4, 0x27,
+	0x91, 0xca, 0x17, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_criterion_label.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_criterion_label.pb.go
new file mode 100644
index 0000000..0e9f288
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_criterion_label.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_criterion_label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A relationship between an ad group criterion and a label.
+type AdGroupCriterionLabel struct {
+	// The resource name of the ad group criterion label.
+	// Ad group criterion label resource names have the form:
+	// `customers/{customer_id}/adGroupCriterionLabels/{ad_group_id}~{criterion_id}~{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group criterion to which the label is attached.
+	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The label assigned to the ad group criterion.
+	Label                *wrappers.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdGroupCriterionLabel) Reset()         { *m = AdGroupCriterionLabel{} }
+func (m *AdGroupCriterionLabel) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionLabel) ProtoMessage()    {}
+func (*AdGroupCriterionLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f4fb81627fc685a6, []int{0}
+}
+
+func (m *AdGroupCriterionLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionLabel.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionLabel.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionLabel.Merge(m, src)
+}
+func (m *AdGroupCriterionLabel) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionLabel.Size(m)
+}
+func (m *AdGroupCriterionLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionLabel proto.InternalMessageInfo
+
+func (m *AdGroupCriterionLabel) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupCriterionLabel) GetAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionLabel) GetLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroupCriterionLabel)(nil), "google.ads.googleads.v3.resources.AdGroupCriterionLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_criterion_label.proto", fileDescriptor_f4fb81627fc685a6)
+}
+
+var fileDescriptor_f4fb81627fc685a6 = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xdf, 0x4a, 0xf3, 0x30,
+	0x1c, 0xa5, 0x1d, 0xdf, 0x07, 0x5f, 0x3f, 0x05, 0x29, 0x08, 0x73, 0x0c, 0xd9, 0x94, 0xc1, 0xae,
+	0x12, 0x58, 0xef, 0xe2, 0x8d, 0x9d, 0xe0, 0x60, 0x88, 0x8c, 0x09, 0xbd, 0x90, 0x42, 0xc9, 0xda,
+	0x18, 0x0a, 0x6d, 0x52, 0x92, 0x76, 0x0a, 0x63, 0xd7, 0xbe, 0x87, 0x97, 0xbe, 0x81, 0xaf, 0xe0,
+	0xa3, 0xec, 0x29, 0xa4, 0x7f, 0x12, 0x87, 0xce, 0x3f, 0x77, 0xa7, 0xfd, 0x9d, 0x73, 0x7e, 0xe7,
+	0x24, 0xb1, 0xce, 0x29, 0xe7, 0x34, 0x21, 0x10, 0x47, 0x12, 0xd6, 0xb0, 0x44, 0x4b, 0x07, 0x0a,
+	0x22, 0x79, 0x21, 0x42, 0x22, 0x21, 0x8e, 0x02, 0x2a, 0x78, 0x91, 0x05, 0xa1, 0x88, 0x73, 0x22,
+	0x62, 0xce, 0x82, 0x04, 0x2f, 0x48, 0x02, 0x32, 0xc1, 0x73, 0x6e, 0xf7, 0x6b, 0x19, 0xc0, 0x91,
+	0x04, 0xda, 0x01, 0x2c, 0x1d, 0xa0, 0x1d, 0x3a, 0x47, 0x6a, 0x49, 0x16, 0x6b, 0xdf, 0x5a, 0xdd,
+	0x39, 0x6e, 0x46, 0xd5, 0xd7, 0xa2, 0xb8, 0x83, 0xf7, 0x02, 0x67, 0x19, 0x11, 0xb2, 0x99, 0x77,
+	0xb7, 0xa4, 0x98, 0x31, 0x9e, 0xe3, 0x3c, 0xe6, 0xac, 0x99, 0x9e, 0xbc, 0x98, 0xd6, 0xa1, 0x1b,
+	0x4d, 0xca, 0x74, 0x17, 0x2a, 0xdc, 0x55, 0x99, 0xcd, 0x3e, 0xb5, 0xf6, 0xd5, 0xa6, 0x80, 0xe1,
+	0x94, 0xb4, 0x8d, 0x9e, 0x31, 0xfc, 0x37, 0xdf, 0x53, 0x3f, 0xaf, 0x71, 0x4a, 0xec, 0xa9, 0x65,
+	0x7f, 0x2e, 0xd7, 0x36, 0x7b, 0xc6, 0xf0, 0xff, 0xa8, 0xdb, 0x94, 0x01, 0x2a, 0x19, 0xb8, 0xc9,
+	0x45, 0xcc, 0xa8, 0x87, 0x93, 0x82, 0xcc, 0x0f, 0xf0, 0x87, 0xad, 0xf6, 0xc8, 0xfa, 0x53, 0x9d,
+	0x4a, 0xbb, 0xf5, 0x0b, 0x79, 0x4d, 0x45, 0xab, 0x8d, 0xfb, 0x60, 0x6d, 0x1d, 0x5a, 0x83, 0xb2,
+	0x58, 0x82, 0x90, 0xa7, 0x70, 0x77, 0xb3, 0xcb, 0xb0, 0x90, 0x39, 0x4f, 0x89, 0x90, 0x70, 0xa5,
+	0xe0, 0x1a, 0xe2, 0x5d, 0x5c, 0x09, 0x57, 0x5f, 0x5d, 0xde, 0x7a, 0xfc, 0x68, 0x5a, 0x83, 0x90,
+	0xa7, 0xe0, 0xc7, 0xeb, 0x1b, 0x77, 0x76, 0x06, 0x99, 0x95, 0xc5, 0x66, 0xc6, 0xed, 0xb4, 0x31,
+	0xa0, 0x3c, 0xc1, 0x8c, 0x02, 0x2e, 0x28, 0xa4, 0x84, 0x55, 0xb5, 0xe1, 0x7b, 0xa1, 0x6f, 0x1e,
+	0xd8, 0x99, 0x46, 0x4f, 0x66, 0x6b, 0xe2, 0xba, 0xcf, 0x66, 0x7f, 0x52, 0x5b, 0xba, 0x91, 0x04,
+	0x35, 0x2c, 0x91, 0xe7, 0x80, 0xb9, 0x62, 0xbe, 0x2a, 0x8e, 0xef, 0x46, 0xd2, 0xd7, 0x1c, 0xdf,
+	0x73, 0x7c, 0xcd, 0xd9, 0x98, 0x83, 0x7a, 0x80, 0x90, 0x1b, 0x49, 0x84, 0x34, 0x0b, 0x21, 0xcf,
+	0x41, 0x48, 0xf3, 0x16, 0x7f, 0xab, 0xb0, 0xce, 0x5b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0xec,
+	0x97, 0xa1, 0x0c, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_criterion_simulation.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_criterion_simulation.pb.go
new file mode 100644
index 0000000..d53f2f6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_criterion_simulation.pb.go
@@ -0,0 +1,216 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_criterion_simulation.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group criterion simulation. Supported combinations of advertising
+// channel type, criterion type, simulation type, and simulation modification
+// method are detailed below respectively.
+//
+// 1. DISPLAY - KEYWORD - CPC_BID - UNIFORM
+// 2. SEARCH - KEYWORD - CPC_BID - UNIFORM
+// 3. SHOPPING - LISTING_GROUP - CPC_BID - UNIFORM
+type AdGroupCriterionSimulation struct {
+	// The resource name of the ad group criterion simulation.
+	// Ad group criterion simulation resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupCriterionSimulations/{ad_group_id}~{criterion_id}~{type}~{modification_method}~{start_date}~{end_date}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// AdGroup ID of the simulation.
+	AdGroupId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=ad_group_id,json=adGroupId,proto3" json:"ad_group_id,omitempty"`
+	// Criterion ID of the simulation.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The field that the simulation modifies.
+	Type enums.SimulationTypeEnum_SimulationType `protobuf:"varint,4,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.SimulationTypeEnum_SimulationType" json:"type,omitempty"`
+	// How the simulation modifies the field.
+	ModificationMethod enums.SimulationModificationMethodEnum_SimulationModificationMethod `protobuf:"varint,5,opt,name=modification_method,json=modificationMethod,proto3,enum=google.ads.googleads.v3.enums.SimulationModificationMethodEnum_SimulationModificationMethod" json:"modification_method,omitempty"`
+	// First day on which the simulation is based, in YYYY-MM-DD format.
+	StartDate *wrappers.StringValue `protobuf:"bytes,6,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Last day on which the simulation is based, in YYYY-MM-DD format.
+	EndDate *wrappers.StringValue `protobuf:"bytes,7,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// List of simulation points.
+	//
+	// Types that are valid to be assigned to PointList:
+	//	*AdGroupCriterionSimulation_CpcBidPointList
+	PointList            isAdGroupCriterionSimulation_PointList `protobuf_oneof:"point_list"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *AdGroupCriterionSimulation) Reset()         { *m = AdGroupCriterionSimulation{} }
+func (m *AdGroupCriterionSimulation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionSimulation) ProtoMessage()    {}
+func (*AdGroupCriterionSimulation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_79b2fc18b4f92e57, []int{0}
+}
+
+func (m *AdGroupCriterionSimulation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionSimulation.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionSimulation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionSimulation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionSimulation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionSimulation.Merge(m, src)
+}
+func (m *AdGroupCriterionSimulation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionSimulation.Size(m)
+}
+func (m *AdGroupCriterionSimulation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionSimulation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionSimulation proto.InternalMessageInfo
+
+func (m *AdGroupCriterionSimulation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupCriterionSimulation) GetAdGroupId() *wrappers.Int64Value {
+	if m != nil {
+		return m.AdGroupId
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionSimulation) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionSimulation) GetType() enums.SimulationTypeEnum_SimulationType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.SimulationTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterionSimulation) GetModificationMethod() enums.SimulationModificationMethodEnum_SimulationModificationMethod {
+	if m != nil {
+		return m.ModificationMethod
+	}
+	return enums.SimulationModificationMethodEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterionSimulation) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionSimulation) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+type isAdGroupCriterionSimulation_PointList interface {
+	isAdGroupCriterionSimulation_PointList()
+}
+
+type AdGroupCriterionSimulation_CpcBidPointList struct {
+	CpcBidPointList *common.CpcBidSimulationPointList `protobuf:"bytes,8,opt,name=cpc_bid_point_list,json=cpcBidPointList,proto3,oneof"`
+}
+
+func (*AdGroupCriterionSimulation_CpcBidPointList) isAdGroupCriterionSimulation_PointList() {}
+
+func (m *AdGroupCriterionSimulation) GetPointList() isAdGroupCriterionSimulation_PointList {
+	if m != nil {
+		return m.PointList
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionSimulation) GetCpcBidPointList() *common.CpcBidSimulationPointList {
+	if x, ok := m.GetPointList().(*AdGroupCriterionSimulation_CpcBidPointList); ok {
+		return x.CpcBidPointList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupCriterionSimulation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupCriterionSimulation_CpcBidPointList)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*AdGroupCriterionSimulation)(nil), "google.ads.googleads.v3.resources.AdGroupCriterionSimulation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_criterion_simulation.proto", fileDescriptor_79b2fc18b4f92e57)
+}
+
+var fileDescriptor_79b2fc18b4f92e57 = []byte{
+	// 605 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0xd4, 0x4e,
+	0x14, 0xfe, 0x75, 0xe1, 0xc7, 0x9f, 0x01, 0x35, 0xa9, 0x37, 0x15, 0x89, 0x82, 0x86, 0x84, 0xab,
+	0x99, 0x84, 0x1a, 0x8d, 0x25, 0x31, 0x76, 0x91, 0x20, 0x46, 0xcc, 0xa6, 0x90, 0xbd, 0x30, 0x9b,
+	0x34, 0x43, 0x67, 0x28, 0x93, 0x6c, 0x67, 0x9a, 0x99, 0x29, 0x86, 0x10, 0xae, 0xbd, 0x50, 0xdf,
+	0xc1, 0x78, 0xe9, 0xa3, 0xf8, 0x28, 0x3c, 0x85, 0xe9, 0xb4, 0x9d, 0x12, 0xb0, 0xcb, 0xde, 0x9d,
+	0x9e, 0xf3, 0x7d, 0xdf, 0x39, 0xe7, 0x3b, 0xbb, 0x03, 0x76, 0x53, 0x21, 0xd2, 0x31, 0x45, 0x98,
+	0x28, 0x54, 0x85, 0x65, 0x74, 0xe6, 0x23, 0x49, 0x95, 0x28, 0x64, 0x42, 0x15, 0xc2, 0x24, 0x4e,
+	0xa5, 0x28, 0xf2, 0x38, 0x91, 0x4c, 0x53, 0xc9, 0x04, 0x8f, 0x15, 0xcb, 0x8a, 0x31, 0xd6, 0x4c,
+	0x70, 0x98, 0x4b, 0xa1, 0x85, 0xbb, 0x5e, 0x71, 0x21, 0x26, 0x0a, 0x5a, 0x19, 0x78, 0xe6, 0x43,
+	0x2b, 0xb3, 0x82, 0xba, 0x3a, 0x25, 0x22, 0xcb, 0x04, 0x47, 0x37, 0x35, 0x57, 0xfa, 0x5d, 0x04,
+	0xca, 0x8b, 0x4c, 0x5d, 0xc3, 0xc7, 0x99, 0x20, 0xec, 0x84, 0x25, 0xf5, 0x07, 0xd5, 0xa7, 0x82,
+	0xd4, 0x1a, 0xfe, 0xd4, 0x1a, 0xfa, 0x3c, 0xa7, 0x35, 0xe9, 0x51, 0x43, 0xca, 0x99, 0xb5, 0xa1,
+	0x2e, 0x3d, 0xa9, 0x4b, 0xe6, 0xeb, 0xb8, 0x38, 0x41, 0x5f, 0x24, 0xce, 0x73, 0x2a, 0x55, 0x5d,
+	0x5f, 0xbd, 0x46, 0xc5, 0x9c, 0x0b, 0x6d, 0xc4, 0xeb, 0xea, 0xb3, 0x9f, 0x73, 0x60, 0x25, 0x24,
+	0x7b, 0xa5, 0x99, 0x3b, 0x8d, 0x97, 0x87, 0x76, 0x04, 0xf7, 0x39, 0xb8, 0xd7, 0xb4, 0x8b, 0x39,
+	0xce, 0xa8, 0xe7, 0xac, 0x39, 0x9b, 0x8b, 0xd1, 0x72, 0x93, 0xfc, 0x84, 0x33, 0xea, 0x6e, 0x83,
+	0x25, 0x7b, 0x10, 0x46, 0xbc, 0xde, 0x9a, 0xb3, 0xb9, 0xb4, 0xf5, 0xb8, 0x36, 0x1d, 0x36, 0x73,
+	0xc1, 0x7d, 0xae, 0x5f, 0xbe, 0x18, 0xe2, 0x71, 0x41, 0xa3, 0x45, 0x5c, 0xb5, 0xdc, 0x27, 0xee,
+	0x1b, 0xb0, 0xdc, 0x1e, 0x91, 0x11, 0x6f, 0xe6, 0x6e, 0xf6, 0x92, 0x25, 0xec, 0x13, 0xf7, 0x08,
+	0xcc, 0x96, 0x3e, 0x79, 0xb3, 0x6b, 0xce, 0xe6, 0xfd, 0xad, 0xb7, 0xb0, 0xeb, 0xea, 0xc6, 0x5d,
+	0xd8, 0xae, 0x76, 0x74, 0x9e, 0xd3, 0x5d, 0x5e, 0x64, 0x37, 0x52, 0x91, 0x51, 0x73, 0x7f, 0x38,
+	0xe0, 0xe1, 0x3f, 0x4e, 0xe8, 0xfd, 0x6f, 0xba, 0x8c, 0xa6, 0xee, 0x72, 0x70, 0x4d, 0xe3, 0xc0,
+	0x48, 0xdc, 0xe8, 0x79, 0x1b, 0x10, 0xb9, 0xd9, 0xad, 0x9c, 0xbb, 0x0d, 0x80, 0xd2, 0x58, 0xea,
+	0x98, 0x60, 0x4d, 0xbd, 0x39, 0xe3, 0xd1, 0xea, 0x2d, 0x8f, 0x0e, 0xb5, 0x64, 0x3c, 0xad, 0x2d,
+	0x36, 0xf8, 0x77, 0x58, 0x53, 0xf7, 0x15, 0x58, 0xa0, 0x9c, 0x54, 0xd4, 0xf9, 0x29, 0xa8, 0xf3,
+	0x94, 0x13, 0x43, 0x3c, 0x05, 0x6e, 0x92, 0x27, 0xf1, 0x31, 0x23, 0x71, 0x2e, 0x18, 0xd7, 0xf1,
+	0x98, 0x29, 0xed, 0x2d, 0x18, 0x89, 0xd7, 0x9d, 0x1e, 0x54, 0x7f, 0x1e, 0xb8, 0x93, 0x27, 0x7d,
+	0x46, 0xda, 0x4d, 0x07, 0xa5, 0xc2, 0x47, 0xa6, 0xf4, 0xfb, 0xff, 0xa2, 0x07, 0x89, 0x29, 0xda,
+	0x54, 0xf0, 0xcd, 0xb9, 0x0a, 0xbf, 0x3a, 0xc0, 0x6f, 0x85, 0xea, 0x28, 0x67, 0xaa, 0x14, 0x44,
+	0x13, 0x7e, 0xa3, 0x83, 0xa4, 0x50, 0x5a, 0x64, 0x54, 0x2a, 0x74, 0xd1, 0x84, 0x97, 0x08, 0x77,
+	0x12, 0x14, 0xba, 0x98, 0xf8, 0x7e, 0x5c, 0xf6, 0x97, 0x01, 0x68, 0xf7, 0xed, 0x7f, 0xef, 0x81,
+	0x8d, 0x44, 0x64, 0xf0, 0xce, 0xf7, 0xa4, 0xff, 0xb4, 0x7b, 0xca, 0x41, 0x69, 0xf4, 0xc0, 0xf9,
+	0xfc, 0xa1, 0x56, 0x49, 0xc5, 0x18, 0xf3, 0x14, 0x0a, 0x99, 0xa2, 0x94, 0x72, 0x73, 0x06, 0xd4,
+	0xae, 0x3c, 0xe1, 0xed, 0xdb, 0xb6, 0xd1, 0xaf, 0xde, 0xcc, 0x5e, 0x18, 0xfe, 0xee, 0xad, 0xef,
+	0x55, 0x92, 0x21, 0x51, 0xb0, 0x0a, 0xcb, 0x68, 0xe8, 0xc3, 0xa8, 0x41, 0xfe, 0x69, 0x30, 0xa3,
+	0x90, 0xa8, 0x91, 0xc5, 0x8c, 0x86, 0xfe, 0xc8, 0x62, 0xae, 0x7a, 0x1b, 0x55, 0x21, 0x08, 0x42,
+	0xa2, 0x82, 0xc0, 0xa2, 0x82, 0x60, 0xe8, 0x07, 0x81, 0xc5, 0x1d, 0xcf, 0x99, 0x61, 0xfd, 0xbf,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0x8a, 0x0a, 0x2e, 0xa7, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_extension_setting.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_extension_setting.pb.go
new file mode 100644
index 0000000..3943b1a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_extension_setting.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_extension_setting.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group extension setting.
+type AdGroupExtensionSetting struct {
+	// The resource name of the ad group extension setting.
+	// AdGroupExtensionSetting resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupExtensionSettings/{ad_group_id}~{extension_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The extension type of the ad group extension setting.
+	ExtensionType enums.ExtensionTypeEnum_ExtensionType `protobuf:"varint,2,opt,name=extension_type,json=extensionType,proto3,enum=google.ads.googleads.v3.enums.ExtensionTypeEnum_ExtensionType" json:"extension_type,omitempty"`
+	// The resource name of the ad group. The linked extension feed items will
+	// serve under this ad group.
+	// AdGroup resource names have the form:
+	//
+	// `customers/{customer_id}/adGroups/{ad_group_id}`
+	AdGroup *wrappers.StringValue `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The resource names of the extension feed items to serve under the ad group.
+	// ExtensionFeedItem resource names have the form:
+	//
+	// `customers/{customer_id}/extensionFeedItems/{feed_item_id}`
+	ExtensionFeedItems []*wrappers.StringValue `protobuf:"bytes,4,rep,name=extension_feed_items,json=extensionFeedItems,proto3" json:"extension_feed_items,omitempty"`
+	// The device for which the extensions will serve. Optional.
+	Device               enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice `protobuf:"varint,5,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice" json:"device,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *AdGroupExtensionSetting) Reset()         { *m = AdGroupExtensionSetting{} }
+func (m *AdGroupExtensionSetting) String() string { return proto.CompactTextString(m) }
+func (*AdGroupExtensionSetting) ProtoMessage()    {}
+func (*AdGroupExtensionSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5bcbdad332356d2f, []int{0}
+}
+
+func (m *AdGroupExtensionSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupExtensionSetting.Unmarshal(m, b)
+}
+func (m *AdGroupExtensionSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupExtensionSetting.Marshal(b, m, deterministic)
+}
+func (m *AdGroupExtensionSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupExtensionSetting.Merge(m, src)
+}
+func (m *AdGroupExtensionSetting) XXX_Size() int {
+	return xxx_messageInfo_AdGroupExtensionSetting.Size(m)
+}
+func (m *AdGroupExtensionSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupExtensionSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupExtensionSetting proto.InternalMessageInfo
+
+func (m *AdGroupExtensionSetting) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupExtensionSetting) GetExtensionType() enums.ExtensionTypeEnum_ExtensionType {
+	if m != nil {
+		return m.ExtensionType
+	}
+	return enums.ExtensionTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupExtensionSetting) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupExtensionSetting) GetExtensionFeedItems() []*wrappers.StringValue {
+	if m != nil {
+		return m.ExtensionFeedItems
+	}
+	return nil
+}
+
+func (m *AdGroupExtensionSetting) GetDevice() enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice {
+	if m != nil {
+		return m.Device
+	}
+	return enums.ExtensionSettingDeviceEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupExtensionSetting)(nil), "google.ads.googleads.v3.resources.AdGroupExtensionSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_extension_setting.proto", fileDescriptor_5bcbdad332356d2f)
+}
+
+var fileDescriptor_5bcbdad332356d2f = []byte{
+	// 496 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0x26, 0xbb, 0xb5, 0x6a, 0xb4, 0x3d, 0x04, 0xc1, 0x58, 0x16, 0xd9, 0x2a, 0x85, 0x3d, 0xcd,
+	0xc8, 0xe6, 0x20, 0x44, 0x11, 0xb2, 0x58, 0x17, 0x7b, 0x28, 0x4b, 0x2a, 0x7b, 0x90, 0x85, 0x30,
+	0xcd, 0xbc, 0xc6, 0xc0, 0x66, 0x26, 0xcc, 0x4c, 0x56, 0x4b, 0xa9, 0xe0, 0xd1, 0xff, 0xe0, 0xc9,
+	0xa3, 0x3f, 0xc5, 0x9f, 0xd2, 0x5f, 0x21, 0xc9, 0x64, 0x66, 0xbb, 0x68, 0x6c, 0x6f, 0xdf, 0xcc,
+	0xfb, 0xbe, 0xef, 0xbd, 0xef, 0x0d, 0xe3, 0x4e, 0x32, 0xce, 0xb3, 0x25, 0x60, 0x42, 0x25, 0xd6,
+	0xb0, 0x46, 0xab, 0x00, 0x0b, 0x90, 0xbc, 0x12, 0x29, 0x48, 0x4c, 0x68, 0x92, 0x09, 0x5e, 0x95,
+	0x09, 0x7c, 0x51, 0xc0, 0x64, 0xce, 0x59, 0x22, 0x41, 0xa9, 0x9c, 0x65, 0xa8, 0x14, 0x5c, 0x71,
+	0x6f, 0x5f, 0x0b, 0x11, 0xa1, 0x12, 0x59, 0x0f, 0xb4, 0x0a, 0x90, 0xf5, 0xd8, 0x7b, 0xdd, 0xd5,
+	0x06, 0x58, 0x55, 0x48, 0xfc, 0x97, 0x73, 0x42, 0x61, 0x95, 0xa7, 0xa0, 0x1b, 0xec, 0x8d, 0x6f,
+	0xab, 0x56, 0xe7, 0xa5, 0xd1, 0x3c, 0x31, 0x9a, 0x32, 0xb7, 0x59, 0xda, 0xd2, 0xd3, 0xb6, 0xd4,
+	0x9c, 0x4e, 0xab, 0x33, 0xfc, 0x59, 0x90, 0xb2, 0x04, 0x21, 0xdb, 0xfa, 0xe0, 0x9a, 0x94, 0x30,
+	0xc6, 0x15, 0x51, 0x39, 0x67, 0x6d, 0xf5, 0xd9, 0x8f, 0x2d, 0xf7, 0x71, 0x44, 0xa7, 0xf5, 0x46,
+	0x0e, 0x4d, 0xe3, 0x13, 0x3d, 0xb5, 0xf7, 0xdc, 0xdd, 0x31, 0xbd, 0x12, 0x46, 0x0a, 0xf0, 0x9d,
+	0xa1, 0x33, 0xba, 0x1f, 0x3f, 0x34, 0x97, 0xc7, 0xa4, 0x00, 0x0f, 0xdc, 0xdd, 0xcd, 0x89, 0xfd,
+	0xde, 0xd0, 0x19, 0xed, 0x8e, 0xdf, 0xa0, 0xae, 0x3d, 0x36, 0x31, 0x91, 0xed, 0xf6, 0xe1, 0xbc,
+	0x84, 0x43, 0x56, 0x15, 0x9b, 0x37, 0xf1, 0x0e, 0x5c, 0x3f, 0x7a, 0x2f, 0xdd, 0x7b, 0xe6, 0xe5,
+	0xfc, 0xfe, 0xd0, 0x19, 0x3d, 0x18, 0x0f, 0x4c, 0x03, 0x13, 0x1c, 0x9d, 0x28, 0x91, 0xb3, 0x6c,
+	0x4e, 0x96, 0x15, 0xc4, 0x77, 0x89, 0x0e, 0xe5, 0x1d, 0xbb, 0x8f, 0xd6, 0xf3, 0x9d, 0x01, 0xd0,
+	0x24, 0x57, 0x50, 0x48, 0x7f, 0x6b, 0xd8, 0xbf, 0xd1, 0xc4, 0xb3, 0xca, 0x77, 0x00, 0xf4, 0x7d,
+	0xad, 0xf3, 0x3e, 0xb9, 0xdb, 0xfa, 0x35, 0xfd, 0x3b, 0x4d, 0xce, 0xd9, 0x6d, 0x73, 0xb6, 0x5b,
+	0x7d, 0xdb, 0x88, 0x37, 0x03, 0x6f, 0x94, 0xe2, 0xd6, 0x3f, 0xfc, 0xe6, 0x5c, 0x45, 0x5f, 0xdd,
+	0x17, 0x6b, 0xcf, 0x16, 0x95, 0xb9, 0x44, 0x29, 0x2f, 0x70, 0xd7, 0xb3, 0x1d, 0xa5, 0x95, 0x54,
+	0xbc, 0x00, 0x21, 0xf1, 0x85, 0x81, 0x97, 0x98, 0xfc, 0x9b, 0x2d, 0xf1, 0x45, 0xf7, 0x8f, 0xb8,
+	0x9c, 0x7c, 0xef, 0xb9, 0x07, 0x29, 0x2f, 0xd0, 0x8d, 0x7f, 0x62, 0x32, 0xe8, 0x18, 0x67, 0x56,
+	0x2f, 0x76, 0xe6, 0x7c, 0x3c, 0x6a, 0x2d, 0x32, 0xbe, 0x24, 0x2c, 0x43, 0x5c, 0x64, 0x38, 0x03,
+	0xd6, 0xac, 0x1d, 0xaf, 0x83, 0xfd, 0xe7, 0xe7, 0xbe, 0xb2, 0xe8, 0x67, 0xaf, 0x3f, 0x8d, 0xa2,
+	0x5f, 0xbd, 0xfd, 0xa9, 0xb6, 0x8c, 0xa8, 0x44, 0x1a, 0xd6, 0x68, 0x1e, 0xa0, 0xd8, 0x30, 0x7f,
+	0x1b, 0xce, 0x22, 0xa2, 0x72, 0x61, 0x39, 0x8b, 0x79, 0xb0, 0xb0, 0x9c, 0xab, 0xde, 0x81, 0x2e,
+	0x84, 0x61, 0x44, 0x65, 0x18, 0x5a, 0x56, 0x18, 0xce, 0x83, 0x30, 0xb4, 0xbc, 0xd3, 0xed, 0x66,
+	0xd8, 0xe0, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x43, 0xd1, 0xd8, 0x65, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_feed.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_feed.pb.go
new file mode 100644
index 0000000..237f079
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_feed.pb.go
@@ -0,0 +1,165 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_feed.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group feed.
+type AdGroupFeed struct {
+	// The resource name of the ad group feed.
+	// Ad group feed resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupFeeds/{ad_group_id}~{feed_id}
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed being linked to the ad group.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The ad group being linked to the feed.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// ad group. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,4,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the AdGroupFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,5,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the ad group feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *AdGroupFeed) Reset()         { *m = AdGroupFeed{} }
+func (m *AdGroupFeed) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeed) ProtoMessage()    {}
+func (*AdGroupFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9221b5cf8e75124f, []int{0}
+}
+
+func (m *AdGroupFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeed.Unmarshal(m, b)
+}
+func (m *AdGroupFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeed.Marshal(b, m, deterministic)
+}
+func (m *AdGroupFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeed.Merge(m, src)
+}
+func (m *AdGroupFeed) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeed.Size(m)
+}
+func (m *AdGroupFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeed proto.InternalMessageInfo
+
+func (m *AdGroupFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupFeed)(nil), "google.ads.googleads.v3.resources.AdGroupFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_feed.proto", fileDescriptor_9221b5cf8e75124f)
+}
+
+var fileDescriptor_9221b5cf8e75124f = []byte{
+	// 533 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x5d, 0x6b, 0xd4, 0x4c,
+	0x18, 0x25, 0xbb, 0xfb, 0xee, 0xab, 0x53, 0x2d, 0xdb, 0x5c, 0xc5, 0x52, 0x64, 0xab, 0x16, 0xf6,
+	0x6a, 0xa6, 0x6e, 0xfc, 0x80, 0x78, 0x63, 0x16, 0xec, 0x82, 0xa8, 0x2c, 0xa9, 0x2c, 0x2a, 0x2b,
+	0x61, 0x9a, 0x99, 0x4d, 0x43, 0x33, 0x1f, 0xcc, 0x24, 0x95, 0x52, 0xfa, 0x67, 0x04, 0x6f, 0xfc,
+	0x29, 0xfe, 0x94, 0xfe, 0x07, 0x41, 0x92, 0x4c, 0xb2, 0x1f, 0xb2, 0xb6, 0x77, 0x27, 0xcf, 0x9c,
+	0xf3, 0xcc, 0x79, 0x9e, 0x93, 0x01, 0xcf, 0x63, 0x21, 0xe2, 0x94, 0x22, 0x4c, 0x34, 0xaa, 0x60,
+	0x81, 0xce, 0x5d, 0xa4, 0xa8, 0x16, 0xb9, 0x8a, 0xa8, 0x46, 0x98, 0x84, 0xb1, 0x12, 0xb9, 0x0c,
+	0xe7, 0x94, 0x12, 0x28, 0x95, 0xc8, 0x84, 0xbd, 0x5f, 0x71, 0x21, 0x26, 0x1a, 0x36, 0x32, 0x78,
+	0xee, 0xc2, 0x46, 0xb6, 0xfb, 0x62, 0x53, 0xe7, 0x48, 0x30, 0x26, 0x38, 0x62, 0x38, 0x8b, 0x4e,
+	0x13, 0x1e, 0x87, 0xf3, 0x9c, 0x47, 0x59, 0x22, 0x78, 0xd5, 0x7a, 0xf7, 0xd9, 0x26, 0x1d, 0xe5,
+	0x39, 0xd3, 0xa8, 0x30, 0x11, 0xa6, 0x09, 0x3f, 0x0b, 0x75, 0x86, 0xb3, 0x5c, 0xdf, 0x4e, 0x25,
+	0x53, 0x1c, 0xd1, 0x53, 0x91, 0x12, 0xaa, 0xc2, 0xec, 0x42, 0x52, 0xa3, 0x7a, 0x50, 0xab, 0x64,
+	0xd2, 0x0c, 0x6c, 0x8e, 0x1e, 0x9a, 0xa3, 0xf2, 0xeb, 0x24, 0x9f, 0xa3, 0x6f, 0x0a, 0x4b, 0x49,
+	0x55, 0x7d, 0xe1, 0xde, 0x92, 0x14, 0x73, 0x2e, 0x32, 0x5c, 0xcc, 0x60, 0x4e, 0x1f, 0xfd, 0xe8,
+	0x80, 0x2d, 0x9f, 0x8c, 0x8b, 0xb5, 0x1d, 0x51, 0x4a, 0xec, 0xc7, 0xe0, 0x7e, 0xdd, 0x3f, 0xe4,
+	0x98, 0x51, 0xc7, 0xea, 0x5b, 0x83, 0xbb, 0xc1, 0xbd, 0xba, 0xf8, 0x01, 0x33, 0x6a, 0x1f, 0x82,
+	0x4e, 0x31, 0x9d, 0xd3, 0xea, 0x5b, 0x83, 0xad, 0xe1, 0x9e, 0x59, 0x2c, 0xac, 0x1d, 0xc0, 0xe3,
+	0x4c, 0x25, 0x3c, 0x9e, 0xe2, 0x34, 0xa7, 0x41, 0xc9, 0xb4, 0x5f, 0x82, 0x3b, 0x75, 0x3a, 0x4e,
+	0xfb, 0x16, 0xaa, 0xff, 0x71, 0xe5, 0xc9, 0x16, 0x60, 0x67, 0x7d, 0x25, 0xda, 0xe9, 0xf4, 0xdb,
+	0x83, 0xed, 0xe1, 0x08, 0x6e, 0xca, 0xb6, 0x5c, 0x25, 0x9c, 0x2c, 0x74, 0x1f, 0x2f, 0x24, 0x7d,
+	0xc3, 0x73, 0xb6, 0x5e, 0x0b, 0x7a, 0x72, 0xb5, 0xa0, 0xed, 0xaf, 0x60, 0xe7, 0xaf, 0xc0, 0x9d,
+	0xff, 0x4a, 0xcb, 0x87, 0x1b, 0x2f, 0xac, 0xfe, 0x14, 0xf8, 0xde, 0x08, 0x8f, 0x8c, 0x2e, 0xe8,
+	0xb1, 0xb5, 0x8a, 0xfd, 0x09, 0x74, 0xab, 0xdf, 0xc1, 0xe9, 0xf6, 0xad, 0xc1, 0xf6, 0xf0, 0xf5,
+	0x0d, 0x43, 0x14, 0xa1, 0xbc, 0x4b, 0xf8, 0xd9, 0x71, 0x29, 0x2a, 0x67, 0x58, 0x2d, 0x05, 0xa6,
+	0x9f, 0x37, 0xbb, 0xf6, 0x3f, 0x83, 0x27, 0x8b, 0x16, 0x06, 0xc9, 0x44, 0x17, 0xf6, 0xd0, 0x72,
+	0xc8, 0x4f, 0xa3, 0x5c, 0x67, 0x82, 0x51, 0xa5, 0xd1, 0x65, 0x0d, 0xaf, 0x10, 0x5e, 0x30, 0x34,
+	0xba, 0x5c, 0x79, 0x4c, 0x57, 0xa3, 0xdf, 0x16, 0x38, 0x88, 0x04, 0x83, 0x37, 0x3e, 0xa7, 0x51,
+	0x6f, 0xe9, 0xa6, 0x49, 0x91, 0xed, 0xc4, 0xfa, 0xf2, 0xd6, 0xc8, 0x62, 0x91, 0x62, 0x1e, 0x43,
+	0xa1, 0x62, 0x14, 0x53, 0x5e, 0x26, 0x8f, 0x16, 0x3e, 0xff, 0xf1, 0xb6, 0x5f, 0x35, 0xe8, 0x7b,
+	0xab, 0x3d, 0xf6, 0xfd, 0x9f, 0xad, 0xfd, 0x71, 0xd5, 0xd2, 0x27, 0x1a, 0x56, 0xb0, 0x40, 0x53,
+	0x17, 0x06, 0x35, 0xf3, 0x57, 0xcd, 0x99, 0xf9, 0x44, 0xcf, 0x1a, 0xce, 0x6c, 0xea, 0xce, 0x1a,
+	0xce, 0x75, 0xeb, 0xa0, 0x3a, 0xf0, 0x3c, 0x9f, 0x68, 0xcf, 0x6b, 0x58, 0x9e, 0x37, 0x75, 0x3d,
+	0xaf, 0xe1, 0x9d, 0x74, 0x4b, 0xb3, 0xee, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x27, 0x72,
+	0x73, 0x87, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_label.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_label.pb.go
new file mode 100644
index 0000000..2fd274d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_label.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A relationship between an ad group and a label.
+type AdGroupLabel struct {
+	// The resource name of the ad group label.
+	// Ad group label resource names have the form:
+	// `customers/{customer_id}/adGroupLabels/{ad_group_id}~{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group to which the label is attached.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The label assigned to the ad group.
+	Label                *wrappers.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdGroupLabel) Reset()         { *m = AdGroupLabel{} }
+func (m *AdGroupLabel) String() string { return proto.CompactTextString(m) }
+func (*AdGroupLabel) ProtoMessage()    {}
+func (*AdGroupLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cc4fee60b3e79c3f, []int{0}
+}
+
+func (m *AdGroupLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupLabel.Unmarshal(m, b)
+}
+func (m *AdGroupLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupLabel.Marshal(b, m, deterministic)
+}
+func (m *AdGroupLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupLabel.Merge(m, src)
+}
+func (m *AdGroupLabel) XXX_Size() int {
+	return xxx_messageInfo_AdGroupLabel.Size(m)
+}
+func (m *AdGroupLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupLabel proto.InternalMessageInfo
+
+func (m *AdGroupLabel) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupLabel) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupLabel) GetLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroupLabel)(nil), "google.ads.googleads.v3.resources.AdGroupLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_label.proto", fileDescriptor_cc4fee60b3e79c3f)
+}
+
+var fileDescriptor_cc4fee60b3e79c3f = []byte{
+	// 376 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0x49, 0xca, 0xf7, 0x2f, 0x5f, 0x5d, 0x98, 0x55, 0x2d, 0x45, 0x5a, 0xa5, 0xd0, 0xd5,
+	0x0c, 0x34, 0xa0, 0x30, 0xae, 0xd2, 0x4d, 0x41, 0x44, 0x4a, 0x85, 0x2c, 0x24, 0x10, 0xa6, 0xc9,
+	0x38, 0x04, 0x92, 0x99, 0x30, 0x93, 0xd4, 0x45, 0xe9, 0xc2, 0x57, 0x71, 0xe9, 0xa3, 0xf8, 0x28,
+	0x7d, 0x08, 0x91, 0x64, 0x32, 0xd3, 0x76, 0xa3, 0xee, 0x4e, 0x72, 0x7f, 0xe7, 0xde, 0x73, 0x73,
+	0xe3, 0x5c, 0x51, 0xce, 0x69, 0x46, 0x20, 0x4e, 0x24, 0x54, 0xb2, 0x56, 0x6b, 0x0f, 0x0a, 0x22,
+	0x79, 0x25, 0x62, 0x22, 0x21, 0x4e, 0x22, 0x2a, 0x78, 0x55, 0x44, 0x19, 0x5e, 0x91, 0x0c, 0x14,
+	0x82, 0x97, 0xdc, 0x1d, 0x29, 0x18, 0xe0, 0x44, 0x02, 0xe3, 0x03, 0x6b, 0x0f, 0x18, 0x5f, 0xff,
+	0x4c, 0xb7, 0x2e, 0x52, 0xd3, 0x4d, 0xb9, 0xfb, 0xe7, 0x6d, 0xa9, 0x79, 0x5a, 0x55, 0x4f, 0xf0,
+	0x59, 0xe0, 0xa2, 0x20, 0x42, 0xb6, 0xf5, 0xc1, 0x81, 0x15, 0x33, 0xc6, 0x4b, 0x5c, 0xa6, 0x9c,
+	0xb5, 0xd5, 0x8b, 0x17, 0xdb, 0xe9, 0xfa, 0xc9, 0xbc, 0xce, 0x74, 0x57, 0x47, 0x72, 0x2f, 0x9d,
+	0x13, 0x3d, 0x20, 0x62, 0x38, 0x27, 0x3d, 0x6b, 0x68, 0x4d, 0xfe, 0x2d, 0xbb, 0xfa, 0xe5, 0x3d,
+	0xce, 0x89, 0x7b, 0xed, 0xfc, 0xd5, 0x9b, 0xf4, 0xec, 0xa1, 0x35, 0xf9, 0x3f, 0x1d, 0xb4, 0xc9,
+	0x81, 0x8e, 0x01, 0x1e, 0x4a, 0x91, 0x32, 0x1a, 0xe0, 0xac, 0x22, 0xcb, 0x3f, 0x58, 0x8d, 0x70,
+	0xa7, 0xce, 0xaf, 0x66, 0xf3, 0x5e, 0xe7, 0x07, 0x2e, 0x85, 0xa2, 0x68, 0xe7, 0x87, 0xce, 0x78,
+	0xff, 0x61, 0x5a, 0x55, 0xa4, 0x12, 0xc4, 0x3c, 0x87, 0x47, 0xe9, 0xbd, 0xb8, 0x92, 0x25, 0xcf,
+	0x89, 0x90, 0x70, 0xa3, 0xe5, 0x16, 0xe2, 0x03, 0x44, 0xc2, 0xcd, 0xf1, 0x11, 0xb6, 0xb3, 0x0f,
+	0xcb, 0x19, 0xc7, 0x3c, 0x07, 0xdf, 0x9e, 0x61, 0x76, 0x7a, 0x38, 0x6c, 0x51, 0x67, 0x5e, 0x58,
+	0x8f, 0xb7, 0xad, 0x8f, 0xf2, 0x0c, 0x33, 0x0a, 0xb8, 0xa0, 0x90, 0x12, 0xd6, 0x6c, 0x04, 0xf7,
+	0x59, 0xbf, 0xf8, 0x2b, 0x6e, 0x8c, 0x7a, 0xb5, 0x3b, 0x73, 0xdf, 0x7f, 0xb3, 0x47, 0x73, 0xd5,
+	0xd2, 0x4f, 0x24, 0x50, 0xb2, 0x56, 0x81, 0x07, 0x96, 0x9a, 0x7c, 0xd7, 0x4c, 0xe8, 0x27, 0x32,
+	0x34, 0x4c, 0x18, 0x78, 0xa1, 0x61, 0x76, 0xf6, 0x58, 0x15, 0x10, 0xf2, 0x13, 0x89, 0x90, 0xa1,
+	0x10, 0x0a, 0x3c, 0x84, 0x0c, 0xb7, 0xfa, 0xdd, 0x84, 0xf5, 0x3e, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0x54, 0x2f, 0x32, 0x48, 0xc1, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_group_simulation.pb.go b/googleapis/ads/googleads/v3/resources/ad_group_simulation.pb.go
new file mode 100644
index 0000000..32eb9ef
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_group_simulation.pb.go
@@ -0,0 +1,243 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_group_simulation.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad group simulation. Supported combinations of advertising
+// channel type, simulation type and simulation modification method is
+// detailed below respectively.
+//
+// 1. SEARCH - CPC_BID - DEFAULT
+// 2. SEARCH - CPC_BID - UNIFORM
+// 3. SEARCH - TARGET_CPA - UNIFORM
+// 4. DISPLAY - CPC_BID - DEFAULT
+// 5. DISPLAY - CPC_BID - UNIFORM
+// 6. DISPLAY - TARGET_CPA - UNIFORM
+// 7. VIDEO - CPV_BID - DEFAULT
+// 8. VIDEO - CPV_BID - UNIFORM
+type AdGroupSimulation struct {
+	// The resource name of the ad group simulation.
+	// Ad group simulation resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupSimulations/{ad_group_id}~{type}~{modification_method}~{start_date}~{end_date}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Ad group id of the simulation.
+	AdGroupId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=ad_group_id,json=adGroupId,proto3" json:"ad_group_id,omitempty"`
+	// The field that the simulation modifies.
+	Type enums.SimulationTypeEnum_SimulationType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.SimulationTypeEnum_SimulationType" json:"type,omitempty"`
+	// How the simulation modifies the field.
+	ModificationMethod enums.SimulationModificationMethodEnum_SimulationModificationMethod `protobuf:"varint,4,opt,name=modification_method,json=modificationMethod,proto3,enum=google.ads.googleads.v3.enums.SimulationModificationMethodEnum_SimulationModificationMethod" json:"modification_method,omitempty"`
+	// First day on which the simulation is based, in YYYY-MM-DD format.
+	StartDate *wrappers.StringValue `protobuf:"bytes,5,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Last day on which the simulation is based, in YYYY-MM-DD format
+	EndDate *wrappers.StringValue `protobuf:"bytes,6,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// List of simulation points.
+	//
+	// Types that are valid to be assigned to PointList:
+	//	*AdGroupSimulation_CpcBidPointList
+	//	*AdGroupSimulation_CpvBidPointList
+	//	*AdGroupSimulation_TargetCpaPointList
+	PointList            isAdGroupSimulation_PointList `protobuf_oneof:"point_list"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *AdGroupSimulation) Reset()         { *m = AdGroupSimulation{} }
+func (m *AdGroupSimulation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupSimulation) ProtoMessage()    {}
+func (*AdGroupSimulation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bfe8b62d7d533dcc, []int{0}
+}
+
+func (m *AdGroupSimulation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupSimulation.Unmarshal(m, b)
+}
+func (m *AdGroupSimulation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupSimulation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupSimulation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupSimulation.Merge(m, src)
+}
+func (m *AdGroupSimulation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupSimulation.Size(m)
+}
+func (m *AdGroupSimulation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupSimulation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupSimulation proto.InternalMessageInfo
+
+func (m *AdGroupSimulation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupSimulation) GetAdGroupId() *wrappers.Int64Value {
+	if m != nil {
+		return m.AdGroupId
+	}
+	return nil
+}
+
+func (m *AdGroupSimulation) GetType() enums.SimulationTypeEnum_SimulationType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.SimulationTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupSimulation) GetModificationMethod() enums.SimulationModificationMethodEnum_SimulationModificationMethod {
+	if m != nil {
+		return m.ModificationMethod
+	}
+	return enums.SimulationModificationMethodEnum_UNSPECIFIED
+}
+
+func (m *AdGroupSimulation) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *AdGroupSimulation) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+type isAdGroupSimulation_PointList interface {
+	isAdGroupSimulation_PointList()
+}
+
+type AdGroupSimulation_CpcBidPointList struct {
+	CpcBidPointList *common.CpcBidSimulationPointList `protobuf:"bytes,8,opt,name=cpc_bid_point_list,json=cpcBidPointList,proto3,oneof"`
+}
+
+type AdGroupSimulation_CpvBidPointList struct {
+	CpvBidPointList *common.CpvBidSimulationPointList `protobuf:"bytes,10,opt,name=cpv_bid_point_list,json=cpvBidPointList,proto3,oneof"`
+}
+
+type AdGroupSimulation_TargetCpaPointList struct {
+	TargetCpaPointList *common.TargetCpaSimulationPointList `protobuf:"bytes,9,opt,name=target_cpa_point_list,json=targetCpaPointList,proto3,oneof"`
+}
+
+func (*AdGroupSimulation_CpcBidPointList) isAdGroupSimulation_PointList() {}
+
+func (*AdGroupSimulation_CpvBidPointList) isAdGroupSimulation_PointList() {}
+
+func (*AdGroupSimulation_TargetCpaPointList) isAdGroupSimulation_PointList() {}
+
+func (m *AdGroupSimulation) GetPointList() isAdGroupSimulation_PointList {
+	if m != nil {
+		return m.PointList
+	}
+	return nil
+}
+
+func (m *AdGroupSimulation) GetCpcBidPointList() *common.CpcBidSimulationPointList {
+	if x, ok := m.GetPointList().(*AdGroupSimulation_CpcBidPointList); ok {
+		return x.CpcBidPointList
+	}
+	return nil
+}
+
+func (m *AdGroupSimulation) GetCpvBidPointList() *common.CpvBidSimulationPointList {
+	if x, ok := m.GetPointList().(*AdGroupSimulation_CpvBidPointList); ok {
+		return x.CpvBidPointList
+	}
+	return nil
+}
+
+func (m *AdGroupSimulation) GetTargetCpaPointList() *common.TargetCpaSimulationPointList {
+	if x, ok := m.GetPointList().(*AdGroupSimulation_TargetCpaPointList); ok {
+		return x.TargetCpaPointList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupSimulation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupSimulation_CpcBidPointList)(nil),
+		(*AdGroupSimulation_CpvBidPointList)(nil),
+		(*AdGroupSimulation_TargetCpaPointList)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*AdGroupSimulation)(nil), "google.ads.googleads.v3.resources.AdGroupSimulation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_group_simulation.proto", fileDescriptor_bfe8b62d7d533dcc)
+}
+
+var fileDescriptor_bfe8b62d7d533dcc = []byte{
+	// 620 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x6e, 0xd3, 0x30,
+	0x14, 0xa6, 0xdd, 0xd8, 0x8f, 0x37, 0x40, 0x04, 0x81, 0xc2, 0x98, 0xd0, 0x06, 0x9a, 0x34, 0x71,
+	0x61, 0x4b, 0x0b, 0x02, 0x91, 0x82, 0x44, 0x3a, 0xd0, 0x18, 0x62, 0x68, 0xca, 0xa6, 0x5e, 0xa0,
+	0x4a, 0x91, 0x17, 0x7b, 0x99, 0x45, 0x63, 0x9b, 0xd8, 0x29, 0x9a, 0xa6, 0x5d, 0x71, 0xcd, 0x2d,
+	0x0f, 0xc0, 0x25, 0x8f, 0xc2, 0xa3, 0xec, 0x29, 0x50, 0x9c, 0xc4, 0x2d, 0xed, 0xba, 0xf5, 0xee,
+	0xe4, 0x9c, 0xef, 0xc7, 0xe7, 0xab, 0x6b, 0xd0, 0x4a, 0x84, 0x48, 0x7a, 0x14, 0x61, 0xa2, 0x50,
+	0x59, 0x16, 0x55, 0xdf, 0x43, 0x19, 0x55, 0x22, 0xcf, 0x62, 0xaa, 0x10, 0x26, 0x51, 0x92, 0x89,
+	0x5c, 0x46, 0x8a, 0xa5, 0x79, 0x0f, 0x6b, 0x26, 0x38, 0x94, 0x99, 0xd0, 0xc2, 0x59, 0x2f, 0x19,
+	0x10, 0x13, 0x05, 0x2d, 0x19, 0xf6, 0x3d, 0x68, 0xc9, 0x2b, 0x68, 0x92, 0x7e, 0x2c, 0xd2, 0x54,
+	0x70, 0x34, 0xaa, 0xb9, 0xd2, 0x9e, 0x44, 0xa0, 0x3c, 0x4f, 0xd5, 0x10, 0x3e, 0x4a, 0x05, 0x61,
+	0xc7, 0x2c, 0xae, 0x3e, 0xa8, 0x3e, 0x11, 0xa4, 0xd2, 0xf0, 0xa6, 0xd6, 0xd0, 0xa7, 0x92, 0x56,
+	0xa4, 0x87, 0x35, 0x49, 0x32, 0xbb, 0x7c, 0x35, 0x7a, 0x5c, 0x8d, 0xcc, 0xd7, 0x51, 0x7e, 0x8c,
+	0xbe, 0x67, 0x58, 0x4a, 0x9a, 0xa9, 0x6a, 0xbe, 0x3a, 0x44, 0xc5, 0x9c, 0x0b, 0x6d, 0xc4, 0xab,
+	0xe9, 0x93, 0x5f, 0xf3, 0xe0, 0x6e, 0x40, 0x76, 0x8a, 0x08, 0x0f, 0xac, 0xb3, 0xf3, 0x14, 0xdc,
+	0xaa, 0x5d, 0x22, 0x8e, 0x53, 0xea, 0x36, 0xd6, 0x1a, 0x9b, 0x8b, 0xe1, 0x72, 0xdd, 0xfc, 0x8c,
+	0x53, 0xea, 0xb4, 0xc0, 0x92, 0x4d, 0x9f, 0x11, 0xb7, 0xb9, 0xd6, 0xd8, 0x5c, 0xda, 0x7a, 0x54,
+	0x65, 0x0d, 0xeb, 0xe3, 0xc0, 0x5d, 0xae, 0x5f, 0x3c, 0xef, 0xe0, 0x5e, 0x4e, 0xc3, 0x45, 0x5c,
+	0x3a, 0xed, 0x12, 0xe7, 0x10, 0xcc, 0x16, 0xeb, 0xb9, 0x33, 0x6b, 0x8d, 0xcd, 0xdb, 0x5b, 0x6f,
+	0xe1, 0xa4, 0x1f, 0xcb, 0x84, 0x02, 0x07, 0x47, 0x3b, 0x3c, 0x95, 0xf4, 0x3d, 0xcf, 0xd3, 0x91,
+	0x56, 0x68, 0xd4, 0x9c, 0x9f, 0x0d, 0x70, 0xef, 0x92, 0xe4, 0xdd, 0x59, 0xe3, 0xd2, 0x9d, 0xda,
+	0x65, 0x6f, 0x48, 0x63, 0xcf, 0x48, 0x8c, 0x78, 0x8e, 0x03, 0x42, 0x27, 0x1d, 0xeb, 0x39, 0x2d,
+	0x00, 0x94, 0xc6, 0x99, 0x8e, 0x08, 0xd6, 0xd4, 0xbd, 0x69, 0x12, 0x5a, 0x1d, 0x4b, 0xe8, 0x40,
+	0x67, 0x8c, 0x27, 0x55, 0x44, 0x06, 0xff, 0x0e, 0x6b, 0xea, 0xbc, 0x04, 0x0b, 0x94, 0x93, 0x92,
+	0x3a, 0x37, 0x05, 0x75, 0x9e, 0x72, 0x62, 0x88, 0x27, 0xc0, 0x89, 0x65, 0x1c, 0x1d, 0x31, 0x12,
+	0x49, 0xc1, 0xb8, 0x8e, 0x7a, 0x4c, 0x69, 0x77, 0xc1, 0x48, 0xbc, 0x9a, 0x98, 0x41, 0x79, 0xe7,
+	0xe1, 0xb6, 0x8c, 0xdb, 0x8c, 0x0c, 0x36, 0xdd, 0x2f, 0x14, 0x3e, 0x31, 0xa5, 0x3f, 0xdc, 0x08,
+	0xef, 0xc4, 0x66, 0x68, 0x5b, 0xa5, 0x53, 0x7f, 0xd4, 0x09, 0x4c, 0xeb, 0xd4, 0xbf, 0xca, 0xa9,
+	0xff, 0x9f, 0xd3, 0x37, 0x70, 0x5f, 0xe3, 0x2c, 0xa1, 0x3a, 0x8a, 0x25, 0x1e, 0x36, 0x5b, 0x34,
+	0x66, 0xaf, 0xaf, 0x33, 0x3b, 0x34, 0xe4, 0x6d, 0x89, 0x2f, 0xf7, 0x73, 0x74, 0x3d, 0xb7, 0x5d,
+	0x9f, 0x5f, 0x04, 0x5f, 0xc1, 0xb3, 0x81, 0x58, 0x55, 0x49, 0xa6, 0x0a, 0x51, 0x34, 0xfe, 0xaf,
+	0x79, 0x13, 0xe7, 0x4a, 0x8b, 0x94, 0x66, 0x0a, 0x9d, 0xd5, 0xe5, 0x39, 0xc2, 0xa3, 0x38, 0x85,
+	0xce, 0x2e, 0x79, 0xb5, 0xce, 0xdb, 0xcb, 0x00, 0x0c, 0xf6, 0x6a, 0xff, 0x68, 0x82, 0x8d, 0x58,
+	0xa4, 0xf0, 0xda, 0x57, 0xac, 0xfd, 0x60, 0xec, 0x24, 0xfb, 0xc5, 0xf5, 0xd8, 0x6f, 0x7c, 0xf9,
+	0x58, 0x91, 0x13, 0xd1, 0xc3, 0x3c, 0x81, 0x22, 0x4b, 0x50, 0x42, 0xb9, 0xb9, 0x3c, 0x68, 0xb0,
+	0xcd, 0x15, 0xcf, 0x6b, 0xcb, 0x56, 0xbf, 0x9b, 0x33, 0x3b, 0x41, 0xf0, 0xa7, 0xb9, 0xbe, 0x53,
+	0x4a, 0x06, 0x44, 0xc1, 0xb2, 0x2c, 0xaa, 0x8e, 0x07, 0xc3, 0x1a, 0xf9, 0xb7, 0xc6, 0x74, 0x03,
+	0xa2, 0xba, 0x16, 0xd3, 0xed, 0x78, 0x5d, 0x8b, 0xb9, 0x68, 0x6e, 0x94, 0x03, 0xdf, 0x0f, 0x88,
+	0xf2, 0x7d, 0x8b, 0xf2, 0xfd, 0x8e, 0xe7, 0xfb, 0x16, 0x77, 0x34, 0x67, 0x0e, 0xeb, 0xfd, 0x0b,
+	0x00, 0x00, 0xff, 0xff, 0x6a, 0x12, 0x59, 0x22, 0x0a, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_parameter.pb.go b/googleapis/ads/googleads/v3/resources/ad_parameter.pb.go
new file mode 100644
index 0000000..7a5a2fe
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_parameter.pb.go
@@ -0,0 +1,151 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_parameter.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad parameter that is used to update numeric values (such as prices or
+// inventory levels) in any text line of an ad (including URLs). There can
+// be a maximum of two AdParameters per ad group criterion. (One with
+// parameter_index = 1 and one with parameter_index = 2.)
+// In the ad the parameters are referenced by a placeholder of the form
+// "{param#:value}". E.g. "{param1:$17}"
+type AdParameter struct {
+	// The resource name of the ad parameter.
+	// Ad parameter resource names have the form:
+	//
+	// `customers/{customer_id}/adParameters/{ad_group_id}~{criterion_id}~{parameter_index}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group criterion that this ad parameter belongs to.
+	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The unique index of this ad parameter. Must be either 1 or 2.
+	ParameterIndex *wrappers.Int64Value `protobuf:"bytes,3,opt,name=parameter_index,json=parameterIndex,proto3" json:"parameter_index,omitempty"`
+	// Numeric value to insert into the ad text. The following restrictions
+	//  apply:
+	//  - Can use comma or period as a separator, with an optional period or
+	//    comma (respectively) for fractional values. For example, 1,000,000.00
+	//    and 2.000.000,10 are valid.
+	//  - Can be prepended or appended with a currency symbol. For example,
+	//    $99.99 is valid.
+	//  - Can be prepended or appended with a currency code. For example, 99.99USD
+	//    and EUR200 are valid.
+	//  - Can use '%'. For example, 1.0% and 1,0% are valid.
+	//  - Can use plus or minus. For example, -10.99 and 25+ are valid.
+	//  - Can use '/' between two numbers. For example 4/1 and 0.95/0.45 are
+	//    valid.
+	InsertionText        *wrappers.StringValue `protobuf:"bytes,4,opt,name=insertion_text,json=insertionText,proto3" json:"insertion_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdParameter) Reset()         { *m = AdParameter{} }
+func (m *AdParameter) String() string { return proto.CompactTextString(m) }
+func (*AdParameter) ProtoMessage()    {}
+func (*AdParameter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a57ac7fdbdfa053, []int{0}
+}
+
+func (m *AdParameter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdParameter.Unmarshal(m, b)
+}
+func (m *AdParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdParameter.Marshal(b, m, deterministic)
+}
+func (m *AdParameter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdParameter.Merge(m, src)
+}
+func (m *AdParameter) XXX_Size() int {
+	return xxx_messageInfo_AdParameter.Size(m)
+}
+func (m *AdParameter) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdParameter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdParameter proto.InternalMessageInfo
+
+func (m *AdParameter) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdParameter) GetAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *AdParameter) GetParameterIndex() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParameterIndex
+	}
+	return nil
+}
+
+func (m *AdParameter) GetInsertionText() *wrappers.StringValue {
+	if m != nil {
+		return m.InsertionText
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdParameter)(nil), "google.ads.googleads.v3.resources.AdParameter")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_parameter.proto", fileDescriptor_1a57ac7fdbdfa053)
+}
+
+var fileDescriptor_1a57ac7fdbdfa053 = []byte{
+	// 429 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x5f, 0x6b, 0xd5, 0x30,
+	0x18, 0xc6, 0x69, 0x27, 0x82, 0x99, 0x9b, 0xa3, 0x57, 0xc7, 0x39, 0x64, 0x53, 0x07, 0xbb, 0x4a,
+	0xc4, 0x0e, 0x2f, 0xe2, 0x55, 0x37, 0xe1, 0xb0, 0x5d, 0xc8, 0xe1, 0x28, 0x45, 0xb4, 0x50, 0xb2,
+	0xe6, 0x35, 0x04, 0x4e, 0x93, 0x92, 0xa4, 0xf3, 0xc0, 0xd8, 0x97, 0xf1, 0xd2, 0x8f, 0xe2, 0x07,
+	0xf1, 0x62, 0xdf, 0x41, 0x90, 0xfe, 0x49, 0x4e, 0x41, 0x50, 0xef, 0x9e, 0xf6, 0x7d, 0x7e, 0x4f,
+	0x9f, 0xe4, 0x2d, 0x3a, 0x15, 0x5a, 0x8b, 0x15, 0x10, 0xc6, 0x2d, 0x19, 0x64, 0xa7, 0xae, 0x53,
+	0x62, 0xc0, 0xea, 0xd6, 0x54, 0x60, 0x09, 0xe3, 0x65, 0xc3, 0x0c, 0xab, 0xc1, 0x81, 0xc1, 0x8d,
+	0xd1, 0x4e, 0x27, 0x47, 0x83, 0x15, 0x33, 0x6e, 0x71, 0xa0, 0xf0, 0x75, 0x8a, 0x03, 0xb5, 0xff,
+	0xd8, 0x07, 0x37, 0x32, 0x64, 0x0d, 0xf4, 0xfe, 0xd3, 0x71, 0xd4, 0x3f, 0x5d, 0xb5, 0x5f, 0xc8,
+	0x57, 0xc3, 0x9a, 0x06, 0x8c, 0x1d, 0xe7, 0x07, 0x13, 0x94, 0x29, 0xa5, 0x1d, 0x73, 0x52, 0xab,
+	0x71, 0xfa, 0xec, 0x67, 0x8c, 0xb6, 0x33, 0xbe, 0xf0, 0x8d, 0x92, 0xe7, 0x68, 0xc7, 0xe7, 0x97,
+	0x8a, 0xd5, 0x30, 0x8b, 0x0e, 0xa3, 0x93, 0x07, 0xcb, 0x87, 0xfe, 0xe5, 0x3b, 0x56, 0x43, 0x72,
+	0x89, 0x12, 0xc6, 0x4b, 0x61, 0x74, 0xdb, 0x94, 0x95, 0x91, 0x0e, 0x8c, 0xd4, 0x6a, 0x16, 0x1f,
+	0x46, 0x27, 0xdb, 0xaf, 0x0e, 0xc6, 0x23, 0x60, 0xdf, 0x07, 0xbf, 0x77, 0x46, 0x2a, 0x91, 0xb3,
+	0x55, 0x0b, 0xcb, 0x3d, 0xc6, 0xe7, 0x1d, 0x76, 0xee, 0xa9, 0xe4, 0x2d, 0x7a, 0x14, 0xee, 0xa3,
+	0x94, 0x8a, 0xc3, 0x7a, 0xb6, 0xd5, 0x07, 0x3d, 0xf9, 0x23, 0xe8, 0x42, 0xb9, 0xd7, 0xa7, 0x43,
+	0xce, 0x6e, 0x60, 0x2e, 0x3a, 0x24, 0x39, 0x47, 0xbb, 0x52, 0x59, 0x30, 0xdd, 0xd1, 0x4a, 0x07,
+	0x6b, 0x37, 0xbb, 0xf7, 0x1f, 0x6d, 0x76, 0x02, 0xf3, 0x01, 0xd6, 0x8e, 0x7e, 0xbe, 0xcb, 0x3e,
+	0xa2, 0x17, 0x9b, 0x0d, 0x8c, 0xaa, 0x91, 0x16, 0x57, 0xba, 0x26, 0xd3, 0x6b, 0x7a, 0x59, 0xb5,
+	0xd6, 0xe9, 0x1a, 0x8c, 0x25, 0x37, 0x5e, 0xde, 0x12, 0xb6, 0x71, 0x58, 0x72, 0x33, 0xdd, 0xf4,
+	0xed, 0xd9, 0xaf, 0x08, 0x1d, 0x57, 0xba, 0xc6, 0xff, 0xdc, 0xf5, 0xd9, 0xde, 0xe4, 0x43, 0x8b,
+	0xae, 0xf6, 0x22, 0xfa, 0x74, 0x39, 0x62, 0x42, 0xaf, 0x98, 0x12, 0x58, 0x1b, 0x41, 0x04, 0xa8,
+	0xfe, 0x50, 0x64, 0x53, 0xf3, 0x2f, 0xff, 0xdd, 0x9b, 0xa0, 0xbe, 0xc5, 0x5b, 0xf3, 0x2c, 0xfb,
+	0x1e, 0x1f, 0xcd, 0x87, 0xc8, 0x8c, 0x5b, 0x3c, 0xc8, 0x4e, 0xe5, 0x29, 0x5e, 0x7a, 0xe7, 0x0f,
+	0xef, 0x29, 0x32, 0x6e, 0x8b, 0xe0, 0x29, 0xf2, 0xb4, 0x08, 0x9e, 0xbb, 0xf8, 0x78, 0x18, 0x50,
+	0x9a, 0x71, 0x4b, 0x69, 0x70, 0x51, 0x9a, 0xa7, 0x94, 0x06, 0xdf, 0xd5, 0xfd, 0xbe, 0x6c, 0xfa,
+	0x3b, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xde, 0xba, 0xe5, 0x23, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/ad_schedule_view.pb.go b/googleapis/ads/googleads/v3/resources/ad_schedule_view.pb.go
new file mode 100644
index 0000000..b2e17ae
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/ad_schedule_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/ad_schedule_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An ad schedule view summarizes the performance of campaigns by
+// AdSchedule criteria.
+type AdScheduleView struct {
+	// The resource name of the ad schedule view.
+	// AdSchedule view resource names have the form:
+	//
+	// `customers/{customer_id}/adScheduleViews/{campaign_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdScheduleView) Reset()         { *m = AdScheduleView{} }
+func (m *AdScheduleView) String() string { return proto.CompactTextString(m) }
+func (*AdScheduleView) ProtoMessage()    {}
+func (*AdScheduleView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_99aaa568f8d5a785, []int{0}
+}
+
+func (m *AdScheduleView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdScheduleView.Unmarshal(m, b)
+}
+func (m *AdScheduleView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdScheduleView.Marshal(b, m, deterministic)
+}
+func (m *AdScheduleView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdScheduleView.Merge(m, src)
+}
+func (m *AdScheduleView) XXX_Size() int {
+	return xxx_messageInfo_AdScheduleView.Size(m)
+}
+func (m *AdScheduleView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdScheduleView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdScheduleView proto.InternalMessageInfo
+
+func (m *AdScheduleView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AdScheduleView)(nil), "google.ads.googleads.v3.resources.AdScheduleView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/ad_schedule_view.proto", fileDescriptor_99aaa568f8d5a785)
+}
+
+var fileDescriptor_99aaa568f8d5a785 = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xb1, 0x4a, 0x03, 0x41,
+	0x10, 0x86, 0xb9, 0x13, 0x04, 0x0f, 0xb5, 0x88, 0x8d, 0x06, 0x0b, 0xa3, 0x04, 0xad, 0x76, 0x8b,
+	0x2b, 0x94, 0xb5, 0xda, 0x34, 0x01, 0x0b, 0x09, 0x11, 0xae, 0x90, 0x83, 0xb0, 0xb9, 0x1d, 0xce,
+	0x83, 0xdc, 0x4e, 0xb8, 0xb9, 0x24, 0x45, 0x08, 0xf8, 0x20, 0x56, 0x96, 0x3e, 0x8a, 0x8f, 0x92,
+	0xa7, 0x90, 0x64, 0xb3, 0x1b, 0x93, 0x42, 0xbb, 0x8f, 0x9b, 0x6f, 0xfe, 0x99, 0xb9, 0x8d, 0x1e,
+	0x72, 0xc4, 0x7c, 0x04, 0x5c, 0x69, 0xe2, 0x16, 0x57, 0x34, 0x8d, 0x79, 0x05, 0x84, 0x93, 0x2a,
+	0x03, 0xe2, 0x4a, 0x0f, 0x28, 0x7b, 0x03, 0x3d, 0x19, 0xc1, 0x60, 0x5a, 0xc0, 0x8c, 0x8d, 0x2b,
+	0xac, 0xb1, 0xd1, 0xb2, 0x3a, 0x53, 0x9a, 0x98, 0xef, 0x64, 0xd3, 0x98, 0xf9, 0xce, 0xe6, 0x85,
+	0x0b, 0x1f, 0x17, 0x3e, 0xcf, 0x76, 0x37, 0x2f, 0x7f, 0x95, 0x94, 0x31, 0x58, 0xab, 0xba, 0x40,
+	0x43, 0xb6, 0x7a, 0xfd, 0x11, 0x44, 0xa7, 0x52, 0xbf, 0x6c, 0xa6, 0x26, 0x05, 0xcc, 0x1a, 0x37,
+	0xd1, 0x89, 0x8b, 0x18, 0x18, 0x55, 0xc2, 0x79, 0x70, 0x15, 0xdc, 0x1d, 0xf5, 0x8f, 0xdd, 0xc7,
+	0x67, 0x55, 0x82, 0x80, 0xa5, 0x1c, 0x46, 0xb7, 0xdb, 0x6d, 0x36, 0x34, 0x2e, 0x88, 0x65, 0x58,
+	0xf2, 0xbd, 0xc8, 0xfb, 0x6c, 0x42, 0x35, 0x96, 0x50, 0x11, 0x9f, 0x3b, 0x5c, 0x70, 0xb5, 0x23,
+	0x11, 0x9f, 0xef, 0xdf, 0xbf, 0xe8, 0xbc, 0x87, 0x51, 0x3b, 0xc3, 0x92, 0xfd, 0xfb, 0x07, 0x3a,
+	0x67, 0xbb, 0x23, 0x7b, 0xab, 0xeb, 0x7a, 0xc1, 0xeb, 0xd3, 0xa6, 0x33, 0xc7, 0x91, 0x32, 0x39,
+	0xc3, 0x2a, 0xe7, 0x39, 0x98, 0xf5, 0xed, 0x7c, 0xbb, 0xf3, 0x1f, 0x8f, 0xf2, 0xe8, 0xe9, 0x33,
+	0x3c, 0xe8, 0x4a, 0xf9, 0x15, 0xb6, 0xba, 0x36, 0x52, 0x6a, 0x62, 0x16, 0x57, 0x94, 0xc4, 0xac,
+	0xef, 0xcc, 0x6f, 0xe7, 0xa4, 0x52, 0x53, 0xea, 0x9d, 0x34, 0x89, 0x53, 0xef, 0x2c, 0xc3, 0xb6,
+	0x2d, 0x08, 0x21, 0x35, 0x09, 0xe1, 0x2d, 0x21, 0x92, 0x58, 0x08, 0xef, 0x0d, 0x0f, 0xd7, 0xcb,
+	0xc6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x6d, 0xce, 0x2d, 0x40, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/age_range_view.pb.go b/googleapis/ads/googleads/v3/resources/age_range_view.pb.go
new file mode 100644
index 0000000..9d53e09
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/age_range_view.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/age_range_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An age range view.
+type AgeRangeView struct {
+	// The resource name of the age range view.
+	// Age range view resource names have the form:
+	//
+	// `customers/{customer_id}/ageRangeViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AgeRangeView) Reset()         { *m = AgeRangeView{} }
+func (m *AgeRangeView) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeView) ProtoMessage()    {}
+func (*AgeRangeView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b1b9693e56ac43d6, []int{0}
+}
+
+func (m *AgeRangeView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeView.Unmarshal(m, b)
+}
+func (m *AgeRangeView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeView.Marshal(b, m, deterministic)
+}
+func (m *AgeRangeView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeView.Merge(m, src)
+}
+func (m *AgeRangeView) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeView.Size(m)
+}
+func (m *AgeRangeView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeView proto.InternalMessageInfo
+
+func (m *AgeRangeView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AgeRangeView)(nil), "google.ads.googleads.v3.resources.AgeRangeView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/age_range_view.proto", fileDescriptor_b1b9693e56ac43d6)
+}
+
+var fileDescriptor_b1b9693e56ac43d6 = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xb1, 0x4a, 0x03, 0x41,
+	0x10, 0x86, 0xb9, 0x08, 0x82, 0x47, 0x2c, 0x4c, 0xa5, 0xc1, 0xc2, 0x28, 0x01, 0xab, 0xdd, 0x62,
+	0xc1, 0x62, 0xad, 0x36, 0x4d, 0xc0, 0x42, 0x42, 0x8a, 0x2b, 0xe4, 0xe0, 0x58, 0xef, 0x86, 0xe5,
+	0x20, 0xb7, 0x13, 0x6e, 0x2e, 0x49, 0x11, 0xf2, 0x16, 0x3e, 0x81, 0xa5, 0x8f, 0xe2, 0xa3, 0xe4,
+	0x21, 0x44, 0x2e, 0x9b, 0xdd, 0x24, 0x8d, 0x76, 0x3f, 0x3b, 0xdf, 0xff, 0xcf, 0xfc, 0x6c, 0xfc,
+	0x64, 0x10, 0xcd, 0x0c, 0xb8, 0x2e, 0x88, 0x3b, 0xd9, 0xaa, 0xa5, 0xe0, 0x35, 0x10, 0x2e, 0xea,
+	0x1c, 0x88, 0x6b, 0x03, 0x59, 0xad, 0xad, 0x81, 0x6c, 0x59, 0xc2, 0x8a, 0xcd, 0x6b, 0x6c, 0xb0,
+	0x37, 0x70, 0x30, 0xd3, 0x05, 0xb1, 0xe0, 0x63, 0x4b, 0xc1, 0x82, 0xaf, 0x7f, 0xe3, 0xa3, 0xe7,
+	0x65, 0x48, 0x73, 0xee, 0xfe, 0xed, 0xd1, 0x48, 0x5b, 0x8b, 0x8d, 0x6e, 0x4a, 0xb4, 0xe4, 0xa6,
+	0xf7, 0x1f, 0x51, 0xdc, 0x55, 0x06, 0xa6, 0xed, 0xce, 0xa4, 0x84, 0x55, 0xef, 0x21, 0xbe, 0xf4,
+	0x01, 0x99, 0xd5, 0x15, 0x5c, 0x47, 0x77, 0xd1, 0xe3, 0xc5, 0xb4, 0xeb, 0x1f, 0x5f, 0x75, 0x05,
+	0x32, 0xdb, 0xaa, 0x34, 0x1e, 0x1e, 0x6e, 0xd9, 0xab, 0x79, 0x49, 0x2c, 0xc7, 0x8a, 0x9f, 0x04,
+	0x8a, 0x7c, 0x41, 0x0d, 0x56, 0x50, 0x13, 0x5f, 0x7b, 0xb9, 0x69, 0x8b, 0x06, 0x84, 0xf8, 0xfa,
+	0xb4, 0xf7, 0x66, 0xf4, 0x13, 0xc5, 0xc3, 0x1c, 0x2b, 0xf6, 0x6f, 0xf3, 0xd1, 0xd5, 0xf1, 0xb2,
+	0x49, 0xdb, 0x69, 0x12, 0xbd, 0xbd, 0xec, 0x7d, 0x06, 0x67, 0xda, 0x1a, 0x86, 0xb5, 0xe1, 0x06,
+	0xec, 0xae, 0x31, 0x3f, 0xdc, 0xfa, 0xc7, 0x47, 0x3c, 0x07, 0xf5, 0xd9, 0x39, 0x1b, 0x2b, 0xf5,
+	0xd5, 0x19, 0x8c, 0x5d, 0xa4, 0x2a, 0x88, 0x39, 0xd9, 0xaa, 0x44, 0xb0, 0xa9, 0x27, 0xbf, 0x3d,
+	0x93, 0xaa, 0x82, 0xd2, 0xc0, 0xa4, 0x89, 0x48, 0x03, 0xb3, 0xed, 0x0c, 0xdd, 0x40, 0x4a, 0x55,
+	0x90, 0x94, 0x81, 0x92, 0x32, 0x11, 0x52, 0x06, 0xee, 0xfd, 0x7c, 0x77, 0xac, 0xf8, 0x0d, 0x00,
+	0x00, 0xff, 0xff, 0xb4, 0x84, 0xe5, 0x40, 0x34, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/asset.pb.go b/googleapis/ads/googleads/v3/resources/asset.pb.go
new file mode 100644
index 0000000..f6803a3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/asset.pb.go
@@ -0,0 +1,226 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/asset.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Asset is a part of an ad which can be shared across multiple ads.
+// It can be an image (ImageAsset), a video (YoutubeVideoAsset), etc.
+type Asset struct {
+	// The resource name of the asset.
+	// Asset resource names have the form:
+	//
+	// `customers/{customer_id}/assets/{asset_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the asset.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Optional name of the asset.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// Type of the asset.
+	Type enums.AssetTypeEnum_AssetType `protobuf:"varint,4,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.AssetTypeEnum_AssetType" json:"type,omitempty"`
+	// The specific type of the asset.
+	//
+	// Types that are valid to be assigned to AssetData:
+	//	*Asset_YoutubeVideoAsset
+	//	*Asset_MediaBundleAsset
+	//	*Asset_ImageAsset
+	//	*Asset_TextAsset
+	AssetData            isAsset_AssetData `protobuf_oneof:"asset_data"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Asset) Reset()         { *m = Asset{} }
+func (m *Asset) String() string { return proto.CompactTextString(m) }
+func (*Asset) ProtoMessage()    {}
+func (*Asset) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8cc8f6a72ea26cf4, []int{0}
+}
+
+func (m *Asset) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Asset.Unmarshal(m, b)
+}
+func (m *Asset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Asset.Marshal(b, m, deterministic)
+}
+func (m *Asset) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Asset.Merge(m, src)
+}
+func (m *Asset) XXX_Size() int {
+	return xxx_messageInfo_Asset.Size(m)
+}
+func (m *Asset) XXX_DiscardUnknown() {
+	xxx_messageInfo_Asset.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Asset proto.InternalMessageInfo
+
+func (m *Asset) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Asset) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Asset) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Asset) GetType() enums.AssetTypeEnum_AssetType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AssetTypeEnum_UNSPECIFIED
+}
+
+type isAsset_AssetData interface {
+	isAsset_AssetData()
+}
+
+type Asset_YoutubeVideoAsset struct {
+	YoutubeVideoAsset *common.YoutubeVideoAsset `protobuf:"bytes,5,opt,name=youtube_video_asset,json=youtubeVideoAsset,proto3,oneof"`
+}
+
+type Asset_MediaBundleAsset struct {
+	MediaBundleAsset *common.MediaBundleAsset `protobuf:"bytes,6,opt,name=media_bundle_asset,json=mediaBundleAsset,proto3,oneof"`
+}
+
+type Asset_ImageAsset struct {
+	ImageAsset *common.ImageAsset `protobuf:"bytes,7,opt,name=image_asset,json=imageAsset,proto3,oneof"`
+}
+
+type Asset_TextAsset struct {
+	TextAsset *common.TextAsset `protobuf:"bytes,8,opt,name=text_asset,json=textAsset,proto3,oneof"`
+}
+
+func (*Asset_YoutubeVideoAsset) isAsset_AssetData() {}
+
+func (*Asset_MediaBundleAsset) isAsset_AssetData() {}
+
+func (*Asset_ImageAsset) isAsset_AssetData() {}
+
+func (*Asset_TextAsset) isAsset_AssetData() {}
+
+func (m *Asset) GetAssetData() isAsset_AssetData {
+	if m != nil {
+		return m.AssetData
+	}
+	return nil
+}
+
+func (m *Asset) GetYoutubeVideoAsset() *common.YoutubeVideoAsset {
+	if x, ok := m.GetAssetData().(*Asset_YoutubeVideoAsset); ok {
+		return x.YoutubeVideoAsset
+	}
+	return nil
+}
+
+func (m *Asset) GetMediaBundleAsset() *common.MediaBundleAsset {
+	if x, ok := m.GetAssetData().(*Asset_MediaBundleAsset); ok {
+		return x.MediaBundleAsset
+	}
+	return nil
+}
+
+func (m *Asset) GetImageAsset() *common.ImageAsset {
+	if x, ok := m.GetAssetData().(*Asset_ImageAsset); ok {
+		return x.ImageAsset
+	}
+	return nil
+}
+
+func (m *Asset) GetTextAsset() *common.TextAsset {
+	if x, ok := m.GetAssetData().(*Asset_TextAsset); ok {
+		return x.TextAsset
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Asset) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Asset_YoutubeVideoAsset)(nil),
+		(*Asset_MediaBundleAsset)(nil),
+		(*Asset_ImageAsset)(nil),
+		(*Asset_TextAsset)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*Asset)(nil), "google.ads.googleads.v3.resources.Asset")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/asset.proto", fileDescriptor_8cc8f6a72ea26cf4)
+}
+
+var fileDescriptor_8cc8f6a72ea26cf4 = []byte{
+	// 552 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x49, 0xd6, 0x0e, 0xe6, 0x0d, 0x04, 0xe1, 0xa6, 0x8c, 0x69, 0xea, 0x40, 0x93, 0x0a,
+	0x08, 0xa7, 0x2c, 0x68, 0x17, 0xe1, 0x2a, 0x95, 0xa6, 0x6d, 0x95, 0x86, 0xa6, 0x32, 0x55, 0x02,
+	0x55, 0x2a, 0x6e, 0x6c, 0x22, 0x4b, 0xb5, 0x1d, 0xc5, 0x4e, 0x59, 0x35, 0xed, 0x21, 0x78, 0x05,
+	0x2e, 0x79, 0x14, 0x1e, 0x65, 0x2f, 0xc0, 0x2d, 0x8a, 0xff, 0xa4, 0xd3, 0x50, 0xe9, 0x55, 0x8f,
+	0xed, 0xef, 0xfb, 0x7d, 0x27, 0xee, 0x31, 0x78, 0x9b, 0x09, 0x91, 0x4d, 0x49, 0x88, 0xb0, 0x0c,
+	0x4d, 0x59, 0x55, 0xb3, 0x28, 0x2c, 0x88, 0x14, 0x65, 0x91, 0x12, 0x19, 0x22, 0x29, 0x89, 0x82,
+	0x79, 0x21, 0x94, 0x08, 0xf6, 0x8c, 0x06, 0x22, 0x2c, 0x61, 0x2d, 0x87, 0xb3, 0x08, 0xd6, 0xf2,
+	0xed, 0xee, 0x32, 0x62, 0x2a, 0x18, 0x13, 0xdc, 0xe0, 0xc6, 0x6a, 0x9e, 0x13, 0x69, 0xa0, 0xdb,
+	0x70, 0x99, 0x83, 0xf0, 0x92, 0xc9, 0x5b, 0x06, 0xab, 0x7f, 0xe6, 0xf4, 0x39, 0xad, 0xdb, 0xb4,
+	0x47, 0xbb, 0xf6, 0x48, 0xaf, 0x26, 0xe5, 0xb7, 0xf0, 0x7b, 0x81, 0xf2, 0x9c, 0x14, 0x2e, 0x6a,
+	0xe7, 0x96, 0x15, 0x71, 0x2e, 0x14, 0x52, 0x54, 0x70, 0x7b, 0xfa, 0xe2, 0x47, 0x13, 0x34, 0x93,
+	0x2a, 0x2d, 0x78, 0x09, 0x1e, 0x3a, 0xf2, 0x98, 0x23, 0x46, 0x5a, 0x5e, 0xdb, 0xeb, 0x6c, 0x0c,
+	0xb6, 0xdc, 0xe6, 0x47, 0xc4, 0x48, 0xf0, 0x06, 0xf8, 0x14, 0xb7, 0xfc, 0xb6, 0xd7, 0xd9, 0x3c,
+	0x78, 0x6e, 0x3f, 0x02, 0xba, 0x64, 0x78, 0xca, 0xd5, 0xe1, 0xfb, 0x21, 0x9a, 0x96, 0x64, 0xe0,
+	0x53, 0x1c, 0x74, 0x41, 0x43, 0x83, 0xd6, 0xb4, 0x7c, 0xe7, 0x1f, 0xf9, 0x27, 0x55, 0x50, 0x9e,
+	0x19, 0xbd, 0x56, 0x06, 0x7d, 0xd0, 0xa8, 0x3e, 0xba, 0xd5, 0x68, 0x7b, 0x9d, 0x47, 0x07, 0x87,
+	0x70, 0xd9, 0xd5, 0xeb, 0x5b, 0x82, 0xba, 0xef, 0x8b, 0x79, 0x4e, 0x8e, 0x78, 0xc9, 0x16, 0xab,
+	0x81, 0x66, 0x04, 0x29, 0x78, 0x3a, 0x17, 0xa5, 0x2a, 0x27, 0x64, 0x3c, 0xa3, 0x98, 0x88, 0xb1,
+	0xbe, 0xd4, 0x56, 0x53, 0x37, 0xf3, 0x6e, 0x29, 0xda, 0xfc, 0x65, 0xf0, 0xb3, 0xb1, 0x0e, 0x2b,
+	0xa7, 0x26, 0x9f, 0xdc, 0x1b, 0x3c, 0x99, 0xdf, 0xdd, 0x0c, 0xbe, 0x82, 0x80, 0x11, 0x4c, 0xd1,
+	0x78, 0x52, 0x72, 0x3c, 0x25, 0x36, 0x63, 0x5d, 0x67, 0x74, 0x57, 0x65, 0x9c, 0x55, 0xce, 0x9e,
+	0x36, 0xba, 0x88, 0xc7, 0xec, 0xce, 0x5e, 0x70, 0x06, 0x36, 0x29, 0x43, 0x99, 0x43, 0xdf, 0xd7,
+	0xe8, 0xd7, 0xab, 0xd0, 0xa7, 0x95, 0xc5, 0x41, 0x01, 0xad, 0x57, 0x41, 0x1f, 0x00, 0x45, 0x2e,
+	0x95, 0xa5, 0x3d, 0xd0, 0xb4, 0x57, 0xab, 0x68, 0x17, 0xe4, 0x52, 0x39, 0xd8, 0x86, 0x72, 0x8b,
+	0xf8, 0xe4, 0x26, 0x39, 0x02, 0xbb, 0x0b, 0x83, 0xad, 0x72, 0x2a, 0x2b, 0x63, 0x68, 0xc7, 0x2a,
+	0x2d, 0xa5, 0x12, 0x8c, 0x14, 0x32, 0xbc, 0x72, 0xe5, 0xb5, 0x19, 0x70, 0x19, 0x5e, 0xe9, 0xdf,
+	0xeb, 0xde, 0x16, 0x00, 0x66, 0xe4, 0x31, 0x52, 0xa8, 0xf7, 0xc7, 0x03, 0xfb, 0xa9, 0x60, 0x70,
+	0xe5, 0xc3, 0xeb, 0x01, 0x9d, 0x71, 0x5e, 0x0d, 0xd4, 0xb9, 0xf7, 0xa5, 0x6f, 0x0d, 0x99, 0x98,
+	0x22, 0x9e, 0x41, 0x51, 0x64, 0x61, 0x46, 0xb8, 0x1e, 0xb7, 0x70, 0xd1, 0xdb, 0x7f, 0xde, 0xfd,
+	0x87, 0xba, 0xfa, 0xe9, 0xaf, 0x1d, 0x27, 0xc9, 0x2f, 0x7f, 0xef, 0xd8, 0x20, 0x13, 0x2c, 0xa1,
+	0x29, 0xab, 0x6a, 0x18, 0xc1, 0x81, 0x53, 0xfe, 0x76, 0x9a, 0x51, 0x82, 0xe5, 0xa8, 0xd6, 0x8c,
+	0x86, 0xd1, 0xa8, 0xd6, 0xdc, 0xf8, 0xfb, 0xe6, 0x20, 0x8e, 0x13, 0x2c, 0xe3, 0xb8, 0x56, 0xc5,
+	0xf1, 0x30, 0x8a, 0xe3, 0x5a, 0x37, 0x59, 0xd7, 0xcd, 0x46, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0xbd, 0xe2, 0xeb, 0xa7, 0xa3, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/bidding_strategy.pb.go b/googleapis/ads/googleads/v3/resources/bidding_strategy.pb.go
new file mode 100644
index 0000000..bc58208
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/bidding_strategy.pb.go
@@ -0,0 +1,290 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/bidding_strategy.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A bidding strategy.
+type BiddingStrategy struct {
+	// The resource name of the bidding strategy.
+	// Bidding strategy resource names have the form:
+	//
+	// `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the bidding strategy.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the bidding strategy.
+	// All bidding strategies within an account must be named distinctly.
+	//
+	// The length of this string should be between 1 and 255, inclusive,
+	// in UTF-8 bytes, (trimmed).
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the bidding strategy.
+	//
+	// This field is read-only.
+	Status enums.BiddingStrategyStatusEnum_BiddingStrategyStatus `protobuf:"varint,15,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.BiddingStrategyStatusEnum_BiddingStrategyStatus" json:"status,omitempty"`
+	// The type of the bidding strategy.
+	// Create a bidding strategy by setting the bidding scheme.
+	//
+	// This field is read-only.
+	Type enums.BiddingStrategyTypeEnum_BiddingStrategyType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.BiddingStrategyTypeEnum_BiddingStrategyType" json:"type,omitempty"`
+	// The number of campaigns attached to this bidding strategy.
+	//
+	// This field is read-only.
+	CampaignCount *wrappers.Int64Value `protobuf:"bytes,13,opt,name=campaign_count,json=campaignCount,proto3" json:"campaign_count,omitempty"`
+	// The number of non-removed campaigns attached to this bidding strategy.
+	//
+	// This field is read-only.
+	NonRemovedCampaignCount *wrappers.Int64Value `protobuf:"bytes,14,opt,name=non_removed_campaign_count,json=nonRemovedCampaignCount,proto3" json:"non_removed_campaign_count,omitempty"`
+	// The bidding scheme.
+	//
+	// Only one can be set.
+	//
+	// Types that are valid to be assigned to Scheme:
+	//	*BiddingStrategy_EnhancedCpc
+	//	*BiddingStrategy_TargetCpa
+	//	*BiddingStrategy_TargetImpressionShare
+	//	*BiddingStrategy_TargetRoas
+	//	*BiddingStrategy_TargetSpend
+	Scheme               isBiddingStrategy_Scheme `protobuf_oneof:"scheme"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *BiddingStrategy) Reset()         { *m = BiddingStrategy{} }
+func (m *BiddingStrategy) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategy) ProtoMessage()    {}
+func (*BiddingStrategy) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ac3d020c2b1960dc, []int{0}
+}
+
+func (m *BiddingStrategy) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategy.Unmarshal(m, b)
+}
+func (m *BiddingStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategy.Marshal(b, m, deterministic)
+}
+func (m *BiddingStrategy) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategy.Merge(m, src)
+}
+func (m *BiddingStrategy) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategy.Size(m)
+}
+func (m *BiddingStrategy) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategy.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategy proto.InternalMessageInfo
+
+func (m *BiddingStrategy) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *BiddingStrategy) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetStatus() enums.BiddingStrategyStatusEnum_BiddingStrategyStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.BiddingStrategyStatusEnum_UNSPECIFIED
+}
+
+func (m *BiddingStrategy) GetType() enums.BiddingStrategyTypeEnum_BiddingStrategyType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.BiddingStrategyTypeEnum_UNSPECIFIED
+}
+
+func (m *BiddingStrategy) GetCampaignCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.CampaignCount
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetNonRemovedCampaignCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.NonRemovedCampaignCount
+	}
+	return nil
+}
+
+type isBiddingStrategy_Scheme interface {
+	isBiddingStrategy_Scheme()
+}
+
+type BiddingStrategy_EnhancedCpc struct {
+	EnhancedCpc *common.EnhancedCpc `protobuf:"bytes,7,opt,name=enhanced_cpc,json=enhancedCpc,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetCpa struct {
+	TargetCpa *common.TargetCpa `protobuf:"bytes,9,opt,name=target_cpa,json=targetCpa,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetImpressionShare struct {
+	TargetImpressionShare *common.TargetImpressionShare `protobuf:"bytes,48,opt,name=target_impression_share,json=targetImpressionShare,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetRoas struct {
+	TargetRoas *common.TargetRoas `protobuf:"bytes,11,opt,name=target_roas,json=targetRoas,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetSpend struct {
+	TargetSpend *common.TargetSpend `protobuf:"bytes,12,opt,name=target_spend,json=targetSpend,proto3,oneof"`
+}
+
+func (*BiddingStrategy_EnhancedCpc) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetCpa) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetImpressionShare) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetRoas) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetSpend) isBiddingStrategy_Scheme() {}
+
+func (m *BiddingStrategy) GetScheme() isBiddingStrategy_Scheme {
+	if m != nil {
+		return m.Scheme
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetEnhancedCpc() *common.EnhancedCpc {
+	if x, ok := m.GetScheme().(*BiddingStrategy_EnhancedCpc); ok {
+		return x.EnhancedCpc
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetCpa() *common.TargetCpa {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetCpa); ok {
+		return x.TargetCpa
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetImpressionShare() *common.TargetImpressionShare {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetImpressionShare); ok {
+		return x.TargetImpressionShare
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetRoas() *common.TargetRoas {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetRoas); ok {
+		return x.TargetRoas
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetSpend() *common.TargetSpend {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetSpend); ok {
+		return x.TargetSpend
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*BiddingStrategy) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*BiddingStrategy_EnhancedCpc)(nil),
+		(*BiddingStrategy_TargetCpa)(nil),
+		(*BiddingStrategy_TargetImpressionShare)(nil),
+		(*BiddingStrategy_TargetRoas)(nil),
+		(*BiddingStrategy_TargetSpend)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*BiddingStrategy)(nil), "google.ads.googleads.v3.resources.BiddingStrategy")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/bidding_strategy.proto", fileDescriptor_ac3d020c2b1960dc)
+}
+
+var fileDescriptor_ac3d020c2b1960dc = []byte{
+	// 676 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x4e, 0xdb, 0x30,
+	0x14, 0xc6, 0xdb, 0xc2, 0x18, 0xb8, 0xfc, 0x91, 0xa2, 0x4d, 0x64, 0x0c, 0x4d, 0xb0, 0x09, 0xa9,
+	0x1b, 0x93, 0x83, 0xe8, 0x36, 0x8d, 0x70, 0x95, 0x56, 0x88, 0x82, 0x34, 0x84, 0x52, 0x54, 0x4d,
+	0x53, 0xb5, 0xc8, 0x24, 0x26, 0x8d, 0x44, 0x6c, 0xcb, 0x76, 0x98, 0x10, 0xe2, 0x62, 0x4f, 0x32,
+	0x69, 0x97, 0x7b, 0x94, 0x3d, 0x0a, 0x4f, 0x31, 0xd9, 0x71, 0xd2, 0xad, 0xd0, 0x15, 0xee, 0x8e,
+	0x73, 0xbe, 0xef, 0xf7, 0xd9, 0x27, 0x89, 0xc1, 0xc7, 0x98, 0xd2, 0xf8, 0x1c, 0x3b, 0x28, 0x12,
+	0x4e, 0x5e, 0xaa, 0xea, 0xa2, 0xe9, 0x70, 0x2c, 0x68, 0xc6, 0x43, 0x2c, 0x9c, 0xd3, 0x24, 0x8a,
+	0x12, 0x12, 0x07, 0x42, 0x72, 0x24, 0x71, 0x7c, 0x09, 0x19, 0xa7, 0x92, 0x5a, 0xeb, 0xb9, 0x1c,
+	0xa2, 0x48, 0xc0, 0xd2, 0x09, 0x2f, 0x9a, 0xb0, 0x74, 0xae, 0xbc, 0x1d, 0x07, 0x0f, 0x69, 0x9a,
+	0x52, 0x52, 0x90, 0x73, 0xe0, 0xca, 0xee, 0x38, 0x35, 0x26, 0x59, 0x7a, 0x7b, 0x1b, 0x81, 0x90,
+	0x48, 0x66, 0xc2, 0x98, 0x77, 0x1e, 0x68, 0x96, 0x97, 0x0c, 0x1b, 0xeb, 0xb3, 0xc2, 0xca, 0x92,
+	0xf2, 0xd4, 0xa6, 0xf5, 0xc2, 0xb4, 0xf4, 0xea, 0x34, 0x3b, 0x73, 0xbe, 0x71, 0xc4, 0x18, 0xe6,
+	0x45, 0xea, 0xea, 0x5f, 0x56, 0x44, 0x08, 0x95, 0x48, 0x26, 0x94, 0x98, 0xee, 0xcb, 0x1f, 0xb3,
+	0x60, 0xa9, 0x95, 0x07, 0x77, 0x4d, 0xae, 0xf5, 0x0a, 0x2c, 0x14, 0x19, 0x01, 0x41, 0x29, 0xb6,
+	0xab, 0x6b, 0xd5, 0xc6, 0x9c, 0x3f, 0x5f, 0x3c, 0x3c, 0x42, 0x29, 0xb6, 0x36, 0x41, 0x2d, 0x89,
+	0xec, 0xa9, 0xb5, 0x6a, 0xa3, 0xbe, 0xfd, 0xdc, 0x0c, 0x17, 0x16, 0x7b, 0x80, 0x07, 0x44, 0x7e,
+	0x78, 0xd7, 0x43, 0xe7, 0x19, 0xf6, 0x6b, 0x49, 0x64, 0x6d, 0x81, 0x69, 0x0d, 0x9a, 0xd6, 0xf2,
+	0xd5, 0x5b, 0xf2, 0xae, 0xe4, 0x09, 0x89, 0x73, 0xbd, 0x56, 0x5a, 0x67, 0x60, 0x26, 0x9f, 0x9d,
+	0xbd, 0xb4, 0x56, 0x6d, 0x2c, 0x6e, 0x1f, 0xc1, 0x71, 0xaf, 0x52, 0x0f, 0x0f, 0x8e, 0x9c, 0xa1,
+	0xab, 0xbd, 0x7b, 0x24, 0x4b, 0xef, 0xee, 0xf8, 0x86, 0x6e, 0x7d, 0x05, 0xd3, 0x6a, 0xcc, 0xf6,
+	0x23, 0x9d, 0x72, 0xf8, 0xb0, 0x94, 0x93, 0x4b, 0x86, 0xef, 0xca, 0x50, 0xcf, 0x7d, 0xcd, 0xb5,
+	0x5a, 0x60, 0x31, 0x44, 0x29, 0x43, 0x49, 0x4c, 0x82, 0x90, 0x66, 0x44, 0xda, 0x0b, 0x93, 0x47,
+	0xb6, 0x50, 0x58, 0xda, 0xca, 0x61, 0x7d, 0x06, 0x2b, 0x84, 0x92, 0x80, 0xe3, 0x94, 0x5e, 0xe0,
+	0x28, 0x18, 0xe1, 0x2d, 0x4e, 0xe6, 0x2d, 0x13, 0x4a, 0xfc, 0xdc, 0xdd, 0xfe, 0x87, 0x7c, 0x0c,
+	0xe6, 0x31, 0x19, 0x20, 0x12, 0x2a, 0x2c, 0x0b, 0xed, 0xc7, 0x9a, 0xb5, 0x39, 0x76, 0x0a, 0xf9,
+	0x3f, 0x01, 0xf7, 0x8c, 0xa7, 0xcd, 0xc2, 0x4e, 0xc5, 0xaf, 0xe3, 0xe1, 0xd2, 0x3a, 0x04, 0x40,
+	0x22, 0x1e, 0x63, 0x19, 0x84, 0x0c, 0xd9, 0x73, 0x9a, 0xf7, 0x7a, 0x12, 0xef, 0x44, 0x3b, 0xda,
+	0x0c, 0x75, 0x2a, 0xfe, 0x9c, 0x2c, 0x16, 0x16, 0x05, 0xcb, 0x86, 0x95, 0xa4, 0x8c, 0x63, 0x21,
+	0x12, 0x4a, 0x02, 0x31, 0x40, 0x1c, 0xdb, 0x5b, 0x1a, 0xfc, 0xfe, 0x7e, 0xe0, 0x83, 0xd2, 0xdd,
+	0x55, 0xe6, 0x4e, 0xc5, 0x7f, 0x2a, 0xef, 0x6a, 0x58, 0x9f, 0x40, 0xdd, 0x04, 0x72, 0x8a, 0x84,
+	0x5d, 0xd7, 0x21, 0x6f, 0xee, 0x17, 0xe2, 0x53, 0x24, 0x3a, 0x15, 0xdf, 0x9c, 0x5e, 0xad, 0xd4,
+	0x74, 0x0d, 0x4e, 0x30, 0x4c, 0x22, 0x7b, 0xfe, 0x7e, 0xd3, 0xcd, 0x79, 0x5d, 0x65, 0x51, 0xd3,
+	0x95, 0xc3, 0xa5, 0x3b, 0xb8, 0xf1, 0x30, 0x68, 0x0c, 0x4d, 0xa6, 0x62, 0x89, 0x50, 0x66, 0x67,
+	0xf4, 0x47, 0xde, 0x09, 0x33, 0x21, 0x69, 0x8a, 0xb9, 0x70, 0xae, 0x8a, 0xf2, 0xba, 0xb8, 0x67,
+	0x8c, 0x2a, 0xc1, 0xc2, 0xb9, 0x1a, 0xbd, 0x7a, 0xae, 0x5b, 0xb3, 0x60, 0x46, 0x84, 0x03, 0x9c,
+	0xe2, 0xd6, 0xf7, 0x1a, 0xd8, 0x08, 0x69, 0x0a, 0x27, 0x5e, 0xa5, 0xad, 0x27, 0x23, 0xf9, 0xc7,
+	0xea, 0x53, 0x3c, 0xae, 0x7e, 0x39, 0x34, 0xd6, 0x98, 0x9e, 0x23, 0x12, 0x43, 0xca, 0x63, 0x27,
+	0xc6, 0x44, 0x7f, 0xa8, 0xce, 0xf0, 0x04, 0xff, 0xb9, 0xde, 0x77, 0xcb, 0xea, 0x67, 0x6d, 0x6a,
+	0xdf, 0xf3, 0x7e, 0xd5, 0xd6, 0xf7, 0x73, 0xa4, 0x17, 0x09, 0x98, 0x97, 0xaa, 0xea, 0x35, 0xa1,
+	0x5f, 0x28, 0x7f, 0x17, 0x9a, 0xbe, 0x17, 0x89, 0x7e, 0xa9, 0xe9, 0xf7, 0x9a, 0xfd, 0x52, 0x73,
+	0x53, 0xdb, 0xc8, 0x1b, 0xae, 0xeb, 0x45, 0xc2, 0x75, 0x4b, 0x95, 0xeb, 0xf6, 0x9a, 0xae, 0x5b,
+	0xea, 0x4e, 0x67, 0xf4, 0x66, 0x9b, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x9e, 0x85, 0x4c,
+	0x8a, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/billing_setup.pb.go b/googleapis/ads/googleads/v3/resources/billing_setup.pb.go
new file mode 100644
index 0000000..349eab1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/billing_setup.pb.go
@@ -0,0 +1,365 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/billing_setup.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A billing setup, which associates a payments account and an advertiser. A
+// billing setup is specific to one advertiser.
+type BillingSetup struct {
+	// The resource name of the billing setup.
+	// BillingSetup resource names have the form:
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the billing setup.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The status of the billing setup.
+	Status enums.BillingSetupStatusEnum_BillingSetupStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.BillingSetupStatusEnum_BillingSetupStatus" json:"status,omitempty"`
+	// The resource name of the payments account associated with this billing
+	// setup. Payments resource names have the form:
+	//
+	// `customers/{customer_id}/paymentsAccounts/{payments_account_id}`
+	// When setting up billing, this is used to signup with an existing payments
+	// account (and then payments_account_info should not be set).
+	// When getting a billing setup, this and payments_account_info will be
+	// populated.
+	PaymentsAccount *wrappers.StringValue `protobuf:"bytes,11,opt,name=payments_account,json=paymentsAccount,proto3" json:"payments_account,omitempty"`
+	// The payments account information associated with this billing setup.
+	// When setting up billing, this is used to signup with a new payments account
+	// (and then payments_account should not be set).
+	// When getting a billing setup, this and payments_account will be
+	// populated.
+	PaymentsAccountInfo *BillingSetup_PaymentsAccountInfo `protobuf:"bytes,12,opt,name=payments_account_info,json=paymentsAccountInfo,proto3" json:"payments_account_info,omitempty"`
+	// When creating a new billing setup, this is when the setup should take
+	// effect. NOW is the only acceptable start time if the customer doesn't have
+	// any approved setups.
+	//
+	// When fetching an existing billing setup, this is the requested start time.
+	// However, if the setup was approved (see status) after the requested start
+	// time, then this is the approval time.
+	//
+	// Types that are valid to be assigned to StartTime:
+	//	*BillingSetup_StartDateTime
+	//	*BillingSetup_StartTimeType
+	StartTime isBillingSetup_StartTime `protobuf_oneof:"start_time"`
+	// When the billing setup ends / ended. This is either FOREVER or the start
+	// time of the next scheduled billing setup.
+	//
+	// Types that are valid to be assigned to EndTime:
+	//	*BillingSetup_EndDateTime
+	//	*BillingSetup_EndTimeType
+	EndTime              isBillingSetup_EndTime `protobuf_oneof:"end_time"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *BillingSetup) Reset()         { *m = BillingSetup{} }
+func (m *BillingSetup) String() string { return proto.CompactTextString(m) }
+func (*BillingSetup) ProtoMessage()    {}
+func (*BillingSetup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_979051338dc39b64, []int{0}
+}
+
+func (m *BillingSetup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetup.Unmarshal(m, b)
+}
+func (m *BillingSetup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetup.Marshal(b, m, deterministic)
+}
+func (m *BillingSetup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetup.Merge(m, src)
+}
+func (m *BillingSetup) XXX_Size() int {
+	return xxx_messageInfo_BillingSetup.Size(m)
+}
+func (m *BillingSetup) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetup proto.InternalMessageInfo
+
+func (m *BillingSetup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *BillingSetup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStatus() enums.BillingSetupStatusEnum_BillingSetupStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.BillingSetupStatusEnum_UNSPECIFIED
+}
+
+func (m *BillingSetup) GetPaymentsAccount() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccount
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetPaymentsAccountInfo() *BillingSetup_PaymentsAccountInfo {
+	if m != nil {
+		return m.PaymentsAccountInfo
+	}
+	return nil
+}
+
+type isBillingSetup_StartTime interface {
+	isBillingSetup_StartTime()
+}
+
+type BillingSetup_StartDateTime struct {
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,9,opt,name=start_date_time,json=startDateTime,proto3,oneof"`
+}
+
+type BillingSetup_StartTimeType struct {
+	StartTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,10,opt,name=start_time_type,json=startTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*BillingSetup_StartDateTime) isBillingSetup_StartTime() {}
+
+func (*BillingSetup_StartTimeType) isBillingSetup_StartTime() {}
+
+func (m *BillingSetup) GetStartTime() isBillingSetup_StartTime {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStartDateTime() *wrappers.StringValue {
+	if x, ok := m.GetStartTime().(*BillingSetup_StartDateTime); ok {
+		return x.StartDateTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStartTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetStartTime().(*BillingSetup_StartTimeType); ok {
+		return x.StartTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isBillingSetup_EndTime interface {
+	isBillingSetup_EndTime()
+}
+
+type BillingSetup_EndDateTime struct {
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,13,opt,name=end_date_time,json=endDateTime,proto3,oneof"`
+}
+
+type BillingSetup_EndTimeType struct {
+	EndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,14,opt,name=end_time_type,json=endTimeType,proto3,enum=google.ads.googleads.v3.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*BillingSetup_EndDateTime) isBillingSetup_EndTime() {}
+
+func (*BillingSetup_EndTimeType) isBillingSetup_EndTime() {}
+
+func (m *BillingSetup) GetEndTime() isBillingSetup_EndTime {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetEndTime().(*BillingSetup_EndDateTime); ok {
+		return x.EndDateTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetEndTime().(*BillingSetup_EndTimeType); ok {
+		return x.EndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*BillingSetup) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*BillingSetup_StartDateTime)(nil),
+		(*BillingSetup_StartTimeType)(nil),
+		(*BillingSetup_EndDateTime)(nil),
+		(*BillingSetup_EndTimeType)(nil),
+	}
+}
+
+// Container of payments account information for this billing.
+type BillingSetup_PaymentsAccountInfo struct {
+	// A 16 digit id used to identify the payments account associated with the
+	// billing setup.
+	//
+	// This must be passed as a string with dashes, e.g. "1234-5678-9012-3456".
+	PaymentsAccountId *wrappers.StringValue `protobuf:"bytes,1,opt,name=payments_account_id,json=paymentsAccountId,proto3" json:"payments_account_id,omitempty"`
+	// The name of the payments account associated with the billing setup.
+	//
+	// This enables the user to specify a meaningful name for a payments account
+	// to aid in reconciling monthly invoices.
+	//
+	// This name will be printed in the monthly invoices.
+	PaymentsAccountName *wrappers.StringValue `protobuf:"bytes,2,opt,name=payments_account_name,json=paymentsAccountName,proto3" json:"payments_account_name,omitempty"`
+	// A 12 digit id used to identify the payments profile associated with the
+	// billing setup.
+	//
+	// This must be passed in as a string with dashes, e.g. "1234-5678-9012".
+	PaymentsProfileId *wrappers.StringValue `protobuf:"bytes,3,opt,name=payments_profile_id,json=paymentsProfileId,proto3" json:"payments_profile_id,omitempty"`
+	// The name of the payments profile associated with the billing setup.
+	PaymentsProfileName *wrappers.StringValue `protobuf:"bytes,4,opt,name=payments_profile_name,json=paymentsProfileName,proto3" json:"payments_profile_name,omitempty"`
+	// A secondary payments profile id present in uncommon situations, e.g.
+	// when a sequential liability agreement has been arranged.
+	SecondaryPaymentsProfileId *wrappers.StringValue `protobuf:"bytes,5,opt,name=secondary_payments_profile_id,json=secondaryPaymentsProfileId,proto3" json:"secondary_payments_profile_id,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
+	XXX_unrecognized           []byte                `json:"-"`
+	XXX_sizecache              int32                 `json:"-"`
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) Reset()         { *m = BillingSetup_PaymentsAccountInfo{} }
+func (m *BillingSetup_PaymentsAccountInfo) String() string { return proto.CompactTextString(m) }
+func (*BillingSetup_PaymentsAccountInfo) ProtoMessage()    {}
+func (*BillingSetup_PaymentsAccountInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_979051338dc39b64, []int{0, 0}
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Unmarshal(m, b)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Marshal(b, m, deterministic)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Merge(m, src)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Size() int {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Size(m)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetup_PaymentsAccountInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetup_PaymentsAccountInfo proto.InternalMessageInfo
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountId
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsAccountName() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountName
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileId
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsProfileName() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileName
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetSecondaryPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.SecondaryPaymentsProfileId
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*BillingSetup)(nil), "google.ads.googleads.v3.resources.BillingSetup")
+	proto.RegisterType((*BillingSetup_PaymentsAccountInfo)(nil), "google.ads.googleads.v3.resources.BillingSetup.PaymentsAccountInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/billing_setup.proto", fileDescriptor_979051338dc39b64)
+}
+
+var fileDescriptor_979051338dc39b64 = []byte{
+	// 681 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xed, 0x4e, 0xdb, 0x3a,
+	0x18, 0xc7, 0x4f, 0xd2, 0x73, 0xd0, 0xc1, 0xb4, 0x70, 0x08, 0x3a, 0x52, 0xd6, 0xb1, 0x09, 0x36,
+	0x21, 0x21, 0x4d, 0x73, 0x24, 0xca, 0xa6, 0x29, 0xfb, 0x94, 0xee, 0x05, 0x98, 0xa6, 0xa9, 0x0a,
+	0xa8, 0x1f, 0x58, 0x45, 0x66, 0x62, 0x37, 0x8a, 0xd4, 0xd8, 0x51, 0xec, 0x80, 0x2a, 0xc4, 0xcd,
+	0xec, 0xe3, 0x2e, 0x60, 0x17, 0xb1, 0x4b, 0xe1, 0x22, 0xb6, 0x29, 0x76, 0x9c, 0xbe, 0x50, 0x28,
+	0x68, 0xdf, 0x9e, 0xd8, 0xcf, 0xff, 0xdf, 0xdf, 0xf3, 0xf8, 0xb1, 0x0b, 0x5e, 0x44, 0x8c, 0x45,
+	0x03, 0xe2, 0x20, 0xcc, 0x1d, 0x15, 0x16, 0xd1, 0x59, 0xcb, 0xc9, 0x08, 0x67, 0x79, 0x16, 0x12,
+	0xee, 0x9c, 0xc6, 0x83, 0x41, 0x4c, 0xa3, 0x80, 0x13, 0x91, 0xa7, 0x30, 0xcd, 0x98, 0x60, 0xd6,
+	0xa6, 0xca, 0x85, 0x08, 0x73, 0x58, 0xc9, 0xe0, 0x59, 0x0b, 0x56, 0xb2, 0xe6, 0xab, 0x9b, 0x9c,
+	0x09, 0xcd, 0x93, 0x29, 0xd7, 0x80, 0x0b, 0x24, 0x72, 0xae, 0xcc, 0x9b, 0xcf, 0x6f, 0x57, 0x8a,
+	0x38, 0x21, 0x81, 0x18, 0xa6, 0xa4, 0x4c, 0x7f, 0xa0, 0xd3, 0xd3, 0xb8, 0xa2, 0x2e, 0xb7, 0x1e,
+	0x97, 0x5b, 0xf2, 0xeb, 0x34, 0xef, 0x3b, 0xe7, 0x19, 0x4a, 0x53, 0x92, 0xe9, 0x5f, 0x5a, 0x1f,
+	0x93, 0x22, 0x4a, 0x99, 0x40, 0x22, 0x66, 0xb4, 0xdc, 0x7d, 0xf2, 0x6b, 0x11, 0xd4, 0xdb, 0x0a,
+	0xf3, 0xb0, 0xa0, 0xb4, 0x9e, 0x82, 0x86, 0xfe, 0x81, 0x80, 0xa2, 0x84, 0xd8, 0xc6, 0x86, 0xb1,
+	0xbd, 0xe8, 0xd7, 0xf5, 0xe2, 0x27, 0x94, 0x10, 0xeb, 0x19, 0x30, 0x63, 0x6c, 0x9b, 0x1b, 0xc6,
+	0xf6, 0xd2, 0xce, 0xc3, 0xb2, 0x39, 0x50, 0x03, 0xc0, 0x03, 0x2a, 0x5e, 0xee, 0x76, 0xd1, 0x20,
+	0x27, 0xbe, 0x19, 0x63, 0xeb, 0x0b, 0x58, 0x50, 0xa5, 0xdb, 0xb5, 0x0d, 0x63, 0x7b, 0x79, 0x67,
+	0x1f, 0xde, 0xd4, 0x58, 0x59, 0x3b, 0x1c, 0xc7, 0x39, 0x94, 0xc2, 0x77, 0x34, 0x4f, 0x66, 0x2c,
+	0xfb, 0xa5, 0xaf, 0xb5, 0x07, 0xfe, 0x4b, 0xd1, 0x30, 0x21, 0x54, 0xf0, 0x00, 0x85, 0x21, 0xcb,
+	0xa9, 0xb0, 0x97, 0x24, 0xdc, 0xfa, 0x35, 0xb8, 0x43, 0x91, 0xc5, 0x34, 0x52, 0x74, 0x2b, 0x5a,
+	0xe5, 0x29, 0x91, 0x75, 0x0e, 0xfe, 0x9f, 0x36, 0x0a, 0x62, 0xda, 0x67, 0x76, 0x5d, 0xba, 0xbd,
+	0x81, 0x73, 0x47, 0x62, 0x02, 0x13, 0x76, 0x26, 0xfd, 0x0f, 0x68, 0x9f, 0xf9, 0x6b, 0xe9, 0xf5,
+	0x45, 0xeb, 0x3d, 0x58, 0xe1, 0x02, 0x65, 0x22, 0xc0, 0x48, 0x90, 0xa0, 0x38, 0x7d, 0x7b, 0x71,
+	0x7e, 0x01, 0xfb, 0x7f, 0xf9, 0x0d, 0x29, 0x7b, 0x8b, 0x04, 0x39, 0x8a, 0x13, 0x62, 0x9d, 0x68,
+	0x9f, 0x6a, 0x80, 0x6c, 0x20, 0x9b, 0xbe, 0x3b, 0xa7, 0xe9, 0x85, 0xfa, 0x68, 0x98, 0x12, 0xd9,
+	0x6a, 0xfd, 0x51, 0xf9, 0xeb, 0x05, 0xab, 0x0d, 0x1a, 0x84, 0xe2, 0x31, 0xca, 0xc6, 0x1d, 0x28,
+	0x0d, 0x7f, 0x89, 0x50, 0x5c, 0x31, 0x1e, 0x2b, 0x8f, 0x11, 0xe1, 0xf2, 0x1f, 0x10, 0x2a, 0x6f,
+	0xfd, 0xd9, 0xfc, 0x5e, 0x03, 0x6b, 0x33, 0x9a, 0x6e, 0x7d, 0x04, 0x6b, 0xd7, 0x0f, 0x16, 0xcb,
+	0xd9, 0x9e, 0x37, 0x24, 0xab, 0xd3, 0xe7, 0x85, 0xad, 0xce, 0x8c, 0x31, 0x91, 0x77, 0xc5, 0xbc,
+	0x83, 0xdf, 0xf4, 0xf9, 0xcb, 0x0b, 0x35, 0xce, 0x97, 0x66, 0xac, 0x1f, 0x0f, 0x48, 0xc1, 0x57,
+	0xbb, 0x0f, 0x5f, 0x47, 0xe9, 0xa6, 0xf8, 0xb4, 0x9b, 0xe4, 0xfb, 0xfb, 0x3e, 0x7c, 0xa5, 0x9f,
+	0xe4, 0x0b, 0xc0, 0x23, 0x4e, 0x42, 0x46, 0x31, 0xca, 0x86, 0xc1, 0x2c, 0xd2, 0x7f, 0xee, 0xe0,
+	0xdc, 0xac, 0x2c, 0x3a, 0xd3, 0xc8, 0xee, 0xc9, 0x95, 0xf7, 0x19, 0x6c, 0x8d, 0x8e, 0xbd, 0x8c,
+	0xd2, 0x98, 0xc3, 0x90, 0x25, 0xce, 0xc4, 0x13, 0xb5, 0x13, 0xe6, 0x5c, 0xb0, 0x84, 0x64, 0xdc,
+	0xb9, 0xd0, 0xe1, 0xa5, 0x7e, 0x6c, 0x65, 0x0a, 0x77, 0x2e, 0x26, 0xde, 0xde, 0xcb, 0x76, 0x1d,
+	0x80, 0xd1, 0xc5, 0x68, 0x03, 0xf0, 0xaf, 0x1e, 0xc1, 0xf6, 0x4f, 0x03, 0x6c, 0x85, 0x2c, 0x99,
+	0x7f, 0xb5, 0xdb, 0xab, 0xe3, 0x14, 0x9d, 0xa2, 0xc2, 0x8e, 0x71, 0xfc, 0xa1, 0xd4, 0x45, 0x6c,
+	0x80, 0x68, 0x04, 0x59, 0x16, 0x39, 0x11, 0xa1, 0xb2, 0x7e, 0x67, 0x54, 0xc4, 0x2d, 0xff, 0x3d,
+	0xaf, 0xab, 0xe8, 0xab, 0x59, 0xdb, 0xf3, 0xbc, 0x6f, 0xe6, 0xe6, 0x9e, 0xb2, 0xf4, 0x30, 0x87,
+	0x2a, 0x2c, 0xa2, 0x6e, 0x0b, 0xfa, 0x3a, 0xf3, 0x87, 0xce, 0xe9, 0x79, 0x98, 0xf7, 0xaa, 0x9c,
+	0x5e, 0xb7, 0xd5, 0xab, 0x72, 0xae, 0xcc, 0x2d, 0xb5, 0xe1, 0xba, 0x1e, 0xe6, 0xae, 0x5b, 0x65,
+	0xb9, 0x6e, 0xb7, 0xe5, 0xba, 0x55, 0xde, 0xe9, 0x82, 0x84, 0x6d, 0xfd, 0x0e, 0x00, 0x00, 0xff,
+	0xff, 0xfa, 0xda, 0xc8, 0xb5, 0x27, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign.pb.go b/googleapis/ads/googleads/v3/resources/campaign.pb.go
new file mode 100644
index 0000000..5a123c1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign.pb.go
@@ -0,0 +1,1272 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign.
+type Campaign struct {
+	// The resource name of the campaign.
+	// Campaign resource names have the form:
+	//
+	// `customers/{customer_id}/campaigns/{campaign_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the campaign.
+	//
+	// This field is required and should not be empty when creating new
+	// campaigns.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the campaign.
+	//
+	// When a new campaign is added, the status defaults to ENABLED.
+	Status enums.CampaignStatusEnum_CampaignStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CampaignStatusEnum_CampaignStatus" json:"status,omitempty"`
+	// The ad serving status of the campaign.
+	ServingStatus enums.CampaignServingStatusEnum_CampaignServingStatus `protobuf:"varint,21,opt,name=serving_status,json=servingStatus,proto3,enum=google.ads.googleads.v3.enums.CampaignServingStatusEnum_CampaignServingStatus" json:"serving_status,omitempty"`
+	// The ad serving optimization status of the campaign.
+	AdServingOptimizationStatus enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus `protobuf:"varint,8,opt,name=ad_serving_optimization_status,json=adServingOptimizationStatus,proto3,enum=google.ads.googleads.v3.enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus" json:"ad_serving_optimization_status,omitempty"`
+	// The primary serving target for ads within the campaign.
+	// The targeting options can be refined in `network_settings`.
+	//
+	// This field is required and should not be empty when creating new
+	// campaigns.
+	//
+	// Can be set only when creating campaigns.
+	// After the campaign is created, the field can not be changed.
+	AdvertisingChannelType enums.AdvertisingChannelTypeEnum_AdvertisingChannelType `protobuf:"varint,9,opt,name=advertising_channel_type,json=advertisingChannelType,proto3,enum=google.ads.googleads.v3.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType" json:"advertising_channel_type,omitempty"`
+	// Optional refinement to `advertising_channel_type`.
+	// Must be a valid sub-type of the parent channel type.
+	//
+	// Can be set only when creating campaigns.
+	// After campaign is created, the field can not be changed.
+	AdvertisingChannelSubType enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType `protobuf:"varint,10,opt,name=advertising_channel_sub_type,json=advertisingChannelSubType,proto3,enum=google.ads.googleads.v3.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType" json:"advertising_channel_sub_type,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,11,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,12,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// Settings for Real-Time Bidding, a feature only available for campaigns
+	// targeting the Ad Exchange network.
+	RealTimeBiddingSetting *common.RealTimeBiddingSetting `protobuf:"bytes,39,opt,name=real_time_bidding_setting,json=realTimeBiddingSetting,proto3" json:"real_time_bidding_setting,omitempty"`
+	// The network settings for the campaign.
+	NetworkSettings *Campaign_NetworkSettings `protobuf:"bytes,14,opt,name=network_settings,json=networkSettings,proto3" json:"network_settings,omitempty"`
+	// The hotel setting for the campaign.
+	HotelSetting *Campaign_HotelSettingInfo `protobuf:"bytes,32,opt,name=hotel_setting,json=hotelSetting,proto3" json:"hotel_setting,omitempty"`
+	// The setting for controlling Dynamic Search Ads (DSA).
+	DynamicSearchAdsSetting *Campaign_DynamicSearchAdsSetting `protobuf:"bytes,33,opt,name=dynamic_search_ads_setting,json=dynamicSearchAdsSetting,proto3" json:"dynamic_search_ads_setting,omitempty"`
+	// The setting for controlling Shopping campaigns.
+	ShoppingSetting *Campaign_ShoppingSetting `protobuf:"bytes,36,opt,name=shopping_setting,json=shoppingSetting,proto3" json:"shopping_setting,omitempty"`
+	// Setting for targeting related features.
+	TargetingSetting *common.TargetingSetting `protobuf:"bytes,43,opt,name=targeting_setting,json=targetingSetting,proto3" json:"targeting_setting,omitempty"`
+	// The setting for ads geotargeting.
+	GeoTargetTypeSetting *Campaign_GeoTargetTypeSetting `protobuf:"bytes,47,opt,name=geo_target_type_setting,json=geoTargetTypeSetting,proto3" json:"geo_target_type_setting,omitempty"`
+	// The setting related to App Campaign.
+	AppCampaignSetting *Campaign_AppCampaignSetting `protobuf:"bytes,51,opt,name=app_campaign_setting,json=appCampaignSetting,proto3" json:"app_campaign_setting,omitempty"`
+	// The resource names of labels attached to this campaign.
+	Labels []*wrappers.StringValue `protobuf:"bytes,53,rep,name=labels,proto3" json:"labels,omitempty"`
+	// The type of campaign: normal, draft, or experiment.
+	ExperimentType enums.CampaignExperimentTypeEnum_CampaignExperimentType `protobuf:"varint,17,opt,name=experiment_type,json=experimentType,proto3,enum=google.ads.googleads.v3.enums.CampaignExperimentTypeEnum_CampaignExperimentType" json:"experiment_type,omitempty"`
+	// The resource name of the base campaign of a draft or experiment campaign.
+	// For base campaigns, this is equal to `resource_name`.
+	//
+	// This field is read-only.
+	BaseCampaign *wrappers.StringValue `protobuf:"bytes,28,opt,name=base_campaign,json=baseCampaign,proto3" json:"base_campaign,omitempty"`
+	// The budget of the campaign.
+	CampaignBudget *wrappers.StringValue `protobuf:"bytes,6,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The type of bidding strategy.
+	//
+	// A bidding strategy can be created by setting either the bidding scheme to
+	// create a standard bidding strategy or the `bidding_strategy` field to
+	// create a portfolio bidding strategy.
+	//
+	// This field is read-only.
+	BiddingStrategyType enums.BiddingStrategyTypeEnum_BiddingStrategyType `protobuf:"varint,22,opt,name=bidding_strategy_type,json=biddingStrategyType,proto3,enum=google.ads.googleads.v3.enums.BiddingStrategyTypeEnum_BiddingStrategyType" json:"bidding_strategy_type,omitempty"`
+	// The date when campaign started.
+	//
+	// This field must not be used in WHERE clauses.
+	StartDate *wrappers.StringValue `protobuf:"bytes,19,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// The date when campaign ended.
+	//
+	// This field must not be used in WHERE clauses.
+	EndDate *wrappers.StringValue `protobuf:"bytes,20,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// Suffix used to append query parameters to landing pages that are served
+	// with parallel tracking.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,38,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// A list that limits how often each user will see this campaign's ads.
+	FrequencyCaps []*common.FrequencyCapEntry `protobuf:"bytes,40,rep,name=frequency_caps,json=frequencyCaps,proto3" json:"frequency_caps,omitempty"`
+	// 3-Tier Brand Safety setting for the campaign.
+	VideoBrandSafetySuitability enums.BrandSafetySuitabilityEnum_BrandSafetySuitability `protobuf:"varint,42,opt,name=video_brand_safety_suitability,json=videoBrandSafetySuitability,proto3,enum=google.ads.googleads.v3.enums.BrandSafetySuitabilityEnum_BrandSafetySuitability" json:"video_brand_safety_suitability,omitempty"`
+	// Describes how unbranded pharma ads will be displayed.
+	VanityPharma *Campaign_VanityPharma `protobuf:"bytes,44,opt,name=vanity_pharma,json=vanityPharma,proto3" json:"vanity_pharma,omitempty"`
+	// Selective optimization setting for this campaign, which includes a set of
+	// conversion actions to optimize this campaign towards.
+	SelectiveOptimization *Campaign_SelectiveOptimization `protobuf:"bytes,45,opt,name=selective_optimization,json=selectiveOptimization,proto3" json:"selective_optimization,omitempty"`
+	// Campaign-level settings for tracking information.
+	TrackingSetting *Campaign_TrackingSetting `protobuf:"bytes,46,opt,name=tracking_setting,json=trackingSetting,proto3" json:"tracking_setting,omitempty"`
+	// Payment mode for the campaign.
+	PaymentMode enums.PaymentModeEnum_PaymentMode `protobuf:"varint,52,opt,name=payment_mode,json=paymentMode,proto3,enum=google.ads.googleads.v3.enums.PaymentModeEnum_PaymentMode" json:"payment_mode,omitempty"`
+	// The bidding strategy for the campaign.
+	//
+	// Must be either portfolio (created via BiddingStrategy service) or
+	// standard, that is embedded into the campaign.
+	//
+	// Types that are valid to be assigned to CampaignBiddingStrategy:
+	//	*Campaign_BiddingStrategy
+	//	*Campaign_Commission
+	//	*Campaign_ManualCpc
+	//	*Campaign_ManualCpm
+	//	*Campaign_ManualCpv
+	//	*Campaign_MaximizeConversions
+	//	*Campaign_MaximizeConversionValue
+	//	*Campaign_TargetCpa
+	//	*Campaign_TargetImpressionShare
+	//	*Campaign_TargetRoas
+	//	*Campaign_TargetSpend
+	//	*Campaign_PercentCpc
+	//	*Campaign_TargetCpm
+	CampaignBiddingStrategy isCampaign_CampaignBiddingStrategy `protobuf_oneof:"campaign_bidding_strategy"`
+	XXX_NoUnkeyedLiteral    struct{}                           `json:"-"`
+	XXX_unrecognized        []byte                             `json:"-"`
+	XXX_sizecache           int32                              `json:"-"`
+}
+
+func (m *Campaign) Reset()         { *m = Campaign{} }
+func (m *Campaign) String() string { return proto.CompactTextString(m) }
+func (*Campaign) ProtoMessage()    {}
+func (*Campaign) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0}
+}
+
+func (m *Campaign) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign.Unmarshal(m, b)
+}
+func (m *Campaign) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign.Marshal(b, m, deterministic)
+}
+func (m *Campaign) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign.Merge(m, src)
+}
+func (m *Campaign) XXX_Size() int {
+	return xxx_messageInfo_Campaign.Size(m)
+}
+func (m *Campaign) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign proto.InternalMessageInfo
+
+func (m *Campaign) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Campaign) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Campaign) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Campaign) GetStatus() enums.CampaignStatusEnum_CampaignStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetServingStatus() enums.CampaignServingStatusEnum_CampaignServingStatus {
+	if m != nil {
+		return m.ServingStatus
+	}
+	return enums.CampaignServingStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdServingOptimizationStatus() enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus {
+	if m != nil {
+		return m.AdServingOptimizationStatus
+	}
+	return enums.AdServingOptimizationStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdvertisingChannelType() enums.AdvertisingChannelTypeEnum_AdvertisingChannelType {
+	if m != nil {
+		return m.AdvertisingChannelType
+	}
+	return enums.AdvertisingChannelTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdvertisingChannelSubType() enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType {
+	if m != nil {
+		return m.AdvertisingChannelSubType
+	}
+	return enums.AdvertisingChannelSubTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Campaign) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *Campaign) GetRealTimeBiddingSetting() *common.RealTimeBiddingSetting {
+	if m != nil {
+		return m.RealTimeBiddingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetNetworkSettings() *Campaign_NetworkSettings {
+	if m != nil {
+		return m.NetworkSettings
+	}
+	return nil
+}
+
+func (m *Campaign) GetHotelSetting() *Campaign_HotelSettingInfo {
+	if m != nil {
+		return m.HotelSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetDynamicSearchAdsSetting() *Campaign_DynamicSearchAdsSetting {
+	if m != nil {
+		return m.DynamicSearchAdsSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetShoppingSetting() *Campaign_ShoppingSetting {
+	if m != nil {
+		return m.ShoppingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetingSetting() *common.TargetingSetting {
+	if m != nil {
+		return m.TargetingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetGeoTargetTypeSetting() *Campaign_GeoTargetTypeSetting {
+	if m != nil {
+		return m.GeoTargetTypeSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetAppCampaignSetting() *Campaign_AppCampaignSetting {
+	if m != nil {
+		return m.AppCampaignSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetLabels() []*wrappers.StringValue {
+	if m != nil {
+		return m.Labels
+	}
+	return nil
+}
+
+func (m *Campaign) GetExperimentType() enums.CampaignExperimentTypeEnum_CampaignExperimentType {
+	if m != nil {
+		return m.ExperimentType
+	}
+	return enums.CampaignExperimentTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetBaseCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.BaseCampaign
+	}
+	return nil
+}
+
+func (m *Campaign) GetCampaignBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *Campaign) GetBiddingStrategyType() enums.BiddingStrategyTypeEnum_BiddingStrategyType {
+	if m != nil {
+		return m.BiddingStrategyType
+	}
+	return enums.BiddingStrategyTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *Campaign) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func (m *Campaign) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *Campaign) GetFrequencyCaps() []*common.FrequencyCapEntry {
+	if m != nil {
+		return m.FrequencyCaps
+	}
+	return nil
+}
+
+func (m *Campaign) GetVideoBrandSafetySuitability() enums.BrandSafetySuitabilityEnum_BrandSafetySuitability {
+	if m != nil {
+		return m.VideoBrandSafetySuitability
+	}
+	return enums.BrandSafetySuitabilityEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetVanityPharma() *Campaign_VanityPharma {
+	if m != nil {
+		return m.VanityPharma
+	}
+	return nil
+}
+
+func (m *Campaign) GetSelectiveOptimization() *Campaign_SelectiveOptimization {
+	if m != nil {
+		return m.SelectiveOptimization
+	}
+	return nil
+}
+
+func (m *Campaign) GetTrackingSetting() *Campaign_TrackingSetting {
+	if m != nil {
+		return m.TrackingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetPaymentMode() enums.PaymentModeEnum_PaymentMode {
+	if m != nil {
+		return m.PaymentMode
+	}
+	return enums.PaymentModeEnum_UNSPECIFIED
+}
+
+type isCampaign_CampaignBiddingStrategy interface {
+	isCampaign_CampaignBiddingStrategy()
+}
+
+type Campaign_BiddingStrategy struct {
+	BiddingStrategy *wrappers.StringValue `protobuf:"bytes,23,opt,name=bidding_strategy,json=biddingStrategy,proto3,oneof"`
+}
+
+type Campaign_Commission struct {
+	Commission *common.Commission `protobuf:"bytes,49,opt,name=commission,proto3,oneof"`
+}
+
+type Campaign_ManualCpc struct {
+	ManualCpc *common.ManualCpc `protobuf:"bytes,24,opt,name=manual_cpc,json=manualCpc,proto3,oneof"`
+}
+
+type Campaign_ManualCpm struct {
+	ManualCpm *common.ManualCpm `protobuf:"bytes,25,opt,name=manual_cpm,json=manualCpm,proto3,oneof"`
+}
+
+type Campaign_ManualCpv struct {
+	ManualCpv *common.ManualCpv `protobuf:"bytes,37,opt,name=manual_cpv,json=manualCpv,proto3,oneof"`
+}
+
+type Campaign_MaximizeConversions struct {
+	MaximizeConversions *common.MaximizeConversions `protobuf:"bytes,30,opt,name=maximize_conversions,json=maximizeConversions,proto3,oneof"`
+}
+
+type Campaign_MaximizeConversionValue struct {
+	MaximizeConversionValue *common.MaximizeConversionValue `protobuf:"bytes,31,opt,name=maximize_conversion_value,json=maximizeConversionValue,proto3,oneof"`
+}
+
+type Campaign_TargetCpa struct {
+	TargetCpa *common.TargetCpa `protobuf:"bytes,26,opt,name=target_cpa,json=targetCpa,proto3,oneof"`
+}
+
+type Campaign_TargetImpressionShare struct {
+	TargetImpressionShare *common.TargetImpressionShare `protobuf:"bytes,48,opt,name=target_impression_share,json=targetImpressionShare,proto3,oneof"`
+}
+
+type Campaign_TargetRoas struct {
+	TargetRoas *common.TargetRoas `protobuf:"bytes,29,opt,name=target_roas,json=targetRoas,proto3,oneof"`
+}
+
+type Campaign_TargetSpend struct {
+	TargetSpend *common.TargetSpend `protobuf:"bytes,27,opt,name=target_spend,json=targetSpend,proto3,oneof"`
+}
+
+type Campaign_PercentCpc struct {
+	PercentCpc *common.PercentCpc `protobuf:"bytes,34,opt,name=percent_cpc,json=percentCpc,proto3,oneof"`
+}
+
+type Campaign_TargetCpm struct {
+	TargetCpm *common.TargetCpm `protobuf:"bytes,41,opt,name=target_cpm,json=targetCpm,proto3,oneof"`
+}
+
+func (*Campaign_BiddingStrategy) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_Commission) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpc) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpm) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpv) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_MaximizeConversions) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_MaximizeConversionValue) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetCpa) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetImpressionShare) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetRoas) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetSpend) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_PercentCpc) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetCpm) isCampaign_CampaignBiddingStrategy() {}
+
+func (m *Campaign) GetCampaignBiddingStrategy() isCampaign_CampaignBiddingStrategy {
+	if m != nil {
+		return m.CampaignBiddingStrategy
+	}
+	return nil
+}
+
+func (m *Campaign) GetBiddingStrategy() *wrappers.StringValue {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_BiddingStrategy); ok {
+		return x.BiddingStrategy
+	}
+	return nil
+}
+
+func (m *Campaign) GetCommission() *common.Commission {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_Commission); ok {
+		return x.Commission
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpc() *common.ManualCpc {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpc); ok {
+		return x.ManualCpc
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpm() *common.ManualCpm {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpm); ok {
+		return x.ManualCpm
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpv() *common.ManualCpv {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpv); ok {
+		return x.ManualCpv
+	}
+	return nil
+}
+
+func (m *Campaign) GetMaximizeConversions() *common.MaximizeConversions {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_MaximizeConversions); ok {
+		return x.MaximizeConversions
+	}
+	return nil
+}
+
+func (m *Campaign) GetMaximizeConversionValue() *common.MaximizeConversionValue {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_MaximizeConversionValue); ok {
+		return x.MaximizeConversionValue
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetCpa() *common.TargetCpa {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetCpa); ok {
+		return x.TargetCpa
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetImpressionShare() *common.TargetImpressionShare {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetImpressionShare); ok {
+		return x.TargetImpressionShare
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetRoas() *common.TargetRoas {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetRoas); ok {
+		return x.TargetRoas
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetSpend() *common.TargetSpend {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetSpend); ok {
+		return x.TargetSpend
+	}
+	return nil
+}
+
+func (m *Campaign) GetPercentCpc() *common.PercentCpc {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_PercentCpc); ok {
+		return x.PercentCpc
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetCpm() *common.TargetCpm {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetCpm); ok {
+		return x.TargetCpm
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Campaign) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Campaign_BiddingStrategy)(nil),
+		(*Campaign_Commission)(nil),
+		(*Campaign_ManualCpc)(nil),
+		(*Campaign_ManualCpm)(nil),
+		(*Campaign_ManualCpv)(nil),
+		(*Campaign_MaximizeConversions)(nil),
+		(*Campaign_MaximizeConversionValue)(nil),
+		(*Campaign_TargetCpa)(nil),
+		(*Campaign_TargetImpressionShare)(nil),
+		(*Campaign_TargetRoas)(nil),
+		(*Campaign_TargetSpend)(nil),
+		(*Campaign_PercentCpc)(nil),
+		(*Campaign_TargetCpm)(nil),
+	}
+}
+
+// The network settings for the campaign.
+type Campaign_NetworkSettings struct {
+	// Whether ads will be served with google.com search results.
+	TargetGoogleSearch *wrappers.BoolValue `protobuf:"bytes,1,opt,name=target_google_search,json=targetGoogleSearch,proto3" json:"target_google_search,omitempty"`
+	// Whether ads will be served on partner sites in the Google Search Network
+	// (requires `target_google_search` to also be `true`).
+	TargetSearchNetwork *wrappers.BoolValue `protobuf:"bytes,2,opt,name=target_search_network,json=targetSearchNetwork,proto3" json:"target_search_network,omitempty"`
+	// Whether ads will be served on specified placements in the Google Display
+	// Network. Placements are specified using the Placement criterion.
+	TargetContentNetwork *wrappers.BoolValue `protobuf:"bytes,3,opt,name=target_content_network,json=targetContentNetwork,proto3" json:"target_content_network,omitempty"`
+	// Whether ads will be served on the Google Partner Network.
+	// This is available only to some select Google partner accounts.
+	TargetPartnerSearchNetwork *wrappers.BoolValue `protobuf:"bytes,4,opt,name=target_partner_search_network,json=targetPartnerSearchNetwork,proto3" json:"target_partner_search_network,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}            `json:"-"`
+	XXX_unrecognized           []byte              `json:"-"`
+	XXX_sizecache              int32               `json:"-"`
+}
+
+func (m *Campaign_NetworkSettings) Reset()         { *m = Campaign_NetworkSettings{} }
+func (m *Campaign_NetworkSettings) String() string { return proto.CompactTextString(m) }
+func (*Campaign_NetworkSettings) ProtoMessage()    {}
+func (*Campaign_NetworkSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 0}
+}
+
+func (m *Campaign_NetworkSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_NetworkSettings.Unmarshal(m, b)
+}
+func (m *Campaign_NetworkSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_NetworkSettings.Marshal(b, m, deterministic)
+}
+func (m *Campaign_NetworkSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_NetworkSettings.Merge(m, src)
+}
+func (m *Campaign_NetworkSettings) XXX_Size() int {
+	return xxx_messageInfo_Campaign_NetworkSettings.Size(m)
+}
+func (m *Campaign_NetworkSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_NetworkSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_NetworkSettings proto.InternalMessageInfo
+
+func (m *Campaign_NetworkSettings) GetTargetGoogleSearch() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetGoogleSearch
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetSearchNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetSearchNetwork
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetContentNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetContentNetwork
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetPartnerSearchNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetPartnerSearchNetwork
+	}
+	return nil
+}
+
+// Campaign-level settings for hotel ads.
+type Campaign_HotelSettingInfo struct {
+	// The linked Hotel Center account.
+	HotelCenterId        *wrappers.Int64Value `protobuf:"bytes,1,opt,name=hotel_center_id,json=hotelCenterId,proto3" json:"hotel_center_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Campaign_HotelSettingInfo) Reset()         { *m = Campaign_HotelSettingInfo{} }
+func (m *Campaign_HotelSettingInfo) String() string { return proto.CompactTextString(m) }
+func (*Campaign_HotelSettingInfo) ProtoMessage()    {}
+func (*Campaign_HotelSettingInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 1}
+}
+
+func (m *Campaign_HotelSettingInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Unmarshal(m, b)
+}
+func (m *Campaign_HotelSettingInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Marshal(b, m, deterministic)
+}
+func (m *Campaign_HotelSettingInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_HotelSettingInfo.Merge(m, src)
+}
+func (m *Campaign_HotelSettingInfo) XXX_Size() int {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Size(m)
+}
+func (m *Campaign_HotelSettingInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_HotelSettingInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_HotelSettingInfo proto.InternalMessageInfo
+
+func (m *Campaign_HotelSettingInfo) GetHotelCenterId() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelCenterId
+	}
+	return nil
+}
+
+// Campaign-level settings for App Campaigns.
+type Campaign_AppCampaignSetting struct {
+	// Represents the goal which the bidding strategy of this app campaign
+	// should optimize towards.
+	BiddingStrategyGoalType enums.AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType `protobuf:"varint,1,opt,name=bidding_strategy_goal_type,json=biddingStrategyGoalType,proto3,enum=google.ads.googleads.v3.enums.AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType" json:"bidding_strategy_goal_type,omitempty"`
+	// A string that uniquely identifies a mobile application.
+	AppId *wrappers.StringValue `protobuf:"bytes,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// The application store that distributes this specific app.
+	AppStore             enums.AppCampaignAppStoreEnum_AppCampaignAppStore `protobuf:"varint,3,opt,name=app_store,json=appStore,proto3,enum=google.ads.googleads.v3.enums.AppCampaignAppStoreEnum_AppCampaignAppStore" json:"app_store,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                          `json:"-"`
+	XXX_unrecognized     []byte                                            `json:"-"`
+	XXX_sizecache        int32                                             `json:"-"`
+}
+
+func (m *Campaign_AppCampaignSetting) Reset()         { *m = Campaign_AppCampaignSetting{} }
+func (m *Campaign_AppCampaignSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_AppCampaignSetting) ProtoMessage()    {}
+func (*Campaign_AppCampaignSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 2}
+}
+
+func (m *Campaign_AppCampaignSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_AppCampaignSetting.Unmarshal(m, b)
+}
+func (m *Campaign_AppCampaignSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_AppCampaignSetting.Marshal(b, m, deterministic)
+}
+func (m *Campaign_AppCampaignSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_AppCampaignSetting.Merge(m, src)
+}
+func (m *Campaign_AppCampaignSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_AppCampaignSetting.Size(m)
+}
+func (m *Campaign_AppCampaignSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_AppCampaignSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_AppCampaignSetting proto.InternalMessageInfo
+
+func (m *Campaign_AppCampaignSetting) GetBiddingStrategyGoalType() enums.AppCampaignBiddingStrategyGoalTypeEnum_AppCampaignBiddingStrategyGoalType {
+	if m != nil {
+		return m.BiddingStrategyGoalType
+	}
+	return enums.AppCampaignBiddingStrategyGoalTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign_AppCampaignSetting) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *Campaign_AppCampaignSetting) GetAppStore() enums.AppCampaignAppStoreEnum_AppCampaignAppStore {
+	if m != nil {
+		return m.AppStore
+	}
+	return enums.AppCampaignAppStoreEnum_UNSPECIFIED
+}
+
+// The setting for controlling Dynamic Search Ads (DSA).
+type Campaign_DynamicSearchAdsSetting struct {
+	// The Internet domain name that this setting represents, e.g., "google.com"
+	// or "www.google.com".
+	DomainName *wrappers.StringValue `protobuf:"bytes,1,opt,name=domain_name,json=domainName,proto3" json:"domain_name,omitempty"`
+	// The language code specifying the language of the domain, e.g., "en".
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// Whether the campaign uses advertiser supplied URLs exclusively.
+	UseSuppliedUrlsOnly *wrappers.BoolValue `protobuf:"bytes,3,opt,name=use_supplied_urls_only,json=useSuppliedUrlsOnly,proto3" json:"use_supplied_urls_only,omitempty"`
+	// The list of page feeds associated with the campaign.
+	Feeds                []*wrappers.StringValue `protobuf:"bytes,5,rep,name=feeds,proto3" json:"feeds,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) Reset()         { *m = Campaign_DynamicSearchAdsSetting{} }
+func (m *Campaign_DynamicSearchAdsSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_DynamicSearchAdsSetting) ProtoMessage()    {}
+func (*Campaign_DynamicSearchAdsSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 3}
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Unmarshal(m, b)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Marshal(b, m, deterministic)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Merge(m, src)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Size(m)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_DynamicSearchAdsSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_DynamicSearchAdsSetting proto.InternalMessageInfo
+
+func (m *Campaign_DynamicSearchAdsSetting) GetDomainName() *wrappers.StringValue {
+	if m != nil {
+		return m.DomainName
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetUseSuppliedUrlsOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.UseSuppliedUrlsOnly
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetFeeds() []*wrappers.StringValue {
+	if m != nil {
+		return m.Feeds
+	}
+	return nil
+}
+
+// The setting for Shopping campaigns. Defines the universe of products that
+// can be advertised by the campaign, and how this campaign interacts with
+// other Shopping campaigns.
+type Campaign_ShoppingSetting struct {
+	// ID of the Merchant Center account.
+	// This field is required for create operations. This field is immutable for
+	// Shopping campaigns.
+	MerchantId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// Sales country of products to include in the campaign.
+	// This field is required for Shopping campaigns. This field is immutable.
+	// This field is optional for non-Shopping campaigns, but it must be equal
+	// to 'ZZ' if set.
+	SalesCountry *wrappers.StringValue `protobuf:"bytes,2,opt,name=sales_country,json=salesCountry,proto3" json:"sales_country,omitempty"`
+	// Priority of the campaign. Campaigns with numerically higher priorities
+	// take precedence over those with lower priorities.
+	// This field is required for Shopping campaigns, with values between 0 and
+	// 2, inclusive.
+	// This field is optional for Smart Shopping campaigns, but must be equal to
+	// 3 if set.
+	CampaignPriority *wrappers.Int32Value `protobuf:"bytes,3,opt,name=campaign_priority,json=campaignPriority,proto3" json:"campaign_priority,omitempty"`
+	// Whether to include local products.
+	EnableLocal          *wrappers.BoolValue `protobuf:"bytes,4,opt,name=enable_local,json=enableLocal,proto3" json:"enable_local,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *Campaign_ShoppingSetting) Reset()         { *m = Campaign_ShoppingSetting{} }
+func (m *Campaign_ShoppingSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_ShoppingSetting) ProtoMessage()    {}
+func (*Campaign_ShoppingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 4}
+}
+
+func (m *Campaign_ShoppingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Unmarshal(m, b)
+}
+func (m *Campaign_ShoppingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Marshal(b, m, deterministic)
+}
+func (m *Campaign_ShoppingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_ShoppingSetting.Merge(m, src)
+}
+func (m *Campaign_ShoppingSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Size(m)
+}
+func (m *Campaign_ShoppingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_ShoppingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_ShoppingSetting proto.InternalMessageInfo
+
+func (m *Campaign_ShoppingSetting) GetMerchantId() *wrappers.Int64Value {
+	if m != nil {
+		return m.MerchantId
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetSalesCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.SalesCountry
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetCampaignPriority() *wrappers.Int32Value {
+	if m != nil {
+		return m.CampaignPriority
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetEnableLocal() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnableLocal
+	}
+	return nil
+}
+
+// Describes how unbranded pharma ads will be displayed.
+type Campaign_VanityPharma struct {
+	// The display mode for vanity pharma URLs.
+	VanityPharmaDisplayUrlMode enums.VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode `protobuf:"varint,1,opt,name=vanity_pharma_display_url_mode,json=vanityPharmaDisplayUrlMode,proto3,enum=google.ads.googleads.v3.enums.VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode" json:"vanity_pharma_display_url_mode,omitempty"`
+	// The text that will be displayed in display URL of the text ad when
+	// website description is the selected display mode for vanity pharma URLs.
+	VanityPharmaText     enums.VanityPharmaTextEnum_VanityPharmaText `protobuf:"varint,2,opt,name=vanity_pharma_text,json=vanityPharmaText,proto3,enum=google.ads.googleads.v3.enums.VanityPharmaTextEnum_VanityPharmaText" json:"vanity_pharma_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *Campaign_VanityPharma) Reset()         { *m = Campaign_VanityPharma{} }
+func (m *Campaign_VanityPharma) String() string { return proto.CompactTextString(m) }
+func (*Campaign_VanityPharma) ProtoMessage()    {}
+func (*Campaign_VanityPharma) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 5}
+}
+
+func (m *Campaign_VanityPharma) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_VanityPharma.Unmarshal(m, b)
+}
+func (m *Campaign_VanityPharma) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_VanityPharma.Marshal(b, m, deterministic)
+}
+func (m *Campaign_VanityPharma) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_VanityPharma.Merge(m, src)
+}
+func (m *Campaign_VanityPharma) XXX_Size() int {
+	return xxx_messageInfo_Campaign_VanityPharma.Size(m)
+}
+func (m *Campaign_VanityPharma) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_VanityPharma.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_VanityPharma proto.InternalMessageInfo
+
+func (m *Campaign_VanityPharma) GetVanityPharmaDisplayUrlMode() enums.VanityPharmaDisplayUrlModeEnum_VanityPharmaDisplayUrlMode {
+	if m != nil {
+		return m.VanityPharmaDisplayUrlMode
+	}
+	return enums.VanityPharmaDisplayUrlModeEnum_UNSPECIFIED
+}
+
+func (m *Campaign_VanityPharma) GetVanityPharmaText() enums.VanityPharmaTextEnum_VanityPharmaText {
+	if m != nil {
+		return m.VanityPharmaText
+	}
+	return enums.VanityPharmaTextEnum_UNSPECIFIED
+}
+
+// Selective optimization setting for this campaign, which includes a set of
+// conversion actions to optimize this campaign towards.
+type Campaign_SelectiveOptimization struct {
+	// The selected set of conversion actions for optimizing this campaign.
+	ConversionActions    []*wrappers.StringValue `protobuf:"bytes,1,rep,name=conversion_actions,json=conversionActions,proto3" json:"conversion_actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *Campaign_SelectiveOptimization) Reset()         { *m = Campaign_SelectiveOptimization{} }
+func (m *Campaign_SelectiveOptimization) String() string { return proto.CompactTextString(m) }
+func (*Campaign_SelectiveOptimization) ProtoMessage()    {}
+func (*Campaign_SelectiveOptimization) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 6}
+}
+
+func (m *Campaign_SelectiveOptimization) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_SelectiveOptimization.Unmarshal(m, b)
+}
+func (m *Campaign_SelectiveOptimization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_SelectiveOptimization.Marshal(b, m, deterministic)
+}
+func (m *Campaign_SelectiveOptimization) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_SelectiveOptimization.Merge(m, src)
+}
+func (m *Campaign_SelectiveOptimization) XXX_Size() int {
+	return xxx_messageInfo_Campaign_SelectiveOptimization.Size(m)
+}
+func (m *Campaign_SelectiveOptimization) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_SelectiveOptimization.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_SelectiveOptimization proto.InternalMessageInfo
+
+func (m *Campaign_SelectiveOptimization) GetConversionActions() []*wrappers.StringValue {
+	if m != nil {
+		return m.ConversionActions
+	}
+	return nil
+}
+
+// Represents a collection of settings related to ads geotargeting.
+type Campaign_GeoTargetTypeSetting struct {
+	// The setting used for positive geotargeting in this particular campaign.
+	PositiveGeoTargetType enums.PositiveGeoTargetTypeEnum_PositiveGeoTargetType `protobuf:"varint,1,opt,name=positive_geo_target_type,json=positiveGeoTargetType,proto3,enum=google.ads.googleads.v3.enums.PositiveGeoTargetTypeEnum_PositiveGeoTargetType" json:"positive_geo_target_type,omitempty"`
+	// The setting used for negative geotargeting in this particular campaign.
+	NegativeGeoTargetType enums.NegativeGeoTargetTypeEnum_NegativeGeoTargetType `protobuf:"varint,2,opt,name=negative_geo_target_type,json=negativeGeoTargetType,proto3,enum=google.ads.googleads.v3.enums.NegativeGeoTargetTypeEnum_NegativeGeoTargetType" json:"negative_geo_target_type,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                                              `json:"-"`
+	XXX_unrecognized      []byte                                                `json:"-"`
+	XXX_sizecache         int32                                                 `json:"-"`
+}
+
+func (m *Campaign_GeoTargetTypeSetting) Reset()         { *m = Campaign_GeoTargetTypeSetting{} }
+func (m *Campaign_GeoTargetTypeSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_GeoTargetTypeSetting) ProtoMessage()    {}
+func (*Campaign_GeoTargetTypeSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 7}
+}
+
+func (m *Campaign_GeoTargetTypeSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_GeoTargetTypeSetting.Unmarshal(m, b)
+}
+func (m *Campaign_GeoTargetTypeSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_GeoTargetTypeSetting.Marshal(b, m, deterministic)
+}
+func (m *Campaign_GeoTargetTypeSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_GeoTargetTypeSetting.Merge(m, src)
+}
+func (m *Campaign_GeoTargetTypeSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_GeoTargetTypeSetting.Size(m)
+}
+func (m *Campaign_GeoTargetTypeSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_GeoTargetTypeSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_GeoTargetTypeSetting proto.InternalMessageInfo
+
+func (m *Campaign_GeoTargetTypeSetting) GetPositiveGeoTargetType() enums.PositiveGeoTargetTypeEnum_PositiveGeoTargetType {
+	if m != nil {
+		return m.PositiveGeoTargetType
+	}
+	return enums.PositiveGeoTargetTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign_GeoTargetTypeSetting) GetNegativeGeoTargetType() enums.NegativeGeoTargetTypeEnum_NegativeGeoTargetType {
+	if m != nil {
+		return m.NegativeGeoTargetType
+	}
+	return enums.NegativeGeoTargetTypeEnum_UNSPECIFIED
+}
+
+// Campaign-level settings for tracking information.
+type Campaign_TrackingSetting struct {
+	// The url used for dynamic tracking.
+	TrackingUrl          *wrappers.StringValue `protobuf:"bytes,1,opt,name=tracking_url,json=trackingUrl,proto3" json:"tracking_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Campaign_TrackingSetting) Reset()         { *m = Campaign_TrackingSetting{} }
+func (m *Campaign_TrackingSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_TrackingSetting) ProtoMessage()    {}
+func (*Campaign_TrackingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fc9f8fbba6491262, []int{0, 8}
+}
+
+func (m *Campaign_TrackingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_TrackingSetting.Unmarshal(m, b)
+}
+func (m *Campaign_TrackingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_TrackingSetting.Marshal(b, m, deterministic)
+}
+func (m *Campaign_TrackingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_TrackingSetting.Merge(m, src)
+}
+func (m *Campaign_TrackingSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_TrackingSetting.Size(m)
+}
+func (m *Campaign_TrackingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_TrackingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_TrackingSetting proto.InternalMessageInfo
+
+func (m *Campaign_TrackingSetting) GetTrackingUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrl
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Campaign)(nil), "google.ads.googleads.v3.resources.Campaign")
+	proto.RegisterType((*Campaign_NetworkSettings)(nil), "google.ads.googleads.v3.resources.Campaign.NetworkSettings")
+	proto.RegisterType((*Campaign_HotelSettingInfo)(nil), "google.ads.googleads.v3.resources.Campaign.HotelSettingInfo")
+	proto.RegisterType((*Campaign_AppCampaignSetting)(nil), "google.ads.googleads.v3.resources.Campaign.AppCampaignSetting")
+	proto.RegisterType((*Campaign_DynamicSearchAdsSetting)(nil), "google.ads.googleads.v3.resources.Campaign.DynamicSearchAdsSetting")
+	proto.RegisterType((*Campaign_ShoppingSetting)(nil), "google.ads.googleads.v3.resources.Campaign.ShoppingSetting")
+	proto.RegisterType((*Campaign_VanityPharma)(nil), "google.ads.googleads.v3.resources.Campaign.VanityPharma")
+	proto.RegisterType((*Campaign_SelectiveOptimization)(nil), "google.ads.googleads.v3.resources.Campaign.SelectiveOptimization")
+	proto.RegisterType((*Campaign_GeoTargetTypeSetting)(nil), "google.ads.googleads.v3.resources.Campaign.GeoTargetTypeSetting")
+	proto.RegisterType((*Campaign_TrackingSetting)(nil), "google.ads.googleads.v3.resources.Campaign.TrackingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign.proto", fileDescriptor_fc9f8fbba6491262)
+}
+
+var fileDescriptor_fc9f8fbba6491262 = []byte{
+	// 2265 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x59, 0x5b, 0x93, 0x13, 0xc7,
+	0xf5, 0x5f, 0x09, 0xc3, 0x1f, 0x7a, 0xaf, 0xf4, 0xde, 0x66, 0x05, 0xe6, 0x0f, 0x4e, 0x9c, 0x80,
+	0x71, 0x24, 0xbc, 0x02, 0x9c, 0x08, 0xec, 0xa0, 0x15, 0x98, 0x5d, 0x0c, 0x8b, 0x32, 0x5a, 0x36,
+	0x94, 0x0b, 0x6a, 0xaa, 0x35, 0xd3, 0xab, 0x9d, 0xf2, 0x5c, 0xda, 0xdd, 0x3d, 0x62, 0x95, 0x94,
+	0x53, 0x79, 0x4b, 0x25, 0xef, 0xa9, 0x3c, 0x24, 0x55, 0xb9, 0x54, 0xe5, 0xc5, 0x1f, 0x25, 0x1f,
+	0x21, 0x4f, 0x79, 0xf6, 0x47, 0xc8, 0x53, 0xaa, 0x2f, 0x33, 0x1a, 0x49, 0x23, 0xcd, 0xe8, 0x6d,
+	0xfa, 0x9c, 0xfe, 0xfd, 0xce, 0xe9, 0xd3, 0xa7, 0x8f, 0x4e, 0xb7, 0xc0, 0x9d, 0x5e, 0x18, 0xf6,
+	0x3c, 0x5c, 0x43, 0x0e, 0xab, 0xa9, 0x4f, 0xf1, 0xd5, 0xaf, 0xd7, 0x28, 0x66, 0x61, 0x44, 0x6d,
+	0xcc, 0x6a, 0x36, 0xf2, 0x09, 0x72, 0x7b, 0x41, 0x95, 0xd0, 0x90, 0x87, 0xf0, 0x86, 0x9a, 0x56,
+	0x45, 0x0e, 0xab, 0x26, 0x88, 0x6a, 0xbf, 0x5e, 0x4d, 0x10, 0x95, 0x8f, 0xa7, 0x91, 0xda, 0xa1,
+	0xef, 0x87, 0x41, 0xad, 0xeb, 0x3a, 0x8e, 0x1b, 0xf4, 0x14, 0x61, 0xe5, 0x5e, 0xce, 0x6c, 0x3b,
+	0x62, 0x3c, 0xf4, 0x2d, 0x82, 0x28, 0xf2, 0x31, 0xc7, 0x54, 0xc3, 0x76, 0x73, 0x60, 0x27, 0x14,
+	0x7f, 0x13, 0xe1, 0xc0, 0x1e, 0x58, 0x36, 0x22, 0x1a, 0xf3, 0x79, 0x0e, 0x86, 0x62, 0xe4, 0x59,
+	0xdc, 0xf5, 0xb1, 0xa5, 0x5d, 0xb4, 0x18, 0xe6, 0x7c, 0xe8, 0xea, 0xfd, 0x1c, 0x3c, 0x47, 0xb4,
+	0x87, 0xf9, 0x24, 0x6e, 0x6f, 0x1a, 0x0e, 0x07, 0x91, 0xcf, 0x6a, 0xc8, 0xb1, 0x18, 0xa6, 0x7d,
+	0x81, 0x0b, 0x09, 0x77, 0x7d, 0xf7, 0x57, 0x88, 0xbb, 0x61, 0x60, 0x31, 0x8e, 0x78, 0xc4, 0x34,
+	0xc7, 0xa3, 0x3c, 0x8e, 0x3e, 0xa6, 0xdc, 0x65, 0x82, 0xc4, 0x3e, 0x45, 0x41, 0x80, 0x3d, 0x8b,
+	0x45, 0x5d, 0x8b, 0x0f, 0x08, 0xd6, 0x0c, 0x0f, 0xe7, 0x67, 0x48, 0xa1, 0x1b, 0x39, 0x68, 0x42,
+	0xac, 0x38, 0x53, 0x2c, 0x31, 0x60, 0x3c, 0xa4, 0x31, 0xf6, 0xcb, 0x39, 0xb0, 0x49, 0xe4, 0x39,
+	0x45, 0x1c, 0xf7, 0x06, 0x56, 0x2f, 0x44, 0x23, 0x8e, 0xfc, 0x6c, 0x36, 0xd9, 0x04, 0xbe, 0x78,
+	0x04, 0xba, 0x14, 0x05, 0x8e, 0xc5, 0xd0, 0x09, 0xe6, 0x03, 0x8b, 0x45, 0x2e, 0x47, 0x5d, 0xd7,
+	0x73, 0xf9, 0xa0, 0x18, 0x3a, 0x59, 0x01, 0x3e, 0x23, 0x98, 0xba, 0x3e, 0x0e, 0x78, 0xda, 0xf6,
+	0x83, 0x82, 0xe8, 0x38, 0x13, 0x46, 0x36, 0xbf, 0x5e, 0x14, 0x9c, 0x06, 0xe5, 0xf8, 0x1b, 0xe0,
+	0x1e, 0xe2, 0x6e, 0x1f, 0x5b, 0x3d, 0x1c, 0x5a, 0x2a, 0x73, 0xd3, 0xfe, 0xde, 0x99, 0x8d, 0x26,
+	0x68, 0x20, 0x57, 0xe8, 0x87, 0x4e, 0xc1, 0xe8, 0x92, 0x90, 0xb9, 0x33, 0xec, 0xe5, 0x9c, 0x91,
+	0x3e, 0x0a, 0x5c, 0x3e, 0xb0, 0xc8, 0x29, 0xa2, 0x3e, 0xb2, 0x1c, 0x97, 0x11, 0x0f, 0x0d, 0xac,
+	0x88, 0x7a, 0x69, 0x0f, 0xee, 0xcf, 0xc3, 0xc1, 0xf1, 0x19, 0xd7, 0xb8, 0x9d, 0x18, 0x47, 0xdc,
+	0xa4, 0xf0, 0x69, 0xd5, 0x35, 0xad, 0x92, 0xa3, 0x6e, 0x74, 0x52, 0x7b, 0x47, 0x11, 0x21, 0x98,
+	0xc6, 0x41, 0xbe, 0x9a, 0x82, 0xa2, 0x20, 0x08, 0xb9, 0x3c, 0xba, 0x5a, 0xfb, 0xc1, 0xef, 0xeb,
+	0xe0, 0x62, 0x4b, 0x6f, 0x0e, 0xfc, 0x01, 0x58, 0x8e, 0xc9, 0xad, 0x00, 0xf9, 0xd8, 0x28, 0x5d,
+	0x2f, 0xdd, 0xbc, 0x64, 0x2e, 0xc5, 0xc2, 0x43, 0xe4, 0x63, 0x78, 0x1b, 0x94, 0x5d, 0xc7, 0x38,
+	0x77, 0xbd, 0x74, 0x73, 0x71, 0xf7, 0x8a, 0x2e, 0xb0, 0xd5, 0xd8, 0x78, 0xf5, 0x20, 0xe0, 0xf7,
+	0xef, 0x1e, 0x23, 0x2f, 0xc2, 0x66, 0xd9, 0x75, 0xe0, 0x1d, 0xf0, 0x9e, 0x24, 0x7a, 0x4f, 0x4e,
+	0xbf, 0x3a, 0x31, 0xbd, 0xc3, 0xa9, 0x1b, 0xf4, 0xd4, 0x7c, 0x39, 0x13, 0xbe, 0x06, 0x17, 0x54,
+	0x8e, 0x18, 0xe7, 0xaf, 0x97, 0x6e, 0xae, 0xec, 0x3e, 0xaa, 0x4e, 0x2b, 0xe7, 0x32, 0x64, 0xd5,
+	0xd8, 0xf9, 0x8e, 0x04, 0x3d, 0x09, 0x22, 0x7f, 0x4c, 0x64, 0x6a, 0x3e, 0x18, 0x81, 0x95, 0xd1,
+	0xd4, 0x35, 0x36, 0xa5, 0x85, 0xc3, 0xa2, 0x16, 0x14, 0x38, 0xcb, 0x50, 0x5a, 0x63, 0x2e, 0xb3,
+	0xf4, 0x10, 0xfe, 0xb5, 0x04, 0xae, 0xcd, 0xae, 0x9f, 0xc6, 0x45, 0xe9, 0xc7, 0x57, 0x39, 0x7e,
+	0x34, 0x1d, 0x6d, 0xe7, 0x65, 0x8a, 0x22, 0xe5, 0xcd, 0x0c, 0xbd, 0x79, 0x05, 0x4d, 0x57, 0xc2,
+	0x3f, 0x94, 0x80, 0x31, 0xad, 0xb6, 0x1a, 0x97, 0xa4, 0x6f, 0xed, 0x5c, 0xdf, 0x12, 0x78, 0x4b,
+	0xa1, 0x8f, 0x06, 0x04, 0x6b, 0xb7, 0xb2, 0x54, 0xe6, 0x16, 0xca, 0x94, 0xc3, 0x3f, 0x95, 0xc0,
+	0xd5, 0x59, 0x3f, 0x15, 0x06, 0x90, 0x0e, 0x1d, 0xcf, 0xed, 0x50, 0x27, 0xea, 0xce, 0xf0, 0x49,
+	0x6b, 0xcd, 0x1d, 0x34, 0x4d, 0x05, 0xdb, 0x60, 0x93, 0x53, 0x64, 0x7f, 0x2d, 0xbc, 0x12, 0xc7,
+	0x9a, 0x63, 0x9f, 0x78, 0x88, 0x63, 0x63, 0xb1, 0x40, 0x72, 0xaf, 0xc7, 0xd0, 0x57, 0xd4, 0x3b,
+	0xd2, 0x40, 0x68, 0x83, 0x4d, 0x41, 0x34, 0xde, 0x3f, 0x30, 0x63, 0xe9, 0xfa, 0xb9, 0x9b, 0x8b,
+	0xbb, 0xb5, 0xa9, 0x6b, 0x54, 0xbf, 0xe6, 0xd5, 0x96, 0x04, 0xb6, 0x63, 0x9c, 0xb9, 0x1e, 0x51,
+	0x6f, 0x4c, 0xc6, 0xe0, 0x37, 0x60, 0x67, 0x6a, 0xd7, 0x60, 0xfc, 0x58, 0xba, 0x7e, 0x3f, 0xcf,
+	0x90, 0x89, 0x91, 0x77, 0xe4, 0xfa, 0x78, 0x4f, 0xc1, 0x3b, 0x0a, 0x6d, 0x6e, 0xd1, 0x4c, 0x39,
+	0x3c, 0x01, 0x6b, 0x01, 0xe6, 0xef, 0x42, 0xfa, 0x75, 0x6c, 0x88, 0x19, 0x2b, 0xd2, 0xd2, 0x83,
+	0x6a, 0x6e, 0x73, 0x96, 0x9c, 0xaa, 0xea, 0xa1, 0xe2, 0xd0, 0xac, 0xcc, 0x5c, 0x0d, 0x46, 0x05,
+	0x10, 0x81, 0xe5, 0xd3, 0x90, 0x8b, 0xe4, 0xd0, 0xcb, 0xb9, 0x2e, 0x8d, 0x3c, 0x9c, 0xc7, 0xc8,
+	0xbe, 0x20, 0xd0, 0x8c, 0x07, 0xc1, 0x49, 0x68, 0x2e, 0x9d, 0xa6, 0x24, 0xf0, 0xb7, 0x25, 0x50,
+	0x71, 0x06, 0x01, 0xf2, 0x5d, 0xdb, 0x62, 0x18, 0x51, 0xfb, 0xd4, 0x42, 0x0e, 0x4b, 0x0c, 0xde,
+	0x90, 0x06, 0x5b, 0xf3, 0x18, 0x7c, 0xac, 0xd8, 0x3a, 0x92, 0xac, 0xe9, 0xb0, 0x38, 0x98, 0xdb,
+	0x4e, 0xb6, 0x42, 0x44, 0x93, 0x9d, 0x86, 0x84, 0xa4, 0xf7, 0xed, 0x87, 0xf3, 0x47, 0xb3, 0xa3,
+	0x39, 0x62, 0x7b, 0xab, 0x6c, 0x54, 0x00, 0xdf, 0x82, 0xcb, 0x13, 0xed, 0xa1, 0x71, 0x5b, 0x1a,
+	0xba, 0x93, 0x97, 0x20, 0x47, 0x31, 0x30, 0x66, 0x5f, 0xe3, 0x63, 0x12, 0xf8, 0x0e, 0x6c, 0x8f,
+	0xfd, 0xae, 0x26, 0x46, 0x6a, 0xd2, 0xc8, 0xa3, 0x79, 0x56, 0xf3, 0x14, 0x87, 0xca, 0xa6, 0x38,
+	0x9a, 0xb1, 0xd1, 0x8d, 0x5e, 0x86, 0x14, 0x12, 0xb0, 0x31, 0xd2, 0xbf, 0xc5, 0x56, 0xeb, 0xd2,
+	0xea, 0xe7, 0xf3, 0x58, 0x6d, 0x12, 0x32, 0xac, 0xf9, 0xca, 0x26, 0x44, 0x13, 0x32, 0x78, 0x17,
+	0x5c, 0xf0, 0x50, 0x17, 0x7b, 0xcc, 0xb8, 0x27, 0x0f, 0xf2, 0xec, 0xd2, 0xa0, 0xe7, 0xc2, 0x01,
+	0x58, 0x1d, 0x6b, 0xcc, 0x8c, 0xcb, 0x85, 0x8a, 0x6f, 0x6c, 0xfe, 0x49, 0x82, 0x4e, 0x0a, 0x5d,
+	0xb6, 0xca, 0x5c, 0xc1, 0x23, 0x63, 0xd8, 0x04, 0xcb, 0x5d, 0xc4, 0x70, 0x12, 0x23, 0xe3, 0x6a,
+	0x81, 0x92, 0xb6, 0x24, 0x20, 0x49, 0xef, 0xf0, 0x04, 0xac, 0x0e, 0x3b, 0xe4, 0xc8, 0xe9, 0x61,
+	0x6e, 0x5c, 0x28, 0x40, 0xb2, 0x12, 0x83, 0xf6, 0x24, 0x06, 0xfe, 0x06, 0x6c, 0x66, 0xf6, 0xc7,
+	0xc6, 0x96, 0x0c, 0xc5, 0xb3, 0x9c, 0x50, 0xc4, 0x85, 0x48, 0x43, 0x93, 0x38, 0x64, 0xc8, 0xcd,
+	0xf5, 0xee, 0xa4, 0x10, 0x3e, 0x00, 0x80, 0x71, 0x44, 0xb9, 0xe5, 0x88, 0xca, 0xbe, 0x5e, 0x60,
+	0x05, 0x97, 0xe4, 0xfc, 0xc7, 0xa2, 0x9e, 0x7f, 0x0a, 0x2e, 0xe2, 0xc0, 0x51, 0xd0, 0x8d, 0x02,
+	0xd0, 0xff, 0xc3, 0x81, 0x23, 0x81, 0x5f, 0x80, 0xb5, 0x13, 0x37, 0x40, 0x9e, 0xfc, 0x5d, 0x61,
+	0xd1, 0xc9, 0x89, 0x7b, 0x66, 0xfc, 0xa8, 0x48, 0xf4, 0x24, 0xea, 0x15, 0xf5, 0x3a, 0x12, 0x03,
+	0x5f, 0x83, 0x95, 0x91, 0x5b, 0x25, 0x33, 0x6e, 0xca, 0x04, 0xfc, 0x24, 0xef, 0xfc, 0x7e, 0x11,
+	0xa3, 0x5a, 0x88, 0x3c, 0x09, 0x38, 0x1d, 0x98, 0xcb, 0x27, 0x29, 0x11, 0x83, 0x7f, 0x2c, 0x81,
+	0x6b, 0x7d, 0xd7, 0xc1, 0xa1, 0x35, 0xed, 0x0e, 0x62, 0x7c, 0x54, 0x28, 0x59, 0xf7, 0x04, 0xbc,
+	0x23, 0xd1, 0x9d, 0x21, 0x58, 0x6d, 0x52, 0xa6, 0xca, 0xbc, 0x22, 0xed, 0x66, 0x2b, 0xe1, 0x5b,
+	0xb0, 0x3c, 0xd2, 0x34, 0x1b, 0x1f, 0xcb, 0xb0, 0xfd, 0x74, 0x9e, 0x53, 0x7d, 0x2c, 0x09, 0xda,
+	0x12, 0x6f, 0x2e, 0xf5, 0x53, 0x23, 0x78, 0x06, 0xb6, 0x18, 0xf6, 0xb0, 0x2d, 0xaf, 0x05, 0xe9,
+	0xd6, 0xcd, 0xf8, 0x89, 0xb4, 0xd3, 0x9c, 0xab, 0x02, 0xc7, 0x4c, 0xe9, 0x1e, 0xcc, 0xdc, 0x64,
+	0x59, 0x62, 0x51, 0xf5, 0x93, 0x6e, 0x23, 0xae, 0x58, 0xd5, 0xf9, 0xab, 0xfe, 0x91, 0xe6, 0x48,
+	0xaa, 0x3e, 0x1f, 0x15, 0xc0, 0xb7, 0x60, 0x29, 0x7d, 0x53, 0x32, 0xee, 0xca, 0x5d, 0x6c, 0xe4,
+	0xec, 0x62, 0x5b, 0x41, 0x5e, 0x84, 0x8e, 0x3a, 0x5f, 0xa9, 0xb1, 0xb9, 0x48, 0x86, 0x03, 0x78,
+	0x00, 0xd6, 0xc6, 0xcf, 0xb3, 0xb1, 0x9d, 0x9f, 0xd9, 0xfb, 0x0b, 0xe6, 0xea, 0xd8, 0xf1, 0x84,
+	0xcf, 0x01, 0x10, 0xd9, 0xea, 0x32, 0x26, 0xe2, 0xff, 0x89, 0x24, 0xf9, 0x28, 0xb7, 0x45, 0x4a,
+	0x10, 0xfb, 0x0b, 0x66, 0x0a, 0x0f, 0x9f, 0x01, 0xe0, 0xa3, 0x20, 0x42, 0x9e, 0x65, 0x13, 0xdb,
+	0x30, 0x24, 0xdb, 0xad, 0x3c, 0xb6, 0x17, 0x12, 0xd1, 0x22, 0xf6, 0xfe, 0x82, 0x79, 0xc9, 0x8f,
+	0x07, 0x23, 0x5c, 0xbe, 0xb1, 0x33, 0x1f, 0x97, 0x9f, 0xe6, 0xf2, 0x47, 0xb8, 0xfa, 0xc6, 0x87,
+	0xf3, 0x71, 0xf5, 0xd3, 0x5c, 0x7d, 0x78, 0x0a, 0x36, 0x7c, 0x74, 0x26, 0x72, 0x0a, 0x5b, 0x76,
+	0x18, 0xf4, 0x31, 0x15, 0x4b, 0x67, 0xc6, 0x35, 0xc9, 0x5a, 0xcf, 0x67, 0x55, 0xd8, 0xd6, 0x10,
+	0xba, 0xbf, 0x60, 0xae, 0xfb, 0x93, 0x62, 0x18, 0x81, 0x9d, 0x0c, 0x4b, 0x56, 0x5f, 0xec, 0xa5,
+	0xf1, 0xff, 0xd2, 0xdc, 0xa7, 0xf3, 0x9b, 0x8b, 0x53, 0x61, 0xdb, 0xcf, 0x56, 0x89, 0x60, 0xe9,
+	0x7e, 0xc2, 0x26, 0xc8, 0xa8, 0x14, 0x0b, 0x96, 0xea, 0x10, 0x5a, 0x04, 0x89, 0x60, 0xf1, 0x78,
+	0x00, 0x43, 0xb0, 0xad, 0xb9, 0x5c, 0x9f, 0x50, 0x2c, 0xb3, 0xc4, 0x62, 0xa7, 0x88, 0x62, 0xe3,
+	0x8e, 0x24, 0xbe, 0x57, 0x8c, 0xf8, 0x20, 0x41, 0x77, 0x04, 0x78, 0x7f, 0xc1, 0xdc, 0xe4, 0x59,
+	0x0a, 0xf8, 0x02, 0x2c, 0x6a, 0x83, 0x34, 0x44, 0xcc, 0x78, 0xbf, 0x58, 0x42, 0x2b, 0x23, 0x66,
+	0x88, 0xc4, 0x5e, 0xe8, 0xd5, 0x8b, 0x11, 0x6c, 0x83, 0x25, 0x4d, 0xc7, 0x08, 0x0e, 0x1c, 0xe3,
+	0x8a, 0xe4, 0xbb, 0x5d, 0x8c, 0xaf, 0x23, 0x20, 0xfb, 0x0b, 0xa6, 0xf6, 0x48, 0x0e, 0x85, 0x83,
+	0x04, 0x53, 0x5b, 0x94, 0x06, 0x71, 0x46, 0x3e, 0x28, 0xe6, 0x60, 0x5b, 0x41, 0xd4, 0x21, 0x01,
+	0x24, 0x19, 0x8d, 0x6c, 0x96, 0x6f, 0xdc, 0x9a, 0x6f, 0xb3, 0xfc, 0xf4, 0x66, 0xf9, 0x95, 0xff,
+	0x94, 0xc1, 0xea, 0xd8, 0xf5, 0x00, 0x3e, 0x07, 0x1b, 0x9a, 0x5f, 0x11, 0xe9, 0x7e, 0x5d, 0x3e,
+	0x62, 0x2c, 0xee, 0x56, 0x26, 0xca, 0xcd, 0x5e, 0x18, 0x7a, 0xea, 0x67, 0x14, 0x2a, 0xdc, 0x53,
+	0x39, 0x41, 0xf5, 0xdf, 0xf0, 0x10, 0x6c, 0xc6, 0xe1, 0x54, 0x6d, 0xbf, 0xbe, 0x7c, 0x18, 0xe5,
+	0x5c, 0xba, 0x75, 0x1d, 0x44, 0x89, 0xd3, 0x5e, 0xc2, 0x36, 0xd8, 0x8a, 0x57, 0x1f, 0x06, 0x5c,
+	0xc4, 0x34, 0x26, 0x3c, 0x97, 0x4b, 0xa8, 0xd7, 0xd5, 0x52, 0xc0, 0x98, 0xf1, 0x2d, 0x78, 0x5f,
+	0x33, 0x12, 0x44, 0x79, 0x80, 0xe9, 0xb8, 0xa7, 0xef, 0xe5, 0x12, 0x57, 0x14, 0x41, 0x5b, 0xe1,
+	0x47, 0x1c, 0xae, 0xfc, 0x12, 0xac, 0x8d, 0xdf, 0x8d, 0x60, 0x0b, 0xac, 0xaa, 0x0b, 0x97, 0xd8,
+	0x53, 0x4c, 0x2d, 0xd7, 0xd1, 0xd1, 0x9d, 0xf9, 0x10, 0xa4, 0x2e, 0x69, 0x2d, 0x09, 0x39, 0x70,
+	0x2a, 0xff, 0x2e, 0x03, 0x38, 0xd9, 0x48, 0xc3, 0x7f, 0x96, 0x40, 0x65, 0xfa, 0xd3, 0xaa, 0xb4,
+	0xb3, 0xb2, 0x7b, 0x9a, 0x77, 0xed, 0x1f, 0xf2, 0x8e, 0xb5, 0x7c, 0x4f, 0x43, 0x94, 0x7a, 0x93,
+	0xc8, 0x9d, 0x66, 0x6e, 0x77, 0xb3, 0x15, 0xb0, 0x0e, 0x2e, 0x88, 0xeb, 0x84, 0xeb, 0xe8, 0x4c,
+	0x98, 0xdd, 0xa1, 0x9d, 0x47, 0x84, 0x1c, 0x38, 0xb0, 0x07, 0x2e, 0x25, 0x4f, 0xce, 0x72, 0xc3,
+	0xf3, 0x5b, 0xd9, 0x94, 0x8f, 0x4d, 0x42, 0x3a, 0x02, 0x39, 0xee, 0x7b, 0x2c, 0x37, 0x2f, 0x22,
+	0xfd, 0x55, 0xf9, 0x5b, 0x19, 0x6c, 0x4f, 0xb9, 0x61, 0xc2, 0xcf, 0xc0, 0xa2, 0x13, 0xfa, 0xc8,
+	0x0d, 0x86, 0x8f, 0x7b, 0x79, 0xee, 0x03, 0x05, 0x90, 0x0f, 0x7f, 0x4d, 0xb0, 0xec, 0xa1, 0xa0,
+	0x17, 0xa1, 0x9e, 0xa8, 0xf1, 0x0e, 0x2e, 0xb4, 0xfe, 0xa5, 0x18, 0xd2, 0x12, 0xdd, 0xc0, 0x4b,
+	0xb0, 0x15, 0x31, 0x6c, 0xb1, 0x88, 0x10, 0xcf, 0xc5, 0x8e, 0x68, 0x77, 0x99, 0x15, 0x06, 0xde,
+	0xa0, 0xc0, 0x21, 0x58, 0x8f, 0x18, 0xee, 0x68, 0xe0, 0x2b, 0xea, 0xb1, 0x97, 0x81, 0x37, 0x80,
+	0xbb, 0xe0, 0xfc, 0x09, 0xc6, 0x0e, 0x33, 0xce, 0x17, 0xb8, 0x68, 0xa9, 0xa9, 0x95, 0x3f, 0x97,
+	0xc1, 0xea, 0xd8, 0x65, 0x18, 0x3e, 0x04, 0x8b, 0x3e, 0xa6, 0xf6, 0x29, 0x0a, 0x78, 0xc1, 0xa4,
+	0x06, 0xf1, 0xfc, 0x03, 0x47, 0x44, 0x86, 0x21, 0x0f, 0x33, 0xcb, 0x0e, 0x23, 0xd1, 0x3c, 0x17,
+	0x8b, 0x8c, 0x84, 0xb4, 0x14, 0x02, 0xee, 0x83, 0xcb, 0xc9, 0xf5, 0x89, 0x50, 0x37, 0xa4, 0xa2,
+	0xa3, 0x9e, 0xf1, 0xc8, 0x5a, 0xdf, 0x55, 0x2c, 0x6b, 0x31, 0xaa, 0xad, 0x41, 0xf0, 0x33, 0xb0,
+	0x84, 0x03, 0xd4, 0xf5, 0xb0, 0xe5, 0x85, 0x36, 0xf2, 0x0a, 0x54, 0x81, 0x45, 0x35, 0xff, 0xb9,
+	0x98, 0x5e, 0xf9, 0x7b, 0x19, 0x2c, 0xa5, 0x1b, 0x62, 0xf8, 0x17, 0xd1, 0xf9, 0xcf, 0x7c, 0xdb,
+	0xd6, 0x67, 0xf3, 0x75, 0x4e, 0x42, 0xa7, 0x59, 0x1f, 0x2b, 0x8a, 0x57, 0xd4, 0x4b, 0x5a, 0xc8,
+	0xe9, 0x6a, 0xb3, 0xd2, 0x9f, 0xaa, 0x83, 0x14, 0xc0, 0xc9, 0x57, 0x73, 0xb9, 0x01, 0x2b, 0xbb,
+	0x8f, 0xe7, 0xf0, 0xe8, 0x08, 0x9f, 0xf1, 0x09, 0x3f, 0x84, 0xd0, 0x5c, 0xeb, 0x8f, 0x49, 0x2a,
+	0x0e, 0xd8, 0xcc, 0xec, 0xe5, 0xe1, 0x97, 0x00, 0xa6, 0xba, 0x1f, 0x64, 0xcb, 0x97, 0x76, 0xa3,
+	0x54, 0x20, 0x37, 0x2f, 0x0f, 0x71, 0x4d, 0x05, 0xab, 0x7c, 0x57, 0x06, 0x1b, 0x59, 0xcf, 0x1c,
+	0xf0, 0x77, 0x25, 0x60, 0x4c, 0xfb, 0xaf, 0x42, 0xef, 0x45, 0xde, 0x9b, 0x76, 0x5b, 0xc3, 0x47,
+	0xf8, 0x55, 0x27, 0x9f, 0xa5, 0x31, 0x37, 0x49, 0x96, 0x58, 0x7a, 0x32, 0xed, 0x5f, 0x1a, 0xbd,
+	0x07, 0x79, 0x9e, 0x1c, 0x6a, 0xf8, 0xa4, 0x27, 0x99, 0x1a, 0x73, 0x33, 0xc8, 0x12, 0x57, 0x4c,
+	0xb0, 0x3a, 0x76, 0xd5, 0x81, 0x3f, 0x07, 0x4b, 0xe9, 0xf7, 0xda, 0x42, 0xf5, 0x6e, 0x31, 0xf5,
+	0x4c, 0xdb, 0xf8, 0xc5, 0xf7, 0xcd, 0x43, 0x70, 0x63, 0xe8, 0xb3, 0xfe, 0x22, 0x2e, 0x13, 0xdd,
+	0x49, 0x2d, 0x79, 0xfa, 0xb8, 0xa5, 0x1e, 0x70, 0x31, 0x65, 0xb5, 0x5f, 0xc7, 0x9f, 0xdf, 0x26,
+	0x7f, 0x79, 0x09, 0xa1, 0xfe, 0xfc, 0x76, 0xef, 0x0a, 0xd8, 0x99, 0xfa, 0x3f, 0xe2, 0xde, 0x7f,
+	0x4b, 0xe0, 0x43, 0x3b, 0xf4, 0xf3, 0xaf, 0x77, 0x7b, 0xcb, 0xad, 0xe4, 0xd4, 0x87, 0x3c, 0x6c,
+	0x97, 0xbe, 0x7a, 0xa6, 0x31, 0xbd, 0x50, 0xd4, 0xdb, 0x6a, 0x48, 0x7b, 0xb5, 0x1e, 0x0e, 0xe4,
+	0x12, 0x6b, 0x43, 0xb7, 0x67, 0xfc, 0x89, 0xfe, 0x20, 0xf9, 0xfa, 0x47, 0xf9, 0xdc, 0xd3, 0x66,
+	0xf3, 0xbb, 0xf2, 0x0d, 0xd5, 0x0e, 0x55, 0x9b, 0x0e, 0xab, 0xaa, 0x4f, 0xf1, 0x75, 0x5c, 0xaf,
+	0x9a, 0xf1, 0xcc, 0x7f, 0xc5, 0x73, 0xde, 0x34, 0x1d, 0xf6, 0x26, 0x99, 0xf3, 0xe6, 0xb8, 0xfe,
+	0x26, 0x99, 0xf3, 0x7d, 0xf9, 0x43, 0xa5, 0x68, 0x34, 0x9a, 0x0e, 0x6b, 0x34, 0x92, 0x59, 0x8d,
+	0xc6, 0x71, 0xbd, 0xd1, 0x48, 0xe6, 0x75, 0x2f, 0x48, 0x67, 0xeb, 0xff, 0x0b, 0x00, 0x00, 0xff,
+	0xff, 0xde, 0x7f, 0x4a, 0x3e, 0xf0, 0x1f, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_audience_view.pb.go b/googleapis/ads/googleads/v3/resources/campaign_audience_view.pb.go
new file mode 100644
index 0000000..b34fe61
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_audience_view.pb.go
@@ -0,0 +1,104 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_audience_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign audience view.
+// Includes performance data from interests and remarketing lists for Display
+// Network and YouTube Network ads, and remarketing lists for search ads (RLSA),
+// aggregated by campaign and audience criterion. This view only includes
+// audiences attached at the campaign level.
+type CampaignAudienceView struct {
+	// The resource name of the campaign audience view.
+	// Campaign audience view resource names have the form:
+	//
+	// `customers/{customer_id}/campaignAudienceViews/{campaign_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignAudienceView) Reset()         { *m = CampaignAudienceView{} }
+func (m *CampaignAudienceView) String() string { return proto.CompactTextString(m) }
+func (*CampaignAudienceView) ProtoMessage()    {}
+func (*CampaignAudienceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c3b43f13f60a17e8, []int{0}
+}
+
+func (m *CampaignAudienceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignAudienceView.Unmarshal(m, b)
+}
+func (m *CampaignAudienceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignAudienceView.Marshal(b, m, deterministic)
+}
+func (m *CampaignAudienceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignAudienceView.Merge(m, src)
+}
+func (m *CampaignAudienceView) XXX_Size() int {
+	return xxx_messageInfo_CampaignAudienceView.Size(m)
+}
+func (m *CampaignAudienceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignAudienceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignAudienceView proto.InternalMessageInfo
+
+func (m *CampaignAudienceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*CampaignAudienceView)(nil), "google.ads.googleads.v3.resources.CampaignAudienceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_audience_view.proto", fileDescriptor_c3b43f13f60a17e8)
+}
+
+var fileDescriptor_c3b43f13f60a17e8 = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x31, 0x4b, 0x03, 0x31,
+	0x18, 0x86, 0xb9, 0x13, 0x04, 0x0f, 0x5d, 0x8a, 0x83, 0x2d, 0x0e, 0x56, 0x29, 0xb8, 0x98, 0x0c,
+	0xb7, 0x45, 0x10, 0xd2, 0x0e, 0x05, 0x07, 0x29, 0x1d, 0x6e, 0x90, 0x83, 0x12, 0x2f, 0x21, 0x04,
+	0x9a, 0x7c, 0xc7, 0xe5, 0xda, 0x0e, 0xd2, 0xd5, 0x1f, 0xe2, 0xe8, 0xec, 0xaf, 0xf0, 0xa7, 0xf4,
+	0x57, 0xc8, 0x35, 0x97, 0xb4, 0xc3, 0xa1, 0xdb, 0xcb, 0x7d, 0xcf, 0xfb, 0x7e, 0x5f, 0xde, 0x4b,
+	0x9e, 0x24, 0x80, 0x5c, 0x0a, 0xcc, 0xb8, 0xc5, 0x4e, 0x36, 0x6a, 0x9d, 0xe2, 0x4a, 0x58, 0x58,
+	0x55, 0x85, 0xb0, 0xb8, 0x60, 0xba, 0x64, 0x4a, 0x9a, 0x05, 0x5b, 0x71, 0x25, 0x4c, 0x21, 0x16,
+	0x6b, 0x25, 0x36, 0xa8, 0xac, 0xa0, 0x86, 0xde, 0xd0, 0x99, 0x10, 0xe3, 0x16, 0x05, 0x3f, 0x5a,
+	0xa7, 0x28, 0xf8, 0x07, 0x7d, 0xbf, 0xa2, 0x54, 0x21, 0xd5, 0xb9, 0x07, 0xd7, 0x47, 0x23, 0x66,
+	0x0c, 0xd4, 0xac, 0x56, 0x60, 0xac, 0x9b, 0xde, 0x7e, 0x47, 0xc9, 0xe5, 0xa4, 0x5d, 0x4e, 0xdb,
+	0xdd, 0x99, 0x12, 0x9b, 0xde, 0x5d, 0x72, 0xe1, 0x83, 0x16, 0x86, 0x69, 0x71, 0x15, 0xdd, 0x44,
+	0xf7, 0x67, 0xf3, 0x73, 0xff, 0xf1, 0x85, 0x69, 0x41, 0x36, 0x3b, 0x5a, 0x27, 0x0f, 0x87, 0x9b,
+	0x5a, 0x55, 0x2a, 0x8b, 0x0a, 0xd0, 0xb8, 0x33, 0x78, 0x52, 0xac, 0x6c, 0x0d, 0x5a, 0x54, 0x16,
+	0xbf, 0x7b, 0xb9, 0x0d, 0x05, 0x1c, 0xa3, 0x0d, 0xd0, 0xd9, 0xcb, 0x76, 0xfc, 0x11, 0x27, 0xa3,
+	0x02, 0x34, 0xfa, 0xb7, 0x99, 0x71, 0xbf, 0xeb, 0x88, 0x59, 0xf3, 0xf6, 0x59, 0xf4, 0xfa, 0xdc,
+	0xfa, 0x25, 0x2c, 0x99, 0x91, 0x08, 0x2a, 0x89, 0xa5, 0x30, 0xfb, 0x66, 0xf0, 0xe1, 0x2d, 0x7f,
+	0xfc, 0xb8, 0xc7, 0xa0, 0x3e, 0xe3, 0x93, 0x29, 0xa5, 0x5f, 0xf1, 0x70, 0xea, 0x22, 0x29, 0xb7,
+	0xc8, 0xc9, 0x46, 0x65, 0x29, 0x9a, 0x7b, 0xf2, 0xc7, 0x33, 0x39, 0xe5, 0x36, 0x0f, 0x4c, 0x9e,
+	0xa5, 0x79, 0x60, 0x76, 0xf1, 0xc8, 0x0d, 0x08, 0xa1, 0xdc, 0x12, 0x12, 0x28, 0x42, 0xb2, 0x94,
+	0x90, 0xc0, 0xbd, 0x9d, 0xee, 0x8f, 0x4d, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xd3, 0x3e,
+	0xb3, 0x64, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_bid_modifier.pb.go b/googleapis/ads/googleads/v3/resources/campaign_bid_modifier.pb.go
new file mode 100644
index 0000000..affb921
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_bid_modifier.pb.go
@@ -0,0 +1,177 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_bid_modifier.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents a bid-modifiable only criterion at the campaign level.
+type CampaignBidModifier struct {
+	// The resource name of the campaign bid modifier.
+	// Campaign bid modifier resource names have the form:
+	//
+	// `customers/{customer_id}/campaignBidModifiers/{campaign_id}~{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which this criterion belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ID of the criterion to bid modify.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bid when the criterion matches.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The criterion of this campaign bid modifier.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*CampaignBidModifier_InteractionType
+	Criterion            isCampaignBidModifier_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *CampaignBidModifier) Reset()         { *m = CampaignBidModifier{} }
+func (m *CampaignBidModifier) String() string { return proto.CompactTextString(m) }
+func (*CampaignBidModifier) ProtoMessage()    {}
+func (*CampaignBidModifier) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6a7c4dd3c8a563d8, []int{0}
+}
+
+func (m *CampaignBidModifier) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBidModifier.Unmarshal(m, b)
+}
+func (m *CampaignBidModifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBidModifier.Marshal(b, m, deterministic)
+}
+func (m *CampaignBidModifier) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBidModifier.Merge(m, src)
+}
+func (m *CampaignBidModifier) XXX_Size() int {
+	return xxx_messageInfo_CampaignBidModifier.Size(m)
+}
+func (m *CampaignBidModifier) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBidModifier.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBidModifier proto.InternalMessageInfo
+
+func (m *CampaignBidModifier) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignBidModifier) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+type isCampaignBidModifier_Criterion interface {
+	isCampaignBidModifier_Criterion()
+}
+
+type CampaignBidModifier_InteractionType struct {
+	InteractionType *common.InteractionTypeInfo `protobuf:"bytes,5,opt,name=interaction_type,json=interactionType,proto3,oneof"`
+}
+
+func (*CampaignBidModifier_InteractionType) isCampaignBidModifier_Criterion() {}
+
+func (m *CampaignBidModifier) GetCriterion() isCampaignBidModifier_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetInteractionType() *common.InteractionTypeInfo {
+	if x, ok := m.GetCriterion().(*CampaignBidModifier_InteractionType); ok {
+		return x.InteractionType
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignBidModifier) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignBidModifier_InteractionType)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*CampaignBidModifier)(nil), "google.ads.googleads.v3.resources.CampaignBidModifier")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_bid_modifier.proto", fileDescriptor_6a7c4dd3c8a563d8)
+}
+
+var fileDescriptor_6a7c4dd3c8a563d8 = []byte{
+	// 483 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xd1, 0x8a, 0xd4, 0x30,
+	0x14, 0x75, 0x3a, 0x2a, 0x6e, 0x66, 0x44, 0xa9, 0x2f, 0x75, 0x5d, 0x64, 0x57, 0x59, 0xd8, 0x07,
+	0x4d, 0xc0, 0x8a, 0x48, 0x44, 0xa5, 0xa3, 0xb0, 0x8e, 0xa0, 0x2c, 0xa3, 0xcc, 0x83, 0x0c, 0xd4,
+	0xb4, 0xc9, 0x94, 0xc0, 0x34, 0xa9, 0x49, 0xba, 0xb2, 0xc8, 0x3e, 0xfa, 0x23, 0x3e, 0xfa, 0x29,
+	0x7e, 0x82, 0x9f, 0xb0, 0x5f, 0x21, 0x6d, 0x93, 0x6c, 0xc5, 0x19, 0xf7, 0xed, 0x34, 0xf7, 0x9c,
+	0x9b, 0x7b, 0x4e, 0x6e, 0xc1, 0xf3, 0x42, 0xca, 0x62, 0xc5, 0x10, 0xa1, 0x1a, 0x75, 0xb0, 0x41,
+	0xc7, 0x31, 0x52, 0x4c, 0xcb, 0x5a, 0xe5, 0x4c, 0xa3, 0x9c, 0x94, 0x15, 0xe1, 0x85, 0x48, 0x33,
+	0x4e, 0xd3, 0x52, 0x52, 0xbe, 0xe4, 0x4c, 0xc1, 0x4a, 0x49, 0x23, 0xc3, 0xbd, 0x4e, 0x03, 0x09,
+	0xd5, 0xd0, 0xcb, 0xe1, 0x71, 0x0c, 0xbd, 0x7c, 0xfb, 0xe1, 0xa6, 0x1b, 0x72, 0x59, 0x96, 0x52,
+	0xa0, 0x5c, 0x71, 0xc3, 0x14, 0x27, 0x5d, 0xc7, 0xed, 0xdb, 0x8e, 0x5e, 0x71, 0x3f, 0x83, 0x2d,
+	0xdd, 0xb5, 0xa5, 0xf6, 0x2b, 0xab, 0x97, 0xe8, 0xab, 0x22, 0x55, 0xc5, 0x94, 0xb6, 0xf5, 0x9d,
+	0x9e, 0x94, 0x08, 0x21, 0x0d, 0x31, 0x5c, 0x0a, 0x5b, 0xbd, 0xf7, 0x7b, 0x08, 0x6e, 0xbd, 0xb2,
+	0x56, 0x26, 0x9c, 0xbe, 0xb3, 0x46, 0xc2, 0xfb, 0xe0, 0xba, 0xbb, 0x27, 0x15, 0xa4, 0x64, 0xd1,
+	0x60, 0x77, 0x70, 0xb0, 0x35, 0x1b, 0xbb, 0xc3, 0xf7, 0xa4, 0x64, 0xe1, 0x53, 0x70, 0xcd, 0xc5,
+	0x10, 0x05, 0xbb, 0x83, 0x83, 0xd1, 0xa3, 0x1d, 0xeb, 0x17, 0xba, 0x69, 0xe0, 0x07, 0xa3, 0xb8,
+	0x28, 0xe6, 0x64, 0x55, 0xb3, 0x99, 0x67, 0x87, 0x2f, 0xc0, 0xd8, 0x3a, 0x94, 0x22, 0xe5, 0x34,
+	0x1a, 0xb6, 0xea, 0x3b, 0xff, 0xa8, 0xa7, 0xc2, 0x3c, 0x79, 0xdc, 0x89, 0x47, 0x5e, 0x30, 0xa5,
+	0xe1, 0x4b, 0x30, 0xee, 0xe7, 0x1e, 0x5d, 0xde, 0x70, 0xfb, 0x6b, 0x59, 0x67, 0x2b, 0x66, 0x1b,
+	0x64, 0x3d, 0x7f, 0x9f, 0xc1, 0x4d, 0x2e, 0x0c, 0x53, 0x24, 0x6f, 0xd2, 0x48, 0xcd, 0x49, 0xc5,
+	0xa2, 0x2b, 0x6d, 0x93, 0x18, 0x6e, 0x7a, 0xbd, 0xee, 0x69, 0x9a, 0x99, 0x9c, 0xee, 0xe3, 0x49,
+	0xc5, 0xa6, 0x62, 0x29, 0xdf, 0x5c, 0x9a, 0xdd, 0xe0, 0x7f, 0x1f, 0x63, 0x73, 0x96, 0x7c, 0x01,
+	0x0f, 0xce, 0x1b, 0x58, 0x54, 0x71, 0xdd, 0x34, 0x42, 0xeb, 0x42, 0x4f, 0xf2, 0x5a, 0x1b, 0x59,
+	0x32, 0xa5, 0xd1, 0x37, 0x07, 0x4f, 0xfd, 0xa6, 0xf5, 0x98, 0x4d, 0x7d, 0xdd, 0xfe, 0x9d, 0x4e,
+	0x46, 0x60, 0xcb, 0xe7, 0x34, 0xf9, 0x1e, 0x80, 0xfd, 0x5c, 0x96, 0xf0, 0xc2, 0x75, 0x9c, 0x44,
+	0x6b, 0xc6, 0x39, 0x6a, 0x42, 0x3c, 0x1a, 0x7c, 0x7a, 0x6b, 0xe5, 0x85, 0x5c, 0x11, 0x51, 0x40,
+	0xa9, 0x0a, 0x54, 0x30, 0xd1, 0x46, 0x8c, 0xce, 0x4d, 0xfd, 0xe7, 0x5f, 0x79, 0xe6, 0xd1, 0x8f,
+	0x60, 0x78, 0x98, 0x24, 0x3f, 0x83, 0xbd, 0xc3, 0xae, 0x65, 0x42, 0x35, 0xec, 0x60, 0x83, 0xe6,
+	0x31, 0x9c, 0x39, 0xe6, 0x2f, 0xc7, 0x59, 0x24, 0x54, 0x2f, 0x3c, 0x67, 0x31, 0x8f, 0x17, 0x9e,
+	0x73, 0x16, 0xec, 0x77, 0x05, 0x8c, 0x13, 0xaa, 0x31, 0xf6, 0x2c, 0x8c, 0xe7, 0x31, 0xc6, 0x9e,
+	0x97, 0x5d, 0x6d, 0x87, 0x8d, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xf9, 0x2e, 0x22, 0xd7,
+	0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_budget.pb.go b/googleapis/ads/googleads/v3/resources/campaign_budget.pb.go
new file mode 100644
index 0000000..60544c3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_budget.pb.go
@@ -0,0 +1,328 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_budget.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign budget.
+type CampaignBudget struct {
+	// The resource name of the campaign budget.
+	// Campaign budget resource names have the form:
+	//
+	// `customers/{customer_id}/campaignBudgets/{budget_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign budget.
+	//
+	// A campaign budget is created using the CampaignBudgetService create
+	// operation and is assigned a budget ID. A budget ID can be shared across
+	// different campaigns; the system will then allocate the campaign budget
+	// among different campaigns to get optimum results.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the campaign budget.
+	//
+	// When creating a campaign budget through CampaignBudgetService, every
+	// explicitly shared campaign budget must have a non-null, non-empty name.
+	// Campaign budgets that are not explicitly shared derive their name from the
+	// attached campaign's name.
+	//
+	// The length of this string must be between 1 and 255, inclusive,
+	// in UTF-8 bytes, (trimmed).
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The amount of the budget, in the local currency for the account.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit. Monthly spend is capped at 30.4 times this amount.
+	AmountMicros *wrappers.Int64Value `protobuf:"bytes,5,opt,name=amount_micros,json=amountMicros,proto3" json:"amount_micros,omitempty"`
+	// The lifetime amount of the budget, in the local currency for the account.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	TotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,10,opt,name=total_amount_micros,json=totalAmountMicros,proto3" json:"total_amount_micros,omitempty"`
+	// The status of this campaign budget. This field is read-only.
+	Status enums.BudgetStatusEnum_BudgetStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.BudgetStatusEnum_BudgetStatus" json:"status,omitempty"`
+	// The delivery method that determines the rate at which the campaign budget
+	// is spent.
+	//
+	// Defaults to STANDARD if unspecified in a create operation.
+	DeliveryMethod enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod `protobuf:"varint,7,opt,name=delivery_method,json=deliveryMethod,proto3,enum=google.ads.googleads.v3.enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod" json:"delivery_method,omitempty"`
+	// Specifies whether the budget is explicitly shared. Defaults to true if
+	// unspecified in a create operation.
+	//
+	// If true, the budget was created with the purpose of sharing
+	// across one or more campaigns.
+	//
+	// If false, the budget was created with the intention of only being used
+	// with a single campaign. The budget's name and status will stay in sync
+	// with the campaign's name and status. Attempting to share the budget with a
+	// second campaign will result in an error.
+	//
+	// A non-shared budget can become an explicitly shared. The same operation
+	// must also assign the budget a name.
+	//
+	// A shared campaign budget can never become non-shared.
+	ExplicitlyShared *wrappers.BoolValue `protobuf:"bytes,8,opt,name=explicitly_shared,json=explicitlyShared,proto3" json:"explicitly_shared,omitempty"`
+	// The number of campaigns actively using the budget.
+	//
+	// This field is read-only.
+	ReferenceCount *wrappers.Int64Value `protobuf:"bytes,9,opt,name=reference_count,json=referenceCount,proto3" json:"reference_count,omitempty"`
+	// Indicates whether there is a recommended budget for this campaign budget.
+	//
+	// This field is read-only.
+	HasRecommendedBudget *wrappers.BoolValue `protobuf:"bytes,11,opt,name=has_recommended_budget,json=hasRecommendedBudget,proto3" json:"has_recommended_budget,omitempty"`
+	// The recommended budget amount. If no recommendation is available, this will
+	// be set to the budget amount.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	//
+	// This field is read-only.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,12,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	// Period over which to spend the budget. Defaults to DAILY if not specified.
+	Period enums.BudgetPeriodEnum_BudgetPeriod `protobuf:"varint,13,opt,name=period,proto3,enum=google.ads.googleads.v3.enums.BudgetPeriodEnum_BudgetPeriod" json:"period,omitempty"`
+	// The estimated change in weekly clicks if the recommended budget is applied.
+	//
+	// This field is read-only.
+	RecommendedBudgetEstimatedChangeWeeklyClicks *wrappers.Int64Value `protobuf:"bytes,14,opt,name=recommended_budget_estimated_change_weekly_clicks,json=recommendedBudgetEstimatedChangeWeeklyClicks,proto3" json:"recommended_budget_estimated_change_weekly_clicks,omitempty"`
+	// The estimated change in weekly cost in micros if the recommended budget is
+	// applied. One million is equivalent to one currency unit.
+	//
+	// This field is read-only.
+	RecommendedBudgetEstimatedChangeWeeklyCostMicros *wrappers.Int64Value `protobuf:"bytes,15,opt,name=recommended_budget_estimated_change_weekly_cost_micros,json=recommendedBudgetEstimatedChangeWeeklyCostMicros,proto3" json:"recommended_budget_estimated_change_weekly_cost_micros,omitempty"`
+	// The estimated change in weekly interactions if the recommended budget is
+	// applied.
+	//
+	// This field is read-only.
+	RecommendedBudgetEstimatedChangeWeeklyInteractions *wrappers.Int64Value `protobuf:"bytes,16,opt,name=recommended_budget_estimated_change_weekly_interactions,json=recommendedBudgetEstimatedChangeWeeklyInteractions,proto3" json:"recommended_budget_estimated_change_weekly_interactions,omitempty"`
+	// The estimated change in weekly views if the recommended budget is applied.
+	//
+	// This field is read-only.
+	RecommendedBudgetEstimatedChangeWeeklyViews *wrappers.Int64Value `protobuf:"bytes,17,opt,name=recommended_budget_estimated_change_weekly_views,json=recommendedBudgetEstimatedChangeWeeklyViews,proto3" json:"recommended_budget_estimated_change_weekly_views,omitempty"`
+	// The type of the campaign budget.
+	Type                 enums.BudgetTypeEnum_BudgetType `protobuf:"varint,18,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.BudgetTypeEnum_BudgetType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *CampaignBudget) Reset()         { *m = CampaignBudget{} }
+func (m *CampaignBudget) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudget) ProtoMessage()    {}
+func (*CampaignBudget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3160509214176301, []int{0}
+}
+
+func (m *CampaignBudget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudget.Unmarshal(m, b)
+}
+func (m *CampaignBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudget.Marshal(b, m, deterministic)
+}
+func (m *CampaignBudget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudget.Merge(m, src)
+}
+func (m *CampaignBudget) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudget.Size(m)
+}
+func (m *CampaignBudget) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudget proto.InternalMessageInfo
+
+func (m *CampaignBudget) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignBudget) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetTotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAmountMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetStatus() enums.BudgetStatusEnum_BudgetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.BudgetStatusEnum_UNSPECIFIED
+}
+
+func (m *CampaignBudget) GetDeliveryMethod() enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod {
+	if m != nil {
+		return m.DeliveryMethod
+	}
+	return enums.BudgetDeliveryMethodEnum_UNSPECIFIED
+}
+
+func (m *CampaignBudget) GetExplicitlyShared() *wrappers.BoolValue {
+	if m != nil {
+		return m.ExplicitlyShared
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetReferenceCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.ReferenceCount
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetHasRecommendedBudget() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasRecommendedBudget
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetPeriod() enums.BudgetPeriodEnum_BudgetPeriod {
+	if m != nil {
+		return m.Period
+	}
+	return enums.BudgetPeriodEnum_UNSPECIFIED
+}
+
+func (m *CampaignBudget) GetRecommendedBudgetEstimatedChangeWeeklyClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetEstimatedChangeWeeklyClicks
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetRecommendedBudgetEstimatedChangeWeeklyCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetEstimatedChangeWeeklyCostMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetRecommendedBudgetEstimatedChangeWeeklyInteractions() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetEstimatedChangeWeeklyInteractions
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetRecommendedBudgetEstimatedChangeWeeklyViews() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetEstimatedChangeWeeklyViews
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetType() enums.BudgetTypeEnum_BudgetType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.BudgetTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignBudget)(nil), "google.ads.googleads.v3.resources.CampaignBudget")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_budget.proto", fileDescriptor_3160509214176301)
+}
+
+var fileDescriptor_3160509214176301 = []byte{
+	// 800 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6e, 0xe3, 0x44,
+	0x18, 0x95, 0xb3, 0xa5, 0xb0, 0xb3, 0x69, 0xba, 0xf5, 0x22, 0x64, 0xca, 0x82, 0xb2, 0xa0, 0x15,
+	0x95, 0x16, 0xd9, 0xdd, 0x06, 0x75, 0x91, 0xe1, 0x82, 0x24, 0xbb, 0xaa, 0x16, 0xb6, 0x28, 0x72,
+	0xab, 0x20, 0xa1, 0x48, 0xd6, 0xd4, 0xf3, 0xd5, 0x19, 0xd5, 0x9e, 0xb1, 0x66, 0xc6, 0x29, 0x11,
+	0xaa, 0x84, 0x10, 0xb7, 0x48, 0x3c, 0x03, 0x97, 0x3c, 0x0a, 0x8f, 0xd2, 0x2b, 0x1e, 0x01, 0x79,
+	0xfc, 0x93, 0x3f, 0xba, 0x4e, 0xee, 0x3e, 0xcf, 0x9c, 0x73, 0xbe, 0xe3, 0x33, 0x5f, 0x3c, 0x41,
+	0x2f, 0x42, 0xce, 0xc3, 0x08, 0x1c, 0x4c, 0xa4, 0x93, 0x97, 0x59, 0x35, 0xe9, 0x38, 0x02, 0x24,
+	0x4f, 0x45, 0x00, 0xd2, 0x09, 0x70, 0x9c, 0x60, 0x1a, 0x32, 0xff, 0x22, 0x25, 0x21, 0x28, 0x3b,
+	0x11, 0x5c, 0x71, 0xf3, 0x49, 0x8e, 0xb6, 0x31, 0x91, 0x76, 0x45, 0xb4, 0x27, 0x1d, 0xbb, 0x22,
+	0xee, 0xbb, 0x77, 0x69, 0x03, 0x4b, 0x63, 0xe9, 0xe4, 0x72, 0x3e, 0x81, 0x88, 0x4e, 0x40, 0x4c,
+	0xfd, 0x18, 0xd4, 0x98, 0x93, 0x5c, 0x7e, 0xff, 0xf9, 0x5a, 0xdc, 0x04, 0x04, 0xdd, 0x90, 0x22,
+	0x15, 0x56, 0xa9, 0x2c, 0x28, 0xce, 0x5a, 0x14, 0x35, 0x4d, 0xa0, 0x20, 0x7c, 0x58, 0x12, 0x12,
+	0x5a, 0x25, 0x54, 0x6c, 0x7d, 0x52, 0x6c, 0xe9, 0xa7, 0x8b, 0xf4, 0xd2, 0xb9, 0x16, 0x38, 0x49,
+	0x40, 0x94, 0xbd, 0x1e, 0xcf, 0x51, 0x31, 0x63, 0x5c, 0x61, 0x45, 0x39, 0x2b, 0x76, 0x3f, 0xfd,
+	0xb7, 0x89, 0x5a, 0xfd, 0x22, 0xe8, 0x9e, 0x6e, 0x6b, 0x7e, 0x86, 0x76, 0xca, 0x16, 0x3e, 0xc3,
+	0x31, 0x58, 0x46, 0xdb, 0x38, 0xb8, 0xef, 0x35, 0xcb, 0xc5, 0x1f, 0x70, 0x0c, 0xe6, 0x33, 0xd4,
+	0xa0, 0xc4, 0xba, 0xd7, 0x36, 0x0e, 0x1e, 0x1c, 0x7d, 0x54, 0x1c, 0x84, 0x5d, 0x5a, 0xb0, 0x5f,
+	0x33, 0x75, 0xfc, 0xe5, 0x10, 0x47, 0x29, 0x78, 0x0d, 0x4a, 0xcc, 0x43, 0xb4, 0xa5, 0x85, 0xb6,
+	0x34, 0xfc, 0xf1, 0x0a, 0xfc, 0x4c, 0x09, 0xca, 0xc2, 0x1c, 0xaf, 0x91, 0xe6, 0xb7, 0x68, 0x07,
+	0xc7, 0x3c, 0x65, 0xca, 0x8f, 0x69, 0x20, 0xb8, 0xb4, 0xde, 0xa9, 0xef, 0xd4, 0xcc, 0x19, 0xa7,
+	0x9a, 0x60, 0x7e, 0x8f, 0x1e, 0x29, 0xae, 0x70, 0xe4, 0x2f, 0xea, 0xa0, 0x7a, 0x9d, 0x3d, 0xcd,
+	0xeb, 0xce, 0x8b, 0x9d, 0xa3, 0xed, 0xfc, 0xfc, 0xac, 0xed, 0xb6, 0x71, 0xd0, 0x3a, 0xfa, 0xc6,
+	0xbe, 0x6b, 0x0a, 0xf5, 0x01, 0xda, 0x79, 0x92, 0x67, 0x9a, 0xf2, 0x8a, 0xa5, 0xf1, 0xc2, 0x82,
+	0x57, 0x68, 0x99, 0x29, 0xda, 0x5d, 0x1a, 0x42, 0xeb, 0x5d, 0x2d, 0xff, 0x66, 0x2d, 0xf9, 0x97,
+	0x05, 0xf7, 0x54, 0x53, 0xe7, 0xda, 0x2c, 0x6e, 0x78, 0x2d, 0xb2, 0xf0, 0x6c, 0x9e, 0xa0, 0x3d,
+	0xf8, 0x39, 0x89, 0x68, 0x40, 0x55, 0x34, 0xf5, 0xe5, 0x18, 0x0b, 0x20, 0xd6, 0x7b, 0x3a, 0x97,
+	0xfd, 0x95, 0x5c, 0x7a, 0x9c, 0x47, 0x79, 0x2c, 0x0f, 0x67, 0xa4, 0x33, 0xcd, 0x31, 0x5f, 0xa2,
+	0x5d, 0x01, 0x97, 0x20, 0x80, 0x05, 0xe0, 0x07, 0x59, 0x5c, 0xd6, 0xfd, 0xfa, 0x78, 0x5b, 0x15,
+	0xa7, 0x9f, 0x51, 0xcc, 0x01, 0xfa, 0x60, 0x8c, 0xa5, 0x2f, 0x20, 0xe0, 0x71, 0x0c, 0x8c, 0x00,
+	0x29, 0x7e, 0xf0, 0xd6, 0x83, 0x5a, 0x4f, 0xef, 0x8f, 0xb1, 0xf4, 0x66, 0xc4, 0x62, 0x80, 0x09,
+	0x6a, 0xaf, 0xaa, 0x2d, 0xcd, 0x41, 0xb3, 0xde, 0xe8, 0xc7, 0x62, 0x59, 0x79, 0x79, 0x26, 0xf2,
+	0xcf, 0x80, 0xb5, 0xb3, 0xc1, 0x4c, 0x0c, 0x34, 0x65, 0xee, 0xb0, 0xf2, 0x05, 0xaf, 0xd0, 0x32,
+	0x7f, 0x37, 0xd0, 0xf3, 0xff, 0x31, 0x0f, 0x52, 0xd1, 0x18, 0x2b, 0x20, 0x7e, 0x30, 0xc6, 0x2c,
+	0x04, 0xff, 0x1a, 0xe0, 0x2a, 0x9a, 0xfa, 0x41, 0x44, 0x83, 0x2b, 0x69, 0xb5, 0xea, 0xdf, 0xe6,
+	0x8b, 0x95, 0xb7, 0x79, 0x55, 0x6a, 0xf6, 0xb5, 0xe4, 0x8f, 0x5a, 0xb1, 0xaf, 0x05, 0xcd, 0x3f,
+	0x0c, 0x74, 0xbc, 0x89, 0x0d, 0x2e, 0xab, 0x64, 0x77, 0xeb, 0xbd, 0x1c, 0xae, 0xe9, 0x85, 0xcb,
+	0x32, 0xec, 0x3f, 0x0d, 0xf4, 0x62, 0x03, 0x3f, 0x94, 0x29, 0x10, 0x38, 0xd0, 0x1f, 0x3a, 0xeb,
+	0x61, 0xbd, 0xa1, 0xa3, 0xf5, 0x0c, 0xbd, 0x9e, 0x93, 0x35, 0x7f, 0x33, 0xd0, 0xe1, 0x06, 0x96,
+	0x26, 0x14, 0xae, 0xa5, 0xb5, 0x57, 0xef, 0xe5, 0xd9, 0x7a, 0x5e, 0x86, 0x99, 0x9e, 0xf9, 0x06,
+	0x6d, 0x65, 0xb7, 0x84, 0x65, 0xea, 0x11, 0xfc, 0x6a, 0xad, 0x11, 0x3c, 0x9f, 0x26, 0x30, 0x37,
+	0x80, 0xd9, 0xa3, 0xa7, 0x55, 0x5c, 0x72, 0xdb, 0xc5, 0xe8, 0xf3, 0x19, 0xb1, 0xa8, 0x12, 0x2a,
+	0xed, 0x80, 0xc7, 0xce, 0xd2, 0x3d, 0x71, 0x1c, 0xa4, 0x52, 0xf1, 0x18, 0x84, 0x74, 0x7e, 0x29,
+	0xcb, 0x9b, 0xea, 0xd6, 0xce, 0x41, 0xd9, 0xd6, 0xe2, 0x35, 0x7e, 0xd3, 0xfb, 0xb5, 0x81, 0x9e,
+	0x06, 0x3c, 0xb6, 0x6b, 0x2f, 0xf2, 0xde, 0xa3, 0xc5, 0x8e, 0x83, 0x2c, 0xad, 0x81, 0xf1, 0xd3,
+	0x77, 0x05, 0x33, 0xe4, 0x11, 0x66, 0xa1, 0xcd, 0x45, 0xe8, 0x84, 0xc0, 0x74, 0x96, 0xce, 0xcc,
+	0xf2, 0x5b, 0xfe, 0x5a, 0x7c, 0x5d, 0x55, 0x7f, 0x35, 0xee, 0x9d, 0x74, 0xbb, 0x7f, 0x37, 0x9e,
+	0x9c, 0xe4, 0x92, 0x5d, 0x22, 0xed, 0xbc, 0xcc, 0xaa, 0x61, 0xc7, 0xf6, 0x4a, 0xe4, 0x3f, 0x25,
+	0x66, 0xd4, 0x25, 0x72, 0x54, 0x61, 0x46, 0xc3, 0xce, 0xa8, 0xc2, 0xdc, 0x36, 0x9e, 0xe6, 0x1b,
+	0xae, 0xdb, 0x25, 0xd2, 0x75, 0x2b, 0x94, 0xeb, 0x0e, 0x3b, 0xae, 0x5b, 0xe1, 0x2e, 0xb6, 0xb5,
+	0xd9, 0xce, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x67, 0x6e, 0xd9, 0x06, 0x09, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_criterion.pb.go b/googleapis/ads/googleads/v3/resources/campaign_criterion.pb.go
new file mode 100644
index 0000000..dfd0f21
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_criterion.pb.go
@@ -0,0 +1,643 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_criterion.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign criterion.
+type CampaignCriterion struct {
+	// The resource name of the campaign criterion.
+	// Campaign criterion resource names have the form:
+	//
+	// `customers/{customer_id}/campaignCriteria/{campaign_id}~{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which the criterion belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,4,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored during mutate.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,5,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bids when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
+	// Use 0 to opt out of a Device type.
+	BidModifier *wrappers.FloatValue `protobuf:"bytes,14,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// Whether to target (`false`) or exclude (`true`) the criterion.
+	Negative *wrappers.BoolValue `protobuf:"bytes,7,opt,name=negative,proto3" json:"negative,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,6,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// The status of the criterion.
+	Status enums.CampaignCriterionStatusEnum_CampaignCriterionStatus `protobuf:"varint,35,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CampaignCriterionStatusEnum_CampaignCriterionStatus" json:"status,omitempty"`
+	// The campaign criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*CampaignCriterion_Keyword
+	//	*CampaignCriterion_Placement
+	//	*CampaignCriterion_MobileAppCategory
+	//	*CampaignCriterion_MobileApplication
+	//	*CampaignCriterion_Location
+	//	*CampaignCriterion_Device
+	//	*CampaignCriterion_AdSchedule
+	//	*CampaignCriterion_AgeRange
+	//	*CampaignCriterion_Gender
+	//	*CampaignCriterion_IncomeRange
+	//	*CampaignCriterion_ParentalStatus
+	//	*CampaignCriterion_UserList
+	//	*CampaignCriterion_YoutubeVideo
+	//	*CampaignCriterion_YoutubeChannel
+	//	*CampaignCriterion_Proximity
+	//	*CampaignCriterion_Topic
+	//	*CampaignCriterion_ListingScope
+	//	*CampaignCriterion_Language
+	//	*CampaignCriterion_IpBlock
+	//	*CampaignCriterion_ContentLabel
+	//	*CampaignCriterion_Carrier
+	//	*CampaignCriterion_UserInterest
+	//	*CampaignCriterion_Webpage
+	//	*CampaignCriterion_OperatingSystemVersion
+	//	*CampaignCriterion_MobileDevice
+	//	*CampaignCriterion_LocationGroup
+	//	*CampaignCriterion_CustomAffinity
+	Criterion            isCampaignCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *CampaignCriterion) Reset()         { *m = CampaignCriterion{} }
+func (m *CampaignCriterion) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterion) ProtoMessage()    {}
+func (*CampaignCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e4a8605ea5b2b771, []int{0}
+}
+
+func (m *CampaignCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterion.Unmarshal(m, b)
+}
+func (m *CampaignCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterion.Marshal(b, m, deterministic)
+}
+func (m *CampaignCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterion.Merge(m, src)
+}
+func (m *CampaignCriterion) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterion.Size(m)
+}
+func (m *CampaignCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterion proto.InternalMessageInfo
+
+func (m *CampaignCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignCriterion) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetBidModifier() *wrappers.FloatValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetNegative() *wrappers.BoolValue {
+	if m != nil {
+		return m.Negative
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+func (m *CampaignCriterion) GetStatus() enums.CampaignCriterionStatusEnum_CampaignCriterionStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignCriterionStatusEnum_UNSPECIFIED
+}
+
+type isCampaignCriterion_Criterion interface {
+	isCampaignCriterion_Criterion()
+}
+
+type CampaignCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,8,opt,name=keyword,proto3,oneof"`
+}
+
+type CampaignCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,9,opt,name=placement,proto3,oneof"`
+}
+
+type CampaignCriterion_MobileAppCategory struct {
+	MobileAppCategory *common.MobileAppCategoryInfo `protobuf:"bytes,10,opt,name=mobile_app_category,json=mobileAppCategory,proto3,oneof"`
+}
+
+type CampaignCriterion_MobileApplication struct {
+	MobileApplication *common.MobileApplicationInfo `protobuf:"bytes,11,opt,name=mobile_application,json=mobileApplication,proto3,oneof"`
+}
+
+type CampaignCriterion_Location struct {
+	Location *common.LocationInfo `protobuf:"bytes,12,opt,name=location,proto3,oneof"`
+}
+
+type CampaignCriterion_Device struct {
+	Device *common.DeviceInfo `protobuf:"bytes,13,opt,name=device,proto3,oneof"`
+}
+
+type CampaignCriterion_AdSchedule struct {
+	AdSchedule *common.AdScheduleInfo `protobuf:"bytes,15,opt,name=ad_schedule,json=adSchedule,proto3,oneof"`
+}
+
+type CampaignCriterion_AgeRange struct {
+	AgeRange *common.AgeRangeInfo `protobuf:"bytes,16,opt,name=age_range,json=ageRange,proto3,oneof"`
+}
+
+type CampaignCriterion_Gender struct {
+	Gender *common.GenderInfo `protobuf:"bytes,17,opt,name=gender,proto3,oneof"`
+}
+
+type CampaignCriterion_IncomeRange struct {
+	IncomeRange *common.IncomeRangeInfo `protobuf:"bytes,18,opt,name=income_range,json=incomeRange,proto3,oneof"`
+}
+
+type CampaignCriterion_ParentalStatus struct {
+	ParentalStatus *common.ParentalStatusInfo `protobuf:"bytes,19,opt,name=parental_status,json=parentalStatus,proto3,oneof"`
+}
+
+type CampaignCriterion_UserList struct {
+	UserList *common.UserListInfo `protobuf:"bytes,22,opt,name=user_list,json=userList,proto3,oneof"`
+}
+
+type CampaignCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,20,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type CampaignCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,21,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type CampaignCriterion_Proximity struct {
+	Proximity *common.ProximityInfo `protobuf:"bytes,23,opt,name=proximity,proto3,oneof"`
+}
+
+type CampaignCriterion_Topic struct {
+	Topic *common.TopicInfo `protobuf:"bytes,24,opt,name=topic,proto3,oneof"`
+}
+
+type CampaignCriterion_ListingScope struct {
+	ListingScope *common.ListingScopeInfo `protobuf:"bytes,25,opt,name=listing_scope,json=listingScope,proto3,oneof"`
+}
+
+type CampaignCriterion_Language struct {
+	Language *common.LanguageInfo `protobuf:"bytes,26,opt,name=language,proto3,oneof"`
+}
+
+type CampaignCriterion_IpBlock struct {
+	IpBlock *common.IpBlockInfo `protobuf:"bytes,27,opt,name=ip_block,json=ipBlock,proto3,oneof"`
+}
+
+type CampaignCriterion_ContentLabel struct {
+	ContentLabel *common.ContentLabelInfo `protobuf:"bytes,28,opt,name=content_label,json=contentLabel,proto3,oneof"`
+}
+
+type CampaignCriterion_Carrier struct {
+	Carrier *common.CarrierInfo `protobuf:"bytes,29,opt,name=carrier,proto3,oneof"`
+}
+
+type CampaignCriterion_UserInterest struct {
+	UserInterest *common.UserInterestInfo `protobuf:"bytes,30,opt,name=user_interest,json=userInterest,proto3,oneof"`
+}
+
+type CampaignCriterion_Webpage struct {
+	Webpage *common.WebpageInfo `protobuf:"bytes,31,opt,name=webpage,proto3,oneof"`
+}
+
+type CampaignCriterion_OperatingSystemVersion struct {
+	OperatingSystemVersion *common.OperatingSystemVersionInfo `protobuf:"bytes,32,opt,name=operating_system_version,json=operatingSystemVersion,proto3,oneof"`
+}
+
+type CampaignCriterion_MobileDevice struct {
+	MobileDevice *common.MobileDeviceInfo `protobuf:"bytes,33,opt,name=mobile_device,json=mobileDevice,proto3,oneof"`
+}
+
+type CampaignCriterion_LocationGroup struct {
+	LocationGroup *common.LocationGroupInfo `protobuf:"bytes,34,opt,name=location_group,json=locationGroup,proto3,oneof"`
+}
+
+type CampaignCriterion_CustomAffinity struct {
+	CustomAffinity *common.CustomAffinityInfo `protobuf:"bytes,36,opt,name=custom_affinity,json=customAffinity,proto3,oneof"`
+}
+
+func (*CampaignCriterion_Keyword) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Placement) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_MobileAppCategory) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_MobileApplication) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Location) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Device) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_AdSchedule) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_AgeRange) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Gender) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_IncomeRange) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ParentalStatus) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_UserList) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_YoutubeVideo) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_YoutubeChannel) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Proximity) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Topic) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ListingScope) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Language) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_IpBlock) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ContentLabel) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Carrier) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_UserInterest) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Webpage) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_OperatingSystemVersion) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_MobileDevice) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_LocationGroup) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_CustomAffinity) isCampaignCriterion_Criterion() {}
+
+func (m *CampaignCriterion) GetCriterion() isCampaignCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetMobileAppCategory() *common.MobileAppCategoryInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_MobileAppCategory); ok {
+		return x.MobileAppCategory
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetMobileApplication() *common.MobileApplicationInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_MobileApplication); ok {
+		return x.MobileApplication
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetLocation() *common.LocationInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Location); ok {
+		return x.Location
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetDevice() *common.DeviceInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Device); ok {
+		return x.Device
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetAdSchedule() *common.AdScheduleInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_AdSchedule); ok {
+		return x.AdSchedule
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetAgeRange() *common.AgeRangeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_AgeRange); ok {
+		return x.AgeRange
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetGender() *common.GenderInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Gender); ok {
+		return x.Gender
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetIncomeRange() *common.IncomeRangeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_IncomeRange); ok {
+		return x.IncomeRange
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetParentalStatus() *common.ParentalStatusInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ParentalStatus); ok {
+		return x.ParentalStatus
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetUserList() *common.UserListInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_UserList); ok {
+		return x.UserList
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetProximity() *common.ProximityInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Proximity); ok {
+		return x.Proximity
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetTopic() *common.TopicInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Topic); ok {
+		return x.Topic
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetListingScope() *common.ListingScopeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ListingScope); ok {
+		return x.ListingScope
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetLanguage() *common.LanguageInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Language); ok {
+		return x.Language
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetIpBlock() *common.IpBlockInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_IpBlock); ok {
+		return x.IpBlock
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetContentLabel() *common.ContentLabelInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ContentLabel); ok {
+		return x.ContentLabel
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetCarrier() *common.CarrierInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Carrier); ok {
+		return x.Carrier
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetUserInterest() *common.UserInterestInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_UserInterest); ok {
+		return x.UserInterest
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetWebpage() *common.WebpageInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Webpage); ok {
+		return x.Webpage
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetOperatingSystemVersion() *common.OperatingSystemVersionInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_OperatingSystemVersion); ok {
+		return x.OperatingSystemVersion
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetMobileDevice() *common.MobileDeviceInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_MobileDevice); ok {
+		return x.MobileDevice
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetLocationGroup() *common.LocationGroupInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_LocationGroup); ok {
+		return x.LocationGroup
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetCustomAffinity() *common.CustomAffinityInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_CustomAffinity); ok {
+		return x.CustomAffinity
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignCriterion) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignCriterion_Keyword)(nil),
+		(*CampaignCriterion_Placement)(nil),
+		(*CampaignCriterion_MobileAppCategory)(nil),
+		(*CampaignCriterion_MobileApplication)(nil),
+		(*CampaignCriterion_Location)(nil),
+		(*CampaignCriterion_Device)(nil),
+		(*CampaignCriterion_AdSchedule)(nil),
+		(*CampaignCriterion_AgeRange)(nil),
+		(*CampaignCriterion_Gender)(nil),
+		(*CampaignCriterion_IncomeRange)(nil),
+		(*CampaignCriterion_ParentalStatus)(nil),
+		(*CampaignCriterion_UserList)(nil),
+		(*CampaignCriterion_YoutubeVideo)(nil),
+		(*CampaignCriterion_YoutubeChannel)(nil),
+		(*CampaignCriterion_Proximity)(nil),
+		(*CampaignCriterion_Topic)(nil),
+		(*CampaignCriterion_ListingScope)(nil),
+		(*CampaignCriterion_Language)(nil),
+		(*CampaignCriterion_IpBlock)(nil),
+		(*CampaignCriterion_ContentLabel)(nil),
+		(*CampaignCriterion_Carrier)(nil),
+		(*CampaignCriterion_UserInterest)(nil),
+		(*CampaignCriterion_Webpage)(nil),
+		(*CampaignCriterion_OperatingSystemVersion)(nil),
+		(*CampaignCriterion_MobileDevice)(nil),
+		(*CampaignCriterion_LocationGroup)(nil),
+		(*CampaignCriterion_CustomAffinity)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*CampaignCriterion)(nil), "google.ads.googleads.v3.resources.CampaignCriterion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_criterion.proto", fileDescriptor_e4a8605ea5b2b771)
+}
+
+var fileDescriptor_e4a8605ea5b2b771 = []byte{
+	// 1187 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x97, 0xdf, 0x72, 0xdc, 0xb4,
+	0x17, 0xc7, 0x7f, 0xc9, 0xaf, 0x4d, 0x13, 0xed, 0x26, 0xa5, 0x2a, 0x04, 0x35, 0x2d, 0x25, 0x6d,
+	0xe9, 0x4c, 0x29, 0xd4, 0x86, 0x2c, 0x74, 0x18, 0x33, 0x74, 0x66, 0xb3, 0x85, 0x74, 0xdb, 0x14,
+	0xca, 0x26, 0x6c, 0x87, 0x4e, 0x18, 0x8f, 0xd6, 0xd6, 0xba, 0xa2, 0xb6, 0xe4, 0x91, 0xe5, 0x2d,
+	0x3b, 0x9d, 0x5e, 0xf1, 0x26, 0x5c, 0xf2, 0x28, 0x5c, 0xf1, 0x1c, 0x7d, 0x0a, 0x46, 0xff, 0xbc,
+	0x9b, 0x6e, 0x82, 0xcd, 0x9d, 0x74, 0x74, 0x3e, 0x5f, 0x9d, 0x73, 0x6c, 0x1d, 0xd9, 0x20, 0x48,
+	0x38, 0x4f, 0x52, 0xe2, 0xe3, 0xb8, 0xf0, 0xcd, 0x50, 0x8d, 0x26, 0x1d, 0x5f, 0x90, 0x82, 0x97,
+	0x22, 0x22, 0x85, 0x1f, 0xe1, 0x2c, 0xc7, 0x34, 0x61, 0x61, 0x24, 0xa8, 0x24, 0x82, 0x72, 0xe6,
+	0xe5, 0x82, 0x4b, 0x0e, 0xaf, 0x19, 0xc0, 0xc3, 0x71, 0xe1, 0x55, 0xac, 0x37, 0xe9, 0x78, 0x15,
+	0xbb, 0x75, 0xe7, 0x34, 0xf9, 0x88, 0x67, 0x19, 0x67, 0xbe, 0x95, 0xc4, 0x46, 0x71, 0xeb, 0x9b,
+	0xd3, 0xdc, 0x09, 0x2b, 0xb3, 0x93, 0x22, 0x09, 0x0b, 0x89, 0x65, 0x59, 0x58, 0x7c, 0xa7, 0x06,
+	0xaf, 0x28, 0x39, 0xcd, 0x89, 0x65, 0x2e, 0x39, 0x26, 0xa7, 0x55, 0xce, 0x76, 0xe9, 0xaa, 0x5d,
+	0xd2, 0xb3, 0x51, 0x39, 0xf6, 0x5f, 0x0a, 0x9c, 0xe7, 0x44, 0xb8, 0xed, 0xae, 0xcc, 0xa1, 0x98,
+	0x31, 0x2e, 0xb1, 0xa4, 0x9c, 0xd9, 0xd5, 0xeb, 0x7f, 0x6f, 0x82, 0x0b, 0x3d, 0x1b, 0x70, 0xcf,
+	0xed, 0x0c, 0x6f, 0x80, 0x75, 0xb7, 0x4b, 0xc8, 0x70, 0x46, 0xd0, 0xd2, 0xf6, 0xd2, 0xad, 0xb5,
+	0x41, 0xdb, 0x19, 0xbf, 0xc7, 0x19, 0x81, 0x5f, 0x81, 0x55, 0x97, 0x2a, 0x3a, 0xb3, 0xbd, 0x74,
+	0xab, 0xb5, 0x73, 0xc5, 0x16, 0xd8, 0x73, 0xb1, 0x78, 0x07, 0x52, 0x50, 0x96, 0x0c, 0x71, 0x5a,
+	0x92, 0x41, 0xe5, 0x0d, 0xef, 0x81, 0xf6, 0x2c, 0x4b, 0x1a, 0xa3, 0xb3, 0x9a, 0xbe, 0xbc, 0x40,
+	0xf7, 0x99, 0xbc, 0xfb, 0x85, 0x81, 0x5b, 0x15, 0xd0, 0x8f, 0x15, 0x3f, 0xa2, 0x71, 0x98, 0xf1,
+	0x98, 0x8e, 0x29, 0x11, 0x68, 0xe3, 0x14, 0xfe, 0xbb, 0x94, 0x63, 0x69, 0xf9, 0x11, 0x8d, 0x1f,
+	0x5b, 0x7f, 0x78, 0x17, 0xac, 0x32, 0x92, 0x60, 0x49, 0x27, 0x04, 0x9d, 0xd3, 0xec, 0xd6, 0x02,
+	0xbb, 0xcb, 0x79, 0x6a, 0xe3, 0x76, 0xbe, 0x70, 0x00, 0xce, 0xa8, 0x67, 0x82, 0x56, 0xb6, 0x97,
+	0x6e, 0x6d, 0xec, 0xdc, 0xf3, 0x4e, 0x7b, 0xb3, 0xf4, 0x83, 0xf4, 0xaa, 0x72, 0x1e, 0x4e, 0x73,
+	0xf2, 0x2d, 0x2b, 0xb3, 0xe3, 0x96, 0x81, 0xd6, 0x82, 0xbf, 0x82, 0x15, 0xf3, 0x76, 0xa0, 0x1b,
+	0x5a, 0x75, 0x50, 0xa7, 0xfa, 0xf6, 0xc3, 0x3a, 0xd0, 0xb4, 0xd1, 0x3f, 0x79, 0x6d, 0x60, 0x77,
+	0x80, 0x7b, 0xe0, 0xdc, 0x0b, 0x32, 0x7d, 0xc9, 0x45, 0x8c, 0x56, 0x75, 0xda, 0x9f, 0x9c, 0xba,
+	0x99, 0x79, 0xf3, 0xbd, 0x47, 0xc6, 0xbd, 0xcf, 0xc6, 0xfc, 0xc1, 0xff, 0x06, 0x8e, 0x86, 0x8f,
+	0xc1, 0x5a, 0x9e, 0xe2, 0x88, 0x64, 0x84, 0x49, 0xb4, 0xa6, 0xa5, 0xee, 0xd4, 0x49, 0x3d, 0x71,
+	0x80, 0x15, 0x9b, 0x29, 0xc0, 0x04, 0x5c, 0xcc, 0xf8, 0x88, 0xa6, 0x24, 0xc4, 0x79, 0x1e, 0x46,
+	0x58, 0x92, 0x84, 0x8b, 0x29, 0x02, 0x5a, 0xf8, 0xcb, 0x3a, 0xe1, 0xc7, 0x1a, 0xed, 0xe6, 0x79,
+	0xcf, 0x82, 0x76, 0x83, 0x0b, 0xd9, 0xdb, 0x0b, 0x70, 0x0c, 0xe0, 0x6c, 0xa3, 0x94, 0x46, 0xfa,
+	0x28, 0xa0, 0xd6, 0x7f, 0xdc, 0xc7, 0x81, 0x0b, 0xfb, 0xb8, 0x05, 0xf8, 0x10, 0xac, 0xa6, 0xdc,
+	0xaa, 0xb7, 0xb5, 0xfa, 0xa7, 0x75, 0xea, 0xfb, 0xfc, 0x98, 0x68, 0xc5, 0xc3, 0xfb, 0x60, 0x25,
+	0x26, 0x13, 0x1a, 0x11, 0xb4, 0xae, 0x95, 0x6e, 0xd7, 0x29, 0xdd, 0xd7, 0xde, 0x56, 0xc7, 0xb2,
+	0xf0, 0x47, 0xd0, 0xc2, 0x71, 0x58, 0x44, 0xcf, 0x49, 0x5c, 0xa6, 0x04, 0x9d, 0xd7, 0x52, 0x5e,
+	0x9d, 0x54, 0x37, 0x3e, 0xb0, 0x84, 0x95, 0x03, 0xb8, 0xb2, 0xc0, 0x47, 0x60, 0x0d, 0x27, 0x24,
+	0x14, 0x98, 0x25, 0x04, 0xbd, 0xd3, 0x2c, 0xcb, 0x6e, 0x42, 0x06, 0xca, 0xdf, 0x65, 0x89, 0xed,
+	0x5c, 0x65, 0x99, 0x10, 0x16, 0x13, 0x81, 0x2e, 0x34, 0xcb, 0x72, 0x4f, 0x7b, 0xbb, 0x2c, 0x0d,
+	0x0b, 0x0f, 0x41, 0x9b, 0xb2, 0x88, 0x67, 0x2e, 0x2a, 0xa8, 0xb5, 0xfc, 0x3a, 0xad, 0xbe, 0x66,
+	0xe6, 0x03, 0x6b, 0xd1, 0x99, 0x09, 0xfe, 0x02, 0xce, 0xe7, 0x58, 0x10, 0x26, 0x71, 0x6a, 0x3b,
+	0x39, 0xba, 0xa8, 0x85, 0x77, 0x6a, 0xdf, 0x79, 0x8b, 0x99, 0x73, 0x68, 0xb5, 0x37, 0xf2, 0x63,
+	0x56, 0x55, 0xc7, 0xb2, 0x20, 0x22, 0x4c, 0x69, 0x21, 0xd1, 0x66, 0xb3, 0x3a, 0xfe, 0x54, 0x10,
+	0xb1, 0x4f, 0x0b, 0x77, 0x96, 0x56, 0x4b, 0x3b, 0x87, 0x4f, 0xc1, 0xfa, 0x94, 0x97, 0xb2, 0x1c,
+	0x91, 0x70, 0x42, 0x63, 0xc2, 0xd1, 0xbb, 0x5a, 0xf0, 0xb3, 0x3a, 0xc1, 0x9f, 0x79, 0x79, 0x58,
+	0x8e, 0xc8, 0x50, 0x31, 0x56, 0xb4, 0x6d, 0x85, 0xb4, 0x4d, 0x15, 0xc1, 0x09, 0x47, 0xcf, 0x31,
+	0x63, 0x24, 0x45, 0xef, 0x35, 0x2b, 0x82, 0x95, 0xee, 0x19, 0xca, 0x15, 0xc1, 0x8a, 0x59, 0xab,
+	0xee, 0x28, 0x82, 0xff, 0x46, 0x33, 0x2a, 0xa7, 0xe8, 0xfd, 0x86, 0x1d, 0xc5, 0x01, 0x55, 0x47,
+	0x71, 0x06, 0xd8, 0x05, 0x67, 0x25, 0xcf, 0x69, 0x84, 0x90, 0x96, 0xfa, 0xb8, 0x4e, 0xea, 0x50,
+	0x39, 0x5b, 0x19, 0x43, 0xaa, 0x4a, 0xaa, 0x27, 0x42, 0x59, 0x12, 0x16, 0x11, 0xcf, 0x09, 0xba,
+	0xd4, 0xac, 0x92, 0xfb, 0x06, 0x3a, 0x50, 0x8c, 0xab, 0x64, 0x3a, 0x67, 0xd3, 0xcd, 0x01, 0xb3,
+	0xa4, 0xc4, 0x09, 0x41, 0x5b, 0x0d, 0x9b, 0x83, 0xf5, 0xaf, 0x9a, 0x83, 0x9d, 0xc3, 0x07, 0x60,
+	0x95, 0xe6, 0xe1, 0x28, 0xe5, 0xd1, 0x0b, 0x74, 0xb9, 0x59, 0x4b, 0xef, 0xe7, 0xbb, 0xca, 0xdd,
+	0xb5, 0x74, 0x6a, 0xa6, 0x2a, 0xdd, 0x88, 0x33, 0x49, 0x98, 0x0c, 0x53, 0x3c, 0x22, 0x29, 0xba,
+	0xd2, 0x2c, 0xdd, 0x9e, 0x81, 0xf6, 0x15, 0xe3, 0xd2, 0x8d, 0xe6, 0x6c, 0xea, 0xd2, 0x89, 0xb0,
+	0x10, 0xea, 0x9e, 0xfe, 0xa0, 0x59, 0x84, 0x3d, 0xe3, 0xee, 0x22, 0xb4, 0xb4, 0x8a, 0x50, 0x9f,
+	0x13, 0xca, 0x24, 0x11, 0xa4, 0x90, 0xe8, 0x6a, 0xb3, 0x08, 0xd5, 0x59, 0xe9, 0x5b, 0xc6, 0x45,
+	0x58, 0xce, 0xd9, 0x54, 0x84, 0x2f, 0xc9, 0x28, 0x57, 0xcf, 0xe3, 0xc3, 0x66, 0x11, 0x3e, 0x35,
+	0xee, 0x2e, 0x42, 0x4b, 0xc3, 0x09, 0x40, 0x3c, 0x27, 0x02, 0x9b, 0x97, 0x66, 0x5a, 0x48, 0x92,
+	0x85, 0x13, 0x22, 0x0a, 0x75, 0x0d, 0x6c, 0x6b, 0xe5, 0xa0, 0x4e, 0xf9, 0x07, 0xc7, 0x1f, 0x68,
+	0x7c, 0x68, 0x68, 0xbb, 0xd1, 0x26, 0x3f, 0x71, 0x55, 0x55, 0xc6, 0x5e, 0x6b, 0xf6, 0xa6, 0xb8,
+	0xd6, 0xac, 0x32, 0xe6, 0x46, 0x3b, 0x76, 0x5f, 0xb4, 0xb3, 0x39, 0x1b, 0x7c, 0x06, 0x36, 0xdc,
+	0x3d, 0x14, 0x26, 0x82, 0x97, 0x39, 0xba, 0xae, 0x95, 0x3f, 0x6f, 0x7a, 0x9b, 0xed, 0x29, 0xc8,
+	0x4a, 0xaf, 0xa7, 0xf3, 0x46, 0xd5, 0x50, 0xa2, 0xb2, 0x90, 0x3c, 0x0b, 0xf1, 0x78, 0x4c, 0x99,
+	0x3a, 0xf7, 0x1f, 0x35, 0x6b, 0x28, 0x3d, 0x8d, 0x75, 0x2d, 0xe5, 0x1a, 0x4a, 0x74, 0xcc, 0x1a,
+	0xbc, 0x78, 0xd3, 0x7d, 0x0e, 0x6e, 0xcf, 0x70, 0x3b, 0xca, 0x69, 0xa1, 0x64, 0xfc, 0xc5, 0x6f,
+	0xde, 0xc0, 0x08, 0x10, 0x51, 0xf8, 0xaf, 0xdc, 0xf0, 0x75, 0xf5, 0x31, 0x6f, 0xfd, 0xb0, 0xff,
+	0x6a, 0xf1, 0xf3, 0xfe, 0xf5, 0x6e, 0x0b, 0xac, 0x55, 0xb3, 0xdd, 0xdf, 0x97, 0xc1, 0xcd, 0x88,
+	0x67, 0x5e, 0xed, 0x7f, 0xc7, 0xee, 0xe6, 0x42, 0x14, 0x4f, 0xd4, 0xe7, 0xe7, 0x93, 0xa5, 0x67,
+	0x0f, 0x2d, 0x9c, 0x70, 0x75, 0xd4, 0x3d, 0x2e, 0x12, 0x3f, 0x21, 0x4c, 0x7f, 0x9c, 0xfa, 0xb3,
+	0x4c, 0xfe, 0xe5, 0x7f, 0xe8, 0xeb, 0x6a, 0xf4, 0xc7, 0xf2, 0xff, 0xf7, 0xba, 0xdd, 0x3f, 0x97,
+	0xaf, 0xed, 0x19, 0xc9, 0x6e, 0x5c, 0x78, 0x66, 0xa8, 0x46, 0xc3, 0x8e, 0x37, 0x70, 0x9e, 0x7f,
+	0x39, 0x9f, 0xa3, 0x6e, 0x5c, 0x1c, 0x55, 0x3e, 0x47, 0xc3, 0xce, 0x51, 0xe5, 0xf3, 0x66, 0xf9,
+	0xa6, 0x59, 0x08, 0x82, 0x6e, 0x5c, 0x04, 0x41, 0xe5, 0x15, 0x04, 0xc3, 0x4e, 0x10, 0x54, 0x7e,
+	0xa3, 0x15, 0x1d, 0x6c, 0xe7, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x32, 0xc4, 0x89, 0xbb,
+	0x0d, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_criterion_simulation.pb.go b/googleapis/ads/googleads/v3/resources/campaign_criterion_simulation.pb.go
new file mode 100644
index 0000000..aaa0029
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_criterion_simulation.pb.go
@@ -0,0 +1,216 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_criterion_simulation.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign criterion simulation. Supported combinations of advertising
+// channel type, criterion ids, simulation type and simulation modification
+// method is detailed below respectively.
+//
+// 1. SEARCH - 30000,30001,30002 - BID_MODIFIER - UNIFORM
+// 2. SHOPPING - 30000,30001,30002 - BID_MODIFIER - UNIFORM
+// 3. DISPLAY - 30001 - BID_MODIFIER - UNIFORM
+type CampaignCriterionSimulation struct {
+	// The resource name of the campaign criterion simulation.
+	// Campaign criterion simulation resource names have the form:
+	//
+	// `customers/{customer_id}/campaignCriterionSimulations/{campaign_id}~{criterion_id}~{type}~{modification_method}~{start_date}~{end_date}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Campaign ID of the simulation.
+	CampaignId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=campaign_id,json=campaignId,proto3" json:"campaign_id,omitempty"`
+	// Criterion ID of the simulation.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The field that the simulation modifies.
+	Type enums.SimulationTypeEnum_SimulationType `protobuf:"varint,4,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.SimulationTypeEnum_SimulationType" json:"type,omitempty"`
+	// How the simulation modifies the field.
+	ModificationMethod enums.SimulationModificationMethodEnum_SimulationModificationMethod `protobuf:"varint,5,opt,name=modification_method,json=modificationMethod,proto3,enum=google.ads.googleads.v3.enums.SimulationModificationMethodEnum_SimulationModificationMethod" json:"modification_method,omitempty"`
+	// First day on which the simulation is based, in YYYY-MM-DD format.
+	StartDate *wrappers.StringValue `protobuf:"bytes,6,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Last day on which the simulation is based, in YYYY-MM-DD format.
+	EndDate *wrappers.StringValue `protobuf:"bytes,7,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// List of simulation points.
+	//
+	// Types that are valid to be assigned to PointList:
+	//	*CampaignCriterionSimulation_BidModifierPointList
+	PointList            isCampaignCriterionSimulation_PointList `protobuf_oneof:"point_list"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CampaignCriterionSimulation) Reset()         { *m = CampaignCriterionSimulation{} }
+func (m *CampaignCriterionSimulation) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionSimulation) ProtoMessage()    {}
+func (*CampaignCriterionSimulation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d4b0653a9a2bb524, []int{0}
+}
+
+func (m *CampaignCriterionSimulation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionSimulation.Unmarshal(m, b)
+}
+func (m *CampaignCriterionSimulation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionSimulation.Marshal(b, m, deterministic)
+}
+func (m *CampaignCriterionSimulation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionSimulation.Merge(m, src)
+}
+func (m *CampaignCriterionSimulation) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionSimulation.Size(m)
+}
+func (m *CampaignCriterionSimulation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionSimulation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionSimulation proto.InternalMessageInfo
+
+func (m *CampaignCriterionSimulation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignCriterionSimulation) GetCampaignId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CampaignId
+	}
+	return nil
+}
+
+func (m *CampaignCriterionSimulation) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *CampaignCriterionSimulation) GetType() enums.SimulationTypeEnum_SimulationType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.SimulationTypeEnum_UNSPECIFIED
+}
+
+func (m *CampaignCriterionSimulation) GetModificationMethod() enums.SimulationModificationMethodEnum_SimulationModificationMethod {
+	if m != nil {
+		return m.ModificationMethod
+	}
+	return enums.SimulationModificationMethodEnum_UNSPECIFIED
+}
+
+func (m *CampaignCriterionSimulation) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *CampaignCriterionSimulation) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+type isCampaignCriterionSimulation_PointList interface {
+	isCampaignCriterionSimulation_PointList()
+}
+
+type CampaignCriterionSimulation_BidModifierPointList struct {
+	BidModifierPointList *common.BidModifierSimulationPointList `protobuf:"bytes,8,opt,name=bid_modifier_point_list,json=bidModifierPointList,proto3,oneof"`
+}
+
+func (*CampaignCriterionSimulation_BidModifierPointList) isCampaignCriterionSimulation_PointList() {}
+
+func (m *CampaignCriterionSimulation) GetPointList() isCampaignCriterionSimulation_PointList {
+	if m != nil {
+		return m.PointList
+	}
+	return nil
+}
+
+func (m *CampaignCriterionSimulation) GetBidModifierPointList() *common.BidModifierSimulationPointList {
+	if x, ok := m.GetPointList().(*CampaignCriterionSimulation_BidModifierPointList); ok {
+		return x.BidModifierPointList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignCriterionSimulation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignCriterionSimulation_BidModifierPointList)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*CampaignCriterionSimulation)(nil), "google.ads.googleads.v3.resources.CampaignCriterionSimulation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_criterion_simulation.proto", fileDescriptor_d4b0653a9a2bb524)
+}
+
+var fileDescriptor_d4b0653a9a2bb524 = []byte{
+	// 605 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x4e, 0x14, 0x31,
+	0x14, 0x76, 0x16, 0xe4, 0xa7, 0xa0, 0x17, 0xa3, 0x89, 0x23, 0x10, 0xb3, 0x68, 0x48, 0xb8, 0xea,
+	0x24, 0x0c, 0xd1, 0x64, 0x30, 0xc4, 0x5d, 0x24, 0x88, 0x11, 0x83, 0x0b, 0xd9, 0x0b, 0xb3, 0xc9,
+	0xa4, 0x3b, 0x2d, 0x63, 0x93, 0x6d, 0x3b, 0x69, 0x3b, 0x10, 0x62, 0x78, 0x00, 0x2f, 0x78, 0x09,
+	0x2f, 0xbd, 0xf5, 0x2d, 0x7c, 0x14, 0x9e, 0xc2, 0x4c, 0xa7, 0xd3, 0x21, 0xc0, 0x2e, 0xdc, 0x9d,
+	0xe9, 0xf9, 0xbe, 0xef, 0xf4, 0x7c, 0xa7, 0x73, 0xc0, 0x6e, 0x26, 0x44, 0x36, 0x22, 0x21, 0xc2,
+	0x2a, 0xac, 0xc2, 0x32, 0x3a, 0x8d, 0x42, 0x49, 0x94, 0x28, 0x64, 0x4a, 0x54, 0x98, 0x22, 0x96,
+	0x23, 0x9a, 0xf1, 0x24, 0x95, 0x54, 0x13, 0x49, 0x05, 0x4f, 0x14, 0x65, 0xc5, 0x08, 0x69, 0x2a,
+	0x38, 0xcc, 0xa5, 0xd0, 0xc2, 0x5f, 0xad, 0xb8, 0x10, 0x61, 0x05, 0x9d, 0x0c, 0x3c, 0x8d, 0xa0,
+	0x93, 0x59, 0x0a, 0xc7, 0x55, 0x4a, 0x05, 0x63, 0x82, 0x87, 0x37, 0x35, 0x97, 0xba, 0xe3, 0x08,
+	0x84, 0x17, 0x4c, 0x5d, 0xc3, 0x27, 0x4c, 0x60, 0x7a, 0x42, 0x53, 0xfb, 0x41, 0xf4, 0x0f, 0x81,
+	0xad, 0x46, 0xf4, 0x60, 0x0d, 0x7d, 0x9e, 0x13, 0x4b, 0x7a, 0x59, 0x93, 0x72, 0xea, 0x6c, 0xb0,
+	0xa9, 0x57, 0x36, 0x65, 0xbe, 0x86, 0xc5, 0x49, 0x78, 0x26, 0x51, 0x9e, 0x13, 0xa9, 0x6c, 0x7e,
+	0xe5, 0x1a, 0x15, 0x71, 0x2e, 0xb4, 0x11, 0xb7, 0xd9, 0xd7, 0x7f, 0x67, 0xc0, 0xf2, 0x8e, 0x75,
+	0x73, 0xa7, 0x36, 0xf3, 0xc8, 0xdd, 0xc1, 0x7f, 0x03, 0x9e, 0xd4, 0xf5, 0x12, 0x8e, 0x18, 0x09,
+	0xbc, 0xb6, 0xb7, 0x3e, 0xdf, 0x5b, 0xac, 0x0f, 0xbf, 0x22, 0x46, 0xfc, 0xf7, 0x60, 0xc1, 0x4d,
+	0x84, 0xe2, 0xa0, 0xd5, 0xf6, 0xd6, 0x17, 0x36, 0x96, 0xad, 0xeb, 0xb0, 0xbe, 0x18, 0xdc, 0xe7,
+	0xfa, 0xed, 0x66, 0x1f, 0x8d, 0x0a, 0xd2, 0x03, 0x35, 0x7e, 0x1f, 0xfb, 0xdb, 0x60, 0xb1, 0x19,
+	0x23, 0xc5, 0xc1, 0xd4, 0xfd, 0xf4, 0x05, 0x47, 0xd8, 0xc7, 0xfe, 0x31, 0x98, 0x2e, 0x9d, 0x0a,
+	0xa6, 0xdb, 0xde, 0xfa, 0xd3, 0x8d, 0x0f, 0x70, 0xdc, 0xdc, 0x8d, 0xbf, 0xb0, 0xe9, 0xed, 0xf8,
+	0x3c, 0x27, 0xbb, 0xbc, 0x60, 0x37, 0x8e, 0x7a, 0x46, 0xcd, 0xbf, 0xf4, 0xc0, 0xb3, 0x3b, 0x86,
+	0x18, 0x3c, 0x36, 0x55, 0x06, 0x0f, 0xae, 0x72, 0x70, 0x4d, 0xe3, 0xc0, 0x48, 0xdc, 0xa8, 0x79,
+	0x1b, 0xd0, 0xf3, 0xd9, 0xad, 0x33, 0x7f, 0x0b, 0x00, 0xa5, 0x91, 0xd4, 0x09, 0x46, 0x9a, 0x04,
+	0x33, 0xc6, 0xa3, 0x95, 0x5b, 0x1e, 0x1d, 0x69, 0x49, 0x79, 0x56, 0x99, 0x34, 0x6f, 0xf0, 0x1f,
+	0x91, 0x26, 0xfe, 0x3b, 0x30, 0x47, 0x38, 0xae, 0xa8, 0xb3, 0x0f, 0xa0, 0xce, 0x12, 0x8e, 0x0d,
+	0xf1, 0x0c, 0xbc, 0x18, 0x52, 0x6c, 0x5f, 0x33, 0x91, 0x49, 0x2e, 0x28, 0xd7, 0xc9, 0x88, 0x2a,
+	0x1d, 0xcc, 0x19, 0x9d, 0xed, 0xb1, 0x46, 0x54, 0xff, 0x10, 0xec, 0x52, 0x7c, 0x60, 0xd9, 0x4d,
+	0xcf, 0x87, 0xa5, 0xcc, 0x17, 0xaa, 0xf4, 0xa7, 0x47, 0xbd, 0xe7, 0xc3, 0x06, 0xe1, 0xce, 0xe3,
+	0x4b, 0xef, 0xaa, 0xf3, 0xcb, 0x03, 0x9b, 0x8d, 0xa4, 0x8d, 0x72, 0xaa, 0x4a, 0xe9, 0x70, 0xd2,
+	0xa3, 0xfd, 0x96, 0x16, 0x4a, 0x0b, 0x46, 0xa4, 0x0a, 0x7f, 0xd6, 0xe1, 0x85, 0x5b, 0x1a, 0x77,
+	0x30, 0x4a, 0xdc, 0xa4, 0x95, 0x72, 0xd1, 0x5d, 0x04, 0xa0, 0xe9, 0xbd, 0x7b, 0xd9, 0x02, 0x6b,
+	0xa9, 0x60, 0xf0, 0xde, 0x15, 0xd3, 0x6d, 0x4f, 0xb8, 0xe7, 0x61, 0x69, 0xfd, 0xa1, 0xf7, 0xfd,
+	0xb3, 0x95, 0xc9, 0xc4, 0x08, 0xf1, 0x0c, 0x0a, 0x99, 0x85, 0x19, 0xe1, 0x66, 0x30, 0x61, 0xd3,
+	0xf5, 0x84, 0x7d, 0xb8, 0xe5, 0xa2, 0xdf, 0xad, 0xa9, 0xbd, 0x4e, 0xe7, 0x4f, 0x6b, 0x75, 0xaf,
+	0x92, 0xec, 0x60, 0x05, 0xab, 0xb0, 0x8c, 0xfa, 0x11, 0xec, 0xd5, 0xc8, 0x7f, 0x35, 0x66, 0xd0,
+	0xc1, 0x6a, 0xe0, 0x30, 0x83, 0x7e, 0x34, 0x70, 0x98, 0xab, 0xd6, 0x5a, 0x95, 0x88, 0xe3, 0x0e,
+	0x56, 0x71, 0xec, 0x50, 0x71, 0xdc, 0x8f, 0xe2, 0xd8, 0xe1, 0x86, 0x33, 0xe6, 0xb2, 0xd1, 0xff,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x36, 0xe3, 0x8f, 0xbb, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_draft.pb.go b/googleapis/ads/googleads/v3/resources/campaign_draft.pb.go
new file mode 100644
index 0000000..f88ad49
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_draft.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_draft.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign draft.
+type CampaignDraft struct {
+	// The resource name of the campaign draft.
+	// Campaign draft resource names have the form:
+	//
+	// `customers/{customer_id}/campaignDrafts/{base_campaign_id}~{draft_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the draft.
+	//
+	// This field is read-only.
+	DraftId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=draft_id,json=draftId,proto3" json:"draft_id,omitempty"`
+	// The base campaign to which the draft belongs.
+	BaseCampaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=base_campaign,json=baseCampaign,proto3" json:"base_campaign,omitempty"`
+	// The name of the campaign draft.
+	//
+	// This field is required and should not be empty when creating new
+	// campaign drafts.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// Resource name of the Campaign that results from overlaying the draft
+	// changes onto the base campaign.
+	//
+	// This field is read-only.
+	DraftCampaign *wrappers.StringValue `protobuf:"bytes,5,opt,name=draft_campaign,json=draftCampaign,proto3" json:"draft_campaign,omitempty"`
+	// The status of the campaign draft. This field is read-only.
+	//
+	// When a new campaign draft is added, the status defaults to PROPOSED.
+	Status enums.CampaignDraftStatusEnum_CampaignDraftStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CampaignDraftStatusEnum_CampaignDraftStatus" json:"status,omitempty"`
+	// Whether there is an experiment based on this draft currently serving.
+	HasExperimentRunning *wrappers.BoolValue `protobuf:"bytes,7,opt,name=has_experiment_running,json=hasExperimentRunning,proto3" json:"has_experiment_running,omitempty"`
+	// The resource name of the long-running operation that can be used to poll
+	// for completion of draft promotion. This is only set if the draft promotion
+	// is in progress or finished.
+	LongRunningOperation *wrappers.StringValue `protobuf:"bytes,8,opt,name=long_running_operation,json=longRunningOperation,proto3" json:"long_running_operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CampaignDraft) Reset()         { *m = CampaignDraft{} }
+func (m *CampaignDraft) String() string { return proto.CompactTextString(m) }
+func (*CampaignDraft) ProtoMessage()    {}
+func (*CampaignDraft) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8ba592967968d7ea, []int{0}
+}
+
+func (m *CampaignDraft) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignDraft.Unmarshal(m, b)
+}
+func (m *CampaignDraft) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignDraft.Marshal(b, m, deterministic)
+}
+func (m *CampaignDraft) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignDraft.Merge(m, src)
+}
+func (m *CampaignDraft) XXX_Size() int {
+	return xxx_messageInfo_CampaignDraft.Size(m)
+}
+func (m *CampaignDraft) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignDraft.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignDraft proto.InternalMessageInfo
+
+func (m *CampaignDraft) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignDraft) GetDraftId() *wrappers.Int64Value {
+	if m != nil {
+		return m.DraftId
+	}
+	return nil
+}
+
+func (m *CampaignDraft) GetBaseCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.BaseCampaign
+	}
+	return nil
+}
+
+func (m *CampaignDraft) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CampaignDraft) GetDraftCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.DraftCampaign
+	}
+	return nil
+}
+
+func (m *CampaignDraft) GetStatus() enums.CampaignDraftStatusEnum_CampaignDraftStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignDraftStatusEnum_UNSPECIFIED
+}
+
+func (m *CampaignDraft) GetHasExperimentRunning() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasExperimentRunning
+	}
+	return nil
+}
+
+func (m *CampaignDraft) GetLongRunningOperation() *wrappers.StringValue {
+	if m != nil {
+		return m.LongRunningOperation
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CampaignDraft)(nil), "google.ads.googleads.v3.resources.CampaignDraft")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_draft.proto", fileDescriptor_8ba592967968d7ea)
+}
+
+var fileDescriptor_8ba592967968d7ea = []byte{
+	// 534 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x95, 0x6e, 0xeb, 0x86, 0x59, 0x77, 0x11, 0x4d, 0x53, 0x28, 0x13, 0xea, 0x40, 0x43,
+	0xbd, 0x72, 0xd0, 0x32, 0x55, 0x22, 0x5c, 0xa5, 0x63, 0x9a, 0xb6, 0x0b, 0xa8, 0x32, 0xa9, 0x17,
+	0xa8, 0x22, 0x72, 0x13, 0xcf, 0x8b, 0x94, 0xd8, 0x91, 0xed, 0x0c, 0x24, 0xb4, 0xa7, 0xe0, 0x0d,
+	0xb8, 0xe4, 0x51, 0x78, 0x94, 0xbd, 0x04, 0x28, 0x76, 0xec, 0x51, 0x46, 0xa1, 0x77, 0x27, 0x39,
+	0xff, 0x77, 0xce, 0x7f, 0x7c, 0x6c, 0x30, 0x22, 0x8c, 0x91, 0x02, 0xfb, 0x28, 0x13, 0xbe, 0x0e,
+	0x9b, 0xe8, 0x26, 0xf0, 0x39, 0x16, 0xac, 0xe6, 0x29, 0x16, 0x7e, 0x8a, 0xca, 0x0a, 0xe5, 0x84,
+	0x26, 0x19, 0x47, 0x57, 0x12, 0x56, 0x9c, 0x49, 0xe6, 0x1e, 0x68, 0x31, 0x44, 0x99, 0x80, 0x96,
+	0x83, 0x37, 0x01, 0xb4, 0x5c, 0xff, 0xf5, 0xb2, 0xd2, 0x98, 0xd6, 0xe5, 0x9f, 0x65, 0x13, 0x21,
+	0x91, 0xac, 0x85, 0xae, 0xde, 0x7f, 0x62, 0xd0, 0x2a, 0xb7, 0x46, 0xda, 0xd4, 0xb3, 0x36, 0xa5,
+	0xbe, 0xe6, 0xf5, 0x95, 0xff, 0x89, 0xa3, 0xaa, 0xc2, 0xdc, 0xa0, 0xfb, 0xbf, 0xa1, 0x88, 0x52,
+	0x26, 0x91, 0xcc, 0x19, 0x6d, 0xb3, 0xcf, 0xbf, 0x6e, 0x80, 0xde, 0x49, 0xdb, 0xf8, 0x6d, 0xd3,
+	0xd7, 0x7d, 0x01, 0x7a, 0xa6, 0x43, 0x42, 0x51, 0x89, 0x3d, 0x67, 0xe0, 0x0c, 0x1f, 0xc5, 0xdb,
+	0xe6, 0xe7, 0x3b, 0x54, 0x62, 0x77, 0x04, 0xb6, 0xb4, 0xcb, 0x3c, 0xf3, 0x3a, 0x03, 0x67, 0xf8,
+	0xf8, 0xe8, 0x69, 0x3b, 0x35, 0x34, 0x3e, 0xe0, 0x39, 0x95, 0xa3, 0xe3, 0x29, 0x2a, 0x6a, 0x1c,
+	0x6f, 0x2a, 0xf1, 0x79, 0xe6, 0x46, 0xa0, 0x37, 0x47, 0x02, 0x27, 0x66, 0x56, 0x6f, 0x4d, 0xc1,
+	0xfb, 0x0f, 0xe0, 0x4b, 0xc9, 0x73, 0x4a, 0x34, 0xbd, 0xdd, 0x20, 0xc6, 0xa4, 0xfb, 0x0a, 0xac,
+	0x2b, 0x5b, 0xeb, 0x2b, 0x90, 0x4a, 0xe9, 0x9e, 0x80, 0x1d, 0x6d, 0xd6, 0x76, 0xdd, 0x58, 0x81,
+	0xed, 0x29, 0xc6, 0xb6, 0x9d, 0x83, 0xae, 0xde, 0x88, 0xd7, 0x1d, 0x38, 0xc3, 0x9d, 0xa3, 0x0b,
+	0xb8, 0x6c, 0xe1, 0x6a, 0x9b, 0x70, 0xe1, 0x50, 0x2f, 0x15, 0x79, 0x4a, 0xeb, 0xf2, 0x6f, 0xff,
+	0xe3, 0xb6, 0xb2, 0x3b, 0x01, 0x7b, 0xd7, 0x48, 0x24, 0xf8, 0x73, 0x85, 0x79, 0x5e, 0x62, 0x2a,
+	0x13, 0x5e, 0x53, 0x9a, 0x53, 0xe2, 0x6d, 0x2a, 0xc3, 0xfd, 0x07, 0x86, 0xc7, 0x8c, 0x15, 0xda,
+	0xee, 0xee, 0x35, 0x12, 0xa7, 0x16, 0x8c, 0x35, 0xe7, 0xc6, 0x60, 0xaf, 0x60, 0x94, 0x98, 0x3a,
+	0x09, 0xab, 0x30, 0x57, 0xfb, 0xf7, 0xb6, 0x56, 0x38, 0x82, 0xdd, 0x86, 0x6d, 0x4b, 0xbd, 0x37,
+	0x64, 0x88, 0xee, 0xa2, 0x8f, 0xe0, 0xe5, 0xfd, 0xc8, 0x6d, 0x54, 0xe5, 0x02, 0xa6, 0xac, 0xf4,
+	0x17, 0x6f, 0xd3, 0x71, 0x5a, 0x0b, 0xc9, 0x4a, 0xcc, 0x85, 0xff, 0xc5, 0x84, 0xb7, 0xf6, 0xaa,
+	0x2b, 0x4d, 0x93, 0x59, 0xb8, 0xfa, 0xb7, 0xe3, 0x9f, 0x0e, 0x38, 0x4c, 0x59, 0x09, 0xff, 0xfb,
+	0xa6, 0xc6, 0xee, 0x42, 0xbb, 0x49, 0x33, 0xc5, 0xc4, 0xf9, 0x70, 0xd1, 0x82, 0x84, 0x15, 0x88,
+	0x12, 0xc8, 0x38, 0xf1, 0x09, 0xa6, 0x6a, 0x46, 0xff, 0xde, 0xee, 0x3f, 0xde, 0xf8, 0x1b, 0x1b,
+	0x7d, 0xeb, 0xac, 0x9d, 0x45, 0xd1, 0xf7, 0xce, 0xc1, 0x99, 0x2e, 0x19, 0x65, 0x02, 0xea, 0xb0,
+	0x89, 0xa6, 0x01, 0x8c, 0x8d, 0xf2, 0x87, 0xd1, 0xcc, 0xa2, 0x4c, 0xcc, 0xac, 0x66, 0x36, 0x0d,
+	0x66, 0x56, 0x73, 0xd7, 0x39, 0xd4, 0x89, 0x30, 0x8c, 0x32, 0x11, 0x86, 0x56, 0x15, 0x86, 0xd3,
+	0x20, 0x0c, 0xad, 0x6e, 0xde, 0x55, 0x66, 0x83, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xbb,
+	0x5e, 0x61, 0x8f, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_experiment.pb.go b/googleapis/ads/googleads/v3/resources/campaign_experiment.pb.go
new file mode 100644
index 0000000..f73a51f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_experiment.pb.go
@@ -0,0 +1,245 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_experiment.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An A/B experiment that compares the performance of the base campaign
+// (the control) and a variation of that campaign (the experiment).
+type CampaignExperiment struct {
+	// The resource name of the campaign experiment.
+	// Campaign experiment resource names have the form:
+	//
+	// `customers/{customer_id}/campaignExperiments/{campaign_experiment_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign experiment.
+	//
+	// This field is read-only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The campaign draft with staged changes to the base campaign.
+	CampaignDraft *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign_draft,json=campaignDraft,proto3" json:"campaign_draft,omitempty"`
+	// The name of the campaign experiment.
+	//
+	// This field is required when creating new campaign experiments
+	// and must not conflict with the name of another non-removed
+	// campaign experiment or campaign.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The description of the experiment.
+	Description *wrappers.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	// Share of traffic directed to experiment as a percent (must be between 1 and
+	// 99 inclusive. Base campaign receives the remainder of the traffic
+	// (100 - traffic_split_percent). Required for create.
+	TrafficSplitPercent *wrappers.Int64Value `protobuf:"bytes,6,opt,name=traffic_split_percent,json=trafficSplitPercent,proto3" json:"traffic_split_percent,omitempty"`
+	// Determines the behavior of the traffic split.
+	TrafficSplitType enums.CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType `protobuf:"varint,7,opt,name=traffic_split_type,json=trafficSplitType,proto3,enum=google.ads.googleads.v3.enums.CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType" json:"traffic_split_type,omitempty"`
+	// The experiment campaign, as opposed to the base campaign.
+	ExperimentCampaign *wrappers.StringValue `protobuf:"bytes,8,opt,name=experiment_campaign,json=experimentCampaign,proto3" json:"experiment_campaign,omitempty"`
+	// The status of the campaign experiment. This field is read-only.
+	Status enums.CampaignExperimentStatusEnum_CampaignExperimentStatus `protobuf:"varint,9,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CampaignExperimentStatusEnum_CampaignExperimentStatus" json:"status,omitempty"`
+	// The resource name of the long-running operation that can be used to poll
+	// for completion of experiment create or promote. The most recent long
+	// running operation is returned.
+	LongRunningOperation *wrappers.StringValue `protobuf:"bytes,10,opt,name=long_running_operation,json=longRunningOperation,proto3" json:"long_running_operation,omitempty"`
+	// Date when the campaign experiment starts. By default, the experiment starts
+	// now or on the campaign's start date, whichever is later. If this field is
+	// set, then the experiment starts at the beginning of the specified date in
+	// the customer's time zone. Cannot be changed once the experiment starts.
+	//
+	// Format: YYYY-MM-DD
+	// Example: 2019-03-14
+	StartDate *wrappers.StringValue `protobuf:"bytes,11,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Date when the campaign experiment ends. By default, the experiment ends on
+	// the campaign's end date. If this field is set, then the experiment ends at
+	// the end of the specified date in the customer's time zone.
+	//
+	// Format: YYYY-MM-DD
+	// Example: 2019-04-18
+	EndDate              *wrappers.StringValue `protobuf:"bytes,12,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CampaignExperiment) Reset()         { *m = CampaignExperiment{} }
+func (m *CampaignExperiment) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperiment) ProtoMessage()    {}
+func (*CampaignExperiment) Descriptor() ([]byte, []int) {
+	return fileDescriptor_241b735b09714cee, []int{0}
+}
+
+func (m *CampaignExperiment) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperiment.Unmarshal(m, b)
+}
+func (m *CampaignExperiment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperiment.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperiment) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperiment.Merge(m, src)
+}
+func (m *CampaignExperiment) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperiment.Size(m)
+}
+func (m *CampaignExperiment) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperiment.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperiment proto.InternalMessageInfo
+
+func (m *CampaignExperiment) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignExperiment) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetCampaignDraft() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignDraft
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetTrafficSplitPercent() *wrappers.Int64Value {
+	if m != nil {
+		return m.TrafficSplitPercent
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetTrafficSplitType() enums.CampaignExperimentTrafficSplitTypeEnum_CampaignExperimentTrafficSplitType {
+	if m != nil {
+		return m.TrafficSplitType
+	}
+	return enums.CampaignExperimentTrafficSplitTypeEnum_UNSPECIFIED
+}
+
+func (m *CampaignExperiment) GetExperimentCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.ExperimentCampaign
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetStatus() enums.CampaignExperimentStatusEnum_CampaignExperimentStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignExperimentStatusEnum_UNSPECIFIED
+}
+
+func (m *CampaignExperiment) GetLongRunningOperation() *wrappers.StringValue {
+	if m != nil {
+		return m.LongRunningOperation
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *CampaignExperiment) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CampaignExperiment)(nil), "google.ads.googleads.v3.resources.CampaignExperiment")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_experiment.proto", fileDescriptor_241b735b09714cee)
+}
+
+var fileDescriptor_241b735b09714cee = []byte{
+	// 630 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6a, 0x14, 0x31,
+	0x14, 0xc7, 0xd9, 0x69, 0xed, 0x47, 0xfa, 0x81, 0xa4, 0x7e, 0x8c, 0xb5, 0x48, 0xab, 0x14, 0x0a,
+	0x85, 0x8c, 0x74, 0x45, 0x61, 0x0a, 0x85, 0xed, 0x07, 0x45, 0x41, 0x5b, 0xa6, 0x65, 0x2f, 0x64,
+	0x61, 0x48, 0x27, 0xd9, 0x31, 0xb0, 0x93, 0x84, 0x24, 0x53, 0x2d, 0x52, 0xf0, 0xc2, 0x67, 0xf0,
+	0x01, 0xbc, 0xf4, 0x51, 0x7c, 0x94, 0x3e, 0x85, 0xcc, 0x64, 0x32, 0xbb, 0xba, 0xad, 0x9d, 0xde,
+	0x9d, 0xdd, 0xf3, 0xff, 0x9d, 0x73, 0xfe, 0x49, 0xe6, 0x80, 0xed, 0x54, 0x88, 0x74, 0x40, 0x03,
+	0x4c, 0x74, 0x60, 0xc3, 0x22, 0x3a, 0x6f, 0x07, 0x8a, 0x6a, 0x91, 0xab, 0x84, 0xea, 0x20, 0xc1,
+	0x99, 0xc4, 0x2c, 0xe5, 0x31, 0xfd, 0x22, 0xa9, 0x62, 0x19, 0xe5, 0x06, 0x49, 0x25, 0x8c, 0x80,
+	0x6b, 0x96, 0x40, 0x98, 0x68, 0x54, 0xc3, 0xe8, 0xbc, 0x8d, 0x6a, 0x78, 0x79, 0xe7, 0xa6, 0xfa,
+	0x94, 0xe7, 0xd9, 0xb5, 0xb5, 0x63, 0x6d, 0xb0, 0xc9, 0xb5, 0x6d, 0xb1, 0xfc, 0xee, 0xee, 0xbc,
+	0x51, 0xb8, 0xdf, 0x67, 0x49, 0xac, 0xe5, 0x80, 0x99, 0xd8, 0x5c, 0x48, 0x5a, 0xd5, 0x7a, 0xe2,
+	0x6a, 0x49, 0x56, 0xdb, 0xab, 0x52, 0xcf, 0xaa, 0x54, 0xf9, 0xeb, 0x2c, 0xef, 0x07, 0x9f, 0x15,
+	0x96, 0x92, 0x2a, 0x37, 0xc6, 0xca, 0x08, 0x8a, 0x39, 0x17, 0x06, 0x1b, 0x26, 0x78, 0x95, 0x7d,
+	0xfe, 0x6d, 0x06, 0xc0, 0xbd, 0x6a, 0x92, 0x83, 0x7a, 0x10, 0xf8, 0x02, 0x2c, 0xb8, 0x36, 0x31,
+	0xc7, 0x19, 0xf5, 0x5b, 0xab, 0xad, 0x8d, 0xd9, 0x68, 0xde, 0xfd, 0xf9, 0x01, 0x67, 0x14, 0x6e,
+	0x02, 0x8f, 0x11, 0xdf, 0x5b, 0x6d, 0x6d, 0xcc, 0x6d, 0x3d, 0xad, 0x4e, 0x11, 0xb9, 0x31, 0xd0,
+	0x5b, 0x6e, 0x5e, 0xbf, 0xea, 0xe2, 0x41, 0x4e, 0x23, 0x8f, 0x11, 0xb8, 0x07, 0x16, 0x6b, 0xc7,
+	0x44, 0xe1, 0xbe, 0xf1, 0x27, 0x4a, 0x70, 0x65, 0x0c, 0x3c, 0x31, 0x8a, 0xf1, 0xd4, 0x92, 0x0b,
+	0x8e, 0xd9, 0x2f, 0x10, 0xf8, 0x12, 0x4c, 0x96, 0xd3, 0x4c, 0x36, 0x40, 0x4b, 0x25, 0xdc, 0x01,
+	0x73, 0x84, 0xea, 0x44, 0x31, 0x59, 0xb8, 0xf6, 0xef, 0x35, 0x00, 0x47, 0x01, 0x78, 0x04, 0x1e,
+	0xfe, 0x7d, 0x29, 0x92, 0xaa, 0x84, 0x72, 0xe3, 0x4f, 0xdd, 0x6e, 0x7b, 0xa9, 0x22, 0x4f, 0x0a,
+	0xf0, 0xd8, 0x72, 0xf0, 0x47, 0x0b, 0xc0, 0xf1, 0x6b, 0xf6, 0xa7, 0x57, 0x5b, 0x1b, 0x8b, 0x5b,
+	0x9f, 0xd0, 0x4d, 0xcf, 0xb2, 0x7c, 0x33, 0x68, 0xfc, 0xa6, 0x4e, 0x47, 0x5a, 0x9c, 0x5e, 0x48,
+	0x7a, 0xc0, 0xf3, 0xac, 0x81, 0x2c, 0xba, 0x6f, 0xfe, 0xf9, 0x07, 0xbe, 0x07, 0x4b, 0x23, 0x2f,
+	0xd1, 0x9d, 0xbb, 0x3f, 0xd3, 0xe0, 0xc4, 0xe0, 0x10, 0x74, 0xad, 0xe1, 0x00, 0x4c, 0xd9, 0xaf,
+	0xc1, 0x9f, 0x2d, 0xad, 0x9d, 0xde, 0xd9, 0xda, 0x49, 0x89, 0xdf, 0x60, 0xc8, 0x26, 0xa3, 0xaa,
+	0x07, 0x8c, 0xc0, 0xa3, 0x81, 0xe0, 0x69, 0xac, 0x72, 0xce, 0x19, 0x4f, 0x63, 0x21, 0xa9, 0x2a,
+	0xdf, 0xb9, 0x0f, 0x1a, 0xcc, 0xff, 0xa0, 0x60, 0x23, 0x8b, 0x1e, 0x39, 0x12, 0x6e, 0x03, 0xa0,
+	0x0d, 0x56, 0x26, 0x26, 0xd8, 0x50, 0x7f, 0xae, 0x41, 0x9d, 0xd9, 0x52, 0xbf, 0x8f, 0x0d, 0x85,
+	0x6f, 0xc0, 0x0c, 0xe5, 0xc4, 0xa2, 0xf3, 0x0d, 0xd0, 0x69, 0xca, 0x49, 0x01, 0x86, 0xf2, 0xaa,
+	0x93, 0x81, 0xcd, 0xe1, 0x01, 0x55, 0x91, 0x64, 0x1a, 0x25, 0x22, 0x0b, 0xae, 0xf9, 0x56, 0x77,
+	0x92, 0x5c, 0x1b, 0x91, 0x51, 0xa5, 0x83, 0xaf, 0x2e, 0xbc, 0xac, 0xd7, 0xcb, 0x50, 0x58, 0xa4,
+	0xc7, 0x77, 0xce, 0xe5, 0xee, 0x77, 0x0f, 0xac, 0x27, 0x22, 0x43, 0xb7, 0x6e, 0xc4, 0xdd, 0xc7,
+	0xe3, 0xdd, 0x8f, 0x0b, 0x33, 0xc7, 0xad, 0x8f, 0xd5, 0xb2, 0x43, 0xa9, 0x18, 0x60, 0x9e, 0x22,
+	0xa1, 0xd2, 0x20, 0xa5, 0xbc, 0xb4, 0x1a, 0x0c, 0x2d, 0xfc, 0x67, 0x57, 0x6f, 0xd7, 0xd1, 0x4f,
+	0x6f, 0xe2, 0xb0, 0xd3, 0xf9, 0xe5, 0xad, 0x1d, 0xda, 0x92, 0x1d, 0xa2, 0x91, 0x0d, 0x8b, 0xa8,
+	0xdb, 0x46, 0x91, 0x53, 0xfe, 0x76, 0x9a, 0x5e, 0x87, 0xe8, 0x5e, 0xad, 0xe9, 0x75, 0xdb, 0xbd,
+	0x5a, 0x73, 0xe5, 0xad, 0xdb, 0x44, 0x18, 0x76, 0x88, 0x0e, 0xc3, 0x5a, 0x15, 0x86, 0xdd, 0x76,
+	0x18, 0xd6, 0xba, 0xb3, 0xa9, 0x72, 0xd8, 0xf6, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xe1,
+	0x7f, 0x6c, 0x57, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_extension_setting.pb.go b/googleapis/ads/googleads/v3/resources/campaign_extension_setting.pb.go
new file mode 100644
index 0000000..9c1cdb5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_extension_setting.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_extension_setting.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign extension setting.
+type CampaignExtensionSetting struct {
+	// The resource name of the campaign extension setting.
+	// CampaignExtensionSetting resource names have the form:
+	//
+	// `customers/{customer_id}/campaignExtensionSettings/{campaign_id}~{extension_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The extension type of the customer extension setting.
+	ExtensionType enums.ExtensionTypeEnum_ExtensionType `protobuf:"varint,2,opt,name=extension_type,json=extensionType,proto3,enum=google.ads.googleads.v3.enums.ExtensionTypeEnum_ExtensionType" json:"extension_type,omitempty"`
+	// The resource name of the campaign. The linked extension feed items will
+	// serve under this campaign.
+	// Campaign resource names have the form:
+	//
+	// `customers/{customer_id}/campaigns/{campaign_id}`
+	Campaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The resource names of the extension feed items to serve under the campaign.
+	// ExtensionFeedItem resource names have the form:
+	//
+	// `customers/{customer_id}/extensionFeedItems/{feed_item_id}`
+	ExtensionFeedItems []*wrappers.StringValue `protobuf:"bytes,4,rep,name=extension_feed_items,json=extensionFeedItems,proto3" json:"extension_feed_items,omitempty"`
+	// The device for which the extensions will serve. Optional.
+	Device               enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice `protobuf:"varint,5,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice" json:"device,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *CampaignExtensionSetting) Reset()         { *m = CampaignExtensionSetting{} }
+func (m *CampaignExtensionSetting) String() string { return proto.CompactTextString(m) }
+func (*CampaignExtensionSetting) ProtoMessage()    {}
+func (*CampaignExtensionSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_61cdf4a6d2d3087e, []int{0}
+}
+
+func (m *CampaignExtensionSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExtensionSetting.Unmarshal(m, b)
+}
+func (m *CampaignExtensionSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExtensionSetting.Marshal(b, m, deterministic)
+}
+func (m *CampaignExtensionSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExtensionSetting.Merge(m, src)
+}
+func (m *CampaignExtensionSetting) XXX_Size() int {
+	return xxx_messageInfo_CampaignExtensionSetting.Size(m)
+}
+func (m *CampaignExtensionSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExtensionSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExtensionSetting proto.InternalMessageInfo
+
+func (m *CampaignExtensionSetting) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignExtensionSetting) GetExtensionType() enums.ExtensionTypeEnum_ExtensionType {
+	if m != nil {
+		return m.ExtensionType
+	}
+	return enums.ExtensionTypeEnum_UNSPECIFIED
+}
+
+func (m *CampaignExtensionSetting) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignExtensionSetting) GetExtensionFeedItems() []*wrappers.StringValue {
+	if m != nil {
+		return m.ExtensionFeedItems
+	}
+	return nil
+}
+
+func (m *CampaignExtensionSetting) GetDevice() enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice {
+	if m != nil {
+		return m.Device
+	}
+	return enums.ExtensionSettingDeviceEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignExtensionSetting)(nil), "google.ads.googleads.v3.resources.CampaignExtensionSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_extension_setting.proto", fileDescriptor_61cdf4a6d2d3087e)
+}
+
+var fileDescriptor_61cdf4a6d2d3087e = []byte{
+	// 493 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0x26, 0xd9, 0x5a, 0x34, 0xda, 0x1e, 0x82, 0x87, 0x58, 0xaa, 0x6c, 0x95, 0xc2, 0x9e, 0x66,
+	0x70, 0x73, 0x91, 0x28, 0x42, 0x56, 0x6b, 0x51, 0xa1, 0x2c, 0xa9, 0xec, 0x41, 0x16, 0xc2, 0x34,
+	0x79, 0x8d, 0x03, 0x3b, 0x33, 0x21, 0x33, 0x59, 0x2d, 0x52, 0xf0, 0xe0, 0xc9, 0x7f, 0xa1, 0x47,
+	0x7f, 0x8a, 0x3f, 0xa5, 0xbf, 0x42, 0x92, 0xcc, 0xcc, 0x76, 0x95, 0xb4, 0xbd, 0x7d, 0x99, 0xf7,
+	0x7d, 0xdf, 0x7b, 0xdf, 0x9b, 0x8c, 0x37, 0x29, 0x84, 0x28, 0x16, 0x80, 0x49, 0x2e, 0x71, 0x07,
+	0x1b, 0xb4, 0x0c, 0x71, 0x05, 0x52, 0xd4, 0x55, 0x06, 0x12, 0x67, 0x84, 0x95, 0x84, 0x16, 0x3c,
+	0x85, 0x2f, 0x0a, 0xb8, 0xa4, 0x82, 0xa7, 0x12, 0x94, 0xa2, 0xbc, 0x40, 0x65, 0x25, 0x94, 0xf0,
+	0xf7, 0x3a, 0x21, 0x22, 0xb9, 0x44, 0xd6, 0x03, 0x2d, 0x43, 0x64, 0x3d, 0x76, 0x5e, 0xf4, 0xb5,
+	0x01, 0x5e, 0x33, 0x89, 0xff, 0x73, 0x4e, 0x73, 0x58, 0xd2, 0x0c, 0xba, 0x06, 0x3b, 0xe3, 0x9b,
+	0xaa, 0xd5, 0x59, 0x69, 0x34, 0x0f, 0x8c, 0xa6, 0xa4, 0x36, 0x8b, 0x2e, 0x3d, 0xd2, 0xa5, 0xf6,
+	0xeb, 0xa4, 0x3e, 0xc5, 0x9f, 0x2b, 0x52, 0x96, 0x50, 0x49, 0x5d, 0xdf, 0xbd, 0x24, 0x25, 0x9c,
+	0x0b, 0x45, 0x14, 0x15, 0x5c, 0x57, 0x1f, 0xff, 0xdc, 0xf0, 0x82, 0x57, 0x7a, 0x25, 0x07, 0xa6,
+	0xf3, 0x71, 0x37, 0xb6, 0xff, 0xc4, 0xdb, 0x32, 0xcd, 0x52, 0x4e, 0x18, 0x04, 0xce, 0xd0, 0x19,
+	0xdd, 0x49, 0xee, 0x99, 0xc3, 0x23, 0xc2, 0xc0, 0x07, 0x6f, 0x7b, 0x7d, 0xe4, 0xc0, 0x1d, 0x3a,
+	0xa3, 0xed, 0xf1, 0x4b, 0xd4, 0xb7, 0xc8, 0x36, 0x27, 0xb2, 0xdd, 0x3e, 0x9c, 0x95, 0x70, 0xc0,
+	0x6b, 0xb6, 0x7e, 0x92, 0x6c, 0xc1, 0xe5, 0x4f, 0xff, 0x99, 0x77, 0xdb, 0x5c, 0x5d, 0x30, 0x18,
+	0x3a, 0xa3, 0xbb, 0xe3, 0x5d, 0xd3, 0xc0, 0x24, 0x47, 0xc7, 0xaa, 0xa2, 0xbc, 0x98, 0x91, 0x45,
+	0x0d, 0x89, 0x65, 0xfb, 0x47, 0xde, 0xfd, 0xd5, 0x80, 0xa7, 0x00, 0x79, 0x4a, 0x15, 0x30, 0x19,
+	0x6c, 0x0c, 0x07, 0xd7, 0xba, 0xf8, 0x56, 0xf9, 0x06, 0x20, 0x7f, 0xdb, 0xe8, 0xfc, 0x4f, 0xde,
+	0x66, 0x77, 0x9f, 0xc1, 0xad, 0x36, 0xe8, 0xf4, 0xa6, 0x41, 0xf5, 0x5a, 0x5f, 0xb7, 0xe2, 0xf5,
+	0xc4, 0x6b, 0xa5, 0x44, 0xfb, 0x47, 0xdf, 0x9d, 0x8b, 0xf8, 0x9b, 0xe3, 0x3d, 0x5d, 0x99, 0x6a,
+	0x54, 0x52, 0x89, 0x32, 0xc1, 0x70, 0xef, 0xcd, 0xbd, 0xcf, 0x6a, 0xa9, 0x04, 0x83, 0x4a, 0xe2,
+	0xaf, 0x06, 0x9e, 0xdb, 0x7f, 0xff, 0x5f, 0x7a, 0x43, 0xea, 0x7d, 0x16, 0xe7, 0x93, 0x1f, 0xae,
+	0xb7, 0x9f, 0x09, 0x86, 0xae, 0x7d, 0x18, 0x93, 0x87, 0x7d, 0x03, 0x4d, 0x9b, 0xe5, 0x4e, 0x9d,
+	0x8f, 0xef, 0xb4, 0x47, 0x21, 0x16, 0x84, 0x17, 0x48, 0x54, 0x05, 0x2e, 0x80, 0xb7, 0xab, 0xc7,
+	0xab, 0x6c, 0x57, 0xbc, 0xdf, 0xe7, 0x16, 0xfd, 0x72, 0x07, 0x87, 0x71, 0xfc, 0xdb, 0xdd, 0x3b,
+	0xec, 0x2c, 0xe3, 0x5c, 0xa2, 0x0e, 0x36, 0x68, 0x16, 0xa2, 0xc4, 0x30, 0xff, 0x18, 0xce, 0x3c,
+	0xce, 0xe5, 0xdc, 0x72, 0xe6, 0xb3, 0x70, 0x6e, 0x39, 0x17, 0xee, 0x7e, 0x57, 0x88, 0xa2, 0x38,
+	0x97, 0x51, 0x64, 0x59, 0x51, 0x34, 0x0b, 0xa3, 0xc8, 0xf2, 0x4e, 0x36, 0xdb, 0x61, 0xc3, 0xbf,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x13, 0x85, 0xc3, 0xef, 0x6b, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_feed.pb.go b/googleapis/ads/googleads/v3/resources/campaign_feed.pb.go
new file mode 100644
index 0000000..8ecb5f3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_feed.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_feed.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A campaign feed.
+type CampaignFeed struct {
+	// The resource name of the campaign feed.
+	// Campaign feed resource names have the form:
+	//
+	// `customers/{customer_id}/campaignFeeds/{campaign_id}~{feed_id}
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed to which the CampaignFeed belongs.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The campaign to which the CampaignFeed belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// campaign. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,4,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the CampaignFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,5,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the campaign feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CampaignFeed) Reset()         { *m = CampaignFeed{} }
+func (m *CampaignFeed) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeed) ProtoMessage()    {}
+func (*CampaignFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6f9f25847e06da48, []int{0}
+}
+
+func (m *CampaignFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeed.Unmarshal(m, b)
+}
+func (m *CampaignFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeed.Marshal(b, m, deterministic)
+}
+func (m *CampaignFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeed.Merge(m, src)
+}
+func (m *CampaignFeed) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeed.Size(m)
+}
+func (m *CampaignFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeed proto.InternalMessageInfo
+
+func (m *CampaignFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignFeed)(nil), "google.ads.googleads.v3.resources.CampaignFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_feed.proto", fileDescriptor_6f9f25847e06da48)
+}
+
+var fileDescriptor_6f9f25847e06da48 = []byte{
+	// 527 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0x26, 0xbb, 0xeb, 0xa2, 0x63, 0x2d, 0xdd, 0x5c, 0xc5, 0x52, 0x64, 0xab, 0x2c, 0xec, 0xd5,
+	0x4c, 0xd9, 0xa8, 0x48, 0xbc, 0x31, 0x2b, 0xb6, 0x20, 0x2a, 0x4b, 0x2a, 0x8b, 0xe8, 0x6a, 0x98,
+	0x26, 0xb3, 0x69, 0x68, 0xe6, 0x87, 0x4c, 0x52, 0x29, 0xd2, 0x97, 0xf1, 0x4e, 0x1f, 0xc5, 0x47,
+	0xe9, 0x43, 0x88, 0x4c, 0x32, 0x99, 0xfd, 0x91, 0x6d, 0x7b, 0xf7, 0xe5, 0x9c, 0xef, 0x3b, 0x73,
+	0xce, 0xf9, 0x72, 0xc0, 0xb3, 0x84, 0xf3, 0x24, 0x23, 0x08, 0xc7, 0x12, 0xd5, 0x50, 0xa1, 0x73,
+	0x17, 0xe5, 0x44, 0xf2, 0x32, 0x8f, 0x88, 0x44, 0x11, 0xa6, 0x02, 0xa7, 0x09, 0x0b, 0xe7, 0x84,
+	0xc4, 0x50, 0xe4, 0xbc, 0xe0, 0xf6, 0x7e, 0xcd, 0x85, 0x38, 0x96, 0xd0, 0xc8, 0xe0, 0xb9, 0x0b,
+	0x8d, 0x6c, 0xf7, 0xf9, 0xa6, 0xca, 0x11, 0xa7, 0x94, 0x33, 0x44, 0x71, 0x11, 0x9d, 0xa6, 0x2c,
+	0x09, 0xe7, 0x25, 0x8b, 0x8a, 0x94, 0xb3, 0xba, 0xf4, 0xee, 0xd3, 0x4d, 0x3a, 0xc2, 0x4a, 0x2a,
+	0x91, 0x6a, 0x22, 0xcc, 0x52, 0x76, 0x16, 0xca, 0x02, 0x17, 0xa5, 0xbc, 0x9d, 0x4a, 0x64, 0x38,
+	0x22, 0xa7, 0x3c, 0x8b, 0x49, 0x1e, 0x16, 0x17, 0x82, 0x68, 0xd5, 0xc3, 0x46, 0x25, 0x52, 0x33,
+	0xb0, 0x4e, 0x3d, 0xd2, 0xa9, 0xea, 0xeb, 0xa4, 0x9c, 0xa3, 0xef, 0x39, 0x16, 0x82, 0xe4, 0xcd,
+	0x83, 0x7b, 0x4b, 0x52, 0xcc, 0x18, 0x2f, 0xb0, 0x9a, 0x41, 0x67, 0x1f, 0xff, 0xea, 0x80, 0xad,
+	0xd7, 0x7a, 0x6f, 0x87, 0x84, 0xc4, 0xf6, 0x13, 0xf0, 0xa0, 0x79, 0x20, 0x64, 0x98, 0x12, 0xc7,
+	0xea, 0x5b, 0xc3, 0x7b, 0xc1, 0x56, 0x13, 0xfc, 0x80, 0x29, 0xb1, 0x0f, 0x40, 0x47, 0x8d, 0xe7,
+	0xb4, 0xfa, 0xd6, 0xf0, 0xfe, 0x68, 0x4f, 0x6f, 0x16, 0x36, 0x2d, 0xc0, 0xe3, 0x22, 0x4f, 0x59,
+	0x32, 0xc5, 0x59, 0x49, 0x82, 0x8a, 0x69, 0xbf, 0x00, 0x77, 0x1b, 0x7b, 0x9c, 0xf6, 0x2d, 0x54,
+	0x86, 0x6d, 0x73, 0xd0, 0x5b, 0x5f, 0x8a, 0x74, 0x3a, 0xfd, 0xf6, 0x70, 0x7b, 0x34, 0x86, 0x9b,
+	0xdc, 0xad, 0x96, 0x09, 0x27, 0x0b, 0xdd, 0xc7, 0x0b, 0x41, 0xde, 0xb0, 0x92, 0xae, 0xc7, 0x82,
+	0x1d, 0xb1, 0x1a, 0x90, 0xf6, 0x57, 0xd0, 0xfb, 0xcf, 0x72, 0xe7, 0x4e, 0xd5, 0xf3, 0xc1, 0xc6,
+	0x07, 0xeb, 0x7f, 0x05, 0xbe, 0xd7, 0xc2, 0x43, 0xad, 0x0b, 0x76, 0xe8, 0x5a, 0xc4, 0xfe, 0x04,
+	0xba, 0xf5, 0x0f, 0xe1, 0x74, 0xfb, 0xd6, 0x70, 0x7b, 0xf4, 0xea, 0x86, 0x21, 0x94, 0x2b, 0xef,
+	0x52, 0x76, 0x76, 0x5c, 0x89, 0xaa, 0x19, 0x56, 0x43, 0x81, 0xae, 0xe7, 0x7d, 0xbb, 0xf2, 0xbf,
+	0x80, 0xc1, 0xa2, 0x84, 0x46, 0x22, 0x95, 0xaa, 0x3d, 0xb4, 0x62, 0xf3, 0x28, 0x2a, 0x65, 0xc1,
+	0x29, 0xc9, 0x25, 0xfa, 0xd1, 0xc0, 0x4b, 0x73, 0x41, 0x8a, 0xa2, 0x12, 0xcb, 0x07, 0x75, 0x39,
+	0xfe, 0x6b, 0x81, 0x41, 0xc4, 0x29, 0xbc, 0xf1, 0xa4, 0xc6, 0xbd, 0xe5, 0xb7, 0x26, 0xca, 0xdf,
+	0x89, 0xf5, 0xf9, 0xad, 0xd6, 0x25, 0x3c, 0xc3, 0x2c, 0x81, 0x3c, 0x4f, 0x50, 0x42, 0x58, 0xe5,
+	0x3e, 0x5a, 0xb4, 0x7a, 0xcd, 0x81, 0xbf, 0x34, 0xe8, 0x67, 0xab, 0x7d, 0xe4, 0xfb, 0xbf, 0x5b,
+	0xfb, 0x47, 0x75, 0x49, 0x3f, 0x96, 0xb0, 0x86, 0x0a, 0x4d, 0x5d, 0x18, 0x34, 0xcc, 0x3f, 0x0d,
+	0x67, 0xe6, 0xc7, 0x72, 0x66, 0x38, 0xb3, 0xa9, 0x3b, 0x33, 0x9c, 0xab, 0xd6, 0xa0, 0x4e, 0x78,
+	0x9e, 0x1f, 0x4b, 0xcf, 0x33, 0x2c, 0xcf, 0x9b, 0xba, 0x9e, 0x67, 0x78, 0x27, 0xdd, 0xaa, 0x59,
+	0xf7, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xa1, 0xf2, 0xf2, 0x8c, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_label.pb.go b/googleapis/ads/googleads/v3/resources/campaign_label.pb.go
new file mode 100644
index 0000000..674ce3b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_label.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents a relationship between a campaign and a label.
+type CampaignLabel struct {
+	// Name of the resource.
+	// Campaign label resource names have the form:
+	// `customers/{customer_id}/campaignLabels/{campaign_id}~{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which the label is attached.
+	Campaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The label assigned to the campaign.
+	Label                *wrappers.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CampaignLabel) Reset()         { *m = CampaignLabel{} }
+func (m *CampaignLabel) String() string { return proto.CompactTextString(m) }
+func (*CampaignLabel) ProtoMessage()    {}
+func (*CampaignLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b50dc695bdd1c347, []int{0}
+}
+
+func (m *CampaignLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignLabel.Unmarshal(m, b)
+}
+func (m *CampaignLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignLabel.Marshal(b, m, deterministic)
+}
+func (m *CampaignLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignLabel.Merge(m, src)
+}
+func (m *CampaignLabel) XXX_Size() int {
+	return xxx_messageInfo_CampaignLabel.Size(m)
+}
+func (m *CampaignLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignLabel proto.InternalMessageInfo
+
+func (m *CampaignLabel) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignLabel) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignLabel) GetLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CampaignLabel)(nil), "google.ads.googleads.v3.resources.CampaignLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_label.proto", fileDescriptor_b50dc695bdd1c347)
+}
+
+var fileDescriptor_b50dc695bdd1c347 = []byte{
+	// 372 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x4b, 0xf3, 0x30,
+	0x1c, 0xc6, 0x69, 0xc7, 0xfb, 0xa2, 0xd5, 0x5d, 0x7a, 0x9a, 0x63, 0xc8, 0xa6, 0x4c, 0x76, 0x4a,
+	0x60, 0x15, 0x91, 0x78, 0xea, 0x3c, 0x0c, 0x44, 0x64, 0x4c, 0xe8, 0x41, 0x8a, 0x23, 0x6b, 0x63,
+	0x28, 0xb4, 0x49, 0x49, 0xda, 0x79, 0x90, 0x1d, 0xfd, 0x22, 0x1e, 0xfd, 0x28, 0x7e, 0x94, 0x7d,
+	0x09, 0xa5, 0x6d, 0x92, 0xb9, 0x8b, 0x7a, 0x7b, 0xb6, 0xe7, 0xf7, 0xfc, 0xf3, 0xfc, 0x93, 0x3a,
+	0x17, 0x94, 0x73, 0x9a, 0x12, 0x88, 0x63, 0x09, 0x1b, 0x59, 0xa9, 0x95, 0x07, 0x05, 0x91, 0xbc,
+	0x14, 0x11, 0x91, 0x30, 0xc2, 0x59, 0x8e, 0x13, 0xca, 0x16, 0x29, 0x5e, 0x92, 0x14, 0xe4, 0x82,
+	0x17, 0xdc, 0x1d, 0x34, 0x30, 0xc0, 0xb1, 0x04, 0x26, 0x07, 0x56, 0x1e, 0x30, 0xb9, 0xee, 0x91,
+	0x1e, 0x9d, 0x27, 0x66, 0x5a, 0x93, 0xee, 0x1e, 0x2b, 0xab, 0xfe, 0xb5, 0x2c, 0x9f, 0xe0, 0xb3,
+	0xc0, 0x79, 0x4e, 0x84, 0x54, 0x7e, 0xef, 0x5b, 0x14, 0x33, 0xc6, 0x0b, 0x5c, 0x24, 0x9c, 0x29,
+	0xf7, 0xe4, 0xd5, 0x76, 0xda, 0xd7, 0xaa, 0xd4, 0x6d, 0xd5, 0xc9, 0x3d, 0x75, 0xda, 0xfa, 0x84,
+	0x05, 0xc3, 0x19, 0xe9, 0x58, 0x7d, 0x6b, 0xb4, 0x3f, 0x3f, 0xd4, 0x7f, 0xde, 0xe1, 0x8c, 0xb8,
+	0x97, 0xce, 0x9e, 0x5e, 0xa5, 0x63, 0xf7, 0xad, 0xd1, 0xc1, 0xb8, 0xa7, 0xaa, 0x03, 0xdd, 0x03,
+	0xdc, 0x17, 0x22, 0x61, 0x34, 0xc0, 0x69, 0x49, 0xe6, 0x86, 0x76, 0xc7, 0xce, 0xbf, 0x7a, 0xf7,
+	0x4e, 0xeb, 0x0f, 0xb1, 0x06, 0x45, 0x78, 0xe3, 0x3f, 0x3a, 0x67, 0xdb, 0xab, 0x51, 0x2a, 0x4f,
+	0x24, 0x88, 0x78, 0x06, 0x77, 0xfb, 0x9f, 0x47, 0xa5, 0x2c, 0x78, 0x46, 0x84, 0x84, 0x2f, 0x5a,
+	0xae, 0xcd, 0xc5, 0xd7, 0x4c, 0xe5, 0xec, 0x3c, 0xc4, 0x7a, 0xf2, 0x69, 0x39, 0xc3, 0x88, 0x67,
+	0xe0, 0xd7, 0xa7, 0x98, 0xb8, 0x3b, 0xc7, 0xcd, 0xaa, 0xda, 0x33, 0xeb, 0xe1, 0x46, 0x05, 0x29,
+	0x4f, 0x31, 0xa3, 0x80, 0x0b, 0x0a, 0x29, 0x61, 0xf5, 0x52, 0x70, 0x5b, 0xf7, 0x87, 0x4f, 0xe3,
+	0xca, 0xa8, 0x37, 0xbb, 0x35, 0xf5, 0xfd, 0x77, 0x7b, 0x30, 0x6d, 0x46, 0xfa, 0xb1, 0x04, 0x8d,
+	0xac, 0x54, 0xe0, 0x81, 0xb9, 0x26, 0x3f, 0x34, 0x13, 0xfa, 0xb1, 0x0c, 0x0d, 0x13, 0x06, 0x5e,
+	0x68, 0x98, 0x8d, 0x3d, 0x6c, 0x0c, 0x84, 0xfc, 0x58, 0x22, 0x64, 0x28, 0x84, 0x02, 0x0f, 0x21,
+	0xc3, 0x2d, 0xff, 0xd7, 0x65, 0xbd, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xd7, 0x8a, 0xa9,
+	0xc6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/campaign_shared_set.pb.go b/googleapis/ads/googleads/v3/resources/campaign_shared_set.pb.go
new file mode 100644
index 0000000..7499a07
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/campaign_shared_set.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/campaign_shared_set.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// CampaignSharedSets are used for managing the shared sets associated with a
+// campaign.
+type CampaignSharedSet struct {
+	// The resource name of the campaign shared set.
+	// Campaign shared set resource names have the form:
+	//
+	// `customers/{customer_id}/campaignSharedSets/{campaign_id}~{shared_set_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which the campaign shared set belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The shared set associated with the campaign. This may be a negative keyword
+	// shared set of another customer. This customer should be a manager of the
+	// other customer, otherwise the campaign shared set will exist but have no
+	// serving effect. Only negative keyword shared sets can be associated with
+	// Shopping campaigns. Only negative placement shared sets can be associated
+	// with Display mobile app campaigns.
+	SharedSet *wrappers.StringValue `protobuf:"bytes,4,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The status of this campaign shared set. Read only.
+	Status               enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus `protobuf:"varint,2,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                  `json:"-"`
+	XXX_unrecognized     []byte                                                    `json:"-"`
+	XXX_sizecache        int32                                                     `json:"-"`
+}
+
+func (m *CampaignSharedSet) Reset()         { *m = CampaignSharedSet{} }
+func (m *CampaignSharedSet) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSet) ProtoMessage()    {}
+func (*CampaignSharedSet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_41d4c077729b864b, []int{0}
+}
+
+func (m *CampaignSharedSet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSet.Unmarshal(m, b)
+}
+func (m *CampaignSharedSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSet.Marshal(b, m, deterministic)
+}
+func (m *CampaignSharedSet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSet.Merge(m, src)
+}
+func (m *CampaignSharedSet) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSet.Size(m)
+}
+func (m *CampaignSharedSet) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSet proto.InternalMessageInfo
+
+func (m *CampaignSharedSet) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignSharedSet) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignSharedSet) GetSharedSet() *wrappers.StringValue {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *CampaignSharedSet) GetStatus() enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignSharedSetStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignSharedSet)(nil), "google.ads.googleads.v3.resources.CampaignSharedSet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/campaign_shared_set.proto", fileDescriptor_41d4c077729b864b)
+}
+
+var fileDescriptor_41d4c077729b864b = []byte{
+	// 430 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x8b, 0xd4, 0x30,
+	0x1c, 0xa5, 0x1d, 0x59, 0xdc, 0xf8, 0x07, 0xec, 0x41, 0xea, 0xb2, 0xc8, 0xac, 0xb2, 0x30, 0x78,
+	0x48, 0x60, 0x7b, 0x91, 0x0c, 0x0a, 0x5d, 0x91, 0x05, 0x0f, 0xb2, 0xb4, 0xd0, 0x83, 0x14, 0x4a,
+	0xb6, 0x8d, 0xb1, 0x3a, 0x49, 0x4a, 0x92, 0xae, 0x07, 0xd9, 0x93, 0x47, 0xbf, 0x85, 0x47, 0x3f,
+	0x8a, 0x1f, 0x65, 0x3e, 0x85, 0xb4, 0x4d, 0x32, 0x42, 0x1d, 0xf5, 0xf6, 0xda, 0xdf, 0x7b, 0xbf,
+	0xf7, 0xf2, 0x12, 0xb0, 0x66, 0x52, 0xb2, 0x0d, 0x45, 0xa4, 0xd1, 0x68, 0x82, 0x03, 0xba, 0x4e,
+	0x90, 0xa2, 0x5a, 0xf6, 0xaa, 0xa6, 0x1a, 0xd5, 0x84, 0x77, 0xa4, 0x65, 0xa2, 0xd2, 0x1f, 0x88,
+	0xa2, 0x4d, 0xa5, 0xa9, 0x81, 0x9d, 0x92, 0x46, 0x46, 0x27, 0x93, 0x02, 0x92, 0x46, 0x43, 0x2f,
+	0x86, 0xd7, 0x09, 0xf4, 0xe2, 0xa3, 0x97, 0xfb, 0xf6, 0x53, 0xd1, 0xf3, 0x3f, 0xee, 0xae, 0xb4,
+	0x21, 0xa6, 0xd7, 0x93, 0xc5, 0xd1, 0x23, 0xa7, 0xef, 0x5a, 0x1f, 0xc9, 0x8e, 0x1e, 0xdb, 0xd1,
+	0xf8, 0x75, 0xd5, 0xbf, 0x47, 0x9f, 0x15, 0xe9, 0x3a, 0xaa, 0x9c, 0xf4, 0xf8, 0x37, 0x29, 0x11,
+	0x42, 0x1a, 0x62, 0x5a, 0x29, 0xec, 0xf4, 0xc9, 0xb7, 0x05, 0x78, 0xf0, 0xca, 0xba, 0xe7, 0xa3,
+	0x79, 0x4e, 0x4d, 0xf4, 0x14, 0xdc, 0x73, 0x2e, 0x95, 0x20, 0x9c, 0xc6, 0xc1, 0x32, 0x58, 0x1d,
+	0x66, 0x77, 0xdd, 0xcf, 0xb7, 0x84, 0xd3, 0xe8, 0x39, 0xb8, 0xed, 0x72, 0xc7, 0x8b, 0x65, 0xb0,
+	0xba, 0x73, 0x76, 0x6c, 0x8f, 0x0f, 0x5d, 0x16, 0x98, 0x1b, 0xd5, 0x0a, 0x56, 0x90, 0x4d, 0x4f,
+	0x33, 0xcf, 0x8e, 0xd6, 0x00, 0xec, 0x0e, 0x1a, 0xdf, 0xfa, 0x0f, 0xed, 0xa1, 0xf6, 0xd9, 0x3e,
+	0x82, 0x83, 0xa9, 0x9a, 0x38, 0x5c, 0x06, 0xab, 0xfb, 0x67, 0x19, 0xdc, 0x57, 0xff, 0xd8, 0x2d,
+	0x9c, 0x9d, 0x2e, 0x1f, 0xd5, 0xaf, 0x45, 0xcf, 0xf7, 0xcd, 0x32, 0xeb, 0x80, 0xc5, 0x36, 0xfd,
+	0x04, 0x9e, 0xed, 0x96, 0x5a, 0xd4, 0xb5, 0x1a, 0xd6, 0x92, 0xa3, 0x79, 0x71, 0x2f, 0xea, 0x5e,
+	0x1b, 0xc9, 0xa9, 0xd2, 0xe8, 0x8b, 0x83, 0x37, 0xfe, 0x7a, 0x3d, 0x6f, 0x98, 0xce, 0xaf, 0xfc,
+	0xe6, 0xfc, 0x6b, 0x08, 0x4e, 0x6b, 0xc9, 0xe1, 0x3f, 0x1f, 0xd4, 0xf9, 0xc3, 0x99, 0xf7, 0xe5,
+	0xd0, 0xdb, 0x65, 0xf0, 0xee, 0x8d, 0x15, 0x33, 0xb9, 0x21, 0x82, 0x41, 0xa9, 0x18, 0x62, 0x54,
+	0x8c, 0xad, 0xa2, 0x5d, 0xfe, 0xbf, 0xbc, 0xf4, 0xb5, 0x47, 0xdf, 0xc3, 0xc5, 0x45, 0x9a, 0xfe,
+	0x08, 0x4f, 0x2e, 0xa6, 0x95, 0x69, 0xa3, 0xe1, 0x04, 0x07, 0x54, 0x24, 0x30, 0x73, 0xcc, 0x9f,
+	0x8e, 0x53, 0xa6, 0x8d, 0x2e, 0x3d, 0xa7, 0x2c, 0x92, 0xd2, 0x73, 0xb6, 0xe1, 0xe9, 0x34, 0xc0,
+	0x38, 0x6d, 0x34, 0xc6, 0x9e, 0x85, 0x71, 0x91, 0x60, 0xec, 0x79, 0x57, 0x07, 0x63, 0xd8, 0xe4,
+	0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x8a, 0xa2, 0x34, 0x95, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/carrier_constant.pb.go b/googleapis/ads/googleads/v3/resources/carrier_constant.pb.go
new file mode 100644
index 0000000..34bd5df
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/carrier_constant.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/carrier_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A carrier criterion that can be used in campaign targeting.
+type CarrierConstant struct {
+	// The resource name of the carrier criterion.
+	// Carrier criterion resource names have the form:
+	//
+	// `carrierConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the carrier criterion.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The full name of the carrier in English.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The country code of the country where the carrier is located, e.g., "AR",
+	// "FR", etc.
+	CountryCode          *wrappers.StringValue `protobuf:"bytes,4,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CarrierConstant) Reset()         { *m = CarrierConstant{} }
+func (m *CarrierConstant) String() string { return proto.CompactTextString(m) }
+func (*CarrierConstant) ProtoMessage()    {}
+func (*CarrierConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_41cfb443de8f3806, []int{0}
+}
+
+func (m *CarrierConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CarrierConstant.Unmarshal(m, b)
+}
+func (m *CarrierConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CarrierConstant.Marshal(b, m, deterministic)
+}
+func (m *CarrierConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CarrierConstant.Merge(m, src)
+}
+func (m *CarrierConstant) XXX_Size() int {
+	return xxx_messageInfo_CarrierConstant.Size(m)
+}
+func (m *CarrierConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_CarrierConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CarrierConstant proto.InternalMessageInfo
+
+func (m *CarrierConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CarrierConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CarrierConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CarrierConstant) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CarrierConstant)(nil), "google.ads.googleads.v3.resources.CarrierConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/carrier_constant.proto", fileDescriptor_41cfb443de8f3806)
+}
+
+var fileDescriptor_41cfb443de8f3806 = []byte{
+	// 394 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0xaa, 0xd3, 0x30,
+	0x1c, 0xc6, 0x69, 0xce, 0x41, 0x30, 0xe7, 0x88, 0x50, 0xbc, 0x98, 0xc7, 0x21, 0x9b, 0x32, 0x18,
+	0x08, 0x89, 0x58, 0x11, 0x89, 0x17, 0xd2, 0xed, 0x62, 0xe8, 0x85, 0x8e, 0x0a, 0xbd, 0x90, 0xc2,
+	0xc8, 0x92, 0x58, 0x0a, 0x6b, 0x52, 0x92, 0x74, 0x22, 0xe2, 0x85, 0xaf, 0xe2, 0xe5, 0x1e, 0xc5,
+	0x47, 0xd9, 0x53, 0xc8, 0x9a, 0x34, 0xd3, 0x0d, 0xd4, 0xbb, 0xaf, 0xf9, 0xff, 0xbe, 0xaf, 0x5f,
+	0xfa, 0x2f, 0x7c, 0x59, 0x2a, 0x55, 0x6e, 0x04, 0xa6, 0xdc, 0x60, 0x27, 0x0f, 0x6a, 0x9b, 0x60,
+	0x2d, 0x8c, 0x6a, 0x35, 0x13, 0x06, 0x33, 0xaa, 0x75, 0x25, 0xf4, 0x8a, 0x29, 0x69, 0x2c, 0x95,
+	0x16, 0x35, 0x5a, 0x59, 0x15, 0x8f, 0x1d, 0x8e, 0x28, 0x37, 0x28, 0x38, 0xd1, 0x36, 0x41, 0xc1,
+	0x79, 0x73, 0xbf, 0x0f, 0x6f, 0xaa, 0x90, 0xe7, 0xdc, 0x37, 0x0f, 0xfd, 0xa8, 0x7b, 0x5a, 0xb7,
+	0x9f, 0xf0, 0x67, 0x4d, 0x9b, 0x46, 0x68, 0xe3, 0xe7, 0xc3, 0xdf, 0xac, 0x54, 0x4a, 0x65, 0xa9,
+	0xad, 0x94, 0xf4, 0xd3, 0x47, 0x3b, 0x00, 0xef, 0xce, 0x5d, 0xad, 0xb9, 0x6f, 0x15, 0x3f, 0x86,
+	0x77, 0xfa, 0x77, 0xac, 0x24, 0xad, 0xc5, 0x20, 0x1a, 0x45, 0xd3, 0xdb, 0xd9, 0x75, 0x7f, 0xf8,
+	0x8e, 0xd6, 0x22, 0x7e, 0x02, 0x41, 0xc5, 0x07, 0x60, 0x14, 0x4d, 0xaf, 0x9e, 0x3d, 0xf0, 0xb5,
+	0x51, 0xdf, 0x01, 0xbd, 0x91, 0xf6, 0xc5, 0xf3, 0x9c, 0x6e, 0x5a, 0x91, 0x81, 0x8a, 0xc7, 0x4f,
+	0xe1, 0x65, 0x17, 0x74, 0xd1, 0xe1, 0xc3, 0x33, 0xfc, 0x83, 0xd5, 0x95, 0x2c, 0x1d, 0xdf, 0x91,
+	0xf1, 0x6b, 0x78, 0xcd, 0x54, 0x2b, 0xad, 0xfe, 0xb2, 0x62, 0x8a, 0x8b, 0xc1, 0xe5, 0x7f, 0x38,
+	0xaf, 0xbc, 0x63, 0xae, 0xb8, 0x20, 0xd9, 0x3e, 0x7d, 0x0f, 0xa7, 0xc7, 0xcf, 0xe9, 0x55, 0x53,
+	0x19, 0xc4, 0x54, 0x8d, 0xcf, 0xee, 0xcc, 0xfe, 0x3c, 0x30, 0xf8, 0xeb, 0xe9, 0xb6, 0xbe, 0xcd,
+	0xbe, 0x03, 0x38, 0x61, 0xaa, 0x46, 0xff, 0xdc, 0xd7, 0xec, 0xde, 0x49, 0xfe, 0xf2, 0xd0, 0x77,
+	0x19, 0x7d, 0x7c, 0xeb, 0xad, 0xa5, 0xda, 0x50, 0x59, 0x22, 0xa5, 0x4b, 0x5c, 0x0a, 0xd9, 0xdd,
+	0x06, 0x1f, 0x1b, 0xfe, 0xe5, 0x1f, 0x7a, 0x15, 0xd4, 0x0f, 0x70, 0xb1, 0x48, 0xd3, 0x1d, 0x18,
+	0x2f, 0x5c, 0x64, 0xca, 0x0d, 0x72, 0xf2, 0xa0, 0xf2, 0x04, 0x65, 0x3d, 0xf9, 0xb3, 0x67, 0x8a,
+	0x94, 0x9b, 0x22, 0x30, 0x45, 0x9e, 0x14, 0x81, 0xd9, 0x83, 0x89, 0x1b, 0x10, 0x92, 0x72, 0x43,
+	0x48, 0xa0, 0x08, 0xc9, 0x13, 0x42, 0x02, 0xb7, 0xbe, 0xd5, 0x95, 0x4d, 0x7e, 0x05, 0x00, 0x00,
+	0xff, 0xff, 0xbe, 0xb4, 0x80, 0x31, 0xef, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/change_status.pb.go b/googleapis/ads/googleads/v3/resources/change_status.pb.go
new file mode 100644
index 0000000..8854e66
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/change_status.pb.go
@@ -0,0 +1,241 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/change_status.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Describes the status of returned resource.
+type ChangeStatus struct {
+	// The resource name of the change status.
+	// Change status resource names have the form:
+	//
+	// `customers/{customer_id}/changeStatus/{change_status_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Time at which the most recent change has occurred on this resource.
+	LastChangeDateTime *wrappers.StringValue `protobuf:"bytes,3,opt,name=last_change_date_time,json=lastChangeDateTime,proto3" json:"last_change_date_time,omitempty"`
+	// Represents the type of the changed resource. This dictates what fields
+	// will be set. For example, for AD_GROUP, campaign and ad_group fields will
+	// be set.
+	ResourceType enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=google.ads.googleads.v3.enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType" json:"resource_type,omitempty"`
+	// The Campaign affected by this change.
+	Campaign *wrappers.StringValue `protobuf:"bytes,5,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The AdGroup affected by this change.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,6,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Represents the status of the changed resource.
+	ResourceStatus enums.ChangeStatusOperationEnum_ChangeStatusOperation `protobuf:"varint,8,opt,name=resource_status,json=resourceStatus,proto3,enum=google.ads.googleads.v3.enums.ChangeStatusOperationEnum_ChangeStatusOperation" json:"resource_status,omitempty"`
+	// The AdGroupAd affected by this change.
+	AdGroupAd *wrappers.StringValue `protobuf:"bytes,9,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The AdGroupCriterion affected by this change.
+	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,10,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The CampaignCriterion affected by this change.
+	CampaignCriterion *wrappers.StringValue `protobuf:"bytes,11,opt,name=campaign_criterion,json=campaignCriterion,proto3" json:"campaign_criterion,omitempty"`
+	// The Feed affected by this change.
+	Feed *wrappers.StringValue `protobuf:"bytes,12,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The FeedItem affected by this change.
+	FeedItem *wrappers.StringValue `protobuf:"bytes,13,opt,name=feed_item,json=feedItem,proto3" json:"feed_item,omitempty"`
+	// The AdGroupFeed affected by this change.
+	AdGroupFeed *wrappers.StringValue `protobuf:"bytes,14,opt,name=ad_group_feed,json=adGroupFeed,proto3" json:"ad_group_feed,omitempty"`
+	// The CampaignFeed affected by this change.
+	CampaignFeed *wrappers.StringValue `protobuf:"bytes,15,opt,name=campaign_feed,json=campaignFeed,proto3" json:"campaign_feed,omitempty"`
+	// The AdGroupBidModifier affected by this change.
+	AdGroupBidModifier   *wrappers.StringValue `protobuf:"bytes,16,opt,name=ad_group_bid_modifier,json=adGroupBidModifier,proto3" json:"ad_group_bid_modifier,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ChangeStatus) Reset()         { *m = ChangeStatus{} }
+func (m *ChangeStatus) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatus) ProtoMessage()    {}
+func (*ChangeStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d9c24d7e7a930b4, []int{0}
+}
+
+func (m *ChangeStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatus.Unmarshal(m, b)
+}
+func (m *ChangeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatus.Marshal(b, m, deterministic)
+}
+func (m *ChangeStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatus.Merge(m, src)
+}
+func (m *ChangeStatus) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatus.Size(m)
+}
+func (m *ChangeStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatus proto.InternalMessageInfo
+
+func (m *ChangeStatus) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ChangeStatus) GetLastChangeDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.LastChangeDateTime
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetResourceType() enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType {
+	if m != nil {
+		return m.ResourceType
+	}
+	return enums.ChangeStatusResourceTypeEnum_UNSPECIFIED
+}
+
+func (m *ChangeStatus) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetResourceStatus() enums.ChangeStatusOperationEnum_ChangeStatusOperation {
+	if m != nil {
+		return m.ResourceStatus
+	}
+	return enums.ChangeStatusOperationEnum_UNSPECIFIED
+}
+
+func (m *ChangeStatus) GetAdGroupAd() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetCampaignCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignCriterion
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetFeedItem() *wrappers.StringValue {
+	if m != nil {
+		return m.FeedItem
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroupFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupFeed
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetCampaignFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignFeed
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroupBidModifier() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupBidModifier
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ChangeStatus)(nil), "google.ads.googleads.v3.resources.ChangeStatus")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/change_status.proto", fileDescriptor_4d9c24d7e7a930b4)
+}
+
+var fileDescriptor_4d9c24d7e7a930b4 = []byte{
+	// 650 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdf, 0x4e, 0xdb, 0x3e,
+	0x18, 0x55, 0x81, 0x1f, 0xbf, 0xd6, 0x6d, 0xf9, 0x63, 0x09, 0x29, 0x43, 0x68, 0x82, 0x4d, 0x48,
+	0x5c, 0x39, 0x1b, 0xd5, 0xb4, 0x2d, 0x4c, 0xda, 0x02, 0xdb, 0xd0, 0x98, 0x06, 0xa8, 0xa0, 0x5e,
+	0xa0, 0x4e, 0x91, 0x89, 0x4d, 0x66, 0xa9, 0x8e, 0x23, 0xdb, 0x01, 0x21, 0xc4, 0xcb, 0xec, 0x72,
+	0x8f, 0xb2, 0xe7, 0xd8, 0x15, 0x0f, 0x31, 0x4d, 0x49, 0x6c, 0xb7, 0x6c, 0x62, 0x0b, 0x57, 0xfd,
+	0xd2, 0xef, 0x9c, 0xf3, 0x9d, 0x63, 0x27, 0x1f, 0x78, 0x96, 0x08, 0x91, 0x8c, 0xa8, 0x8f, 0x89,
+	0xf2, 0xab, 0xb2, 0xa8, 0xce, 0x7b, 0xbe, 0xa4, 0x4a, 0xe4, 0x32, 0xa6, 0xca, 0x8f, 0xbf, 0xe0,
+	0x34, 0xa1, 0x91, 0xd2, 0x58, 0xe7, 0x0a, 0x65, 0x52, 0x68, 0x01, 0xd7, 0x2a, 0x2c, 0xc2, 0x44,
+	0x21, 0x47, 0x43, 0xe7, 0x3d, 0xe4, 0x68, 0xcb, 0x5b, 0x77, 0x29, 0xd3, 0x34, 0xe7, 0xbf, 0xa9,
+	0x46, 0x22, 0xa3, 0x12, 0x6b, 0x26, 0xd2, 0x4a, 0x7f, 0xf9, 0xf5, 0x7d, 0xc8, 0x76, 0x66, 0xa4,
+	0x2f, 0x33, 0x6a, 0x04, 0x1e, 0x58, 0x81, 0x8c, 0xb9, 0x28, 0xa6, 0xf5, 0xd0, 0xb4, 0xca, 0xa7,
+	0xd3, 0xfc, 0xcc, 0xbf, 0x90, 0x38, 0xcb, 0xa8, 0x34, 0xd9, 0x96, 0x57, 0x26, 0xa8, 0x38, 0x4d,
+	0x85, 0x2e, 0x8d, 0x99, 0xee, 0xa3, 0x1f, 0x4d, 0xd0, 0xd9, 0x29, 0xc7, 0x1f, 0x95, 0xd3, 0xe1,
+	0x63, 0xd0, 0x75, 0x06, 0x52, 0xcc, 0xa9, 0xd7, 0x58, 0x6d, 0x6c, 0xb4, 0xfa, 0x1d, 0xfb, 0xe7,
+	0x3e, 0xe6, 0x14, 0x1e, 0x80, 0xa5, 0x11, 0x56, 0x3a, 0x32, 0xc6, 0x09, 0xd6, 0x34, 0xd2, 0x8c,
+	0x53, 0x6f, 0x7a, 0xb5, 0xb1, 0xd1, 0xde, 0x5c, 0x31, 0x87, 0x88, 0xac, 0x27, 0x74, 0xa4, 0x25,
+	0x4b, 0x93, 0x01, 0x1e, 0xe5, 0xb4, 0x0f, 0x0b, 0x6a, 0x35, 0xf3, 0x2d, 0xd6, 0xf4, 0x98, 0x71,
+	0x0a, 0x2f, 0x27, 0xa6, 0x16, 0xb1, 0xbd, 0x99, 0xd5, 0xc6, 0xc6, 0xdc, 0xe6, 0x31, 0xba, 0xeb,
+	0x62, 0xca, 0x83, 0x43, 0x93, 0xce, 0xfb, 0x86, 0x7f, 0x7c, 0x99, 0xd1, 0x77, 0x69, 0xce, 0xef,
+	0x6c, 0x8e, 0xb3, 0x14, 0x4f, 0xf0, 0x05, 0x68, 0xc6, 0x98, 0x67, 0x98, 0x25, 0xa9, 0xf7, 0x5f,
+	0x0d, 0xfb, 0x0e, 0x0d, 0x9f, 0x83, 0x26, 0x26, 0x51, 0x22, 0x45, 0x9e, 0x79, 0xb3, 0x35, 0x98,
+	0xff, 0x63, 0xb2, 0x5b, 0x80, 0xe1, 0x05, 0x98, 0x77, 0x69, 0xab, 0x4b, 0xf7, 0x9a, 0x65, 0xde,
+	0xfd, 0x7b, 0xe4, 0x3d, 0xb0, 0xef, 0xd8, 0x1f, 0x61, 0x5d, 0xa7, 0x3f, 0x67, 0xc7, 0x98, 0xcb,
+	0x7d, 0x05, 0xda, 0xd6, 0x71, 0x84, 0x89, 0xd7, 0xaa, 0x61, 0xba, 0x65, 0x4c, 0x87, 0x04, 0xee,
+	0x01, 0xe8, 0xd8, 0xb1, 0x64, 0x9a, 0x4a, 0x26, 0x52, 0x0f, 0xd4, 0x10, 0x59, 0x30, 0x22, 0x3b,
+	0x96, 0x05, 0x3f, 0x02, 0x68, 0xcf, 0x71, 0x42, 0xab, 0x5d, 0x43, 0x6b, 0xd1, 0xf2, 0xc6, 0x62,
+	0x4f, 0xc0, 0xcc, 0x19, 0xa5, 0xc4, 0xeb, 0xd4, 0xa0, 0x97, 0x48, 0xf8, 0x12, 0xb4, 0x8a, 0xdf,
+	0x88, 0x69, 0xca, 0xbd, 0x6e, 0x9d, 0x5b, 0x2f, 0xe0, 0x1f, 0x34, 0xe5, 0xf0, 0x0d, 0xe8, 0xba,
+	0x53, 0x28, 0xa7, 0xce, 0xd5, 0xa0, 0xb7, 0xcd, 0x01, 0xbc, 0x2f, 0x86, 0x87, 0xa0, 0xeb, 0xb2,
+	0x97, 0x0a, 0xf3, 0x35, 0x14, 0x3a, 0x96, 0x52, 0x4a, 0x1c, 0x80, 0x25, 0x67, 0xe2, 0x94, 0x91,
+	0x88, 0x0b, 0xc2, 0xce, 0x18, 0x95, 0xde, 0x42, 0x9d, 0x0f, 0xd0, 0x98, 0xd9, 0x66, 0xe4, 0x93,
+	0xe1, 0x05, 0x9f, 0x6f, 0xc2, 0x13, 0xb0, 0x3e, 0x7e, 0xe5, 0x4c, 0x95, 0x31, 0x85, 0x62, 0xc1,
+	0xfd, 0x5b, 0x2b, 0xe2, 0x69, 0x9c, 0x2b, 0x2d, 0x38, 0x95, 0xca, 0xbf, 0xb2, 0xe5, 0xb5, 0x59,
+	0x62, 0x15, 0xc4, 0xbf, 0xba, 0xb5, 0xd2, 0xae, 0xb7, 0x7f, 0x36, 0xc0, 0x7a, 0x2c, 0x38, 0xfa,
+	0xe7, 0x9e, 0xdd, 0x5e, 0x9c, 0x1c, 0x75, 0x58, 0xd8, 0x3f, 0x6c, 0x9c, 0xec, 0x19, 0x5e, 0x22,
+	0x46, 0x38, 0x4d, 0x90, 0x90, 0x89, 0x9f, 0xd0, 0xb4, 0x0c, 0xe7, 0x8f, 0x9d, 0xfe, 0x65, 0xeb,
+	0x6f, 0xb9, 0xea, 0xeb, 0xd4, 0xf4, 0x6e, 0x18, 0x7e, 0x9b, 0x5a, 0xdb, 0xad, 0x24, 0x43, 0xa2,
+	0x50, 0x55, 0x16, 0xd5, 0xa0, 0x87, 0xec, 0xaa, 0x50, 0xdf, 0x2d, 0x66, 0x18, 0x12, 0x35, 0x74,
+	0x98, 0xe1, 0xa0, 0x37, 0x74, 0x98, 0x9b, 0xa9, 0xf5, 0xaa, 0x11, 0x04, 0x21, 0x51, 0x41, 0xe0,
+	0x50, 0x41, 0x30, 0xe8, 0x05, 0x81, 0xc3, 0x9d, 0xce, 0x96, 0x66, 0x7b, 0xbf, 0x02, 0x00, 0x00,
+	0xff, 0xff, 0xda, 0x55, 0xdb, 0xd7, 0xa1, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/click_view.pb.go b/googleapis/ads/googleads/v3/resources/click_view.pb.go
new file mode 100644
index 0000000..56643eb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/click_view.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/click_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A click view with metrics aggregated at each click level, including both
+// valid and invalid clicks. For non-Search campaigns, metrics.clicks
+// represents the number of valid and invalid interactions.
+// Queries including ClickView must have a filter limiting the results to one
+// day and can be requested for dates back to 90 days before the time of the
+// request.
+type ClickView struct {
+	// The resource name of the click view.
+	// Click view resource names have the form:
+	//
+	// `customers/{customer_id}/clickViews/{date (yyyy-MM-dd)}~{gclid}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The Google Click ID.
+	Gclid *wrappers.StringValue `protobuf:"bytes,2,opt,name=gclid,proto3" json:"gclid,omitempty"`
+	// The location criteria matching the area of interest associated with the
+	// impression.
+	AreaOfInterest *common.ClickLocation `protobuf:"bytes,3,opt,name=area_of_interest,json=areaOfInterest,proto3" json:"area_of_interest,omitempty"`
+	// The location criteria matching the location of presence associated with the
+	// impression.
+	LocationOfPresence *common.ClickLocation `protobuf:"bytes,4,opt,name=location_of_presence,json=locationOfPresence,proto3" json:"location_of_presence,omitempty"`
+	// Page number in search results where the ad was shown.
+	PageNumber *wrappers.Int64Value `protobuf:"bytes,5,opt,name=page_number,json=pageNumber,proto3" json:"page_number,omitempty"`
+	// The associated ad.
+	AdGroupAd            *wrappers.StringValue `protobuf:"bytes,7,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ClickView) Reset()         { *m = ClickView{} }
+func (m *ClickView) String() string { return proto.CompactTextString(m) }
+func (*ClickView) ProtoMessage()    {}
+func (*ClickView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7eb15a7d43c843e9, []int{0}
+}
+
+func (m *ClickView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClickView.Unmarshal(m, b)
+}
+func (m *ClickView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClickView.Marshal(b, m, deterministic)
+}
+func (m *ClickView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClickView.Merge(m, src)
+}
+func (m *ClickView) XXX_Size() int {
+	return xxx_messageInfo_ClickView.Size(m)
+}
+func (m *ClickView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClickView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClickView proto.InternalMessageInfo
+
+func (m *ClickView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ClickView) GetGclid() *wrappers.StringValue {
+	if m != nil {
+		return m.Gclid
+	}
+	return nil
+}
+
+func (m *ClickView) GetAreaOfInterest() *common.ClickLocation {
+	if m != nil {
+		return m.AreaOfInterest
+	}
+	return nil
+}
+
+func (m *ClickView) GetLocationOfPresence() *common.ClickLocation {
+	if m != nil {
+		return m.LocationOfPresence
+	}
+	return nil
+}
+
+func (m *ClickView) GetPageNumber() *wrappers.Int64Value {
+	if m != nil {
+		return m.PageNumber
+	}
+	return nil
+}
+
+func (m *ClickView) GetAdGroupAd() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ClickView)(nil), "google.ads.googleads.v3.resources.ClickView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/click_view.proto", fileDescriptor_7eb15a7d43c843e9)
+}
+
+var fileDescriptor_7eb15a7d43c843e9 = []byte{
+	// 494 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0xc7, 0xc9, 0xae, 0x55, 0x76, 0xaa, 0x45, 0x82, 0x87, 0x58, 0x8b, 0xb4, 0x95, 0x42, 0x0f,
+	0x3a, 0x81, 0x8d, 0x78, 0x88, 0x5e, 0x52, 0x0f, 0x4b, 0x45, 0xda, 0x25, 0x62, 0x04, 0x59, 0x08,
+	0xb3, 0x99, 0xb7, 0x43, 0x30, 0x99, 0x09, 0x33, 0xc9, 0xee, 0x41, 0xfa, 0x65, 0x3c, 0xfa, 0x51,
+	0xfc, 0x28, 0xbd, 0x79, 0xf6, 0x22, 0x93, 0x99, 0xcc, 0x0a, 0x52, 0x15, 0x6f, 0x6f, 0xe7, 0xfd,
+	0xff, 0xbf, 0xf9, 0xbf, 0xb7, 0x13, 0x34, 0x65, 0x42, 0xb0, 0x0a, 0x42, 0x42, 0x55, 0x68, 0x4a,
+	0x5d, 0xad, 0xa3, 0x50, 0x82, 0x12, 0x9d, 0x2c, 0x40, 0x85, 0x45, 0x55, 0x16, 0x9f, 0xf2, 0x75,
+	0x09, 0x1b, 0xdc, 0x48, 0xd1, 0x0a, 0xff, 0xc8, 0x08, 0x31, 0xa1, 0x0a, 0x3b, 0x0f, 0x5e, 0x47,
+	0xd8, 0x79, 0xf6, 0xa3, 0x9b, 0xb0, 0x85, 0xa8, 0x6b, 0xc1, 0x2d, 0xb3, 0x12, 0x05, 0x69, 0x4b,
+	0xc1, 0x0d, 0x77, 0xff, 0xe1, 0x60, 0x6a, 0x4a, 0x77, 0xbd, 0x6d, 0x3d, 0xb6, 0xad, 0xfe, 0xd7,
+	0xb2, 0x5b, 0x85, 0x1b, 0x49, 0x9a, 0x06, 0xa4, 0xb2, 0xfd, 0x83, 0x5f, 0xac, 0x84, 0x73, 0xd1,
+	0xf6, 0x5c, 0xdb, 0x3d, 0xfe, 0x3e, 0x46, 0x93, 0xd7, 0xfa, 0xc6, 0xac, 0x84, 0x8d, 0xff, 0x04,
+	0xdd, 0x1b, 0xe8, 0x39, 0x27, 0x35, 0x04, 0xde, 0xa1, 0x77, 0x3a, 0x49, 0xef, 0x0e, 0x87, 0x17,
+	0xa4, 0x06, 0x7f, 0x8a, 0x76, 0x58, 0x51, 0x95, 0x34, 0x18, 0x1d, 0x7a, 0xa7, 0xbb, 0xd3, 0x03,
+	0x3b, 0x28, 0x1e, 0x02, 0xe0, 0x77, 0xad, 0x2c, 0x39, 0xcb, 0x48, 0xd5, 0x41, 0x6a, 0xa4, 0xfe,
+	0x07, 0x74, 0x9f, 0x48, 0x20, 0xb9, 0x58, 0xe5, 0x25, 0x6f, 0x41, 0x82, 0x6a, 0x83, 0x71, 0x6f,
+	0x7f, 0x86, 0x6f, 0x5a, 0x99, 0xd9, 0x07, 0xee, 0xd3, 0xbd, 0xb5, 0xeb, 0x48, 0xf7, 0x34, 0xe6,
+	0x72, 0x75, 0x6e, 0x21, 0x7e, 0x8e, 0x1e, 0x0c, 0xab, 0xd2, 0xf0, 0x46, 0x82, 0x02, 0x5e, 0x40,
+	0x70, 0xeb, 0x7f, 0xe0, 0xfe, 0x80, 0xba, 0x5c, 0xcd, 0x2d, 0xc8, 0x7f, 0x85, 0x76, 0x1b, 0xc2,
+	0x20, 0xe7, 0x5d, 0xbd, 0x04, 0x19, 0xec, 0xf4, 0xdc, 0x47, 0xbf, 0xcd, 0x7c, 0xce, 0xdb, 0x17,
+	0xcf, 0xcd, 0xc8, 0x48, 0xeb, 0x2f, 0x7a, 0xb9, 0x76, 0x13, 0x9a, 0x33, 0x29, 0xba, 0x26, 0x27,
+	0x34, 0xb8, 0xf3, 0x0f, 0x1b, 0x9b, 0x10, 0x3a, 0xd3, 0xfa, 0x84, 0xc6, 0xef, 0xaf, 0x93, 0x14,
+	0x1d, 0x6f, 0x73, 0xdb, 0xaa, 0x29, 0x95, 0xce, 0x1f, 0x6e, 0xff, 0xb7, 0xa7, 0x45, 0xa7, 0x5a,
+	0x51, 0x83, 0x54, 0xe1, 0xe7, 0xa1, 0xbc, 0x32, 0x2f, 0x49, 0xf7, 0xf5, 0xa9, 0x7b, 0xa9, 0x57,
+	0x67, 0x3f, 0x3c, 0x74, 0x52, 0x88, 0x1a, 0xff, 0xf5, 0xad, 0x9e, 0xed, 0xb9, 0x2b, 0xe6, 0x3a,
+	0xea, 0xdc, 0xfb, 0xf8, 0xc6, 0x9a, 0x98, 0xa8, 0x08, 0x67, 0x58, 0x48, 0x16, 0x32, 0xe0, 0xfd,
+	0x20, 0xe1, 0x36, 0xde, 0x1f, 0xbe, 0x99, 0x97, 0xae, 0xfa, 0x32, 0x1a, 0xcf, 0x92, 0xe4, 0xeb,
+	0xe8, 0x68, 0x66, 0x90, 0x09, 0x55, 0xd8, 0x94, 0xba, 0xca, 0x22, 0x9c, 0x0e, 0xca, 0x6f, 0x83,
+	0x66, 0x91, 0x50, 0xb5, 0x70, 0x9a, 0x45, 0x16, 0x2d, 0x9c, 0xe6, 0x7a, 0x74, 0x62, 0x1a, 0x71,
+	0x9c, 0x50, 0x15, 0xc7, 0x4e, 0x15, 0xc7, 0x59, 0x14, 0xc7, 0x4e, 0xb7, 0xbc, 0xdd, 0x87, 0x8d,
+	0x7e, 0x06, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x56, 0xa3, 0xdc, 0xdf, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/conversion_action.pb.go b/googleapis/ads/googleads/v3/resources/conversion_action.pb.go
new file mode 100644
index 0000000..bface36
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/conversion_action.pb.go
@@ -0,0 +1,413 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/conversion_action.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A conversion action.
+type ConversionAction struct {
+	// The resource name of the conversion action.
+	// Conversion action resource names have the form:
+	//
+	// `customers/{customer_id}/conversionActions/{conversion_action_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the conversion action.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the conversion action.
+	//
+	// This field is required and should not be empty when creating new
+	// conversion actions.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of this conversion action for conversion event accrual.
+	Status enums.ConversionActionStatusEnum_ConversionActionStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.ConversionActionStatusEnum_ConversionActionStatus" json:"status,omitempty"`
+	// The type of this conversion action.
+	Type enums.ConversionActionTypeEnum_ConversionActionType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.ConversionActionTypeEnum_ConversionActionType" json:"type,omitempty"`
+	// The category of conversions reported for this conversion action.
+	Category enums.ConversionActionCategoryEnum_ConversionActionCategory `protobuf:"varint,6,opt,name=category,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCategoryEnum_ConversionActionCategory" json:"category,omitempty"`
+	// The resource name of the conversion action owner customer, or null if this
+	// is a system-defined conversion action.
+	OwnerCustomer *wrappers.StringValue `protobuf:"bytes,7,opt,name=owner_customer,json=ownerCustomer,proto3" json:"owner_customer,omitempty"`
+	// Whether this conversion action should be included in the "conversions"
+	// metric.
+	IncludeInConversionsMetric *wrappers.BoolValue `protobuf:"bytes,8,opt,name=include_in_conversions_metric,json=includeInConversionsMetric,proto3" json:"include_in_conversions_metric,omitempty"`
+	// The maximum number of days that may elapse between an interaction
+	// (e.g., a click) and a conversion event.
+	ClickThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,9,opt,name=click_through_lookback_window_days,json=clickThroughLookbackWindowDays,proto3" json:"click_through_lookback_window_days,omitempty"`
+	// The maximum number of days which may elapse between an impression and a
+	// conversion without an interaction.
+	ViewThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,10,opt,name=view_through_lookback_window_days,json=viewThroughLookbackWindowDays,proto3" json:"view_through_lookback_window_days,omitempty"`
+	// Settings related to the value for conversion events associated with this
+	// conversion action.
+	ValueSettings *ConversionAction_ValueSettings `protobuf:"bytes,11,opt,name=value_settings,json=valueSettings,proto3" json:"value_settings,omitempty"`
+	// How to count conversion events for the conversion action.
+	CountingType enums.ConversionActionCountingTypeEnum_ConversionActionCountingType `protobuf:"varint,12,opt,name=counting_type,json=countingType,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCountingTypeEnum_ConversionActionCountingType" json:"counting_type,omitempty"`
+	// Settings related to this conversion action's attribution model.
+	AttributionModelSettings *ConversionAction_AttributionModelSettings `protobuf:"bytes,13,opt,name=attribution_model_settings,json=attributionModelSettings,proto3" json:"attribution_model_settings,omitempty"`
+	// The snippets used for tracking conversions.
+	TagSnippets []*common.TagSnippet `protobuf:"bytes,14,rep,name=tag_snippets,json=tagSnippets,proto3" json:"tag_snippets,omitempty"`
+	// The phone call duration in seconds after which a conversion should be
+	// reported for this conversion action.
+	//
+	// The value must be between 0 and 10000, inclusive.
+	PhoneCallDurationSeconds *wrappers.Int64Value `protobuf:"bytes,15,opt,name=phone_call_duration_seconds,json=phoneCallDurationSeconds,proto3" json:"phone_call_duration_seconds,omitempty"`
+	// App ID for an app conversion action.
+	AppId                *wrappers.StringValue `protobuf:"bytes,16,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ConversionAction) Reset()         { *m = ConversionAction{} }
+func (m *ConversionAction) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction) ProtoMessage()    {}
+func (*ConversionAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_be3d6bc96d205b0d, []int{0}
+}
+
+func (m *ConversionAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction.Unmarshal(m, b)
+}
+func (m *ConversionAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction.Marshal(b, m, deterministic)
+}
+func (m *ConversionAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction.Merge(m, src)
+}
+func (m *ConversionAction) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction.Size(m)
+}
+func (m *ConversionAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction proto.InternalMessageInfo
+
+func (m *ConversionAction) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ConversionAction) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetStatus() enums.ConversionActionStatusEnum_ConversionActionStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ConversionActionStatusEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetType() enums.ConversionActionTypeEnum_ConversionActionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ConversionActionTypeEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetCategory() enums.ConversionActionCategoryEnum_ConversionActionCategory {
+	if m != nil {
+		return m.Category
+	}
+	return enums.ConversionActionCategoryEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetOwnerCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.OwnerCustomer
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetIncludeInConversionsMetric() *wrappers.BoolValue {
+	if m != nil {
+		return m.IncludeInConversionsMetric
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetClickThroughLookbackWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.ClickThroughLookbackWindowDays
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetViewThroughLookbackWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.ViewThroughLookbackWindowDays
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetValueSettings() *ConversionAction_ValueSettings {
+	if m != nil {
+		return m.ValueSettings
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetCountingType() enums.ConversionActionCountingTypeEnum_ConversionActionCountingType {
+	if m != nil {
+		return m.CountingType
+	}
+	return enums.ConversionActionCountingTypeEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetAttributionModelSettings() *ConversionAction_AttributionModelSettings {
+	if m != nil {
+		return m.AttributionModelSettings
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetTagSnippets() []*common.TagSnippet {
+	if m != nil {
+		return m.TagSnippets
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetPhoneCallDurationSeconds() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneCallDurationSeconds
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+// Settings related to this conversion action's attribution model.
+type ConversionAction_AttributionModelSettings struct {
+	// The attribution model type of this conversion action.
+	AttributionModel enums.AttributionModelEnum_AttributionModel `protobuf:"varint,1,opt,name=attribution_model,json=attributionModel,proto3,enum=google.ads.googleads.v3.enums.AttributionModelEnum_AttributionModel" json:"attribution_model,omitempty"`
+	// The status of the data-driven attribution model for the conversion
+	// action.
+	DataDrivenModelStatus enums.DataDrivenModelStatusEnum_DataDrivenModelStatus `protobuf:"varint,2,opt,name=data_driven_model_status,json=dataDrivenModelStatus,proto3,enum=google.ads.googleads.v3.enums.DataDrivenModelStatusEnum_DataDrivenModelStatus" json:"data_driven_model_status,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                                              `json:"-"`
+	XXX_unrecognized      []byte                                                `json:"-"`
+	XXX_sizecache         int32                                                 `json:"-"`
+}
+
+func (m *ConversionAction_AttributionModelSettings) Reset() {
+	*m = ConversionAction_AttributionModelSettings{}
+}
+func (m *ConversionAction_AttributionModelSettings) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction_AttributionModelSettings) ProtoMessage()    {}
+func (*ConversionAction_AttributionModelSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_be3d6bc96d205b0d, []int{0, 0}
+}
+
+func (m *ConversionAction_AttributionModelSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Unmarshal(m, b)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Marshal(b, m, deterministic)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction_AttributionModelSettings.Merge(m, src)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Size(m)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction_AttributionModelSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction_AttributionModelSettings proto.InternalMessageInfo
+
+func (m *ConversionAction_AttributionModelSettings) GetAttributionModel() enums.AttributionModelEnum_AttributionModel {
+	if m != nil {
+		return m.AttributionModel
+	}
+	return enums.AttributionModelEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction_AttributionModelSettings) GetDataDrivenModelStatus() enums.DataDrivenModelStatusEnum_DataDrivenModelStatus {
+	if m != nil {
+		return m.DataDrivenModelStatus
+	}
+	return enums.DataDrivenModelStatusEnum_UNSPECIFIED
+}
+
+// Settings related to the value for conversion events associated with this
+// conversion action.
+type ConversionAction_ValueSettings struct {
+	// The value to use when conversion events for this conversion action are
+	// sent with an invalid, disallowed or missing value, or when
+	// this conversion action is configured to always use the default value.
+	DefaultValue *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
+	// The currency code to use when conversion events for this conversion
+	// action are sent with an invalid or missing currency code, or when this
+	// conversion action is configured to always use the default value.
+	DefaultCurrencyCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=default_currency_code,json=defaultCurrencyCode,proto3" json:"default_currency_code,omitempty"`
+	// Controls whether the default value and default currency code are used in
+	// place of the value and currency code specified in conversion events for
+	// this conversion action.
+	AlwaysUseDefaultValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=always_use_default_value,json=alwaysUseDefaultValue,proto3" json:"always_use_default_value,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}            `json:"-"`
+	XXX_unrecognized      []byte              `json:"-"`
+	XXX_sizecache         int32               `json:"-"`
+}
+
+func (m *ConversionAction_ValueSettings) Reset()         { *m = ConversionAction_ValueSettings{} }
+func (m *ConversionAction_ValueSettings) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction_ValueSettings) ProtoMessage()    {}
+func (*ConversionAction_ValueSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_be3d6bc96d205b0d, []int{0, 1}
+}
+
+func (m *ConversionAction_ValueSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Unmarshal(m, b)
+}
+func (m *ConversionAction_ValueSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Marshal(b, m, deterministic)
+}
+func (m *ConversionAction_ValueSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction_ValueSettings.Merge(m, src)
+}
+func (m *ConversionAction_ValueSettings) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Size(m)
+}
+func (m *ConversionAction_ValueSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction_ValueSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction_ValueSettings proto.InternalMessageInfo
+
+func (m *ConversionAction_ValueSettings) GetDefaultValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.DefaultValue
+	}
+	return nil
+}
+
+func (m *ConversionAction_ValueSettings) GetDefaultCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.DefaultCurrencyCode
+	}
+	return nil
+}
+
+func (m *ConversionAction_ValueSettings) GetAlwaysUseDefaultValue() *wrappers.BoolValue {
+	if m != nil {
+		return m.AlwaysUseDefaultValue
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ConversionAction)(nil), "google.ads.googleads.v3.resources.ConversionAction")
+	proto.RegisterType((*ConversionAction_AttributionModelSettings)(nil), "google.ads.googleads.v3.resources.ConversionAction.AttributionModelSettings")
+	proto.RegisterType((*ConversionAction_ValueSettings)(nil), "google.ads.googleads.v3.resources.ConversionAction.ValueSettings")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/conversion_action.proto", fileDescriptor_be3d6bc96d205b0d)
+}
+
+var fileDescriptor_be3d6bc96d205b0d = []byte{
+	// 1013 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdf, 0x6e, 0xe3, 0xc4,
+	0x17, 0x56, 0xd2, 0x6e, 0x7f, 0xbb, 0xd3, 0x26, 0xbf, 0x32, 0xa8, 0x92, 0xc9, 0xfe, 0x51, 0xbb,
+	0x68, 0xa5, 0x02, 0x92, 0xbd, 0x4a, 0x00, 0x09, 0x83, 0x90, 0xdc, 0x04, 0xad, 0x8a, 0xda, 0x55,
+	0xe5, 0x94, 0x22, 0xad, 0x82, 0x86, 0x89, 0x67, 0xd6, 0x31, 0xb5, 0x67, 0x8c, 0x67, 0x9c, 0x28,
+	0x42, 0x7b, 0x01, 0x37, 0x48, 0xbc, 0x00, 0xf7, 0x48, 0xdc, 0xf0, 0x28, 0x3c, 0xca, 0xbe, 0x01,
+	0x77, 0xc8, 0xe3, 0xb1, 0x93, 0x26, 0x71, 0xd3, 0x70, 0x37, 0xe3, 0x73, 0xbe, 0xef, 0x3b, 0xe7,
+	0xcc, 0x99, 0x39, 0x06, 0x9f, 0xf9, 0x9c, 0xfb, 0x21, 0xb5, 0x30, 0x11, 0x56, 0xbe, 0xcc, 0x56,
+	0xe3, 0x8e, 0x95, 0x50, 0xc1, 0xd3, 0xc4, 0xa3, 0xc2, 0xf2, 0x38, 0x1b, 0xd3, 0x44, 0x04, 0x9c,
+	0x21, 0xec, 0xc9, 0x80, 0x33, 0x33, 0x4e, 0xb8, 0xe4, 0xf0, 0x28, 0xf7, 0x37, 0x31, 0x11, 0x66,
+	0x09, 0x35, 0xc7, 0x1d, 0xb3, 0x84, 0xb6, 0x9e, 0x57, 0xb1, 0x7b, 0x3c, 0x8a, 0x38, 0xb3, 0x24,
+	0xf6, 0x91, 0x60, 0x41, 0x1c, 0x53, 0x99, 0x93, 0xb6, 0x3e, 0xa9, 0x42, 0x50, 0x96, 0x46, 0xc2,
+	0xc2, 0x52, 0x26, 0xc1, 0x30, 0xcd, 0xa2, 0x40, 0x11, 0x27, 0x34, 0xd4, 0xb0, 0x2f, 0x6f, 0x87,
+	0x2d, 0xa5, 0x80, 0x3c, 0x2c, 0xa9, 0xcf, 0x93, 0xa9, 0xc6, 0x77, 0x37, 0xc6, 0xf3, 0x94, 0xc9,
+	0x80, 0xf9, 0x48, 0x4e, 0x63, 0xaa, 0x49, 0xbe, 0xd8, 0x94, 0x44, 0x48, 0x2c, 0x53, 0xa1, 0xd1,
+	0xf6, 0xa6, 0xe8, 0xbb, 0x2b, 0x13, 0x2c, 0x31, 0x22, 0x49, 0x30, 0xa6, 0xba, 0x6a, 0x37, 0x95,
+	0xdf, 0x2b, 0xd0, 0x71, 0x50, 0x1e, 0xbb, 0x36, 0x3d, 0xd1, 0x26, 0xb5, 0x1b, 0xa6, 0xaf, 0xad,
+	0x49, 0x82, 0xe3, 0x98, 0x26, 0x05, 0xf4, 0xd1, 0x1c, 0x14, 0x33, 0xc6, 0x25, 0xce, 0x42, 0xd3,
+	0xd6, 0xa7, 0x7f, 0xee, 0x83, 0xfd, 0x6e, 0x19, 0xb7, 0xa3, 0xc2, 0x86, 0xef, 0x83, 0x46, 0x21,
+	0x82, 0x18, 0x8e, 0xa8, 0x51, 0x3b, 0xac, 0x1d, 0x3f, 0x70, 0xf7, 0x8a, 0x8f, 0x2f, 0x71, 0x44,
+	0xe1, 0x47, 0xa0, 0x1e, 0x10, 0xa3, 0x7e, 0x58, 0x3b, 0xde, 0x6d, 0x3f, 0xd4, 0xdd, 0x65, 0x16,
+	0x41, 0x98, 0xa7, 0x4c, 0x7e, 0xfa, 0xf1, 0x15, 0x0e, 0x53, 0xea, 0xd6, 0x03, 0x02, 0x9f, 0x83,
+	0x6d, 0x45, 0xb4, 0xa5, 0xdc, 0x1f, 0x2d, 0xb9, 0xf7, 0x65, 0x12, 0x30, 0x3f, 0xf7, 0x57, 0x9e,
+	0x70, 0x04, 0x76, 0xf2, 0x0a, 0x18, 0xdb, 0x87, 0xb5, 0xe3, 0x66, 0xfb, 0xc2, 0xac, 0xea, 0x65,
+	0x55, 0x40, 0x73, 0x31, 0x89, 0xbe, 0x02, 0x7f, 0xc5, 0xd2, 0xa8, 0xc2, 0xe4, 0x6a, 0x7e, 0xf8,
+	0x3d, 0xd8, 0xce, 0xce, 0xc9, 0xb8, 0xa7, 0x74, 0xce, 0x36, 0xd4, 0xb9, 0x9c, 0xc6, 0x74, 0xa5,
+	0x4a, 0x66, 0x70, 0x15, 0x33, 0x8c, 0xc1, 0xfd, 0xa2, 0x99, 0x8d, 0x1d, 0xa5, 0x72, 0xb9, 0xa1,
+	0x4a, 0x57, 0xc3, 0x57, 0x2a, 0x15, 0x46, 0xb7, 0x54, 0x81, 0x5d, 0xd0, 0xe4, 0x13, 0x46, 0x13,
+	0xe4, 0xa5, 0x42, 0xf2, 0x88, 0x26, 0xc6, 0xff, 0xee, 0x50, 0xf9, 0x86, 0xc2, 0x74, 0x35, 0x04,
+	0x7e, 0x07, 0x1e, 0x07, 0xcc, 0x0b, 0x53, 0x42, 0x51, 0x90, 0x5d, 0xa7, 0x42, 0x55, 0xa0, 0x88,
+	0xca, 0x24, 0xf0, 0x8c, 0xfb, 0x8a, 0xb3, 0xb5, 0xc4, 0x79, 0xc2, 0x79, 0x98, 0x33, 0xb6, 0x34,
+	0xc1, 0x29, 0x9b, 0x05, 0x2d, 0xce, 0x15, 0x1a, 0xfa, 0xe0, 0xa9, 0x17, 0x06, 0xde, 0x35, 0x92,
+	0xa3, 0x84, 0xa7, 0xfe, 0x08, 0x85, 0x9c, 0x5f, 0x0f, 0xb1, 0x77, 0x8d, 0x26, 0x01, 0x23, 0x7c,
+	0x82, 0x08, 0x9e, 0x0a, 0xe3, 0xc1, 0xfa, 0x06, 0x7b, 0xa2, 0x68, 0x2e, 0x73, 0x96, 0x33, 0x4d,
+	0xf2, 0xad, 0xe2, 0xe8, 0xe1, 0xa9, 0x80, 0x14, 0x1c, 0x8d, 0x03, 0x3a, 0xb9, 0x5d, 0x07, 0xac,
+	0xd7, 0x79, 0x9c, 0xb1, 0x54, 0xcb, 0x8c, 0x40, 0x73, 0x9c, 0xf9, 0x21, 0x41, 0x65, 0xf6, 0xee,
+	0x08, 0x63, 0x57, 0x71, 0x3a, 0xe6, 0xda, 0x57, 0x78, 0xe9, 0x48, 0x4d, 0xa5, 0xd8, 0xd7, 0x44,
+	0x6e, 0x63, 0x3c, 0xbf, 0x85, 0x3f, 0xd7, 0x40, 0xe3, 0xc6, 0xeb, 0x66, 0xec, 0xa9, 0xae, 0x1a,
+	0x6c, 0xda, 0x55, 0x9a, 0xa3, 0xb2, 0x87, 0xe7, 0x1d, 0xdc, 0x3d, 0x6f, 0x6e, 0x07, 0x7f, 0xab,
+	0x81, 0xd6, 0xd2, 0x53, 0x3f, 0x4b, 0xbd, 0xa1, 0x52, 0x3f, 0xfb, 0x2f, 0xa9, 0x3b, 0x33, 0xd6,
+	0xf3, 0x8c, 0xb4, 0xac, 0x82, 0x81, 0x2b, 0x2c, 0xf0, 0x1c, 0xec, 0xcd, 0xcd, 0x29, 0x61, 0x34,
+	0x0f, 0xb7, 0x8e, 0x77, 0xdb, 0x1f, 0x56, 0xaa, 0xe7, 0xb3, 0xcd, 0xbc, 0xc4, 0x7e, 0x3f, 0x87,
+	0xb8, 0xbb, 0xb2, 0x5c, 0x0b, 0xf8, 0x0a, 0x3c, 0x8c, 0x47, 0x9c, 0x51, 0xe4, 0xe1, 0x30, 0x44,
+	0x24, 0x4d, 0x70, 0x3e, 0x0b, 0xa8, 0xc7, 0x19, 0x11, 0xc6, 0xff, 0xd7, 0xb7, 0x8a, 0xa1, 0xf0,
+	0x5d, 0x1c, 0x86, 0x3d, 0x8d, 0xee, 0xe7, 0x60, 0xd8, 0x01, 0x3b, 0x38, 0x8e, 0x51, 0x40, 0x8c,
+	0xfd, 0x3b, 0xdc, 0xc8, 0x7b, 0x38, 0x8e, 0x4f, 0x49, 0xeb, 0xf7, 0x3a, 0x30, 0xaa, 0xca, 0x02,
+	0x7f, 0x04, 0xef, 0x2c, 0x1d, 0x84, 0x7a, 0xb1, 0x9b, 0xed, 0xde, 0x9a, 0x86, 0x58, 0xe4, 0x54,
+	0x4d, 0xb0, 0xf8, 0xd1, 0xdd, 0x5f, 0xac, 0x3b, 0xfc, 0xb5, 0x06, 0x8c, 0xaa, 0x89, 0xa5, 0x46,
+	0x42, 0xb3, 0xfd, 0x72, 0x8d, 0x74, 0x0f, 0x4b, 0xdc, 0x53, 0xe8, 0x3c, 0x9b, 0xd9, 0x73, 0xbd,
+	0xd2, 0xe2, 0x1e, 0x90, 0x55, 0x9f, 0x5b, 0xff, 0xd4, 0x40, 0xe3, 0xc6, 0x5d, 0x81, 0x0e, 0x68,
+	0x10, 0xfa, 0x1a, 0xa7, 0xa1, 0x44, 0xea, 0xd6, 0xa8, 0x52, 0xac, 0xaa, 0x73, 0x8f, 0xa7, 0xc3,
+	0x90, 0xe6, 0x75, 0xde, 0xd3, 0x10, 0xb5, 0x83, 0x17, 0xe0, 0xa0, 0xa0, 0xf0, 0xd2, 0x24, 0xa1,
+	0xcc, 0x9b, 0x22, 0x8f, 0x13, 0xaa, 0xa7, 0xdd, 0xed, 0x47, 0xf6, 0xae, 0x86, 0x76, 0x35, 0xb2,
+	0xcb, 0x09, 0x85, 0x7d, 0x60, 0xe0, 0x70, 0x82, 0xa7, 0x02, 0xa5, 0x82, 0xa2, 0x9b, 0xf1, 0x6d,
+	0xad, 0x7d, 0x45, 0x0f, 0x72, 0xec, 0x37, 0x82, 0xf6, 0xe6, 0xc2, 0xb4, 0x7f, 0x78, 0xeb, 0xf8,
+	0xe0, 0x83, 0x59, 0x6d, 0xf5, 0x2a, 0x0e, 0x44, 0xd6, 0xe0, 0xd6, 0xd2, 0x58, 0xb7, 0x8b, 0x61,
+	0x20, 0xac, 0x9f, 0x8a, 0xe5, 0x9b, 0xb9, 0xbf, 0x96, 0xdc, 0x2d, 0x33, 0x2e, 0xfe, 0xc8, 0xbc,
+	0x39, 0xf9, 0xa5, 0x0e, 0x9e, 0x79, 0x3c, 0x5a, 0x7f, 0x9f, 0x4f, 0x0e, 0x16, 0x75, 0x2f, 0xb2,
+	0x84, 0x2e, 0x6a, 0xaf, 0xbe, 0xd6, 0x58, 0x9f, 0x87, 0x98, 0xf9, 0x26, 0x4f, 0x7c, 0xcb, 0xa7,
+	0x4c, 0xa5, 0x6b, 0xcd, 0x42, 0xbf, 0xe5, 0x37, 0xf7, 0xf3, 0x72, 0xf5, 0x47, 0x7d, 0xeb, 0x85,
+	0xe3, 0xfc, 0x55, 0x3f, 0x7a, 0x91, 0x53, 0x3a, 0x44, 0x98, 0xf9, 0x32, 0x5b, 0x5d, 0x75, 0x4c,
+	0xb7, 0xf0, 0xfc, 0xbb, 0xf0, 0x19, 0x38, 0x44, 0x0c, 0x4a, 0x9f, 0xc1, 0x55, 0x67, 0x50, 0xfa,
+	0xbc, 0xad, 0x3f, 0xcb, 0x0d, 0xb6, 0xed, 0x10, 0x61, 0xdb, 0xa5, 0x97, 0x6d, 0x5f, 0x75, 0x6c,
+	0xbb, 0xf4, 0x1b, 0xee, 0xa8, 0x60, 0x3b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xcf, 0x6d,
+	0x1f, 0x92, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/currency_constant.pb.go b/googleapis/ads/googleads/v3/resources/currency_constant.pb.go
new file mode 100644
index 0000000..7b054ac
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/currency_constant.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/currency_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A currency constant.
+type CurrencyConstant struct {
+	// The resource name of the currency constant.
+	// Currency constant resource names have the form:
+	//
+	// `currencyConstants/{currency_code}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// ISO 4217 three-letter currency code, e.g. "USD"
+	Code *wrappers.StringValue `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`
+	// Full English name of the currency.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// Standard symbol for describing this currency, e.g. '$' for US Dollars.
+	Symbol *wrappers.StringValue `protobuf:"bytes,4,opt,name=symbol,proto3" json:"symbol,omitempty"`
+	// The billable unit for this currency. Billed amounts should be multiples of
+	// this value.
+	BillableUnitMicros   *wrappers.Int64Value `protobuf:"bytes,5,opt,name=billable_unit_micros,json=billableUnitMicros,proto3" json:"billable_unit_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CurrencyConstant) Reset()         { *m = CurrencyConstant{} }
+func (m *CurrencyConstant) String() string { return proto.CompactTextString(m) }
+func (*CurrencyConstant) ProtoMessage()    {}
+func (*CurrencyConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6f14d3d22f3007ad, []int{0}
+}
+
+func (m *CurrencyConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CurrencyConstant.Unmarshal(m, b)
+}
+func (m *CurrencyConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CurrencyConstant.Marshal(b, m, deterministic)
+}
+func (m *CurrencyConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CurrencyConstant.Merge(m, src)
+}
+func (m *CurrencyConstant) XXX_Size() int {
+	return xxx_messageInfo_CurrencyConstant.Size(m)
+}
+func (m *CurrencyConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_CurrencyConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CurrencyConstant proto.InternalMessageInfo
+
+func (m *CurrencyConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CurrencyConstant) GetCode() *wrappers.StringValue {
+	if m != nil {
+		return m.Code
+	}
+	return nil
+}
+
+func (m *CurrencyConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CurrencyConstant) GetSymbol() *wrappers.StringValue {
+	if m != nil {
+		return m.Symbol
+	}
+	return nil
+}
+
+func (m *CurrencyConstant) GetBillableUnitMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BillableUnitMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CurrencyConstant)(nil), "google.ads.googleads.v3.resources.CurrencyConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/currency_constant.proto", fileDescriptor_6f14d3d22f3007ad)
+}
+
+var fileDescriptor_6f14d3d22f3007ad = []byte{
+	// 420 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x8a, 0xd4, 0x30,
+	0x1c, 0xc6, 0x69, 0x77, 0x5d, 0x30, 0x2a, 0x48, 0x51, 0xa8, 0xeb, 0x22, 0xbb, 0xca, 0xc0, 0x7a,
+	0x49, 0xc4, 0x2e, 0x82, 0xf1, 0xd4, 0xdd, 0xc3, 0xa2, 0xb0, 0x32, 0x54, 0xa6, 0x07, 0x29, 0x94,
+	0x34, 0x8d, 0x25, 0xd0, 0x26, 0x25, 0x49, 0x47, 0x06, 0xf1, 0xe2, 0xa3, 0x78, 0xf4, 0x51, 0x7c,
+	0x94, 0x79, 0x01, 0xaf, 0xd2, 0x36, 0xcd, 0xc8, 0x0c, 0xb8, 0x73, 0xfb, 0x9a, 0xff, 0xf7, 0xfb,
+	0xf2, 0xb5, 0xff, 0x82, 0xb7, 0x95, 0x94, 0x55, 0xcd, 0x10, 0x29, 0x35, 0x1a, 0x65, 0xaf, 0x96,
+	0x11, 0x52, 0x4c, 0xcb, 0x4e, 0x51, 0xa6, 0x11, 0xed, 0x94, 0x62, 0x82, 0xae, 0x72, 0x2a, 0x85,
+	0x36, 0x44, 0x18, 0xd8, 0x2a, 0x69, 0x64, 0x70, 0x36, 0xfa, 0x21, 0x29, 0x35, 0x74, 0x28, 0x5c,
+	0x46, 0xd0, 0xa1, 0xc7, 0x4f, 0xa6, 0xf4, 0x96, 0xbb, 0xc0, 0x91, 0x3e, 0x7e, 0x66, 0x47, 0xc3,
+	0x53, 0xd1, 0x7d, 0x41, 0x5f, 0x15, 0x69, 0x5b, 0xa6, 0xb4, 0x9d, 0x9f, 0xfc, 0x83, 0x12, 0x21,
+	0xa4, 0x21, 0x86, 0x4b, 0x61, 0xa7, 0xcf, 0xff, 0xf8, 0xe0, 0xe1, 0x95, 0xed, 0x75, 0x65, 0x6b,
+	0x05, 0x2f, 0xc0, 0x83, 0xe9, 0x92, 0x5c, 0x90, 0x86, 0x85, 0xde, 0xa9, 0x77, 0x7e, 0x37, 0xb9,
+	0x3f, 0x1d, 0x7e, 0x24, 0x0d, 0x0b, 0x5e, 0x81, 0x43, 0x2a, 0x4b, 0x16, 0xfa, 0xa7, 0xde, 0xf9,
+	0xbd, 0xd7, 0x27, 0xb6, 0x39, 0x9c, 0x6a, 0xc0, 0x4f, 0x46, 0x71, 0x51, 0xa5, 0xa4, 0xee, 0x58,
+	0x32, 0x38, 0x7b, 0x62, 0x48, 0x3b, 0xd8, 0x87, 0xe8, 0x9d, 0xc1, 0x05, 0x38, 0xd2, 0xab, 0xa6,
+	0x90, 0x75, 0x78, 0xb8, 0x07, 0x63, 0xbd, 0xc1, 0x0d, 0x78, 0x54, 0xf0, 0xba, 0x26, 0x45, 0xcd,
+	0xf2, 0x4e, 0x70, 0x93, 0x37, 0x9c, 0x2a, 0xa9, 0xc3, 0x3b, 0x43, 0xc6, 0xd3, 0x9d, 0x8c, 0xf7,
+	0xc2, 0xbc, 0xb9, 0x18, 0x23, 0x82, 0x09, 0x5c, 0x08, 0x6e, 0x6e, 0x06, 0x0c, 0x2f, 0xd6, 0x71,
+	0x02, 0x5e, 0x6e, 0x16, 0x63, 0x55, 0xcb, 0x35, 0xa4, 0xb2, 0x41, 0x3b, 0x5f, 0x6f, 0x46, 0xb7,
+	0x4e, 0x34, 0xfa, 0xb6, 0xb3, 0xfa, 0xef, 0x97, 0x3f, 0x7c, 0x30, 0xa3, 0xb2, 0x81, 0xb7, 0x2e,
+	0xff, 0xf2, 0xf1, 0xf6, 0x15, 0xf3, 0xbe, 0xf9, 0xdc, 0xfb, 0xfc, 0xc1, 0xb2, 0x95, 0xac, 0x89,
+	0xa8, 0xa0, 0x54, 0x15, 0xaa, 0x98, 0x18, 0xde, 0x0b, 0x6d, 0x5a, 0xfe, 0xe7, 0x97, 0x7c, 0xe7,
+	0xd4, 0x4f, 0xff, 0xe0, 0x3a, 0x8e, 0x7f, 0xf9, 0x67, 0xd7, 0x63, 0x64, 0x5c, 0x6a, 0x38, 0xca,
+	0x5e, 0xa5, 0x11, 0x4c, 0x26, 0xe7, 0xef, 0xc9, 0x93, 0xc5, 0xa5, 0xce, 0x9c, 0x27, 0x4b, 0xa3,
+	0xcc, 0x79, 0xd6, 0xfe, 0x6c, 0x1c, 0x60, 0x1c, 0x97, 0x1a, 0x63, 0xe7, 0xc2, 0x38, 0x8d, 0x30,
+	0x76, 0xbe, 0xe2, 0x68, 0x28, 0x1b, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xcd, 0xaa, 0xb5,
+	0x3e, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/custom_interest.pb.go b/googleapis/ads/googleads/v3/resources/custom_interest.pb.go
new file mode 100644
index 0000000..9fed781
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/custom_interest.pb.go
@@ -0,0 +1,230 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/custom_interest.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A custom interest. This is a list of users by interest.
+type CustomInterest struct {
+	// The resource name of the custom interest.
+	// Custom interest resource names have the form:
+	//
+	// `customers/{customer_id}/customInterests/{custom_interest_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Id of the custom interest.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Status of this custom interest. Indicates whether the custom interest is
+	// enabled or removed.
+	Status enums.CustomInterestStatusEnum_CustomInterestStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.CustomInterestStatusEnum_CustomInterestStatus" json:"status,omitempty"`
+	// Name of the custom interest. It should be unique across the same custom
+	// affinity audience.
+	// This field is required for create operations.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// Type of the custom interest, CUSTOM_AFFINITY or CUSTOM_INTENT.
+	// By default the type is set to CUSTOM_AFFINITY.
+	Type enums.CustomInterestTypeEnum_CustomInterestType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.CustomInterestTypeEnum_CustomInterestType" json:"type,omitempty"`
+	// Description of this custom interest audience.
+	Description *wrappers.StringValue `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"`
+	// List of custom interest members that this custom interest is composed of.
+	// Members can be added during CustomInterest creation. If members are
+	// presented in UPDATE operation, existing members will be overridden.
+	Members              []*CustomInterestMember `protobuf:"bytes,7,rep,name=members,proto3" json:"members,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *CustomInterest) Reset()         { *m = CustomInterest{} }
+func (m *CustomInterest) String() string { return proto.CompactTextString(m) }
+func (*CustomInterest) ProtoMessage()    {}
+func (*CustomInterest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_440649afc3ab8fa9, []int{0}
+}
+
+func (m *CustomInterest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterest.Unmarshal(m, b)
+}
+func (m *CustomInterest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterest.Marshal(b, m, deterministic)
+}
+func (m *CustomInterest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterest.Merge(m, src)
+}
+func (m *CustomInterest) XXX_Size() int {
+	return xxx_messageInfo_CustomInterest.Size(m)
+}
+func (m *CustomInterest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterest proto.InternalMessageInfo
+
+func (m *CustomInterest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomInterest) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CustomInterest) GetStatus() enums.CustomInterestStatusEnum_CustomInterestStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CustomInterestStatusEnum_UNSPECIFIED
+}
+
+func (m *CustomInterest) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CustomInterest) GetType() enums.CustomInterestTypeEnum_CustomInterestType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CustomInterestTypeEnum_UNSPECIFIED
+}
+
+func (m *CustomInterest) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *CustomInterest) GetMembers() []*CustomInterestMember {
+	if m != nil {
+		return m.Members
+	}
+	return nil
+}
+
+// A member of custom interest audience. A member can be a keyword or url.
+// It is immutable, that is, it can only be created or removed but not changed.
+type CustomInterestMember struct {
+	// The type of custom interest member, KEYWORD or URL.
+	MemberType enums.CustomInterestMemberTypeEnum_CustomInterestMemberType `protobuf:"varint,1,opt,name=member_type,json=memberType,proto3,enum=google.ads.googleads.v3.enums.CustomInterestMemberTypeEnum_CustomInterestMemberType" json:"member_type,omitempty"`
+	// Keyword text when member_type is KEYWORD or URL string when
+	// member_type is URL.
+	Parameter            *wrappers.StringValue `protobuf:"bytes,2,opt,name=parameter,proto3" json:"parameter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomInterestMember) Reset()         { *m = CustomInterestMember{} }
+func (m *CustomInterestMember) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestMember) ProtoMessage()    {}
+func (*CustomInterestMember) Descriptor() ([]byte, []int) {
+	return fileDescriptor_440649afc3ab8fa9, []int{1}
+}
+
+func (m *CustomInterestMember) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestMember.Unmarshal(m, b)
+}
+func (m *CustomInterestMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestMember.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestMember) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestMember.Merge(m, src)
+}
+func (m *CustomInterestMember) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestMember.Size(m)
+}
+func (m *CustomInterestMember) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestMember.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestMember proto.InternalMessageInfo
+
+func (m *CustomInterestMember) GetMemberType() enums.CustomInterestMemberTypeEnum_CustomInterestMemberType {
+	if m != nil {
+		return m.MemberType
+	}
+	return enums.CustomInterestMemberTypeEnum_UNSPECIFIED
+}
+
+func (m *CustomInterestMember) GetParameter() *wrappers.StringValue {
+	if m != nil {
+		return m.Parameter
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomInterest)(nil), "google.ads.googleads.v3.resources.CustomInterest")
+	proto.RegisterType((*CustomInterestMember)(nil), "google.ads.googleads.v3.resources.CustomInterestMember")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/custom_interest.proto", fileDescriptor_440649afc3ab8fa9)
+}
+
+var fileDescriptor_440649afc3ab8fa9 = []byte{
+	// 563 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xd1, 0x6a, 0x13, 0x4d,
+	0x18, 0x65, 0x37, 0xf9, 0x53, 0x3a, 0xf9, 0xcd, 0xc5, 0xea, 0xc5, 0x5a, 0x8b, 0xa4, 0x95, 0x62,
+	0x40, 0x98, 0x95, 0xac, 0xb4, 0xb2, 0x82, 0xb2, 0x15, 0xa9, 0x15, 0x95, 0xba, 0x2d, 0xb9, 0x90,
+	0x40, 0x98, 0x64, 0xc7, 0x65, 0x21, 0x33, 0xb3, 0xcc, 0xcc, 0x56, 0x8a, 0x14, 0x7c, 0x16, 0x2f,
+	0x7d, 0x13, 0xbd, 0xf3, 0x35, 0xfa, 0x14, 0xb2, 0x33, 0xb3, 0x93, 0xb4, 0x4d, 0x5a, 0x73, 0xf7,
+	0x65, 0xbf, 0x73, 0xce, 0x77, 0x38, 0x7b, 0xb2, 0x60, 0x2f, 0x63, 0x2c, 0x9b, 0xe2, 0x00, 0xa5,
+	0x22, 0xd0, 0x63, 0x35, 0x9d, 0x86, 0x01, 0xc7, 0x82, 0x95, 0x7c, 0x82, 0x45, 0x30, 0x29, 0x85,
+	0x64, 0x64, 0x94, 0x53, 0x89, 0x39, 0x16, 0x12, 0x16, 0x9c, 0x49, 0xe6, 0x6d, 0x69, 0x34, 0x44,
+	0xa9, 0x80, 0x96, 0x08, 0x4f, 0x43, 0x68, 0x89, 0x1b, 0xaf, 0x96, 0x69, 0x63, 0x5a, 0x92, 0x6b,
+	0xba, 0x23, 0x82, 0xc9, 0x18, 0xf3, 0x91, 0x3c, 0x2b, 0xb0, 0xbe, 0xb1, 0x11, 0xad, 0x26, 0x20,
+	0x24, 0x92, 0xa5, 0x30, 0xdc, 0xe7, 0xab, 0x71, 0xe7, 0xae, 0xde, 0xaf, 0x99, 0x45, 0x6e, 0x53,
+	0x30, 0xab, 0x87, 0x66, 0xa5, 0x7e, 0x8d, 0xcb, 0x2f, 0xc1, 0x57, 0x8e, 0x8a, 0x02, 0xf3, 0xfa,
+	0xe8, 0xe6, 0x1c, 0x15, 0x51, 0xca, 0x24, 0x92, 0x39, 0xa3, 0x66, 0xbb, 0xfd, 0xa7, 0x09, 0x3a,
+	0xaf, 0xd5, 0xdd, 0x43, 0x73, 0xd6, 0x7b, 0x04, 0xee, 0xd4, 0x27, 0x46, 0x14, 0x11, 0xec, 0x3b,
+	0x5d, 0xa7, 0xb7, 0x9e, 0xfc, 0x5f, 0x3f, 0xfc, 0x88, 0x08, 0xf6, 0x9e, 0x00, 0x37, 0x4f, 0x7d,
+	0xb7, 0xeb, 0xf4, 0xda, 0xfd, 0x07, 0x26, 0x6c, 0x58, 0x5b, 0x80, 0x87, 0x54, 0xee, 0x3e, 0x1b,
+	0xa0, 0x69, 0x89, 0x13, 0x37, 0x4f, 0xbd, 0x14, 0xb4, 0x74, 0x0e, 0x7e, 0xa3, 0xeb, 0xf4, 0x3a,
+	0xfd, 0xf7, 0x70, 0xd9, 0x8b, 0x52, 0x41, 0xc0, 0xcb, 0x86, 0x8e, 0x15, 0xf5, 0x0d, 0x2d, 0xc9,
+	0xc2, 0x45, 0x62, 0xb4, 0xbd, 0xa7, 0xa0, 0xa9, 0xec, 0x36, 0x95, 0xa9, 0xcd, 0x6b, 0xa6, 0x8e,
+	0x25, 0xcf, 0x69, 0xa6, 0x5d, 0x29, 0xa4, 0x37, 0x04, 0xcd, 0x2a, 0x63, 0xff, 0x3f, 0xe5, 0xea,
+	0xed, 0x4a, 0xae, 0x4e, 0xce, 0x0a, 0xbc, 0xc0, 0x53, 0xf5, 0x38, 0x51, 0xaa, 0xde, 0x4b, 0xd0,
+	0x4e, 0xb1, 0x98, 0xf0, 0xbc, 0xa8, 0x02, 0xf7, 0x5b, 0xff, 0x60, 0x6b, 0x9e, 0xe0, 0x7d, 0x02,
+	0x6b, 0xba, 0x7e, 0xc2, 0x5f, 0xeb, 0x36, 0x7a, 0xed, 0xfe, 0x1e, 0xbc, 0xb5, 0xdf, 0x57, 0xdc,
+	0x7c, 0x50, 0xfc, 0xa4, 0xd6, 0x89, 0xd2, 0x8b, 0x18, 0x81, 0xc7, 0x33, 0xaa, 0x99, 0x8a, 0x5c,
+	0xc0, 0x09, 0x23, 0xc1, 0x95, 0x22, 0xec, 0xea, 0x42, 0x62, 0x2e, 0x82, 0x6f, 0xf5, 0x78, 0x6e,
+	0x5a, 0x5a, 0x83, 0xec, 0xca, 0xd6, 0xf6, 0x7c, 0xfb, 0x97, 0x03, 0xee, 0x2d, 0xf2, 0xe1, 0x95,
+	0xa0, 0x3d, 0xf7, 0x87, 0x52, 0xbd, 0xea, 0xf4, 0x4f, 0x56, 0x8a, 0x5d, 0x2b, 0x2d, 0x09, 0x7f,
+	0xb6, 0x4c, 0x00, 0xb1, 0xb3, 0x17, 0x81, 0xf5, 0x02, 0x71, 0x44, 0xb0, 0xc4, 0xdc, 0x54, 0xf6,
+	0xe6, 0xd7, 0x30, 0x83, 0xef, 0x7f, 0x77, 0xc1, 0xce, 0x84, 0x91, 0xdb, 0x93, 0xdf, 0xbf, 0x7b,
+	0xd9, 0xcb, 0x51, 0x25, 0x7c, 0xe4, 0x7c, 0x7e, 0x67, 0x98, 0x19, 0x9b, 0x22, 0x9a, 0x41, 0xc6,
+	0xb3, 0x20, 0xc3, 0x54, 0x9d, 0x0d, 0x66, 0xf1, 0xdf, 0xf0, 0xad, 0x7b, 0x61, 0xa7, 0x1f, 0x6e,
+	0xe3, 0x20, 0x8e, 0x7f, 0xba, 0x5b, 0x07, 0x5a, 0x32, 0x4e, 0x05, 0xd4, 0x63, 0x35, 0x0d, 0x42,
+	0x98, 0xd4, 0xc8, 0xdf, 0x35, 0x66, 0x18, 0xa7, 0x62, 0x68, 0x31, 0xc3, 0x41, 0x38, 0xb4, 0x98,
+	0x0b, 0x77, 0x47, 0x2f, 0xa2, 0x28, 0x4e, 0x45, 0x14, 0x59, 0x54, 0x14, 0x0d, 0xc2, 0x28, 0xb2,
+	0xb8, 0x71, 0x4b, 0x99, 0x0d, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xef, 0xee, 0x77, 0x97,
+	0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer.pb.go b/googleapis/ads/googleads/v3/resources/customer.pb.go
new file mode 100644
index 0000000..ffbae07
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer.pb.go
@@ -0,0 +1,431 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A customer.
+type Customer struct {
+	// The resource name of the customer.
+	// Customer resource names have the form:
+	//
+	// `customers/{customer_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the customer.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Optional, non-unique descriptive name of the customer.
+	DescriptiveName *wrappers.StringValue `protobuf:"bytes,4,opt,name=descriptive_name,json=descriptiveName,proto3" json:"descriptive_name,omitempty"`
+	// The currency in which the account operates.
+	// A subset of the currency codes from the ISO 4217 standard is
+	// supported.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// The local timezone ID of the customer.
+	TimeZone *wrappers.StringValue `protobuf:"bytes,6,opt,name=time_zone,json=timeZone,proto3" json:"time_zone,omitempty"`
+	// The URL template for constructing a tracking URL out of parameters.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,7,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The URL template for appending params to the final URL
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,11,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// Whether auto-tagging is enabled for the customer.
+	AutoTaggingEnabled *wrappers.BoolValue `protobuf:"bytes,8,opt,name=auto_tagging_enabled,json=autoTaggingEnabled,proto3" json:"auto_tagging_enabled,omitempty"`
+	// Whether the Customer has a Partners program badge. If the Customer is not
+	// associated with the Partners program, this will be false. For more
+	// information, see https://support.google.com/partners/answer/3125774.
+	HasPartnersBadge *wrappers.BoolValue `protobuf:"bytes,9,opt,name=has_partners_badge,json=hasPartnersBadge,proto3" json:"has_partners_badge,omitempty"`
+	// Whether the customer is a manager.
+	Manager *wrappers.BoolValue `protobuf:"bytes,12,opt,name=manager,proto3" json:"manager,omitempty"`
+	// Whether the customer is a test account.
+	TestAccount *wrappers.BoolValue `protobuf:"bytes,13,opt,name=test_account,json=testAccount,proto3" json:"test_account,omitempty"`
+	// Call reporting setting for a customer.
+	CallReportingSetting *CallReportingSetting `protobuf:"bytes,10,opt,name=call_reporting_setting,json=callReportingSetting,proto3" json:"call_reporting_setting,omitempty"`
+	// Conversion tracking setting for a customer.
+	ConversionTrackingSetting *ConversionTrackingSetting `protobuf:"bytes,14,opt,name=conversion_tracking_setting,json=conversionTrackingSetting,proto3" json:"conversion_tracking_setting,omitempty"`
+	// Remarketing setting for a customer.
+	RemarketingSetting *RemarketingSetting `protobuf:"bytes,15,opt,name=remarketing_setting,json=remarketingSetting,proto3" json:"remarketing_setting,omitempty"`
+	// Reasons why the customer is not eligible to use PaymentMode.CONVERSIONS. If
+	// the list is empty, the customer is eligible. This field is read-only.
+	PayPerConversionEligibilityFailureReasons []enums.CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason `protobuf:"varint,16,rep,packed,name=pay_per_conversion_eligibility_failure_reasons,json=payPerConversionEligibilityFailureReasons,proto3,enum=google.ads.googleads.v3.enums.CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason" json:"pay_per_conversion_eligibility_failure_reasons,omitempty"`
+	XXX_NoUnkeyedLiteral                      struct{}                                                                                                      `json:"-"`
+	XXX_unrecognized                          []byte                                                                                                        `json:"-"`
+	XXX_sizecache                             int32                                                                                                         `json:"-"`
+}
+
+func (m *Customer) Reset()         { *m = Customer{} }
+func (m *Customer) String() string { return proto.CompactTextString(m) }
+func (*Customer) ProtoMessage()    {}
+func (*Customer) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1221f0b49b42ae61, []int{0}
+}
+
+func (m *Customer) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Customer.Unmarshal(m, b)
+}
+func (m *Customer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Customer.Marshal(b, m, deterministic)
+}
+func (m *Customer) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Customer.Merge(m, src)
+}
+func (m *Customer) XXX_Size() int {
+	return xxx_messageInfo_Customer.Size(m)
+}
+func (m *Customer) XXX_DiscardUnknown() {
+	xxx_messageInfo_Customer.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Customer proto.InternalMessageInfo
+
+func (m *Customer) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Customer) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Customer) GetDescriptiveName() *wrappers.StringValue {
+	if m != nil {
+		return m.DescriptiveName
+	}
+	return nil
+}
+
+func (m *Customer) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *Customer) GetTimeZone() *wrappers.StringValue {
+	if m != nil {
+		return m.TimeZone
+	}
+	return nil
+}
+
+func (m *Customer) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Customer) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *Customer) GetAutoTaggingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.AutoTaggingEnabled
+	}
+	return nil
+}
+
+func (m *Customer) GetHasPartnersBadge() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasPartnersBadge
+	}
+	return nil
+}
+
+func (m *Customer) GetManager() *wrappers.BoolValue {
+	if m != nil {
+		return m.Manager
+	}
+	return nil
+}
+
+func (m *Customer) GetTestAccount() *wrappers.BoolValue {
+	if m != nil {
+		return m.TestAccount
+	}
+	return nil
+}
+
+func (m *Customer) GetCallReportingSetting() *CallReportingSetting {
+	if m != nil {
+		return m.CallReportingSetting
+	}
+	return nil
+}
+
+func (m *Customer) GetConversionTrackingSetting() *ConversionTrackingSetting {
+	if m != nil {
+		return m.ConversionTrackingSetting
+	}
+	return nil
+}
+
+func (m *Customer) GetRemarketingSetting() *RemarketingSetting {
+	if m != nil {
+		return m.RemarketingSetting
+	}
+	return nil
+}
+
+func (m *Customer) GetPayPerConversionEligibilityFailureReasons() []enums.CustomerPayPerConversionEligibilityFailureReasonEnum_CustomerPayPerConversionEligibilityFailureReason {
+	if m != nil {
+		return m.PayPerConversionEligibilityFailureReasons
+	}
+	return nil
+}
+
+// Call reporting setting for a customer.
+type CallReportingSetting struct {
+	// Enable reporting of phone call events by redirecting them via Google
+	// System.
+	CallReportingEnabled *wrappers.BoolValue `protobuf:"bytes,1,opt,name=call_reporting_enabled,json=callReportingEnabled,proto3" json:"call_reporting_enabled,omitempty"`
+	// Whether to enable call conversion reporting.
+	CallConversionReportingEnabled *wrappers.BoolValue `protobuf:"bytes,2,opt,name=call_conversion_reporting_enabled,json=callConversionReportingEnabled,proto3" json:"call_conversion_reporting_enabled,omitempty"`
+	// Customer-level call conversion action to attribute a call conversion to.
+	// If not set a default conversion action is used. Only in effect when
+	// call_conversion_reporting_enabled is set to true.
+	CallConversionAction *wrappers.StringValue `protobuf:"bytes,9,opt,name=call_conversion_action,json=callConversionAction,proto3" json:"call_conversion_action,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CallReportingSetting) Reset()         { *m = CallReportingSetting{} }
+func (m *CallReportingSetting) String() string { return proto.CompactTextString(m) }
+func (*CallReportingSetting) ProtoMessage()    {}
+func (*CallReportingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1221f0b49b42ae61, []int{1}
+}
+
+func (m *CallReportingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallReportingSetting.Unmarshal(m, b)
+}
+func (m *CallReportingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallReportingSetting.Marshal(b, m, deterministic)
+}
+func (m *CallReportingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallReportingSetting.Merge(m, src)
+}
+func (m *CallReportingSetting) XXX_Size() int {
+	return xxx_messageInfo_CallReportingSetting.Size(m)
+}
+func (m *CallReportingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallReportingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallReportingSetting proto.InternalMessageInfo
+
+func (m *CallReportingSetting) GetCallReportingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallReportingEnabled
+	}
+	return nil
+}
+
+func (m *CallReportingSetting) GetCallConversionReportingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallConversionReportingEnabled
+	}
+	return nil
+}
+
+func (m *CallReportingSetting) GetCallConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.CallConversionAction
+	}
+	return nil
+}
+
+// A collection of customer-wide settings related to Google Ads Conversion
+// Tracking.
+type ConversionTrackingSetting struct {
+	// The conversion tracking id used for this account. This id is automatically
+	// assigned after any conversion tracking feature is used. If the customer
+	// doesn't use conversion tracking, this is 0. This field is read-only.
+	ConversionTrackingId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=conversion_tracking_id,json=conversionTrackingId,proto3" json:"conversion_tracking_id,omitempty"`
+	// The conversion tracking id of the customer's manager. This is set when the
+	// customer is opted into cross account conversion tracking, and it overrides
+	// conversion_tracking_id. This field can only be managed through the Google
+	// Ads UI. This field is read-only.
+	CrossAccountConversionTrackingId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cross_account_conversion_tracking_id,json=crossAccountConversionTrackingId,proto3" json:"cross_account_conversion_tracking_id,omitempty"`
+	XXX_NoUnkeyedLiteral             struct{}             `json:"-"`
+	XXX_unrecognized                 []byte               `json:"-"`
+	XXX_sizecache                    int32                `json:"-"`
+}
+
+func (m *ConversionTrackingSetting) Reset()         { *m = ConversionTrackingSetting{} }
+func (m *ConversionTrackingSetting) String() string { return proto.CompactTextString(m) }
+func (*ConversionTrackingSetting) ProtoMessage()    {}
+func (*ConversionTrackingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1221f0b49b42ae61, []int{2}
+}
+
+func (m *ConversionTrackingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionTrackingSetting.Unmarshal(m, b)
+}
+func (m *ConversionTrackingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionTrackingSetting.Marshal(b, m, deterministic)
+}
+func (m *ConversionTrackingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionTrackingSetting.Merge(m, src)
+}
+func (m *ConversionTrackingSetting) XXX_Size() int {
+	return xxx_messageInfo_ConversionTrackingSetting.Size(m)
+}
+func (m *ConversionTrackingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionTrackingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionTrackingSetting proto.InternalMessageInfo
+
+func (m *ConversionTrackingSetting) GetConversionTrackingId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ConversionTrackingId
+	}
+	return nil
+}
+
+func (m *ConversionTrackingSetting) GetCrossAccountConversionTrackingId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CrossAccountConversionTrackingId
+	}
+	return nil
+}
+
+// Remarketing setting for a customer.
+type RemarketingSetting struct {
+	// The Google global site tag.
+	GoogleGlobalSiteTag  *wrappers.StringValue `protobuf:"bytes,1,opt,name=google_global_site_tag,json=googleGlobalSiteTag,proto3" json:"google_global_site_tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *RemarketingSetting) Reset()         { *m = RemarketingSetting{} }
+func (m *RemarketingSetting) String() string { return proto.CompactTextString(m) }
+func (*RemarketingSetting) ProtoMessage()    {}
+func (*RemarketingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1221f0b49b42ae61, []int{3}
+}
+
+func (m *RemarketingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RemarketingSetting.Unmarshal(m, b)
+}
+func (m *RemarketingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RemarketingSetting.Marshal(b, m, deterministic)
+}
+func (m *RemarketingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RemarketingSetting.Merge(m, src)
+}
+func (m *RemarketingSetting) XXX_Size() int {
+	return xxx_messageInfo_RemarketingSetting.Size(m)
+}
+func (m *RemarketingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_RemarketingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RemarketingSetting proto.InternalMessageInfo
+
+func (m *RemarketingSetting) GetGoogleGlobalSiteTag() *wrappers.StringValue {
+	if m != nil {
+		return m.GoogleGlobalSiteTag
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Customer)(nil), "google.ads.googleads.v3.resources.Customer")
+	proto.RegisterType((*CallReportingSetting)(nil), "google.ads.googleads.v3.resources.CallReportingSetting")
+	proto.RegisterType((*ConversionTrackingSetting)(nil), "google.ads.googleads.v3.resources.ConversionTrackingSetting")
+	proto.RegisterType((*RemarketingSetting)(nil), "google.ads.googleads.v3.resources.RemarketingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer.proto", fileDescriptor_1221f0b49b42ae61)
+}
+
+var fileDescriptor_1221f0b49b42ae61 = []byte{
+	// 911 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xdd, 0x6e, 0xdc, 0x44,
+	0x14, 0xc7, 0xb5, 0x1b, 0x68, 0x93, 0xc9, 0x47, 0xa3, 0xe9, 0x52, 0x39, 0x69, 0x55, 0x25, 0x81,
+	0x4a, 0x41, 0x48, 0x5e, 0xd4, 0x2d, 0xa0, 0x9a, 0x72, 0xe1, 0x44, 0x69, 0x28, 0x42, 0x68, 0x71,
+	0xd2, 0x5c, 0x44, 0x91, 0x46, 0xb3, 0xf6, 0x59, 0x77, 0x94, 0xf1, 0x8c, 0x35, 0x33, 0x0e, 0x84,
+	0x8f, 0x3b, 0x9e, 0x04, 0xee, 0x78, 0x12, 0xc4, 0x2b, 0xf0, 0x02, 0xa8, 0x8f, 0xc0, 0x15, 0xf2,
+	0xd8, 0xe3, 0x4d, 0xb4, 0xd9, 0x78, 0x7b, 0x95, 0x89, 0xcf, 0xf9, 0xff, 0xfe, 0xc7, 0x93, 0x73,
+	0x8e, 0x83, 0x3e, 0x4d, 0xa5, 0x4c, 0x39, 0xf4, 0x69, 0xa2, 0xfb, 0xd5, 0xb1, 0x3c, 0x5d, 0x0c,
+	0xfa, 0x0a, 0xb4, 0x2c, 0x54, 0x0c, 0xba, 0x1f, 0x17, 0xda, 0xc8, 0x0c, 0x94, 0x9f, 0x2b, 0x69,
+	0x24, 0xde, 0xae, 0xd2, 0x7c, 0x9a, 0x68, 0xbf, 0x51, 0xf8, 0x17, 0x03, 0xbf, 0x51, 0x6c, 0x9e,
+	0xce, 0x82, 0x82, 0x28, 0xb2, 0x09, 0x90, 0xe4, 0xf4, 0x92, 0xe4, 0xa0, 0x48, 0x2c, 0xc5, 0x05,
+	0x28, 0xcd, 0xa4, 0x20, 0xc0, 0x59, 0xca, 0x46, 0x8c, 0x33, 0x73, 0x49, 0xc6, 0x94, 0xf1, 0x42,
+	0x01, 0x51, 0x40, 0xb5, 0x14, 0x95, 0xfd, 0xe6, 0x86, 0x63, 0xe7, 0xac, 0xa9, 0xb1, 0x0e, 0x3d,
+	0xae, 0x43, 0xf6, 0xb7, 0x51, 0x31, 0xee, 0xff, 0xa0, 0x68, 0x9e, 0x83, 0xd2, 0x75, 0xfc, 0xd1,
+	0x15, 0x29, 0x15, 0x42, 0x1a, 0x6a, 0x98, 0x14, 0x75, 0x74, 0xe7, 0x2f, 0x84, 0x16, 0xf7, 0xeb,
+	0xca, 0xf0, 0x87, 0x68, 0xd5, 0xc1, 0x89, 0xa0, 0x19, 0x78, 0x9d, 0xad, 0xce, 0xee, 0x52, 0xb4,
+	0xe2, 0x1e, 0x7e, 0x47, 0x33, 0xc0, 0x9f, 0xa0, 0x2e, 0x4b, 0xbc, 0x85, 0xad, 0xce, 0xee, 0xf2,
+	0xd3, 0x87, 0xf5, 0x5d, 0xf8, 0xce, 0xdc, 0x7f, 0x25, 0xcc, 0xe7, 0xcf, 0x4e, 0x28, 0x2f, 0x20,
+	0xea, 0xb2, 0x04, 0x1f, 0xa2, 0xf5, 0x04, 0x74, 0xac, 0x58, 0x6e, 0xd8, 0x45, 0x0d, 0x7d, 0xcf,
+	0x4a, 0x1f, 0x4d, 0x49, 0x8f, 0x8c, 0x62, 0x22, 0xad, 0xb4, 0xf7, 0xae, 0xa8, 0xac, 0x6b, 0x88,
+	0x56, 0xe3, 0x42, 0x29, 0x10, 0xf1, 0x25, 0x89, 0x65, 0x02, 0xde, 0xfb, 0x73, 0x50, 0x56, 0x9c,
+	0x64, 0x5f, 0x26, 0x80, 0x9f, 0xa3, 0x25, 0xc3, 0x32, 0x20, 0x3f, 0x49, 0x01, 0xde, 0x9d, 0x39,
+	0xe4, 0x8b, 0x65, 0xfa, 0xa9, 0x14, 0x80, 0x87, 0xe8, 0x03, 0xa3, 0x68, 0x7c, 0xce, 0x44, 0x4a,
+	0x0a, 0xc5, 0x89, 0x81, 0x2c, 0xe7, 0xd4, 0x80, 0x77, 0x77, 0x0e, 0xcc, 0x7d, 0x27, 0x7d, 0xad,
+	0xf8, 0x71, 0x2d, 0xc4, 0x2f, 0xd1, 0xfa, 0x98, 0x09, 0xca, 0x2d, 0x4e, 0x17, 0xe3, 0x31, 0xfb,
+	0xd1, 0x5b, 0x9e, 0x03, 0xb6, 0x66, 0x55, 0xaf, 0x15, 0x3f, 0xb2, 0x1a, 0xfc, 0x2d, 0xea, 0xd1,
+	0xc2, 0x48, 0x62, 0x68, 0x9a, 0x96, 0xd5, 0x81, 0xa0, 0x23, 0x0e, 0x89, 0xb7, 0x68, 0x59, 0x9b,
+	0x53, 0xac, 0x3d, 0x29, 0x79, 0x45, 0xc2, 0xa5, 0xee, 0xb8, 0x92, 0x1d, 0x54, 0x2a, 0xfc, 0x35,
+	0xc2, 0x6f, 0xa8, 0x26, 0x39, 0x55, 0x46, 0x80, 0xd2, 0x64, 0x44, 0x93, 0x14, 0xbc, 0xa5, 0x56,
+	0xd6, 0xfa, 0x1b, 0xaa, 0x87, 0xb5, 0x68, 0xaf, 0xd4, 0xe0, 0x67, 0xe8, 0x6e, 0x46, 0x05, 0x4d,
+	0x41, 0x79, 0x2b, 0xad, 0x72, 0x97, 0x8a, 0xbf, 0x42, 0x2b, 0x06, 0xb4, 0x21, 0x34, 0x8e, 0x65,
+	0x21, 0x8c, 0xb7, 0xda, 0x2a, 0x5d, 0x2e, 0xf3, 0xc3, 0x2a, 0x1d, 0x67, 0xe8, 0x41, 0x4c, 0x39,
+	0x27, 0x0a, 0x72, 0xa9, 0x4c, 0x79, 0x1d, 0x1a, 0x4c, 0xf9, 0xd3, 0x43, 0x16, 0xf4, 0x85, 0xdf,
+	0x3a, 0xc5, 0xfe, 0x3e, 0xe5, 0x3c, 0x72, 0xfa, 0xa3, 0x4a, 0x1e, 0xf5, 0xe2, 0x1b, 0x9e, 0xe2,
+	0x5f, 0xd0, 0xc3, 0x2b, 0x33, 0xdc, 0x34, 0x88, 0xf3, 0x5c, 0xb3, 0x9e, 0x2f, 0xe6, 0xf1, 0x6c,
+	0x28, 0xc7, 0x35, 0xc4, 0x19, 0x6f, 0xc4, 0xb3, 0x42, 0x78, 0x8c, 0xee, 0x2b, 0xc8, 0xa8, 0x3a,
+	0x87, 0x6b, 0x6f, 0x7a, 0xcf, 0xba, 0x7e, 0x36, 0x87, 0x6b, 0x34, 0x51, 0x3b, 0x3b, 0xac, 0xa6,
+	0x9e, 0xe1, 0x7f, 0x3b, 0xc8, 0x7f, 0xa7, 0x95, 0xa5, 0xbd, 0xf5, 0xad, 0x85, 0xdd, 0xb5, 0xa7,
+	0xbf, 0x75, 0x66, 0x16, 0x61, 0x37, 0xa2, 0xef, 0xf6, 0xce, 0x90, 0x5e, 0x0e, 0x41, 0x4d, 0x2e,
+	0xe1, 0x60, 0x82, 0x7e, 0x59, 0x91, 0x23, 0x0b, 0x3e, 0x10, 0x45, 0xf6, 0xce, 0xa2, 0xe8, 0xe3,
+	0x7c, 0xce, 0x4c, 0x1d, 0xbc, 0x78, 0x1b, 0x3e, 0x47, 0xdb, 0x93, 0x4a, 0xeb, 0x53, 0xce, 0xb4,
+	0x1f, 0xcb, 0xac, 0xdf, 0xec, 0xc9, 0x9e, 0xdb, 0xe5, 0xba, 0xff, 0xb3, 0x3b, 0xfe, 0xba, 0xf3,
+	0x47, 0x17, 0xf5, 0x6e, 0xea, 0x1e, 0x3c, 0x9c, 0x6a, 0x4b, 0x37, 0xa5, 0x9d, 0xd6, 0xfe, 0xbe,
+	0xde, 0x79, 0x6e, 0x4e, 0x01, 0x6d, 0x5b, 0xe2, 0x95, 0xbf, 0xc7, 0x34, 0xbc, 0xdb, 0x0a, 0x7f,
+	0x5c, 0x42, 0x26, 0x17, 0x33, 0x65, 0x13, 0xd5, 0x85, 0x5f, 0xb1, 0xa1, 0x71, 0xf9, 0xf5, 0xa8,
+	0x57, 0xc2, 0xed, 0xab, 0xaa, 0x77, 0x9d, 0x1e, 0x5a, 0xe5, 0xce, 0x3f, 0x1d, 0xb4, 0x31, 0xb3,
+	0xdf, 0xf1, 0xf7, 0xe8, 0xc1, 0x4d, 0x23, 0xc5, 0xdc, 0x55, 0xdd, 0xfa, 0xc1, 0xe9, 0x4d, 0x0f,
+	0xcb, 0xab, 0x04, 0x9f, 0xa3, 0x8f, 0x62, 0x25, 0xb5, 0x76, 0x4b, 0x85, 0xcc, 0x30, 0xe8, 0xb6,
+	0x1b, 0x6c, 0x59, 0x50, 0xbd, 0x6d, 0xf6, 0x6f, 0x30, 0xdb, 0x49, 0x11, 0x9e, 0x1e, 0xab, 0xf2,
+	0xad, 0x2a, 0x2a, 0x49, 0xb9, 0x1c, 0x51, 0x4e, 0x34, 0x33, 0x50, 0xae, 0xec, 0xfa, 0xad, 0x5a,
+	0xbe, 0x1f, 0x55, 0xf0, 0xd0, 0x4a, 0x8f, 0x98, 0x81, 0x63, 0x9a, 0xee, 0xfd, 0xd7, 0x41, 0x4f,
+	0x62, 0x99, 0xb5, 0x8f, 0xf9, 0xde, 0x6a, 0x33, 0x31, 0x25, 0x7c, 0xd8, 0x39, 0xfd, 0xa6, 0xd6,
+	0xa4, 0x92, 0x53, 0x91, 0xfa, 0x52, 0xa5, 0xfd, 0x14, 0x84, 0xb5, 0xee, 0x4f, 0x3a, 0xfe, 0x96,
+	0xff, 0x8d, 0xbe, 0x6c, 0x4e, 0xbf, 0x77, 0x17, 0x0e, 0xc3, 0xf0, 0xcf, 0xee, 0xf6, 0x61, 0x85,
+	0x0c, 0x13, 0xed, 0x57, 0xc7, 0xf2, 0x74, 0x32, 0xf0, 0x23, 0x97, 0xf9, 0xb7, 0xcb, 0x39, 0x0b,
+	0x13, 0x7d, 0xd6, 0xe4, 0x9c, 0x9d, 0x0c, 0xce, 0x9a, 0x9c, 0xb7, 0xdd, 0x27, 0x55, 0x20, 0x08,
+	0xc2, 0x44, 0x07, 0x41, 0x93, 0x15, 0x04, 0x27, 0x83, 0x20, 0x68, 0xf2, 0x46, 0x77, 0x6c, 0xb1,
+	0x83, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x17, 0xf8, 0x6e, 0x7f, 0xc7, 0x09, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_client.pb.go b/googleapis/ads/googleads/v3/resources/customer_client.pb.go
new file mode 100644
index 0000000..e92d696
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_client.pb.go
@@ -0,0 +1,200 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_client.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A link between the given customer and a client customer. CustomerClients only
+// exist for manager customers. All direct and indirect client customers are
+// included, as well as the manager itself.
+type CustomerClient struct {
+	// The resource name of the customer client.
+	// CustomerClient resource names have the form:
+	// `customers/{customer_id}/customerClients/{client_customer_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The resource name of the client-customer which is linked to
+	// the given customer. Read only.
+	ClientCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=client_customer,json=clientCustomer,proto3" json:"client_customer,omitempty"`
+	// Specifies whether this is a
+	// [hidden account](https://support.google.com/google-ads/answer/7519830).
+	// Read only.
+	Hidden *wrappers.BoolValue `protobuf:"bytes,4,opt,name=hidden,proto3" json:"hidden,omitempty"`
+	// Distance between given customer and client. For self link, the level value
+	// will be 0. Read only.
+	Level *wrappers.Int64Value `protobuf:"bytes,5,opt,name=level,proto3" json:"level,omitempty"`
+	// Common Locale Data Repository (CLDR) string representation of the
+	// time zone of the client, e.g. America/Los_Angeles. Read only.
+	TimeZone *wrappers.StringValue `protobuf:"bytes,6,opt,name=time_zone,json=timeZone,proto3" json:"time_zone,omitempty"`
+	// Identifies if the client is a test account. Read only.
+	TestAccount *wrappers.BoolValue `protobuf:"bytes,7,opt,name=test_account,json=testAccount,proto3" json:"test_account,omitempty"`
+	// Identifies if the client is a manager. Read only.
+	Manager *wrappers.BoolValue `protobuf:"bytes,8,opt,name=manager,proto3" json:"manager,omitempty"`
+	// Descriptive name for the client. Read only.
+	DescriptiveName *wrappers.StringValue `protobuf:"bytes,9,opt,name=descriptive_name,json=descriptiveName,proto3" json:"descriptive_name,omitempty"`
+	// Currency code (e.g. 'USD', 'EUR') for the client. Read only.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,10,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// The ID of the client customer. Read only.
+	Id                   *wrappers.Int64Value `protobuf:"bytes,11,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CustomerClient) Reset()         { *m = CustomerClient{} }
+func (m *CustomerClient) String() string { return proto.CompactTextString(m) }
+func (*CustomerClient) ProtoMessage()    {}
+func (*CustomerClient) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01c696c42eabfec5, []int{0}
+}
+
+func (m *CustomerClient) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClient.Unmarshal(m, b)
+}
+func (m *CustomerClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClient.Marshal(b, m, deterministic)
+}
+func (m *CustomerClient) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClient.Merge(m, src)
+}
+func (m *CustomerClient) XXX_Size() int {
+	return xxx_messageInfo_CustomerClient.Size(m)
+}
+func (m *CustomerClient) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClient.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClient proto.InternalMessageInfo
+
+func (m *CustomerClient) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerClient) GetClientCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ClientCustomer
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetHidden() *wrappers.BoolValue {
+	if m != nil {
+		return m.Hidden
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetLevel() *wrappers.Int64Value {
+	if m != nil {
+		return m.Level
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetTimeZone() *wrappers.StringValue {
+	if m != nil {
+		return m.TimeZone
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetTestAccount() *wrappers.BoolValue {
+	if m != nil {
+		return m.TestAccount
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetManager() *wrappers.BoolValue {
+	if m != nil {
+		return m.Manager
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetDescriptiveName() *wrappers.StringValue {
+	if m != nil {
+		return m.DescriptiveName
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomerClient)(nil), "google.ads.googleads.v3.resources.CustomerClient")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_client.proto", fileDescriptor_01c696c42eabfec5)
+}
+
+var fileDescriptor_01c696c42eabfec5 = []byte{
+	// 524 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x5f, 0x6b, 0x13, 0x4d,
+	0x14, 0xc6, 0xc9, 0xf6, 0xed, 0x9f, 0x4c, 0xd2, 0xf6, 0x65, 0xbd, 0x59, 0x63, 0x91, 0x56, 0x29,
+	0x16, 0x84, 0x59, 0xec, 0x96, 0x8a, 0x2b, 0x5e, 0x6c, 0x82, 0x04, 0xbd, 0x90, 0x12, 0x21, 0x17,
+	0x25, 0xb0, 0x4c, 0x67, 0x8e, 0xeb, 0xc0, 0xee, 0xcc, 0x32, 0x33, 0x1b, 0x51, 0x29, 0xf8, 0x59,
+	0xbc, 0xf4, 0xd2, 0x8f, 0xe1, 0x47, 0xe9, 0xa7, 0x90, 0xec, 0xec, 0x6c, 0xa3, 0x05, 0x93, 0xbb,
+	0x27, 0x39, 0xcf, 0xef, 0xcc, 0x73, 0x76, 0xe6, 0xa0, 0xe7, 0x99, 0x94, 0x59, 0x0e, 0x21, 0x61,
+	0x3a, 0xb4, 0x72, 0xa1, 0xe6, 0x51, 0xa8, 0x40, 0xcb, 0x4a, 0x51, 0xd0, 0x21, 0xad, 0xb4, 0x91,
+	0x05, 0xa8, 0x94, 0xe6, 0x1c, 0x84, 0xc1, 0xa5, 0x92, 0x46, 0xfa, 0x47, 0xd6, 0x8d, 0x09, 0xd3,
+	0xb8, 0x05, 0xf1, 0x3c, 0xc2, 0x2d, 0x38, 0xb8, 0xef, 0x7a, 0x97, 0xbc, 0x6d, 0x67, 0xe9, 0xc1,
+	0xc3, 0xa6, 0x54, 0xff, 0xba, 0xaa, 0x3e, 0x84, 0x9f, 0x14, 0x29, 0x4b, 0x50, 0xba, 0xa9, 0x1f,
+	0x2c, 0xa1, 0x44, 0x08, 0x69, 0x88, 0xe1, 0x52, 0x34, 0xd5, 0x47, 0x3f, 0x37, 0xd1, 0xde, 0xa8,
+	0x49, 0x35, 0xaa, 0x43, 0xf9, 0x8f, 0xd1, 0xae, 0x3b, 0x22, 0x15, 0xa4, 0x80, 0xa0, 0x73, 0xd8,
+	0x39, 0xe9, 0x4e, 0xfa, 0xee, 0xcf, 0x77, 0xa4, 0x00, 0xff, 0x35, 0xda, 0xb7, 0x33, 0xa4, 0x6e,
+	0xa6, 0x60, 0xe3, 0xb0, 0x73, 0xd2, 0x3b, 0x3d, 0x68, 0x46, 0xc0, 0x2e, 0x0f, 0x7e, 0x6f, 0x14,
+	0x17, 0xd9, 0x94, 0xe4, 0x15, 0x4c, 0xf6, 0x2c, 0xe4, 0x4e, 0xf4, 0x4f, 0xd1, 0xd6, 0x47, 0xce,
+	0x18, 0x88, 0xe0, 0xbf, 0x9a, 0x1e, 0xdc, 0xa1, 0x87, 0x52, 0xe6, 0x96, 0x6d, 0x9c, 0xfe, 0x33,
+	0xb4, 0x99, 0xc3, 0x1c, 0xf2, 0x60, 0xb3, 0x46, 0x1e, 0xdc, 0x41, 0xde, 0x08, 0x73, 0x7e, 0x66,
+	0x19, 0xeb, 0xf4, 0x5f, 0xa0, 0xae, 0xe1, 0x05, 0xa4, 0x5f, 0xa4, 0x80, 0x60, 0x6b, 0x8d, 0x9c,
+	0x3b, 0x0b, 0xfb, 0xa5, 0x14, 0xe0, 0xbf, 0x42, 0x7d, 0x03, 0xda, 0xa4, 0x84, 0x52, 0x59, 0x09,
+	0x13, 0x6c, 0xaf, 0xcc, 0xd9, 0x5b, 0xf8, 0x13, 0x6b, 0xf7, 0xcf, 0xd0, 0x76, 0x41, 0x04, 0xc9,
+	0x40, 0x05, 0x3b, 0x2b, 0x49, 0x67, 0xf5, 0xc7, 0xe8, 0x7f, 0x06, 0x9a, 0x2a, 0x5e, 0x1a, 0x3e,
+	0x6f, 0x6e, 0xa1, 0xbb, 0x46, 0xec, 0xfd, 0x25, 0xaa, 0xbe, 0xa6, 0x04, 0xed, 0xd2, 0x4a, 0x29,
+	0x10, 0xf4, 0x73, 0x4a, 0x25, 0x83, 0x00, 0xad, 0xd1, 0xa5, 0xef, 0x90, 0x91, 0x64, 0xe0, 0x3f,
+	0x45, 0x1e, 0x67, 0x41, 0x6f, 0xf5, 0xb7, 0xf6, 0x38, 0x8b, 0xd9, 0x4d, 0x42, 0xd0, 0x93, 0xdb,
+	0x47, 0xdc, 0xa8, 0x92, 0x6b, 0x4c, 0x65, 0x11, 0xfe, 0xf5, 0xd2, 0xce, 0xdd, 0xdb, 0xd1, 0xe1,
+	0x57, 0x27, 0xaf, 0xdb, 0x25, 0xb1, 0xa6, 0xa5, 0x52, 0xb3, 0x35, 0xd7, 0xc3, 0x6f, 0x1e, 0x3a,
+	0xa6, 0xb2, 0xc0, 0x2b, 0xf7, 0x66, 0x78, 0xef, 0xcf, 0x13, 0x2f, 0x16, 0xb1, 0x2f, 0x3a, 0x97,
+	0x6f, 0x1b, 0x32, 0x93, 0x39, 0x11, 0x19, 0x96, 0x2a, 0x0b, 0x33, 0x10, 0xf5, 0x50, 0xe1, 0x6d,
+	0xe4, 0x7f, 0x6c, 0xf2, 0xcb, 0x56, 0x7d, 0xf7, 0x36, 0xc6, 0x49, 0xf2, 0xc3, 0x3b, 0x1a, 0xdb,
+	0x96, 0x09, 0xd3, 0xd8, 0xca, 0x85, 0x9a, 0x46, 0x78, 0xe2, 0x9c, 0xbf, 0x9c, 0x67, 0x96, 0x30,
+	0x3d, 0x6b, 0x3d, 0xb3, 0x69, 0x34, 0x6b, 0x3d, 0x37, 0xde, 0xb1, 0x2d, 0xc4, 0x71, 0xc2, 0x74,
+	0x1c, 0xb7, 0xae, 0x38, 0x9e, 0x46, 0x71, 0xdc, 0xfa, 0xae, 0xb6, 0xea, 0xb0, 0xd1, 0xef, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xdc, 0x5c, 0x72, 0xd4, 0x75, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_client_link.pb.go b/googleapis/ads/googleads/v3/resources/customer_client_link.pb.go
new file mode 100644
index 0000000..02754fb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_client_link.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_client_link.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents customer client link relationship.
+type CustomerClientLink struct {
+	// Name of the resource.
+	// CustomerClientLink resource names have the form:
+	// `customers/{customer_id}/customerClientLinks/{client_customer_id}~{manager_link_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The client customer linked to this customer.
+	ClientCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=client_customer,json=clientCustomer,proto3" json:"client_customer,omitempty"`
+	// This is uniquely identifies a customer client link. Read only.
+	ManagerLinkId *wrappers.Int64Value `protobuf:"bytes,4,opt,name=manager_link_id,json=managerLinkId,proto3" json:"manager_link_id,omitempty"`
+	// This is the status of the link between client and manager.
+	Status enums.ManagerLinkStatusEnum_ManagerLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.ManagerLinkStatusEnum_ManagerLinkStatus" json:"status,omitempty"`
+	// The visibility of the link. Users can choose whether or not to see hidden
+	// links in the AdWords UI.
+	// Default value is false
+	Hidden               *wrappers.BoolValue `protobuf:"bytes,6,opt,name=hidden,proto3" json:"hidden,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *CustomerClientLink) Reset()         { *m = CustomerClientLink{} }
+func (m *CustomerClientLink) String() string { return proto.CompactTextString(m) }
+func (*CustomerClientLink) ProtoMessage()    {}
+func (*CustomerClientLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_19b00c28e6d68d63, []int{0}
+}
+
+func (m *CustomerClientLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClientLink.Unmarshal(m, b)
+}
+func (m *CustomerClientLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClientLink.Marshal(b, m, deterministic)
+}
+func (m *CustomerClientLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClientLink.Merge(m, src)
+}
+func (m *CustomerClientLink) XXX_Size() int {
+	return xxx_messageInfo_CustomerClientLink.Size(m)
+}
+func (m *CustomerClientLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClientLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClientLink proto.InternalMessageInfo
+
+func (m *CustomerClientLink) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerClientLink) GetClientCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ClientCustomer
+	}
+	return nil
+}
+
+func (m *CustomerClientLink) GetManagerLinkId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ManagerLinkId
+	}
+	return nil
+}
+
+func (m *CustomerClientLink) GetStatus() enums.ManagerLinkStatusEnum_ManagerLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ManagerLinkStatusEnum_UNSPECIFIED
+}
+
+func (m *CustomerClientLink) GetHidden() *wrappers.BoolValue {
+	if m != nil {
+		return m.Hidden
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomerClientLink)(nil), "google.ads.googleads.v3.resources.CustomerClientLink")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_client_link.proto", fileDescriptor_19b00c28e6d68d63)
+}
+
+var fileDescriptor_19b00c28e6d68d63 = []byte{
+	// 478 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x5d, 0x6b, 0x13, 0x41,
+	0x14, 0x65, 0x13, 0x0d, 0xb8, 0xda, 0x16, 0xf6, 0xc5, 0x35, 0x16, 0x49, 0x95, 0x42, 0x40, 0x98,
+	0x81, 0xac, 0x28, 0x8c, 0x82, 0x6c, 0x42, 0x2d, 0x15, 0x95, 0x92, 0x42, 0x1e, 0x24, 0x18, 0xa6,
+	0x3b, 0xe3, 0x3a, 0x74, 0x77, 0x66, 0x9d, 0x99, 0xad, 0x0f, 0xd2, 0x37, 0x7f, 0x89, 0x8f, 0xfe,
+	0x14, 0xf1, 0x97, 0xf4, 0x57, 0x48, 0xe6, 0x2b, 0x91, 0x18, 0x7d, 0xbb, 0x99, 0x7b, 0xce, 0xb9,
+	0xe7, 0xdc, 0xdc, 0x8d, 0x5f, 0x94, 0x42, 0x94, 0x15, 0x85, 0x98, 0x28, 0x68, 0xcb, 0x65, 0x75,
+	0x99, 0x41, 0x49, 0x95, 0x68, 0x65, 0x41, 0x15, 0x2c, 0x5a, 0xa5, 0x45, 0x4d, 0xe5, 0xa2, 0xa8,
+	0x18, 0xe5, 0x7a, 0x51, 0x31, 0x7e, 0x01, 0x1a, 0x29, 0xb4, 0x48, 0x0e, 0x2c, 0x05, 0x60, 0xa2,
+	0x40, 0x60, 0x83, 0xcb, 0x0c, 0x04, 0x76, 0xff, 0xd9, 0xb6, 0x01, 0x94, 0xb7, 0xb5, 0x82, 0x35,
+	0xe6, 0xb8, 0xa4, 0xd2, 0x88, 0x2e, 0x94, 0xc6, 0xba, 0x55, 0x56, 0xbb, 0x7f, 0xcf, 0x13, 0x1b,
+	0x16, 0xcc, 0xb8, 0xd6, 0x03, 0xd7, 0x32, 0xbf, 0xce, 0xdb, 0x8f, 0xf0, 0x8b, 0xc4, 0x4d, 0x43,
+	0xa5, 0xa7, 0xee, 0xaf, 0x51, 0x31, 0xe7, 0x42, 0x63, 0xcd, 0x04, 0x77, 0xdd, 0x87, 0xbf, 0xba,
+	0x71, 0x32, 0x71, 0x99, 0x26, 0x26, 0xd2, 0x1b, 0xc6, 0x2f, 0x92, 0x47, 0xf1, 0x8e, 0x1f, 0xb3,
+	0xe0, 0xb8, 0xa6, 0x69, 0x34, 0x88, 0x86, 0xb7, 0xa6, 0x77, 0xfc, 0xe3, 0x3b, 0x5c, 0xd3, 0xe4,
+	0x28, 0xde, 0x73, 0x5b, 0xf0, 0x5b, 0x49, 0xbb, 0x83, 0x68, 0x78, 0x7b, 0xb4, 0xef, 0xf2, 0x03,
+	0xef, 0x09, 0x9c, 0x69, 0xc9, 0x78, 0x39, 0xc3, 0x55, 0x4b, 0xa7, 0xbb, 0x96, 0xe4, 0xa7, 0x26,
+	0x93, 0x78, 0xef, 0x8f, 0xe0, 0x8c, 0xa4, 0x37, 0x8c, 0xcc, 0xfd, 0x0d, 0x99, 0x13, 0xae, 0x9f,
+	0x3e, 0xb1, 0x2a, 0x3b, 0x8e, 0xb3, 0xb4, 0x7b, 0x42, 0x92, 0x0f, 0x71, 0xcf, 0x2e, 0x2c, 0xbd,
+	0x39, 0x88, 0x86, 0xbb, 0xa3, 0x57, 0x60, 0xdb, 0xbf, 0x61, 0x56, 0x0d, 0xde, 0xae, 0xd8, 0x67,
+	0x86, 0x77, 0xc4, 0xdb, 0x7a, 0xf3, 0x75, 0xea, 0x54, 0x93, 0x51, 0xdc, 0xfb, 0xc4, 0x08, 0xa1,
+	0x3c, 0xed, 0x19, 0x6f, 0xfd, 0x0d, 0x6f, 0x63, 0x21, 0x2a, 0x6b, 0xcd, 0x21, 0xd1, 0xe7, 0xeb,
+	0x9c, 0xc7, 0x8f, 0x57, 0xc3, 0x5d, 0xd5, 0x30, 0x05, 0x0a, 0x51, 0xc3, 0xbf, 0xac, 0xfd, 0xa5,
+	0x5f, 0xa4, 0x82, 0x5f, 0x7d, 0x79, 0x15, 0x6e, 0x6e, 0x05, 0x5c, 0x6b, 0xaf, 0x1f, 0xe2, 0xd5,
+	0xf8, 0x5b, 0x27, 0x3e, 0x2c, 0x44, 0x0d, 0xfe, 0x7b, 0x8a, 0xe3, 0xbb, 0x9b, 0xe3, 0x4f, 0x97,
+	0x51, 0x4e, 0xa3, 0xf7, 0xaf, 0x1d, 0xbb, 0x14, 0x15, 0xe6, 0x25, 0x10, 0xb2, 0x84, 0x25, 0xe5,
+	0x26, 0x28, 0x5c, 0x65, 0xf8, 0xc7, 0x57, 0xf2, 0x3c, 0x54, 0xdf, 0x3b, 0xdd, 0xe3, 0x3c, 0xff,
+	0xd1, 0x39, 0x38, 0xb6, 0x92, 0x39, 0x51, 0xc0, 0x96, 0xcb, 0x6a, 0x96, 0x81, 0xa9, 0x47, 0xfe,
+	0xf4, 0x98, 0x79, 0x4e, 0xd4, 0x3c, 0x60, 0xe6, 0xb3, 0x6c, 0x1e, 0x30, 0xd7, 0x9d, 0x43, 0xdb,
+	0x40, 0x28, 0x27, 0x0a, 0xa1, 0x80, 0x42, 0x68, 0x96, 0x21, 0x14, 0x70, 0xe7, 0x3d, 0x63, 0x36,
+	0xfb, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x0a, 0xf8, 0x4a, 0xd1, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_extension_setting.pb.go b/googleapis/ads/googleads/v3/resources/customer_extension_setting.pb.go
new file mode 100644
index 0000000..1bdd059
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_extension_setting.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_extension_setting.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A customer extension setting.
+type CustomerExtensionSetting struct {
+	// The resource name of the customer extension setting.
+	// CustomerExtensionSetting resource names have the form:
+	//
+	// `customers/{customer_id}/customerExtensionSettings/{extension_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The extension type of the customer extension setting.
+	ExtensionType enums.ExtensionTypeEnum_ExtensionType `protobuf:"varint,2,opt,name=extension_type,json=extensionType,proto3,enum=google.ads.googleads.v3.enums.ExtensionTypeEnum_ExtensionType" json:"extension_type,omitempty"`
+	// The resource names of the extension feed items to serve under the customer.
+	// ExtensionFeedItem resource names have the form:
+	//
+	// `customers/{customer_id}/extensionFeedItems/{feed_item_id}`
+	ExtensionFeedItems []*wrappers.StringValue `protobuf:"bytes,3,rep,name=extension_feed_items,json=extensionFeedItems,proto3" json:"extension_feed_items,omitempty"`
+	// The device for which the extensions will serve. Optional.
+	Device               enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice `protobuf:"varint,4,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice" json:"device,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *CustomerExtensionSetting) Reset()         { *m = CustomerExtensionSetting{} }
+func (m *CustomerExtensionSetting) String() string { return proto.CompactTextString(m) }
+func (*CustomerExtensionSetting) ProtoMessage()    {}
+func (*CustomerExtensionSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aad619780d8a95dd, []int{0}
+}
+
+func (m *CustomerExtensionSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerExtensionSetting.Unmarshal(m, b)
+}
+func (m *CustomerExtensionSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerExtensionSetting.Marshal(b, m, deterministic)
+}
+func (m *CustomerExtensionSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerExtensionSetting.Merge(m, src)
+}
+func (m *CustomerExtensionSetting) XXX_Size() int {
+	return xxx_messageInfo_CustomerExtensionSetting.Size(m)
+}
+func (m *CustomerExtensionSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerExtensionSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerExtensionSetting proto.InternalMessageInfo
+
+func (m *CustomerExtensionSetting) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerExtensionSetting) GetExtensionType() enums.ExtensionTypeEnum_ExtensionType {
+	if m != nil {
+		return m.ExtensionType
+	}
+	return enums.ExtensionTypeEnum_UNSPECIFIED
+}
+
+func (m *CustomerExtensionSetting) GetExtensionFeedItems() []*wrappers.StringValue {
+	if m != nil {
+		return m.ExtensionFeedItems
+	}
+	return nil
+}
+
+func (m *CustomerExtensionSetting) GetDevice() enums.ExtensionSettingDeviceEnum_ExtensionSettingDevice {
+	if m != nil {
+		return m.Device
+	}
+	return enums.ExtensionSettingDeviceEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CustomerExtensionSetting)(nil), "google.ads.googleads.v3.resources.CustomerExtensionSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_extension_setting.proto", fileDescriptor_aad619780d8a95dd)
+}
+
+var fileDescriptor_aad619780d8a95dd = []byte{
+	// 476 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x5d, 0x6b, 0xd4, 0x40,
+	0x14, 0x25, 0x59, 0x29, 0x18, 0x6d, 0x1f, 0x82, 0x0f, 0xb1, 0x54, 0xd9, 0x2a, 0x85, 0x7d, 0x9a,
+	0xc1, 0xcd, 0xdb, 0x28, 0x42, 0x56, 0x6b, 0x51, 0xa1, 0x2c, 0xa9, 0xec, 0x83, 0x2c, 0x84, 0x69,
+	0x72, 0x1b, 0x03, 0x9b, 0x99, 0x30, 0x33, 0x59, 0x2d, 0x52, 0xf0, 0xc1, 0x27, 0x7f, 0x86, 0x8f,
+	0xfe, 0x14, 0xff, 0x88, 0xd0, 0x5f, 0x21, 0x9b, 0xf9, 0xd8, 0x5d, 0xcb, 0xda, 0x7d, 0xbb, 0x33,
+	0xf7, 0x9c, 0x7b, 0xce, 0x9c, 0xdc, 0x04, 0xa3, 0x92, 0xf3, 0x72, 0x06, 0x98, 0x16, 0x12, 0xeb,
+	0x72, 0x51, 0xcd, 0x63, 0x2c, 0x40, 0xf2, 0x56, 0xe4, 0x20, 0x71, 0xde, 0x4a, 0xc5, 0x6b, 0x10,
+	0x19, 0x7c, 0x51, 0xc0, 0x64, 0xc5, 0x59, 0x26, 0x41, 0xa9, 0x8a, 0x95, 0xa8, 0x11, 0x5c, 0xf1,
+	0xf0, 0x50, 0x13, 0x11, 0x2d, 0x24, 0x72, 0x33, 0xd0, 0x3c, 0x46, 0x6e, 0xc6, 0xfe, 0x8b, 0x4d,
+	0x32, 0xc0, 0xda, 0x5a, 0xe2, 0x1b, 0x93, 0xb3, 0x02, 0xe6, 0x55, 0x0e, 0x5a, 0x60, 0x7f, 0xb8,
+	0x2d, 0x5b, 0x5d, 0x36, 0x96, 0xf3, 0xd0, 0x72, 0x9a, 0xca, 0xbd, 0xc5, 0xb4, 0x1e, 0x9b, 0x56,
+	0x77, 0x3a, 0x6f, 0x2f, 0xf0, 0x67, 0x41, 0x9b, 0x06, 0x84, 0x34, 0xfd, 0x83, 0x15, 0x2a, 0x65,
+	0x8c, 0x2b, 0xaa, 0x2a, 0xce, 0x4c, 0xf7, 0xc9, 0x9f, 0x5e, 0x10, 0xbd, 0x32, 0x91, 0x1c, 0x5b,
+	0xe5, 0x33, 0x6d, 0x3b, 0x7c, 0x1a, 0xec, 0x5a, 0xb1, 0x8c, 0xd1, 0x1a, 0x22, 0xaf, 0xef, 0x0d,
+	0xee, 0xa6, 0xf7, 0xed, 0xe5, 0x29, 0xad, 0x21, 0x84, 0x60, 0x6f, 0xdd, 0x72, 0xe4, 0xf7, 0xbd,
+	0xc1, 0xde, 0xf0, 0x25, 0xda, 0x14, 0x64, 0xf7, 0x4e, 0xe4, 0xd4, 0x3e, 0x5c, 0x36, 0x70, 0xcc,
+	0xda, 0x7a, 0xfd, 0x26, 0xdd, 0x85, 0xd5, 0x63, 0x78, 0x1a, 0x3c, 0x58, 0xca, 0x5c, 0x00, 0x14,
+	0x59, 0xa5, 0xa0, 0x96, 0x51, 0xaf, 0xdf, 0x1b, 0xdc, 0x1b, 0x1e, 0x58, 0x31, 0x9b, 0x02, 0x3a,
+	0x53, 0xa2, 0x62, 0xe5, 0x84, 0xce, 0x5a, 0x48, 0x43, 0xc7, 0x7c, 0x03, 0x50, 0xbc, 0x5d, 0xf0,
+	0xc2, 0x4f, 0xc1, 0x8e, 0xfe, 0x2a, 0xd1, 0x9d, 0xce, 0xee, 0x78, 0x5b, 0xbb, 0x26, 0x9c, 0xd7,
+	0x1d, 0x79, 0xdd, 0xf7, 0x5a, 0x2b, 0x35, 0xf3, 0xc9, 0x77, 0xef, 0x3a, 0xf9, 0xe6, 0x05, 0xcf,
+	0x96, 0x43, 0x4d, 0xd5, 0x54, 0x12, 0xe5, 0xbc, 0xc6, 0x1b, 0xf3, 0x7f, 0x6f, 0x97, 0x55, 0xe2,
+	0xaf, 0xb6, 0xbc, 0x72, 0x1b, 0xfc, 0x2f, 0x7c, 0x05, 0x74, 0x73, 0xb9, 0xaf, 0x46, 0x3f, 0xfc,
+	0xe0, 0x28, 0xe7, 0x35, 0xba, 0x75, 0xbd, 0x47, 0x8f, 0x36, 0x19, 0x1a, 0x2f, 0xc2, 0x1d, 0x7b,
+	0x1f, 0xdf, 0x99, 0x19, 0x25, 0x9f, 0x51, 0x56, 0x22, 0x2e, 0x4a, 0x5c, 0x02, 0xeb, 0xa2, 0xc7,
+	0xcb, 0xb7, 0xfd, 0xe7, 0x2f, 0x7c, 0xee, 0xaa, 0x9f, 0x7e, 0xef, 0x24, 0x49, 0x7e, 0xf9, 0x87,
+	0x27, 0x7a, 0x64, 0x52, 0x48, 0xa4, 0xcb, 0x45, 0x35, 0x89, 0x51, 0x6a, 0x91, 0xbf, 0x2d, 0x66,
+	0x9a, 0x14, 0x72, 0xea, 0x30, 0xd3, 0x49, 0x3c, 0x75, 0x98, 0x6b, 0xff, 0x48, 0x37, 0x08, 0x49,
+	0x0a, 0x49, 0x88, 0x43, 0x11, 0x32, 0x89, 0x09, 0x71, 0xb8, 0xf3, 0x9d, 0xce, 0x6c, 0xfc, 0x37,
+	0x00, 0x00, 0xff, 0xff, 0xd3, 0x84, 0xd4, 0x16, 0x31, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_feed.pb.go b/googleapis/ads/googleads/v3/resources/customer_feed.pb.go
new file mode 100644
index 0000000..7042a68
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_feed.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_feed.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A customer feed.
+type CustomerFeed struct {
+	// The resource name of the customer feed.
+	// Customer feed resource names have the form:
+	//
+	// `customers/{customer_id}/customerFeeds/{feed_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed being linked to the customer.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// customer. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,3,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the CustomerFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,4,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the customer feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CustomerFeed) Reset()         { *m = CustomerFeed{} }
+func (m *CustomerFeed) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeed) ProtoMessage()    {}
+func (*CustomerFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9924134ce68c2327, []int{0}
+}
+
+func (m *CustomerFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeed.Unmarshal(m, b)
+}
+func (m *CustomerFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeed.Marshal(b, m, deterministic)
+}
+func (m *CustomerFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeed.Merge(m, src)
+}
+func (m *CustomerFeed) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeed.Size(m)
+}
+func (m *CustomerFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeed proto.InternalMessageInfo
+
+func (m *CustomerFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CustomerFeed)(nil), "google.ads.googleads.v3.resources.CustomerFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_feed.proto", fileDescriptor_9924134ce68c2327)
+}
+
+var fileDescriptor_9924134ce68c2327 = []byte{
+	// 513 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0x26, 0xbb, 0xb5, 0x60, 0xac, 0xa5, 0x9b, 0xab, 0x58, 0x8a, 0x6c, 0x95, 0x85, 0xbd, 0x9a,
+	0x29, 0x1b, 0xf5, 0x22, 0xde, 0x98, 0x15, 0x5b, 0x10, 0x95, 0x25, 0x95, 0x45, 0x74, 0x35, 0x4c,
+	0x93, 0xb3, 0x69, 0x68, 0x66, 0x26, 0x64, 0x92, 0x4a, 0x91, 0xbe, 0x8c, 0x97, 0x3e, 0x8a, 0x8f,
+	0xd2, 0x1b, 0xdf, 0x40, 0x24, 0x93, 0x99, 0xd9, 0x1f, 0x59, 0xeb, 0xdd, 0x97, 0x73, 0xbe, 0xef,
+	0xcc, 0x39, 0xe7, 0xcb, 0xb1, 0x9f, 0xa6, 0x9c, 0xa7, 0x39, 0x60, 0x92, 0x08, 0xdc, 0xc2, 0x06,
+	0x5d, 0x7a, 0xb8, 0x04, 0xc1, 0xeb, 0x32, 0x06, 0x81, 0xe3, 0x5a, 0x54, 0x9c, 0x42, 0x19, 0xcd,
+	0x01, 0x12, 0x54, 0x94, 0xbc, 0xe2, 0xce, 0x61, 0xcb, 0x45, 0x24, 0x11, 0xc8, 0xc8, 0xd0, 0xa5,
+	0x87, 0x8c, 0x6c, 0xff, 0xd9, 0xa6, 0xca, 0x31, 0xa7, 0x94, 0x33, 0x4c, 0x49, 0x15, 0x9f, 0x67,
+	0x2c, 0x8d, 0xe6, 0x35, 0x8b, 0xab, 0x8c, 0xb3, 0xb6, 0xf4, 0xfe, 0x93, 0x4d, 0x3a, 0x60, 0x35,
+	0x15, 0xb8, 0x69, 0x22, 0xca, 0x33, 0x76, 0x11, 0x89, 0x8a, 0x54, 0xb5, 0xf8, 0x3f, 0x55, 0x91,
+	0x93, 0x18, 0xce, 0x79, 0x9e, 0x40, 0x19, 0x55, 0x57, 0x05, 0x28, 0xd5, 0x03, 0xad, 0x2a, 0x32,
+	0x33, 0xb0, 0x4a, 0x3d, 0x54, 0x29, 0xf9, 0x75, 0x56, 0xcf, 0xf1, 0xd7, 0x92, 0x14, 0x05, 0x94,
+	0xfa, 0xc1, 0x83, 0x25, 0x29, 0x61, 0x8c, 0x57, 0xa4, 0x99, 0x41, 0x65, 0x1f, 0xfd, 0xea, 0xda,
+	0x3b, 0x2f, 0xd5, 0xde, 0x8e, 0x01, 0x12, 0xe7, 0xb1, 0x7d, 0x5f, 0x3f, 0x10, 0x31, 0x42, 0xc1,
+	0xb5, 0xfa, 0xd6, 0xf0, 0x6e, 0xb8, 0xa3, 0x83, 0xef, 0x08, 0x05, 0xe7, 0xc8, 0xde, 0x6a, 0xc6,
+	0x73, 0x3b, 0x7d, 0x6b, 0x78, 0x6f, 0x74, 0xa0, 0x36, 0x8b, 0x74, 0x0b, 0xe8, 0xb4, 0x2a, 0x33,
+	0x96, 0x4e, 0x49, 0x5e, 0x43, 0x28, 0x99, 0x0e, 0xb7, 0x7b, 0xeb, 0xa3, 0x09, 0xb7, 0xdb, 0xef,
+	0x0e, 0x77, 0x47, 0x63, 0xb4, 0xc9, 0x23, 0xb9, 0x12, 0x34, 0x59, 0xe8, 0xde, 0x5f, 0x15, 0xf0,
+	0x8a, 0xd5, 0x74, 0x3d, 0x16, 0xee, 0x15, 0xab, 0x01, 0xe1, 0x7c, 0xb6, 0x7b, 0x7f, 0x19, 0xe7,
+	0x6e, 0xc9, 0x7e, 0x8f, 0x36, 0x3e, 0xd8, 0x3a, 0x8e, 0xde, 0x2a, 0xe1, 0xb1, 0xd2, 0x85, 0x7b,
+	0x74, 0x2d, 0xe2, 0x7c, 0xb0, 0xb7, 0x5b, 0x5b, 0xdd, 0x3b, 0x7d, 0x6b, 0xb8, 0x3b, 0x7a, 0x71,
+	0xcb, 0x10, 0xcd, 0x6e, 0xdf, 0x64, 0xec, 0xe2, 0x54, 0x8a, 0xe4, 0x0c, 0xab, 0xa1, 0x50, 0xd5,
+	0xf3, 0xbf, 0xdc, 0x04, 0x9f, 0xec, 0xc1, 0xa2, 0x84, 0x42, 0x45, 0x26, 0x9a, 0xf6, 0xf0, 0x8a,
+	0x59, 0x23, 0xfd, 0xcb, 0x0b, 0xfc, 0x4d, 0xc3, 0x6b, 0x73, 0x07, 0x0d, 0x65, 0x29, 0x21, 0xcf,
+	0xe2, 0x7a, 0xfc, 0xdb, 0xb2, 0x07, 0x31, 0xa7, 0xe8, 0xd6, 0xc3, 0x18, 0xf7, 0x96, 0xdf, 0x9a,
+	0x34, 0xde, 0x4e, 0xac, 0x8f, 0xaf, 0x95, 0x2e, 0xe5, 0x39, 0x61, 0x29, 0xe2, 0x65, 0x8a, 0x53,
+	0x60, 0xd2, 0x79, 0xbc, 0x68, 0xf5, 0x1f, 0x67, 0xfa, 0xdc, 0xa0, 0xef, 0x9d, 0xee, 0x49, 0x10,
+	0xfc, 0xe8, 0x1c, 0x9e, 0xb4, 0x25, 0x83, 0x44, 0xa0, 0x16, 0x36, 0x68, 0xea, 0xa1, 0x50, 0x33,
+	0x7f, 0x6a, 0xce, 0x2c, 0x48, 0xc4, 0xcc, 0x70, 0x66, 0x53, 0x6f, 0x66, 0x38, 0x37, 0x9d, 0x41,
+	0x9b, 0xf0, 0xfd, 0x20, 0x11, 0xbe, 0x6f, 0x58, 0xbe, 0x3f, 0xf5, 0x7c, 0xdf, 0xf0, 0xce, 0xb6,
+	0x65, 0xb3, 0xde, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0x32, 0x4d, 0x81, 0x52, 0x04, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_label.pb.go b/googleapis/ads/googleads/v3/resources/customer_label.pb.go
new file mode 100644
index 0000000..8a576f6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_label.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents a relationship between a customer and a label. This customer may
+// not have access to all the labels attached to it. Additional CustomerLabels
+// may be returned by increasing permissions with login-customer-id.
+type CustomerLabel struct {
+	// Name of the resource.
+	// Customer label resource names have the form:
+	// `customers/{customer_id}/customerLabels/{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The resource name of the customer to which the label is attached.
+	// Read only.
+	Customer *wrappers.StringValue `protobuf:"bytes,2,opt,name=customer,proto3" json:"customer,omitempty"`
+	// The resource name of the label assigned to the customer.
+	//
+	// Note: the Customer ID portion of the label resource name is not
+	// validated when creating a new CustomerLabel.
+	Label                *wrappers.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomerLabel) Reset()         { *m = CustomerLabel{} }
+func (m *CustomerLabel) String() string { return proto.CompactTextString(m) }
+func (*CustomerLabel) ProtoMessage()    {}
+func (*CustomerLabel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cb93c66565bf0f10, []int{0}
+}
+
+func (m *CustomerLabel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerLabel.Unmarshal(m, b)
+}
+func (m *CustomerLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerLabel.Marshal(b, m, deterministic)
+}
+func (m *CustomerLabel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerLabel.Merge(m, src)
+}
+func (m *CustomerLabel) XXX_Size() int {
+	return xxx_messageInfo_CustomerLabel.Size(m)
+}
+func (m *CustomerLabel) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerLabel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerLabel proto.InternalMessageInfo
+
+func (m *CustomerLabel) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerLabel) GetCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.Customer
+	}
+	return nil
+}
+
+func (m *CustomerLabel) GetLabel() *wrappers.StringValue {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomerLabel)(nil), "google.ads.googleads.v3.resources.CustomerLabel")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_label.proto", fileDescriptor_cb93c66565bf0f10)
+}
+
+var fileDescriptor_cb93c66565bf0f10 = []byte{
+	// 369 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x4a, 0xeb, 0x40,
+	0x14, 0xc6, 0x49, 0xca, 0xbd, 0xdc, 0x1b, 0xed, 0x26, 0xab, 0x5a, 0x8a, 0xb4, 0x4a, 0xa5, 0xab,
+	0x19, 0x68, 0x44, 0x64, 0x5c, 0xa5, 0x2e, 0x0a, 0x22, 0x52, 0x2a, 0x64, 0x21, 0xc1, 0x32, 0x4d,
+	0xc6, 0x10, 0x48, 0x66, 0xc2, 0x4c, 0x52, 0x17, 0xd2, 0xa5, 0x2f, 0xe2, 0xd2, 0x47, 0xf1, 0x51,
+	0xfa, 0x12, 0x4a, 0x32, 0x7f, 0xda, 0x6e, 0xd4, 0xdd, 0x97, 0x9c, 0xdf, 0x77, 0xce, 0x77, 0x66,
+	0xc6, 0xb9, 0x48, 0x18, 0x4b, 0x32, 0x02, 0x71, 0x2c, 0xa0, 0x94, 0xb5, 0x5a, 0x79, 0x90, 0x13,
+	0xc1, 0x2a, 0x1e, 0x11, 0x01, 0xa3, 0x4a, 0x94, 0x2c, 0x27, 0x7c, 0x91, 0xe1, 0x25, 0xc9, 0x40,
+	0xc1, 0x59, 0xc9, 0xdc, 0x81, 0x84, 0x01, 0x8e, 0x05, 0x30, 0x3e, 0xb0, 0xf2, 0x80, 0xf1, 0x75,
+	0x8f, 0x74, 0xeb, 0x22, 0x35, 0xdd, 0xa4, 0xbb, 0x7b, 0xac, 0x4a, 0xcd, 0xd7, 0xb2, 0x7a, 0x82,
+	0xcf, 0x1c, 0x17, 0x05, 0xe1, 0x42, 0xd5, 0x7b, 0x3b, 0x56, 0x4c, 0x29, 0x2b, 0x71, 0x99, 0x32,
+	0xaa, 0xaa, 0x27, 0xaf, 0xb6, 0xd3, 0xbe, 0x56, 0xa1, 0x6e, 0xeb, 0x4c, 0xee, 0xa9, 0xd3, 0xd6,
+	0x13, 0x16, 0x14, 0xe7, 0xa4, 0x63, 0xf5, 0xad, 0xd1, 0xff, 0xf9, 0xa1, 0xfe, 0x79, 0x87, 0x73,
+	0xe2, 0x5e, 0x3a, 0xff, 0xf4, 0x2a, 0x1d, 0xbb, 0x6f, 0x8d, 0x0e, 0xc6, 0x3d, 0x15, 0x1d, 0xe8,
+	0x1c, 0xe0, 0xbe, 0xe4, 0x29, 0x4d, 0x02, 0x9c, 0x55, 0x64, 0x6e, 0x68, 0x77, 0xec, 0xfc, 0x69,
+	0x76, 0xef, 0xb4, 0x7e, 0x61, 0x93, 0x28, 0xc2, 0x1b, 0xff, 0xd1, 0x39, 0xdb, 0x1e, 0x8d, 0x52,
+	0x45, 0x2a, 0x40, 0xc4, 0x72, 0xb8, 0x9f, 0xff, 0x5c, 0x8f, 0x12, 0xf0, 0x45, 0xcb, 0xb5, 0x39,
+	0xf8, 0x86, 0xd9, 0xa9, 0xc8, 0x8b, 0x58, 0x4f, 0x3e, 0x2d, 0x67, 0x18, 0xb1, 0x1c, 0xfc, 0x78,
+	0x15, 0x13, 0x77, 0x6f, 0xdc, 0xac, 0x8e, 0x3d, 0xb3, 0x1e, 0x6e, 0x94, 0x31, 0x61, 0x19, 0xa6,
+	0x09, 0x60, 0x3c, 0x81, 0x09, 0xa1, 0xcd, 0x52, 0x70, 0x1b, 0xf7, 0x9b, 0xa7, 0x71, 0x65, 0xd4,
+	0x9b, 0xdd, 0x9a, 0xfa, 0xfe, 0xbb, 0x3d, 0x98, 0xca, 0x96, 0x7e, 0x2c, 0x80, 0x94, 0xb5, 0x0a,
+	0x3c, 0x30, 0xd7, 0xe4, 0x87, 0x66, 0x42, 0x3f, 0x16, 0xa1, 0x61, 0xc2, 0xc0, 0x0b, 0x0d, 0xb3,
+	0xb1, 0x87, 0xb2, 0x80, 0x90, 0x1f, 0x0b, 0x84, 0x0c, 0x85, 0x50, 0xe0, 0x21, 0x64, 0xb8, 0xe5,
+	0xdf, 0x26, 0xac, 0xf7, 0x15, 0x00, 0x00, 0xff, 0xff, 0x73, 0xf2, 0x1e, 0xa2, 0xc6, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_manager_link.pb.go b/googleapis/ads/googleads/v3/resources/customer_manager_link.pb.go
new file mode 100644
index 0000000..3d30c75
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_manager_link.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_manager_link.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Represents customer-manager link relationship.
+type CustomerManagerLink struct {
+	// Name of the resource.
+	// CustomerManagerLink resource names have the form:
+	// `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The manager customer linked to the customer.
+	ManagerCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=manager_customer,json=managerCustomer,proto3" json:"manager_customer,omitempty"`
+	// ID of the customer-manager link. This field is read only.
+	ManagerLinkId *wrappers.Int64Value `protobuf:"bytes,4,opt,name=manager_link_id,json=managerLinkId,proto3" json:"manager_link_id,omitempty"`
+	// Status of the link between the customer and the manager.
+	Status               enums.ManagerLinkStatusEnum_ManagerLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.ManagerLinkStatusEnum_ManagerLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *CustomerManagerLink) Reset()         { *m = CustomerManagerLink{} }
+func (m *CustomerManagerLink) String() string { return proto.CompactTextString(m) }
+func (*CustomerManagerLink) ProtoMessage()    {}
+func (*CustomerManagerLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f371b86257a487a2, []int{0}
+}
+
+func (m *CustomerManagerLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerManagerLink.Unmarshal(m, b)
+}
+func (m *CustomerManagerLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerManagerLink.Marshal(b, m, deterministic)
+}
+func (m *CustomerManagerLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerManagerLink.Merge(m, src)
+}
+func (m *CustomerManagerLink) XXX_Size() int {
+	return xxx_messageInfo_CustomerManagerLink.Size(m)
+}
+func (m *CustomerManagerLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerManagerLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerManagerLink proto.InternalMessageInfo
+
+func (m *CustomerManagerLink) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerManagerLink) GetManagerCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ManagerCustomer
+	}
+	return nil
+}
+
+func (m *CustomerManagerLink) GetManagerLinkId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ManagerLinkId
+	}
+	return nil
+}
+
+func (m *CustomerManagerLink) GetStatus() enums.ManagerLinkStatusEnum_ManagerLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ManagerLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CustomerManagerLink)(nil), "google.ads.googleads.v3.resources.CustomerManagerLink")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_manager_link.proto", fileDescriptor_f371b86257a487a2)
+}
+
+var fileDescriptor_f371b86257a487a2 = []byte{
+	// 453 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4d, 0x6b, 0xd5, 0x40,
+	0x14, 0x25, 0xef, 0x69, 0xc1, 0xd1, 0x5a, 0x89, 0x9b, 0x58, 0x8b, 0xbc, 0x2a, 0x85, 0xb7, 0x90,
+	0x19, 0x68, 0x44, 0x61, 0xc4, 0x45, 0x5a, 0xf4, 0x51, 0x51, 0x29, 0xaf, 0xf0, 0x16, 0x12, 0x0c,
+	0xd3, 0x64, 0x1c, 0x42, 0x33, 0x33, 0x71, 0x66, 0x52, 0x17, 0xd2, 0xa5, 0x7f, 0xc3, 0x85, 0x4b,
+	0x7f, 0x8a, 0x3f, 0xa5, 0xbf, 0x42, 0x5e, 0xe6, 0xe3, 0xa5, 0xb4, 0xb5, 0xbb, 0x93, 0xb9, 0xe7,
+	0x9c, 0x7b, 0xef, 0xc9, 0x05, 0x6f, 0x98, 0x94, 0xac, 0xa1, 0x88, 0x54, 0x1a, 0x59, 0xb8, 0x44,
+	0xa7, 0x29, 0x52, 0x54, 0xcb, 0x4e, 0x95, 0x54, 0xa3, 0xb2, 0xd3, 0x46, 0x72, 0xaa, 0x0a, 0x4e,
+	0x04, 0x61, 0x54, 0x15, 0x4d, 0x2d, 0x4e, 0x60, 0xab, 0xa4, 0x91, 0xf1, 0xb6, 0xd5, 0x40, 0x52,
+	0x69, 0x18, 0xe4, 0xf0, 0x34, 0x85, 0x41, 0xbe, 0xf9, 0xea, 0xba, 0x0e, 0x54, 0x74, 0x5c, 0xa3,
+	0xa1, 0x69, 0xa1, 0x0d, 0x31, 0x9d, 0xb6, 0xde, 0x9b, 0x8f, 0xbc, 0xb0, 0xad, 0xc3, 0x34, 0xae,
+	0xf4, 0xc4, 0x95, 0xfa, 0xaf, 0xe3, 0xee, 0x2b, 0xfa, 0xae, 0x48, 0xdb, 0x52, 0xe5, 0xa5, 0x5b,
+	0x03, 0x29, 0x11, 0x42, 0x1a, 0x62, 0x6a, 0x29, 0x5c, 0xf5, 0xe9, 0xaf, 0x31, 0x78, 0xb8, 0xef,
+	0x96, 0xfa, 0x68, 0xdb, 0x7f, 0xa8, 0xc5, 0x49, 0xfc, 0x0c, 0xac, 0xfb, 0x3e, 0x85, 0x20, 0x9c,
+	0x26, 0xd1, 0x24, 0x9a, 0xde, 0x99, 0xdf, 0xf3, 0x8f, 0x9f, 0x08, 0xa7, 0xf1, 0x0c, 0x3c, 0xf0,
+	0x23, 0xfb, 0x60, 0x92, 0xf1, 0x24, 0x9a, 0xde, 0xdd, 0xdd, 0x72, 0x09, 0x40, 0x3f, 0x15, 0x3c,
+	0x32, 0xaa, 0x16, 0x6c, 0x41, 0x9a, 0x8e, 0xce, 0x37, 0x9c, 0xca, 0x37, 0x8e, 0xf7, 0xc1, 0xc6,
+	0x85, 0xdd, 0xeb, 0x2a, 0xb9, 0xd5, 0xfb, 0x3c, 0xbe, 0xe4, 0x73, 0x20, 0xcc, 0xcb, 0x17, 0xd6,
+	0x66, 0x9d, 0xaf, 0x06, 0x3e, 0xa8, 0xe2, 0x2f, 0x60, 0xcd, 0x66, 0x96, 0xdc, 0x9e, 0x44, 0xd3,
+	0xfb, 0xbb, 0xef, 0xe0, 0x75, 0x3f, 0xa4, 0x4f, 0x1b, 0x0e, 0xd6, 0x3d, 0xea, 0x75, 0x6f, 0x45,
+	0xc7, 0x2f, 0xbf, 0xce, 0x9d, 0x2b, 0x36, 0xe7, 0xd9, 0x37, 0xf0, 0x7c, 0x65, 0xe4, 0x50, 0x5b,
+	0x6b, 0x58, 0x4a, 0x8e, 0xae, 0x4a, 0x31, 0xf3, 0xb1, 0x68, 0xf4, 0xc3, 0xc3, 0xb3, 0x70, 0x44,
+	0x03, 0xe6, 0xa0, 0x7e, 0xe1, 0xb4, 0xce, 0xf6, 0x7e, 0x8e, 0xc0, 0x4e, 0x29, 0x39, 0xbc, 0xf1,
+	0xb8, 0xf6, 0x92, 0x2b, 0x26, 0x38, 0x5c, 0xc6, 0x76, 0x18, 0x7d, 0x7e, 0xef, 0xe4, 0x4c, 0x36,
+	0x44, 0x30, 0x28, 0x15, 0x43, 0x8c, 0x8a, 0x3e, 0x54, 0xb4, 0xda, 0xe3, 0x3f, 0x97, 0xff, 0x3a,
+	0xa0, 0xdf, 0xa3, 0xf1, 0x2c, 0xcb, 0xfe, 0x8c, 0xb6, 0x67, 0xd6, 0x32, 0xab, 0x34, 0xb4, 0x70,
+	0x89, 0x16, 0x29, 0x9c, 0x7b, 0xe6, 0x5f, 0xcf, 0xc9, 0xb3, 0x4a, 0xe7, 0x81, 0x93, 0x2f, 0xd2,
+	0x3c, 0x70, 0xce, 0x47, 0x3b, 0xb6, 0x80, 0x71, 0x56, 0x69, 0x8c, 0x03, 0x0b, 0xe3, 0x45, 0x8a,
+	0x71, 0xe0, 0x1d, 0xaf, 0xf5, 0xc3, 0xa6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x19, 0x12, 0x3a,
+	0xfc, 0xa5, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/customer_negative_criterion.pb.go b/googleapis/ads/googleads/v3/resources/customer_negative_criterion.pb.go
new file mode 100644
index 0000000..fb4e1d3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/customer_negative_criterion.pb.go
@@ -0,0 +1,252 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/customer_negative_criterion.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A negative criterion for exclusions at the customer level.
+type CustomerNegativeCriterion struct {
+	// The resource name of the customer negative criterion.
+	// Customer negative criterion resource names have the form:
+	//
+	// `customers/{customer_id}/customerNegativeCriteria/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the criterion.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// The customer negative criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*CustomerNegativeCriterion_ContentLabel
+	//	*CustomerNegativeCriterion_MobileApplication
+	//	*CustomerNegativeCriterion_MobileAppCategory
+	//	*CustomerNegativeCriterion_Placement
+	//	*CustomerNegativeCriterion_YoutubeVideo
+	//	*CustomerNegativeCriterion_YoutubeChannel
+	Criterion            isCustomerNegativeCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *CustomerNegativeCriterion) Reset()         { *m = CustomerNegativeCriterion{} }
+func (m *CustomerNegativeCriterion) String() string { return proto.CompactTextString(m) }
+func (*CustomerNegativeCriterion) ProtoMessage()    {}
+func (*CustomerNegativeCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9b7ecee4f1a6dde8, []int{0}
+}
+
+func (m *CustomerNegativeCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerNegativeCriterion.Unmarshal(m, b)
+}
+func (m *CustomerNegativeCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerNegativeCriterion.Marshal(b, m, deterministic)
+}
+func (m *CustomerNegativeCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerNegativeCriterion.Merge(m, src)
+}
+func (m *CustomerNegativeCriterion) XXX_Size() int {
+	return xxx_messageInfo_CustomerNegativeCriterion.Size(m)
+}
+func (m *CustomerNegativeCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerNegativeCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerNegativeCriterion proto.InternalMessageInfo
+
+func (m *CustomerNegativeCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerNegativeCriterion) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+type isCustomerNegativeCriterion_Criterion interface {
+	isCustomerNegativeCriterion_Criterion()
+}
+
+type CustomerNegativeCriterion_ContentLabel struct {
+	ContentLabel *common.ContentLabelInfo `protobuf:"bytes,4,opt,name=content_label,json=contentLabel,proto3,oneof"`
+}
+
+type CustomerNegativeCriterion_MobileApplication struct {
+	MobileApplication *common.MobileApplicationInfo `protobuf:"bytes,5,opt,name=mobile_application,json=mobileApplication,proto3,oneof"`
+}
+
+type CustomerNegativeCriterion_MobileAppCategory struct {
+	MobileAppCategory *common.MobileAppCategoryInfo `protobuf:"bytes,6,opt,name=mobile_app_category,json=mobileAppCategory,proto3,oneof"`
+}
+
+type CustomerNegativeCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,7,opt,name=placement,proto3,oneof"`
+}
+
+type CustomerNegativeCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,8,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type CustomerNegativeCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,9,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+func (*CustomerNegativeCriterion_ContentLabel) isCustomerNegativeCriterion_Criterion() {}
+
+func (*CustomerNegativeCriterion_MobileApplication) isCustomerNegativeCriterion_Criterion() {}
+
+func (*CustomerNegativeCriterion_MobileAppCategory) isCustomerNegativeCriterion_Criterion() {}
+
+func (*CustomerNegativeCriterion_Placement) isCustomerNegativeCriterion_Criterion() {}
+
+func (*CustomerNegativeCriterion_YoutubeVideo) isCustomerNegativeCriterion_Criterion() {}
+
+func (*CustomerNegativeCriterion_YoutubeChannel) isCustomerNegativeCriterion_Criterion() {}
+
+func (m *CustomerNegativeCriterion) GetCriterion() isCustomerNegativeCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetContentLabel() *common.ContentLabelInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_ContentLabel); ok {
+		return x.ContentLabel
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetMobileApplication() *common.MobileApplicationInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_MobileApplication); ok {
+		return x.MobileApplication
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetMobileAppCategory() *common.MobileAppCategoryInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_MobileAppCategory); ok {
+		return x.MobileAppCategory
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*CustomerNegativeCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerNegativeCriterion) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerNegativeCriterion_ContentLabel)(nil),
+		(*CustomerNegativeCriterion_MobileApplication)(nil),
+		(*CustomerNegativeCriterion_MobileAppCategory)(nil),
+		(*CustomerNegativeCriterion_Placement)(nil),
+		(*CustomerNegativeCriterion_YoutubeVideo)(nil),
+		(*CustomerNegativeCriterion_YoutubeChannel)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*CustomerNegativeCriterion)(nil), "google.ads.googleads.v3.resources.CustomerNegativeCriterion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/customer_negative_criterion.proto", fileDescriptor_9b7ecee4f1a6dde8)
+}
+
+var fileDescriptor_9b7ecee4f1a6dde8 = []byte{
+	// 621 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x6a, 0xd4, 0x40,
+	0x14, 0xc6, 0x4d, 0x5a, 0x5b, 0x77, 0xfa, 0x47, 0x8c, 0x37, 0x69, 0x95, 0xd2, 0x2a, 0x85, 0x82,
+	0x74, 0x22, 0xbb, 0xea, 0x45, 0x04, 0x21, 0x5d, 0xa4, 0x56, 0x6d, 0x29, 0x4b, 0x59, 0x51, 0x56,
+	0xc2, 0x6c, 0x72, 0x1a, 0x03, 0xc9, 0x4c, 0xc8, 0x4c, 0x56, 0x16, 0xe9, 0x85, 0x17, 0xe2, 0x85,
+	0x6f, 0xe1, 0xa5, 0x8f, 0xe2, 0xa3, 0xf4, 0x29, 0x24, 0x93, 0x99, 0xd9, 0x5a, 0x5d, 0xb7, 0xde,
+	0x9d, 0x3d, 0xe7, 0x7c, 0xbf, 0x73, 0xf2, 0x2d, 0x73, 0x50, 0x37, 0x61, 0x2c, 0xc9, 0xc0, 0x23,
+	0x31, 0xf7, 0x9a, 0xb0, 0x8e, 0x46, 0x1d, 0xaf, 0x04, 0xce, 0xaa, 0x32, 0x02, 0xee, 0x45, 0x15,
+	0x17, 0x2c, 0x87, 0x32, 0xa4, 0x90, 0x10, 0x91, 0x8e, 0x20, 0x8c, 0xca, 0x54, 0x40, 0x99, 0x32,
+	0x8a, 0x8b, 0x92, 0x09, 0xe6, 0x6c, 0x35, 0x4a, 0x4c, 0x62, 0x8e, 0x0d, 0x04, 0x8f, 0x3a, 0xd8,
+	0x40, 0xd6, 0x77, 0xa7, 0xcd, 0x89, 0x58, 0x9e, 0x33, 0xea, 0x29, 0x24, 0x69, 0x88, 0xeb, 0xed,
+	0x69, 0xed, 0x40, 0xab, 0x9c, 0x7b, 0x66, 0x81, 0x50, 0x8c, 0x0b, 0x50, 0x9a, 0x35, 0xad, 0x29,
+	0x52, 0xb3, 0xbd, 0x2a, 0x6d, 0xa8, 0x92, 0xfc, 0x35, 0xac, 0x4e, 0xbd, 0x8f, 0x25, 0x29, 0x0a,
+	0x28, 0xb9, 0xaa, 0xdf, 0xbd, 0x20, 0x25, 0x94, 0x32, 0x41, 0x44, 0xca, 0xa8, 0xaa, 0xde, 0xfb,
+	0xba, 0x88, 0xd6, 0xba, 0xca, 0x84, 0x23, 0xe5, 0x41, 0x57, 0x6f, 0xe0, 0xdc, 0x47, 0x2b, 0x7a,
+	0x5a, 0x48, 0x49, 0x0e, 0xae, 0xb5, 0x69, 0xed, 0xb4, 0x7a, 0xcb, 0x3a, 0x79, 0x44, 0x72, 0x70,
+	0x1e, 0x20, 0x3b, 0x8d, 0x5d, 0x7b, 0xd3, 0xda, 0x59, 0x6a, 0xdf, 0x51, 0x1e, 0x61, 0xbd, 0x0d,
+	0x3e, 0xa0, 0xe2, 0xc9, 0xa3, 0x3e, 0xc9, 0x2a, 0xe8, 0xd9, 0x69, 0xec, 0xf4, 0xd0, 0x7c, 0xfd,
+	0x59, 0xee, 0xdc, 0xa6, 0xb5, 0xb3, 0xda, 0x7e, 0x86, 0xa7, 0xb9, 0x2b, 0xbd, 0xc0, 0x66, 0x93,
+	0x93, 0x71, 0x01, 0xcf, 0x69, 0x95, 0xff, 0x9e, 0xe9, 0x49, 0x96, 0xf3, 0x06, 0xad, 0x44, 0x8c,
+	0x0a, 0xa0, 0x22, 0xcc, 0xc8, 0x10, 0x32, 0x77, 0x5e, 0xee, 0xf2, 0x70, 0x2a, 0xbc, 0xf9, 0x5f,
+	0x70, 0xb7, 0x11, 0xbd, 0xae, 0x35, 0x07, 0xf4, 0x94, 0xbd, 0xb8, 0xd6, 0x5b, 0x8e, 0x2e, 0xe4,
+	0x9c, 0x53, 0xe4, 0xe4, 0x6c, 0x98, 0x66, 0x10, 0x92, 0xa2, 0xc8, 0xd2, 0x48, 0x3a, 0xe7, 0x5e,
+	0x97, 0xf4, 0xc7, 0xb3, 0xe8, 0x87, 0x52, 0x19, 0x4c, 0x84, 0x6a, 0xc4, 0xad, 0xfc, 0x72, 0xc1,
+	0x49, 0xd0, 0xed, 0xc9, 0x9c, 0x30, 0x22, 0x02, 0x12, 0x56, 0x8e, 0xdd, 0x85, 0xff, 0x1c, 0xd4,
+	0x55, 0xc2, 0x3f, 0x06, 0xe9, 0x82, 0x73, 0x88, 0x5a, 0x45, 0x46, 0x22, 0xc8, 0x81, 0x0a, 0x77,
+	0x51, 0xe2, 0x77, 0x67, 0xe1, 0x8f, 0xb5, 0x40, 0x61, 0x27, 0x84, 0xda, 0xf8, 0x31, 0xab, 0x44,
+	0x35, 0x84, 0x70, 0x94, 0xc6, 0xc0, 0xdc, 0x1b, 0x57, 0x33, 0xfe, 0x2d, 0xab, 0x4e, 0xaa, 0x21,
+	0xf4, 0x6b, 0x8d, 0x36, 0x5e, 0x81, 0x64, 0xce, 0x79, 0x8f, 0x6e, 0x6a, 0x70, 0xf4, 0x81, 0x50,
+	0x0a, 0x99, 0xdb, 0x92, 0xe8, 0xf6, 0x15, 0xd1, 0xdd, 0x46, 0xa5, 0xe0, 0xab, 0x0a, 0xa6, 0xb2,
+	0xfe, 0x17, 0xeb, 0x3c, 0xf8, 0x6c, 0xa1, 0xf6, 0x04, 0xa0, 0xa2, 0x22, 0xe5, 0x35, 0xc8, 0x9b,
+	0xfe, 0x22, 0x5e, 0xe9, 0x8b, 0xc1, 0xbd, 0x4f, 0x3a, 0x3c, 0x33, 0x67, 0xe4, 0x52, 0x3f, 0x99,
+	0xf4, 0xfc, 0xe5, 0xc0, 0x9c, 0xed, 0x2d, 0xa1, 0x96, 0xf9, 0xb5, 0xf7, 0xcd, 0x46, 0xdb, 0x11,
+	0xcb, 0xf1, 0xcc, 0x7b, 0xb3, 0xb7, 0x31, 0x75, 0xbd, 0xe3, 0xfa, 0xd5, 0x1d, 0x5b, 0xef, 0x5e,
+	0x2a, 0x48, 0xc2, 0x32, 0x42, 0x13, 0xcc, 0xca, 0xc4, 0x4b, 0x80, 0xca, 0x37, 0xe9, 0x4d, 0x3e,
+	0xf5, 0x1f, 0x87, 0xf1, 0xa9, 0x89, 0xbe, 0xdb, 0x73, 0xfb, 0x41, 0xf0, 0xc3, 0xde, 0xda, 0x6f,
+	0x90, 0x41, 0xcc, 0x71, 0x13, 0xd6, 0x51, 0xbf, 0x83, 0x7b, 0xba, 0xf3, 0xa7, 0xee, 0x19, 0x04,
+	0x31, 0x1f, 0x98, 0x9e, 0x41, 0xbf, 0x33, 0x30, 0x3d, 0xe7, 0xf6, 0x76, 0x53, 0xf0, 0xfd, 0x20,
+	0xe6, 0xbe, 0x6f, 0xba, 0x7c, 0xbf, 0xdf, 0xf1, 0x7d, 0xd3, 0x37, 0x5c, 0x90, 0xcb, 0x76, 0x7e,
+	0x05, 0x00, 0x00, 0xff, 0xff, 0x44, 0xcf, 0xca, 0x20, 0xc4, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/detail_placement_view.pb.go b/googleapis/ads/googleads/v3/resources/detail_placement_view.pb.go
new file mode 100644
index 0000000..4fa0e42
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/detail_placement_view.pb.go
@@ -0,0 +1,161 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/detail_placement_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A view with metrics aggregated by ad group and URL or YouTube video.
+type DetailPlacementView struct {
+	// The resource name of the detail placement view.
+	// Detail placement view resource names have the form:
+	//
+	// `customers/{customer_id}/detailPlacementViews/{ad_group_id}~{base64_placement}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The automatic placement string at detail level, e. g. website URL, mobile
+	// application ID, or a YouTube video ID.
+	Placement *wrappers.StringValue `protobuf:"bytes,2,opt,name=placement,proto3" json:"placement,omitempty"`
+	// The display name is URL name for websites, YouTube video name for YouTube
+	// videos, and translated mobile app name for mobile apps.
+	DisplayName *wrappers.StringValue `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// URL of the group placement, e.g. domain, link to the mobile application in
+	// app store, or a YouTube channel URL.
+	GroupPlacementTargetUrl *wrappers.StringValue `protobuf:"bytes,4,opt,name=group_placement_target_url,json=groupPlacementTargetUrl,proto3" json:"group_placement_target_url,omitempty"`
+	// URL of the placement, e.g. website, link to the mobile application in app
+	// store, or a YouTube video URL.
+	TargetUrl *wrappers.StringValue `protobuf:"bytes,5,opt,name=target_url,json=targetUrl,proto3" json:"target_url,omitempty"`
+	// Type of the placement, e.g. Website, YouTube Video, and Mobile Application.
+	PlacementType        enums.PlacementTypeEnum_PlacementType `protobuf:"varint,6,opt,name=placement_type,json=placementType,proto3,enum=google.ads.googleads.v3.enums.PlacementTypeEnum_PlacementType" json:"placement_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *DetailPlacementView) Reset()         { *m = DetailPlacementView{} }
+func (m *DetailPlacementView) String() string { return proto.CompactTextString(m) }
+func (*DetailPlacementView) ProtoMessage()    {}
+func (*DetailPlacementView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_55e3b8e503380d64, []int{0}
+}
+
+func (m *DetailPlacementView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DetailPlacementView.Unmarshal(m, b)
+}
+func (m *DetailPlacementView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DetailPlacementView.Marshal(b, m, deterministic)
+}
+func (m *DetailPlacementView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DetailPlacementView.Merge(m, src)
+}
+func (m *DetailPlacementView) XXX_Size() int {
+	return xxx_messageInfo_DetailPlacementView.Size(m)
+}
+func (m *DetailPlacementView) XXX_DiscardUnknown() {
+	xxx_messageInfo_DetailPlacementView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DetailPlacementView proto.InternalMessageInfo
+
+func (m *DetailPlacementView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *DetailPlacementView) GetPlacement() *wrappers.StringValue {
+	if m != nil {
+		return m.Placement
+	}
+	return nil
+}
+
+func (m *DetailPlacementView) GetDisplayName() *wrappers.StringValue {
+	if m != nil {
+		return m.DisplayName
+	}
+	return nil
+}
+
+func (m *DetailPlacementView) GetGroupPlacementTargetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.GroupPlacementTargetUrl
+	}
+	return nil
+}
+
+func (m *DetailPlacementView) GetTargetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.TargetUrl
+	}
+	return nil
+}
+
+func (m *DetailPlacementView) GetPlacementType() enums.PlacementTypeEnum_PlacementType {
+	if m != nil {
+		return m.PlacementType
+	}
+	return enums.PlacementTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*DetailPlacementView)(nil), "google.ads.googleads.v3.resources.DetailPlacementView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/detail_placement_view.proto", fileDescriptor_55e3b8e503380d64)
+}
+
+var fileDescriptor_55e3b8e503380d64 = []byte{
+	// 483 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xdd, 0x6a, 0xdb, 0x30,
+	0x14, 0x26, 0x6e, 0x57, 0xa8, 0xfa, 0x73, 0xe1, 0x5d, 0xcc, 0x0b, 0x65, 0xa4, 0x1b, 0x85, 0x5c,
+	0x0c, 0x09, 0xe2, 0x3b, 0x95, 0x6d, 0xb8, 0x6c, 0x14, 0x76, 0x31, 0x42, 0xb6, 0x19, 0x36, 0x02,
+	0x41, 0xb5, 0xcf, 0x8c, 0xc1, 0x96, 0x34, 0x49, 0x4e, 0x08, 0xa5, 0x97, 0x7b, 0x91, 0x5d, 0x8e,
+	0x3d, 0xc9, 0x1e, 0xa5, 0x4f, 0x31, 0x62, 0xcb, 0x72, 0x02, 0xe9, 0x96, 0xbb, 0x4f, 0x3a, 0xdf,
+	0xf7, 0x9d, 0x73, 0x74, 0x8e, 0xd0, 0xab, 0x4c, 0x88, 0xac, 0x00, 0xc2, 0x52, 0x4d, 0x1a, 0xb8,
+	0x42, 0xf3, 0x90, 0x28, 0xd0, 0xa2, 0x52, 0x09, 0x68, 0x92, 0x82, 0x61, 0x79, 0x31, 0x93, 0x05,
+	0x4b, 0xa0, 0x04, 0x6e, 0x66, 0xf3, 0x1c, 0x16, 0x58, 0x2a, 0x61, 0x84, 0x7f, 0xde, 0x68, 0x30,
+	0x4b, 0x35, 0x76, 0x72, 0x3c, 0x0f, 0xb1, 0x93, 0xf7, 0x47, 0x0f, 0x65, 0x00, 0x5e, 0x95, 0x9a,
+	0x74, 0xb6, 0x66, 0x29, 0xa1, 0xb1, 0xed, 0x3f, 0x6d, 0x35, 0x32, 0x77, 0x85, 0xd8, 0xd0, 0x33,
+	0x1b, 0xaa, 0x4f, 0x37, 0xd5, 0x37, 0xb2, 0x50, 0x4c, 0x4a, 0x50, 0xda, 0xc6, 0xcf, 0xd6, 0xa4,
+	0x8c, 0x73, 0x61, 0x98, 0xc9, 0x05, 0xb7, 0xd1, 0xe7, 0xbf, 0xf7, 0xd1, 0xe3, 0xb7, 0x75, 0x3f,
+	0xe3, 0x36, 0x6f, 0x9c, 0xc3, 0xc2, 0x7f, 0x81, 0x4e, 0xda, 0x3c, 0x33, 0xce, 0x4a, 0x08, 0x7a,
+	0x83, 0xde, 0xf0, 0x70, 0x72, 0xdc, 0x5e, 0x7e, 0x60, 0x25, 0xf8, 0x14, 0x1d, 0xba, 0x6a, 0x03,
+	0x6f, 0xd0, 0x1b, 0x1e, 0x8d, 0xce, 0x6c, 0xd7, 0xb8, 0x2d, 0x07, 0x7f, 0x34, 0x2a, 0xe7, 0x59,
+	0xcc, 0x8a, 0x0a, 0x26, 0x1d, 0xdd, 0x7f, 0x83, 0x8e, 0xd3, 0x5c, 0xcb, 0x82, 0x2d, 0x1b, 0xff,
+	0xbd, 0x1d, 0xe4, 0x47, 0x56, 0x51, 0x27, 0xff, 0x82, 0xfa, 0x99, 0x12, 0x95, 0x5c, 0x9b, 0x83,
+	0x61, 0x2a, 0x03, 0x33, 0xab, 0x54, 0x11, 0xec, 0xef, 0x60, 0xf7, 0xa4, 0xd6, 0xbb, 0xbe, 0x3f,
+	0xd5, 0xea, 0xcf, 0xaa, 0xf0, 0x2f, 0x11, 0x5a, 0xb3, 0x7a, 0xb4, 0x4b, 0x63, 0xc6, 0x89, 0x01,
+	0x9d, 0x6e, 0x8e, 0x30, 0x38, 0x18, 0xf4, 0x86, 0xa7, 0xa3, 0xd7, 0xf8, 0xa1, 0xd5, 0xa8, 0xe7,
+	0x8e, 0xbb, 0x3a, 0x96, 0x12, 0xde, 0xf1, 0xaa, 0xdc, 0xbc, 0x99, 0x9c, 0xc8, 0xf5, 0x23, 0x35,
+	0xf7, 0xd1, 0x77, 0xf4, 0xb2, 0xf3, 0xb1, 0x48, 0xe6, 0x1a, 0x27, 0xa2, 0x24, 0xdb, 0x66, 0x1a,
+	0x25, 0x95, 0x36, 0xa2, 0x04, 0xa5, 0xc9, 0x6d, 0x0b, 0xef, 0xec, 0x36, 0x6f, 0x30, 0x35, 0xb9,
+	0xdd, 0xba, 0xe3, 0x77, 0x57, 0x3f, 0x3c, 0x74, 0x91, 0x88, 0x12, 0xff, 0x77, 0xcb, 0xaf, 0x82,
+	0x2d, 0x15, 0x8c, 0x57, 0x4f, 0x37, 0xee, 0x7d, 0x7d, 0x6f, 0xe5, 0x99, 0x28, 0x18, 0xcf, 0xb0,
+	0x50, 0x19, 0xc9, 0x80, 0xd7, 0x0f, 0x4b, 0xba, 0x3e, 0xfe, 0xf1, 0x05, 0x2f, 0x1d, 0xfa, 0xe9,
+	0xed, 0x5d, 0x47, 0xd1, 0x2f, 0xef, 0xfc, 0xba, 0xb1, 0x8c, 0x52, 0x8d, 0x1b, 0xb8, 0x42, 0x71,
+	0x88, 0x27, 0x2d, 0xf3, 0x4f, 0xcb, 0x99, 0x46, 0xa9, 0x9e, 0x3a, 0xce, 0x34, 0x0e, 0xa7, 0x8e,
+	0x73, 0xef, 0x5d, 0x34, 0x01, 0x4a, 0xa3, 0x54, 0x53, 0xea, 0x58, 0x94, 0xc6, 0x21, 0xa5, 0x8e,
+	0x77, 0x73, 0x50, 0x17, 0x1b, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x28, 0xbe, 0xdd, 0xc6, 0x2e,
+	0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/display_keyword_view.pb.go b/googleapis/ads/googleads/v3/resources/display_keyword_view.pb.go
new file mode 100644
index 0000000..c95bfc3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/display_keyword_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/display_keyword_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A display keyword view.
+type DisplayKeywordView struct {
+	// The resource name of the display keyword view.
+	// Display Keyword view resource names have the form:
+	//
+	// `customers/{customer_id}/displayKeywordViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisplayKeywordView) Reset()         { *m = DisplayKeywordView{} }
+func (m *DisplayKeywordView) String() string { return proto.CompactTextString(m) }
+func (*DisplayKeywordView) ProtoMessage()    {}
+func (*DisplayKeywordView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5b0a6220f800cacf, []int{0}
+}
+
+func (m *DisplayKeywordView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayKeywordView.Unmarshal(m, b)
+}
+func (m *DisplayKeywordView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayKeywordView.Marshal(b, m, deterministic)
+}
+func (m *DisplayKeywordView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayKeywordView.Merge(m, src)
+}
+func (m *DisplayKeywordView) XXX_Size() int {
+	return xxx_messageInfo_DisplayKeywordView.Size(m)
+}
+func (m *DisplayKeywordView) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayKeywordView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayKeywordView proto.InternalMessageInfo
+
+func (m *DisplayKeywordView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*DisplayKeywordView)(nil), "google.ads.googleads.v3.resources.DisplayKeywordView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/display_keyword_view.proto", fileDescriptor_5b0a6220f800cacf)
+}
+
+var fileDescriptor_5b0a6220f800cacf = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0xc3, 0x40,
+	0x10, 0x86, 0x49, 0x04, 0xc1, 0xa0, 0x97, 0x5e, 0xd4, 0xe2, 0xc1, 0x2a, 0x05, 0x41, 0xd8, 0x3d,
+	0xe4, 0xb6, 0x0a, 0x92, 0x22, 0x14, 0x14, 0xa4, 0xf4, 0x90, 0x83, 0x04, 0xca, 0x9a, 0x5d, 0xc2,
+	0x62, 0xb3, 0x13, 0x77, 0xd2, 0x96, 0x52, 0x7a, 0xf3, 0x49, 0x3c, 0x8a, 0x4f, 0xe2, 0xa3, 0xf4,
+	0x29, 0xa4, 0xdd, 0xee, 0xb6, 0x60, 0xd1, 0xdb, 0x4f, 0xe6, 0xfb, 0xff, 0x7f, 0x67, 0x12, 0xdd,
+	0x16, 0x00, 0xc5, 0x50, 0x52, 0x2e, 0x90, 0x5a, 0xb9, 0x54, 0xe3, 0x98, 0x1a, 0x89, 0x30, 0x32,
+	0xb9, 0x44, 0x2a, 0x14, 0x56, 0x43, 0x3e, 0x1d, 0xbc, 0xca, 0xe9, 0x04, 0x8c, 0x18, 0x8c, 0x95,
+	0x9c, 0x90, 0xca, 0x40, 0x0d, 0x8d, 0x96, 0xb5, 0x10, 0x2e, 0x90, 0x78, 0x37, 0x19, 0xc7, 0xc4,
+	0xbb, 0x9b, 0xa7, 0xae, 0xa0, 0x52, 0x3e, 0xd3, 0xba, 0x9b, 0x67, 0x5b, 0x23, 0xae, 0x35, 0xd4,
+	0xbc, 0x56, 0xa0, 0xd1, 0x4e, 0x2f, 0xbe, 0x82, 0xa8, 0x71, 0x6f, 0xab, 0x1f, 0x6d, 0x73, 0xaa,
+	0xe4, 0xa4, 0x71, 0x19, 0x1d, 0xb9, 0x98, 0x81, 0xe6, 0xa5, 0x3c, 0x09, 0xce, 0x83, 0xab, 0x83,
+	0xfe, 0xa1, 0xfb, 0xf8, 0xc4, 0x4b, 0xc9, 0xde, 0x16, 0x89, 0x8e, 0xae, 0x37, 0x2f, 0x5a, 0xab,
+	0x4a, 0x21, 0xc9, 0xa1, 0xa4, 0x3b, 0x62, 0xef, 0xf2, 0x11, 0xd6, 0x50, 0x4a, 0x83, 0x74, 0xe6,
+	0xe4, 0xdc, 0xad, 0xbe, 0x05, 0x22, 0x9d, 0xed, 0xba, 0xc7, 0xbc, 0xf3, 0x1e, 0x46, 0xed, 0x1c,
+	0x4a, 0xf2, 0xef, 0x45, 0x3a, 0xc7, 0xbf, 0xeb, 0x7b, 0xcb, 0x8d, 0x7b, 0xc1, 0xf3, 0xc3, 0xda,
+	0x5d, 0xc0, 0x90, 0xeb, 0x82, 0x80, 0x29, 0x68, 0x21, 0xf5, 0xea, 0x1e, 0x74, 0xb3, 0xc3, 0x1f,
+	0x3f, 0xeb, 0xc6, 0xab, 0x8f, 0x70, 0xaf, 0x9b, 0x24, 0x9f, 0x61, 0xab, 0x6b, 0x23, 0x13, 0x81,
+	0xc4, 0xca, 0xa5, 0x4a, 0x63, 0xd2, 0x77, 0xe4, 0xb7, 0x63, 0xb2, 0x44, 0x60, 0xe6, 0x99, 0x2c,
+	0x8d, 0x33, 0xcf, 0x2c, 0xc2, 0xb6, 0x1d, 0x30, 0x96, 0x08, 0x64, 0xcc, 0x53, 0x8c, 0xa5, 0x31,
+	0x63, 0x9e, 0x7b, 0xd9, 0x5f, 0x3d, 0x36, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x51, 0xa4,
+	0x8b, 0x58, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/distance_view.pb.go b/googleapis/ads/googleads/v3/resources/distance_view.pb.go
new file mode 100644
index 0000000..aad5313
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/distance_view.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/distance_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A distance view with metrics aggregated by the user's distance from an
+// advertiser's location extensions. Each DistanceBucket includes all
+// impressions that fall within its distance and a single impression will
+// contribute to the metrics for all DistanceBuckets that include the user's
+// distance.
+type DistanceView struct {
+	// The resource name of the distance view.
+	// Distance view resource names have the form:
+	//
+	// `customers/{customer_id}/distanceViews/1~{distance_bucket}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Grouping of user distance from location extensions.
+	DistanceBucket enums.DistanceBucketEnum_DistanceBucket `protobuf:"varint,2,opt,name=distance_bucket,json=distanceBucket,proto3,enum=google.ads.googleads.v3.enums.DistanceBucketEnum_DistanceBucket" json:"distance_bucket,omitempty"`
+	// True if the DistanceBucket is using the metric system, false otherwise.
+	MetricSystem         *wrappers.BoolValue `protobuf:"bytes,3,opt,name=metric_system,json=metricSystem,proto3" json:"metric_system,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *DistanceView) Reset()         { *m = DistanceView{} }
+func (m *DistanceView) String() string { return proto.CompactTextString(m) }
+func (*DistanceView) ProtoMessage()    {}
+func (*DistanceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dad7deb2cae396f2, []int{0}
+}
+
+func (m *DistanceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DistanceView.Unmarshal(m, b)
+}
+func (m *DistanceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DistanceView.Marshal(b, m, deterministic)
+}
+func (m *DistanceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DistanceView.Merge(m, src)
+}
+func (m *DistanceView) XXX_Size() int {
+	return xxx_messageInfo_DistanceView.Size(m)
+}
+func (m *DistanceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_DistanceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DistanceView proto.InternalMessageInfo
+
+func (m *DistanceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *DistanceView) GetDistanceBucket() enums.DistanceBucketEnum_DistanceBucket {
+	if m != nil {
+		return m.DistanceBucket
+	}
+	return enums.DistanceBucketEnum_UNSPECIFIED
+}
+
+func (m *DistanceView) GetMetricSystem() *wrappers.BoolValue {
+	if m != nil {
+		return m.MetricSystem
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*DistanceView)(nil), "google.ads.googleads.v3.resources.DistanceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/distance_view.proto", fileDescriptor_dad7deb2cae396f2)
+}
+
+var fileDescriptor_dad7deb2cae396f2 = []byte{
+	// 421 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x8b, 0xd4, 0x30,
+	0x1c, 0xa5, 0x5d, 0x10, 0xac, 0xb3, 0x2b, 0xf6, 0x34, 0x0e, 0x22, 0xb3, 0xca, 0xc0, 0x9c, 0x12,
+	0x98, 0xe2, 0x25, 0x1e, 0xb4, 0x45, 0x59, 0xf0, 0x20, 0x4b, 0x85, 0x1e, 0xb4, 0x38, 0x64, 0xda,
+	0x9f, 0x25, 0xd8, 0x24, 0x25, 0x49, 0x67, 0x90, 0x65, 0xbf, 0x8c, 0x47, 0xbf, 0x84, 0x77, 0x3f,
+	0xca, 0x7e, 0x08, 0x91, 0xfe, 0x49, 0x76, 0x66, 0x61, 0xdc, 0xdb, 0x4b, 0xde, 0x7b, 0xbf, 0xf7,
+	0x7e, 0x4d, 0x83, 0x57, 0x95, 0x94, 0x55, 0x0d, 0x98, 0x96, 0x1a, 0x0f, 0xb0, 0x43, 0xdb, 0x08,
+	0x2b, 0xd0, 0xb2, 0x55, 0x05, 0x68, 0x5c, 0x32, 0x6d, 0xa8, 0x28, 0x60, 0xbd, 0x65, 0xb0, 0x43,
+	0x8d, 0x92, 0x46, 0x86, 0xe7, 0x83, 0x16, 0xd1, 0x52, 0x23, 0x67, 0x43, 0xdb, 0x08, 0x39, 0xdb,
+	0x2c, 0x3a, 0x36, 0x19, 0x44, 0xcb, 0xf7, 0xa6, 0x6e, 0xda, 0xe2, 0x3b, 0x98, 0x61, 0xee, 0xec,
+	0xa9, 0x35, 0x35, 0xcc, 0x35, 0x18, 0xa9, 0xe7, 0x23, 0xd5, 0x9f, 0x36, 0xed, 0x37, 0xbc, 0x53,
+	0xb4, 0x69, 0x40, 0xe9, 0x91, 0x7f, 0xb6, 0x67, 0xa5, 0x42, 0x48, 0x43, 0x0d, 0x93, 0x62, 0x64,
+	0x5f, 0xfc, 0xf6, 0x83, 0xc9, 0xbb, 0x31, 0x32, 0x63, 0xb0, 0x0b, 0x5f, 0x06, 0xa7, 0x36, 0x60,
+	0x2d, 0x28, 0x87, 0xa9, 0x37, 0xf7, 0x96, 0x0f, 0xd3, 0x89, 0xbd, 0xfc, 0x48, 0x39, 0x84, 0x2c,
+	0x78, 0x7c, 0xa7, 0xe7, 0xd4, 0x9f, 0x7b, 0xcb, 0xb3, 0xd5, 0x5b, 0x74, 0xec, 0x03, 0xf4, 0xdb,
+	0x21, 0x1b, 0x95, 0xf4, 0xa6, 0xf7, 0xa2, 0xe5, 0x77, 0xae, 0xd2, 0xb3, 0xf2, 0xe0, 0x1c, 0xbe,
+	0x09, 0x4e, 0x39, 0x18, 0xc5, 0x8a, 0xb5, 0xfe, 0xa1, 0x0d, 0xf0, 0xe9, 0xc9, 0xdc, 0x5b, 0x3e,
+	0x5a, 0xcd, 0x6c, 0x90, 0x5d, 0x1b, 0x25, 0x52, 0xd6, 0x19, 0xad, 0x5b, 0x48, 0x27, 0x83, 0xe1,
+	0x53, 0xaf, 0x27, 0x5f, 0x6f, 0xe2, 0x2f, 0xc1, 0xe2, 0xb6, 0xcb, 0x88, 0x1a, 0xa6, 0x51, 0x21,
+	0x39, 0x3e, 0x58, 0x7e, 0x55, 0xb4, 0xda, 0x48, 0x0e, 0x4a, 0xe3, 0x2b, 0x0b, 0xaf, 0xdd, 0x93,
+	0x74, 0x12, 0x8d, 0xaf, 0x0e, 0xde, 0xfd, 0x3a, 0xf9, 0xeb, 0x05, 0x8b, 0x42, 0x72, 0x74, 0xef,
+	0xcb, 0x27, 0x4f, 0xf6, 0xb3, 0x2e, 0xbb, 0xde, 0x97, 0xde, 0xe7, 0x0f, 0xa3, 0xaf, 0x92, 0x35,
+	0x15, 0x15, 0x92, 0xaa, 0xc2, 0x15, 0x88, 0x7e, 0x2b, 0x7c, 0x5b, 0xf5, 0x3f, 0xff, 0xe1, 0x6b,
+	0x87, 0x7e, 0xfa, 0x27, 0x17, 0x71, 0xfc, 0xcb, 0x3f, 0xbf, 0x18, 0x46, 0xc6, 0xa5, 0x46, 0x03,
+	0xec, 0x50, 0x16, 0xa1, 0xd4, 0x2a, 0xff, 0x58, 0x4d, 0x1e, 0x97, 0x3a, 0x77, 0x9a, 0x3c, 0x8b,
+	0x72, 0xa7, 0xb9, 0xf1, 0x17, 0x03, 0x41, 0x48, 0x5c, 0x6a, 0x42, 0x9c, 0x8a, 0x90, 0x2c, 0x22,
+	0xc4, 0xe9, 0x36, 0x0f, 0xfa, 0xb2, 0xd1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x1d, 0x68,
+	0x23, 0x33, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/domain_category.pb.go b/googleapis/ads/googleads/v3/resources/domain_category.pb.go
new file mode 100644
index 0000000..d5c9f59
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/domain_category.pb.go
@@ -0,0 +1,196 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/domain_category.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A category generated automatically by crawling a domain. If a campaign uses
+// the DynamicSearchAdsSetting, then domain categories will be generated for
+// the domain. The categories can be targeted using WebpageConditionInfo.
+// See: https://support.google.com/google-ads/answer/2471185
+type DomainCategory struct {
+	// The resource name of the domain category.
+	// Domain category resource names have the form:
+	//
+	// `customers/{customer_id}/domainCategories/{campaign_id}~{category_base64}~{language_code}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign this category is recommended for.
+	Campaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// Recommended category for the website domain. e.g. if you have a website
+	// about electronics, the categories could be "cameras", "televisions", etc.
+	Category *wrappers.StringValue `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"`
+	// The language code specifying the language of the website. e.g. "en" for
+	// English. The language can be specified in the DynamicSearchAdsSetting
+	// required for dynamic search ads. This is the language of the pages from
+	// your website that you want Google Ads to find, create ads for,
+	// and match searches with.
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,4,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// The domain for the website. The domain can be specified in the
+	// DynamicSearchAdsSetting required for dynamic search ads.
+	Domain *wrappers.StringValue `protobuf:"bytes,5,opt,name=domain,proto3" json:"domain,omitempty"`
+	// Fraction of pages on your site that this category matches.
+	CoverageFraction *wrappers.DoubleValue `protobuf:"bytes,6,opt,name=coverage_fraction,json=coverageFraction,proto3" json:"coverage_fraction,omitempty"`
+	// The position of this category in the set of categories. Lower numbers
+	// indicate a better match for the domain. null indicates not recommended.
+	CategoryRank *wrappers.Int64Value `protobuf:"bytes,7,opt,name=category_rank,json=categoryRank,proto3" json:"category_rank,omitempty"`
+	// Indicates whether this category has sub-categories.
+	HasChildren *wrappers.BoolValue `protobuf:"bytes,8,opt,name=has_children,json=hasChildren,proto3" json:"has_children,omitempty"`
+	// The recommended cost per click for the category.
+	RecommendedCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,9,opt,name=recommended_cpc_bid_micros,json=recommendedCpcBidMicros,proto3" json:"recommended_cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}             `json:"-"`
+	XXX_unrecognized        []byte               `json:"-"`
+	XXX_sizecache           int32                `json:"-"`
+}
+
+func (m *DomainCategory) Reset()         { *m = DomainCategory{} }
+func (m *DomainCategory) String() string { return proto.CompactTextString(m) }
+func (*DomainCategory) ProtoMessage()    {}
+func (*DomainCategory) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b9715a478ef6373, []int{0}
+}
+
+func (m *DomainCategory) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DomainCategory.Unmarshal(m, b)
+}
+func (m *DomainCategory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DomainCategory.Marshal(b, m, deterministic)
+}
+func (m *DomainCategory) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DomainCategory.Merge(m, src)
+}
+func (m *DomainCategory) XXX_Size() int {
+	return xxx_messageInfo_DomainCategory.Size(m)
+}
+func (m *DomainCategory) XXX_DiscardUnknown() {
+	xxx_messageInfo_DomainCategory.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DomainCategory proto.InternalMessageInfo
+
+func (m *DomainCategory) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *DomainCategory) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetCategory() *wrappers.StringValue {
+	if m != nil {
+		return m.Category
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetDomain() *wrappers.StringValue {
+	if m != nil {
+		return m.Domain
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetCoverageFraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CoverageFraction
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetCategoryRank() *wrappers.Int64Value {
+	if m != nil {
+		return m.CategoryRank
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetHasChildren() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasChildren
+	}
+	return nil
+}
+
+func (m *DomainCategory) GetRecommendedCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedCpcBidMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*DomainCategory)(nil), "google.ads.googleads.v3.resources.DomainCategory")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/domain_category.proto", fileDescriptor_4b9715a478ef6373)
+}
+
+var fileDescriptor_4b9715a478ef6373 = []byte{
+	// 541 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xd1, 0x6a, 0x13, 0x4f,
+	0x14, 0xc6, 0x49, 0xfa, 0x6f, 0xff, 0xed, 0xb4, 0x11, 0x5d, 0x2f, 0x5c, 0x63, 0x91, 0x56, 0x29,
+	0xf6, 0x6a, 0x16, 0xdc, 0x62, 0x65, 0x45, 0x70, 0x93, 0x62, 0xa9, 0xa0, 0x94, 0x08, 0x41, 0x24,
+	0xb0, 0x4c, 0x66, 0xa6, 0x9b, 0xa1, 0xbb, 0x73, 0x96, 0x99, 0xdd, 0x88, 0x94, 0x82, 0xcf, 0xe2,
+	0xa5, 0x37, 0xbe, 0x87, 0x8f, 0xd2, 0xa7, 0x90, 0xdd, 0x99, 0xd9, 0xd6, 0x16, 0x6d, 0xee, 0x4e,
+	0x72, 0xbe, 0xdf, 0x77, 0xbe, 0x93, 0xcc, 0x41, 0xfb, 0x29, 0x40, 0x9a, 0xf1, 0x80, 0x30, 0x1d,
+	0x98, 0xb2, 0xae, 0xe6, 0x61, 0xa0, 0xb8, 0x86, 0x4a, 0x51, 0xae, 0x03, 0x06, 0x39, 0x11, 0x32,
+	0xa1, 0xa4, 0xe4, 0x29, 0xa8, 0xaf, 0xb8, 0x50, 0x50, 0x82, 0xb7, 0x6d, 0xd4, 0x98, 0x30, 0x8d,
+	0x5b, 0x10, 0xcf, 0x43, 0xdc, 0x82, 0xfd, 0x87, 0xce, 0xbb, 0x10, 0xad, 0x9d, 0xa1, 0xfb, 0x8f,
+	0x6d, 0xab, 0xf9, 0x34, 0xad, 0x4e, 0x82, 0x2f, 0x8a, 0x14, 0x05, 0x57, 0xda, 0xf6, 0x37, 0xaf,
+	0xa0, 0x44, 0x4a, 0x28, 0x49, 0x29, 0x40, 0xda, 0xee, 0x93, 0x9f, 0xcb, 0xe8, 0xce, 0x41, 0x93,
+	0x6a, 0x68, 0x43, 0x79, 0x4f, 0x51, 0xcf, 0x8d, 0x48, 0x24, 0xc9, 0xb9, 0xdf, 0xd9, 0xea, 0xec,
+	0xae, 0x8d, 0x36, 0xdc, 0x97, 0x1f, 0x48, 0xce, 0xbd, 0x97, 0x68, 0x95, 0x92, 0xbc, 0x20, 0x22,
+	0x95, 0x7e, 0x77, 0xab, 0xb3, 0xbb, 0xfe, 0x7c, 0xd3, 0x66, 0xc7, 0x2e, 0x08, 0xfe, 0x58, 0x2a,
+	0x21, 0xd3, 0x31, 0xc9, 0x2a, 0x3e, 0x6a, 0xd5, 0x86, 0x34, 0xa3, 0xfc, 0xa5, 0xc5, 0x48, 0x1b,
+	0x2c, 0x46, 0xbd, 0x8c, 0xc8, 0xb4, 0x22, 0x29, 0x4f, 0x28, 0x30, 0xee, 0xff, 0xb7, 0x00, 0xbe,
+	0xe1, 0x90, 0x21, 0x30, 0xee, 0xed, 0xa1, 0x15, 0xf3, 0x1f, 0xf8, 0xcb, 0x0b, 0xb0, 0x56, 0xeb,
+	0x1d, 0xa1, 0x7b, 0x14, 0xe6, 0x5c, 0xd5, 0x83, 0x4f, 0x14, 0xa1, 0xf5, 0x0f, 0xe8, 0xaf, 0xfc,
+	0xc5, 0xe0, 0x00, 0xaa, 0x69, 0xc6, 0x8d, 0xc1, 0x5d, 0x87, 0xbd, 0xb5, 0x94, 0xf7, 0x06, 0xf5,
+	0xdc, 0x3e, 0x89, 0x22, 0xf2, 0xd4, 0xff, 0xbf, 0xb1, 0x79, 0x74, 0xc3, 0xe6, 0x48, 0x96, 0x2f,
+	0xf6, 0xec, 0x0a, 0x8e, 0x18, 0x11, 0x79, 0xea, 0xbd, 0x46, 0x1b, 0x33, 0xa2, 0x13, 0x3a, 0x13,
+	0x19, 0x53, 0x5c, 0xfa, 0xab, 0x8d, 0x41, 0xff, 0x86, 0xc1, 0x00, 0x20, 0x33, 0xfc, 0xfa, 0x8c,
+	0xe8, 0xa1, 0x95, 0x7b, 0x9f, 0x50, 0x5f, 0x71, 0x0a, 0x79, 0xce, 0x25, 0xe3, 0x2c, 0xa1, 0x05,
+	0x4d, 0xa6, 0x82, 0x25, 0xb9, 0xa0, 0x0a, 0xb4, 0xbf, 0x76, 0x7b, 0x9a, 0x07, 0x57, 0xf0, 0x61,
+	0x41, 0x07, 0x82, 0xbd, 0x6f, 0xd8, 0x88, 0x5f, 0xc4, 0x53, 0xf4, 0xec, 0xf2, 0x01, 0xdb, 0xaa,
+	0x10, 0x1a, 0x53, 0xc8, 0x83, 0x6b, 0xaf, 0x6c, 0x9f, 0x56, 0xba, 0x84, 0x9c, 0x2b, 0x1d, 0x9c,
+	0xb9, 0xf2, 0xdc, 0x1e, 0x88, 0x15, 0x09, 0xae, 0x83, 0xb3, 0x6b, 0x27, 0x73, 0x3e, 0xf8, 0xd6,
+	0x45, 0x3b, 0x14, 0x72, 0x7c, 0xeb, 0xd1, 0x0c, 0xee, 0xff, 0x39, 0xf2, 0xb8, 0x5e, 0xe6, 0xb8,
+	0xf3, 0xf9, 0x9d, 0x25, 0x53, 0xa8, 0x9f, 0x06, 0x06, 0x95, 0x06, 0x29, 0x97, 0xcd, 0xaa, 0xc1,
+	0x65, 0xe6, 0x7f, 0x9c, 0xf1, 0xab, 0xb6, 0xfa, 0xde, 0x5d, 0x3a, 0x8c, 0xe3, 0x1f, 0xdd, 0xed,
+	0x43, 0x63, 0x19, 0x33, 0x8d, 0x4d, 0x59, 0x57, 0xe3, 0x10, 0x8f, 0x9c, 0xf2, 0x97, 0xd3, 0x4c,
+	0x62, 0xa6, 0x27, 0xad, 0x66, 0x32, 0x0e, 0x27, 0xad, 0xe6, 0xa2, 0xbb, 0x63, 0x1a, 0x51, 0x14,
+	0x33, 0x1d, 0x45, 0xad, 0x2a, 0x8a, 0xc6, 0x61, 0x14, 0xb5, 0xba, 0xe9, 0x4a, 0x13, 0x36, 0xfc,
+	0x1d, 0x00, 0x00, 0xff, 0xff, 0x18, 0x5f, 0x5b, 0x7c, 0x72, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/dynamic_search_ads_search_term_view.pb.go b/googleapis/ads/googleads/v3/resources/dynamic_search_ads_search_term_view.pb.go
new file mode 100644
index 0000000..1baaa21
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/dynamic_search_ads_search_term_view.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/dynamic_search_ads_search_term_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A dynamic search ads search term view.
+type DynamicSearchAdsSearchTermView struct {
+	// The resource name of the dynamic search ads search term view.
+	// Dynamic search ads search term view resource names have the form:
+	//
+	// `customers/{customer_id}/dynamicSearchAdsSearchTermViews/{ad_group_id}~{search_term_fp}~{headline_fp}~{landing_page_fp}~{page_url_fp}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Search term
+	//
+	// This field is read-only.
+	SearchTerm *wrappers.StringValue `protobuf:"bytes,2,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	// The dynamically generated headline of the Dynamic Search Ad.
+	//
+	// This field is read-only.
+	Headline *wrappers.StringValue `protobuf:"bytes,3,opt,name=headline,proto3" json:"headline,omitempty"`
+	// The dynamically selected landing page URL of the impression.
+	//
+	// This field is read-only.
+	LandingPage *wrappers.StringValue `protobuf:"bytes,4,opt,name=landing_page,json=landingPage,proto3" json:"landing_page,omitempty"`
+	// The URL of page feed item served for the impression.
+	//
+	// This field is read-only.
+	PageUrl *wrappers.StringValue `protobuf:"bytes,5,opt,name=page_url,json=pageUrl,proto3" json:"page_url,omitempty"`
+	// True if query matches a negative keyword.
+	//
+	// This field is read-only.
+	HasNegativeKeyword *wrappers.BoolValue `protobuf:"bytes,6,opt,name=has_negative_keyword,json=hasNegativeKeyword,proto3" json:"has_negative_keyword,omitempty"`
+	// True if query is added to targeted keywords.
+	//
+	// This field is read-only.
+	HasMatchingKeyword *wrappers.BoolValue `protobuf:"bytes,7,opt,name=has_matching_keyword,json=hasMatchingKeyword,proto3" json:"has_matching_keyword,omitempty"`
+	// True if query matches a negative url.
+	//
+	// This field is read-only.
+	HasNegativeUrl       *wrappers.BoolValue `protobuf:"bytes,8,opt,name=has_negative_url,json=hasNegativeUrl,proto3" json:"has_negative_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *DynamicSearchAdsSearchTermView) Reset()         { *m = DynamicSearchAdsSearchTermView{} }
+func (m *DynamicSearchAdsSearchTermView) String() string { return proto.CompactTextString(m) }
+func (*DynamicSearchAdsSearchTermView) ProtoMessage()    {}
+func (*DynamicSearchAdsSearchTermView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c0384f99ab33a76a, []int{0}
+}
+
+func (m *DynamicSearchAdsSearchTermView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DynamicSearchAdsSearchTermView.Unmarshal(m, b)
+}
+func (m *DynamicSearchAdsSearchTermView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DynamicSearchAdsSearchTermView.Marshal(b, m, deterministic)
+}
+func (m *DynamicSearchAdsSearchTermView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DynamicSearchAdsSearchTermView.Merge(m, src)
+}
+func (m *DynamicSearchAdsSearchTermView) XXX_Size() int {
+	return xxx_messageInfo_DynamicSearchAdsSearchTermView.Size(m)
+}
+func (m *DynamicSearchAdsSearchTermView) XXX_DiscardUnknown() {
+	xxx_messageInfo_DynamicSearchAdsSearchTermView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DynamicSearchAdsSearchTermView proto.InternalMessageInfo
+
+func (m *DynamicSearchAdsSearchTermView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetLandingPage() *wrappers.StringValue {
+	if m != nil {
+		return m.LandingPage
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetPageUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PageUrl
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetHasNegativeKeyword() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasNegativeKeyword
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetHasMatchingKeyword() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasMatchingKeyword
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdsSearchTermView) GetHasNegativeUrl() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasNegativeUrl
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*DynamicSearchAdsSearchTermView)(nil), "google.ads.googleads.v3.resources.DynamicSearchAdsSearchTermView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/dynamic_search_ads_search_term_view.proto", fileDescriptor_c0384f99ab33a76a)
+}
+
+var fileDescriptor_c0384f99ab33a76a = []byte{
+	// 525 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xc1, 0x6a, 0xdb, 0x40,
+	0x10, 0x86, 0x91, 0xd3, 0x24, 0xee, 0x3a, 0x2d, 0x45, 0xf4, 0xa0, 0x9a, 0x10, 0x92, 0x86, 0x40,
+	0x4e, 0x2b, 0xa8, 0x0e, 0x29, 0x2a, 0xa5, 0xc8, 0x04, 0x02, 0x4d, 0x1b, 0x8c, 0xd3, 0xf8, 0x10,
+	0x0c, 0x62, 0xa2, 0x9d, 0xae, 0x45, 0xa5, 0x5d, 0xb1, 0x2b, 0xdb, 0x84, 0x90, 0x77, 0xe8, 0xa5,
+	0x87, 0x5e, 0x7b, 0xec, 0x03, 0xf4, 0x21, 0xfa, 0x28, 0x79, 0x8a, 0x22, 0x4b, 0xbb, 0x71, 0x29,
+	0x8d, 0x7d, 0xfb, 0xed, 0xf9, 0xff, 0x6f, 0x66, 0xc4, 0x0e, 0x39, 0xe5, 0x52, 0xf2, 0x0c, 0x7d,
+	0x60, 0xda, 0xaf, 0x65, 0xa5, 0xa6, 0x81, 0xaf, 0x50, 0xcb, 0x89, 0x4a, 0x50, 0xfb, 0xec, 0x5a,
+	0x40, 0x9e, 0x26, 0xb1, 0x46, 0x50, 0xc9, 0x38, 0x06, 0xa6, 0x8d, 0x2c, 0x51, 0xe5, 0xf1, 0x34,
+	0xc5, 0x19, 0x2d, 0x94, 0x2c, 0xa5, 0xbb, 0x57, 0x13, 0x28, 0x30, 0x4d, 0x2d, 0x8c, 0x4e, 0x03,
+	0x6a, 0x61, 0xdd, 0x17, 0xa6, 0x5f, 0x91, 0xda, 0x16, 0x75, 0xba, 0xbb, 0xd3, 0x94, 0xe6, 0xbf,
+	0xae, 0x26, 0x9f, 0xfd, 0x99, 0x82, 0xa2, 0x40, 0xa5, 0x9b, 0xfa, 0xf6, 0x42, 0x14, 0x84, 0x90,
+	0x25, 0x94, 0xa9, 0x14, 0x4d, 0xf5, 0xe5, 0xaf, 0x75, 0xb2, 0x73, 0x5c, 0x4f, 0x7a, 0x3e, 0x9f,
+	0x2e, 0x62, 0xba, 0x16, 0x9f, 0x50, 0xe5, 0xc3, 0x14, 0x67, 0xee, 0x3e, 0x79, 0x62, 0x5a, 0xc6,
+	0x02, 0x72, 0xf4, 0x9c, 0x5d, 0xe7, 0xf0, 0xf1, 0x60, 0xcb, 0xfc, 0x79, 0x06, 0x39, 0xba, 0x6f,
+	0x49, 0x67, 0x61, 0x3b, 0xaf, 0xb5, 0xeb, 0x1c, 0x76, 0x5e, 0x6d, 0x37, 0xeb, 0x50, 0x33, 0x1b,
+	0x3d, 0x2f, 0x55, 0x2a, 0xf8, 0x10, 0xb2, 0x09, 0x0e, 0x88, 0xb6, 0x7d, 0xdc, 0xd7, 0xa4, 0x3d,
+	0x46, 0x60, 0x59, 0x2a, 0xd0, 0x5b, 0x5b, 0x21, 0x6b, 0xdd, 0xee, 0x3b, 0xb2, 0x95, 0x81, 0x60,
+	0xa9, 0xe0, 0x71, 0x01, 0x1c, 0xbd, 0x47, 0x2b, 0xa4, 0x3b, 0x4d, 0xa2, 0x0f, 0x1c, 0xdd, 0x23,
+	0xd2, 0xae, 0x82, 0xf1, 0x44, 0x65, 0xde, 0xfa, 0x0a, 0xe1, 0xcd, 0xca, 0x7d, 0xa1, 0x32, 0xf7,
+	0x03, 0x79, 0x3e, 0x06, 0x1d, 0x0b, 0xe4, 0x50, 0xa6, 0x53, 0x8c, 0xbf, 0xe0, 0xf5, 0x4c, 0x2a,
+	0xe6, 0x6d, 0xcc, 0x21, 0xdd, 0x7f, 0x20, 0x3d, 0x29, 0xb3, 0x1a, 0xe1, 0x8e, 0x41, 0x9f, 0x35,
+	0xb1, 0xd3, 0x3a, 0x65, 0x68, 0x39, 0x94, 0xc9, 0xb8, 0x5a, 0xc6, 0xd0, 0x36, 0x57, 0xa2, 0x7d,
+	0x6c, 0x62, 0x86, 0x76, 0x4c, 0x9e, 0xfd, 0x35, 0x5b, 0xb5, 0x5c, 0x7b, 0x29, 0xe9, 0xe9, 0xc2,
+	0x5c, 0x17, 0x2a, 0x0b, 0xbf, 0x3b, 0x77, 0xd1, 0x37, 0x87, 0x1c, 0xdd, 0x3f, 0xca, 0x46, 0x15,
+	0xa9, 0xa6, 0x89, 0xcc, 0xfd, 0x25, 0x2f, 0xe7, 0x32, 0x99, 0xe8, 0x52, 0xe6, 0xa8, 0xb4, 0x7f,
+	0x63, 0xe4, 0xad, 0x39, 0x8c, 0xff, 0x84, 0xb4, 0x7f, 0xb3, 0xc2, 0xe5, 0xdc, 0xf6, 0xbe, 0xb6,
+	0xc8, 0x41, 0x22, 0x73, 0xba, 0xf4, 0x76, 0x7a, 0xfb, 0x0f, 0x4f, 0xd9, 0xaf, 0xbe, 0x43, 0xdf,
+	0xb9, 0x7c, 0xdf, 0x90, 0xb8, 0xcc, 0x40, 0x70, 0x2a, 0x15, 0xf7, 0x39, 0x8a, 0xf9, 0x57, 0xf2,
+	0xef, 0xd7, 0x7e, 0xe0, 0xe2, 0xdf, 0x58, 0xf5, 0xa3, 0xb5, 0x76, 0x12, 0x45, 0x3f, 0x5b, 0x7b,
+	0x27, 0x35, 0x32, 0x62, 0x9a, 0xd6, 0xb2, 0x52, 0xc3, 0x80, 0x0e, 0x8c, 0xf3, 0xb7, 0xf1, 0x8c,
+	0x22, 0xa6, 0x47, 0xd6, 0x33, 0x1a, 0x06, 0x23, 0xeb, 0xb9, 0x6b, 0x1d, 0xd4, 0x85, 0x30, 0x8c,
+	0x98, 0x0e, 0x43, 0xeb, 0x0a, 0xc3, 0x61, 0x10, 0x86, 0xd6, 0x77, 0xb5, 0x31, 0x1f, 0x36, 0xf8,
+	0x13, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x88, 0x17, 0x91, 0x9d, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/expanded_landing_page_view.pb.go b/googleapis/ads/googleads/v3/resources/expanded_landing_page_view.pb.go
new file mode 100644
index 0000000..d293ec3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/expanded_landing_page_view.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/expanded_landing_page_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A landing page view with metrics aggregated at the expanded final URL
+// level.
+type ExpandedLandingPageView struct {
+	// The resource name of the expanded landing page view.
+	// Expanded landing page view resource names have the form:
+	//
+	// `customers/{customer_id}/expandedLandingPageViews/{expanded_final_url_fingerprint}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The final URL that clicks are directed to.
+	ExpandedFinalUrl     *wrappers.StringValue `protobuf:"bytes,2,opt,name=expanded_final_url,json=expandedFinalUrl,proto3" json:"expanded_final_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ExpandedLandingPageView) Reset()         { *m = ExpandedLandingPageView{} }
+func (m *ExpandedLandingPageView) String() string { return proto.CompactTextString(m) }
+func (*ExpandedLandingPageView) ProtoMessage()    {}
+func (*ExpandedLandingPageView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_10d3300869449542, []int{0}
+}
+
+func (m *ExpandedLandingPageView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpandedLandingPageView.Unmarshal(m, b)
+}
+func (m *ExpandedLandingPageView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpandedLandingPageView.Marshal(b, m, deterministic)
+}
+func (m *ExpandedLandingPageView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpandedLandingPageView.Merge(m, src)
+}
+func (m *ExpandedLandingPageView) XXX_Size() int {
+	return xxx_messageInfo_ExpandedLandingPageView.Size(m)
+}
+func (m *ExpandedLandingPageView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpandedLandingPageView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpandedLandingPageView proto.InternalMessageInfo
+
+func (m *ExpandedLandingPageView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ExpandedLandingPageView) GetExpandedFinalUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.ExpandedFinalUrl
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ExpandedLandingPageView)(nil), "google.ads.googleads.v3.resources.ExpandedLandingPageView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/expanded_landing_page_view.proto", fileDescriptor_10d3300869449542)
+}
+
+var fileDescriptor_10d3300869449542 = []byte{
+	// 395 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x41, 0x6b, 0xdb, 0x30,
+	0x18, 0xc5, 0x1e, 0x0c, 0xe6, 0x6d, 0x30, 0x7c, 0x59, 0x16, 0xc2, 0x48, 0x36, 0x02, 0x39, 0x49,
+	0x63, 0xbe, 0xa9, 0x27, 0x07, 0xda, 0x40, 0x28, 0x25, 0xa4, 0xd4, 0x87, 0x62, 0x30, 0x8a, 0xa5,
+	0x08, 0x81, 0x2d, 0x19, 0xc9, 0x4e, 0x0a, 0x21, 0x85, 0x1e, 0x7b, 0xe9, 0x8f, 0xe8, 0xb1, 0x3f,
+	0xa5, 0x3f, 0x25, 0xbf, 0xa2, 0x38, 0xb6, 0x94, 0x52, 0x48, 0x7b, 0x7b, 0xf6, 0xf7, 0xde, 0xd3,
+	0x7b, 0x9f, 0xe4, 0x8d, 0x99, 0x94, 0x2c, 0xa3, 0x10, 0x13, 0x0d, 0x1b, 0x58, 0xa3, 0x55, 0x00,
+	0x15, 0xd5, 0xb2, 0x52, 0x29, 0xd5, 0x90, 0xde, 0x14, 0x58, 0x10, 0x4a, 0x92, 0x0c, 0x0b, 0xc2,
+	0x05, 0x4b, 0x0a, 0xcc, 0x68, 0xb2, 0xe2, 0x74, 0x0d, 0x0a, 0x25, 0x4b, 0xe9, 0x0f, 0x1a, 0x21,
+	0xc0, 0x44, 0x03, 0xeb, 0x01, 0x56, 0x01, 0xb0, 0x1e, 0xdd, 0x5f, 0xe6, 0x98, 0x82, 0x5b, 0xe7,
+	0x46, 0xdd, 0xfd, 0xdd, 0x8e, 0xf6, 0x5f, 0x8b, 0x6a, 0x09, 0xd7, 0x0a, 0x17, 0x05, 0x55, 0xba,
+	0x9d, 0xf7, 0x5e, 0x49, 0xb1, 0x10, 0xb2, 0xc4, 0x25, 0x97, 0xa2, 0x9d, 0xfe, 0x79, 0x70, 0xbd,
+	0x9f, 0xa7, 0x6d, 0xc0, 0xf3, 0x26, 0xdf, 0x0c, 0x33, 0x1a, 0x71, 0xba, 0xf6, 0xff, 0x7a, 0xdf,
+	0xcd, 0x59, 0x89, 0xc0, 0x39, 0xed, 0x38, 0x7d, 0x67, 0xf4, 0x65, 0xfe, 0xcd, 0xfc, 0xbc, 0xc0,
+	0x39, 0xf5, 0xa7, 0x9e, 0x6f, 0x0b, 0x2e, 0xb9, 0xc0, 0x59, 0x52, 0xa9, 0xac, 0xe3, 0xf6, 0x9d,
+	0xd1, 0xd7, 0xff, 0xbd, 0xb6, 0x0e, 0x30, 0xd9, 0xc0, 0x65, 0xa9, 0xb8, 0x60, 0x11, 0xce, 0x2a,
+	0x3a, 0xff, 0x61, 0x74, 0x67, 0xb5, 0xec, 0x4a, 0x65, 0xe8, 0xce, 0xd9, 0x85, 0xb7, 0xde, 0xbf,
+	0xc3, 0x0e, 0x5a, 0x54, 0x70, 0x0d, 0x52, 0x99, 0xc3, 0x63, 0x41, 0xa7, 0x69, 0xa5, 0x4b, 0x99,
+	0x53, 0xa5, 0xe1, 0xc6, 0xc0, 0xad, 0xdd, 0xfb, 0x1b, 0xb6, 0x86, 0x9b, 0xe3, 0x37, 0xb2, 0x1d,
+	0xdf, 0xbb, 0xde, 0x30, 0x95, 0x39, 0xf8, 0xf0, 0x4e, 0xc6, 0xbd, 0x23, 0x71, 0x66, 0x75, 0xd9,
+	0x99, 0x73, 0x3d, 0x6d, 0x2d, 0x98, 0xcc, 0xb0, 0x60, 0x40, 0x2a, 0x06, 0x19, 0x15, 0xfb, 0x55,
+	0xc0, 0x43, 0xb1, 0x77, 0x5e, 0xce, 0x89, 0x45, 0x8f, 0xee, 0xa7, 0x49, 0x18, 0x3e, 0xb9, 0x83,
+	0x49, 0x63, 0x19, 0x12, 0x0d, 0x1a, 0x58, 0xa3, 0x28, 0x00, 0x73, 0xc3, 0x7c, 0x36, 0x9c, 0x38,
+	0x24, 0x3a, 0xb6, 0x9c, 0x38, 0x0a, 0x62, 0xcb, 0xd9, 0xb9, 0xc3, 0x66, 0x80, 0x50, 0x48, 0x34,
+	0x42, 0x96, 0x85, 0x50, 0x14, 0x20, 0x64, 0x79, 0x8b, 0xcf, 0xfb, 0xb0, 0xc1, 0x4b, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xae, 0x79, 0x3b, 0xbe, 0xe5, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/extension_feed_item.pb.go b/googleapis/ads/googleads/v3/resources/extension_feed_item.pb.go
new file mode 100644
index 0000000..b2b5915
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/extension_feed_item.pb.go
@@ -0,0 +1,469 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/extension_feed_item.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An extension feed item.
+type ExtensionFeedItem struct {
+	// The resource name of the extension feed item.
+	// Extension feed item resource names have the form:
+	//
+	// `customers/{customer_id}/extensionFeedItems/{feed_item_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of this feed item. Read-only.
+	Id *wrappers.Int64Value `protobuf:"bytes,24,opt,name=id,proto3" json:"id,omitempty"`
+	// The extension type of the extension feed item.
+	// This field is read-only.
+	ExtensionType enums.ExtensionTypeEnum_ExtensionType `protobuf:"varint,13,opt,name=extension_type,json=extensionType,proto3,enum=google.ads.googleads.v3.enums.ExtensionTypeEnum_ExtensionType" json:"extension_type,omitempty"`
+	// Start time in which this feed item is effective and can begin serving. The
+	// time is in the customer's time zone.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
+	// End time in which this feed item is no longer effective and will stop
+	// serving. The time is in the customer's time zone.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,6,opt,name=end_date_time,json=endDateTime,proto3" json:"end_date_time,omitempty"`
+	// List of non-overlapping schedules specifying all time intervals
+	// for which the feed item may serve. There can be a maximum of 6 schedules
+	// per day.
+	AdSchedules []*common.AdScheduleInfo `protobuf:"bytes,16,rep,name=ad_schedules,json=adSchedules,proto3" json:"ad_schedules,omitempty"`
+	// The targeted device.
+	Device enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice `protobuf:"varint,17,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice" json:"device,omitempty"`
+	// The targeted geo target constant.
+	TargetedGeoTargetConstant *wrappers.StringValue `protobuf:"bytes,20,opt,name=targeted_geo_target_constant,json=targetedGeoTargetConstant,proto3" json:"targeted_geo_target_constant,omitempty"`
+	// The targeted keyword.
+	TargetedKeyword *common.KeywordInfo `protobuf:"bytes,22,opt,name=targeted_keyword,json=targetedKeyword,proto3" json:"targeted_keyword,omitempty"`
+	// Status of the feed item.
+	// This field is read-only.
+	Status enums.FeedItemStatusEnum_FeedItemStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedItemStatusEnum_FeedItemStatus" json:"status,omitempty"`
+	// Extension type.
+	//
+	// Types that are valid to be assigned to Extension:
+	//	*ExtensionFeedItem_SitelinkFeedItem
+	//	*ExtensionFeedItem_StructuredSnippetFeedItem
+	//	*ExtensionFeedItem_AppFeedItem
+	//	*ExtensionFeedItem_CallFeedItem
+	//	*ExtensionFeedItem_CalloutFeedItem
+	//	*ExtensionFeedItem_TextMessageFeedItem
+	//	*ExtensionFeedItem_PriceFeedItem
+	//	*ExtensionFeedItem_PromotionFeedItem
+	//	*ExtensionFeedItem_LocationFeedItem
+	//	*ExtensionFeedItem_AffiliateLocationFeedItem
+	//	*ExtensionFeedItem_HotelCalloutFeedItem
+	Extension isExtensionFeedItem_Extension `protobuf_oneof:"extension"`
+	// Targeting at either the campaign or ad group level. Feed items that target
+	// a campaign or ad group will only serve with that resource.
+	//
+	// Types that are valid to be assigned to ServingResourceTargeting:
+	//	*ExtensionFeedItem_TargetedCampaign
+	//	*ExtensionFeedItem_TargetedAdGroup
+	ServingResourceTargeting isExtensionFeedItem_ServingResourceTargeting `protobuf_oneof:"serving_resource_targeting"`
+	XXX_NoUnkeyedLiteral     struct{}                                     `json:"-"`
+	XXX_unrecognized         []byte                                       `json:"-"`
+	XXX_sizecache            int32                                        `json:"-"`
+}
+
+func (m *ExtensionFeedItem) Reset()         { *m = ExtensionFeedItem{} }
+func (m *ExtensionFeedItem) String() string { return proto.CompactTextString(m) }
+func (*ExtensionFeedItem) ProtoMessage()    {}
+func (*ExtensionFeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d54452736e95564f, []int{0}
+}
+
+func (m *ExtensionFeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionFeedItem.Unmarshal(m, b)
+}
+func (m *ExtensionFeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionFeedItem.Marshal(b, m, deterministic)
+}
+func (m *ExtensionFeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionFeedItem.Merge(m, src)
+}
+func (m *ExtensionFeedItem) XXX_Size() int {
+	return xxx_messageInfo_ExtensionFeedItem.Size(m)
+}
+func (m *ExtensionFeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionFeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionFeedItem proto.InternalMessageInfo
+
+func (m *ExtensionFeedItem) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ExtensionFeedItem) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetExtensionType() enums.ExtensionTypeEnum_ExtensionType {
+	if m != nil {
+		return m.ExtensionType
+	}
+	return enums.ExtensionTypeEnum_UNSPECIFIED
+}
+
+func (m *ExtensionFeedItem) GetStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDateTime
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetEndDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDateTime
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetAdSchedules() []*common.AdScheduleInfo {
+	if m != nil {
+		return m.AdSchedules
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetDevice() enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice {
+	if m != nil {
+		return m.Device
+	}
+	return enums.FeedItemTargetDeviceEnum_UNSPECIFIED
+}
+
+func (m *ExtensionFeedItem) GetTargetedGeoTargetConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.TargetedGeoTargetConstant
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetTargetedKeyword() *common.KeywordInfo {
+	if m != nil {
+		return m.TargetedKeyword
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetStatus() enums.FeedItemStatusEnum_FeedItemStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedItemStatusEnum_UNSPECIFIED
+}
+
+type isExtensionFeedItem_Extension interface {
+	isExtensionFeedItem_Extension()
+}
+
+type ExtensionFeedItem_SitelinkFeedItem struct {
+	SitelinkFeedItem *common.SitelinkFeedItem `protobuf:"bytes,2,opt,name=sitelink_feed_item,json=sitelinkFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_StructuredSnippetFeedItem struct {
+	StructuredSnippetFeedItem *common.StructuredSnippetFeedItem `protobuf:"bytes,3,opt,name=structured_snippet_feed_item,json=structuredSnippetFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_AppFeedItem struct {
+	AppFeedItem *common.AppFeedItem `protobuf:"bytes,7,opt,name=app_feed_item,json=appFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_CallFeedItem struct {
+	CallFeedItem *common.CallFeedItem `protobuf:"bytes,8,opt,name=call_feed_item,json=callFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_CalloutFeedItem struct {
+	CalloutFeedItem *common.CalloutFeedItem `protobuf:"bytes,9,opt,name=callout_feed_item,json=calloutFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_TextMessageFeedItem struct {
+	TextMessageFeedItem *common.TextMessageFeedItem `protobuf:"bytes,10,opt,name=text_message_feed_item,json=textMessageFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_PriceFeedItem struct {
+	PriceFeedItem *common.PriceFeedItem `protobuf:"bytes,11,opt,name=price_feed_item,json=priceFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_PromotionFeedItem struct {
+	PromotionFeedItem *common.PromotionFeedItem `protobuf:"bytes,12,opt,name=promotion_feed_item,json=promotionFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_LocationFeedItem struct {
+	LocationFeedItem *common.LocationFeedItem `protobuf:"bytes,14,opt,name=location_feed_item,json=locationFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_AffiliateLocationFeedItem struct {
+	AffiliateLocationFeedItem *common.AffiliateLocationFeedItem `protobuf:"bytes,15,opt,name=affiliate_location_feed_item,json=affiliateLocationFeedItem,proto3,oneof"`
+}
+
+type ExtensionFeedItem_HotelCalloutFeedItem struct {
+	HotelCalloutFeedItem *common.HotelCalloutFeedItem `protobuf:"bytes,23,opt,name=hotel_callout_feed_item,json=hotelCalloutFeedItem,proto3,oneof"`
+}
+
+func (*ExtensionFeedItem_SitelinkFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_StructuredSnippetFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_AppFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_CallFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_CalloutFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_TextMessageFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_PriceFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_PromotionFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_LocationFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_AffiliateLocationFeedItem) isExtensionFeedItem_Extension() {}
+
+func (*ExtensionFeedItem_HotelCalloutFeedItem) isExtensionFeedItem_Extension() {}
+
+func (m *ExtensionFeedItem) GetExtension() isExtensionFeedItem_Extension {
+	if m != nil {
+		return m.Extension
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetSitelinkFeedItem() *common.SitelinkFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_SitelinkFeedItem); ok {
+		return x.SitelinkFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetStructuredSnippetFeedItem() *common.StructuredSnippetFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_StructuredSnippetFeedItem); ok {
+		return x.StructuredSnippetFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetAppFeedItem() *common.AppFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_AppFeedItem); ok {
+		return x.AppFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetCallFeedItem() *common.CallFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_CallFeedItem); ok {
+		return x.CallFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetCalloutFeedItem() *common.CalloutFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_CalloutFeedItem); ok {
+		return x.CalloutFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetTextMessageFeedItem() *common.TextMessageFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_TextMessageFeedItem); ok {
+		return x.TextMessageFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetPriceFeedItem() *common.PriceFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_PriceFeedItem); ok {
+		return x.PriceFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetPromotionFeedItem() *common.PromotionFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_PromotionFeedItem); ok {
+		return x.PromotionFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetLocationFeedItem() *common.LocationFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_LocationFeedItem); ok {
+		return x.LocationFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetAffiliateLocationFeedItem() *common.AffiliateLocationFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_AffiliateLocationFeedItem); ok {
+		return x.AffiliateLocationFeedItem
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetHotelCalloutFeedItem() *common.HotelCalloutFeedItem {
+	if x, ok := m.GetExtension().(*ExtensionFeedItem_HotelCalloutFeedItem); ok {
+		return x.HotelCalloutFeedItem
+	}
+	return nil
+}
+
+type isExtensionFeedItem_ServingResourceTargeting interface {
+	isExtensionFeedItem_ServingResourceTargeting()
+}
+
+type ExtensionFeedItem_TargetedCampaign struct {
+	TargetedCampaign *wrappers.StringValue `protobuf:"bytes,18,opt,name=targeted_campaign,json=targetedCampaign,proto3,oneof"`
+}
+
+type ExtensionFeedItem_TargetedAdGroup struct {
+	TargetedAdGroup *wrappers.StringValue `protobuf:"bytes,19,opt,name=targeted_ad_group,json=targetedAdGroup,proto3,oneof"`
+}
+
+func (*ExtensionFeedItem_TargetedCampaign) isExtensionFeedItem_ServingResourceTargeting() {}
+
+func (*ExtensionFeedItem_TargetedAdGroup) isExtensionFeedItem_ServingResourceTargeting() {}
+
+func (m *ExtensionFeedItem) GetServingResourceTargeting() isExtensionFeedItem_ServingResourceTargeting {
+	if m != nil {
+		return m.ServingResourceTargeting
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetTargetedCampaign() *wrappers.StringValue {
+	if x, ok := m.GetServingResourceTargeting().(*ExtensionFeedItem_TargetedCampaign); ok {
+		return x.TargetedCampaign
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItem) GetTargetedAdGroup() *wrappers.StringValue {
+	if x, ok := m.GetServingResourceTargeting().(*ExtensionFeedItem_TargetedAdGroup); ok {
+		return x.TargetedAdGroup
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ExtensionFeedItem) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ExtensionFeedItem_SitelinkFeedItem)(nil),
+		(*ExtensionFeedItem_StructuredSnippetFeedItem)(nil),
+		(*ExtensionFeedItem_AppFeedItem)(nil),
+		(*ExtensionFeedItem_CallFeedItem)(nil),
+		(*ExtensionFeedItem_CalloutFeedItem)(nil),
+		(*ExtensionFeedItem_TextMessageFeedItem)(nil),
+		(*ExtensionFeedItem_PriceFeedItem)(nil),
+		(*ExtensionFeedItem_PromotionFeedItem)(nil),
+		(*ExtensionFeedItem_LocationFeedItem)(nil),
+		(*ExtensionFeedItem_AffiliateLocationFeedItem)(nil),
+		(*ExtensionFeedItem_HotelCalloutFeedItem)(nil),
+		(*ExtensionFeedItem_TargetedCampaign)(nil),
+		(*ExtensionFeedItem_TargetedAdGroup)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*ExtensionFeedItem)(nil), "google.ads.googleads.v3.resources.ExtensionFeedItem")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/extension_feed_item.proto", fileDescriptor_d54452736e95564f)
+}
+
+var fileDescriptor_d54452736e95564f = []byte{
+	// 1013 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x61, 0x4f, 0xdc, 0x36,
+	0x18, 0xde, 0x5d, 0x37, 0x36, 0x7c, 0x1c, 0x70, 0xa6, 0xa2, 0x81, 0xa1, 0x89, 0x6e, 0xaa, 0x84,
+	0xd6, 0x35, 0xd9, 0x38, 0x34, 0x69, 0x87, 0x36, 0xf5, 0x80, 0x0e, 0x68, 0xbb, 0x89, 0x1e, 0x88,
+	0x4d, 0x13, 0x55, 0xe6, 0xc6, 0x2f, 0xc1, 0x23, 0xb1, 0xa3, 0xd8, 0xa1, 0xa0, 0xae, 0x9f, 0xf6,
+	0x4f, 0xf6, 0x71, 0x5f, 0xf7, 0x2f, 0xf6, 0x53, 0xfa, 0x2b, 0xa6, 0x38, 0x89, 0xcf, 0x70, 0x5c,
+	0x73, 0xdf, 0xec, 0xd7, 0xef, 0xf3, 0x3c, 0xaf, 0x9f, 0xbc, 0x76, 0x8c, 0x36, 0x43, 0x21, 0xc2,
+	0x08, 0x3c, 0x42, 0xa5, 0x57, 0x0c, 0xf3, 0xd1, 0x45, 0xd7, 0x4b, 0x41, 0x8a, 0x2c, 0x0d, 0x40,
+	0x7a, 0x70, 0xa9, 0x80, 0x4b, 0x26, 0xb8, 0x7f, 0x0a, 0x40, 0x7d, 0xa6, 0x20, 0x76, 0x93, 0x54,
+	0x28, 0x81, 0xef, 0x17, 0x08, 0x97, 0x50, 0xe9, 0x1a, 0xb0, 0x7b, 0xd1, 0x75, 0x0d, 0x78, 0xf9,
+	0xd1, 0x38, 0xfe, 0x40, 0xc4, 0xb1, 0xe0, 0x5e, 0x90, 0x32, 0x05, 0x29, 0x23, 0x05, 0xe3, 0xb2,
+	0x57, 0x93, 0x6e, 0x6a, 0x91, 0x25, 0x60, 0x7d, 0x1c, 0x00, 0x78, 0x16, 0xdb, 0xb5, 0xab, 0xab,
+	0x04, 0x4a, 0xcc, 0xc6, 0xfb, 0x31, 0x66, 0x97, 0xbe, 0x54, 0x44, 0x65, 0x95, 0xd2, 0xe6, 0xa4,
+	0x28, 0x45, 0xd2, 0x10, 0x94, 0x4f, 0xe1, 0x82, 0x05, 0x95, 0xe4, 0x52, 0x05, 0x4e, 0x98, 0x71,
+	0xb6, 0x5c, 0xfa, 0xac, 0x5c, 0xd2, 0xb3, 0x57, 0xd9, 0xa9, 0xf7, 0x3a, 0x25, 0x49, 0x02, 0x69,
+	0xa5, 0xbb, 0x62, 0x41, 0x09, 0xe7, 0x42, 0x11, 0x35, 0xdc, 0xff, 0xe7, 0xff, 0x76, 0x50, 0xe7,
+	0x49, 0xb5, 0xc9, 0x1f, 0x01, 0xe8, 0xbe, 0x82, 0x18, 0x7f, 0x81, 0xda, 0x95, 0x8a, 0xcf, 0x49,
+	0x0c, 0x4e, 0x63, 0xb5, 0xb1, 0x36, 0x3d, 0x98, 0xa9, 0x82, 0x3f, 0x93, 0x18, 0xf0, 0x43, 0xd4,
+	0x64, 0xd4, 0x71, 0x56, 0x1b, 0x6b, 0xad, 0xf5, 0x4f, 0xcb, 0xef, 0xe7, 0x56, 0x55, 0xb8, 0xfb,
+	0x5c, 0x7d, 0xbb, 0x71, 0x4c, 0xa2, 0x0c, 0x06, 0x4d, 0x46, 0x31, 0xa0, 0xd9, 0xeb, 0x5e, 0x3a,
+	0xed, 0xd5, 0xc6, 0xda, 0xec, 0xfa, 0x0f, 0xee, 0xb8, 0x1e, 0xd0, 0xb6, 0xb8, 0xa6, 0xb6, 0xa3,
+	0xab, 0x04, 0x9e, 0xf0, 0x2c, 0xbe, 0x1e, 0x19, 0xb4, 0xc1, 0x9e, 0xe2, 0x1d, 0x34, 0x27, 0x15,
+	0x49, 0x95, 0x4f, 0x89, 0x02, 0x5f, 0xb1, 0x18, 0x9c, 0x8f, 0x74, 0x81, 0x2b, 0x23, 0x05, 0x1e,
+	0xaa, 0x94, 0xf1, 0xb0, 0xa8, 0xb0, 0xad, 0x41, 0x3b, 0x44, 0xc1, 0x11, 0x8b, 0x01, 0x3f, 0x46,
+	0x6d, 0xe0, 0xd4, 0xe2, 0x98, 0x9a, 0x80, 0xa3, 0x05, 0x9c, 0x1a, 0x86, 0x17, 0x68, 0x86, 0x50,
+	0x5f, 0x06, 0x67, 0x40, 0xb3, 0x08, 0xa4, 0x33, 0xbf, 0x7a, 0x67, 0xad, 0xb5, 0xee, 0x8e, 0xdd,
+	0x6c, 0xd1, 0x9e, 0x6e, 0x9f, 0x1e, 0x96, 0x90, 0x7d, 0x7e, 0x2a, 0x06, 0x2d, 0x62, 0xe6, 0x12,
+	0x53, 0x34, 0x55, 0xb4, 0x84, 0xd3, 0xd1, 0xce, 0x3d, 0xaf, 0x71, 0xae, 0xfa, 0x98, 0x47, 0xba,
+	0x9d, 0x76, 0x34, 0x54, 0x1b, 0x78, 0xdb, 0xc2, 0xa0, 0xe4, 0xc6, 0x2f, 0xd1, 0x4a, 0xd1, 0x7f,
+	0x40, 0xfd, 0x10, 0x44, 0xd5, 0x8c, 0x81, 0xe0, 0x52, 0x11, 0xae, 0x9c, 0xbb, 0x13, 0x38, 0xb1,
+	0x54, 0x31, 0xec, 0x82, 0x28, 0x44, 0xb6, 0x4b, 0x38, 0x3e, 0x46, 0xf3, 0x86, 0xfe, 0x1c, 0xae,
+	0x5e, 0x8b, 0x94, 0x3a, 0x8b, 0x9a, 0xf2, 0x61, 0x9d, 0x37, 0xcf, 0x8a, 0x74, 0x6d, 0xcc, 0x5c,
+	0x45, 0x52, 0x06, 0xf1, 0xaf, 0x68, 0xaa, 0x38, 0x6c, 0xce, 0x87, 0xda, 0x9c, 0xc7, 0x13, 0x9a,
+	0x73, 0xa8, 0x41, 0xd7, 0x6c, 0x29, 0x42, 0x83, 0x92, 0x0f, 0xff, 0x8e, 0xb0, 0x64, 0x0a, 0x22,
+	0xc6, 0xcf, 0x87, 0xf7, 0x97, 0xd3, 0xd4, 0x35, 0x7f, 0x5d, 0x57, 0xf3, 0x61, 0x89, 0xac, 0xb8,
+	0xf7, 0x3e, 0x18, 0xcc, 0xcb, 0x1b, 0x31, 0xfc, 0x27, 0x5a, 0x91, 0x2a, 0xcd, 0x02, 0x95, 0xa5,
+	0x40, 0x7d, 0xc9, 0x59, 0x92, 0x80, 0xb2, 0xb4, 0xee, 0x68, 0xad, 0xef, 0x6a, 0xb5, 0x0c, 0xc7,
+	0x61, 0x41, 0x61, 0x89, 0x2e, 0xc9, 0x71, 0x8b, 0xf8, 0x05, 0x6a, 0x93, 0x24, 0xb1, 0xe4, 0x3e,
+	0x9e, 0xec, 0x73, 0xf4, 0x93, 0xc4, 0x12, 0x68, 0x91, 0xe1, 0x14, 0x1f, 0xa1, 0xd9, 0x80, 0x44,
+	0x91, 0xc5, 0xf9, 0x89, 0xe6, 0xfc, 0xaa, 0x8e, 0x73, 0x9b, 0x44, 0x91, 0x45, 0x3a, 0x13, 0x58,
+	0x73, 0xfc, 0x12, 0x75, 0xf2, 0xb9, 0xc8, 0x6c, 0x6f, 0xa6, 0x35, 0xb1, 0x37, 0x09, 0xb1, 0xc8,
+	0x6c, 0x47, 0xe6, 0x82, 0xeb, 0x21, 0xfc, 0x07, 0x5a, 0x54, 0x70, 0xa9, 0xfc, 0x18, 0xa4, 0x24,
+	0x21, 0x58, 0x1a, 0x48, 0x6b, 0x74, 0xeb, 0x34, 0x8e, 0xe0, 0x52, 0xfd, 0x54, 0x80, 0x2d, 0x9d,
+	0x05, 0x35, 0x1a, 0xc6, 0xbf, 0xa0, 0xb9, 0x24, 0x65, 0x81, 0x2d, 0xd2, 0xd2, 0x22, 0x8f, 0xea,
+	0x44, 0x0e, 0x72, 0x98, 0x45, 0xdf, 0x4e, 0xec, 0x00, 0x0e, 0xd0, 0x42, 0x92, 0x8a, 0x58, 0xa8,
+	0x6b, 0x7f, 0x5b, 0x67, 0x46, 0x93, 0x7f, 0x53, 0x4f, 0x5e, 0x42, 0x2d, 0x81, 0x4e, 0x72, 0x33,
+	0x98, 0x9f, 0x88, 0x48, 0x04, 0xe4, 0x86, 0xc6, 0xec, 0x64, 0x27, 0xe2, 0x79, 0x89, 0xb4, 0x4f,
+	0x44, 0x74, 0x23, 0x96, 0x9f, 0x08, 0x72, 0x7a, 0xca, 0x22, 0x96, 0x5f, 0xc0, 0xb7, 0x68, 0xcd,
+	0x4d, 0x76, 0x22, 0xfa, 0x15, 0xc7, 0x2d, 0xa2, 0x4b, 0x64, 0xdc, 0x22, 0x8e, 0xd1, 0xbd, 0x33,
+	0xa1, 0x20, 0xf2, 0x47, 0xdb, 0xed, 0x9e, 0x16, 0xde, 0xa8, 0x13, 0xde, 0xcb, 0xe1, 0xa3, 0x3d,
+	0x77, 0xf7, 0xec, 0x96, 0x38, 0x7e, 0x86, 0x3a, 0xe6, 0x4a, 0x0c, 0x48, 0x9c, 0x10, 0x16, 0x72,
+	0x07, 0xd7, 0x5f, 0xb3, 0x7b, 0x8d, 0x81, 0xb9, 0x4b, 0xb7, 0x4b, 0x1c, 0x7e, 0x6a, 0x91, 0x11,
+	0xea, 0x87, 0xa9, 0xc8, 0x12, 0x67, 0x61, 0x22, 0x32, 0x73, 0xa7, 0xf6, 0xe9, 0x6e, 0x0e, 0xeb,
+	0xf1, 0x77, 0xfd, 0x73, 0xf4, 0xe5, 0x70, 0x7f, 0xe5, 0x28, 0x61, 0x32, 0xdf, 0xa7, 0x37, 0xfa,
+	0x6a, 0xf8, 0x3e, 0xc8, 0xa4, 0x12, 0x31, 0xa4, 0xd2, 0x7b, 0x53, 0x0d, 0xdf, 0x0e, 0x9f, 0x50,
+	0x55, 0x9e, 0xf4, 0xde, 0xdc, 0xf2, 0x24, 0x7c, 0xbb, 0xd5, 0x42, 0xd3, 0x26, 0xbe, 0xb5, 0x82,
+	0x96, 0x25, 0xa4, 0x17, 0x8c, 0x87, 0xbe, 0x79, 0x89, 0x14, 0x05, 0x32, 0x1e, 0x6e, 0xfd, 0xd5,
+	0x44, 0x0f, 0x02, 0x11, 0xbb, 0xb5, 0xef, 0xc7, 0xad, 0xc5, 0x91, 0x32, 0x0f, 0xf2, 0xed, 0x1f,
+	0x34, 0x7e, 0x7b, 0x5a, 0x82, 0x43, 0x11, 0x11, 0x1e, 0xba, 0x22, 0x0d, 0xbd, 0x10, 0xb8, 0x36,
+	0xc7, 0x1b, 0x6e, 0xf5, 0x3d, 0x0f, 0xdb, 0x4d, 0x33, 0xfa, 0xbb, 0x79, 0x67, 0xb7, 0xdf, 0xff,
+	0xa7, 0x79, 0x7f, 0xb7, 0xa0, 0xec, 0x53, 0xe9, 0x16, 0xc3, 0x7c, 0x74, 0xdc, 0x75, 0x07, 0x55,
+	0xe6, 0x7f, 0x55, 0xce, 0x49, 0x9f, 0xca, 0x13, 0x93, 0x73, 0x72, 0xdc, 0x3d, 0x31, 0x39, 0xef,
+	0x9a, 0x0f, 0x8a, 0x85, 0x5e, 0xaf, 0x4f, 0x65, 0xaf, 0x67, 0xb2, 0x7a, 0xbd, 0xe3, 0x6e, 0xaf,
+	0x67, 0xf2, 0x5e, 0x4d, 0xe9, 0x62, 0xbb, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x03, 0xd9, 0x3f,
+	0x01, 0x84, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/feed.pb.go b/googleapis/ads/googleads/v3/resources/feed.pb.go
new file mode 100644
index 0000000..59945e0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/feed.pb.go
@@ -0,0 +1,635 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/feed.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The operator.
+type FeedAttributeOperation_Operator int32
+
+const (
+	// Unspecified.
+	FeedAttributeOperation_UNSPECIFIED FeedAttributeOperation_Operator = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedAttributeOperation_UNKNOWN FeedAttributeOperation_Operator = 1
+	// Add the attribute to the existing attributes.
+	FeedAttributeOperation_ADD FeedAttributeOperation_Operator = 2
+)
+
+var FeedAttributeOperation_Operator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADD",
+}
+
+var FeedAttributeOperation_Operator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADD":         2,
+}
+
+func (x FeedAttributeOperation_Operator) String() string {
+	return proto.EnumName(FeedAttributeOperation_Operator_name, int32(x))
+}
+
+func (FeedAttributeOperation_Operator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{2, 0}
+}
+
+// A feed.
+type Feed struct {
+	// The resource name of the feed.
+	// Feed resource names have the form:
+	//
+	// `customers/{customer_id}/feeds/{feed_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the feed.
+	// This field is read-only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Name of the feed. Required.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The Feed's attributes. Required on CREATE, unless
+	// system_feed_generation_data is provided, in which case Google Ads will
+	// update the feed with the correct attributes.
+	// Disallowed on UPDATE. Use attribute_operations to add new attributes.
+	Attributes []*FeedAttribute `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
+	// The list of operations changing the feed attributes. Attributes can only
+	// be added, not removed.
+	AttributeOperations []*FeedAttributeOperation `protobuf:"bytes,9,rep,name=attribute_operations,json=attributeOperations,proto3" json:"attribute_operations,omitempty"`
+	// Specifies who manages the FeedAttributes for the Feed.
+	Origin enums.FeedOriginEnum_FeedOrigin `protobuf:"varint,5,opt,name=origin,proto3,enum=google.ads.googleads.v3.enums.FeedOriginEnum_FeedOrigin" json:"origin,omitempty"`
+	// Status of the feed.
+	// This field is read-only.
+	Status enums.FeedStatusEnum_FeedStatus `protobuf:"varint,8,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedStatusEnum_FeedStatus" json:"status,omitempty"`
+	// The system data for the Feed. This data specifies information for
+	// generating the feed items of the system generated feed.
+	//
+	// Types that are valid to be assigned to SystemFeedGenerationData:
+	//	*Feed_PlacesLocationFeedData_
+	//	*Feed_AffiliateLocationFeedData_
+	SystemFeedGenerationData isFeed_SystemFeedGenerationData `protobuf_oneof:"system_feed_generation_data"`
+	XXX_NoUnkeyedLiteral     struct{}                        `json:"-"`
+	XXX_unrecognized         []byte                          `json:"-"`
+	XXX_sizecache            int32                           `json:"-"`
+}
+
+func (m *Feed) Reset()         { *m = Feed{} }
+func (m *Feed) String() string { return proto.CompactTextString(m) }
+func (*Feed) ProtoMessage()    {}
+func (*Feed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{0}
+}
+
+func (m *Feed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed.Unmarshal(m, b)
+}
+func (m *Feed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed.Marshal(b, m, deterministic)
+}
+func (m *Feed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed.Merge(m, src)
+}
+func (m *Feed) XXX_Size() int {
+	return xxx_messageInfo_Feed.Size(m)
+}
+func (m *Feed) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed proto.InternalMessageInfo
+
+func (m *Feed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Feed) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Feed) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Feed) GetAttributes() []*FeedAttribute {
+	if m != nil {
+		return m.Attributes
+	}
+	return nil
+}
+
+func (m *Feed) GetAttributeOperations() []*FeedAttributeOperation {
+	if m != nil {
+		return m.AttributeOperations
+	}
+	return nil
+}
+
+func (m *Feed) GetOrigin() enums.FeedOriginEnum_FeedOrigin {
+	if m != nil {
+		return m.Origin
+	}
+	return enums.FeedOriginEnum_UNSPECIFIED
+}
+
+func (m *Feed) GetStatus() enums.FeedStatusEnum_FeedStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedStatusEnum_UNSPECIFIED
+}
+
+type isFeed_SystemFeedGenerationData interface {
+	isFeed_SystemFeedGenerationData()
+}
+
+type Feed_PlacesLocationFeedData_ struct {
+	PlacesLocationFeedData *Feed_PlacesLocationFeedData `protobuf:"bytes,6,opt,name=places_location_feed_data,json=placesLocationFeedData,proto3,oneof"`
+}
+
+type Feed_AffiliateLocationFeedData_ struct {
+	AffiliateLocationFeedData *Feed_AffiliateLocationFeedData `protobuf:"bytes,7,opt,name=affiliate_location_feed_data,json=affiliateLocationFeedData,proto3,oneof"`
+}
+
+func (*Feed_PlacesLocationFeedData_) isFeed_SystemFeedGenerationData() {}
+
+func (*Feed_AffiliateLocationFeedData_) isFeed_SystemFeedGenerationData() {}
+
+func (m *Feed) GetSystemFeedGenerationData() isFeed_SystemFeedGenerationData {
+	if m != nil {
+		return m.SystemFeedGenerationData
+	}
+	return nil
+}
+
+func (m *Feed) GetPlacesLocationFeedData() *Feed_PlacesLocationFeedData {
+	if x, ok := m.GetSystemFeedGenerationData().(*Feed_PlacesLocationFeedData_); ok {
+		return x.PlacesLocationFeedData
+	}
+	return nil
+}
+
+func (m *Feed) GetAffiliateLocationFeedData() *Feed_AffiliateLocationFeedData {
+	if x, ok := m.GetSystemFeedGenerationData().(*Feed_AffiliateLocationFeedData_); ok {
+		return x.AffiliateLocationFeedData
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Feed) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Feed_PlacesLocationFeedData_)(nil),
+		(*Feed_AffiliateLocationFeedData_)(nil),
+	}
+}
+
+// Data used to configure a location feed populated from Google My Business
+// Locations.
+type Feed_PlacesLocationFeedData struct {
+	// Required authentication token (from OAuth API) for the email.
+	// This field can only be specified in a create request. All its subfields
+	// are not selectable.
+	OauthInfo *Feed_PlacesLocationFeedData_OAuthInfo `protobuf:"bytes,1,opt,name=oauth_info,json=oauthInfo,proto3" json:"oauth_info,omitempty"`
+	// Email address of a Google My Business account or email address of a
+	// manager of the Google My Business account. Required.
+	EmailAddress *wrappers.StringValue `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3" json:"email_address,omitempty"`
+	// Plus page ID of the managed business whose locations should be used. If
+	// this field is not set, then all businesses accessible by the user
+	// (specified by email_address) are used.
+	// This field is mutate-only and is not selectable.
+	BusinessAccountId *wrappers.StringValue `protobuf:"bytes,10,opt,name=business_account_id,json=businessAccountId,proto3" json:"business_account_id,omitempty"`
+	// Used to filter Google My Business listings by business name. If
+	// business_name_filter is set, only listings with a matching business name
+	// are candidates to be sync'd into FeedItems.
+	BusinessNameFilter *wrappers.StringValue `protobuf:"bytes,4,opt,name=business_name_filter,json=businessNameFilter,proto3" json:"business_name_filter,omitempty"`
+	// Used to filter Google My Business listings by categories. If entries
+	// exist in category_filters, only listings that belong to any of the
+	// categories are candidates to be sync'd into FeedItems. If no entries
+	// exist in category_filters, then all listings are candidates for syncing.
+	CategoryFilters []*wrappers.StringValue `protobuf:"bytes,5,rep,name=category_filters,json=categoryFilters,proto3" json:"category_filters,omitempty"`
+	// Used to filter Google My Business listings by labels. If entries exist in
+	// label_filters, only listings that has any of the labels set are
+	// candidates to be synchronized into FeedItems. If no entries exist in
+	// label_filters, then all listings are candidates for syncing.
+	LabelFilters         []*wrappers.StringValue `protobuf:"bytes,6,rep,name=label_filters,json=labelFilters,proto3" json:"label_filters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *Feed_PlacesLocationFeedData) Reset()         { *m = Feed_PlacesLocationFeedData{} }
+func (m *Feed_PlacesLocationFeedData) String() string { return proto.CompactTextString(m) }
+func (*Feed_PlacesLocationFeedData) ProtoMessage()    {}
+func (*Feed_PlacesLocationFeedData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{0, 0}
+}
+
+func (m *Feed_PlacesLocationFeedData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Unmarshal(m, b)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Marshal(b, m, deterministic)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_PlacesLocationFeedData.Merge(m, src)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Size() int {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Size(m)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_PlacesLocationFeedData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_PlacesLocationFeedData proto.InternalMessageInfo
+
+func (m *Feed_PlacesLocationFeedData) GetOauthInfo() *Feed_PlacesLocationFeedData_OAuthInfo {
+	if m != nil {
+		return m.OauthInfo
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetEmailAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.EmailAddress
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetBusinessAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessAccountId
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetBusinessNameFilter() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessNameFilter
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetCategoryFilters() []*wrappers.StringValue {
+	if m != nil {
+		return m.CategoryFilters
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetLabelFilters() []*wrappers.StringValue {
+	if m != nil {
+		return m.LabelFilters
+	}
+	return nil
+}
+
+// Data used for authorization using OAuth.
+type Feed_PlacesLocationFeedData_OAuthInfo struct {
+	// The HTTP method used to obtain authorization.
+	HttpMethod *wrappers.StringValue `protobuf:"bytes,1,opt,name=http_method,json=httpMethod,proto3" json:"http_method,omitempty"`
+	// The HTTP request URL used to obtain authorization.
+	HttpRequestUrl *wrappers.StringValue `protobuf:"bytes,2,opt,name=http_request_url,json=httpRequestUrl,proto3" json:"http_request_url,omitempty"`
+	// The HTTP authorization header used to obtain authorization.
+	HttpAuthorizationHeader *wrappers.StringValue `protobuf:"bytes,3,opt,name=http_authorization_header,json=httpAuthorizationHeader,proto3" json:"http_authorization_header,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}              `json:"-"`
+	XXX_unrecognized        []byte                `json:"-"`
+	XXX_sizecache           int32                 `json:"-"`
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) Reset()         { *m = Feed_PlacesLocationFeedData_OAuthInfo{} }
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) String() string { return proto.CompactTextString(m) }
+func (*Feed_PlacesLocationFeedData_OAuthInfo) ProtoMessage()    {}
+func (*Feed_PlacesLocationFeedData_OAuthInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{0, 0, 0}
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Unmarshal(m, b)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Marshal(b, m, deterministic)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Merge(m, src)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Size() int {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Size(m)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo proto.InternalMessageInfo
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpMethod() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpMethod
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpRequestUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpRequestUrl
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpAuthorizationHeader() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpAuthorizationHeader
+	}
+	return nil
+}
+
+// Data used to configure an affiliate location feed populated with the
+// specified chains.
+type Feed_AffiliateLocationFeedData struct {
+	// The list of chains that the affiliate location feed will sync the
+	// locations from.
+	ChainIds []*wrappers.Int64Value `protobuf:"bytes,1,rep,name=chain_ids,json=chainIds,proto3" json:"chain_ids,omitempty"`
+	// The relationship the chains have with the advertiser.
+	RelationshipType     enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType `protobuf:"varint,2,opt,name=relationship_type,json=relationshipType,proto3,enum=google.ads.googleads.v3.enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType" json:"relationship_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                              `json:"-"`
+	XXX_unrecognized     []byte                                                                                `json:"-"`
+	XXX_sizecache        int32                                                                                 `json:"-"`
+}
+
+func (m *Feed_AffiliateLocationFeedData) Reset()         { *m = Feed_AffiliateLocationFeedData{} }
+func (m *Feed_AffiliateLocationFeedData) String() string { return proto.CompactTextString(m) }
+func (*Feed_AffiliateLocationFeedData) ProtoMessage()    {}
+func (*Feed_AffiliateLocationFeedData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{0, 1}
+}
+
+func (m *Feed_AffiliateLocationFeedData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Unmarshal(m, b)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Marshal(b, m, deterministic)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_AffiliateLocationFeedData.Merge(m, src)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Size() int {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Size(m)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_AffiliateLocationFeedData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_AffiliateLocationFeedData proto.InternalMessageInfo
+
+func (m *Feed_AffiliateLocationFeedData) GetChainIds() []*wrappers.Int64Value {
+	if m != nil {
+		return m.ChainIds
+	}
+	return nil
+}
+
+func (m *Feed_AffiliateLocationFeedData) GetRelationshipType() enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType {
+	if m != nil {
+		return m.RelationshipType
+	}
+	return enums.AffiliateLocationFeedRelationshipTypeEnum_UNSPECIFIED
+}
+
+// FeedAttributes define the types of data expected to be present in a Feed. A
+// single FeedAttribute specifies the expected type of the FeedItemAttributes
+// with the same FeedAttributeId. Optionally, a FeedAttribute can be marked as
+// being part of a FeedItem's unique key.
+type FeedAttribute struct {
+	// ID of the attribute.
+	Id *wrappers.Int64Value `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the attribute. Required.
+	Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Data type for feed attribute. Required.
+	Type enums.FeedAttributeTypeEnum_FeedAttributeType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.FeedAttributeTypeEnum_FeedAttributeType" json:"type,omitempty"`
+	// Indicates that data corresponding to this attribute is part of a
+	// FeedItem's unique key. It defaults to false if it is unspecified. Note
+	// that a unique key is not required in a Feed's schema, in which case the
+	// FeedItems must be referenced by their feed_item_id.
+	IsPartOfKey          *wrappers.BoolValue `protobuf:"bytes,4,opt,name=is_part_of_key,json=isPartOfKey,proto3" json:"is_part_of_key,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *FeedAttribute) Reset()         { *m = FeedAttribute{} }
+func (m *FeedAttribute) String() string { return proto.CompactTextString(m) }
+func (*FeedAttribute) ProtoMessage()    {}
+func (*FeedAttribute) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{1}
+}
+
+func (m *FeedAttribute) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttribute.Unmarshal(m, b)
+}
+func (m *FeedAttribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttribute.Marshal(b, m, deterministic)
+}
+func (m *FeedAttribute) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttribute.Merge(m, src)
+}
+func (m *FeedAttribute) XXX_Size() int {
+	return xxx_messageInfo_FeedAttribute.Size(m)
+}
+func (m *FeedAttribute) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttribute.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttribute proto.InternalMessageInfo
+
+func (m *FeedAttribute) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *FeedAttribute) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *FeedAttribute) GetType() enums.FeedAttributeTypeEnum_FeedAttributeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.FeedAttributeTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedAttribute) GetIsPartOfKey() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsPartOfKey
+	}
+	return nil
+}
+
+// Operation to be performed on a feed attribute list in a mutate.
+type FeedAttributeOperation struct {
+	// Type of list operation to perform.
+	Operator FeedAttributeOperation_Operator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v3.resources.FeedAttributeOperation_Operator" json:"operator,omitempty"`
+	// The feed attribute being added to the list.
+	Value                *FeedAttribute `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *FeedAttributeOperation) Reset()         { *m = FeedAttributeOperation{} }
+func (m *FeedAttributeOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeOperation) ProtoMessage()    {}
+func (*FeedAttributeOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a634570b482d2aa7, []int{2}
+}
+
+func (m *FeedAttributeOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeOperation.Unmarshal(m, b)
+}
+func (m *FeedAttributeOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeOperation.Marshal(b, m, deterministic)
+}
+func (m *FeedAttributeOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeOperation.Merge(m, src)
+}
+func (m *FeedAttributeOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeOperation.Size(m)
+}
+func (m *FeedAttributeOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeOperation proto.InternalMessageInfo
+
+func (m *FeedAttributeOperation) GetOperator() FeedAttributeOperation_Operator {
+	if m != nil {
+		return m.Operator
+	}
+	return FeedAttributeOperation_UNSPECIFIED
+}
+
+func (m *FeedAttributeOperation) GetValue() *FeedAttribute {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterEnum("google.ads.googleads.v3.resources.FeedAttributeOperation_Operator", FeedAttributeOperation_Operator_name, FeedAttributeOperation_Operator_value)
+	proto.RegisterType((*Feed)(nil), "google.ads.googleads.v3.resources.Feed")
+	proto.RegisterType((*Feed_PlacesLocationFeedData)(nil), "google.ads.googleads.v3.resources.Feed.PlacesLocationFeedData")
+	proto.RegisterType((*Feed_PlacesLocationFeedData_OAuthInfo)(nil), "google.ads.googleads.v3.resources.Feed.PlacesLocationFeedData.OAuthInfo")
+	proto.RegisterType((*Feed_AffiliateLocationFeedData)(nil), "google.ads.googleads.v3.resources.Feed.AffiliateLocationFeedData")
+	proto.RegisterType((*FeedAttribute)(nil), "google.ads.googleads.v3.resources.FeedAttribute")
+	proto.RegisterType((*FeedAttributeOperation)(nil), "google.ads.googleads.v3.resources.FeedAttributeOperation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/feed.proto", fileDescriptor_a634570b482d2aa7)
+}
+
+var fileDescriptor_a634570b482d2aa7 = []byte{
+	// 1078 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0x4f, 0x6f, 0xe3, 0x44,
+	0x18, 0xc6, 0xd7, 0xe9, 0x9f, 0x6d, 0x26, 0x6d, 0x36, 0x3b, 0xbb, 0x2a, 0x6e, 0xb6, 0x8b, 0xda,
+	0xa2, 0x95, 0x2a, 0x81, 0xec, 0x25, 0x41, 0xb0, 0x04, 0x01, 0x72, 0x68, 0xd3, 0x86, 0xdd, 0x4d,
+	0x22, 0x97, 0x16, 0xb4, 0xaa, 0xb0, 0xa6, 0xf1, 0xc4, 0x19, 0x61, 0x7b, 0xcc, 0xcc, 0xb8, 0x28,
+	0x54, 0x7b, 0xe3, 0xc6, 0x47, 0xe0, 0xc6, 0x91, 0x03, 0x1f, 0x84, 0xef, 0xc0, 0x17, 0x58, 0x71,
+	0x5b, 0x89, 0x33, 0xf2, 0x8c, 0xed, 0x86, 0x6d, 0x9b, 0xba, 0x70, 0xca, 0x78, 0xe6, 0x79, 0x7e,
+	0xf3, 0xfa, 0x1d, 0xbf, 0xf3, 0x06, 0xbc, 0xe7, 0x51, 0xea, 0xf9, 0xd8, 0x44, 0x2e, 0x37, 0xd5,
+	0x30, 0x19, 0x9d, 0x36, 0x4d, 0x86, 0x39, 0x8d, 0xd9, 0x10, 0x73, 0x73, 0x84, 0xb1, 0x6b, 0x44,
+	0x8c, 0x0a, 0x0a, 0x37, 0x95, 0xc4, 0x40, 0x2e, 0x37, 0x72, 0xb5, 0x71, 0xda, 0x34, 0x72, 0x75,
+	0xfd, 0xf9, 0x55, 0x40, 0x1c, 0xc6, 0x01, 0x37, 0xd1, 0x68, 0x44, 0x7c, 0x82, 0x04, 0x76, 0x7c,
+	0x3a, 0x44, 0x82, 0xd0, 0xd0, 0x49, 0xf8, 0x0e, 0xc3, 0xbe, 0x7c, 0xe2, 0x63, 0x12, 0x39, 0x62,
+	0x12, 0x61, 0xb5, 0x63, 0xfd, 0xa3, 0xd9, 0x38, 0xe9, 0x45, 0x42, 0x30, 0x72, 0x12, 0x0b, 0x3c,
+	0x6d, 0x34, 0x0b, 0x18, 0x29, 0x23, 0x1e, 0x09, 0x6f, 0x60, 0xe0, 0x02, 0x89, 0x98, 0xa7, 0x86,
+	0xb5, 0xcc, 0x10, 0x91, 0x3c, 0x5b, 0xe9, 0xd2, 0xdb, 0xe9, 0x92, 0x7c, 0x3a, 0x89, 0x47, 0xe6,
+	0x0f, 0x0c, 0x45, 0x11, 0x66, 0x99, 0x75, 0x7d, 0xca, 0x8a, 0xc2, 0x90, 0x0a, 0xf5, 0xee, 0x6a,
+	0x75, 0xeb, 0xf7, 0x2a, 0x98, 0xef, 0x60, 0xec, 0xc2, 0x77, 0xc0, 0x4a, 0x06, 0x76, 0x42, 0x14,
+	0x60, 0x5d, 0xdb, 0xd0, 0xb6, 0xcb, 0xf6, 0x72, 0x36, 0xd9, 0x43, 0x01, 0x86, 0xef, 0x82, 0x12,
+	0x71, 0xf5, 0xd2, 0x86, 0xb6, 0x5d, 0x69, 0x3c, 0x48, 0x4f, 0xc5, 0xc8, 0x36, 0x36, 0xba, 0xa1,
+	0xf8, 0xf0, 0x83, 0x23, 0xe4, 0xc7, 0xd8, 0x2e, 0x11, 0x17, 0x3e, 0x06, 0xf3, 0x12, 0x34, 0x27,
+	0xe5, 0xeb, 0x17, 0xe4, 0x07, 0x82, 0x91, 0xd0, 0x53, 0x7a, 0xa9, 0x84, 0x03, 0x00, 0xf2, 0xfc,
+	0x72, 0x7d, 0x7e, 0x63, 0x6e, 0xbb, 0xd2, 0x78, 0x6c, 0x5c, 0xfb, 0x1d, 0x18, 0xc9, 0x0b, 0x58,
+	0x99, 0xd1, 0x9e, 0x62, 0x40, 0x1f, 0xdc, 0x3f, 0x3f, 0x31, 0x1a, 0x61, 0xa6, 0x5e, 0x5e, 0x2f,
+	0x4b, 0xf6, 0xc7, 0x37, 0x65, 0xf7, 0x33, 0x82, 0x7d, 0x0f, 0x5d, 0x98, 0xe3, 0x70, 0x00, 0x16,
+	0xd5, 0x31, 0xeb, 0x0b, 0x1b, 0xda, 0x76, 0xb5, 0xf1, 0xe4, 0x4a, 0xbe, 0x3c, 0x67, 0xc9, 0xee,
+	0x4b, 0xc3, 0x6e, 0x18, 0x07, 0x53, 0x8f, 0x76, 0xca, 0x49, 0x88, 0xea, 0x3b, 0xd0, 0x97, 0x0a,
+	0x13, 0x0f, 0xa4, 0x21, 0x27, 0xaa, 0x47, 0x3b, 0xe5, 0xc0, 0x33, 0xb0, 0x16, 0xf9, 0x68, 0x88,
+	0xf9, 0x1b, 0x45, 0xe1, 0x22, 0x81, 0xf4, 0x45, 0x79, 0x54, 0x9f, 0x15, 0x4c, 0x8b, 0x31, 0x90,
+	0xa0, 0x67, 0x29, 0x27, 0x99, 0xda, 0x41, 0x02, 0xed, 0xdf, 0xb2, 0x57, 0xa3, 0x4b, 0x57, 0xe0,
+	0x4f, 0x1a, 0x58, 0xbf, 0xaa, 0x2a, 0x65, 0x00, 0xb7, 0x65, 0x00, 0x56, 0xd1, 0x00, 0xac, 0x8c,
+	0x75, 0x49, 0x0c, 0x6b, 0xe8, 0xaa, 0xc5, 0xfa, 0x9f, 0x0b, 0x60, 0xf5, 0xf2, 0xd8, 0xa1, 0x07,
+	0x00, 0x45, 0xb1, 0x18, 0x3b, 0x24, 0x1c, 0x51, 0x59, 0x03, 0x95, 0xc6, 0xfe, 0xff, 0xcb, 0x87,
+	0xd1, 0xb7, 0x62, 0x31, 0xee, 0x86, 0x23, 0x6a, 0x97, 0x25, 0x3b, 0x19, 0x42, 0x0b, 0xac, 0xe0,
+	0x00, 0x11, 0xdf, 0x41, 0xae, 0xcb, 0x30, 0xe7, 0x69, 0x55, 0xcd, 0x2e, 0x93, 0x65, 0x69, 0xb1,
+	0x94, 0x03, 0x3e, 0x03, 0xf7, 0x4e, 0x62, 0x4e, 0x42, 0xcc, 0xb9, 0x83, 0x86, 0x43, 0x1a, 0x87,
+	0xc2, 0x21, 0xae, 0x0e, 0x0a, 0x80, 0xee, 0x66, 0x46, 0x4b, 0xf9, 0xba, 0x2e, 0xec, 0x81, 0xfb,
+	0x39, 0x2d, 0xa9, 0x46, 0x67, 0x44, 0x7c, 0x81, 0x99, 0x3e, 0x5f, 0x00, 0x07, 0x33, 0x67, 0x72,
+	0x4b, 0x74, 0xa4, 0x0f, 0xee, 0x81, 0xda, 0x10, 0x09, 0xec, 0x51, 0x36, 0x49, 0x51, 0x5c, 0x5f,
+	0x90, 0x65, 0x37, 0x9b, 0x75, 0x27, 0x73, 0x29, 0x0e, 0x4f, 0x32, 0xe5, 0xa3, 0x13, 0xec, 0xe7,
+	0x94, 0xc5, 0x02, 0x94, 0x65, 0x69, 0x49, 0x11, 0xf5, 0xbf, 0x34, 0x50, 0xce, 0x4f, 0x01, 0x7e,
+	0x0a, 0x2a, 0x63, 0x21, 0x22, 0x27, 0xc0, 0x62, 0x4c, 0xdd, 0xf4, 0x90, 0x67, 0xe3, 0x40, 0x62,
+	0x78, 0x2e, 0xf5, 0xb0, 0x03, 0x6a, 0xd2, 0xce, 0xf0, 0xf7, 0x31, 0xe6, 0xc2, 0x89, 0x99, 0x5f,
+	0xe8, 0xf0, 0xaa, 0x89, 0xcb, 0x56, 0xa6, 0x43, 0xe6, 0xc3, 0x6f, 0xc0, 0x9a, 0xe4, 0x24, 0x9f,
+	0x04, 0x65, 0xe4, 0x47, 0x55, 0x0b, 0x63, 0x8c, 0x5c, 0xcc, 0x0a, 0x5d, 0x9a, 0x6f, 0x25, 0x76,
+	0x6b, 0xda, 0xbd, 0x2f, 0xcd, 0xf5, 0xd7, 0x1a, 0x58, 0xbb, 0xb2, 0x34, 0xe0, 0x13, 0x50, 0x1e,
+	0x8e, 0x11, 0x09, 0x1d, 0xe2, 0x72, 0x5d, 0x93, 0xb9, 0x9c, 0x79, 0x97, 0x2f, 0x49, 0x75, 0xd7,
+	0xe5, 0xf0, 0x17, 0x0d, 0xdc, 0xbd, 0xd0, 0x3c, 0xe5, 0xbb, 0x57, 0x1b, 0xe1, 0x35, 0x37, 0xd3,
+	0xa5, 0xf1, 0xd8, 0x53, 0xb0, 0xaf, 0x26, 0x11, 0x96, 0x97, 0x56, 0x21, 0xa5, 0x5d, 0x63, 0x6f,
+	0xcc, 0xb4, 0x76, 0x5f, 0x59, 0x6d, 0xf0, 0xf0, 0x7c, 0xeb, 0x74, 0x14, 0x11, 0x6e, 0x0c, 0x69,
+	0x60, 0xca, 0x2e, 0xb7, 0x39, 0x8c, 0xb9, 0xa0, 0x01, 0x66, 0xdc, 0x3c, 0xcb, 0x86, 0x2f, 0x65,
+	0xbf, 0xe5, 0xe6, 0x59, 0xf2, 0xf3, 0xb2, 0xfd, 0x10, 0x3c, 0xe0, 0x13, 0x2e, 0x70, 0xa0, 0xae,
+	0x25, 0x0f, 0x87, 0xe9, 0xfd, 0x2e, 0x6f, 0xa8, 0xad, 0x9f, 0x4b, 0x60, 0xe5, 0x5f, 0x3d, 0x21,
+	0x6d, 0x8a, 0xda, 0xcd, 0x9a, 0x62, 0xa9, 0x70, 0x53, 0x7c, 0x01, 0xe6, 0x65, 0x9a, 0xe7, 0x64,
+	0x9a, 0x3b, 0x05, 0x1a, 0x40, 0x1e, 0x5a, 0x9e, 0xd2, 0x0b, 0xb3, 0xb6, 0x64, 0xc2, 0xcf, 0x41,
+	0x95, 0x70, 0x27, 0x42, 0x4c, 0x38, 0x74, 0xe4, 0x7c, 0x87, 0x27, 0x69, 0xb5, 0xd7, 0x2f, 0xc4,
+	0xd5, 0xa6, 0xd4, 0x57, 0x51, 0x55, 0x08, 0x1f, 0x20, 0x26, 0xfa, 0xa3, 0xa7, 0x78, 0xb2, 0xf5,
+	0x5a, 0x03, 0xab, 0x97, 0x77, 0x48, 0xf8, 0x2d, 0x58, 0x52, 0x0d, 0x97, 0x32, 0x99, 0x9c, 0x6a,
+	0xa3, 0xfd, 0x9f, 0xdb, 0xad, 0xd1, 0x4f, 0x49, 0x76, 0xce, 0x84, 0x1d, 0xb0, 0x70, 0x9a, 0x04,
+	0x94, 0xa6, 0xf2, 0xe6, 0xff, 0x13, 0x94, 0x7d, 0xeb, 0x7d, 0xb0, 0x94, 0xd1, 0xe1, 0x1d, 0x50,
+	0x39, 0xec, 0x1d, 0x0c, 0x76, 0xbf, 0xe8, 0x76, 0xba, 0xbb, 0x3b, 0xb5, 0x5b, 0xb0, 0x02, 0x6e,
+	0x1f, 0xf6, 0x9e, 0xf6, 0xfa, 0x5f, 0xf7, 0x6a, 0x1a, 0xbc, 0x0d, 0xe6, 0xac, 0x9d, 0x9d, 0x5a,
+	0xa9, 0xfd, 0xb7, 0x06, 0x1e, 0x0d, 0x69, 0x70, 0xfd, 0x8e, 0xed, 0x72, 0xb2, 0xe5, 0x20, 0x49,
+	0xe2, 0x40, 0x7b, 0xf1, 0x65, 0xaa, 0xf7, 0xa8, 0x8f, 0x42, 0xcf, 0xa0, 0xcc, 0x33, 0x3d, 0x1c,
+	0xca, 0x14, 0x9b, 0xe7, 0x1f, 0xeb, 0x8c, 0xbf, 0xc7, 0x9f, 0xe4, 0xa3, 0x5f, 0x4b, 0x73, 0x7b,
+	0x96, 0xf5, 0x5b, 0x69, 0x73, 0x4f, 0x21, 0x2d, 0x97, 0x1b, 0x6a, 0x98, 0x8c, 0x8e, 0x9a, 0x86,
+	0x9d, 0x29, 0xff, 0xc8, 0x34, 0xc7, 0x96, 0xcb, 0x8f, 0x73, 0xcd, 0xf1, 0x51, 0xf3, 0x38, 0xd7,
+	0xbc, 0x2a, 0x3d, 0x52, 0x0b, 0xad, 0x96, 0xe5, 0xf2, 0x56, 0x2b, 0x57, 0xb5, 0x5a, 0x47, 0xcd,
+	0x56, 0x2b, 0xd7, 0x9d, 0x2c, 0xca, 0x60, 0x9b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x23,
+	0x8d, 0x02, 0xca, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/feed_item.pb.go b/googleapis/ads/googleads/v3/resources/feed_item.pb.go
new file mode 100644
index 0000000..a20a596
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/feed_item.pb.go
@@ -0,0 +1,591 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/feed_item.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	errors "google.golang.org/genproto/googleapis/ads/googleads/v3/errors"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A feed item.
+type FeedItem struct {
+	// The resource name of the feed item.
+	// Feed item resource names have the form:
+	//
+	// `customers/{customer_id}/feedItems/{feed_id}~{feed_item_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed to which this feed item belongs.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The ID of this feed item.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Start time in which this feed item is effective and can begin serving. The
+	// time is in the customer's time zone.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
+	// End time in which this feed item is no longer effective and will stop
+	// serving. The time is in the customer's time zone.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=end_date_time,json=endDateTime,proto3" json:"end_date_time,omitempty"`
+	// The feed item's attribute values.
+	AttributeValues []*FeedItemAttributeValue `protobuf:"bytes,6,rep,name=attribute_values,json=attributeValues,proto3" json:"attribute_values,omitempty"`
+	// Geo targeting restriction specifies the type of location that can be used
+	// for targeting.
+	GeoTargetingRestriction enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction `protobuf:"varint,7,opt,name=geo_targeting_restriction,json=geoTargetingRestriction,proto3,enum=google.ads.googleads.v3.enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction" json:"geo_targeting_restriction,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,8,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// Status of the feed item.
+	// This field is read-only.
+	Status enums.FeedItemStatusEnum_FeedItemStatus `protobuf:"varint,9,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedItemStatusEnum_FeedItemStatus" json:"status,omitempty"`
+	// List of info about a feed item's validation and approval state for active
+	// feed mappings. There will be an entry in the list for each type of feed
+	// mapping associated with the feed, e.g. a feed with a sitelink and a call
+	// feed mapping would cause every feed item associated with that feed to have
+	// an entry in this list for both sitelink and call.
+	// This field is read-only.
+	PolicyInfos          []*FeedItemPlaceholderPolicyInfo `protobuf:"bytes,10,rep,name=policy_infos,json=policyInfos,proto3" json:"policy_infos,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *FeedItem) Reset()         { *m = FeedItem{} }
+func (m *FeedItem) String() string { return proto.CompactTextString(m) }
+func (*FeedItem) ProtoMessage()    {}
+func (*FeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa81ffed50546ca6, []int{0}
+}
+
+func (m *FeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItem.Unmarshal(m, b)
+}
+func (m *FeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItem.Marshal(b, m, deterministic)
+}
+func (m *FeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItem.Merge(m, src)
+}
+func (m *FeedItem) XXX_Size() int {
+	return xxx_messageInfo_FeedItem.Size(m)
+}
+func (m *FeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItem proto.InternalMessageInfo
+
+func (m *FeedItem) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedItem) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *FeedItem) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *FeedItem) GetStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDateTime
+	}
+	return nil
+}
+
+func (m *FeedItem) GetEndDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDateTime
+	}
+	return nil
+}
+
+func (m *FeedItem) GetAttributeValues() []*FeedItemAttributeValue {
+	if m != nil {
+		return m.AttributeValues
+	}
+	return nil
+}
+
+func (m *FeedItem) GetGeoTargetingRestriction() enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction {
+	if m != nil {
+		return m.GeoTargetingRestriction
+	}
+	return enums.GeoTargetingRestrictionEnum_UNSPECIFIED
+}
+
+func (m *FeedItem) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *FeedItem) GetStatus() enums.FeedItemStatusEnum_FeedItemStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedItemStatusEnum_UNSPECIFIED
+}
+
+func (m *FeedItem) GetPolicyInfos() []*FeedItemPlaceholderPolicyInfo {
+	if m != nil {
+		return m.PolicyInfos
+	}
+	return nil
+}
+
+// A feed item attribute value.
+type FeedItemAttributeValue struct {
+	// Id of the feed attribute for which the value is associated with.
+	FeedAttributeId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
+	// Int64 value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type INT64.
+	IntegerValue *wrappers.Int64Value `protobuf:"bytes,2,opt,name=integer_value,json=integerValue,proto3" json:"integer_value,omitempty"`
+	// Bool value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type BOOLEAN.
+	BooleanValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=boolean_value,json=booleanValue,proto3" json:"boolean_value,omitempty"`
+	// String value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type STRING, URL or DATE_TIME.
+	// For STRING the maximum length is 1500 characters. For URL the maximum
+	// length is 2076 characters. For DATE_TIME the string must be in the format
+	// "YYYYMMDD HHMMSS".
+	StringValue *wrappers.StringValue `protobuf:"bytes,4,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"`
+	// Double value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type DOUBLE.
+	DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"`
+	// Price value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type PRICE.
+	PriceValue *common.Money `protobuf:"bytes,6,opt,name=price_value,json=priceValue,proto3" json:"price_value,omitempty"`
+	// Repeated int64 value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type INT64_LIST.
+	IntegerValues []*wrappers.Int64Value `protobuf:"bytes,7,rep,name=integer_values,json=integerValues,proto3" json:"integer_values,omitempty"`
+	// Repeated bool value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type BOOLEAN_LIST.
+	BooleanValues []*wrappers.BoolValue `protobuf:"bytes,8,rep,name=boolean_values,json=booleanValues,proto3" json:"boolean_values,omitempty"`
+	// Repeated string value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type STRING_LIST, URL_LIST or DATE_TIME_LIST.
+	// For STRING_LIST and URL_LIST the total size of the list in bytes may not
+	// exceed 3000. For DATE_TIME_LIST the number of elements may not exceed 200.
+	//
+	// For STRING_LIST the maximum length of each string element is 1500
+	// characters. For URL_LIST the maximum length is 2076 characters. For
+	// DATE_TIME the format of the string must be the same as start and end time
+	// for the feed item.
+	StringValues []*wrappers.StringValue `protobuf:"bytes,9,rep,name=string_values,json=stringValues,proto3" json:"string_values,omitempty"`
+	// Repeated double value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type DOUBLE_LIST.
+	DoubleValues         []*wrappers.DoubleValue `protobuf:"bytes,10,rep,name=double_values,json=doubleValues,proto3" json:"double_values,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *FeedItemAttributeValue) Reset()         { *m = FeedItemAttributeValue{} }
+func (m *FeedItemAttributeValue) String() string { return proto.CompactTextString(m) }
+func (*FeedItemAttributeValue) ProtoMessage()    {}
+func (*FeedItemAttributeValue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa81ffed50546ca6, []int{1}
+}
+
+func (m *FeedItemAttributeValue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemAttributeValue.Unmarshal(m, b)
+}
+func (m *FeedItemAttributeValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemAttributeValue.Marshal(b, m, deterministic)
+}
+func (m *FeedItemAttributeValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemAttributeValue.Merge(m, src)
+}
+func (m *FeedItemAttributeValue) XXX_Size() int {
+	return xxx_messageInfo_FeedItemAttributeValue.Size(m)
+}
+func (m *FeedItemAttributeValue) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemAttributeValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemAttributeValue proto.InternalMessageInfo
+
+func (m *FeedItemAttributeValue) GetFeedAttributeId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeId
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetIntegerValue() *wrappers.Int64Value {
+	if m != nil {
+		return m.IntegerValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetBooleanValue() *wrappers.BoolValue {
+	if m != nil {
+		return m.BooleanValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetStringValue() *wrappers.StringValue {
+	if m != nil {
+		return m.StringValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetDoubleValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.DoubleValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetPriceValue() *common.Money {
+	if m != nil {
+		return m.PriceValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetIntegerValues() []*wrappers.Int64Value {
+	if m != nil {
+		return m.IntegerValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetBooleanValues() []*wrappers.BoolValue {
+	if m != nil {
+		return m.BooleanValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetStringValues() []*wrappers.StringValue {
+	if m != nil {
+		return m.StringValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetDoubleValues() []*wrappers.DoubleValue {
+	if m != nil {
+		return m.DoubleValues
+	}
+	return nil
+}
+
+// Policy, validation, and quality approval info for a feed item for the
+// specified placeholder type.
+type FeedItemPlaceholderPolicyInfo struct {
+	// The placeholder type.
+	PlaceholderTypeEnum enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,10,opt,name=placeholder_type_enum,json=placeholderTypeEnum,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type_enum,omitempty"`
+	// The FeedMapping that contains the placeholder type.
+	FeedMappingResourceName *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed_mapping_resource_name,json=feedMappingResourceName,proto3" json:"feed_mapping_resource_name,omitempty"`
+	// Where the placeholder type is in the review process.
+	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,3,opt,name=review_status,json=reviewStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyReviewStatusEnum_PolicyReviewStatus" json:"review_status,omitempty"`
+	// The overall approval status of the placeholder type, calculated based on
+	// the status of its individual policy topic entries.
+	ApprovalStatus enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,4,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
+	// The list of policy findings for the placeholder type.
+	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,5,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	// The validation status of the palceholder type.
+	ValidationStatus enums.FeedItemValidationStatusEnum_FeedItemValidationStatus `protobuf:"varint,6,opt,name=validation_status,json=validationStatus,proto3,enum=google.ads.googleads.v3.enums.FeedItemValidationStatusEnum_FeedItemValidationStatus" json:"validation_status,omitempty"`
+	// List of placeholder type validation errors.
+	ValidationErrors []*FeedItemValidationError `protobuf:"bytes,7,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"`
+	// Placeholder type quality evaluation approval status.
+	QualityApprovalStatus enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus `protobuf:"varint,8,opt,name=quality_approval_status,json=qualityApprovalStatus,proto3,enum=google.ads.googleads.v3.enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus" json:"quality_approval_status,omitempty"`
+	// List of placeholder type quality evaluation disapproval reasons.
+	QualityDisapprovalReasons []enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason `protobuf:"varint,9,rep,packed,name=quality_disapproval_reasons,json=qualityDisapprovalReasons,proto3,enum=google.ads.googleads.v3.enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason" json:"quality_disapproval_reasons,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{}                                                                      `json:"-"`
+	XXX_unrecognized          []byte                                                                        `json:"-"`
+	XXX_sizecache             int32                                                                         `json:"-"`
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) Reset()         { *m = FeedItemPlaceholderPolicyInfo{} }
+func (m *FeedItemPlaceholderPolicyInfo) String() string { return proto.CompactTextString(m) }
+func (*FeedItemPlaceholderPolicyInfo) ProtoMessage()    {}
+func (*FeedItemPlaceholderPolicyInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa81ffed50546ca6, []int{2}
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemPlaceholderPolicyInfo.Unmarshal(m, b)
+}
+func (m *FeedItemPlaceholderPolicyInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemPlaceholderPolicyInfo.Marshal(b, m, deterministic)
+}
+func (m *FeedItemPlaceholderPolicyInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemPlaceholderPolicyInfo.Merge(m, src)
+}
+func (m *FeedItemPlaceholderPolicyInfo) XXX_Size() int {
+	return xxx_messageInfo_FeedItemPlaceholderPolicyInfo.Size(m)
+}
+func (m *FeedItemPlaceholderPolicyInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemPlaceholderPolicyInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemPlaceholderPolicyInfo proto.InternalMessageInfo
+
+func (m *FeedItemPlaceholderPolicyInfo) GetPlaceholderTypeEnum() enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypeEnum
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetFeedMappingResourceName() *wrappers.StringValue {
+	if m != nil {
+		return m.FeedMappingResourceName
+	}
+	return nil
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetReviewStatus() enums.PolicyReviewStatusEnum_PolicyReviewStatus {
+	if m != nil {
+		return m.ReviewStatus
+	}
+	return enums.PolicyReviewStatusEnum_UNSPECIFIED
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetApprovalStatus() enums.PolicyApprovalStatusEnum_PolicyApprovalStatus {
+	if m != nil {
+		return m.ApprovalStatus
+	}
+	return enums.PolicyApprovalStatusEnum_UNSPECIFIED
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetValidationStatus() enums.FeedItemValidationStatusEnum_FeedItemValidationStatus {
+	if m != nil {
+		return m.ValidationStatus
+	}
+	return enums.FeedItemValidationStatusEnum_UNSPECIFIED
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetValidationErrors() []*FeedItemValidationError {
+	if m != nil {
+		return m.ValidationErrors
+	}
+	return nil
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetQualityApprovalStatus() enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus {
+	if m != nil {
+		return m.QualityApprovalStatus
+	}
+	return enums.FeedItemQualityApprovalStatusEnum_UNSPECIFIED
+}
+
+func (m *FeedItemPlaceholderPolicyInfo) GetQualityDisapprovalReasons() []enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason {
+	if m != nil {
+		return m.QualityDisapprovalReasons
+	}
+	return nil
+}
+
+// Stores a validation error and the set of offending feed attributes which
+// together are responsible for causing a feed item validation error.
+type FeedItemValidationError struct {
+	// Error code indicating what validation error was triggered. The description
+	// of the error can be found in the 'description' field.
+	ValidationError errors.FeedItemValidationErrorEnum_FeedItemValidationError `protobuf:"varint,1,opt,name=validation_error,json=validationError,proto3,enum=google.ads.googleads.v3.errors.FeedItemValidationErrorEnum_FeedItemValidationError" json:"validation_error,omitempty"`
+	// The description of the validation error.
+	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Set of feed attributes in the feed item flagged during validation. If
+	// empty, no specific feed attributes can be associated with the error
+	// (e.g. error across the entire feed item).
+	FeedAttributeIds []*wrappers.Int64Value `protobuf:"bytes,3,rep,name=feed_attribute_ids,json=feedAttributeIds,proto3" json:"feed_attribute_ids,omitempty"`
+	// Any extra information related to this error which is not captured by
+	// validation_error and feed_attribute_id (e.g. placeholder field IDs when
+	// feed_attribute_id is not mapped). Note that extra_info is not localized.
+	ExtraInfo            *wrappers.StringValue `protobuf:"bytes,5,opt,name=extra_info,json=extraInfo,proto3" json:"extra_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *FeedItemValidationError) Reset()         { *m = FeedItemValidationError{} }
+func (m *FeedItemValidationError) String() string { return proto.CompactTextString(m) }
+func (*FeedItemValidationError) ProtoMessage()    {}
+func (*FeedItemValidationError) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aa81ffed50546ca6, []int{3}
+}
+
+func (m *FeedItemValidationError) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemValidationError.Unmarshal(m, b)
+}
+func (m *FeedItemValidationError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemValidationError.Marshal(b, m, deterministic)
+}
+func (m *FeedItemValidationError) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemValidationError.Merge(m, src)
+}
+func (m *FeedItemValidationError) XXX_Size() int {
+	return xxx_messageInfo_FeedItemValidationError.Size(m)
+}
+func (m *FeedItemValidationError) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemValidationError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemValidationError proto.InternalMessageInfo
+
+func (m *FeedItemValidationError) GetValidationError() errors.FeedItemValidationErrorEnum_FeedItemValidationError {
+	if m != nil {
+		return m.ValidationError
+	}
+	return errors.FeedItemValidationErrorEnum_UNSPECIFIED
+}
+
+func (m *FeedItemValidationError) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *FeedItemValidationError) GetFeedAttributeIds() []*wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeIds
+	}
+	return nil
+}
+
+func (m *FeedItemValidationError) GetExtraInfo() *wrappers.StringValue {
+	if m != nil {
+		return m.ExtraInfo
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*FeedItem)(nil), "google.ads.googleads.v3.resources.FeedItem")
+	proto.RegisterType((*FeedItemAttributeValue)(nil), "google.ads.googleads.v3.resources.FeedItemAttributeValue")
+	proto.RegisterType((*FeedItemPlaceholderPolicyInfo)(nil), "google.ads.googleads.v3.resources.FeedItemPlaceholderPolicyInfo")
+	proto.RegisterType((*FeedItemValidationError)(nil), "google.ads.googleads.v3.resources.FeedItemValidationError")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/feed_item.proto", fileDescriptor_aa81ffed50546ca6)
+}
+
+var fileDescriptor_aa81ffed50546ca6 = []byte{
+	// 1275 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xdf, 0x6e, 0xdc, 0xc4,
+	0x17, 0xd6, 0x6e, 0xda, 0x34, 0x9d, 0xfd, 0x93, 0x74, 0xfa, 0xeb, 0x2f, 0x6e, 0x5a, 0x50, 0x1a,
+	0x54, 0x29, 0xa2, 0x92, 0x1d, 0x76, 0x0b, 0x82, 0xad, 0xa0, 0xd9, 0x90, 0x34, 0x0d, 0xa2, 0x10,
+	0x9c, 0x28, 0x02, 0x14, 0x61, 0xcd, 0xda, 0x13, 0x33, 0x92, 0xed, 0x71, 0x66, 0xc6, 0x5b, 0x56,
+	0x55, 0x91, 0xb8, 0xe0, 0x96, 0x4b, 0x1e, 0x00, 0x71, 0xc5, 0x2b, 0xf0, 0x06, 0xbc, 0x05, 0x97,
+	0xf4, 0x11, 0xb8, 0x42, 0x1e, 0x8f, 0xbd, 0xde, 0x3f, 0x5e, 0x3b, 0x77, 0xe3, 0x99, 0xf3, 0x7d,
+	0xe7, 0xcc, 0x99, 0xf9, 0xce, 0x19, 0x83, 0xf7, 0x5c, 0x4a, 0x5d, 0x0f, 0x1b, 0xc8, 0xe1, 0x46,
+	0x32, 0x8c, 0x47, 0xc3, 0xae, 0xc1, 0x30, 0xa7, 0x11, 0xb3, 0x31, 0x37, 0x2e, 0x30, 0x76, 0x2c,
+	0x22, 0xb0, 0xaf, 0x87, 0x8c, 0x0a, 0x0a, 0x1f, 0x24, 0x76, 0x3a, 0x72, 0xb8, 0x9e, 0x41, 0xf4,
+	0x61, 0x57, 0xcf, 0x20, 0x1b, 0xef, 0x17, 0xb1, 0xda, 0xd4, 0xf7, 0x69, 0x60, 0xd8, 0x11, 0x17,
+	0xd4, 0xb7, 0x42, 0xc4, 0x90, 0x8f, 0x05, 0x66, 0x09, 0xf3, 0xc6, 0x4e, 0x09, 0x4c, 0x46, 0x92,
+	0x8c, 0x15, 0xe2, 0x51, 0x09, 0x22, 0xa4, 0x1e, 0xb1, 0x47, 0xca, 0xf8, 0xa0, 0xc8, 0x18, 0x07,
+	0x91, 0x9f, 0xdb, 0xa7, 0x75, 0x19, 0x21, 0x8f, 0x88, 0x91, 0x85, 0xc2, 0x90, 0xd1, 0x21, 0xf2,
+	0x2c, 0x2e, 0x90, 0x88, 0xb8, 0xa2, 0x79, 0x7e, 0x55, 0x1a, 0x87, 0xf0, 0x8c, 0x89, 0x61, 0xc4,
+	0xb3, 0xe8, 0x1f, 0x57, 0x65, 0x9a, 0xf0, 0xff, 0xb4, 0x2a, 0x6a, 0x88, 0x3c, 0xe2, 0x20, 0x41,
+	0x68, 0x30, 0x49, 0xf0, 0xf1, 0x62, 0x02, 0x17, 0x53, 0x4b, 0x20, 0xe6, 0x62, 0x41, 0x02, 0xd7,
+	0x62, 0x98, 0x0b, 0x46, 0xec, 0x98, 0xa5, 0x5a, 0xd4, 0xa1, 0x87, 0x6c, 0xfc, 0x3d, 0xf5, 0x1c,
+	0xcc, 0x2c, 0x31, 0x0a, 0xb1, 0x42, 0xf5, 0x4a, 0x50, 0xf2, 0xa0, 0x0a, 0x32, 0xfe, 0x61, 0x25,
+	0x2c, 0xc3, 0x43, 0x82, 0x5f, 0x56, 0xcd, 0x15, 0x63, 0x94, 0x15, 0x24, 0x4b, 0xae, 0x29, 0x82,
+	0xbb, 0x29, 0x41, 0x48, 0x32, 0x49, 0xa8, 0xa5, 0xb7, 0xd5, 0x92, 0xfc, 0x1a, 0x44, 0x17, 0xc6,
+	0x4b, 0x86, 0xc2, 0x10, 0xb3, 0xd4, 0xf7, 0xfd, 0x1c, 0x14, 0x05, 0x01, 0x15, 0x92, 0x5d, 0xad,
+	0x6e, 0xfd, 0x7c, 0x03, 0xac, 0x3c, 0xc3, 0xd8, 0x39, 0x12, 0xd8, 0x87, 0xef, 0x80, 0x56, 0x4a,
+	0x6e, 0x05, 0xc8, 0xc7, 0x5a, 0x6d, 0xb3, 0xb6, 0x7d, 0xd3, 0x6c, 0xa6, 0x93, 0x5f, 0x20, 0x1f,
+	0xc3, 0x1d, 0x70, 0x2d, 0x0e, 0x57, 0xab, 0x6f, 0xd6, 0xb6, 0x1b, 0x9d, 0xfb, 0x4a, 0x7b, 0x7a,
+	0xea, 0x5e, 0x3f, 0x11, 0x8c, 0x04, 0xee, 0x19, 0xf2, 0x22, 0x6c, 0x4a, 0x4b, 0xf8, 0x08, 0xd4,
+	0x89, 0xa3, 0x2d, 0x49, 0xfb, 0x7b, 0x33, 0xf6, 0x47, 0x81, 0xf8, 0xe0, 0x71, 0x62, 0x5e, 0x27,
+	0x0e, 0xdc, 0x07, 0xab, 0x5c, 0x20, 0x26, 0x2c, 0x07, 0x09, 0x6c, 0x09, 0xe2, 0x63, 0xed, 0x5a,
+	0x05, 0x4f, 0x2d, 0x09, 0xda, 0x47, 0x02, 0x9f, 0x12, 0x1f, 0xc3, 0x5d, 0xd0, 0xc2, 0x81, 0x93,
+	0xe3, 0xb8, 0x5e, 0x81, 0xa3, 0x81, 0x03, 0x27, 0x63, 0x70, 0xc0, 0x1a, 0x12, 0x82, 0x91, 0x41,
+	0x24, 0x70, 0x7c, 0x2a, 0x11, 0xe6, 0xda, 0xf2, 0xe6, 0xd2, 0x76, 0xa3, 0xf3, 0x91, 0x5e, 0x5a,
+	0x79, 0xf4, 0x34, 0xa5, 0xfd, 0x94, 0x22, 0xf1, 0xb0, 0x8a, 0x26, 0xbe, 0x39, 0xfc, 0xa5, 0x06,
+	0xee, 0x16, 0x5e, 0x74, 0xed, 0xc6, 0x66, 0x6d, 0xbb, 0xdd, 0x31, 0x0b, 0xfd, 0xc9, 0x7b, 0xa7,
+	0x1f, 0x62, 0x7a, 0x9a, 0xc2, 0xcd, 0x31, 0xfa, 0x20, 0x88, 0xfc, 0xa2, 0x35, 0x73, 0xdd, 0x9d,
+	0xbf, 0x00, 0x6d, 0x70, 0x27, 0x62, 0x9e, 0x35, 0x5d, 0x19, 0xb9, 0xb6, 0x22, 0xf7, 0x6e, 0x14,
+	0xc6, 0xa2, 0xea, 0xe1, 0xa7, 0x12, 0x78, 0x9c, 0xe2, 0xcc, 0xdb, 0x11, 0xf3, 0xa6, 0xe6, 0x38,
+	0xfc, 0x1a, 0x2c, 0x27, 0xf2, 0xd0, 0x6e, 0xca, 0x1d, 0xee, 0x96, 0xec, 0x30, 0xcd, 0xe6, 0x89,
+	0x04, 0xc9, 0x8d, 0x4d, 0x4e, 0x99, 0x8a, 0x0f, 0xda, 0xa0, 0xa9, 0x64, 0x48, 0x82, 0x0b, 0xca,
+	0x35, 0x20, 0xa3, 0xde, 0xbd, 0xc2, 0x89, 0x1d, 0x8f, 0xeb, 0xc6, 0xb1, 0x64, 0x3a, 0x0a, 0x2e,
+	0xa8, 0xd9, 0x08, 0xb3, 0x31, 0xef, 0x99, 0x6f, 0xfa, 0x5f, 0x82, 0x07, 0x63, 0x1e, 0x35, 0x0a,
+	0x09, 0x8f, 0xb3, 0x60, 0x64, 0x72, 0x7a, 0x37, 0xc9, 0x22, 0x66, 0xdc, 0x78, 0x95, 0x0e, 0x5f,
+	0x4b, 0xad, 0xc7, 0xcb, 0xdc, 0x78, 0x95, 0xc9, 0xfe, 0xf5, 0xd6, 0x9f, 0xd7, 0xc1, 0xff, 0xe7,
+	0x5f, 0x1a, 0x78, 0x08, 0x6e, 0x49, 0xc3, 0xf1, 0x75, 0x24, 0x8e, 0x54, 0x66, 0x89, 0x9a, 0x56,
+	0x63, 0x54, 0xc6, 0x75, 0xe4, 0xc4, 0xa2, 0x20, 0x81, 0xc0, 0x2e, 0x66, 0xc9, 0x85, 0x56, 0x12,
+	0x5e, 0x48, 0xd2, 0x54, 0x88, 0x24, 0x94, 0xa7, 0xa0, 0x35, 0xa0, 0xd4, 0xc3, 0x28, 0x50, 0x0c,
+	0x89, 0xa8, 0x37, 0x66, 0x18, 0xf6, 0x28, 0xf5, 0x14, 0x81, 0x02, 0xa4, 0x04, 0x4d, 0x2e, 0x15,
+	0xa7, 0xf0, 0x55, 0xa4, 0xdd, 0xe0, 0xe3, 0x8f, 0x98, 0xc0, 0xa1, 0xd1, 0xc0, 0x53, 0x9a, 0x2c,
+	0xd4, 0xf5, 0xbe, 0x34, 0x52, 0x04, 0xce, 0xf8, 0x03, 0x3e, 0x03, 0x8d, 0x90, 0x11, 0x3b, 0xc5,
+	0x2f, 0x4b, 0xfc, 0xc3, 0xb2, 0x6b, 0xfd, 0x82, 0x06, 0x78, 0x64, 0x02, 0x89, 0x4c, 0x78, 0xf6,
+	0x40, 0x7b, 0x22, 0x99, 0x5c, 0xbb, 0x21, 0xef, 0xda, 0xc2, 0x6c, 0xb6, 0xf2, 0xd9, 0xe4, 0xb0,
+	0x0f, 0xda, 0x13, 0xe9, 0x4c, 0x55, 0xb6, 0x28, 0x9f, 0xad, 0x7c, 0x3e, 0x63, 0x8a, 0x56, 0x3e,
+	0xa1, 0xb1, 0xa2, 0x96, 0x4a, 0x33, 0xda, 0xcc, 0x65, 0x54, 0x52, 0xe4, 0x53, 0x9a, 0x8a, 0x66,
+	0x71, 0x4e, 0x9b, 0xb9, 0x9c, 0xf2, 0xad, 0x7f, 0x56, 0xc0, 0x5b, 0x0b, 0x05, 0x04, 0x87, 0xe0,
+	0xce, 0x74, 0x47, 0xb6, 0x62, 0x71, 0x6b, 0x40, 0x56, 0x80, 0xbd, 0x92, 0x0a, 0x90, 0x23, 0x3d,
+	0x1d, 0x85, 0x58, 0x96, 0x80, 0xa9, 0x39, 0xf3, 0x76, 0x38, 0x6b, 0x04, 0xbf, 0x01, 0x1b, 0x52,
+	0x3c, 0x3e, 0x0a, 0x43, 0x55, 0x5e, 0x73, 0xfd, 0xad, 0x4a, 0x0f, 0x5b, 0x8f, 0xf1, 0x2f, 0x12,
+	0xb8, 0x99, 0x6f, 0x84, 0x7e, 0xdc, 0x2d, 0x73, 0xbd, 0x5e, 0x8a, 0xa1, 0xdd, 0x79, 0x5e, 0xb6,
+	0x15, 0x99, 0x14, 0x53, 0x22, 0x73, 0x05, 0x6d, 0x76, 0x3a, 0xee, 0xbb, 0xe3, 0x2f, 0x18, 0x81,
+	0xd5, 0xa9, 0x67, 0x89, 0x54, 0x4f, 0xbb, 0xf3, 0x79, 0x25, 0x87, 0x7d, 0x85, 0x9d, 0x71, 0x39,
+	0xb9, 0x60, 0xb6, 0xd1, 0xc4, 0x37, 0x1c, 0x80, 0xff, 0xa9, 0x8a, 0x2a, 0x68, 0x48, 0x6c, 0x0b,
+	0x07, 0x82, 0x11, 0xcc, 0xb5, 0xeb, 0xf2, 0x92, 0xec, 0x94, 0x09, 0x27, 0xf1, 0x71, 0x1a, 0x43,
+	0x0f, 0x02, 0xc1, 0x46, 0x26, 0x0c, 0x27, 0x67, 0x08, 0xe6, 0xf0, 0xa7, 0x1a, 0xb8, 0x35, 0xf3,
+	0x4a, 0x94, 0xd2, 0x6c, 0x77, 0x4e, 0x2b, 0xf6, 0x86, 0xb3, 0x0c, 0x3f, 0xa7, 0x4b, 0x4c, 0x2f,
+	0x9a, 0x6b, 0xc3, 0xa9, 0x19, 0xe8, 0x4e, 0x84, 0x90, 0xbc, 0xcb, 0x94, 0xa4, 0x7b, 0x57, 0x68,
+	0x1f, 0x63, 0x4f, 0x07, 0x31, 0x45, 0xde, 0x91, 0x9c, 0xe0, 0xf0, 0xd7, 0x1a, 0x58, 0x2f, 0x78,
+	0xd9, 0x6b, 0x2b, 0x72, 0xcb, 0xdf, 0x55, 0xdc, 0xf2, 0x57, 0x09, 0xcb, 0x9c, 0x93, 0x5d, 0x68,
+	0x61, 0xde, 0xb9, 0x9c, 0x37, 0x0d, 0x7f, 0xaf, 0x81, 0x7b, 0xc5, 0xff, 0x0a, 0x49, 0x65, 0x69,
+	0x77, 0x9c, 0xab, 0x05, 0xb7, 0x3f, 0x26, 0x32, 0x25, 0xcf, 0xbc, 0xf8, 0x66, 0x8c, 0xcc, 0xbb,
+	0x97, 0x05, 0x2b, 0x7c, 0xeb, 0xef, 0x3a, 0x58, 0x2f, 0xc8, 0x36, 0xfc, 0x11, 0xac, 0x4d, 0x1f,
+	0xa2, 0xec, 0x94, 0xed, 0xce, 0x49, 0x71, 0xd8, 0xf2, 0x58, 0x8a, 0x0e, 0xb0, 0xe0, 0x1a, 0x25,
+	0x87, 0xbb, 0x3a, 0x75, 0xb8, 0xf0, 0x13, 0xd0, 0x70, 0x30, 0xb7, 0x19, 0x09, 0xe5, 0xfb, 0xad,
+	0x4a, 0x79, 0xc9, 0x03, 0xe0, 0x11, 0x80, 0x33, 0xad, 0x3e, 0xae, 0x2b, 0xa5, 0x8d, 0x65, 0x6d,
+	0xaa, 0xd7, 0x73, 0xf8, 0x04, 0x00, 0xfc, 0x83, 0x60, 0x48, 0x3e, 0x84, 0x2a, 0x3d, 0x7f, 0x6f,
+	0x4a, 0xfb, 0xb8, 0x5a, 0xef, 0xfd, 0x5b, 0x03, 0x0f, 0x6d, 0xea, 0x97, 0xdf, 0xfb, 0xbd, 0x56,
+	0x56, 0xf6, 0x63, 0xca, 0xe3, 0xda, 0xb7, 0x9f, 0x29, 0x8c, 0x4b, 0x3d, 0x14, 0xb8, 0x3a, 0x65,
+	0xae, 0xe1, 0xe2, 0x40, 0x3a, 0x34, 0xc6, 0x0f, 0xa5, 0x05, 0x3f, 0xfa, 0x4f, 0xb2, 0xd1, 0x6f,
+	0xf5, 0xa5, 0xc3, 0x7e, 0xff, 0x8f, 0xfa, 0x83, 0xc3, 0x84, 0xb2, 0xef, 0x70, 0x3d, 0x19, 0xc6,
+	0xa3, 0xb3, 0xae, 0x9e, 0x96, 0x63, 0xfe, 0x57, 0x6a, 0x73, 0xde, 0x77, 0xf8, 0x79, 0x66, 0x73,
+	0x7e, 0xd6, 0x3d, 0xcf, 0x6c, 0xde, 0xd4, 0x1f, 0x26, 0x0b, 0xbd, 0x5e, 0xdf, 0xe1, 0xbd, 0x5e,
+	0x66, 0xd5, 0xeb, 0x9d, 0x75, 0x7b, 0xbd, 0xcc, 0x6e, 0xb0, 0x2c, 0x83, 0xed, 0xfe, 0x17, 0x00,
+	0x00, 0xff, 0xff, 0x2c, 0x38, 0x2b, 0x40, 0x94, 0x10, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/feed_item_target.pb.go b/googleapis/ads/googleads/v3/resources/feed_item_target.pb.go
new file mode 100644
index 0000000..673651f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/feed_item_target.pb.go
@@ -0,0 +1,270 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/feed_item_target.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A feed item target.
+type FeedItemTarget struct {
+	// The resource name of the feed item target.
+	// Feed item target resource names have the form:
+	// `customers/{customer_id}/feedItemTargets/{feed_id}~{feed_item_id}~{feed_item_target_type}~{feed_item_target_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed item to which this feed item target belongs.
+	FeedItem *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed_item,json=feedItem,proto3" json:"feed_item,omitempty"`
+	// The target type of this feed item target. This field is read-only.
+	FeedItemTargetType enums.FeedItemTargetTypeEnum_FeedItemTargetType `protobuf:"varint,3,opt,name=feed_item_target_type,json=feedItemTargetType,proto3,enum=google.ads.googleads.v3.enums.FeedItemTargetTypeEnum_FeedItemTargetType" json:"feed_item_target_type,omitempty"`
+	// The ID of the targeted resource. This field is read-only.
+	FeedItemTargetId *wrappers.Int64Value `protobuf:"bytes,6,opt,name=feed_item_target_id,json=feedItemTargetId,proto3" json:"feed_item_target_id,omitempty"`
+	// Status of the feed item target.
+	// This field is read-only.
+	Status enums.FeedItemTargetStatusEnum_FeedItemTargetStatus `protobuf:"varint,11,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedItemTargetStatusEnum_FeedItemTargetStatus" json:"status,omitempty"`
+	// The targeted resource.
+	//
+	// Types that are valid to be assigned to Target:
+	//	*FeedItemTarget_Campaign
+	//	*FeedItemTarget_AdGroup
+	//	*FeedItemTarget_Keyword
+	//	*FeedItemTarget_GeoTargetConstant
+	//	*FeedItemTarget_Device
+	//	*FeedItemTarget_AdSchedule
+	Target               isFeedItemTarget_Target `protobuf_oneof:"target"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *FeedItemTarget) Reset()         { *m = FeedItemTarget{} }
+func (m *FeedItemTarget) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTarget) ProtoMessage()    {}
+func (*FeedItemTarget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_91101725362cc715, []int{0}
+}
+
+func (m *FeedItemTarget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTarget.Unmarshal(m, b)
+}
+func (m *FeedItemTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTarget.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTarget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTarget.Merge(m, src)
+}
+func (m *FeedItemTarget) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTarget.Size(m)
+}
+func (m *FeedItemTarget) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTarget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTarget proto.InternalMessageInfo
+
+func (m *FeedItemTarget) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedItemTarget) GetFeedItem() *wrappers.StringValue {
+	if m != nil {
+		return m.FeedItem
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetFeedItemTargetType() enums.FeedItemTargetTypeEnum_FeedItemTargetType {
+	if m != nil {
+		return m.FeedItemTargetType
+	}
+	return enums.FeedItemTargetTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedItemTarget) GetFeedItemTargetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedItemTargetId
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetStatus() enums.FeedItemTargetStatusEnum_FeedItemTargetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedItemTargetStatusEnum_UNSPECIFIED
+}
+
+type isFeedItemTarget_Target interface {
+	isFeedItemTarget_Target()
+}
+
+type FeedItemTarget_Campaign struct {
+	Campaign *wrappers.StringValue `protobuf:"bytes,4,opt,name=campaign,proto3,oneof"`
+}
+
+type FeedItemTarget_AdGroup struct {
+	AdGroup *wrappers.StringValue `protobuf:"bytes,5,opt,name=ad_group,json=adGroup,proto3,oneof"`
+}
+
+type FeedItemTarget_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,7,opt,name=keyword,proto3,oneof"`
+}
+
+type FeedItemTarget_GeoTargetConstant struct {
+	GeoTargetConstant *wrappers.StringValue `protobuf:"bytes,8,opt,name=geo_target_constant,json=geoTargetConstant,proto3,oneof"`
+}
+
+type FeedItemTarget_Device struct {
+	Device enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice `protobuf:"varint,9,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice,oneof"`
+}
+
+type FeedItemTarget_AdSchedule struct {
+	AdSchedule *common.AdScheduleInfo `protobuf:"bytes,10,opt,name=ad_schedule,json=adSchedule,proto3,oneof"`
+}
+
+func (*FeedItemTarget_Campaign) isFeedItemTarget_Target() {}
+
+func (*FeedItemTarget_AdGroup) isFeedItemTarget_Target() {}
+
+func (*FeedItemTarget_Keyword) isFeedItemTarget_Target() {}
+
+func (*FeedItemTarget_GeoTargetConstant) isFeedItemTarget_Target() {}
+
+func (*FeedItemTarget_Device) isFeedItemTarget_Target() {}
+
+func (*FeedItemTarget_AdSchedule) isFeedItemTarget_Target() {}
+
+func (m *FeedItemTarget) GetTarget() isFeedItemTarget_Target {
+	if m != nil {
+		return m.Target
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetCampaign() *wrappers.StringValue {
+	if x, ok := m.GetTarget().(*FeedItemTarget_Campaign); ok {
+		return x.Campaign
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetAdGroup() *wrappers.StringValue {
+	if x, ok := m.GetTarget().(*FeedItemTarget_AdGroup); ok {
+		return x.AdGroup
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetTarget().(*FeedItemTarget_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetGeoTargetConstant() *wrappers.StringValue {
+	if x, ok := m.GetTarget().(*FeedItemTarget_GeoTargetConstant); ok {
+		return x.GeoTargetConstant
+	}
+	return nil
+}
+
+func (m *FeedItemTarget) GetDevice() enums.FeedItemTargetDeviceEnum_FeedItemTargetDevice {
+	if x, ok := m.GetTarget().(*FeedItemTarget_Device); ok {
+		return x.Device
+	}
+	return enums.FeedItemTargetDeviceEnum_UNSPECIFIED
+}
+
+func (m *FeedItemTarget) GetAdSchedule() *common.AdScheduleInfo {
+	if x, ok := m.GetTarget().(*FeedItemTarget_AdSchedule); ok {
+		return x.AdSchedule
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedItemTarget) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedItemTarget_Campaign)(nil),
+		(*FeedItemTarget_AdGroup)(nil),
+		(*FeedItemTarget_Keyword)(nil),
+		(*FeedItemTarget_GeoTargetConstant)(nil),
+		(*FeedItemTarget_Device)(nil),
+		(*FeedItemTarget_AdSchedule)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*FeedItemTarget)(nil), "google.ads.googleads.v3.resources.FeedItemTarget")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/feed_item_target.proto", fileDescriptor_91101725362cc715)
+}
+
+var fileDescriptor_91101725362cc715 = []byte{
+	// 651 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdd, 0x4e, 0xdb, 0x4a,
+	0x10, 0x26, 0xe1, 0x9c, 0x24, 0x2c, 0xe7, 0xa0, 0x73, 0x16, 0x55, 0x72, 0x29, 0xaa, 0xa0, 0x15,
+	0x2a, 0x52, 0xd5, 0xb5, 0x44, 0xaa, 0xb6, 0x98, 0x2b, 0xd3, 0x9f, 0x10, 0x5a, 0x21, 0x6a, 0x50,
+	0x2e, 0xaa, 0x48, 0xd1, 0xe2, 0x9d, 0xb8, 0x56, 0xe3, 0x5d, 0x6b, 0x77, 0x0d, 0x42, 0x08, 0xa9,
+	0xcf, 0xd2, 0xcb, 0x3e, 0x4a, 0x5f, 0xa1, 0x6f, 0xc0, 0x53, 0x54, 0xf1, 0xae, 0x4d, 0x43, 0x92,
+	0xf2, 0x73, 0x37, 0xde, 0xf9, 0xbe, 0x99, 0x6f, 0xbe, 0xf1, 0x2e, 0x7a, 0x15, 0x09, 0x11, 0x0d,
+	0xc0, 0xa5, 0x4c, 0xb9, 0x26, 0x1c, 0x46, 0xc7, 0x4d, 0x57, 0x82, 0x12, 0x99, 0x0c, 0x41, 0xb9,
+	0x7d, 0x00, 0xd6, 0x8b, 0x35, 0x24, 0x3d, 0x4d, 0x65, 0x04, 0x9a, 0xa4, 0x52, 0x68, 0x81, 0x57,
+	0x0d, 0x9c, 0x50, 0xa6, 0x48, 0xc9, 0x24, 0xc7, 0x4d, 0x52, 0x32, 0x97, 0x9e, 0x4d, 0x2b, 0x1e,
+	0x8a, 0x24, 0x11, 0xdc, 0x0d, 0x65, 0xac, 0x41, 0xc6, 0xd4, 0x54, 0x5c, 0xda, 0x9a, 0x06, 0x07,
+	0x9e, 0x25, 0xe3, 0x3a, 0x7a, 0x0c, 0x8e, 0xe3, 0x10, 0xee, 0x48, 0x56, 0x9a, 0xea, 0x4c, 0x59,
+	0xf2, 0xe6, 0x2d, 0xc9, 0xfa, 0x34, 0x2d, 0xfa, 0xde, 0x2f, 0xa8, 0x69, 0x5c, 0x7a, 0x66, 0x53,
+	0x0f, 0x6d, 0x2a, 0xff, 0x3a, 0xca, 0xfa, 0xee, 0x89, 0xa4, 0x69, 0x0a, 0xb2, 0xe8, 0xba, 0xfc,
+	0x1b, 0x95, 0x72, 0x2e, 0x34, 0xd5, 0xb1, 0xe0, 0x36, 0xfb, 0xe8, 0x67, 0x1d, 0x2d, 0xbc, 0x03,
+	0x60, 0x6d, 0x0d, 0xc9, 0x61, 0xde, 0x16, 0x3f, 0x46, 0xff, 0x16, 0x2d, 0x7a, 0x9c, 0x26, 0xe0,
+	0x54, 0x56, 0x2a, 0xeb, 0x73, 0xc1, 0x3f, 0xc5, 0xe1, 0x1e, 0x4d, 0x00, 0x6f, 0xa2, 0xb9, 0x52,
+	0xaf, 0x53, 0x5d, 0xa9, 0xac, 0xcf, 0x6f, 0x2c, 0xdb, 0x05, 0x91, 0x42, 0x09, 0x39, 0xd0, 0x32,
+	0xe6, 0x51, 0x87, 0x0e, 0x32, 0x08, 0x1a, 0x7d, 0xdb, 0x05, 0x9f, 0xa1, 0x7b, 0x13, 0x47, 0x75,
+	0x66, 0x57, 0x2a, 0xeb, 0x0b, 0x1b, 0x3b, 0x64, 0xda, 0xca, 0x73, 0x9b, 0xc8, 0xa8, 0xda, 0xc3,
+	0xd3, 0x14, 0xde, 0xf2, 0x2c, 0x99, 0x70, 0x1c, 0xe0, 0xfe, 0xd8, 0x19, 0xde, 0x45, 0x8b, 0x63,
+	0xcd, 0x63, 0xe6, 0xd4, 0xf2, 0x09, 0x1e, 0x8c, 0x4d, 0xd0, 0xe6, 0xfa, 0xc5, 0x73, 0x33, 0xc0,
+	0x7f, 0xa3, 0xd5, 0xda, 0x0c, 0x33, 0x54, 0x33, 0xfb, 0x75, 0xe6, 0x73, 0xe5, 0x1f, 0x6e, 0xa5,
+	0xfc, 0x20, 0xa7, 0x4e, 0xd0, 0x6e, 0x12, 0x81, 0xad, 0x8d, 0x3d, 0xd4, 0x08, 0x69, 0x92, 0xd2,
+	0x38, 0xe2, 0xce, 0x5f, 0xd7, 0x1b, 0xbd, 0x33, 0x13, 0x94, 0x78, 0xbc, 0x89, 0x1a, 0x94, 0xf5,
+	0x22, 0x29, 0xb2, 0xd4, 0xf9, 0xfb, 0x46, 0xdc, 0x3a, 0x65, 0xad, 0x21, 0x1c, 0xb7, 0x50, 0xfd,
+	0x0b, 0x9c, 0x9e, 0x08, 0xc9, 0x9c, 0x7a, 0xce, 0x7c, 0x3a, 0x75, 0x3a, 0x73, 0xcf, 0xc8, 0x7b,
+	0x03, 0x6f, 0xf3, 0xbe, 0x18, 0x16, 0xb2, 0x6c, 0xbc, 0x87, 0x16, 0x23, 0x10, 0x85, 0xd7, 0xa1,
+	0xe0, 0x4a, 0x53, 0xae, 0x9d, 0xc6, 0x8d, 0xe4, 0xfc, 0x1f, 0x81, 0x30, 0xae, 0xbc, 0xb6, 0x44,
+	0xdc, 0x47, 0x35, 0x73, 0x25, 0x9d, 0xb9, 0x3b, 0xb8, 0xfe, 0x26, 0xa7, 0x4e, 0x70, 0xdd, 0x24,
+	0x76, 0x66, 0x02, 0x5b, 0x1d, 0x7f, 0x44, 0xf3, 0x94, 0xf5, 0x54, 0xf8, 0x19, 0x58, 0x36, 0x00,
+	0x07, 0xe5, 0x7a, 0xc9, 0x75, 0x26, 0xf8, 0xec, 0xc0, 0x32, 0xac, 0x0f, 0x88, 0x96, 0x27, 0x1e,
+	0x5c, 0xf8, 0x47, 0xe8, 0xc9, 0x25, 0xcd, 0x46, 0x69, 0xac, 0x86, 0x74, 0xf7, 0xca, 0x3d, 0x7c,
+	0x19, 0x66, 0x4a, 0x8b, 0x04, 0xa4, 0x72, 0xcf, 0x8a, 0xf0, 0xdc, 0x1d, 0xfd, 0x0b, 0x95, 0x7b,
+	0x76, 0xf5, 0x77, 0x3e, 0xdf, 0x6e, 0xa0, 0x9a, 0x09, 0xb7, 0xbf, 0x56, 0xd1, 0x5a, 0x28, 0x12,
+	0x72, 0xed, 0x23, 0xba, 0xbd, 0x38, 0xda, 0x7c, 0x7f, 0xb8, 0x8e, 0xfd, 0xca, 0xa7, 0x5d, 0xcb,
+	0x8c, 0xc4, 0x80, 0xf2, 0x88, 0x08, 0x19, 0xb9, 0x11, 0xf0, 0x7c, 0x59, 0xee, 0xa5, 0xfa, 0x3f,
+	0xbc, 0xeb, 0x5b, 0x65, 0xf4, 0xad, 0x3a, 0xdb, 0xf2, 0xfd, 0xef, 0xd5, 0xd5, 0x96, 0x29, 0xe9,
+	0x33, 0x45, 0x4c, 0x38, 0x8c, 0x3a, 0x4d, 0x12, 0x14, 0xc8, 0x1f, 0x05, 0xa6, 0xeb, 0x33, 0xd5,
+	0x2d, 0x31, 0xdd, 0x4e, 0xb3, 0x5b, 0x62, 0x2e, 0xaa, 0x6b, 0x26, 0xe1, 0x79, 0x3e, 0x53, 0x9e,
+	0x57, 0xa2, 0x3c, 0xaf, 0xd3, 0xf4, 0xbc, 0x12, 0x77, 0x54, 0xcb, 0xc5, 0x36, 0x7f, 0x05, 0x00,
+	0x00, 0xff, 0xff, 0xab, 0x3f, 0x4b, 0x20, 0x83, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/feed_mapping.pb.go b/googleapis/ads/googleads/v3/resources/feed_mapping.pb.go
new file mode 100644
index 0000000..4b6ae43
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/feed_mapping.pb.go
@@ -0,0 +1,641 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/feed_mapping.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A feed mapping.
+type FeedMapping struct {
+	// The resource name of the feed mapping.
+	// Feed mapping resource names have the form:
+	//
+	// `customers/{customer_id}/feedMappings/{feed_id}~{feed_mapping_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed of this feed mapping.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// Feed attributes to field mappings. These mappings are a one-to-many
+	// relationship meaning that 1 feed attribute can be used to populate
+	// multiple placeholder fields, but 1 placeholder field can only draw
+	// data from 1 feed attribute. Ad Customizer is an exception, 1 placeholder
+	// field can be mapped to multiple feed attributes. Required.
+	AttributeFieldMappings []*AttributeFieldMapping `protobuf:"bytes,5,rep,name=attribute_field_mappings,json=attributeFieldMappings,proto3" json:"attribute_field_mappings,omitempty"`
+	// Status of the feed mapping.
+	// This field is read-only.
+	Status enums.FeedMappingStatusEnum_FeedMappingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedMappingStatusEnum_FeedMappingStatus" json:"status,omitempty"`
+	// Feed mapping target. Can be either a placeholder or a criterion. For a
+	// given feed, the active FeedMappings must have unique targets. Required.
+	//
+	// Types that are valid to be assigned to Target:
+	//	*FeedMapping_PlaceholderType
+	//	*FeedMapping_CriterionType
+	Target               isFeedMapping_Target `protobuf_oneof:"target"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FeedMapping) Reset()         { *m = FeedMapping{} }
+func (m *FeedMapping) String() string { return proto.CompactTextString(m) }
+func (*FeedMapping) ProtoMessage()    {}
+func (*FeedMapping) Descriptor() ([]byte, []int) {
+	return fileDescriptor_686021db801e5474, []int{0}
+}
+
+func (m *FeedMapping) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMapping.Unmarshal(m, b)
+}
+func (m *FeedMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMapping.Marshal(b, m, deterministic)
+}
+func (m *FeedMapping) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMapping.Merge(m, src)
+}
+func (m *FeedMapping) XXX_Size() int {
+	return xxx_messageInfo_FeedMapping.Size(m)
+}
+func (m *FeedMapping) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMapping.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMapping proto.InternalMessageInfo
+
+func (m *FeedMapping) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedMapping) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetAttributeFieldMappings() []*AttributeFieldMapping {
+	if m != nil {
+		return m.AttributeFieldMappings
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetStatus() enums.FeedMappingStatusEnum_FeedMappingStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedMappingStatusEnum_UNSPECIFIED
+}
+
+type isFeedMapping_Target interface {
+	isFeedMapping_Target()
+}
+
+type FeedMapping_PlaceholderType struct {
+	PlaceholderType enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,3,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType,oneof"`
+}
+
+type FeedMapping_CriterionType struct {
+	CriterionType enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType `protobuf:"varint,4,opt,name=criterion_type,json=criterionType,proto3,enum=google.ads.googleads.v3.enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType,oneof"`
+}
+
+func (*FeedMapping_PlaceholderType) isFeedMapping_Target() {}
+
+func (*FeedMapping_CriterionType) isFeedMapping_Target() {}
+
+func (m *FeedMapping) GetTarget() isFeedMapping_Target {
+	if m != nil {
+		return m.Target
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
+	if x, ok := m.GetTarget().(*FeedMapping_PlaceholderType); ok {
+		return x.PlaceholderType
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedMapping) GetCriterionType() enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType {
+	if x, ok := m.GetTarget().(*FeedMapping_CriterionType); ok {
+		return x.CriterionType
+	}
+	return enums.FeedMappingCriterionTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedMapping) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedMapping_PlaceholderType)(nil),
+		(*FeedMapping_CriterionType)(nil),
+	}
+}
+
+// Maps from feed attribute id to a placeholder or criterion field id.
+type AttributeFieldMapping struct {
+	// Feed attribute from which to map.
+	FeedAttributeId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
+	// The placeholder field ID. If a placeholder field enum is not published in
+	// the current API version, then this field will be populated and the field
+	// oneof will be empty.
+	// This field is read-only.
+	FieldId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"`
+	// Placeholder or criterion field to be populated using data from
+	// the above feed attribute. Required.
+	//
+	// Types that are valid to be assigned to Field:
+	//	*AttributeFieldMapping_SitelinkField
+	//	*AttributeFieldMapping_CallField
+	//	*AttributeFieldMapping_AppField
+	//	*AttributeFieldMapping_LocationField
+	//	*AttributeFieldMapping_AffiliateLocationField
+	//	*AttributeFieldMapping_CalloutField
+	//	*AttributeFieldMapping_StructuredSnippetField
+	//	*AttributeFieldMapping_MessageField
+	//	*AttributeFieldMapping_PriceField
+	//	*AttributeFieldMapping_PromotionField
+	//	*AttributeFieldMapping_AdCustomizerField
+	//	*AttributeFieldMapping_DsaPageFeedField
+	//	*AttributeFieldMapping_LocationExtensionTargetingField
+	//	*AttributeFieldMapping_EducationField
+	//	*AttributeFieldMapping_FlightField
+	//	*AttributeFieldMapping_CustomField
+	//	*AttributeFieldMapping_HotelField
+	//	*AttributeFieldMapping_RealEstateField
+	//	*AttributeFieldMapping_TravelField
+	//	*AttributeFieldMapping_LocalField
+	//	*AttributeFieldMapping_JobField
+	Field                isAttributeFieldMapping_Field `protobuf_oneof:"field"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *AttributeFieldMapping) Reset()         { *m = AttributeFieldMapping{} }
+func (m *AttributeFieldMapping) String() string { return proto.CompactTextString(m) }
+func (*AttributeFieldMapping) ProtoMessage()    {}
+func (*AttributeFieldMapping) Descriptor() ([]byte, []int) {
+	return fileDescriptor_686021db801e5474, []int{1}
+}
+
+func (m *AttributeFieldMapping) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AttributeFieldMapping.Unmarshal(m, b)
+}
+func (m *AttributeFieldMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AttributeFieldMapping.Marshal(b, m, deterministic)
+}
+func (m *AttributeFieldMapping) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AttributeFieldMapping.Merge(m, src)
+}
+func (m *AttributeFieldMapping) XXX_Size() int {
+	return xxx_messageInfo_AttributeFieldMapping.Size(m)
+}
+func (m *AttributeFieldMapping) XXX_DiscardUnknown() {
+	xxx_messageInfo_AttributeFieldMapping.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AttributeFieldMapping proto.InternalMessageInfo
+
+func (m *AttributeFieldMapping) GetFeedAttributeId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeId
+	}
+	return nil
+}
+
+func (m *AttributeFieldMapping) GetFieldId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FieldId
+	}
+	return nil
+}
+
+type isAttributeFieldMapping_Field interface {
+	isAttributeFieldMapping_Field()
+}
+
+type AttributeFieldMapping_SitelinkField struct {
+	SitelinkField enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField `protobuf:"varint,3,opt,name=sitelink_field,json=sitelinkField,proto3,enum=google.ads.googleads.v3.enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CallField struct {
+	CallField enums.CallPlaceholderFieldEnum_CallPlaceholderField `protobuf:"varint,4,opt,name=call_field,json=callField,proto3,enum=google.ads.googleads.v3.enums.CallPlaceholderFieldEnum_CallPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_AppField struct {
+	AppField enums.AppPlaceholderFieldEnum_AppPlaceholderField `protobuf:"varint,5,opt,name=app_field,json=appField,proto3,enum=google.ads.googleads.v3.enums.AppPlaceholderFieldEnum_AppPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_LocationField struct {
+	LocationField enums.LocationPlaceholderFieldEnum_LocationPlaceholderField `protobuf:"varint,6,opt,name=location_field,json=locationField,proto3,enum=google.ads.googleads.v3.enums.LocationPlaceholderFieldEnum_LocationPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_AffiliateLocationField struct {
+	AffiliateLocationField enums.AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField `protobuf:"varint,7,opt,name=affiliate_location_field,json=affiliateLocationField,proto3,enum=google.ads.googleads.v3.enums.AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CalloutField struct {
+	CalloutField enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField `protobuf:"varint,8,opt,name=callout_field,json=calloutField,proto3,enum=google.ads.googleads.v3.enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_StructuredSnippetField struct {
+	StructuredSnippetField enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField `protobuf:"varint,9,opt,name=structured_snippet_field,json=structuredSnippetField,proto3,enum=google.ads.googleads.v3.enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_MessageField struct {
+	MessageField enums.MessagePlaceholderFieldEnum_MessagePlaceholderField `protobuf:"varint,10,opt,name=message_field,json=messageField,proto3,enum=google.ads.googleads.v3.enums.MessagePlaceholderFieldEnum_MessagePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_PriceField struct {
+	PriceField enums.PricePlaceholderFieldEnum_PricePlaceholderField `protobuf:"varint,11,opt,name=price_field,json=priceField,proto3,enum=google.ads.googleads.v3.enums.PricePlaceholderFieldEnum_PricePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_PromotionField struct {
+	PromotionField enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField `protobuf:"varint,12,opt,name=promotion_field,json=promotionField,proto3,enum=google.ads.googleads.v3.enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_AdCustomizerField struct {
+	AdCustomizerField enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField `protobuf:"varint,13,opt,name=ad_customizer_field,json=adCustomizerField,proto3,enum=google.ads.googleads.v3.enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_DsaPageFeedField struct {
+	DsaPageFeedField enums.DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField `protobuf:"varint,14,opt,name=dsa_page_feed_field,json=dsaPageFeedField,proto3,enum=google.ads.googleads.v3.enums.DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField,oneof"`
+}
+
+type AttributeFieldMapping_LocationExtensionTargetingField struct {
+	LocationExtensionTargetingField enums.LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField `protobuf:"varint,15,opt,name=location_extension_targeting_field,json=locationExtensionTargetingField,proto3,enum=google.ads.googleads.v3.enums.LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField,oneof"`
+}
+
+type AttributeFieldMapping_EducationField struct {
+	EducationField enums.EducationPlaceholderFieldEnum_EducationPlaceholderField `protobuf:"varint,16,opt,name=education_field,json=educationField,proto3,enum=google.ads.googleads.v3.enums.EducationPlaceholderFieldEnum_EducationPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_FlightField struct {
+	FlightField enums.FlightPlaceholderFieldEnum_FlightPlaceholderField `protobuf:"varint,17,opt,name=flight_field,json=flightField,proto3,enum=google.ads.googleads.v3.enums.FlightPlaceholderFieldEnum_FlightPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CustomField struct {
+	CustomField enums.CustomPlaceholderFieldEnum_CustomPlaceholderField `protobuf:"varint,18,opt,name=custom_field,json=customField,proto3,enum=google.ads.googleads.v3.enums.CustomPlaceholderFieldEnum_CustomPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_HotelField struct {
+	HotelField enums.HotelPlaceholderFieldEnum_HotelPlaceholderField `protobuf:"varint,19,opt,name=hotel_field,json=hotelField,proto3,enum=google.ads.googleads.v3.enums.HotelPlaceholderFieldEnum_HotelPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_RealEstateField struct {
+	RealEstateField enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField `protobuf:"varint,20,opt,name=real_estate_field,json=realEstateField,proto3,enum=google.ads.googleads.v3.enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_TravelField struct {
+	TravelField enums.TravelPlaceholderFieldEnum_TravelPlaceholderField `protobuf:"varint,21,opt,name=travel_field,json=travelField,proto3,enum=google.ads.googleads.v3.enums.TravelPlaceholderFieldEnum_TravelPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_LocalField struct {
+	LocalField enums.LocalPlaceholderFieldEnum_LocalPlaceholderField `protobuf:"varint,22,opt,name=local_field,json=localField,proto3,enum=google.ads.googleads.v3.enums.LocalPlaceholderFieldEnum_LocalPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_JobField struct {
+	JobField enums.JobPlaceholderFieldEnum_JobPlaceholderField `protobuf:"varint,23,opt,name=job_field,json=jobField,proto3,enum=google.ads.googleads.v3.enums.JobPlaceholderFieldEnum_JobPlaceholderField,oneof"`
+}
+
+func (*AttributeFieldMapping_SitelinkField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CallField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_AppField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_LocationField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_AffiliateLocationField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CalloutField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_StructuredSnippetField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_MessageField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_PriceField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_PromotionField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_AdCustomizerField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_DsaPageFeedField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_LocationExtensionTargetingField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_EducationField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_FlightField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CustomField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_HotelField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_RealEstateField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_TravelField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_LocalField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_JobField) isAttributeFieldMapping_Field() {}
+
+func (m *AttributeFieldMapping) GetField() isAttributeFieldMapping_Field {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *AttributeFieldMapping) GetSitelinkField() enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_SitelinkField); ok {
+		return x.SitelinkField
+	}
+	return enums.SitelinkPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCallField() enums.CallPlaceholderFieldEnum_CallPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CallField); ok {
+		return x.CallField
+	}
+	return enums.CallPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetAppField() enums.AppPlaceholderFieldEnum_AppPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_AppField); ok {
+		return x.AppField
+	}
+	return enums.AppPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetLocationField() enums.LocationPlaceholderFieldEnum_LocationPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_LocationField); ok {
+		return x.LocationField
+	}
+	return enums.LocationPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetAffiliateLocationField() enums.AffiliateLocationPlaceholderFieldEnum_AffiliateLocationPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_AffiliateLocationField); ok {
+		return x.AffiliateLocationField
+	}
+	return enums.AffiliateLocationPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCalloutField() enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CalloutField); ok {
+		return x.CalloutField
+	}
+	return enums.CalloutPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetStructuredSnippetField() enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_StructuredSnippetField); ok {
+		return x.StructuredSnippetField
+	}
+	return enums.StructuredSnippetPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetMessageField() enums.MessagePlaceholderFieldEnum_MessagePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_MessageField); ok {
+		return x.MessageField
+	}
+	return enums.MessagePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetPriceField() enums.PricePlaceholderFieldEnum_PricePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_PriceField); ok {
+		return x.PriceField
+	}
+	return enums.PricePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetPromotionField() enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_PromotionField); ok {
+		return x.PromotionField
+	}
+	return enums.PromotionPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetAdCustomizerField() enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_AdCustomizerField); ok {
+		return x.AdCustomizerField
+	}
+	return enums.AdCustomizerPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetDsaPageFeedField() enums.DsaPageFeedCriterionFieldEnum_DsaPageFeedCriterionField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_DsaPageFeedField); ok {
+		return x.DsaPageFeedField
+	}
+	return enums.DsaPageFeedCriterionFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetLocationExtensionTargetingField() enums.LocationExtensionTargetingCriterionFieldEnum_LocationExtensionTargetingCriterionField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_LocationExtensionTargetingField); ok {
+		return x.LocationExtensionTargetingField
+	}
+	return enums.LocationExtensionTargetingCriterionFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetEducationField() enums.EducationPlaceholderFieldEnum_EducationPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_EducationField); ok {
+		return x.EducationField
+	}
+	return enums.EducationPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetFlightField() enums.FlightPlaceholderFieldEnum_FlightPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_FlightField); ok {
+		return x.FlightField
+	}
+	return enums.FlightPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCustomField() enums.CustomPlaceholderFieldEnum_CustomPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CustomField); ok {
+		return x.CustomField
+	}
+	return enums.CustomPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetHotelField() enums.HotelPlaceholderFieldEnum_HotelPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_HotelField); ok {
+		return x.HotelField
+	}
+	return enums.HotelPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetRealEstateField() enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_RealEstateField); ok {
+		return x.RealEstateField
+	}
+	return enums.RealEstatePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetTravelField() enums.TravelPlaceholderFieldEnum_TravelPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_TravelField); ok {
+		return x.TravelField
+	}
+	return enums.TravelPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetLocalField() enums.LocalPlaceholderFieldEnum_LocalPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_LocalField); ok {
+		return x.LocalField
+	}
+	return enums.LocalPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetJobField() enums.JobPlaceholderFieldEnum_JobPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_JobField); ok {
+		return x.JobField
+	}
+	return enums.JobPlaceholderFieldEnum_UNSPECIFIED
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AttributeFieldMapping) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AttributeFieldMapping_SitelinkField)(nil),
+		(*AttributeFieldMapping_CallField)(nil),
+		(*AttributeFieldMapping_AppField)(nil),
+		(*AttributeFieldMapping_LocationField)(nil),
+		(*AttributeFieldMapping_AffiliateLocationField)(nil),
+		(*AttributeFieldMapping_CalloutField)(nil),
+		(*AttributeFieldMapping_StructuredSnippetField)(nil),
+		(*AttributeFieldMapping_MessageField)(nil),
+		(*AttributeFieldMapping_PriceField)(nil),
+		(*AttributeFieldMapping_PromotionField)(nil),
+		(*AttributeFieldMapping_AdCustomizerField)(nil),
+		(*AttributeFieldMapping_DsaPageFeedField)(nil),
+		(*AttributeFieldMapping_LocationExtensionTargetingField)(nil),
+		(*AttributeFieldMapping_EducationField)(nil),
+		(*AttributeFieldMapping_FlightField)(nil),
+		(*AttributeFieldMapping_CustomField)(nil),
+		(*AttributeFieldMapping_HotelField)(nil),
+		(*AttributeFieldMapping_RealEstateField)(nil),
+		(*AttributeFieldMapping_TravelField)(nil),
+		(*AttributeFieldMapping_LocalField)(nil),
+		(*AttributeFieldMapping_JobField)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*FeedMapping)(nil), "google.ads.googleads.v3.resources.FeedMapping")
+	proto.RegisterType((*AttributeFieldMapping)(nil), "google.ads.googleads.v3.resources.AttributeFieldMapping")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/feed_mapping.proto", fileDescriptor_686021db801e5474)
+}
+
+var fileDescriptor_686021db801e5474 = []byte{
+	// 1360 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x98, 0xdd, 0x6e, 0xdc, 0x44,
+	0x14, 0xc7, 0xed, 0xb4, 0x49, 0x93, 0xd9, 0x7c, 0x6e, 0x69, 0x58, 0x4a, 0x05, 0x69, 0xa1, 0x52,
+	0xae, 0xbc, 0x55, 0x52, 0x15, 0xd8, 0xf2, 0xa1, 0x4d, 0x48, 0xeb, 0x56, 0x6d, 0xb5, 0x72, 0xa2,
+	0xa8, 0x82, 0x88, 0xd5, 0xec, 0x7a, 0x76, 0xeb, 0xe2, 0xf5, 0x18, 0xcf, 0xb8, 0x50, 0xaa, 0x5c,
+	0x70, 0x03, 0x77, 0xf0, 0x0e, 0xbd, 0xe4, 0x35, 0xb8, 0xe3, 0x9a, 0xa7, 0xe8, 0x3b, 0x20, 0xa1,
+	0x99, 0x63, 0xcf, 0x3a, 0xe9, 0xd8, 0x63, 0xf6, 0x6e, 0x76, 0xce, 0xfc, 0xcf, 0xef, 0xf8, 0xcc,
+	0x99, 0xaf, 0x45, 0xb7, 0xc7, 0x94, 0x8e, 0x43, 0xd2, 0xc6, 0x3e, 0x6b, 0x43, 0x53, 0xb4, 0x5e,
+	0xec, 0xb6, 0x13, 0xc2, 0x68, 0x9a, 0x0c, 0x09, 0x6b, 0x8f, 0x08, 0xf1, 0xfb, 0x13, 0x1c, 0xc7,
+	0x41, 0x34, 0x76, 0xe2, 0x84, 0x72, 0xda, 0xbc, 0x0e, 0x43, 0x1d, 0xec, 0x33, 0x47, 0xa9, 0x9c,
+	0x17, 0xbb, 0x8e, 0x52, 0x5d, 0xdd, 0x2f, 0x73, 0x4c, 0xa2, 0x74, 0xc2, 0xda, 0xd8, 0xef, 0x0f,
+	0x53, 0xc6, 0xe9, 0x24, 0xf8, 0x99, 0x24, 0xfd, 0x38, 0xc4, 0x43, 0xf2, 0x8c, 0x86, 0x3e, 0x49,
+	0xfa, 0xa3, 0x80, 0x84, 0x3e, 0x70, 0xae, 0xba, 0x06, 0x27, 0xa3, 0x51, 0x10, 0x06, 0x98, 0x93,
+	0x7e, 0x48, 0x87, 0x98, 0x07, 0x34, 0x2a, 0xf5, 0xf4, 0x99, 0xc1, 0x53, 0x1c, 0x97, 0x4a, 0x3b,
+	0xd5, 0xd2, 0x21, 0x0e, 0xc3, 0x52, 0xed, 0x17, 0x66, 0x2d, 0x4d, 0x79, 0xa9, 0xfc, 0x73, 0x83,
+	0x5c, 0x66, 0xb0, 0x54, 0xdd, 0xad, 0x56, 0xfb, 0x0c, 0xf7, 0x63, 0x3c, 0x26, 0x7d, 0x39, 0xc1,
+	0xc3, 0x24, 0xe0, 0x24, 0x11, 0x29, 0x2c, 0xba, 0xf8, 0xaa, 0xda, 0x05, 0xf1, 0x53, 0x43, 0xde,
+	0x0d, 0x0e, 0x8a, 0xb5, 0x55, 0x08, 0x81, 0xbf, 0x8c, 0x49, 0xe6, 0xe0, 0x93, 0xff, 0xe1, 0x80,
+	0x71, 0xcc, 0x53, 0x56, 0x2f, 0x77, 0xa3, 0x30, 0x18, 0x3f, 0x2b, 0xcf, 0xfc, 0xdd, 0x6a, 0xf5,
+	0x33, 0xca, 0x49, 0x38, 0x6b, 0xb1, 0x3d, 0xa7, 0x83, 0x59, 0xb9, 0xa2, 0xce, 0xcb, 0xb9, 0x3d,
+	0xb3, 0x58, 0x4e, 0x16, 0xf9, 0x89, 0x93, 0x88, 0xc9, 0x44, 0xe3, 0x64, 0x4c, 0xf8, 0xd9, 0xe4,
+	0x17, 0x3d, 0x7e, 0x59, 0xd3, 0xe3, 0x8c, 0xf5, 0x3f, 0x21, 0x8c, 0x89, 0x0a, 0x2c, 0x93, 0xdf,
+	0xae, 0x96, 0x17, 0x65, 0x85, 0x92, 0x31, 0xe4, 0x30, 0x4e, 0x82, 0x21, 0x99, 0xb5, 0x60, 0xe3,
+	0x84, 0x4e, 0x68, 0xe5, 0x27, 0x1b, 0x56, 0x5d, 0x42, 0x70, 0xd8, 0x27, 0xa2, 0x52, 0xcb, 0x63,
+	0x30, 0x64, 0x9d, 0x05, 0x9c, 0x84, 0x41, 0xf4, 0xfd, 0xac, 0xdb, 0x26, 0xe3, 0x49, 0x3a, 0xe4,
+	0x69, 0x42, 0xfc, 0x3e, 0x8b, 0x82, 0x38, 0x26, 0x33, 0x6f, 0x40, 0x3c, 0xc1, 0x2f, 0x2a, 0xd6,
+	0xc1, 0x7b, 0xb9, 0x3a, 0x0e, 0xd4, 0x79, 0x92, 0x99, 0x3e, 0xc8, 0x4c, 0xf2, 0xd7, 0x20, 0x1d,
+	0xb5, 0x7f, 0x4c, 0x70, 0x1c, 0x93, 0x24, 0x5f, 0xbd, 0xd7, 0x0a, 0x52, 0x1c, 0x45, 0x94, 0xcb,
+	0x3a, 0xcb, 0xac, 0x37, 0xfe, 0x98, 0x47, 0x8d, 0x7b, 0x84, 0xf8, 0x8f, 0x61, 0xe1, 0x37, 0x3f,
+	0x42, 0x2b, 0xb9, 0xff, 0x7e, 0x84, 0x27, 0xa4, 0x65, 0x6f, 0xd9, 0xdb, 0x4b, 0xde, 0x72, 0xde,
+	0xf9, 0x04, 0x4f, 0x48, 0xf3, 0x16, 0xba, 0x28, 0x76, 0x8b, 0xd6, 0xdc, 0x96, 0xbd, 0xdd, 0xd8,
+	0xb9, 0x96, 0x1d, 0x5c, 0x4e, 0x1e, 0x81, 0x73, 0xc8, 0x93, 0x20, 0x1a, 0x1f, 0xe3, 0x30, 0x25,
+	0x9e, 0x1c, 0xd9, 0x4c, 0x50, 0x0b, 0x73, 0x9e, 0x04, 0x83, 0x94, 0x13, 0xf8, 0xb0, 0x7c, 0xab,
+	0x61, 0xad, 0xf9, 0xad, 0x0b, 0xdb, 0x8d, 0x9d, 0x4f, 0x1d, 0xe3, 0x49, 0xe8, 0x74, 0x73, 0x17,
+	0xf7, 0x84, 0x87, 0x2c, 0x64, 0x6f, 0x13, 0xeb, 0xba, 0x59, 0xf3, 0x3b, 0xb4, 0x00, 0xdb, 0x58,
+	0x6b, 0x61, 0xcb, 0xde, 0x5e, 0xdd, 0xb9, 0x57, 0x4a, 0x90, 0x53, 0xe0, 0x14, 0xd2, 0x70, 0x28,
+	0x75, 0x07, 0x51, 0x3a, 0x79, 0xbb, 0xd7, 0xcb, 0xbc, 0x36, 0x29, 0x5a, 0x3f, 0xbf, 0x6c, 0x5a,
+	0x17, 0x24, 0x69, 0xcf, 0x40, 0xea, 0x4d, 0x65, 0x47, 0x2f, 0x63, 0x22, 0x39, 0xe7, 0xfa, 0x5c,
+	0xcb, 0x5b, 0x8b, 0xcf, 0x76, 0x35, 0x4f, 0xd1, 0xea, 0xd9, 0x8d, 0xbd, 0x75, 0x51, 0xe2, 0x8e,
+	0xea, 0x7f, 0xd8, 0x7e, 0xae, 0x57, 0xdc, 0x32, 0xa3, 0x6b, 0x79, 0x2b, 0xc3, 0x62, 0x47, 0xe7,
+	0xdb, 0x37, 0xdd, 0xa7, 0xe8, 0xe3, 0xa9, 0xff, 0xac, 0x15, 0x07, 0xcc, 0x19, 0xd2, 0x49, 0xbb,
+	0x58, 0x45, 0xb7, 0xe0, 0x3c, 0x25, 0x09, 0x6b, 0xbf, 0xca, 0x9b, 0xa7, 0xf2, 0x84, 0xc9, 0x67,
+	0xa7, 0xfd, 0xaa, 0x78, 0xde, 0x9c, 0xee, 0x2d, 0xa2, 0x05, 0xd8, 0x41, 0x6f, 0xfc, 0xb3, 0x89,
+	0xae, 0x68, 0x27, 0xba, 0x79, 0x1f, 0x6d, 0x48, 0xd1, 0xb4, 0x92, 0x02, 0x5f, 0xd6, 0x67, 0x63,
+	0xe7, 0xfd, 0xb7, 0x6a, 0xf0, 0x41, 0xc4, 0xef, 0xdc, 0x86, 0x12, 0x5c, 0x13, 0x2a, 0xe5, 0xf2,
+	0x81, 0xdf, 0xbc, 0x83, 0x16, 0xa1, 0x06, 0x83, 0xbc, 0x86, 0x2b, 0xf5, 0x97, 0xe4, 0xe0, 0x07,
+	0xbe, 0x98, 0x00, 0xb5, 0x63, 0xc8, 0xbe, 0x6c, 0xbe, 0x4d, 0x13, 0x70, 0x98, 0x89, 0x0a, 0x73,
+	0x2c, 0x3f, 0x4c, 0x4e, 0x40, 0x99, 0x51, 0x4c, 0x40, 0x4e, 0x93, 0x1d, 0xcd, 0x09, 0x42, 0xf2,
+	0x8a, 0x04, 0x68, 0x98, 0xfb, 0x47, 0x06, 0xf4, 0x3e, 0x0e, 0x43, 0x2d, 0x56, 0x67, 0x70, 0x2d,
+	0x6f, 0x49, 0x10, 0x00, 0x17, 0xa0, 0x25, 0x71, 0x99, 0x03, 0xda, 0xbc, 0xa4, 0x3d, 0x34, 0xd0,
+	0xba, 0x71, 0xac, 0x85, 0x69, 0xfa, 0x5d, 0xcb, 0x5b, 0xc4, 0x71, 0x0c, 0xa8, 0x53, 0xb4, 0xaa,
+	0x0e, 0x40, 0xe0, 0x2d, 0xd4, 0x4a, 0xec, 0xa3, 0x4c, 0xa4, 0x85, 0x96, 0x19, 0x45, 0x62, 0x73,
+	0x1a, 0xe0, 0x5f, 0xdb, 0xa8, 0xa5, 0xb9, 0x01, 0x43, 0x24, 0x97, 0x64, 0x24, 0x23, 0xd3, 0x97,
+	0xe7, 0xf2, 0xca, 0x90, 0x8c, 0xa3, 0x5c, 0xcb, 0xdb, 0xc4, 0xe7, 0x07, 0x41, 0x90, 0x2f, 0xd1,
+	0x4a, 0x7e, 0xc9, 0x85, 0xc0, 0x16, 0x65, 0x60, 0x5e, 0x8d, 0x02, 0xa0, 0x29, 0x2f, 0xad, 0x01,
+	0x8d, 0xcd, 0xb5, 0xbc, 0xe5, 0x0c, 0x35, 0xcd, 0x8f, 0xe6, 0xa8, 0x83, 0x30, 0x96, 0x6a, 0xe5,
+	0xe7, 0x50, 0xc9, 0x0f, 0x41, 0xad, 0x5f, 0x0b, 0xa6, 0x51, 0x22, 0x3f, 0xec, 0xfc, 0x20, 0x95,
+	0x9f, 0xfc, 0x12, 0x04, 0x81, 0xa1, 0x5a, 0xf9, 0x79, 0x0c, 0x1a, 0x6d, 0x38, 0x25, 0x36, 0x91,
+	0x9f, 0x0c, 0x05, 0xe8, 0x1f, 0x50, 0x03, 0xae, 0x42, 0x00, 0x6e, 0x48, 0xf0, 0x13, 0xd3, 0x21,
+	0x20, 0x14, 0x5a, 0xac, 0xd6, 0xe2, 0x5a, 0x1e, 0x92, 0x10, 0x40, 0xfe, 0x62, 0xa3, 0xb5, 0xe9,
+	0x0d, 0x0a, 0xb8, 0xcb, 0x92, 0x7b, 0x6c, 0xe4, 0x66, 0xaa, 0x12, 0x76, 0x89, 0xd5, 0xb5, 0xbc,
+	0x55, 0x05, 0x84, 0x18, 0x7e, 0xb7, 0xd1, 0xe5, 0xb3, 0xaf, 0x4f, 0x88, 0x63, 0x45, 0xc6, 0x71,
+	0x62, 0x5a, 0x31, 0xfe, 0xbe, 0x12, 0xea, 0x17, 0x4b, 0xc5, 0x00, 0xd7, 0xf2, 0x36, 0x70, 0xc1,
+	0x0e, 0x01, 0xfd, 0x66, 0xa3, 0xcb, 0x67, 0xdf, 0x62, 0x10, 0xd0, 0x6a, 0xad, 0xc4, 0x7c, 0xcd,
+	0x70, 0x4f, 0x4c, 0x29, 0x21, 0xbe, 0x3a, 0x09, 0xa7, 0xd1, 0x94, 0x5a, 0x5d, 0xcb, 0x5b, 0xf7,
+	0xa7, 0x46, 0x88, 0xe4, 0x2f, 0x1b, 0xdd, 0xa8, 0x7c, 0x24, 0x40, 0x60, 0x6b, 0x32, 0x30, 0x5e,
+	0x73, 0x97, 0x3b, 0xc8, 0xfd, 0x1c, 0xe5, 0x6e, 0x34, 0x71, 0xd6, 0x1d, 0xec, 0x5a, 0xde, 0x87,
+	0x61, 0xe9, 0xd8, 0x69, 0x91, 0x4d, 0x1f, 0xa6, 0x10, 0xf2, 0x7a, 0xad, 0x5c, 0x1e, 0xe4, 0x2a,
+	0xed, 0xcc, 0x96, 0x5a, 0x45, 0x91, 0x29, 0x20, 0xc4, 0x90, 0xa2, 0xe5, 0xec, 0x81, 0x09, 0xfc,
+	0x0d, 0xc9, 0xef, 0x99, 0xae, 0x3c, 0x52, 0xa2, 0x85, 0xeb, 0x4d, 0xae, 0xe5, 0x35, 0x80, 0xa3,
+	0xb0, 0xd9, 0x7f, 0x02, 0x80, 0x6d, 0xd6, 0xc2, 0x42, 0x41, 0xea, 0xf7, 0x5a, 0xad, 0x49, 0x60,
+	0x81, 0xa3, 0x76, 0x12, 0x78, 0x10, 0x03, 0xf5, 0x72, 0xad, 0x9d, 0xc4, 0x15, 0x0a, 0x2d, 0x54,
+	0x6b, 0x11, 0x3b, 0x89, 0x84, 0x00, 0xf2, 0x57, 0x1b, 0x6d, 0x14, 0x9f, 0x52, 0x40, 0x7e, 0x47,
+	0x92, 0x9f, 0x1a, 0xc8, 0x1e, 0xc1, 0xe1, 0x81, 0x94, 0x69, 0xf1, 0xe5, 0x66, 0x71, 0xbd, 0x4d,
+	0x94, 0x55, 0xa5, 0x3c, 0x7b, 0x05, 0x41, 0x08, 0x57, 0x6a, 0xa5, 0xfc, 0x48, 0x4a, 0xb4, 0x78,
+	0xbd, 0x49, 0xa4, 0x1c, 0x38, 0x2a, 0xe5, 0xf0, 0x5f, 0x00, 0x50, 0x37, 0x6b, 0xa5, 0x5c, 0xac,
+	0xb2, 0xb0, 0xf4, 0xd6, 0xa1, 0x4d, 0xb9, 0x84, 0xa8, 0x9b, 0xd5, 0x73, 0x3a, 0xc8, 0x80, 0xef,
+	0xd6, 0xba, 0x59, 0x3d, 0xa4, 0x03, 0x2d, 0x4e, 0xd3, 0x2f, 0x6e, 0x56, 0xcf, 0xe9, 0x40, 0xb6,
+	0xf7, 0x2e, 0xa1, 0x79, 0x89, 0xd9, 0xfb, 0xd7, 0x46, 0x37, 0x87, 0x74, 0x62, 0x7e, 0x65, 0xed,
+	0xad, 0x17, 0x6e, 0xf2, 0x3d, 0x71, 0x1d, 0xee, 0xd9, 0xdf, 0x3c, 0xcc, 0x64, 0x63, 0x1a, 0xe2,
+	0x68, 0xec, 0xd0, 0x64, 0xdc, 0x1e, 0x93, 0x48, 0x5e, 0x96, 0xdb, 0xd3, 0x77, 0x40, 0xc5, 0x7f,
+	0x9f, 0x77, 0x55, 0xeb, 0xf5, 0xdc, 0x85, 0xfb, 0xdd, 0xee, 0x9f, 0x73, 0xd7, 0xef, 0x83, 0xcb,
+	0xae, 0xcf, 0x1c, 0x68, 0x8a, 0xd6, 0xf1, 0xae, 0xe3, 0xe5, 0x23, 0xff, 0xce, 0xc7, 0x9c, 0x74,
+	0x7d, 0x76, 0xa2, 0xc6, 0x9c, 0x1c, 0xef, 0x9e, 0xa8, 0x31, 0x6f, 0xe6, 0x6e, 0x82, 0xa1, 0xd3,
+	0xe9, 0xfa, 0xac, 0xd3, 0x51, 0xa3, 0x3a, 0x9d, 0xe3, 0xdd, 0x4e, 0x47, 0x8d, 0x1b, 0x2c, 0xc8,
+	0x60, 0x77, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x7d, 0x27, 0x51, 0xa7, 0x15, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/feed_placeholder_view.pb.go b/googleapis/ads/googleads/v3/resources/feed_placeholder_view.pb.go
new file mode 100644
index 0000000..4a738c7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/feed_placeholder_view.pb.go
@@ -0,0 +1,113 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/feed_placeholder_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A feed placeholder view.
+type FeedPlaceholderView struct {
+	// The resource name of the feed placeholder view.
+	// Feed placeholder view resource names have the form:
+	//
+	// `customers/{customer_id}/feedPlaceholderViews/{placeholder_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The placeholder type of the feed placeholder view.
+	PlaceholderType      enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,2,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *FeedPlaceholderView) Reset()         { *m = FeedPlaceholderView{} }
+func (m *FeedPlaceholderView) String() string { return proto.CompactTextString(m) }
+func (*FeedPlaceholderView) ProtoMessage()    {}
+func (*FeedPlaceholderView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d5dcecda7416af9b, []int{0}
+}
+
+func (m *FeedPlaceholderView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedPlaceholderView.Unmarshal(m, b)
+}
+func (m *FeedPlaceholderView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedPlaceholderView.Marshal(b, m, deterministic)
+}
+func (m *FeedPlaceholderView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedPlaceholderView.Merge(m, src)
+}
+func (m *FeedPlaceholderView) XXX_Size() int {
+	return xxx_messageInfo_FeedPlaceholderView.Size(m)
+}
+func (m *FeedPlaceholderView) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedPlaceholderView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedPlaceholderView proto.InternalMessageInfo
+
+func (m *FeedPlaceholderView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedPlaceholderView) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderType
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*FeedPlaceholderView)(nil), "google.ads.googleads.v3.resources.FeedPlaceholderView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/feed_placeholder_view.proto", fileDescriptor_d5dcecda7416af9b)
+}
+
+var fileDescriptor_d5dcecda7416af9b = []byte{
+	// 379 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4a, 0xeb, 0x40,
+	0x14, 0x25, 0x79, 0xf0, 0xe0, 0x85, 0xf7, 0x9e, 0x52, 0x37, 0xb5, 0xb8, 0x68, 0x95, 0x42, 0x17,
+	0x32, 0x03, 0xc6, 0xd5, 0x88, 0x8b, 0x14, 0xb4, 0xe0, 0x42, 0x4a, 0x91, 0x2c, 0x24, 0x50, 0xc6,
+	0xcc, 0x35, 0x06, 0x32, 0x33, 0x31, 0x93, 0xb4, 0x94, 0xd2, 0xa5, 0xdf, 0x21, 0xb8, 0xf4, 0x53,
+	0xfc, 0x94, 0x7e, 0x85, 0x34, 0xd3, 0x4c, 0x6b, 0x69, 0x75, 0x77, 0xb8, 0xf7, 0x9c, 0x33, 0xf7,
+	0xe4, 0xc4, 0xb9, 0x8c, 0xa4, 0x8c, 0x12, 0xc0, 0x94, 0x29, 0xac, 0xe1, 0x02, 0x8d, 0x5c, 0x9c,
+	0x81, 0x92, 0x45, 0x16, 0x82, 0xc2, 0x8f, 0x00, 0x6c, 0x98, 0x26, 0x34, 0x84, 0x27, 0x99, 0x30,
+	0xc8, 0x86, 0xa3, 0x18, 0xc6, 0x28, 0xcd, 0x64, 0x2e, 0x6b, 0x2d, 0xad, 0x41, 0x94, 0x29, 0x64,
+	0xe4, 0x68, 0xe4, 0x22, 0x23, 0x6f, 0x9c, 0xef, 0x7a, 0x01, 0x44, 0xc1, 0x15, 0x5e, 0x37, 0xce,
+	0x27, 0x29, 0x68, 0xe3, 0xc6, 0x61, 0xa5, 0x4a, 0x63, 0x73, 0xca, 0x72, 0x75, 0xb4, 0xb6, 0xa2,
+	0x42, 0xc8, 0x9c, 0xe6, 0xb1, 0x14, 0x4a, 0x6f, 0x8f, 0x5f, 0x6d, 0xe7, 0xe0, 0x1a, 0x80, 0xf5,
+	0x57, 0xbe, 0x7e, 0x0c, 0xe3, 0xda, 0x89, 0xf3, 0xaf, 0xf2, 0x19, 0x0a, 0xca, 0xa1, 0x6e, 0x35,
+	0xad, 0xce, 0x9f, 0xc1, 0xdf, 0x6a, 0x78, 0x4b, 0x39, 0xd4, 0xb8, 0xb3, 0xbf, 0x79, 0x4f, 0xdd,
+	0x6e, 0x5a, 0x9d, 0xff, 0x67, 0x5d, 0xb4, 0x2b, 0x69, 0x19, 0x03, 0xad, 0x3d, 0x77, 0x37, 0x49,
+	0xe1, 0x4a, 0x14, 0x7c, 0x73, 0x36, 0xd8, 0x4b, 0xbf, 0x0e, 0x48, 0x3e, 0xf7, 0x9e, 0x9d, 0xd3,
+	0x95, 0xdb, 0x12, 0xa5, 0xb1, 0x42, 0xa1, 0xe4, 0x78, 0x5b, 0x0c, 0x2f, 0x2c, 0x54, 0x2e, 0x39,
+	0x64, 0x0a, 0x4f, 0x2b, 0x38, 0x2b, 0x2b, 0xda, 0x60, 0x2a, 0x3c, 0xdd, 0x5a, 0xdc, 0xac, 0xfb,
+	0x62, 0x3b, 0xed, 0x50, 0x72, 0xf4, 0x63, 0x75, 0xdd, 0xfa, 0x96, 0x0b, 0xfa, 0x8b, 0xaf, 0xdc,
+	0xb7, 0xee, 0x6f, 0x96, 0xf2, 0x48, 0x26, 0x54, 0x44, 0x48, 0x66, 0x11, 0x8e, 0x40, 0x94, 0x1d,
+	0xe0, 0x55, 0x8e, 0x6f, 0xfe, 0xab, 0x0b, 0x83, 0xde, 0xec, 0x5f, 0x3d, 0xcf, 0x7b, 0xb7, 0x5b,
+	0x3d, 0x6d, 0xe9, 0x31, 0x85, 0x34, 0x5c, 0x20, 0xdf, 0x45, 0x83, 0x8a, 0xf9, 0x51, 0x71, 0x02,
+	0x8f, 0xa9, 0xc0, 0x70, 0x02, 0xdf, 0x0d, 0x0c, 0x67, 0x6e, 0xb7, 0xf5, 0x82, 0x10, 0x8f, 0x29,
+	0x42, 0x0c, 0x8b, 0x10, 0xdf, 0x25, 0xc4, 0xf0, 0x1e, 0x7e, 0x97, 0xc7, 0xba, 0x9f, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0xaa, 0x95, 0xec, 0x49, 0x03, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/gender_view.pb.go b/googleapis/ads/googleads/v3/resources/gender_view.pb.go
new file mode 100644
index 0000000..13ee48a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/gender_view.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/gender_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A gender view.
+type GenderView struct {
+	// The resource name of the gender view.
+	// Gender view resource names have the form:
+	//
+	// `customers/{customer_id}/genderViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenderView) Reset()         { *m = GenderView{} }
+func (m *GenderView) String() string { return proto.CompactTextString(m) }
+func (*GenderView) ProtoMessage()    {}
+func (*GenderView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_374a728b177a8cfa, []int{0}
+}
+
+func (m *GenderView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderView.Unmarshal(m, b)
+}
+func (m *GenderView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderView.Marshal(b, m, deterministic)
+}
+func (m *GenderView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderView.Merge(m, src)
+}
+func (m *GenderView) XXX_Size() int {
+	return xxx_messageInfo_GenderView.Size(m)
+}
+func (m *GenderView) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderView proto.InternalMessageInfo
+
+func (m *GenderView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GenderView)(nil), "google.ads.googleads.v3.resources.GenderView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/gender_view.proto", fileDescriptor_374a728b177a8cfa)
+}
+
+var fileDescriptor_374a728b177a8cfa = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0x99, 0xfe, 0xf0, 0x83, 0x41, 0x11, 0xba, 0xd2, 0xe2, 0xc2, 0x5a, 0x0a, 0xae, 0x92,
+	0x45, 0x76, 0x71, 0x95, 0x6e, 0x0a, 0x2e, 0xa4, 0x14, 0x1c, 0x44, 0x06, 0x4a, 0x9c, 0x84, 0x30,
+	0xd0, 0xc9, 0x2d, 0xb9, 0xd3, 0x76, 0x51, 0xfa, 0x04, 0xbe, 0x85, 0x4b, 0x1f, 0xc5, 0x47, 0xe9,
+	0x33, 0xb8, 0x90, 0x69, 0x9a, 0xb4, 0x2b, 0xdd, 0x1d, 0x72, 0xbf, 0x73, 0xee, 0x3d, 0x21, 0xdc,
+	0x02, 0xd8, 0xb9, 0x61, 0x4a, 0x23, 0x0b, 0xb2, 0x55, 0x2b, 0xce, 0xbc, 0x41, 0x58, 0xfa, 0xd2,
+	0x20, 0xb3, 0xc6, 0x69, 0xe3, 0x67, 0xab, 0xca, 0xac, 0xe9, 0xc2, 0x43, 0x03, 0xdd, 0x7e, 0x20,
+	0xa9, 0xd2, 0x48, 0x93, 0x89, 0xae, 0x38, 0x4d, 0xa6, 0xde, 0x75, 0xcc, 0x5d, 0x54, 0x29, 0x2a,
+	0xb8, 0x7b, 0x37, 0x27, 0x23, 0xe5, 0x1c, 0x34, 0xaa, 0xa9, 0xc0, 0x61, 0x98, 0xde, 0xbd, 0x67,
+	0x84, 0x8c, 0xf7, 0x1b, 0xf3, 0xca, 0xac, 0xbb, 0x03, 0x72, 0x11, 0xed, 0x33, 0xa7, 0x6a, 0x73,
+	0x95, 0xdd, 0x66, 0xf7, 0x67, 0xd3, 0xf3, 0xf8, 0xf8, 0xa4, 0x6a, 0x23, 0x5e, 0x76, 0xf2, 0x99,
+	0x0c, 0x8e, 0x97, 0x1c, 0xd4, 0xa2, 0x42, 0x5a, 0x42, 0xcd, 0x4e, 0xe2, 0x68, 0xb9, 0xc4, 0x06,
+	0x6a, 0xe3, 0x91, 0x6d, 0xa2, 0xdc, 0x1e, 0x1a, 0xb6, 0x00, 0xb2, 0xcd, 0x49, 0xdd, 0xed, 0xe8,
+	0x3b, 0x23, 0xc3, 0x12, 0x6a, 0xfa, 0x67, 0xe1, 0xd1, 0xe5, 0x71, 0xcb, 0xa4, 0x2d, 0x32, 0xc9,
+	0x5e, 0x1f, 0x0f, 0x2e, 0x0b, 0x73, 0xe5, 0x2c, 0x05, 0x6f, 0xdb, 0x4d, 0xfb, 0x9a, 0xec, 0x78,
+	0xe2, 0x2f, 0x5f, 0xff, 0x90, 0xd4, 0x47, 0xe7, 0xdf, 0x58, 0xca, 0xcf, 0x4e, 0x7f, 0x1c, 0x22,
+	0xa5, 0x46, 0x1a, 0x64, 0xab, 0x72, 0x4e, 0xa7, 0x91, 0xfc, 0x8a, 0x4c, 0x21, 0x35, 0x16, 0x89,
+	0x29, 0x72, 0x5e, 0x24, 0x66, 0xd7, 0x19, 0x86, 0x81, 0x10, 0x52, 0xa3, 0x10, 0x89, 0x12, 0x22,
+	0xe7, 0x42, 0x24, 0xee, 0xed, 0xff, 0xfe, 0x58, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xc5,
+	0x56, 0x57, 0x26, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/geo_target_constant.pb.go b/googleapis/ads/googleads/v3/resources/geo_target_constant.pb.go
new file mode 100644
index 0000000..0c9fc33
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/geo_target_constant.pb.go
@@ -0,0 +1,167 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/geo_target_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A geo target constant.
+type GeoTargetConstant struct {
+	// The resource name of the geo target constant.
+	// Geo target constant resource names have the form:
+	//
+	// `geoTargetConstants/{geo_target_constant_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the geo target constant.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Geo target constant English name.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The ISO-3166-1 alpha-2 country code that is associated with the target.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Geo target constant target type.
+	TargetType *wrappers.StringValue `protobuf:"bytes,6,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"`
+	// Geo target constant status.
+	Status enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus `protobuf:"varint,7,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus" json:"status,omitempty"`
+	// The fully qualified English name, consisting of the target's name and that
+	// of its parent and country.
+	CanonicalName        *wrappers.StringValue `protobuf:"bytes,8,opt,name=canonical_name,json=canonicalName,proto3" json:"canonical_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *GeoTargetConstant) Reset()         { *m = GeoTargetConstant{} }
+func (m *GeoTargetConstant) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstant) ProtoMessage()    {}
+func (*GeoTargetConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28e0880fcfd2987c, []int{0}
+}
+
+func (m *GeoTargetConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstant.Unmarshal(m, b)
+}
+func (m *GeoTargetConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstant.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstant.Merge(m, src)
+}
+func (m *GeoTargetConstant) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstant.Size(m)
+}
+func (m *GeoTargetConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstant proto.InternalMessageInfo
+
+func (m *GeoTargetConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GeoTargetConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetTargetType() *wrappers.StringValue {
+	if m != nil {
+		return m.TargetType
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetStatus() enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.GeoTargetConstantStatusEnum_UNSPECIFIED
+}
+
+func (m *GeoTargetConstant) GetCanonicalName() *wrappers.StringValue {
+	if m != nil {
+		return m.CanonicalName
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GeoTargetConstant)(nil), "google.ads.googleads.v3.resources.GeoTargetConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/geo_target_constant.proto", fileDescriptor_28e0880fcfd2987c)
+}
+
+var fileDescriptor_28e0880fcfd2987c = []byte{
+	// 490 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6b, 0xd4, 0x40,
+	0x10, 0xc7, 0x49, 0x7a, 0x9e, 0xba, 0xd7, 0x16, 0xcc, 0x83, 0xc4, 0x5a, 0xe4, 0xaa, 0x14, 0x0e,
+	0x85, 0x8d, 0x34, 0xe2, 0x43, 0x8a, 0x4a, 0x7a, 0xc8, 0xa1, 0x0f, 0x52, 0xd2, 0x12, 0x50, 0x0e,
+	0xc2, 0x36, 0x59, 0x97, 0xc8, 0x65, 0x27, 0x64, 0x37, 0x95, 0x43, 0x7c, 0xf2, 0x9b, 0xe8, 0x9b,
+	0x1f, 0xc5, 0x8f, 0xd2, 0x4f, 0x21, 0xb7, 0xbb, 0xd9, 0x8a, 0x77, 0xa7, 0xf7, 0x36, 0xd9, 0xf9,
+	0xff, 0x66, 0xfe, 0x3b, 0xb3, 0x41, 0xc7, 0x0c, 0x80, 0xcd, 0x68, 0x40, 0x0a, 0x11, 0xe8, 0x70,
+	0x11, 0x5d, 0x86, 0x41, 0x43, 0x05, 0xb4, 0x4d, 0x4e, 0x45, 0xc0, 0x28, 0x64, 0x92, 0x34, 0x8c,
+	0xca, 0x2c, 0x07, 0x2e, 0x24, 0xe1, 0x12, 0xd7, 0x0d, 0x48, 0xf0, 0x0e, 0x34, 0x81, 0x49, 0x21,
+	0xb0, 0x85, 0xf1, 0x65, 0x88, 0x2d, 0xbc, 0xf7, 0x72, 0x5d, 0x7d, 0xca, 0xdb, 0x6a, 0x65, 0xed,
+	0x4c, 0x48, 0x22, 0x5b, 0xa1, 0x5b, 0xec, 0xdd, 0xeb, 0xf8, 0xba, 0xb4, 0x96, 0x4c, 0xea, 0x81,
+	0x49, 0xa9, 0xaf, 0x8b, 0xf6, 0x63, 0xf0, 0xb9, 0x21, 0x75, 0x4d, 0x9b, 0x0e, 0xdd, 0xff, 0x03,
+	0x25, 0x9c, 0x83, 0x24, 0xb2, 0x04, 0x6e, 0xb2, 0x0f, 0x7f, 0xf4, 0xd0, 0x9d, 0x09, 0x85, 0x73,
+	0xd5, 0x7c, 0x6c, 0x7a, 0x7b, 0x8f, 0xd0, 0x4e, 0xd7, 0x25, 0xe3, 0xa4, 0xa2, 0xbe, 0x33, 0x74,
+	0x46, 0xb7, 0x93, 0xed, 0xee, 0xf0, 0x1d, 0xa9, 0xa8, 0xf7, 0x04, 0xb9, 0x65, 0xe1, 0x6f, 0x0d,
+	0x9d, 0xd1, 0xe0, 0xe8, 0xbe, 0xb9, 0x38, 0xee, 0x5c, 0xe0, 0x37, 0x5c, 0x3e, 0x7f, 0x96, 0x92,
+	0x59, 0x4b, 0x13, 0xb7, 0x2c, 0xbc, 0xa7, 0xa8, 0xa7, 0x0a, 0xf5, 0x94, 0x7c, 0x7f, 0x49, 0x7e,
+	0x26, 0x9b, 0x92, 0x33, 0xad, 0x57, 0x4a, 0xef, 0x15, 0xda, 0xce, 0xa1, 0xe5, 0xb2, 0x99, 0x67,
+	0x39, 0x14, 0xd4, 0xbf, 0xb1, 0x01, 0x39, 0x30, 0xc4, 0x18, 0x0a, 0xea, 0xbd, 0x40, 0x03, 0x33,
+	0x53, 0x39, 0xaf, 0xa9, 0xdf, 0xdf, 0x80, 0x47, 0x1a, 0x38, 0x9f, 0xd7, 0xd4, 0xfb, 0x84, 0xfa,
+	0x7a, 0x05, 0xfe, 0xcd, 0xa1, 0x33, 0xda, 0x3d, 0x4a, 0xf0, 0xba, 0x35, 0xab, 0x1d, 0xe2, 0xa5,
+	0x29, 0x9e, 0x29, 0xfa, 0x35, 0x6f, 0xab, 0x75, 0xb9, 0xc4, 0x74, 0xf0, 0xc6, 0x68, 0x37, 0x27,
+	0x1c, 0x78, 0x99, 0x93, 0x99, 0x1e, 0xf8, 0xad, 0x0d, 0xdc, 0xee, 0x58, 0x66, 0xb1, 0x8f, 0xe8,
+	0xfd, 0x55, 0x9c, 0xa2, 0xc7, 0xd7, 0xce, 0x4c, 0x54, 0x97, 0x02, 0xe7, 0x50, 0x05, 0xcb, 0x5b,
+	0x1e, 0xb1, 0xbf, 0x8f, 0x44, 0xf0, 0x65, 0xc5, 0x53, 0xfc, 0x7a, 0xf2, 0xcd, 0x45, 0x87, 0x39,
+	0x54, 0xf8, 0xbf, 0x0f, 0xfd, 0xe4, 0xee, 0x52, 0x9b, 0xd3, 0x85, 0xf5, 0x53, 0xe7, 0xc3, 0x5b,
+	0x03, 0x33, 0x98, 0x11, 0xce, 0x30, 0x34, 0x2c, 0x60, 0x94, 0xab, 0x8b, 0x05, 0xd7, 0x56, 0xff,
+	0xf1, 0x07, 0x1e, 0xdb, 0xe8, 0xbb, 0xbb, 0x35, 0x89, 0xe3, 0x9f, 0xee, 0xc1, 0x44, 0x97, 0x8c,
+	0x0b, 0x81, 0x75, 0xb8, 0x88, 0xd2, 0x10, 0x27, 0x9d, 0xf2, 0x57, 0xa7, 0x99, 0xc6, 0x85, 0x98,
+	0x5a, 0xcd, 0x34, 0x0d, 0xa7, 0x56, 0x73, 0xe5, 0x1e, 0xea, 0x44, 0x14, 0xc5, 0x85, 0x88, 0x22,
+	0xab, 0x8a, 0xa2, 0x34, 0x8c, 0x22, 0xab, 0xbb, 0xe8, 0x2b, 0xb3, 0xe1, 0xef, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x81, 0x94, 0x66, 0x8c, 0x2d, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/geographic_view.pb.go b/googleapis/ads/googleads/v3/resources/geographic_view.pb.go
new file mode 100644
index 0000000..ac2d24e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/geographic_view.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/geographic_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A geographic view.
+//
+// Geographic View includes all metrics aggregated at the country level,
+// one row per country. It reports metrics at either actual physical location of
+// the user or an area of interest. If other segment fields are used, you may
+// get more than one row per country.
+type GeographicView struct {
+	// The resource name of the geographic view.
+	// Geographic view resource names have the form:
+	//
+	// `customers/{customer_id}/geographicViews/{country_criterion_id}~{location_type}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Type of the geo targeting of the campaign.
+	LocationType enums.GeoTargetingTypeEnum_GeoTargetingType `protobuf:"varint,3,opt,name=location_type,json=locationType,proto3,enum=google.ads.googleads.v3.enums.GeoTargetingTypeEnum_GeoTargetingType" json:"location_type,omitempty"`
+	// Criterion Id for the country.
+	CountryCriterionId   *wrappers.Int64Value `protobuf:"bytes,4,opt,name=country_criterion_id,json=countryCriterionId,proto3" json:"country_criterion_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *GeographicView) Reset()         { *m = GeographicView{} }
+func (m *GeographicView) String() string { return proto.CompactTextString(m) }
+func (*GeographicView) ProtoMessage()    {}
+func (*GeographicView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9e9d21ad3e852168, []int{0}
+}
+
+func (m *GeographicView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeographicView.Unmarshal(m, b)
+}
+func (m *GeographicView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeographicView.Marshal(b, m, deterministic)
+}
+func (m *GeographicView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeographicView.Merge(m, src)
+}
+func (m *GeographicView) XXX_Size() int {
+	return xxx_messageInfo_GeographicView.Size(m)
+}
+func (m *GeographicView) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeographicView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeographicView proto.InternalMessageInfo
+
+func (m *GeographicView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GeographicView) GetLocationType() enums.GeoTargetingTypeEnum_GeoTargetingType {
+	if m != nil {
+		return m.LocationType
+	}
+	return enums.GeoTargetingTypeEnum_UNSPECIFIED
+}
+
+func (m *GeographicView) GetCountryCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CountryCriterionId
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GeographicView)(nil), "google.ads.googleads.v3.resources.GeographicView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/geographic_view.proto", fileDescriptor_9e9d21ad3e852168)
+}
+
+var fileDescriptor_9e9d21ad3e852168 = []byte{
+	// 446 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x5d, 0x6b, 0x14, 0x31,
+	0x14, 0x65, 0xa6, 0x22, 0x38, 0xb6, 0x7d, 0x18, 0x7d, 0x58, 0xab, 0xc8, 0x56, 0x29, 0xee, 0x53,
+	0x02, 0x1d, 0x59, 0x21, 0x3e, 0x4d, 0x55, 0x96, 0x0a, 0x4a, 0x59, 0xca, 0x3c, 0xc8, 0xc2, 0x90,
+	0xce, 0x5c, 0x63, 0x60, 0x27, 0x77, 0x48, 0x32, 0xbb, 0x2c, 0xa5, 0xe0, 0x6f, 0xf1, 0xd1, 0x9f,
+	0xe2, 0xbb, 0x7f, 0xa2, 0xbf, 0x42, 0xe6, 0x23, 0x69, 0xad, 0xd4, 0xbe, 0x9d, 0xe4, 0x9e, 0x73,
+	0xee, 0x3d, 0xc9, 0x8d, 0xde, 0x08, 0x44, 0xb1, 0x04, 0xca, 0x4b, 0x43, 0x7b, 0xd8, 0xa2, 0x55,
+	0x42, 0x35, 0x18, 0x6c, 0x74, 0x01, 0x86, 0x0a, 0x40, 0xa1, 0x79, 0xfd, 0x4d, 0x16, 0xf9, 0x4a,
+	0xc2, 0x9a, 0xd4, 0x1a, 0x2d, 0xc6, 0xfb, 0x3d, 0x9b, 0xf0, 0xd2, 0x10, 0x2f, 0x24, 0xab, 0x84,
+	0x78, 0xe1, 0xde, 0xf4, 0x36, 0x6f, 0x50, 0x4d, 0xd5, 0xf9, 0xe6, 0x96, 0x6b, 0x01, 0x56, 0x2a,
+	0x91, 0xdb, 0x4d, 0x0d, 0xbd, 0xf5, 0xde, 0x13, 0xa7, 0xab, 0xa5, 0x1f, 0x63, 0x28, 0x3d, 0x1f,
+	0x4a, 0xdd, 0xe9, 0xac, 0xf9, 0x4a, 0xd7, 0x9a, 0xd7, 0x35, 0x68, 0x33, 0xd4, 0x9f, 0x5d, 0x93,
+	0x72, 0xa5, 0xd0, 0x72, 0x2b, 0x51, 0x0d, 0xd5, 0x17, 0xbf, 0xc3, 0x68, 0x77, 0xe6, 0xd3, 0x64,
+	0x12, 0xd6, 0xf1, 0xcb, 0x68, 0xc7, 0xb5, 0xc8, 0x15, 0xaf, 0x60, 0x14, 0x8c, 0x83, 0xc9, 0x83,
+	0xf9, 0xb6, 0xbb, 0xfc, 0xcc, 0x2b, 0x88, 0x65, 0xb4, 0xb3, 0xc4, 0xa2, 0xb3, 0xea, 0xe6, 0x1c,
+	0x6d, 0x8d, 0x83, 0xc9, 0xee, 0xe1, 0x7b, 0x72, 0xdb, 0x1b, 0x74, 0x01, 0xc9, 0x0c, 0xf0, 0xd4,
+	0xe5, 0x3b, 0xdd, 0xd4, 0xf0, 0x41, 0x35, 0xd5, 0x3f, 0x97, 0xf3, 0x6d, 0x67, 0xdd, 0x9e, 0xe2,
+	0x4f, 0xd1, 0xe3, 0x02, 0x1b, 0x65, 0xf5, 0x26, 0x2f, 0xb4, 0xb4, 0xa0, 0xdb, 0x9e, 0xb2, 0x1c,
+	0xdd, 0x1b, 0x07, 0x93, 0x87, 0x87, 0x4f, 0x5d, 0x47, 0x97, 0x9f, 0x1c, 0x2b, 0x3b, 0x7d, 0x9d,
+	0xf1, 0x65, 0x03, 0xf3, 0x78, 0x10, 0xbe, 0x73, 0xba, 0xe3, 0x92, 0x95, 0x97, 0x29, 0x8f, 0x5e,
+	0x5d, 0xcd, 0x36, 0xa0, 0x5a, 0x1a, 0x52, 0x60, 0x45, 0x6f, 0x3c, 0xc6, 0xb4, 0x68, 0x8c, 0xc5,
+	0x0a, 0xb4, 0xa1, 0xe7, 0x0e, 0x5e, 0x5c, 0xfb, 0xff, 0x96, 0x64, 0xe8, 0xf9, 0x8d, 0x85, 0xb8,
+	0x38, 0xfa, 0x1e, 0x46, 0x07, 0x05, 0x56, 0xe4, 0xce, 0x95, 0x38, 0x7a, 0xf4, 0x77, 0xc7, 0x93,
+	0x36, 0xc6, 0x49, 0xf0, 0xe5, 0xe3, 0xa0, 0x14, 0xb8, 0xe4, 0x4a, 0x10, 0xd4, 0x82, 0x0a, 0x50,
+	0x5d, 0x48, 0x7a, 0x35, 0xf2, 0x7f, 0x96, 0xf4, 0xad, 0x47, 0x3f, 0xc2, 0xad, 0x59, 0x9a, 0xfe,
+	0x0c, 0xf7, 0x67, 0xbd, 0x65, 0x5a, 0x1a, 0xd2, 0xc3, 0x16, 0x65, 0x09, 0x99, 0x3b, 0xe6, 0x2f,
+	0xc7, 0x59, 0xa4, 0xa5, 0x59, 0x78, 0xce, 0x22, 0x4b, 0x16, 0x9e, 0x73, 0x19, 0x1e, 0xf4, 0x05,
+	0xc6, 0xd2, 0xd2, 0x30, 0xe6, 0x59, 0x8c, 0x65, 0x09, 0x63, 0x9e, 0x77, 0x76, 0xbf, 0x1b, 0x36,
+	0xf9, 0x13, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xd7, 0x44, 0x65, 0x50, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/google_ads_field.pb.go b/googleapis/ads/googleads/v3/resources/google_ads_field.pb.go
new file mode 100644
index 0000000..e1ab756
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/google_ads_field.pb.go
@@ -0,0 +1,262 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/google_ads_field.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A field or resource (artifact) used by GoogleAdsService.
+type GoogleAdsField struct {
+	// The resource name of the artifact.
+	// Artifact resource names have the form:
+	//
+	// `googleAdsFields/{name}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The name of the artifact.
+	Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// The category of the artifact.
+	Category enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory `protobuf:"varint,3,opt,name=category,proto3,enum=google.ads.googleads.v3.enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory" json:"category,omitempty"`
+	// Whether the artifact can be used in a SELECT clause in search
+	// queries.
+	Selectable *wrappers.BoolValue `protobuf:"bytes,4,opt,name=selectable,proto3" json:"selectable,omitempty"`
+	// Whether the artifact can be used in a WHERE clause in search
+	// queries.
+	Filterable *wrappers.BoolValue `protobuf:"bytes,5,opt,name=filterable,proto3" json:"filterable,omitempty"`
+	// Whether the artifact can be used in a ORDER BY clause in search
+	// queries.
+	Sortable *wrappers.BoolValue `protobuf:"bytes,6,opt,name=sortable,proto3" json:"sortable,omitempty"`
+	// The names of all resources, segments, and metrics that are selectable with
+	// the described artifact.
+	SelectableWith []*wrappers.StringValue `protobuf:"bytes,7,rep,name=selectable_with,json=selectableWith,proto3" json:"selectable_with,omitempty"`
+	// The names of all resources that are selectable with the described
+	// artifact. Fields from these resources do not segment metrics when included
+	// in search queries.
+	//
+	// This field is only set for artifacts whose category is RESOURCE.
+	AttributeResources []*wrappers.StringValue `protobuf:"bytes,8,rep,name=attribute_resources,json=attributeResources,proto3" json:"attribute_resources,omitempty"`
+	// At and beyond version V1 this field lists the names of all metrics that are
+	// selectable with the described artifact when it is used in the FROM clause.
+	// It is only set for artifacts whose category is RESOURCE.
+	//
+	// Before version V1 this field lists the names of all metrics that are
+	// selectable with the described artifact. It is only set for artifacts whose
+	// category is either RESOURCE or SEGMENT
+	Metrics []*wrappers.StringValue `protobuf:"bytes,9,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	// At and beyond version V1 this field lists the names of all artifacts,
+	// whether a segment or another resource, that segment metrics when included
+	// in search queries and when the described artifact is used in the FROM
+	// clause. It is only set for artifacts whose category is RESOURCE.
+	//
+	// Before version V1 this field lists the names of all artifacts, whether a
+	// segment or another resource, that segment metrics when included in search
+	// queries. It is only set for artifacts of category RESOURCE, SEGMENT or
+	// METRIC.
+	Segments []*wrappers.StringValue `protobuf:"bytes,10,rep,name=segments,proto3" json:"segments,omitempty"`
+	// Values the artifact can assume if it is a field of type ENUM.
+	//
+	// This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
+	EnumValues []*wrappers.StringValue `protobuf:"bytes,11,rep,name=enum_values,json=enumValues,proto3" json:"enum_values,omitempty"`
+	// This field determines the operators that can be used with the artifact
+	// in WHERE clauses.
+	DataType enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType `protobuf:"varint,12,opt,name=data_type,json=dataType,proto3,enum=google.ads.googleads.v3.enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType" json:"data_type,omitempty"`
+	// The URL of proto describing the artifact's data type.
+	TypeUrl *wrappers.StringValue `protobuf:"bytes,13,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
+	// Whether the field artifact is repeated.
+	IsRepeated           *wrappers.BoolValue `protobuf:"bytes,14,opt,name=is_repeated,json=isRepeated,proto3" json:"is_repeated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *GoogleAdsField) Reset()         { *m = GoogleAdsField{} }
+func (m *GoogleAdsField) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsField) ProtoMessage()    {}
+func (*GoogleAdsField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7843d52294d73b63, []int{0}
+}
+
+func (m *GoogleAdsField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsField.Unmarshal(m, b)
+}
+func (m *GoogleAdsField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsField.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsField.Merge(m, src)
+}
+func (m *GoogleAdsField) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsField.Size(m)
+}
+func (m *GoogleAdsField) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsField proto.InternalMessageInfo
+
+func (m *GoogleAdsField) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GoogleAdsField) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetCategory() enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory {
+	if m != nil {
+		return m.Category
+	}
+	return enums.GoogleAdsFieldCategoryEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsField) GetSelectable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Selectable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetFilterable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Filterable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSortable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Sortable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSelectableWith() []*wrappers.StringValue {
+	if m != nil {
+		return m.SelectableWith
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetAttributeResources() []*wrappers.StringValue {
+	if m != nil {
+		return m.AttributeResources
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetMetrics() []*wrappers.StringValue {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSegments() []*wrappers.StringValue {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetEnumValues() []*wrappers.StringValue {
+	if m != nil {
+		return m.EnumValues
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetDataType() enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType {
+	if m != nil {
+		return m.DataType
+	}
+	return enums.GoogleAdsFieldDataTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsField) GetTypeUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.TypeUrl
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetIsRepeated() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsRepeated
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GoogleAdsField)(nil), "google.ads.googleads.v3.resources.GoogleAdsField")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/google_ads_field.proto", fileDescriptor_7843d52294d73b63)
+}
+
+var fileDescriptor_7843d52294d73b63 = []byte{
+	// 618 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xdf, 0x4a, 0xdc, 0x4e,
+	0x14, 0xc7, 0xd9, 0xd5, 0x9f, 0xc6, 0x59, 0xdd, 0x1f, 0x8c, 0x37, 0xa9, 0x48, 0x59, 0x2d, 0x52,
+	0xaf, 0x26, 0xc5, 0x80, 0x95, 0x88, 0x85, 0xd8, 0x5a, 0xa1, 0x60, 0x59, 0xd2, 0x76, 0x0b, 0x65,
+	0x21, 0xcc, 0x26, 0xc7, 0x38, 0x90, 0x64, 0xc2, 0xcc, 0x44, 0x91, 0x52, 0x28, 0xf4, 0x4d, 0x7a,
+	0xd9, 0x47, 0xe9, 0xa3, 0xf8, 0x14, 0x25, 0xff, 0x66, 0x77, 0xb5, 0xdb, 0xdd, 0xf6, 0xee, 0x64,
+	0xce, 0xf7, 0x33, 0xe7, 0x3b, 0x27, 0x67, 0x06, 0x1d, 0x45, 0x9c, 0x47, 0x31, 0x58, 0x34, 0x94,
+	0x56, 0x15, 0x16, 0xd1, 0xb5, 0x6d, 0x09, 0x90, 0x3c, 0x17, 0x01, 0x34, 0xcb, 0x3e, 0x0d, 0xa5,
+	0x7f, 0xc9, 0x20, 0x0e, 0x49, 0x26, 0xb8, 0xe2, 0x78, 0xa7, 0x5a, 0x27, 0x34, 0x94, 0x44, 0x93,
+	0xe4, 0xda, 0x26, 0x9a, 0xdc, 0x3a, 0x99, 0xb5, 0x39, 0xa4, 0x79, 0xf2, 0x70, 0x63, 0x3f, 0xa0,
+	0x0a, 0x22, 0x2e, 0x6e, 0xab, 0x0a, 0x5b, 0x2f, 0xfe, 0x12, 0x0f, 0xa9, 0xa2, 0xbe, 0xba, 0xcd,
+	0xa0, 0xe6, 0x1f, 0x35, 0x7c, 0xc6, 0xf4, 0x71, 0xea, 0xd4, 0xe3, 0x3a, 0x55, 0x7e, 0x8d, 0xf2,
+	0x4b, 0xeb, 0x46, 0xd0, 0x2c, 0x03, 0x21, 0xeb, 0xfc, 0xf6, 0x04, 0x4a, 0xd3, 0x94, 0x2b, 0xaa,
+	0x18, 0x4f, 0xeb, 0xec, 0xee, 0x37, 0x03, 0x75, 0xcf, 0x4b, 0x81, 0x1b, 0xca, 0xd7, 0x45, 0x6d,
+	0xfc, 0x04, 0x6d, 0x34, 0x25, 0xfc, 0x94, 0x26, 0x60, 0xb6, 0x7a, 0xad, 0xfd, 0x35, 0x6f, 0xbd,
+	0x59, 0x7c, 0x4b, 0x13, 0xc0, 0xcf, 0xd0, 0x72, 0x99, 0x6b, 0xf7, 0x5a, 0xfb, 0x9d, 0x83, 0xed,
+	0xba, 0x6d, 0xa4, 0x31, 0x41, 0xde, 0x29, 0xc1, 0xd2, 0x68, 0x40, 0xe3, 0x1c, 0xbc, 0x52, 0x89,
+	0x63, 0x64, 0x34, 0x4d, 0x31, 0x97, 0x7a, 0xad, 0xfd, 0xee, 0x41, 0x9f, 0xcc, 0xea, 0x7b, 0xd9,
+	0x15, 0x32, 0xed, 0xeb, 0x65, 0x0d, 0x9f, 0xa5, 0x79, 0x32, 0x23, 0xe5, 0xe9, 0x0a, 0xd8, 0x41,
+	0x48, 0x42, 0x0c, 0x81, 0xa2, 0xa3, 0x18, 0xcc, 0xe5, 0xd2, 0xe5, 0xd6, 0x03, 0x97, 0xa7, 0x9c,
+	0xc7, 0x95, 0xc7, 0x09, 0x75, 0xc1, 0x5e, 0xb2, 0x58, 0x81, 0x28, 0xd9, 0xff, 0xe6, 0xb3, 0x63,
+	0x35, 0x3e, 0x44, 0x86, 0xe4, 0xa2, 0xaa, 0xba, 0x32, 0x97, 0xd4, 0x5a, 0x7c, 0x86, 0xfe, 0x1f,
+	0x3b, 0xf0, 0x6f, 0x98, 0xba, 0x32, 0x57, 0x7b, 0x4b, 0x73, 0x5b, 0xdb, 0x1d, 0x43, 0x1f, 0x99,
+	0xba, 0xc2, 0x17, 0x68, 0x93, 0x2a, 0x25, 0xd8, 0x28, 0x57, 0xe0, 0xeb, 0xe9, 0x35, 0x8d, 0x05,
+	0xb6, 0xc2, 0x1a, 0xf4, 0x1a, 0x0e, 0x1f, 0xa2, 0xd5, 0x04, 0x94, 0x60, 0x81, 0x34, 0xd7, 0x16,
+	0xd8, 0xa2, 0x11, 0xe3, 0x23, 0x64, 0x48, 0x88, 0x12, 0x48, 0x95, 0x34, 0xd1, 0x02, 0xa0, 0x56,
+	0xe3, 0x13, 0xd4, 0x29, 0x7e, 0xbe, 0x7f, 0x5d, 0xac, 0x4b, 0xb3, 0xb3, 0x00, 0x8c, 0x0a, 0xa0,
+	0x0c, 0x25, 0x4e, 0xd0, 0x9a, 0xbe, 0x3a, 0xe6, 0xfa, 0x3f, 0x4c, 0xd9, 0x2b, 0xaa, 0xe8, 0xfb,
+	0xdb, 0x0c, 0x7e, 0x33, 0x65, 0x4d, 0xca, 0x33, 0xc2, 0x3a, 0xc2, 0xcf, 0x91, 0x51, 0x54, 0xf2,
+	0x73, 0x11, 0x9b, 0x1b, 0x0b, 0xdc, 0x84, 0xd5, 0x42, 0xfd, 0x41, 0xc4, 0xf8, 0x18, 0x75, 0x98,
+	0xf4, 0x05, 0x64, 0x40, 0x15, 0x84, 0x66, 0x77, 0xfe, 0x8c, 0x31, 0xe9, 0xd5, 0x6a, 0xa7, 0x7f,
+	0xe7, 0x5e, 0xa0, 0xa7, 0xe3, 0xa3, 0xd4, 0x51, 0xc6, 0x24, 0x09, 0x78, 0x62, 0xdd, 0xbb, 0xce,
+	0xbb, 0xd1, 0xd4, 0xb7, 0xb4, 0x3e, 0xdf, 0x7f, 0x6d, 0xbe, 0x9c, 0x7e, 0x6d, 0xa3, 0xbd, 0x80,
+	0x27, 0x64, 0xee, 0x3b, 0x78, 0xba, 0x39, 0xbd, 0x7b, 0xbf, 0x70, 0xda, 0x6f, 0x7d, 0x7a, 0x53,
+	0x93, 0x11, 0x8f, 0x69, 0x1a, 0x11, 0x2e, 0x22, 0x2b, 0x82, 0xb4, 0x3c, 0x87, 0x35, 0xb6, 0xf7,
+	0x87, 0xa7, 0xf9, 0x58, 0x47, 0xdf, 0xdb, 0x4b, 0xe7, 0xae, 0xfb, 0xa3, 0xbd, 0x53, 0x55, 0x22,
+	0x6e, 0x38, 0xf1, 0x8f, 0xc8, 0xc0, 0x26, 0x7a, 0x3c, 0x7f, 0x36, 0x9a, 0xa1, 0x1b, 0xca, 0xa1,
+	0xd6, 0x0c, 0x07, 0xf6, 0x50, 0x6b, 0xee, 0xda, 0x7b, 0x55, 0xc2, 0x71, 0xdc, 0x50, 0x3a, 0x8e,
+	0x56, 0x39, 0xce, 0xc0, 0x76, 0x1c, 0xad, 0x1b, 0xad, 0x94, 0x66, 0xed, 0x5f, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0xfb, 0xd9, 0x33, 0x2c, 0x46, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/group_placement_view.pb.go b/googleapis/ads/googleads/v3/resources/group_placement_view.pb.go
new file mode 100644
index 0000000..dde185f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/group_placement_view.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/group_placement_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A group placement view.
+type GroupPlacementView struct {
+	// The resource name of the group placement view.
+	// Group placement view resource names have the form:
+	//
+	// `customers/{customer_id}/groupPlacementViews/{ad_group_id}~{base64_placement}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The automatic placement string at group level, e. g. web domain, mobile
+	// app ID, or a YouTube channel ID.
+	Placement *wrappers.StringValue `protobuf:"bytes,2,opt,name=placement,proto3" json:"placement,omitempty"`
+	// Domain name for websites and YouTube channel name for YouTube channels.
+	DisplayName *wrappers.StringValue `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// URL of the group placement, e.g. domain, link to the mobile application in
+	// app store, or a YouTube channel URL.
+	TargetUrl *wrappers.StringValue `protobuf:"bytes,4,opt,name=target_url,json=targetUrl,proto3" json:"target_url,omitempty"`
+	// Type of the placement, e.g. Website, YouTube Channel, Mobile Application.
+	PlacementType        enums.PlacementTypeEnum_PlacementType `protobuf:"varint,5,opt,name=placement_type,json=placementType,proto3,enum=google.ads.googleads.v3.enums.PlacementTypeEnum_PlacementType" json:"placement_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *GroupPlacementView) Reset()         { *m = GroupPlacementView{} }
+func (m *GroupPlacementView) String() string { return proto.CompactTextString(m) }
+func (*GroupPlacementView) ProtoMessage()    {}
+func (*GroupPlacementView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8ef2c4cce716c4dd, []int{0}
+}
+
+func (m *GroupPlacementView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GroupPlacementView.Unmarshal(m, b)
+}
+func (m *GroupPlacementView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GroupPlacementView.Marshal(b, m, deterministic)
+}
+func (m *GroupPlacementView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GroupPlacementView.Merge(m, src)
+}
+func (m *GroupPlacementView) XXX_Size() int {
+	return xxx_messageInfo_GroupPlacementView.Size(m)
+}
+func (m *GroupPlacementView) XXX_DiscardUnknown() {
+	xxx_messageInfo_GroupPlacementView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GroupPlacementView proto.InternalMessageInfo
+
+func (m *GroupPlacementView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GroupPlacementView) GetPlacement() *wrappers.StringValue {
+	if m != nil {
+		return m.Placement
+	}
+	return nil
+}
+
+func (m *GroupPlacementView) GetDisplayName() *wrappers.StringValue {
+	if m != nil {
+		return m.DisplayName
+	}
+	return nil
+}
+
+func (m *GroupPlacementView) GetTargetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.TargetUrl
+	}
+	return nil
+}
+
+func (m *GroupPlacementView) GetPlacementType() enums.PlacementTypeEnum_PlacementType {
+	if m != nil {
+		return m.PlacementType
+	}
+	return enums.PlacementTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*GroupPlacementView)(nil), "google.ads.googleads.v3.resources.GroupPlacementView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/group_placement_view.proto", fileDescriptor_8ef2c4cce716c4dd)
+}
+
+var fileDescriptor_8ef2c4cce716c4dd = []byte{
+	// 461 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xdd, 0x6a, 0xdb, 0x30,
+	0x14, 0xc6, 0xce, 0x36, 0xa8, 0xfa, 0x73, 0xe1, 0x9b, 0x65, 0xa5, 0x8c, 0x74, 0xa3, 0x10, 0x18,
+	0x48, 0x10, 0xdf, 0xa9, 0x63, 0xc5, 0x85, 0x11, 0xd8, 0xc5, 0x08, 0xd9, 0xe6, 0x8b, 0x11, 0x08,
+	0xaa, 0x7d, 0x26, 0x0c, 0xb6, 0xa4, 0x49, 0x72, 0x42, 0x28, 0xbd, 0xdb, 0x93, 0xec, 0x72, 0x8f,
+	0x32, 0xd8, 0x8b, 0xf4, 0x29, 0x46, 0x2c, 0x5b, 0x69, 0x58, 0xbb, 0xe6, 0xee, 0x93, 0xce, 0xf7,
+	0x9d, 0xef, 0x9c, 0xa3, 0x23, 0xf4, 0x96, 0x4b, 0xc9, 0x4b, 0x20, 0x2c, 0x37, 0xc4, 0xc1, 0x35,
+	0x5a, 0xc4, 0x44, 0x83, 0x91, 0xb5, 0xce, 0xc0, 0x10, 0xae, 0x65, 0xad, 0xe6, 0xaa, 0x64, 0x19,
+	0x54, 0x20, 0xec, 0x7c, 0x51, 0xc0, 0x12, 0x2b, 0x2d, 0xad, 0x8c, 0x4e, 0x9d, 0x04, 0xb3, 0xdc,
+	0x60, 0xaf, 0xc6, 0x8b, 0x18, 0x7b, 0xf5, 0xf1, 0xe8, 0x21, 0x03, 0x10, 0x75, 0x65, 0xc8, 0x26,
+	0xad, 0x5d, 0x29, 0x70, 0x69, 0x8f, 0x5f, 0x74, 0x1a, 0x55, 0xf8, 0x3a, 0xda, 0xd0, 0xcb, 0x36,
+	0xd4, 0x9c, 0xae, 0xea, 0x6f, 0x64, 0xa9, 0x99, 0x52, 0xa0, 0x4d, 0x1b, 0x3f, 0xb9, 0x23, 0x65,
+	0x42, 0x48, 0xcb, 0x6c, 0x21, 0x45, 0x1b, 0x7d, 0xf5, 0xa7, 0x87, 0xa2, 0xf1, 0xba, 0x9d, 0x49,
+	0x67, 0x9b, 0x16, 0xb0, 0x8c, 0x5e, 0xa3, 0xc3, 0xce, 0x66, 0x2e, 0x58, 0x05, 0xfd, 0x60, 0x10,
+	0x0c, 0xf7, 0xa6, 0x07, 0xdd, 0xe5, 0x47, 0x56, 0x41, 0x44, 0xd1, 0x9e, 0x2f, 0xb6, 0x1f, 0x0e,
+	0x82, 0xe1, 0xfe, 0xe8, 0xa4, 0x6d, 0x1a, 0x77, 0xd5, 0xe0, 0x4f, 0x56, 0x17, 0x82, 0xa7, 0xac,
+	0xac, 0x61, 0xba, 0xa1, 0x47, 0x17, 0xe8, 0x20, 0x2f, 0x8c, 0x2a, 0xd9, 0xca, 0xe5, 0xef, 0xed,
+	0x20, 0xdf, 0x6f, 0x15, 0x8d, 0xf9, 0x39, 0x42, 0x96, 0x69, 0x0e, 0x76, 0x5e, 0xeb, 0xb2, 0xff,
+	0x64, 0x17, 0x77, 0xc7, 0xff, 0xa2, 0xcb, 0x08, 0xd0, 0xd1, 0xf6, 0x98, 0xfb, 0x4f, 0x07, 0xc1,
+	0xf0, 0x68, 0xf4, 0x0e, 0x3f, 0xf4, 0x7c, 0xcd, 0xdb, 0x60, 0x3f, 0xa4, 0xcf, 0x2b, 0x05, 0xef,
+	0x45, 0x5d, 0x6d, 0xdf, 0x4c, 0x0f, 0xd5, 0xdd, 0x23, 0xfd, 0x7e, 0x9b, 0x08, 0xf4, 0x66, 0x93,
+	0xa7, 0x45, 0xaa, 0x30, 0x38, 0x93, 0x15, 0xb9, 0x67, 0xee, 0x17, 0x59, 0x6d, 0xac, 0xac, 0x40,
+	0x1b, 0x72, 0xdd, 0xc1, 0x1b, 0xb7, 0x6f, 0x5b, 0x44, 0x43, 0xae, 0xef, 0x5b, 0xc2, 0x9b, 0xcb,
+	0x1f, 0x21, 0x3a, 0xcb, 0x64, 0x85, 0x1f, 0x5d, 0xc3, 0xcb, 0xe7, 0xff, 0xda, 0x4f, 0xd6, 0x63,
+	0x9b, 0x04, 0x5f, 0x3f, 0xb4, 0x6a, 0x2e, 0x4b, 0x26, 0x38, 0x96, 0x9a, 0x13, 0x0e, 0xa2, 0x19,
+	0x2a, 0xd9, 0xf4, 0xf0, 0x9f, 0x1f, 0x72, 0xee, 0xd1, 0xcf, 0xb0, 0x37, 0x4e, 0x92, 0x5f, 0xe1,
+	0xe9, 0xd8, 0xa5, 0x4c, 0x72, 0x83, 0x1d, 0x5c, 0xa3, 0x34, 0xc6, 0xd3, 0x8e, 0xf9, 0xbb, 0xe3,
+	0xcc, 0x92, 0xdc, 0xcc, 0x3c, 0x67, 0x96, 0xc6, 0x33, 0xcf, 0xb9, 0x0d, 0xcf, 0x5c, 0x80, 0xd2,
+	0x24, 0x37, 0x94, 0x7a, 0x16, 0xa5, 0x69, 0x4c, 0xa9, 0xe7, 0x5d, 0x3d, 0x6b, 0x8a, 0x8d, 0xff,
+	0x06, 0x00, 0x00, 0xff, 0xff, 0x76, 0x23, 0x4c, 0xa9, 0xcd, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/hotel_group_view.pb.go b/googleapis/ads/googleads/v3/resources/hotel_group_view.pb.go
new file mode 100644
index 0000000..48aeffb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/hotel_group_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/hotel_group_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A hotel group view.
+type HotelGroupView struct {
+	// The resource name of the hotel group view.
+	// Hotel Group view resource names have the form:
+	//
+	// `customers/{customer_id}/hotelGroupViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelGroupView) Reset()         { *m = HotelGroupView{} }
+func (m *HotelGroupView) String() string { return proto.CompactTextString(m) }
+func (*HotelGroupView) ProtoMessage()    {}
+func (*HotelGroupView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e471d0eff5bb8f4a, []int{0}
+}
+
+func (m *HotelGroupView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelGroupView.Unmarshal(m, b)
+}
+func (m *HotelGroupView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelGroupView.Marshal(b, m, deterministic)
+}
+func (m *HotelGroupView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelGroupView.Merge(m, src)
+}
+func (m *HotelGroupView) XXX_Size() int {
+	return xxx_messageInfo_HotelGroupView.Size(m)
+}
+func (m *HotelGroupView) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelGroupView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelGroupView proto.InternalMessageInfo
+
+func (m *HotelGroupView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*HotelGroupView)(nil), "google.ads.googleads.v3.resources.HotelGroupView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/hotel_group_view.proto", fileDescriptor_e471d0eff5bb8f4a)
+}
+
+var fileDescriptor_e471d0eff5bb8f4a = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xb1, 0x4e, 0xf3, 0x30,
+	0x14, 0x85, 0x95, 0xfc, 0xd2, 0x2f, 0x11, 0x01, 0x43, 0x59, 0xa0, 0x62, 0xa0, 0xa0, 0x0a, 0x26,
+	0x7b, 0xc8, 0x00, 0x32, 0x93, 0xbb, 0x14, 0x31, 0xa0, 0xaa, 0x43, 0x06, 0x14, 0xa9, 0x72, 0x13,
+	0xcb, 0x44, 0x6a, 0x7c, 0x23, 0xdf, 0x34, 0x1d, 0xaa, 0x4a, 0x3c, 0x08, 0x13, 0x23, 0x8f, 0xc2,
+	0xa3, 0xf4, 0x29, 0x50, 0xea, 0xda, 0x85, 0x0e, 0xb0, 0x1d, 0xe5, 0x7e, 0xe7, 0xdc, 0x7b, 0xe2,
+	0xe8, 0x4e, 0x01, 0xa8, 0x99, 0xa4, 0x22, 0x47, 0x6a, 0x65, 0xab, 0x9a, 0x98, 0x1a, 0x89, 0x30,
+	0x37, 0x99, 0x44, 0xfa, 0x02, 0xb5, 0x9c, 0x4d, 0x94, 0x81, 0x79, 0x35, 0x69, 0x0a, 0xb9, 0x20,
+	0x95, 0x81, 0x1a, 0x3a, 0x3d, 0x8b, 0x13, 0x91, 0x23, 0xf1, 0x4e, 0xd2, 0xc4, 0xc4, 0x3b, 0xbb,
+	0x67, 0x2e, 0xbc, 0x2a, 0x7c, 0x9e, 0x75, 0x77, 0xcf, 0xbf, 0x8d, 0x84, 0xd6, 0x50, 0x8b, 0xba,
+	0x00, 0x8d, 0x76, 0x7a, 0xf9, 0x16, 0x44, 0xc7, 0x0f, 0xed, 0xda, 0x61, 0xbb, 0x35, 0x29, 0xe4,
+	0xa2, 0x73, 0x15, 0x1d, 0xb9, 0x88, 0x89, 0x16, 0xa5, 0x3c, 0x0d, 0x2e, 0x82, 0x9b, 0x83, 0xf1,
+	0xa1, 0xfb, 0xf8, 0x24, 0x4a, 0xc9, 0xe4, 0x9a, 0x4f, 0xa3, 0xeb, 0xdd, 0x35, 0x5b, 0x55, 0x15,
+	0x48, 0x32, 0x28, 0xe9, 0x5e, 0xe4, 0x6d, 0x36, 0xc7, 0x1a, 0x4a, 0x69, 0x90, 0x2e, 0x9d, 0x5c,
+	0xd9, 0xba, 0x1e, 0x42, 0xba, 0xdc, 0xef, 0xbf, 0x1a, 0xbc, 0x86, 0x51, 0x3f, 0x83, 0x92, 0xfc,
+	0xf9, 0x07, 0x06, 0x27, 0x3f, 0x57, 0x8e, 0xda, 0x76, 0xa3, 0xe0, 0xf9, 0x71, 0xeb, 0x54, 0x30,
+	0x13, 0x5a, 0x11, 0x30, 0x8a, 0x2a, 0xa9, 0x37, 0xdd, 0xe9, 0xee, 0xe6, 0x5f, 0x1e, 0xe5, 0xde,
+	0xab, 0xf7, 0xf0, 0xdf, 0x90, 0xf3, 0x8f, 0xb0, 0x37, 0xb4, 0x91, 0x3c, 0x47, 0x62, 0x65, 0xab,
+	0x92, 0x98, 0x8c, 0x1d, 0xf9, 0xe9, 0x98, 0x94, 0xe7, 0x98, 0x7a, 0x26, 0x4d, 0xe2, 0xd4, 0x33,
+	0xeb, 0xb0, 0x6f, 0x07, 0x8c, 0xf1, 0x1c, 0x19, 0xf3, 0x14, 0x63, 0x49, 0xcc, 0x98, 0xe7, 0xa6,
+	0xff, 0x37, 0xc7, 0xc6, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xae, 0xb3, 0x11, 0xa9, 0x40, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/hotel_performance_view.pb.go b/googleapis/ads/googleads/v3/resources/hotel_performance_view.pb.go
new file mode 100644
index 0000000..348e54f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/hotel_performance_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/hotel_performance_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A hotel performance view.
+type HotelPerformanceView struct {
+	// The resource name of the hotel performance view.
+	// Hotel performance view resource names have the form:
+	//
+	// `customers/{customer_id}/hotelPerformanceView`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelPerformanceView) Reset()         { *m = HotelPerformanceView{} }
+func (m *HotelPerformanceView) String() string { return proto.CompactTextString(m) }
+func (*HotelPerformanceView) ProtoMessage()    {}
+func (*HotelPerformanceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_93062407e8bc6ee5, []int{0}
+}
+
+func (m *HotelPerformanceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelPerformanceView.Unmarshal(m, b)
+}
+func (m *HotelPerformanceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelPerformanceView.Marshal(b, m, deterministic)
+}
+func (m *HotelPerformanceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelPerformanceView.Merge(m, src)
+}
+func (m *HotelPerformanceView) XXX_Size() int {
+	return xxx_messageInfo_HotelPerformanceView.Size(m)
+}
+func (m *HotelPerformanceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelPerformanceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelPerformanceView proto.InternalMessageInfo
+
+func (m *HotelPerformanceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*HotelPerformanceView)(nil), "google.ads.googleads.v3.resources.HotelPerformanceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/hotel_performance_view.proto", fileDescriptor_93062407e8bc6ee5)
+}
+
+var fileDescriptor_93062407e8bc6ee5 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0x49, 0x7e, 0xf8, 0xc1, 0xa0, 0x9b, 0xe2, 0xc2, 0x16, 0x17, 0x56, 0x29, 0xe8, 0xc2,
+	0x99, 0x45, 0x76, 0x23, 0x08, 0xe9, 0xa6, 0xe2, 0x42, 0x4a, 0x17, 0x59, 0x94, 0x48, 0x19, 0x93,
+	0xeb, 0x18, 0xe8, 0xcc, 0x0d, 0x33, 0x69, 0xbb, 0x10, 0xb7, 0x3e, 0x84, 0x4b, 0x97, 0x3e, 0x8a,
+	0x8f, 0xd2, 0xa7, 0x90, 0x74, 0x3a, 0x13, 0x91, 0xa2, 0xbb, 0x43, 0xee, 0x77, 0xce, 0xb9, 0x37,
+	0x13, 0x5d, 0x0b, 0x44, 0x31, 0x07, 0xca, 0x0b, 0x43, 0xad, 0x6c, 0xd4, 0x32, 0xa6, 0x1a, 0x0c,
+	0x2e, 0x74, 0x0e, 0x86, 0x3e, 0x61, 0x0d, 0xf3, 0x59, 0x05, 0xfa, 0x11, 0xb5, 0xe4, 0x2a, 0x87,
+	0xd9, 0xb2, 0x84, 0x15, 0xa9, 0x34, 0xd6, 0xd8, 0xe9, 0x5b, 0x13, 0xe1, 0x85, 0x21, 0xde, 0x4f,
+	0x96, 0x31, 0xf1, 0xfe, 0x5e, 0xd7, 0x55, 0x54, 0xa5, 0x4f, 0xb5, 0xee, 0xde, 0xf1, 0xb7, 0x11,
+	0x57, 0x0a, 0x6b, 0x5e, 0x97, 0xa8, 0x8c, 0x9d, 0x9e, 0xbe, 0x05, 0xd1, 0xe1, 0x4d, 0x53, 0x3e,
+	0x6e, 0xbb, 0xd3, 0x12, 0x56, 0x9d, 0xb3, 0xe8, 0xc0, 0x05, 0xcd, 0x14, 0x97, 0x70, 0x14, 0x9c,
+	0x04, 0xe7, 0x7b, 0x93, 0x7d, 0xf7, 0xf1, 0x8e, 0x4b, 0x60, 0xf7, 0xeb, 0x64, 0x1a, 0x5d, 0xb6,
+	0x3b, 0x6d, 0x55, 0x55, 0x1a, 0x92, 0xa3, 0xa4, 0x3b, 0x83, 0x2f, 0xf2, 0x85, 0xa9, 0x51, 0x82,
+	0x36, 0xf4, 0xd9, 0xc9, 0x17, 0xfb, 0x03, 0x7e, 0xa0, 0xc3, 0xd7, 0x30, 0x1a, 0xe4, 0x28, 0xc9,
+	0x9f, 0xf7, 0x0f, 0xbb, 0xbb, 0xaa, 0xc6, 0xcd, 0x85, 0xe3, 0x60, 0x7a, 0xbb, 0xf5, 0x0b, 0x9c,
+	0x73, 0x25, 0x08, 0x6a, 0x41, 0x05, 0xa8, 0xcd, 0xfd, 0xb4, 0xdd, 0xf8, 0x97, 0xe7, 0xb9, 0xf2,
+	0xea, 0x3d, 0xfc, 0x37, 0x4a, 0x92, 0x8f, 0xb0, 0x3f, 0xb2, 0x91, 0x49, 0x61, 0x88, 0x95, 0x8d,
+	0x4a, 0x63, 0x32, 0x71, 0xe4, 0xa7, 0x63, 0xb2, 0xa4, 0x30, 0x99, 0x67, 0xb2, 0x34, 0xce, 0x3c,
+	0xb3, 0x0e, 0x07, 0x76, 0xc0, 0x58, 0x52, 0x18, 0xc6, 0x3c, 0xc5, 0x58, 0x1a, 0x33, 0xe6, 0xb9,
+	0x87, 0xff, 0x9b, 0x65, 0xe3, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xd9, 0x7c, 0xd3, 0x4a,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/invoice.pb.go b/googleapis/ads/googleads/v3/resources/invoice.pb.go
new file mode 100644
index 0000000..1a508f9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/invoice.pb.go
@@ -0,0 +1,456 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/invoice.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An invoice. All invoice information is snapshotted to match the PDF invoice.
+// For invoices older than the launch of InvoiceService, the snapshotted
+// information may not match the PDF invoice.
+type Invoice struct {
+	// The resource name of the invoice. Multiple customers can share a given
+	// invoice, so multiple resource names may point to the same invoice.
+	// Invoice resource names have the form:
+	//
+	// `customers/{customer_id}/invoices/{invoice_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the invoice. It appears on the invoice PDF as "Invoice number".
+	Id *wrappers.StringValue `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The type of invoice.
+	Type enums.InvoiceTypeEnum_InvoiceType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.InvoiceTypeEnum_InvoiceType" json:"type,omitempty"`
+	// The resource name of this invoice’s billing setup.
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	BillingSetup *wrappers.StringValue `protobuf:"bytes,4,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// A 16 digit ID used to identify the payments account associated with the
+	// billing setup, e.g. "1234-5678-9012-3456". It appears on the invoice PDF as
+	// "Billing Account Number".
+	PaymentsAccountId *wrappers.StringValue `protobuf:"bytes,5,opt,name=payments_account_id,json=paymentsAccountId,proto3" json:"payments_account_id,omitempty"`
+	// A 12 digit ID used to identify the payments profile associated with the
+	// billing setup, e.g. "1234-5678-9012". It appears on the invoice PDF as
+	// "Billing ID".
+	PaymentsProfileId *wrappers.StringValue `protobuf:"bytes,6,opt,name=payments_profile_id,json=paymentsProfileId,proto3" json:"payments_profile_id,omitempty"`
+	// The issue date in yyyy-mm-dd format. It appears on the invoice PDF as
+	// either "Issue date" or "Invoice date".
+	IssueDate *wrappers.StringValue `protobuf:"bytes,7,opt,name=issue_date,json=issueDate,proto3" json:"issue_date,omitempty"`
+	// The due date in yyyy-mm-dd format.
+	DueDate *wrappers.StringValue `protobuf:"bytes,8,opt,name=due_date,json=dueDate,proto3" json:"due_date,omitempty"`
+	// The service period date range of this invoice. The end date is inclusive.
+	ServiceDateRange *common.DateRange `protobuf:"bytes,9,opt,name=service_date_range,json=serviceDateRange,proto3" json:"service_date_range,omitempty"`
+	// The currency code. All costs are returned in this currency. A subset of the
+	// currency codes derived from the ISO 4217 standard is supported.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,10,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// The total amount of invoice level adjustments. These adjustments are made
+	// on the invoice, not on a specific account budget.
+	InvoiceLevelAdjustmentsMicros *wrappers.Int64Value `protobuf:"bytes,11,opt,name=invoice_level_adjustments_micros,json=invoiceLevelAdjustmentsMicros,proto3" json:"invoice_level_adjustments_micros,omitempty"`
+	// The pretax subtotal amount, in micros. This equals the sum of the
+	// AccountBudgetSummary subtotal amounts, plus the invoice level adjustments.
+	SubtotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,12,opt,name=subtotal_amount_micros,json=subtotalAmountMicros,proto3" json:"subtotal_amount_micros,omitempty"`
+	// The sum of all taxes on the invoice, in micros. This equals the sum of the
+	// AccountBudgetSummary tax amounts, plus taxes not associated with a specific
+	// account budget.
+	TaxAmountMicros *wrappers.Int64Value `protobuf:"bytes,13,opt,name=tax_amount_micros,json=taxAmountMicros,proto3" json:"tax_amount_micros,omitempty"`
+	// The total amount, in micros. This equals the sum of the invoice subtotal
+	// amount and the invoice tax amount.
+	TotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=total_amount_micros,json=totalAmountMicros,proto3" json:"total_amount_micros,omitempty"`
+	// The resource name of the original invoice corrected, wrote off, or canceled
+	// by this invoice, if applicable. If `corrected_invoice` is set,
+	// `replaced_invoices` will not be set.
+	//
+	// Invoice resource names have the form:
+	//
+	// `customers/{customer_id}/invoices/{invoice_id}`
+	CorrectedInvoice *wrappers.StringValue `protobuf:"bytes,15,opt,name=corrected_invoice,json=correctedInvoice,proto3" json:"corrected_invoice,omitempty"`
+	// The resource name of the original invoice(s) being rebilled or replaced by
+	// this invoice, if applicable. There might be multiple replaced invoices due
+	// to invoice consolidation. The replaced invoices may not belong to the same
+	// payments account. If `replaced_invoices` is set, `corrected_invoice` will
+	// not be set.
+	// Invoice resource names have the form:
+	//
+	// `customers/{customer_id}/invoices/{invoice_id}`
+	ReplacedInvoices []*wrappers.StringValue `protobuf:"bytes,16,rep,name=replaced_invoices,json=replacedInvoices,proto3" json:"replaced_invoices,omitempty"`
+	// The URL to a PDF copy of the invoice. Users need to pass in their OAuth
+	// token to request the PDF with this URL.
+	PdfUrl *wrappers.StringValue `protobuf:"bytes,17,opt,name=pdf_url,json=pdfUrl,proto3" json:"pdf_url,omitempty"`
+	// The list of summarized account budget information associated with this
+	// invoice.
+	AccountBudgetSummaries []*Invoice_AccountBudgetSummary `protobuf:"bytes,18,rep,name=account_budget_summaries,json=accountBudgetSummaries,proto3" json:"account_budget_summaries,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}                        `json:"-"`
+	XXX_unrecognized       []byte                          `json:"-"`
+	XXX_sizecache          int32                           `json:"-"`
+}
+
+func (m *Invoice) Reset()         { *m = Invoice{} }
+func (m *Invoice) String() string { return proto.CompactTextString(m) }
+func (*Invoice) ProtoMessage()    {}
+func (*Invoice) Descriptor() ([]byte, []int) {
+	return fileDescriptor_52f5271ace0f4785, []int{0}
+}
+
+func (m *Invoice) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Invoice.Unmarshal(m, b)
+}
+func (m *Invoice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Invoice.Marshal(b, m, deterministic)
+}
+func (m *Invoice) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Invoice.Merge(m, src)
+}
+func (m *Invoice) XXX_Size() int {
+	return xxx_messageInfo_Invoice.Size(m)
+}
+func (m *Invoice) XXX_DiscardUnknown() {
+	xxx_messageInfo_Invoice.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Invoice proto.InternalMessageInfo
+
+func (m *Invoice) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Invoice) GetId() *wrappers.StringValue {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Invoice) GetType() enums.InvoiceTypeEnum_InvoiceType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.InvoiceTypeEnum_UNSPECIFIED
+}
+
+func (m *Invoice) GetBillingSetup() *wrappers.StringValue {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *Invoice) GetPaymentsAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountId
+	}
+	return nil
+}
+
+func (m *Invoice) GetPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileId
+	}
+	return nil
+}
+
+func (m *Invoice) GetIssueDate() *wrappers.StringValue {
+	if m != nil {
+		return m.IssueDate
+	}
+	return nil
+}
+
+func (m *Invoice) GetDueDate() *wrappers.StringValue {
+	if m != nil {
+		return m.DueDate
+	}
+	return nil
+}
+
+func (m *Invoice) GetServiceDateRange() *common.DateRange {
+	if m != nil {
+		return m.ServiceDateRange
+	}
+	return nil
+}
+
+func (m *Invoice) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *Invoice) GetInvoiceLevelAdjustmentsMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.InvoiceLevelAdjustmentsMicros
+	}
+	return nil
+}
+
+func (m *Invoice) GetSubtotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.SubtotalAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice) GetTaxAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TaxAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice) GetTotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice) GetCorrectedInvoice() *wrappers.StringValue {
+	if m != nil {
+		return m.CorrectedInvoice
+	}
+	return nil
+}
+
+func (m *Invoice) GetReplacedInvoices() []*wrappers.StringValue {
+	if m != nil {
+		return m.ReplacedInvoices
+	}
+	return nil
+}
+
+func (m *Invoice) GetPdfUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PdfUrl
+	}
+	return nil
+}
+
+func (m *Invoice) GetAccountBudgetSummaries() []*Invoice_AccountBudgetSummary {
+	if m != nil {
+		return m.AccountBudgetSummaries
+	}
+	return nil
+}
+
+// Represents a summarized account budget billable cost.
+type Invoice_AccountBudgetSummary struct {
+	// The resource name of the customer associated with this account budget.
+	// This contains the customer ID, which appears on the invoice PDF as
+	// "Account ID".
+	// Customer resource names have the form:
+	//
+	// `customers/{customer_id}`
+	Customer *wrappers.StringValue `protobuf:"bytes,1,opt,name=customer,proto3" json:"customer,omitempty"`
+	// The descriptive name of the account budget’s customer. It appears on the
+	// invoice PDF as "Account".
+	CustomerDescriptiveName *wrappers.StringValue `protobuf:"bytes,2,opt,name=customer_descriptive_name,json=customerDescriptiveName,proto3" json:"customer_descriptive_name,omitempty"`
+	// The resource name of the account budget associated with this summarized
+	// billable cost.
+	// AccountBudget resource names have the form:
+	//
+	// `customers/{customer_id}/accountBudgets/{account_budget_id}`
+	AccountBudget *wrappers.StringValue `protobuf:"bytes,3,opt,name=account_budget,json=accountBudget,proto3" json:"account_budget,omitempty"`
+	// The name of the account budget. It appears on the invoice PDF as "Account
+	// budget".
+	AccountBudgetName *wrappers.StringValue `protobuf:"bytes,4,opt,name=account_budget_name,json=accountBudgetName,proto3" json:"account_budget_name,omitempty"`
+	// The purchase order number of the account budget. It appears on the
+	// invoice PDF as "Purchase order".
+	PurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,5,opt,name=purchase_order_number,json=purchaseOrderNumber,proto3" json:"purchase_order_number,omitempty"`
+	// The pretax subtotal amount attributable to this budget during the service
+	// period, in micros.
+	SubtotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,6,opt,name=subtotal_amount_micros,json=subtotalAmountMicros,proto3" json:"subtotal_amount_micros,omitempty"`
+	// The tax amount attributable to this budget during the service period, in
+	// micros.
+	TaxAmountMicros *wrappers.Int64Value `protobuf:"bytes,7,opt,name=tax_amount_micros,json=taxAmountMicros,proto3" json:"tax_amount_micros,omitempty"`
+	// The total amount attributable to this budget during the service period,
+	// in micros. This equals the sum of the account budget subtotal amount and
+	// the account budget tax amount.
+	TotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,8,opt,name=total_amount_micros,json=totalAmountMicros,proto3" json:"total_amount_micros,omitempty"`
+	// The billable activity date range of the account budget, within the
+	// service date range of this invoice. The end date is inclusive. This can
+	// be different from the account budget's start and end time.
+	BillableActivityDateRange *common.DateRange `protobuf:"bytes,9,opt,name=billable_activity_date_range,json=billableActivityDateRange,proto3" json:"billable_activity_date_range,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{}          `json:"-"`
+	XXX_unrecognized          []byte            `json:"-"`
+	XXX_sizecache             int32             `json:"-"`
+}
+
+func (m *Invoice_AccountBudgetSummary) Reset()         { *m = Invoice_AccountBudgetSummary{} }
+func (m *Invoice_AccountBudgetSummary) String() string { return proto.CompactTextString(m) }
+func (*Invoice_AccountBudgetSummary) ProtoMessage()    {}
+func (*Invoice_AccountBudgetSummary) Descriptor() ([]byte, []int) {
+	return fileDescriptor_52f5271ace0f4785, []int{0, 0}
+}
+
+func (m *Invoice_AccountBudgetSummary) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Invoice_AccountBudgetSummary.Unmarshal(m, b)
+}
+func (m *Invoice_AccountBudgetSummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Invoice_AccountBudgetSummary.Marshal(b, m, deterministic)
+}
+func (m *Invoice_AccountBudgetSummary) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Invoice_AccountBudgetSummary.Merge(m, src)
+}
+func (m *Invoice_AccountBudgetSummary) XXX_Size() int {
+	return xxx_messageInfo_Invoice_AccountBudgetSummary.Size(m)
+}
+func (m *Invoice_AccountBudgetSummary) XXX_DiscardUnknown() {
+	xxx_messageInfo_Invoice_AccountBudgetSummary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Invoice_AccountBudgetSummary proto.InternalMessageInfo
+
+func (m *Invoice_AccountBudgetSummary) GetCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.Customer
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetCustomerDescriptiveName() *wrappers.StringValue {
+	if m != nil {
+		return m.CustomerDescriptiveName
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetAccountBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudget
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetAccountBudgetName() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudgetName
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetSubtotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.SubtotalAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetTaxAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TaxAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetTotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAmountMicros
+	}
+	return nil
+}
+
+func (m *Invoice_AccountBudgetSummary) GetBillableActivityDateRange() *common.DateRange {
+	if m != nil {
+		return m.BillableActivityDateRange
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Invoice)(nil), "google.ads.googleads.v3.resources.Invoice")
+	proto.RegisterType((*Invoice_AccountBudgetSummary)(nil), "google.ads.googleads.v3.resources.Invoice.AccountBudgetSummary")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/invoice.proto", fileDescriptor_52f5271ace0f4785)
+}
+
+var fileDescriptor_52f5271ace0f4785 = []byte{
+	// 916 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x6e, 0xdc, 0x44,
+	0x14, 0xc7, 0xb5, 0x9b, 0x36, 0x1f, 0xd3, 0x24, 0xcd, 0x3a, 0xa5, 0x38, 0x21, 0xa0, 0x2d, 0xa8,
+	0x22, 0x20, 0x64, 0xa3, 0x2e, 0x5f, 0x72, 0x2f, 0x90, 0xd3, 0xa2, 0x68, 0x69, 0x09, 0x61, 0x03,
+	0x01, 0xa1, 0x48, 0xd6, 0xac, 0xe7, 0xc4, 0x4c, 0x65, 0xcf, 0x58, 0x33, 0xe3, 0xa5, 0xab, 0xaa,
+	0x2f, 0xc3, 0x25, 0x8f, 0xc2, 0x73, 0x70, 0x55, 0x9e, 0x80, 0x3b, 0x34, 0xe3, 0x19, 0x6f, 0xb7,
+	0x69, 0xba, 0x06, 0x7a, 0x77, 0xd6, 0x73, 0xfe, 0x3f, 0x9f, 0x39, 0x33, 0xe7, 0xbf, 0x46, 0x61,
+	0xc6, 0x79, 0x96, 0x43, 0x88, 0x89, 0xb4, 0xa1, 0x8e, 0x26, 0x83, 0x50, 0x80, 0xe4, 0x95, 0x48,
+	0x41, 0x86, 0x94, 0x4d, 0x38, 0x4d, 0x21, 0x28, 0x05, 0x57, 0xdc, 0xbb, 0x55, 0x67, 0x05, 0x98,
+	0xc8, 0xa0, 0x11, 0x04, 0x93, 0x41, 0xd0, 0x08, 0x76, 0x3f, 0xbc, 0x8c, 0x99, 0xf2, 0xa2, 0xe0,
+	0x2c, 0x24, 0x58, 0x81, 0xac, 0x71, 0xbb, 0x1f, 0x5f, 0x96, 0x0b, 0xac, 0x2a, 0x9a, 0x77, 0x27,
+	0x6a, 0x5a, 0xda, 0x02, 0x76, 0x77, 0x9c, 0xa2, 0xa4, 0x4d, 0x91, 0x76, 0xe9, 0x1d, 0xbb, 0x64,
+	0x7e, 0x8d, 0xab, 0xf3, 0xf0, 0x57, 0x81, 0xcb, 0x12, 0x84, 0x7b, 0xd9, 0xde, 0x73, 0x52, 0xcc,
+	0x18, 0x57, 0x58, 0x51, 0xce, 0xec, 0xea, 0xbb, 0x7f, 0x6d, 0xa1, 0x95, 0x61, 0xfd, 0x3e, 0xef,
+	0x3d, 0xb4, 0xe1, 0xd8, 0x09, 0xc3, 0x05, 0xf8, 0x9d, 0x7e, 0x67, 0x7f, 0x6d, 0xb4, 0xee, 0x1e,
+	0x1e, 0xe1, 0x02, 0xbc, 0x8f, 0x50, 0x97, 0x12, 0xbf, 0xdb, 0xef, 0xec, 0x5f, 0xbb, 0xb3, 0x67,
+	0x9b, 0x11, 0xb8, 0x77, 0x07, 0x27, 0x4a, 0x50, 0x96, 0x9d, 0xe2, 0xbc, 0x82, 0x51, 0x97, 0x12,
+	0xef, 0x08, 0x5d, 0xd1, 0xbb, 0xf0, 0x97, 0xfa, 0x9d, 0xfd, 0xcd, 0x3b, 0x51, 0x70, 0x59, 0x1f,
+	0xcd, 0xc6, 0x03, 0x5b, 0xc8, 0xf7, 0xd3, 0x12, 0xbe, 0x62, 0x55, 0xf1, 0xfc, 0xef, 0x91, 0xe1,
+	0x78, 0x31, 0xda, 0x18, 0xd3, 0x3c, 0xa7, 0x2c, 0x4b, 0x24, 0xa8, 0xaa, 0xf4, 0xaf, 0xb4, 0x28,
+	0x64, 0xdd, 0x4a, 0x4e, 0xb4, 0xc2, 0x7b, 0x88, 0xb6, 0x4b, 0x3c, 0x2d, 0x80, 0x29, 0x99, 0xe0,
+	0x34, 0xe5, 0x15, 0x53, 0x09, 0x25, 0xfe, 0xd5, 0x16, 0xa0, 0x9e, 0x13, 0xc6, 0xb5, 0x6e, 0x48,
+	0xe6, 0x68, 0xa5, 0xe0, 0xe7, 0x34, 0x07, 0x4d, 0x5b, 0xfe, 0x37, 0xb4, 0xe3, 0x5a, 0x37, 0x24,
+	0xde, 0x5d, 0x84, 0xa8, 0x94, 0x15, 0x24, 0xfa, 0xb6, 0xf8, 0x2b, 0x2d, 0x20, 0x6b, 0x26, 0xff,
+	0x3e, 0x56, 0xe0, 0x7d, 0x8e, 0x56, 0x89, 0x93, 0xae, 0xb6, 0x90, 0xae, 0x10, 0x2b, 0xfc, 0x11,
+	0x79, 0x12, 0xc4, 0x44, 0x5f, 0x39, 0x2d, 0x4e, 0x04, 0x66, 0x19, 0xf8, 0x6b, 0x06, 0xf1, 0xc1,
+	0xa5, 0x47, 0x56, 0xdf, 0xeb, 0x40, 0x13, 0x46, 0x5a, 0x30, 0xda, 0xb2, 0x90, 0xe6, 0x89, 0x3e,
+	0xad, 0xb4, 0x12, 0x02, 0x58, 0x3a, 0x4d, 0x52, 0x4e, 0xc0, 0x47, 0x6d, 0x4e, 0xcb, 0x49, 0xee,
+	0x71, 0x02, 0x1e, 0x41, 0x7d, 0x37, 0x0e, 0x39, 0x4c, 0x20, 0x4f, 0x30, 0x79, 0x54, 0x49, 0x55,
+	0x37, 0xbc, 0xa0, 0xa9, 0xe0, 0xd2, 0xbf, 0x66, 0xa8, 0x6f, 0x5d, 0xa0, 0x0e, 0x99, 0xfa, 0xec,
+	0x93, 0x1a, 0xfa, 0xb6, 0x85, 0x3c, 0xd4, 0x8c, 0x78, 0x86, 0xf8, 0xc6, 0x10, 0xbc, 0xef, 0xd0,
+	0x4d, 0x59, 0x8d, 0x15, 0x57, 0x38, 0x4f, 0x70, 0x61, 0xae, 0x84, 0x65, 0xaf, 0x2f, 0x66, 0xdf,
+	0x70, 0xd2, 0xd8, 0x28, 0x2d, 0xf2, 0x10, 0xf5, 0x14, 0x7e, 0xfc, 0x02, 0x6d, 0x63, 0x31, 0xed,
+	0xba, 0xc2, 0x8f, 0xe7, 0x40, 0x0f, 0xd0, 0xf6, 0xcb, 0x0a, 0xdb, 0x5c, 0x8c, 0xea, 0x5d, 0xac,
+	0x6a, 0x88, 0x7a, 0x29, 0x17, 0x02, 0x52, 0x05, 0x24, 0xb1, 0x3d, 0xf1, 0xaf, 0xb7, 0x38, 0x95,
+	0xad, 0x46, 0xe6, 0xdc, 0x62, 0x88, 0x7a, 0x02, 0xca, 0x1c, 0xa7, 0x33, 0x92, 0xf4, 0xb7, 0xfa,
+	0x4b, 0x8b, 0x51, 0x4e, 0x66, 0x49, 0xd2, 0xfb, 0x14, 0xad, 0x94, 0xe4, 0x3c, 0xa9, 0x44, 0xee,
+	0xf7, 0x5a, 0xd4, 0xb2, 0x5c, 0x92, 0xf3, 0x1f, 0x44, 0xee, 0x4d, 0x91, 0xef, 0x06, 0x78, 0x5c,
+	0x91, 0x0c, 0x54, 0x22, 0xab, 0xa2, 0xc0, 0x82, 0x82, 0xf4, 0x3d, 0x53, 0xc8, 0x97, 0xc1, 0x42,
+	0xe3, 0x76, 0x26, 0x13, 0xd8, 0x99, 0x3e, 0x30, 0xa4, 0x13, 0x03, 0x9a, 0x8e, 0x6e, 0xe2, 0x8b,
+	0x4f, 0x29, 0xc8, 0xdd, 0x3f, 0xaf, 0xa2, 0x1b, 0x2f, 0x13, 0x78, 0x5f, 0xa0, 0xd5, 0xb4, 0x92,
+	0x8a, 0x17, 0x20, 0x8c, 0x7d, 0x2e, 0xda, 0x4b, 0x93, 0xed, 0xfd, 0x84, 0x76, 0x5c, 0x9c, 0x10,
+	0x90, 0xa9, 0xa0, 0xa5, 0xa2, 0x13, 0xeb, 0xc4, 0x6d, 0xfc, 0xf6, 0x4d, 0x27, 0xbf, 0x3f, 0x53,
+	0x1b, 0xcb, 0xbe, 0x87, 0x36, 0xe7, 0xfb, 0x64, 0xec, 0x78, 0x11, 0x6e, 0x63, 0x6e, 0xeb, 0xda,
+	0xe8, 0x5e, 0x68, 0xb6, 0x29, 0xac, 0x8d, 0xff, 0xf6, 0xe6, 0x48, 0xa6, 0xa4, 0x63, 0xf4, 0x46,
+	0x59, 0x89, 0xf4, 0x17, 0x2c, 0x21, 0xe1, 0x82, 0x80, 0x48, 0x58, 0x55, 0x8c, 0x41, 0xb4, 0xb2,
+	0xe1, 0x6d, 0x27, 0xfd, 0x56, 0x2b, 0x8f, 0x8c, 0xf0, 0x15, 0x23, 0xbc, 0xfc, 0x5a, 0x47, 0x78,
+	0xe5, 0xf5, 0x8d, 0xf0, 0xea, 0x7f, 0x1a, 0xe1, 0x47, 0x68, 0x4f, 0xff, 0x9f, 0xe1, 0x71, 0x0e,
+	0x09, 0x4e, 0x15, 0x9d, 0x50, 0x35, 0xfd, 0x5f, 0xbe, 0xbd, 0xe3, 0x70, 0xb1, 0xa5, 0x35, 0x4b,
+	0xd1, 0xd1, 0xb3, 0xf8, 0x01, 0xea, 0xcf, 0xe4, 0x36, 0x2a, 0xa9, 0xd4, 0x98, 0xd0, 0x59, 0xc1,
+	0xfb, 0xee, 0xe6, 0xc9, 0xf0, 0x89, 0x0b, 0x9f, 0xba, 0xcf, 0x18, 0x19, 0x3e, 0xb1, 0xd1, 0xd3,
+	0x83, 0xbf, 0x3b, 0xe8, 0x76, 0xca, 0x8b, 0xc5, 0x53, 0x79, 0xb0, 0x6e, 0xd9, 0xc7, 0xba, 0x29,
+	0xc7, 0x9d, 0x9f, 0xbf, 0xb6, 0x92, 0x8c, 0xe7, 0x98, 0x65, 0x01, 0x17, 0x59, 0x98, 0x01, 0x33,
+	0x2d, 0x0b, 0x67, 0x55, 0xbd, 0xe2, 0x8b, 0xee, 0x6e, 0x13, 0xfd, 0xd6, 0x5d, 0x3a, 0x8c, 0xe3,
+	0xdf, 0xbb, 0xb7, 0x0e, 0x6b, 0x64, 0x4c, 0x64, 0x50, 0x87, 0x3a, 0x3a, 0x1d, 0x04, 0x23, 0x97,
+	0xf9, 0x87, 0xcb, 0x39, 0x8b, 0x89, 0x3c, 0x6b, 0x72, 0xce, 0x4e, 0x07, 0x67, 0x4d, 0xce, 0xb3,
+	0xee, 0xed, 0x7a, 0x21, 0x8a, 0x62, 0x22, 0xa3, 0xa8, 0xc9, 0x8a, 0xa2, 0xd3, 0x41, 0x14, 0x35,
+	0x79, 0xe3, 0x65, 0x53, 0xec, 0xe0, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0x62, 0x31, 0x73,
+	0x7d, 0x0a, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_plan.pb.go b/googleapis/ads/googleads/v3/resources/keyword_plan.pb.go
new file mode 100644
index 0000000..6157874
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_plan.pb.go
@@ -0,0 +1,232 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_plan.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Keyword Planner plan.
+// Max number of saved keyword plans: 10000.
+// It's possible to remove plans if limit is reached.
+type KeywordPlan struct {
+	// The resource name of the Keyword Planner plan.
+	// KeywordPlan resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlans/{kp_plan_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the keyword plan.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the keyword plan.
+	//
+	// This field is required and should not be empty when creating new keyword
+	// plans.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The date period used for forecasting the plan.
+	ForecastPeriod       *KeywordPlanForecastPeriod `protobuf:"bytes,4,opt,name=forecast_period,json=forecastPeriod,proto3" json:"forecast_period,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *KeywordPlan) Reset()         { *m = KeywordPlan{} }
+func (m *KeywordPlan) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlan) ProtoMessage()    {}
+func (*KeywordPlan) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b7a261a590e572b8, []int{0}
+}
+
+func (m *KeywordPlan) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlan.Unmarshal(m, b)
+}
+func (m *KeywordPlan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlan.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlan) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlan.Merge(m, src)
+}
+func (m *KeywordPlan) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlan.Size(m)
+}
+func (m *KeywordPlan) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlan.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlan proto.InternalMessageInfo
+
+func (m *KeywordPlan) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlan) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlan) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlan) GetForecastPeriod() *KeywordPlanForecastPeriod {
+	if m != nil {
+		return m.ForecastPeriod
+	}
+	return nil
+}
+
+// The forecasting period associated with the keyword plan.
+type KeywordPlanForecastPeriod struct {
+	// Required. The date used for forecasting the Plan.
+	//
+	// Types that are valid to be assigned to Interval:
+	//	*KeywordPlanForecastPeriod_DateInterval
+	//	*KeywordPlanForecastPeriod_DateRange
+	Interval             isKeywordPlanForecastPeriod_Interval `protobuf_oneof:"interval"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *KeywordPlanForecastPeriod) Reset()         { *m = KeywordPlanForecastPeriod{} }
+func (m *KeywordPlanForecastPeriod) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanForecastPeriod) ProtoMessage()    {}
+func (*KeywordPlanForecastPeriod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b7a261a590e572b8, []int{1}
+}
+
+func (m *KeywordPlanForecastPeriod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Unmarshal(m, b)
+}
+func (m *KeywordPlanForecastPeriod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanForecastPeriod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanForecastPeriod.Merge(m, src)
+}
+func (m *KeywordPlanForecastPeriod) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Size(m)
+}
+func (m *KeywordPlanForecastPeriod) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanForecastPeriod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanForecastPeriod proto.InternalMessageInfo
+
+type isKeywordPlanForecastPeriod_Interval interface {
+	isKeywordPlanForecastPeriod_Interval()
+}
+
+type KeywordPlanForecastPeriod_DateInterval struct {
+	DateInterval enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval `protobuf:"varint,1,opt,name=date_interval,json=dateInterval,proto3,enum=google.ads.googleads.v3.enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval,oneof"`
+}
+
+type KeywordPlanForecastPeriod_DateRange struct {
+	DateRange *common.DateRange `protobuf:"bytes,2,opt,name=date_range,json=dateRange,proto3,oneof"`
+}
+
+func (*KeywordPlanForecastPeriod_DateInterval) isKeywordPlanForecastPeriod_Interval() {}
+
+func (*KeywordPlanForecastPeriod_DateRange) isKeywordPlanForecastPeriod_Interval() {}
+
+func (m *KeywordPlanForecastPeriod) GetInterval() isKeywordPlanForecastPeriod_Interval {
+	if m != nil {
+		return m.Interval
+	}
+	return nil
+}
+
+func (m *KeywordPlanForecastPeriod) GetDateInterval() enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval {
+	if x, ok := m.GetInterval().(*KeywordPlanForecastPeriod_DateInterval); ok {
+		return x.DateInterval
+	}
+	return enums.KeywordPlanForecastIntervalEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanForecastPeriod) GetDateRange() *common.DateRange {
+	if x, ok := m.GetInterval().(*KeywordPlanForecastPeriod_DateRange); ok {
+		return x.DateRange
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanForecastPeriod) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanForecastPeriod_DateInterval)(nil),
+		(*KeywordPlanForecastPeriod_DateRange)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlan)(nil), "google.ads.googleads.v3.resources.KeywordPlan")
+	proto.RegisterType((*KeywordPlanForecastPeriod)(nil), "google.ads.googleads.v3.resources.KeywordPlanForecastPeriod")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_plan.proto", fileDescriptor_b7a261a590e572b8)
+}
+
+var fileDescriptor_b7a261a590e572b8 = []byte{
+	// 533 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0x6e, 0xd2, 0x22, 0x76, 0xfa, 0xa3, 0xe4, 0x6a, 0x5b, 0x8b, 0xb4, 0xd5, 0x42, 0x55, 0x98,
+	0x29, 0x4d, 0xf1, 0x22, 0x7a, 0x93, 0x45, 0xed, 0x8f, 0x20, 0x4b, 0x84, 0x45, 0xea, 0xc2, 0x32,
+	0xcd, 0xcc, 0x86, 0x60, 0x32, 0x13, 0x66, 0x26, 0x5b, 0xa4, 0xf4, 0xc2, 0x57, 0xf1, 0xd2, 0x47,
+	0xf1, 0xde, 0x97, 0xe8, 0x0b, 0x78, 0x25, 0x48, 0x26, 0x33, 0xd3, 0x2d, 0x9a, 0xf6, 0xee, 0x4c,
+	0xce, 0x77, 0xbe, 0xf3, 0x9d, 0xf3, 0x9d, 0x80, 0x83, 0x8c, 0xf3, 0xac, 0xa0, 0x08, 0x13, 0x89,
+	0xda, 0xb0, 0x89, 0xa6, 0x21, 0x12, 0x54, 0xf2, 0x5a, 0xa4, 0x54, 0xa2, 0x2f, 0xf4, 0xeb, 0x39,
+	0x17, 0x64, 0x5c, 0x15, 0x98, 0xc1, 0x4a, 0x70, 0xc5, 0x83, 0xad, 0x16, 0x0a, 0x31, 0x91, 0xd0,
+	0x55, 0xc1, 0x69, 0x08, 0x5d, 0xd5, 0xfa, 0xf3, 0x2e, 0xe2, 0x94, 0x97, 0x25, 0x67, 0x88, 0x60,
+	0x45, 0x65, 0x4b, 0xb7, 0xde, 0xef, 0xc2, 0x52, 0x56, 0x97, 0x37, 0x05, 0x8c, 0x27, 0x5c, 0xd0,
+	0x14, 0x4b, 0x35, 0xce, 0x99, 0xa2, 0x62, 0x8a, 0x0b, 0xc3, 0xb1, 0x66, 0x39, 0xaa, 0xdc, 0x69,
+	0x37, 0xa9, 0xc7, 0x26, 0xa5, 0x5f, 0x67, 0xf5, 0x04, 0x9d, 0x0b, 0x5c, 0x55, 0x54, 0xd8, 0xf6,
+	0x1b, 0x33, 0xa5, 0x98, 0x31, 0xae, 0xb0, 0xca, 0x39, 0x33, 0xd9, 0xed, 0x5f, 0x3e, 0x58, 0x7a,
+	0xdf, 0x2a, 0x18, 0x14, 0x98, 0x05, 0x4f, 0xc0, 0x8a, 0xe5, 0x1f, 0x33, 0x5c, 0xd2, 0x9e, 0xb7,
+	0xe9, 0xed, 0x2e, 0x26, 0xcb, 0xf6, 0xe3, 0x07, 0x5c, 0xd2, 0xe0, 0x05, 0xf0, 0x73, 0xd2, 0xf3,
+	0x37, 0xbd, 0xdd, 0xa5, 0xfd, 0x47, 0x66, 0x45, 0xd0, 0xf6, 0x87, 0xc7, 0x4c, 0xbd, 0x3c, 0x18,
+	0xe2, 0xa2, 0xa6, 0x89, 0x9f, 0x93, 0x60, 0x0f, 0x2c, 0x68, 0xa2, 0x79, 0x0d, 0xdf, 0xf8, 0x07,
+	0xfe, 0x51, 0x89, 0x9c, 0x65, 0x2d, 0x5e, 0x23, 0x03, 0x0a, 0x1e, 0xb8, 0x3d, 0x54, 0x54, 0xe4,
+	0x9c, 0xf4, 0x16, 0x74, 0xf1, 0x6b, 0x78, 0xa7, 0x33, 0x70, 0x66, 0x98, 0x77, 0x86, 0x64, 0xa0,
+	0x39, 0x92, 0xd5, 0xc9, 0x8d, 0x77, 0xf4, 0xf9, 0x2a, 0xfe, 0x04, 0x9e, 0x5e, 0xd3, 0x98, 0xa8,
+	0xca, 0x25, 0x4c, 0x79, 0x89, 0x66, 0xb7, 0xb2, 0x97, 0xd6, 0x52, 0xf1, 0x92, 0x0a, 0x89, 0x2e,
+	0x6c, 0x78, 0x69, 0x9d, 0x6b, 0x10, 0x12, 0x5d, 0xcc, 0xfa, 0x78, 0xb9, 0xfd, 0xdb, 0x03, 0x6b,
+	0x9d, 0x52, 0x82, 0x6f, 0x1e, 0x58, 0x69, 0x4e, 0xc4, 0xd9, 0xac, 0xd7, 0xbc, 0xba, 0x7f, 0xda,
+	0x39, 0xa0, 0xbe, 0x95, 0xff, 0x0d, 0x77, 0x6c, 0x18, 0xde, 0xb2, 0xba, 0xbc, 0x2d, 0x7f, 0x34,
+	0x97, 0x2c, 0x37, 0x2d, 0xed, 0x3b, 0x38, 0x01, 0x40, 0x4b, 0x10, 0x98, 0x65, 0xd4, 0x98, 0xf9,
+	0xac, 0xb3, 0x7f, 0x7b, 0xd7, 0xf0, 0x0d, 0x56, 0x34, 0x69, 0x0a, 0x8e, 0xe6, 0x92, 0x45, 0x62,
+	0x1f, 0x7d, 0x00, 0xee, 0xdb, 0x49, 0xfa, 0x7f, 0x3c, 0xb0, 0x93, 0xf2, 0xf2, 0x6e, 0xab, 0xfa,
+	0x0f, 0x67, 0xe4, 0x0e, 0x9a, 0x73, 0x18, 0x78, 0xa7, 0x27, 0xa6, 0x2c, 0xe3, 0x05, 0x66, 0x19,
+	0xe4, 0x22, 0x43, 0x19, 0x65, 0xfa, 0x58, 0xd0, 0xb5, 0x41, 0xb7, 0xfc, 0xd0, 0xaf, 0x5c, 0xf4,
+	0xdd, 0x9f, 0x3f, 0x8c, 0xe3, 0x1f, 0xfe, 0xd6, 0x61, 0x4b, 0x19, 0x13, 0x09, 0xdb, 0xb0, 0x89,
+	0x86, 0x21, 0x4c, 0x2c, 0xf2, 0xa7, 0xc5, 0x8c, 0x62, 0x22, 0x47, 0x0e, 0x33, 0x1a, 0x86, 0x23,
+	0x87, 0xb9, 0xf2, 0x77, 0xda, 0x44, 0x14, 0xc5, 0x44, 0x46, 0x91, 0x43, 0x45, 0xd1, 0x30, 0x8c,
+	0x22, 0x87, 0x3b, 0xbb, 0xa7, 0xc5, 0x86, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x77, 0x4d,
+	0x29, 0x7c, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_plan_ad_group.pb.go b/googleapis/ads/googleads/v3/resources/keyword_plan_ad_group.pb.go
new file mode 100644
index 0000000..6c68cde
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_plan_ad_group.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_plan_ad_group.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Keyword Planner ad group.
+// Max number of keyword plan ad groups per plan: 200.
+type KeywordPlanAdGroup struct {
+	// The resource name of the Keyword Planner ad group.
+	// KeywordPlanAdGroup resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The keyword plan campaign to which this ad group belongs.
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The ID of the keyword plan ad group.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the keyword plan ad group.
+	//
+	// This field is required and should not be empty when creating keyword plan
+	// ad group.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// A default ad group max cpc bid in micros in account currency for all
+	// biddable keywords under the keyword plan ad group.
+	// If not set, will inherit from parent campaign.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,5,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *KeywordPlanAdGroup) Reset()         { *m = KeywordPlanAdGroup{} }
+func (m *KeywordPlanAdGroup) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroup) ProtoMessage()    {}
+func (*KeywordPlanAdGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8bbe0859e53aefdd, []int{0}
+}
+
+func (m *KeywordPlanAdGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroup.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroup.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanAdGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroup.Merge(m, src)
+}
+func (m *KeywordPlanAdGroup) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroup.Size(m)
+}
+func (m *KeywordPlanAdGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroup proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanAdGroup) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanAdGroup)(nil), "google.ads.googleads.v3.resources.KeywordPlanAdGroup")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_plan_ad_group.proto", fileDescriptor_8bbe0859e53aefdd)
+}
+
+var fileDescriptor_8bbe0859e53aefdd = []byte{
+	// 444 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xdf, 0x6a, 0x14, 0x31,
+	0x18, 0xc5, 0xd9, 0xd9, 0x2a, 0x18, 0xab, 0x17, 0x23, 0xe2, 0x5a, 0x8b, 0xb4, 0x4a, 0xa1, 0x50,
+	0x48, 0xc4, 0x11, 0x2f, 0x22, 0x82, 0xb3, 0x5e, 0x2c, 0x2a, 0xca, 0xb2, 0xc2, 0x5e, 0xc8, 0xc2,
+	0x90, 0x4d, 0x62, 0x08, 0x3b, 0x93, 0x2f, 0x24, 0x33, 0x2d, 0x52, 0x7a, 0xe7, 0x8b, 0xe8, 0xa5,
+	0x8f, 0xe2, 0xa3, 0xf4, 0x29, 0x64, 0xfe, 0x65, 0x95, 0x2d, 0x6e, 0xef, 0xce, 0xcc, 0x77, 0x7e,
+	0x39, 0xdf, 0x99, 0x09, 0x7a, 0xad, 0x00, 0x54, 0x2e, 0x09, 0x13, 0x9e, 0xb4, 0xb2, 0x56, 0xa7,
+	0x09, 0x71, 0xd2, 0x43, 0xe5, 0xb8, 0xf4, 0x64, 0x25, 0xbf, 0x9d, 0x81, 0x13, 0x99, 0xcd, 0x99,
+	0xc9, 0x98, 0xc8, 0x94, 0x83, 0xca, 0x62, 0xeb, 0xa0, 0x84, 0xf8, 0xb0, 0x65, 0x30, 0x13, 0x1e,
+	0x07, 0x1c, 0x9f, 0x26, 0x38, 0xe0, 0x7b, 0x0f, 0xfb, 0x04, 0xab, 0xc3, 0xa1, 0x2d, 0xbd, 0xf7,
+	0xb8, 0x1b, 0x35, 0x4f, 0xcb, 0xea, 0x2b, 0x39, 0x73, 0xcc, 0x5a, 0xe9, 0x7c, 0x37, 0xdf, 0xff,
+	0x0b, 0x65, 0xc6, 0x40, 0xc9, 0x4a, 0x0d, 0xa6, 0x9b, 0x3e, 0xf9, 0x31, 0x44, 0xf1, 0x87, 0x76,
+	0xb7, 0x69, 0xce, 0x4c, 0x2a, 0x26, 0xf5, 0x62, 0xf1, 0x53, 0x74, 0xa7, 0x8f, 0xc9, 0x0c, 0x2b,
+	0xe4, 0x68, 0x70, 0x30, 0x38, 0xbe, 0x35, 0xdb, 0xed, 0x5f, 0x7e, 0x62, 0x85, 0x8c, 0xa7, 0xe8,
+	0xfe, 0x3f, 0xb5, 0x38, 0x2b, 0x2c, 0xd3, 0xca, 0x8c, 0xa2, 0x83, 0xc1, 0xf1, 0xed, 0xe7, 0xfb,
+	0x5d, 0x19, 0xdc, 0x6f, 0x86, 0x3f, 0x97, 0x4e, 0x1b, 0x35, 0x67, 0x79, 0x25, 0x67, 0xf7, 0x56,
+	0xeb, 0xd4, 0xb7, 0x1d, 0x18, 0x9f, 0xa0, 0x48, 0x8b, 0xd1, 0xb0, 0xc1, 0x1f, 0x6d, 0xe0, 0xef,
+	0x4c, 0xf9, 0xf2, 0x45, 0x4b, 0x47, 0x5a, 0xc4, 0xcf, 0xd0, 0x4e, 0xb3, 0xda, 0xce, 0x35, 0xd2,
+	0x1a, 0x67, 0x9c, 0xa2, 0xbb, 0xdc, 0xf2, 0x6c, 0xa9, 0x45, 0x56, 0x68, 0xee, 0xc0, 0x8f, 0x6e,
+	0x6c, 0x8f, 0xda, 0xe5, 0x96, 0x8f, 0xb5, 0xf8, 0xd8, 0x00, 0xd4, 0x5d, 0xa6, 0x80, 0x4e, 0xd6,
+	0x7f, 0xa9, 0x53, 0x56, 0x7b, 0xcc, 0xa1, 0x20, 0x57, 0x7c, 0xca, 0x37, 0xbc, 0xf2, 0x25, 0x14,
+	0xd2, 0x79, 0x72, 0xde, 0xcb, 0x0b, 0xb2, 0xda, 0x30, 0x7a, 0x72, 0x7e, 0xe5, 0x25, 0xb9, 0x18,
+	0x7f, 0x8f, 0xd0, 0x11, 0x87, 0x02, 0x6f, 0xbd, 0x26, 0xe3, 0x07, 0x9b, 0xf9, 0xd3, 0xba, 0xd2,
+	0x74, 0xf0, 0xe5, 0x7d, 0x47, 0x2b, 0xc8, 0x99, 0x51, 0x18, 0x9c, 0x22, 0x4a, 0x9a, 0xa6, 0x30,
+	0x59, 0x97, 0xf8, 0xcf, 0x15, 0x7e, 0x15, 0xd4, 0xcf, 0x68, 0x38, 0x49, 0xd3, 0x5f, 0xd1, 0xe1,
+	0xa4, 0x3d, 0x32, 0x15, 0x1e, 0xb7, 0xb2, 0x56, 0xf3, 0x04, 0xcf, 0x7a, 0xe7, 0xef, 0xde, 0xb3,
+	0x48, 0x85, 0x5f, 0x04, 0xcf, 0x62, 0x9e, 0x2c, 0x82, 0xe7, 0x32, 0x3a, 0x6a, 0x07, 0x94, 0xa6,
+	0xc2, 0x53, 0x1a, 0x5c, 0x94, 0xce, 0x13, 0x4a, 0x83, 0x6f, 0x79, 0xb3, 0x59, 0x36, 0xf9, 0x13,
+	0x00, 0x00, 0xff, 0xff, 0xc6, 0xc1, 0xce, 0xdf, 0x6e, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_plan_campaign.pb.go b/googleapis/ads/googleads/v3/resources/keyword_plan_campaign.pb.go
new file mode 100644
index 0000000..7cd53f0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_plan_campaign.pb.go
@@ -0,0 +1,236 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_plan_campaign.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Keyword Plan campaign.
+// Max number of keyword plan campaigns per plan allowed: 1.
+type KeywordPlanCampaign struct {
+	// The resource name of the Keyword Plan campaign.
+	// KeywordPlanCampaign resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanCampaigns/{kp_campaign_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The keyword plan this campaign belongs to.
+	KeywordPlan *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	// The ID of the Keyword Plan campaign.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the Keyword Plan campaign.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The languages targeted for the Keyword Plan campaign.
+	// Max allowed: 1.
+	LanguageConstants []*wrappers.StringValue `protobuf:"bytes,5,rep,name=language_constants,json=languageConstants,proto3" json:"language_constants,omitempty"`
+	// Targeting network.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	KeywordPlanNetwork enums.KeywordPlanNetworkEnum_KeywordPlanNetwork `protobuf:"varint,6,opt,name=keyword_plan_network,json=keywordPlanNetwork,proto3,enum=google.ads.googleads.v3.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork" json:"keyword_plan_network,omitempty"`
+	// A default max cpc bid in micros, and in the account currency, for all ad
+	// groups under the campaign.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,7,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The geo targets.
+	// Max number allowed: 20.
+	GeoTargets           []*KeywordPlanGeoTarget `protobuf:"bytes,8,rep,name=geo_targets,json=geoTargets,proto3" json:"geo_targets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordPlanCampaign) Reset()         { *m = KeywordPlanCampaign{} }
+func (m *KeywordPlanCampaign) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaign) ProtoMessage()    {}
+func (*KeywordPlanCampaign) Descriptor() ([]byte, []int) {
+	return fileDescriptor_17930fe29b1b9aff, []int{0}
+}
+
+func (m *KeywordPlanCampaign) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaign.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaign) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaign.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanCampaign) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaign.Merge(m, src)
+}
+func (m *KeywordPlanCampaign) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaign.Size(m)
+}
+func (m *KeywordPlanCampaign) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaign.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaign proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaign) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanCampaign) GetKeywordPlan() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetLanguageConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.LanguageConstants
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetKeywordPlanNetwork() enums.KeywordPlanNetworkEnum_KeywordPlanNetwork {
+	if m != nil {
+		return m.KeywordPlanNetwork
+	}
+	return enums.KeywordPlanNetworkEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanCampaign) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetGeoTargets() []*KeywordPlanGeoTarget {
+	if m != nil {
+		return m.GeoTargets
+	}
+	return nil
+}
+
+// A geo target.
+// Next ID: 3
+type KeywordPlanGeoTarget struct {
+	// Required. The resource name of the geo target.
+	GeoTargetConstant    *wrappers.StringValue `protobuf:"bytes,1,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *KeywordPlanGeoTarget) Reset()         { *m = KeywordPlanGeoTarget{} }
+func (m *KeywordPlanGeoTarget) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanGeoTarget) ProtoMessage()    {}
+func (*KeywordPlanGeoTarget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_17930fe29b1b9aff, []int{1}
+}
+
+func (m *KeywordPlanGeoTarget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Unmarshal(m, b)
+}
+func (m *KeywordPlanGeoTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanGeoTarget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanGeoTarget.Merge(m, src)
+}
+func (m *KeywordPlanGeoTarget) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Size(m)
+}
+func (m *KeywordPlanGeoTarget) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanGeoTarget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanGeoTarget proto.InternalMessageInfo
+
+func (m *KeywordPlanGeoTarget) GetGeoTargetConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanCampaign)(nil), "google.ads.googleads.v3.resources.KeywordPlanCampaign")
+	proto.RegisterType((*KeywordPlanGeoTarget)(nil), "google.ads.googleads.v3.resources.KeywordPlanGeoTarget")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_plan_campaign.proto", fileDescriptor_17930fe29b1b9aff)
+}
+
+var fileDescriptor_17930fe29b1b9aff = []byte{
+	// 570 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdf, 0x6a, 0x13, 0x41,
+	0x14, 0xc6, 0xc9, 0xf6, 0x8f, 0x3a, 0xad, 0x05, 0xa7, 0xbd, 0x58, 0x6b, 0x91, 0xb4, 0x52, 0x08,
+	0x28, 0xb3, 0xd2, 0x15, 0x95, 0x15, 0x91, 0x4d, 0x91, 0xa8, 0xd5, 0x12, 0xa2, 0x04, 0x91, 0xc0,
+	0x32, 0xd9, 0x19, 0x87, 0x25, 0xd9, 0x99, 0x75, 0x66, 0xb6, 0x41, 0x4b, 0x2f, 0x7d, 0x11, 0x2f,
+	0x7d, 0x00, 0x1f, 0xc2, 0x47, 0xe9, 0x53, 0x48, 0x66, 0x77, 0x36, 0xc1, 0x6c, 0x8d, 0x77, 0x27,
+	0x73, 0xbe, 0xdf, 0x9c, 0xef, 0x9c, 0x33, 0x59, 0xf0, 0x9c, 0x09, 0xc1, 0xc6, 0xd4, 0xc3, 0x44,
+	0x79, 0x45, 0x38, 0x8d, 0xce, 0x7c, 0x4f, 0x52, 0x25, 0x72, 0x19, 0x53, 0xe5, 0x8d, 0xe8, 0xd7,
+	0x89, 0x90, 0x24, 0xca, 0xc6, 0x98, 0x47, 0x31, 0x4e, 0x33, 0x9c, 0x30, 0x8e, 0x32, 0x29, 0xb4,
+	0x80, 0xfb, 0x05, 0x83, 0x30, 0x51, 0xa8, 0xc2, 0xd1, 0x99, 0x8f, 0x2a, 0x7c, 0xf7, 0xe9, 0x55,
+	0x15, 0x28, 0xcf, 0xd3, 0xbf, 0x6e, 0xe7, 0x54, 0x4f, 0x84, 0x1c, 0x15, 0x97, 0xef, 0xde, 0xb6,
+	0x64, 0x96, 0x54, 0x76, 0xca, 0xd4, 0xdd, 0x32, 0x65, 0x7e, 0x0d, 0xf3, 0xcf, 0xde, 0x44, 0xe2,
+	0x2c, 0xa3, 0x52, 0x95, 0xf9, 0xbd, 0x39, 0x14, 0x73, 0x2e, 0x34, 0xd6, 0x89, 0xe0, 0x65, 0xf6,
+	0xe0, 0xd7, 0x1a, 0xd8, 0x3e, 0x29, 0xea, 0x76, 0xc7, 0x98, 0x1f, 0x97, 0x3d, 0xc1, 0x7b, 0xe0,
+	0xa6, 0xad, 0x13, 0x71, 0x9c, 0x52, 0xb7, 0xd1, 0x6c, 0xb4, 0x6e, 0xf4, 0x36, 0xed, 0xe1, 0x29,
+	0x4e, 0x29, 0x7c, 0x01, 0x36, 0xe7, 0x3d, 0xbb, 0x4e, 0xb3, 0xd1, 0xda, 0x38, 0xda, 0x2b, 0xdb,
+	0x47, 0xd6, 0x11, 0x7a, 0xaf, 0x65, 0xc2, 0x59, 0x1f, 0x8f, 0x73, 0xda, 0xdb, 0x18, 0xcd, 0xaa,
+	0xc1, 0xfb, 0xc0, 0x49, 0x88, 0xbb, 0x62, 0xb0, 0x3b, 0x0b, 0xd8, 0x6b, 0xae, 0x1f, 0x3f, 0x2a,
+	0x28, 0x27, 0x21, 0xf0, 0x21, 0x58, 0x35, 0x4e, 0x56, 0xff, 0xa3, 0x8a, 0x51, 0xc2, 0x13, 0x00,
+	0xc7, 0x98, 0xb3, 0x1c, 0x33, 0x1a, 0xc5, 0x82, 0x2b, 0x8d, 0xb9, 0x56, 0xee, 0x5a, 0x73, 0x65,
+	0x29, 0x7f, 0xcb, 0x72, 0xc7, 0x16, 0x83, 0xdf, 0xc0, 0x4e, 0xdd, 0x82, 0xdc, 0xf5, 0x66, 0xa3,
+	0xb5, 0x75, 0xf4, 0x0a, 0x5d, 0xb5, 0x7e, 0xb3, 0x5b, 0x34, 0x37, 0xe3, 0xd3, 0x02, 0x7c, 0xc9,
+	0xf3, 0xb4, 0xe6, 0xb8, 0x07, 0x47, 0x0b, 0x67, 0x30, 0x04, 0x5b, 0x71, 0x16, 0x47, 0xc3, 0x84,
+	0x44, 0x69, 0x12, 0x4b, 0xa1, 0xdc, 0x6b, 0xcb, 0x67, 0xb6, 0x19, 0x67, 0x71, 0x3b, 0x21, 0xef,
+	0x0c, 0x00, 0x3f, 0x82, 0x0d, 0x46, 0x45, 0xa4, 0xb1, 0x64, 0x54, 0x2b, 0xf7, 0xba, 0x19, 0xc2,
+	0x13, 0xb4, 0xf4, 0xd1, 0xce, 0x5b, 0xec, 0x50, 0xf1, 0xc1, 0xf0, 0x3d, 0xc0, 0x6c, 0xa8, 0x02,
+	0x7d, 0x19, 0x7e, 0x01, 0x0f, 0x66, 0x74, 0x19, 0x65, 0x89, 0x42, 0xb1, 0x48, 0xbd, 0xba, 0xd7,
+	0x15, 0xc6, 0xb9, 0xd2, 0x22, 0xa5, 0x52, 0x79, 0xe7, 0x36, 0xbc, 0xf0, 0x46, 0x8b, 0x4a, 0xe5,
+	0x9d, 0xd7, 0xfe, 0xe7, 0x2e, 0x0e, 0x08, 0xd8, 0xa9, 0x73, 0x06, 0xdf, 0x82, 0xed, 0x59, 0x9f,
+	0xd5, 0xd6, 0xcd, 0xf3, 0x5d, 0xba, 0xf4, 0xaa, 0x29, 0xbb, 0xf5, 0xf6, 0x77, 0x07, 0x1c, 0xc6,
+	0x22, 0x5d, 0x3e, 0xa6, 0xb6, 0x5b, 0xd3, 0x67, 0x77, 0x5a, 0xa5, 0xdb, 0xf8, 0xf4, 0xa6, 0xc4,
+	0x99, 0x98, 0x3e, 0x2b, 0x24, 0x24, 0xf3, 0x18, 0xe5, 0xc6, 0x83, 0x37, 0x9b, 0xd6, 0x3f, 0x3e,
+	0x3c, 0xcf, 0xaa, 0xe8, 0x87, 0xb3, 0xd2, 0x09, 0xc3, 0x9f, 0xce, 0x7e, 0xa7, 0xb8, 0x32, 0x24,
+	0x0a, 0x15, 0xe1, 0x34, 0xea, 0xfb, 0xa8, 0x67, 0x95, 0xbf, 0xad, 0x66, 0x10, 0x12, 0x35, 0xa8,
+	0x34, 0x83, 0xbe, 0x3f, 0xa8, 0x34, 0x97, 0xce, 0x61, 0x91, 0x08, 0x82, 0x90, 0xa8, 0x20, 0xa8,
+	0x54, 0x41, 0xd0, 0xf7, 0x83, 0xa0, 0xd2, 0x0d, 0xd7, 0x8d, 0x59, 0xff, 0x4f, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xd8, 0xd5, 0x7a, 0xf9, 0x24, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_plan_keyword.pb.go b/googleapis/ads/googleads/v3/resources/keyword_plan_keyword.pb.go
new file mode 100644
index 0000000..4f4ee20
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_plan_keyword.pb.go
@@ -0,0 +1,160 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_plan_keyword.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Keyword Plan ad group keyword.
+// Max number of keyword plan keywords per plan: 2500.
+type KeywordPlanKeyword struct {
+	// The resource name of the Keyword Plan ad group keyword.
+	// KeywordPlanKeyword resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanKeywords/{kp_ad_group_keyword_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The Keyword Plan ad group to which this keyword belongs.
+	KeywordPlanAdGroup *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The ID of the Keyword Plan keyword.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The keyword text.
+	Text *wrappers.StringValue `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The keyword match type.
+	MatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	// A keyword level max cpc bid in micros, in the account currency, that
+	// overrides the keyword plan ad group cpc bid.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,6,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *KeywordPlanKeyword) Reset()         { *m = KeywordPlanKeyword{} }
+func (m *KeywordPlanKeyword) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeyword) ProtoMessage()    {}
+func (*KeywordPlanKeyword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_148007907f81fae0, []int{0}
+}
+
+func (m *KeywordPlanKeyword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeyword.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeyword.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanKeyword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeyword.Merge(m, src)
+}
+func (m *KeywordPlanKeyword) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeyword.Size(m)
+}
+func (m *KeywordPlanKeyword) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeyword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeyword proto.InternalMessageInfo
+
+func (m *KeywordPlanKeyword) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanKeyword) GetKeywordPlanAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanKeyword) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanKeyword)(nil), "google.ads.googleads.v3.resources.KeywordPlanKeyword")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_plan_keyword.proto", fileDescriptor_148007907f81fae0)
+}
+
+var fileDescriptor_148007907f81fae0 = []byte{
+	// 497 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdd, 0x6a, 0xd4, 0x4c,
+	0x18, 0xc7, 0xd9, 0x74, 0xdf, 0x42, 0xe7, 0xad, 0x3d, 0x08, 0x88, 0xb1, 0x16, 0xd9, 0x2a, 0x85,
+	0x85, 0xc2, 0x8c, 0x34, 0xd2, 0x83, 0x28, 0x48, 0x16, 0x65, 0x51, 0xa9, 0x2e, 0xab, 0xec, 0x81,
+	0x2c, 0x84, 0xd9, 0x99, 0x31, 0x86, 0xcd, 0x7c, 0x38, 0x33, 0x69, 0x5d, 0x4a, 0xcf, 0x7a, 0x25,
+	0x1e, 0x7a, 0x29, 0x5e, 0x4a, 0xaf, 0x42, 0x92, 0x4c, 0x12, 0x65, 0x5b, 0xeb, 0xd9, 0x3f, 0xf3,
+	0xfc, 0x7f, 0xf3, 0x7c, 0x4d, 0xc0, 0xf3, 0x54, 0xca, 0x34, 0x67, 0x08, 0x53, 0x83, 0x6a, 0x59,
+	0xaa, 0xd3, 0x10, 0x69, 0x66, 0x64, 0xa1, 0x09, 0x33, 0x68, 0xc9, 0x56, 0x67, 0x52, 0xd3, 0x44,
+	0xe5, 0x58, 0x24, 0xee, 0x03, 0x2a, 0x2d, 0xad, 0xf4, 0xf7, 0x6b, 0x04, 0x62, 0x6a, 0x60, 0x4b,
+	0xc3, 0xd3, 0x10, 0xb6, 0xf4, 0xee, 0xf1, 0x4d, 0x09, 0x98, 0x28, 0x78, 0x77, 0x39, 0xc7, 0x96,
+	0x7c, 0x49, 0xec, 0x4a, 0xb1, 0xfa, 0xea, 0xdd, 0xfb, 0x0d, 0xa7, 0xb2, 0xb6, 0x16, 0x17, 0x7a,
+	0xe8, 0x42, 0xd5, 0xd7, 0xa2, 0xf8, 0x8c, 0xce, 0x34, 0x56, 0x8a, 0x69, 0xe3, 0xe2, 0x7b, 0xbf,
+	0xa1, 0x58, 0x08, 0x69, 0xb1, 0xcd, 0xa4, 0x70, 0xd1, 0x47, 0x97, 0x7d, 0xe0, 0xbf, 0xad, 0xb3,
+	0x4e, 0x72, 0x2c, 0x9c, 0xf4, 0x1f, 0x83, 0x3b, 0x4d, 0x9a, 0x44, 0x60, 0xce, 0x82, 0xde, 0xa0,
+	0x37, 0xdc, 0x9a, 0x6e, 0x37, 0x87, 0xef, 0x30, 0x67, 0xfe, 0x7b, 0x70, 0xf7, 0x8f, 0x69, 0x60,
+	0x9a, 0xa4, 0x5a, 0x16, 0x2a, 0xf0, 0x06, 0xbd, 0xe1, 0xff, 0x47, 0x7b, 0x6e, 0x08, 0xb0, 0xa9,
+	0x0c, 0x7e, 0xb0, 0x3a, 0x13, 0xe9, 0x0c, 0xe7, 0x05, 0x9b, 0xfa, 0xcb, 0x2e, 0x6b, 0x4c, 0xc7,
+	0x25, 0xe7, 0x1f, 0x02, 0x2f, 0xa3, 0xc1, 0x46, 0x45, 0x3f, 0x58, 0xa3, 0x5f, 0x0b, 0x7b, 0xfc,
+	0xb4, 0x86, 0xbd, 0x8c, 0xfa, 0x4f, 0x40, 0xdf, 0xb2, 0x6f, 0x36, 0xe8, 0xff, 0x43, 0xb2, 0xca,
+	0xe9, 0x13, 0x00, 0xba, 0xc1, 0x06, 0xff, 0x0d, 0x7a, 0xc3, 0x9d, 0xa3, 0x97, 0xf0, 0xa6, 0xa5,
+	0x55, 0x1b, 0x81, 0x6e, 0x20, 0x27, 0x25, 0xf7, 0x71, 0xa5, 0xd8, 0x2b, 0x51, 0xf0, 0xb5, 0xc3,
+	0xe9, 0x16, 0x6f, 0xa4, 0x1f, 0x83, 0x1d, 0xa2, 0x48, 0xb2, 0xc8, 0x68, 0xc2, 0x33, 0xa2, 0xa5,
+	0x09, 0x36, 0x6f, 0xef, 0x67, 0x9b, 0x28, 0x32, 0xca, 0xe8, 0x49, 0x05, 0x44, 0x5f, 0xaf, 0x62,
+	0x01, 0x0e, 0xbb, 0x62, 0x9c, 0x52, 0x99, 0x81, 0x44, 0x72, 0x74, 0xcd, 0xba, 0x5e, 0x90, 0xc2,
+	0x58, 0xc9, 0x99, 0x36, 0xe8, 0xbc, 0x91, 0x17, 0x68, 0xb9, 0x66, 0x34, 0xe8, 0xfc, 0xba, 0xf7,
+	0x7b, 0x31, 0xba, 0xf4, 0xc0, 0x01, 0x91, 0x1c, 0xde, 0xfa, 0x82, 0x47, 0xf7, 0xd6, 0xd3, 0x4f,
+	0xca, 0x8e, 0x26, 0xbd, 0x4f, 0x6f, 0x1c, 0x9d, 0xca, 0x1c, 0x8b, 0x14, 0x4a, 0x9d, 0xa2, 0x94,
+	0x89, 0xaa, 0x5f, 0xd4, 0xf5, 0xf0, 0x97, 0x9f, 0xeb, 0x59, 0xab, 0xbe, 0x7b, 0x1b, 0xe3, 0x38,
+	0xfe, 0xe1, 0xed, 0x8f, 0xeb, 0x2b, 0x63, 0x6a, 0x60, 0x2d, 0x4b, 0x35, 0x0b, 0xe1, 0xb4, 0x71,
+	0xfe, 0x6c, 0x3c, 0xf3, 0x98, 0x9a, 0x79, 0xeb, 0x99, 0xcf, 0xc2, 0x79, 0xeb, 0xb9, 0xf2, 0x0e,
+	0xea, 0x40, 0x14, 0xc5, 0xd4, 0x44, 0x51, 0xeb, 0x8a, 0xa2, 0x59, 0x18, 0x45, 0xad, 0x6f, 0xb1,
+	0x59, 0x15, 0x1b, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x72, 0xf9, 0x4b, 0x08, 0x04, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_plan_negative_keyword.pb.go b/googleapis/ads/googleads/v3/resources/keyword_plan_negative_keyword.pb.go
new file mode 100644
index 0000000..1c36c20
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_plan_negative_keyword.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_plan_negative_keyword.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Keyword Plan negative keyword.
+// Max number of keyword plan negative keywords per plan: 1000.
+type KeywordPlanNegativeKeyword struct {
+	// The resource name of the Keyword Plan negative keyword.
+	// KeywordPlanNegativeKeyword resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanNegativeKeywords/{kp_negative_keyword_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The Keyword Plan campaign to which this negative keyword belongs.
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The ID of the Keyword Plan negative keyword.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The keyword text.
+	Text *wrappers.StringValue `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The keyword match type.
+	MatchType            enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeyword) Reset()         { *m = KeywordPlanNegativeKeyword{} }
+func (m *KeywordPlanNegativeKeyword) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeyword) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeyword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_385c61d2484cb50d, []int{0}
+}
+
+func (m *KeywordPlanNegativeKeyword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeyword.Merge(m, src)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Size(m)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeyword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeyword proto.InternalMessageInfo
+
+func (m *KeywordPlanNegativeKeyword) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanNegativeKeyword) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanNegativeKeyword)(nil), "google.ads.googleads.v3.resources.KeywordPlanNegativeKeyword")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_plan_negative_keyword.proto", fileDescriptor_385c61d2484cb50d)
+}
+
+var fileDescriptor_385c61d2484cb50d = []byte{
+	// 483 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4d, 0x6b, 0xd4, 0x40,
+	0x18, 0x26, 0xd9, 0x2a, 0x74, 0xfc, 0x38, 0x44, 0x84, 0xb8, 0x16, 0xdd, 0x2a, 0x85, 0x05, 0x61,
+	0x46, 0x1a, 0xe9, 0x61, 0x3c, 0xa5, 0x5a, 0x8a, 0x8a, 0x25, 0xac, 0xb2, 0x07, 0x59, 0x08, 0xd3,
+	0x64, 0x1c, 0xc3, 0x66, 0x3e, 0x98, 0x99, 0x6c, 0x5d, 0x4a, 0xcf, 0x1e, 0xf4, 0x57, 0x78, 0xf4,
+	0xa7, 0xf8, 0x3f, 0xbc, 0xf4, 0x57, 0xc8, 0x26, 0x93, 0x44, 0x29, 0xbb, 0x7a, 0x7b, 0xf2, 0xbe,
+	0xcf, 0xf3, 0x3e, 0xef, 0x3c, 0x33, 0x01, 0x47, 0x4c, 0x4a, 0x56, 0x52, 0x44, 0x72, 0x83, 0x1a,
+	0xb8, 0x42, 0x8b, 0x08, 0x69, 0x6a, 0x64, 0xa5, 0x33, 0x6a, 0xd0, 0x9c, 0x2e, 0xcf, 0xa4, 0xce,
+	0x53, 0x55, 0x12, 0x91, 0x0a, 0xca, 0x88, 0x2d, 0x16, 0x34, 0x75, 0x55, 0xa8, 0xb4, 0xb4, 0x32,
+	0xd8, 0x6d, 0xb4, 0x90, 0xe4, 0x06, 0x76, 0x63, 0xe0, 0x22, 0x82, 0xdd, 0x98, 0xe1, 0xc1, 0x3a,
+	0x27, 0x2a, 0x2a, 0xde, 0xbb, 0x70, 0x62, 0xb3, 0x4f, 0xa9, 0x5d, 0x2a, 0xda, 0x8c, 0x1e, 0xde,
+	0x6b, 0x75, 0xaa, 0xe8, 0x96, 0x72, 0xad, 0x07, 0xae, 0x55, 0x7f, 0x9d, 0x56, 0x1f, 0xd1, 0x99,
+	0x26, 0x4a, 0x51, 0x6d, 0x5c, 0x7f, 0xe7, 0x0f, 0x29, 0x11, 0x42, 0x5a, 0x62, 0x0b, 0x29, 0x5c,
+	0xf7, 0xd1, 0xaf, 0x01, 0x18, 0xbe, 0x69, 0x5c, 0x93, 0x92, 0x88, 0x13, 0x77, 0x32, 0x57, 0x0a,
+	0x1e, 0x83, 0x5b, 0xad, 0x5d, 0x2a, 0x08, 0xa7, 0xa1, 0x37, 0xf2, 0xc6, 0xdb, 0x93, 0x9b, 0x6d,
+	0xf1, 0x84, 0x70, 0x1a, 0x24, 0xe0, 0xee, 0x5f, 0xf1, 0x64, 0x84, 0x2b, 0x52, 0x30, 0x11, 0xfa,
+	0x23, 0x6f, 0x7c, 0x63, 0x7f, 0xc7, 0x85, 0x01, 0xdb, 0x0d, 0xe1, 0x3b, 0xab, 0x0b, 0xc1, 0xa6,
+	0xa4, 0xac, 0xe8, 0xe4, 0xce, 0xbc, 0x77, 0x7f, 0xe1, 0x84, 0xc1, 0x13, 0xe0, 0x17, 0x79, 0x38,
+	0xa8, 0xe5, 0xf7, 0xaf, 0xc8, 0x5f, 0x09, 0x7b, 0xf0, 0xac, 0x51, 0xfb, 0x45, 0x1e, 0x3c, 0x05,
+	0x5b, 0x96, 0x7e, 0xb6, 0xe1, 0xd6, 0x7f, 0xb8, 0xd5, 0xcc, 0x20, 0x03, 0xa0, 0x4f, 0x38, 0xbc,
+	0x36, 0xf2, 0xc6, 0xb7, 0xf7, 0x5f, 0xc2, 0x75, 0xb7, 0x57, 0x5f, 0x0d, 0x74, 0x89, 0xbc, 0x5d,
+	0xe9, 0xde, 0x2f, 0x15, 0x3d, 0x12, 0x15, 0xbf, 0x52, 0x9c, 0x6c, 0xf3, 0x16, 0xe2, 0xaf, 0xde,
+	0x65, 0xfc, 0xc5, 0x03, 0x51, 0x3f, 0xcb, 0x21, 0x55, 0x18, 0x98, 0x49, 0x8e, 0x36, 0xc4, 0x9e,
+	0x64, 0x95, 0xb1, 0x92, 0x53, 0x6d, 0xd0, 0x79, 0x0b, 0x2f, 0xd0, 0x7c, 0xad, 0xc0, 0xa0, 0xf3,
+	0x8d, 0x0f, 0xf4, 0xe2, 0xf0, 0x9b, 0x0f, 0xf6, 0x32, 0xc9, 0xe1, 0x3f, 0x9f, 0xe8, 0xe1, 0xc3,
+	0xf5, 0x7b, 0x25, 0xab, 0x48, 0x13, 0xef, 0xc3, 0x6b, 0x37, 0x85, 0xc9, 0x92, 0x08, 0x06, 0xa5,
+	0x66, 0x88, 0x51, 0x51, 0x07, 0x8e, 0xfa, 0x43, 0x6e, 0xf8, 0x9d, 0x9e, 0x77, 0xe8, 0xbb, 0x3f,
+	0x38, 0x8e, 0xe3, 0x1f, 0xfe, 0xee, 0x71, 0x33, 0x32, 0xce, 0x0d, 0x6c, 0xe0, 0x0a, 0x4d, 0x23,
+	0x38, 0x69, 0x99, 0x3f, 0x5b, 0xce, 0x2c, 0xce, 0xcd, 0xac, 0xe3, 0xcc, 0xa6, 0xd1, 0xac, 0xe3,
+	0x5c, 0xfa, 0x7b, 0x4d, 0x03, 0xe3, 0x38, 0x37, 0x18, 0x77, 0x2c, 0x8c, 0xa7, 0x11, 0xc6, 0x1d,
+	0xef, 0xf4, 0x7a, 0xbd, 0x6c, 0xf4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x61, 0xe0, 0x73, 0xc2, 0xfa,
+	0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/keyword_view.pb.go b/googleapis/ads/googleads/v3/resources/keyword_view.pb.go
new file mode 100644
index 0000000..6c9b851
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/keyword_view.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/keyword_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A keyword view.
+type KeywordView struct {
+	// The resource name of the keyword view.
+	// Keyword view resource names have the form:
+	//
+	// `customers/{customer_id}/keywordViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordView) Reset()         { *m = KeywordView{} }
+func (m *KeywordView) String() string { return proto.CompactTextString(m) }
+func (*KeywordView) ProtoMessage()    {}
+func (*KeywordView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b06c74ce279f21, []int{0}
+}
+
+func (m *KeywordView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordView.Unmarshal(m, b)
+}
+func (m *KeywordView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordView.Marshal(b, m, deterministic)
+}
+func (m *KeywordView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordView.Merge(m, src)
+}
+func (m *KeywordView) XXX_Size() int {
+	return xxx_messageInfo_KeywordView.Size(m)
+}
+func (m *KeywordView) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordView proto.InternalMessageInfo
+
+func (m *KeywordView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*KeywordView)(nil), "google.ads.googleads.v3.resources.KeywordView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/keyword_view.proto", fileDescriptor_b4b06c74ce279f21)
+}
+
+var fileDescriptor_b4b06c74ce279f21 = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0x99, 0xfe, 0xf0, 0x83, 0xa3, 0x82, 0x74, 0xa5, 0xc5, 0x85, 0x55, 0x0b, 0xae, 0x12,
+	0x61, 0x5c, 0xc5, 0x55, 0xba, 0x29, 0x28, 0x48, 0xe9, 0x62, 0x10, 0x1d, 0x28, 0x71, 0x12, 0xc2,
+	0x60, 0x27, 0xb7, 0xe4, 0x4e, 0x5b, 0xa4, 0xf4, 0x19, 0x7c, 0x07, 0x97, 0x3e, 0x8a, 0x8f, 0xd2,
+	0x77, 0x10, 0x64, 0x9a, 0x26, 0x9d, 0x95, 0xee, 0x0e, 0xb9, 0xdf, 0x39, 0xf7, 0x1e, 0x12, 0xdf,
+	0x68, 0x00, 0x3d, 0x51, 0x54, 0x48, 0xa4, 0x4e, 0xd6, 0x6a, 0x9e, 0x50, 0xab, 0x10, 0x66, 0x36,
+	0x57, 0x48, 0x5f, 0xd5, 0xdb, 0x02, 0xac, 0x1c, 0xcf, 0x0b, 0xb5, 0x20, 0x53, 0x0b, 0x15, 0xb4,
+	0xbb, 0x0e, 0x25, 0x42, 0x22, 0x09, 0x2e, 0x32, 0x4f, 0x48, 0x70, 0x75, 0x4e, 0x7c, 0xf0, 0xb4,
+	0x08, 0x59, 0xce, 0xdd, 0x39, 0x6d, 0x8c, 0x84, 0x31, 0x50, 0x89, 0xaa, 0x00, 0x83, 0x6e, 0x7a,
+	0xfe, 0x1e, 0xc5, 0xfb, 0xf7, 0x6e, 0x65, 0x5a, 0xa8, 0x45, 0xfb, 0x22, 0x3e, 0xf4, 0xfe, 0xb1,
+	0x11, 0xa5, 0x3a, 0x8e, 0xce, 0xa2, 0xab, 0xbd, 0xd1, 0x81, 0x7f, 0x7c, 0x10, 0xa5, 0x62, 0xcf,
+	0x6b, 0xfe, 0x18, 0x5f, 0xee, 0x4e, 0xd9, 0xaa, 0x69, 0x81, 0x24, 0x87, 0x92, 0x36, 0xf3, 0xae,
+	0xf3, 0x19, 0x56, 0x50, 0x2a, 0x8b, 0x74, 0xe9, 0xe5, 0xca, 0x97, 0xac, 0x09, 0xa4, 0xcb, 0x66,
+	0xe5, 0x55, 0xff, 0x3b, 0x8a, 0x7b, 0x39, 0x94, 0xe4, 0xcf, 0xd2, 0xfd, 0xa3, 0xc6, 0xa2, 0x61,
+	0xdd, 0x66, 0x18, 0x3d, 0xdd, 0x6d, 0x6d, 0x1a, 0x26, 0xc2, 0x68, 0x02, 0x56, 0x53, 0xad, 0xcc,
+	0xa6, 0x2b, 0xdd, 0x9d, 0xf9, 0xcb, 0x07, 0xdc, 0x06, 0xf5, 0xd1, 0xfa, 0x37, 0xe0, 0xfc, 0xb3,
+	0xd5, 0x1d, 0xb8, 0x48, 0x2e, 0x91, 0x38, 0x59, 0xab, 0x34, 0x21, 0x23, 0x4f, 0x7e, 0x79, 0x26,
+	0xe3, 0x12, 0xb3, 0xc0, 0x64, 0x69, 0x92, 0x05, 0x66, 0xdd, 0xea, 0xb9, 0x01, 0x63, 0x5c, 0x22,
+	0x63, 0x81, 0x62, 0x2c, 0x4d, 0x18, 0x0b, 0xdc, 0xcb, 0xff, 0xcd, 0xb1, 0xc9, 0x4f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x5b, 0xbd, 0xec, 0x85, 0x2c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/label.pb.go b/googleapis/ads/googleads/v3/resources/label.pb.go
new file mode 100644
index 0000000..a074898
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/label.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/label.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A label.
+type Label struct {
+	// Name of the resource.
+	// Label resource names have the form:
+	// `customers/{customer_id}/labels/{label_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Id of the label. Read only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the label.
+	//
+	// This field is required and should not be empty when creating a new label.
+	//
+	// The length of this string should be between 1 and 80, inclusive.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// Status of the label. Read only.
+	Status enums.LabelStatusEnum_LabelStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.LabelStatusEnum_LabelStatus" json:"status,omitempty"`
+	// A type of label displaying text on a colored background.
+	TextLabel            *common.TextLabel `protobuf:"bytes,5,opt,name=text_label,json=textLabel,proto3" json:"text_label,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Label) Reset()         { *m = Label{} }
+func (m *Label) String() string { return proto.CompactTextString(m) }
+func (*Label) ProtoMessage()    {}
+func (*Label) Descriptor() ([]byte, []int) {
+	return fileDescriptor_218eb3ad030af589, []int{0}
+}
+
+func (m *Label) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Label.Unmarshal(m, b)
+}
+func (m *Label) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Label.Marshal(b, m, deterministic)
+}
+func (m *Label) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Label.Merge(m, src)
+}
+func (m *Label) XXX_Size() int {
+	return xxx_messageInfo_Label.Size(m)
+}
+func (m *Label) XXX_DiscardUnknown() {
+	xxx_messageInfo_Label.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Label proto.InternalMessageInfo
+
+func (m *Label) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Label) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Label) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Label) GetStatus() enums.LabelStatusEnum_LabelStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.LabelStatusEnum_UNSPECIFIED
+}
+
+func (m *Label) GetTextLabel() *common.TextLabel {
+	if m != nil {
+		return m.TextLabel
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Label)(nil), "google.ads.googleads.v3.resources.Label")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/label.proto", fileDescriptor_218eb3ad030af589)
+}
+
+var fileDescriptor_218eb3ad030af589 = []byte{
+	// 452 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcb, 0x6a, 0xdc, 0x30,
+	0x14, 0x86, 0xb1, 0x73, 0x81, 0xa8, 0x97, 0x85, 0x57, 0xd3, 0x34, 0x84, 0x49, 0x4b, 0x60, 0x4a,
+	0xa9, 0x14, 0xe2, 0xd2, 0x85, 0xba, 0x72, 0x20, 0x24, 0x2d, 0xa5, 0x04, 0xa7, 0xcc, 0xa2, 0x18,
+	0x06, 0x8d, 0xad, 0x1a, 0x83, 0x25, 0x19, 0x49, 0x4e, 0x03, 0x21, 0x2f, 0xd3, 0x65, 0x1f, 0xa5,
+	0x8f, 0x32, 0xdb, 0x2e, 0xba, 0x2d, 0xd6, 0x6d, 0x06, 0x8a, 0x9b, 0xd5, 0xfc, 0x9a, 0xf3, 0xfd,
+	0xbf, 0x8e, 0xcf, 0x11, 0x78, 0x53, 0x0b, 0x51, 0xb7, 0x14, 0x91, 0x4a, 0x21, 0x2b, 0x07, 0x75,
+	0x93, 0x22, 0x49, 0x95, 0xe8, 0x65, 0x49, 0x15, 0x6a, 0xc9, 0x92, 0xb6, 0xb0, 0x93, 0x42, 0x8b,
+	0xe4, 0xc8, 0x32, 0x90, 0x54, 0x0a, 0x06, 0x1c, 0xde, 0xa4, 0x30, 0xe0, 0xfb, 0x68, 0x2c, 0xb1,
+	0x14, 0x8c, 0x09, 0x8e, 0x34, 0xbd, 0xd5, 0x8b, 0x8d, 0xcc, 0xfd, 0x93, 0x31, 0x03, 0xe5, 0x3d,
+	0x73, 0xd7, 0x2f, 0x94, 0x26, 0xba, 0x57, 0xce, 0xf1, 0xcc, 0x3b, 0xba, 0x26, 0xf4, 0xe9, 0x4a,
+	0x87, 0xae, 0x64, 0x4e, 0xcb, 0xfe, 0x1b, 0xfa, 0x2e, 0x49, 0xd7, 0x51, 0xe9, 0xad, 0x07, 0x1b,
+	0x56, 0xc2, 0xb9, 0xd0, 0x44, 0x37, 0x82, 0xbb, 0xea, 0x8b, 0xdf, 0x31, 0xd8, 0xf9, 0x34, 0xdc,
+	0x97, 0xbc, 0x04, 0x4f, 0x7c, 0xf2, 0x82, 0x13, 0x46, 0x27, 0xd1, 0x34, 0x9a, 0xed, 0xe5, 0x8f,
+	0xfd, 0x9f, 0x9f, 0x09, 0xa3, 0xc9, 0x6b, 0x10, 0x37, 0xd5, 0x24, 0x9e, 0x46, 0xb3, 0x47, 0xa7,
+	0xcf, 0xdd, 0x3c, 0xa0, 0xbf, 0x19, 0x7e, 0xe0, 0xfa, 0xdd, 0xdb, 0x39, 0x69, 0x7b, 0x9a, 0xc7,
+	0x4d, 0x95, 0x9c, 0x80, 0x6d, 0x13, 0xb4, 0x65, 0xf0, 0x83, 0x7f, 0xf0, 0x6b, 0x2d, 0x1b, 0x5e,
+	0x5b, 0xde, 0x90, 0x49, 0x0e, 0x76, 0xed, 0x67, 0x4f, 0xb6, 0xa7, 0xd1, 0xec, 0xe9, 0x29, 0x86,
+	0x63, 0xd3, 0x37, 0x93, 0x82, 0xa6, 0xf3, 0x6b, 0xe3, 0x38, 0xe7, 0x3d, 0xdb, 0x3c, 0xe7, 0x2e,
+	0x29, 0xb9, 0x04, 0x60, 0xbd, 0x80, 0xc9, 0x8e, 0xe9, 0xe5, 0xd5, 0x68, 0xae, 0x5d, 0x19, 0xfc,
+	0x42, 0x6f, 0xb5, 0x09, 0xcb, 0xf7, 0xb4, 0x97, 0xf8, 0x72, 0x95, 0x9d, 0x83, 0xc3, 0x35, 0xee,
+	0x54, 0xd7, 0xa8, 0xc1, 0x86, 0xdc, 0x18, 0xcb, 0x5e, 0x69, 0xc1, 0xa8, 0x54, 0xe8, 0xce, 0xcb,
+	0x7b, 0xbb, 0x52, 0x85, 0xee, 0xcc, 0xef, 0xfd, 0xd9, 0x9f, 0x08, 0x1c, 0x97, 0x82, 0xc1, 0x07,
+	0xdf, 0xd6, 0x19, 0x30, 0xa9, 0x57, 0xc3, 0xc8, 0xae, 0xa2, 0xaf, 0x1f, 0x9d, 0xa1, 0x16, 0x2d,
+	0xe1, 0x35, 0x14, 0xb2, 0x46, 0x35, 0xe5, 0x66, 0xa0, 0x68, 0xdd, 0xcd, 0x7f, 0x9e, 0xf6, 0xfb,
+	0xa0, 0x7e, 0xc4, 0x5b, 0x17, 0x59, 0xf6, 0x33, 0x3e, 0xba, 0xb0, 0x91, 0x59, 0xa5, 0xa0, 0x95,
+	0x83, 0x9a, 0xa7, 0x30, 0xf7, 0xe4, 0x2f, 0xcf, 0x14, 0x59, 0xa5, 0x8a, 0xc0, 0x14, 0xf3, 0xb4,
+	0x08, 0xcc, 0x2a, 0x3e, 0xb6, 0x05, 0x8c, 0xb3, 0x4a, 0x61, 0x1c, 0x28, 0x8c, 0xe7, 0x29, 0xc6,
+	0x81, 0x5b, 0xee, 0x9a, 0x66, 0xd3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x99, 0xa2, 0x1f, 0x9f,
+	0x86, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/landing_page_view.pb.go b/googleapis/ads/googleads/v3/resources/landing_page_view.pb.go
new file mode 100644
index 0000000..6982474
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/landing_page_view.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/landing_page_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A landing page view with metrics aggregated at the unexpanded final URL
+// level.
+type LandingPageView struct {
+	// The resource name of the landing page view.
+	// Landing page view resource names have the form:
+	//
+	// `customers/{customer_id}/landingPageViews/{unexpanded_final_url_fingerprint}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The advertiser-specified final URL.
+	UnexpandedFinalUrl   *wrappers.StringValue `protobuf:"bytes,2,opt,name=unexpanded_final_url,json=unexpandedFinalUrl,proto3" json:"unexpanded_final_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LandingPageView) Reset()         { *m = LandingPageView{} }
+func (m *LandingPageView) String() string { return proto.CompactTextString(m) }
+func (*LandingPageView) ProtoMessage()    {}
+func (*LandingPageView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_edb62863fc91958b, []int{0}
+}
+
+func (m *LandingPageView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LandingPageView.Unmarshal(m, b)
+}
+func (m *LandingPageView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LandingPageView.Marshal(b, m, deterministic)
+}
+func (m *LandingPageView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LandingPageView.Merge(m, src)
+}
+func (m *LandingPageView) XXX_Size() int {
+	return xxx_messageInfo_LandingPageView.Size(m)
+}
+func (m *LandingPageView) XXX_DiscardUnknown() {
+	xxx_messageInfo_LandingPageView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LandingPageView proto.InternalMessageInfo
+
+func (m *LandingPageView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *LandingPageView) GetUnexpandedFinalUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.UnexpandedFinalUrl
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*LandingPageView)(nil), "google.ads.googleads.v3.resources.LandingPageView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/landing_page_view.proto", fileDescriptor_edb62863fc91958b)
+}
+
+var fileDescriptor_edb62863fc91958b = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0xea, 0xd3, 0x40,
+	0x10, 0xc6, 0x49, 0x04, 0xc1, 0xa8, 0x08, 0xa1, 0x87, 0x5a, 0x8a, 0xb4, 0x4a, 0xa1, 0xa7, 0x5d,
+	0x30, 0xa7, 0xae, 0xa7, 0xf4, 0x60, 0x41, 0xa4, 0x94, 0x8a, 0x39, 0x48, 0x20, 0x6c, 0xb3, 0xd3,
+	0x75, 0x21, 0xd9, 0x0d, 0xbb, 0x49, 0x2b, 0x94, 0x1e, 0x7c, 0x15, 0x8f, 0x3e, 0x8a, 0x8f, 0xd2,
+	0x93, 0x8f, 0x20, 0x69, 0xb2, 0x5b, 0xa9, 0xe0, 0xff, 0xf6, 0x25, 0xf3, 0xfb, 0x66, 0xbe, 0x19,
+	0x36, 0x58, 0x70, 0xa5, 0x78, 0x01, 0x98, 0x32, 0x83, 0x3b, 0xd9, 0xaa, 0x43, 0x84, 0x35, 0x18,
+	0xd5, 0xe8, 0x1c, 0x0c, 0x2e, 0xa8, 0x64, 0x42, 0xf2, 0xac, 0xa2, 0x1c, 0xb2, 0x83, 0x80, 0x23,
+	0xaa, 0xb4, 0xaa, 0x55, 0x38, 0xed, 0x78, 0x44, 0x99, 0x41, 0xce, 0x8a, 0x0e, 0x11, 0x72, 0xd6,
+	0xd1, 0x4b, 0xdb, 0xbd, 0x12, 0xae, 0x61, 0xe7, 0x1e, 0xbd, 0xea, 0x4b, 0xd7, 0xaf, 0x5d, 0xb3,
+	0xc7, 0x47, 0x4d, 0xab, 0x0a, 0xb4, 0xe9, 0xeb, 0xe3, 0xbf, 0xac, 0x54, 0x4a, 0x55, 0xd3, 0x5a,
+	0x28, 0xd9, 0x57, 0x5f, 0xff, 0xf6, 0x82, 0x17, 0x1f, 0xbb, 0x5c, 0x1b, 0xca, 0x21, 0x11, 0x70,
+	0x0c, 0xdf, 0x04, 0xcf, 0xed, 0x8c, 0x4c, 0xd2, 0x12, 0x86, 0xde, 0xc4, 0x9b, 0x3f, 0xd9, 0x3e,
+	0xb3, 0x3f, 0xd7, 0xb4, 0x84, 0x70, 0x1d, 0x0c, 0x1a, 0x09, 0xdf, 0x2a, 0x2a, 0x19, 0xb0, 0x6c,
+	0x2f, 0x24, 0x2d, 0xb2, 0x46, 0x17, 0x43, 0x7f, 0xe2, 0xcd, 0x9f, 0xbe, 0x1d, 0xf7, 0x8b, 0x20,
+	0x9b, 0x0a, 0x7d, 0xaa, 0xb5, 0x90, 0x3c, 0xa1, 0x45, 0x03, 0xdb, 0xf0, 0xe6, 0x7c, 0xdf, 0x1a,
+	0x3f, 0xeb, 0x82, 0x7c, 0xbd, 0xc4, 0x10, 0xcc, 0x6f, 0xeb, 0xf7, 0xaa, 0x12, 0x06, 0xe5, 0xaa,
+	0xc4, 0xf7, 0x19, 0x17, 0x79, 0x63, 0x6a, 0x55, 0x82, 0x36, 0xf8, 0x64, 0xe5, 0xd9, 0x5e, 0xd8,
+	0x52, 0x06, 0x9f, 0xfe, 0xb9, 0xf9, 0x79, 0xf9, 0xdd, 0x0f, 0x66, 0xb9, 0x2a, 0xd1, 0x83, 0x57,
+	0x5f, 0x0e, 0xee, 0xa6, 0x6e, 0xda, 0x65, 0x36, 0xde, 0x97, 0x0f, 0xbd, 0x95, 0xab, 0x82, 0x4a,
+	0x8e, 0x94, 0xe6, 0x98, 0x83, 0xbc, 0xae, 0x8a, 0x6f, 0xb9, 0xff, 0xf3, 0x14, 0xde, 0x39, 0xf5,
+	0xc3, 0x7f, 0xb4, 0x8a, 0xe3, 0x9f, 0xfe, 0x74, 0xd5, 0xb5, 0x8c, 0x99, 0x41, 0x9d, 0x6c, 0x55,
+	0x12, 0xa1, 0xad, 0x25, 0x7f, 0x59, 0x26, 0x8d, 0x99, 0x49, 0x1d, 0x93, 0x26, 0x51, 0xea, 0x98,
+	0x8b, 0x3f, 0xeb, 0x0a, 0x84, 0xc4, 0xcc, 0x10, 0xe2, 0x28, 0x42, 0x92, 0x88, 0x10, 0xc7, 0xed,
+	0x1e, 0x5f, 0xc3, 0x46, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x87, 0xab, 0xca, 0x2e, 0xb6, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/language_constant.pb.go b/googleapis/ads/googleads/v3/resources/language_constant.pb.go
new file mode 100644
index 0000000..ce9577a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/language_constant.pb.go
@@ -0,0 +1,143 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/language_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A language.
+type LanguageConstant struct {
+	// The resource name of the language constant.
+	// Language constant resource names have the form:
+	//
+	// `languageConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the language constant.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The language code, e.g. "en_US", "en_AU", "es", "fr", etc.
+	Code *wrappers.StringValue `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"`
+	// The full name of the language in English, e.g., "English (US)", "Spanish",
+	// etc.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// Whether the language is targetable.
+	Targetable           *wrappers.BoolValue `protobuf:"bytes,5,opt,name=targetable,proto3" json:"targetable,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *LanguageConstant) Reset()         { *m = LanguageConstant{} }
+func (m *LanguageConstant) String() string { return proto.CompactTextString(m) }
+func (*LanguageConstant) ProtoMessage()    {}
+func (*LanguageConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1d50094a07423762, []int{0}
+}
+
+func (m *LanguageConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LanguageConstant.Unmarshal(m, b)
+}
+func (m *LanguageConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LanguageConstant.Marshal(b, m, deterministic)
+}
+func (m *LanguageConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LanguageConstant.Merge(m, src)
+}
+func (m *LanguageConstant) XXX_Size() int {
+	return xxx_messageInfo_LanguageConstant.Size(m)
+}
+func (m *LanguageConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_LanguageConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LanguageConstant proto.InternalMessageInfo
+
+func (m *LanguageConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *LanguageConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *LanguageConstant) GetCode() *wrappers.StringValue {
+	if m != nil {
+		return m.Code
+	}
+	return nil
+}
+
+func (m *LanguageConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *LanguageConstant) GetTargetable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Targetable
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*LanguageConstant)(nil), "google.ads.googleads.v3.resources.LanguageConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/language_constant.proto", fileDescriptor_1d50094a07423762)
+}
+
+var fileDescriptor_1d50094a07423762 = []byte{
+	// 407 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0x8a, 0xd4, 0x30,
+	0x14, 0x86, 0x69, 0x76, 0x15, 0x8c, 0x0a, 0x52, 0x10, 0xea, 0xb8, 0xc8, 0xae, 0x32, 0xb0, 0x22,
+	0x24, 0x62, 0x45, 0x30, 0x5e, 0x75, 0xbc, 0x58, 0x14, 0x91, 0xa5, 0x62, 0x2f, 0xa4, 0xb0, 0x64,
+	0x9a, 0x18, 0x0a, 0x6d, 0x52, 0x92, 0x74, 0xbc, 0x10, 0x6f, 0x7c, 0x14, 0x2f, 0x7d, 0x14, 0x5f,
+	0xc1, 0x37, 0x98, 0xa7, 0x90, 0x36, 0x69, 0x66, 0x98, 0x82, 0x7a, 0xf7, 0x37, 0xe7, 0xfb, 0xcf,
+	0xf9, 0x9b, 0x13, 0xf8, 0x52, 0x28, 0x25, 0x1a, 0x8e, 0x29, 0x33, 0xd8, 0xc9, 0x41, 0x6d, 0x52,
+	0xac, 0xb9, 0x51, 0xbd, 0xae, 0xb8, 0xc1, 0x0d, 0x95, 0xa2, 0xa7, 0x82, 0x5f, 0x55, 0x4a, 0x1a,
+	0x4b, 0xa5, 0x45, 0x9d, 0x56, 0x56, 0xc5, 0x67, 0x8e, 0x47, 0x94, 0x19, 0x14, 0xac, 0x68, 0x93,
+	0xa2, 0x60, 0x5d, 0xdc, 0x9b, 0xba, 0x77, 0x75, 0x68, 0xe8, 0xdc, 0x8b, 0x07, 0xbe, 0x34, 0x7e,
+	0xad, 0xfb, 0xcf, 0xf8, 0x8b, 0xa6, 0x5d, 0xc7, 0xb5, 0xf1, 0xf5, 0x93, 0x3d, 0x2b, 0x95, 0x52,
+	0x59, 0x6a, 0x6b, 0x25, 0x7d, 0xf5, 0xe1, 0x6f, 0x00, 0xef, 0xbc, 0xf3, 0xb9, 0x5e, 0xfb, 0x58,
+	0xf1, 0x23, 0x78, 0x7b, 0x1a, 0x72, 0x25, 0x69, 0xcb, 0x93, 0xe8, 0x34, 0x3a, 0xbf, 0x91, 0xdf,
+	0x9a, 0x0e, 0xdf, 0xd3, 0x96, 0xc7, 0x4f, 0x20, 0xa8, 0x59, 0x02, 0x4e, 0xa3, 0xf3, 0x9b, 0xcf,
+	0xee, 0xfb, 0xdc, 0x68, 0x0a, 0x81, 0xde, 0x48, 0xfb, 0xe2, 0x79, 0x41, 0x9b, 0x9e, 0xe7, 0xa0,
+	0x66, 0xf1, 0x53, 0x78, 0x5c, 0x29, 0xc6, 0x93, 0xa3, 0x11, 0x3f, 0x99, 0xe1, 0x1f, 0xac, 0xae,
+	0xa5, 0x70, 0xfc, 0x48, 0x0e, 0x8e, 0x71, 0xf4, 0xf1, 0xff, 0x38, 0x06, 0x32, 0x26, 0x10, 0x5a,
+	0xaa, 0x05, 0xb7, 0x74, 0xdd, 0xf0, 0xe4, 0xda, 0xe8, 0x5b, 0xcc, 0x7c, 0x2b, 0xa5, 0x1a, 0xe7,
+	0xda, 0xa3, 0xc9, 0xc7, 0x6d, 0x96, 0xc3, 0xc7, 0xbb, 0xcb, 0xf7, 0xaa, 0xab, 0x0d, 0xaa, 0x54,
+	0x8b, 0x67, 0x37, 0xb4, 0x6c, 0x0e, 0x4e, 0x0c, 0xfe, 0x3a, 0x5b, 0xef, 0xb7, 0xd5, 0x77, 0x00,
+	0x97, 0x95, 0x6a, 0xd1, 0x3f, 0x17, 0xbc, 0xba, 0x7b, 0x38, 0xe2, 0x72, 0x08, 0x7c, 0x19, 0x7d,
+	0x7a, 0xeb, 0xbd, 0x42, 0x0d, 0xfd, 0x91, 0xd2, 0x02, 0x0b, 0x2e, 0xc7, 0xdf, 0xc1, 0xbb, 0x94,
+	0x7f, 0x79, 0x76, 0xaf, 0x82, 0xfa, 0x01, 0x8e, 0x2e, 0xb2, 0xec, 0x27, 0x38, 0xbb, 0x70, 0x2d,
+	0x33, 0x66, 0x90, 0x93, 0x83, 0x2a, 0x52, 0x94, 0x4f, 0xe4, 0xaf, 0x89, 0x29, 0x33, 0x66, 0xca,
+	0xc0, 0x94, 0x45, 0x5a, 0x06, 0x66, 0x0b, 0x96, 0xae, 0x40, 0x48, 0xc6, 0x0c, 0x21, 0x81, 0x22,
+	0xa4, 0x48, 0x09, 0x09, 0xdc, 0xfa, 0xfa, 0x18, 0x36, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0xd0,
+	0xc3, 0x88, 0x06, 0x22, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/location_view.pb.go b/googleapis/ads/googleads/v3/resources/location_view.pb.go
new file mode 100644
index 0000000..71d26b7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/location_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/location_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A location view summarizes the performance of campaigns by
+// Location criteria.
+type LocationView struct {
+	// The resource name of the location view.
+	// Location view resource names have the form:
+	//
+	// `customers/{customer_id}/locationViews/{campaign_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocationView) Reset()         { *m = LocationView{} }
+func (m *LocationView) String() string { return proto.CompactTextString(m) }
+func (*LocationView) ProtoMessage()    {}
+func (*LocationView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8294fbe2fa5282fe, []int{0}
+}
+
+func (m *LocationView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationView.Unmarshal(m, b)
+}
+func (m *LocationView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationView.Marshal(b, m, deterministic)
+}
+func (m *LocationView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationView.Merge(m, src)
+}
+func (m *LocationView) XXX_Size() int {
+	return xxx_messageInfo_LocationView.Size(m)
+}
+func (m *LocationView) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationView proto.InternalMessageInfo
+
+func (m *LocationView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*LocationView)(nil), "google.ads.googleads.v3.resources.LocationView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/location_view.proto", fileDescriptor_8294fbe2fa5282fe)
+}
+
+var fileDescriptor_8294fbe2fa5282fe = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4a, 0xc3, 0x40,
+	0x14, 0x86, 0x49, 0x05, 0xc1, 0x50, 0x17, 0x76, 0xa5, 0xc5, 0x85, 0x55, 0x0a, 0xae, 0x66, 0xc0,
+	0xc1, 0xcd, 0xb8, 0x9a, 0x6e, 0x0a, 0x22, 0x52, 0xba, 0xc8, 0x42, 0x83, 0x65, 0x4c, 0x86, 0x21,
+	0xd0, 0xcc, 0x2b, 0x79, 0x69, 0xba, 0x28, 0x3d, 0x85, 0x37, 0x70, 0xe9, 0x51, 0x3c, 0x4a, 0x0f,
+	0x21, 0x92, 0x4c, 0x66, 0xda, 0x6e, 0x74, 0xf7, 0x33, 0xef, 0xfb, 0xff, 0xf7, 0x7e, 0x26, 0xbc,
+	0xd7, 0x00, 0x7a, 0xae, 0xa8, 0x4c, 0x91, 0x5a, 0x59, 0xab, 0x8a, 0xd1, 0x42, 0x21, 0x2c, 0x8b,
+	0x44, 0x21, 0x9d, 0x43, 0x22, 0xcb, 0x0c, 0xcc, 0xac, 0xca, 0xd4, 0x8a, 0x2c, 0x0a, 0x28, 0xa1,
+	0x37, 0xb0, 0x2c, 0x91, 0x29, 0x12, 0x6f, 0x23, 0x15, 0x23, 0xde, 0xd6, 0xbf, 0x70, 0xc9, 0x8b,
+	0xcc, 0x87, 0x59, 0x77, 0xff, 0x72, 0x6f, 0x24, 0x8d, 0x81, 0xb2, 0xc9, 0x47, 0x3b, 0xbd, 0xfe,
+	0x08, 0xc2, 0xee, 0x53, 0xbb, 0x33, 0xca, 0xd4, 0xaa, 0x77, 0x13, 0x9e, 0xba, 0x80, 0x99, 0x91,
+	0xb9, 0x3a, 0x0f, 0xae, 0x82, 0xdb, 0x93, 0x69, 0xd7, 0x3d, 0x3e, 0xcb, 0x5c, 0xf1, 0xb7, 0xad,
+	0x78, 0x0d, 0x87, 0xbb, 0x5b, 0x5a, 0xb5, 0xc8, 0x90, 0x24, 0x90, 0xd3, 0x83, 0xc0, 0xbb, 0x64,
+	0x89, 0x25, 0xe4, 0xaa, 0x40, 0xba, 0x76, 0x72, 0xe3, 0x7b, 0xd6, 0x08, 0xd2, 0xf5, 0x41, 0xed,
+	0xcd, 0xe8, 0x27, 0x08, 0x87, 0x09, 0xe4, 0xe4, 0xdf, 0xe2, 0xa3, 0xb3, 0xfd, 0x5d, 0x93, 0xba,
+	0xd2, 0x24, 0x78, 0x79, 0x6c, 0x7d, 0x1a, 0xe6, 0xd2, 0x68, 0x02, 0x85, 0xa6, 0x5a, 0x99, 0xa6,
+	0x30, 0xdd, 0x9d, 0xfa, 0xc7, 0x37, 0x3c, 0x78, 0xf5, 0xd9, 0x39, 0x1a, 0x0b, 0xf1, 0xd5, 0x19,
+	0x8c, 0x6d, 0xa4, 0x48, 0x91, 0x58, 0x59, 0xab, 0x88, 0x91, 0xa9, 0x23, 0xbf, 0x1d, 0x13, 0x8b,
+	0x14, 0x63, 0xcf, 0xc4, 0x11, 0x8b, 0x3d, 0xb3, 0xed, 0x0c, 0xed, 0x80, 0x73, 0x91, 0x22, 0xe7,
+	0x9e, 0xe2, 0x3c, 0x62, 0x9c, 0x7b, 0xee, 0xfd, 0xb8, 0x39, 0x96, 0xfd, 0x06, 0x00, 0x00, 0xff,
+	0xff, 0x7b, 0x0a, 0xb2, 0x64, 0x32, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/managed_placement_view.pb.go b/googleapis/ads/googleads/v3/resources/managed_placement_view.pb.go
new file mode 100644
index 0000000..c94d901
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/managed_placement_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/managed_placement_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A managed placement view.
+type ManagedPlacementView struct {
+	// The resource name of the Managed Placement view.
+	// Managed placement view resource names have the form:
+	//
+	// `customers/{customer_id}/managedPlacementViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagedPlacementView) Reset()         { *m = ManagedPlacementView{} }
+func (m *ManagedPlacementView) String() string { return proto.CompactTextString(m) }
+func (*ManagedPlacementView) ProtoMessage()    {}
+func (*ManagedPlacementView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e3083284e69e9877, []int{0}
+}
+
+func (m *ManagedPlacementView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagedPlacementView.Unmarshal(m, b)
+}
+func (m *ManagedPlacementView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagedPlacementView.Marshal(b, m, deterministic)
+}
+func (m *ManagedPlacementView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagedPlacementView.Merge(m, src)
+}
+func (m *ManagedPlacementView) XXX_Size() int {
+	return xxx_messageInfo_ManagedPlacementView.Size(m)
+}
+func (m *ManagedPlacementView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagedPlacementView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagedPlacementView proto.InternalMessageInfo
+
+func (m *ManagedPlacementView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ManagedPlacementView)(nil), "google.ads.googleads.v3.resources.ManagedPlacementView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/managed_placement_view.proto", fileDescriptor_e3083284e69e9877)
+}
+
+var fileDescriptor_e3083284e69e9877 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0x49, 0x7e, 0xf8, 0xc1, 0xa0, 0x9b, 0xe2, 0xc2, 0x16, 0x17, 0x56, 0x29, 0xb8, 0x71,
+	0x66, 0x91, 0xdd, 0x08, 0x42, 0xea, 0xa2, 0x20, 0x28, 0xa5, 0x8b, 0x2c, 0x24, 0x50, 0xc6, 0xe4,
+	0x32, 0x04, 0x3a, 0x73, 0x43, 0x6e, 0xda, 0x2e, 0x4a, 0xb7, 0x3e, 0x88, 0x4b, 0xd7, 0x3e, 0x85,
+	0x8f, 0xd2, 0xa7, 0x90, 0x76, 0x3a, 0x53, 0x85, 0xa0, 0xbb, 0x43, 0xee, 0x77, 0xce, 0xbd, 0x73,
+	0x12, 0xdd, 0x29, 0x44, 0x35, 0x03, 0x2e, 0x0b, 0xe2, 0x56, 0x6e, 0xd5, 0x22, 0xe6, 0x35, 0x10,
+	0xce, 0xeb, 0x1c, 0x88, 0x6b, 0x69, 0xa4, 0x82, 0x62, 0x5a, 0xcd, 0x64, 0x0e, 0x1a, 0x4c, 0x33,
+	0x5d, 0x94, 0xb0, 0x64, 0x55, 0x8d, 0x0d, 0x76, 0xfa, 0xd6, 0xc4, 0x64, 0x41, 0xcc, 0xfb, 0xd9,
+	0x22, 0x66, 0xde, 0xdf, 0xeb, 0xba, 0x15, 0x55, 0xe9, 0x53, 0xad, 0xbb, 0x77, 0xfe, 0x6d, 0x24,
+	0x8d, 0xc1, 0x46, 0x36, 0x25, 0x1a, 0xb2, 0xd3, 0xcb, 0x8f, 0x20, 0x3a, 0x7d, 0xb4, 0xcb, 0xc7,
+	0x6e, 0x77, 0x5a, 0xc2, 0xb2, 0x73, 0x15, 0x9d, 0xb8, 0xa0, 0xa9, 0x91, 0x1a, 0xce, 0x82, 0x8b,
+	0xe0, 0xfa, 0x68, 0x72, 0xec, 0x3e, 0x3e, 0x49, 0x0d, 0x62, 0xb9, 0x49, 0x9a, 0xe8, 0xe6, 0x70,
+	0xd3, 0x5e, 0x55, 0x25, 0xb1, 0x1c, 0x35, 0x6f, 0x0d, 0xbe, 0xcf, 0xe7, 0xd4, 0xa0, 0x86, 0x9a,
+	0xf8, 0xca, 0xc9, 0xb5, 0x2b, 0xe0, 0x07, 0x4a, 0x7c, 0xd5, 0xde, 0xcb, 0x7a, 0xf8, 0x1a, 0x46,
+	0x83, 0x1c, 0x35, 0xfb, 0xb3, 0x99, 0x61, 0xb7, 0xed, 0x88, 0xf1, 0xf6, 0xed, 0xe3, 0xe0, 0xf9,
+	0x61, 0xef, 0x57, 0x38, 0x93, 0x46, 0x31, 0xac, 0x15, 0x57, 0x60, 0x76, 0xcd, 0xf0, 0xc3, 0x5b,
+	0x7e, 0xf9, 0x71, 0xb7, 0x5e, 0xbd, 0x85, 0xff, 0x46, 0x49, 0xf2, 0x1e, 0xf6, 0x47, 0x36, 0x32,
+	0x29, 0x88, 0x59, 0xb9, 0x55, 0x69, 0xcc, 0x26, 0x8e, 0xfc, 0x74, 0x4c, 0x96, 0x14, 0x94, 0x79,
+	0x26, 0x4b, 0xe3, 0xcc, 0x33, 0x9b, 0x70, 0x60, 0x07, 0x42, 0x24, 0x05, 0x09, 0xe1, 0x29, 0x21,
+	0xd2, 0x58, 0x08, 0xcf, 0xbd, 0xfc, 0xdf, 0x1d, 0x1b, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xb1,
+	0x9e, 0x8d, 0xf0, 0x64, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/media_file.pb.go b/googleapis/ads/googleads/v3/resources/media_file.pb.go
new file mode 100644
index 0000000..3d2428f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/media_file.pb.go
@@ -0,0 +1,462 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/media_file.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A media file.
+type MediaFile struct {
+	// The resource name of the media file.
+	// Media file resource names have the form:
+	//
+	// `customers/{customer_id}/mediaFiles/{media_file_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the media file.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Type of the media file.
+	Type enums.MediaTypeEnum_MediaType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.MediaTypeEnum_MediaType" json:"type,omitempty"`
+	// The mime type of the media file.
+	MimeType enums.MimeTypeEnum_MimeType `protobuf:"varint,6,opt,name=mime_type,json=mimeType,proto3,enum=google.ads.googleads.v3.enums.MimeTypeEnum_MimeType" json:"mime_type,omitempty"`
+	// The URL of where the original media file was downloaded from (or a file
+	// name). Only used for media of type AUDIO and IMAGE.
+	SourceUrl *wrappers.StringValue `protobuf:"bytes,7,opt,name=source_url,json=sourceUrl,proto3" json:"source_url,omitempty"`
+	// The name of the media file. The name can be used by clients to help
+	// identify previously uploaded media.
+	Name *wrappers.StringValue `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
+	// The size of the media file in bytes.
+	FileSize *wrappers.Int64Value `protobuf:"bytes,9,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
+	// The specific type of the media file.
+	//
+	// Types that are valid to be assigned to Mediatype:
+	//	*MediaFile_Image
+	//	*MediaFile_MediaBundle
+	//	*MediaFile_Audio
+	//	*MediaFile_Video
+	Mediatype            isMediaFile_Mediatype `protobuf_oneof:"mediatype"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MediaFile) Reset()         { *m = MediaFile{} }
+func (m *MediaFile) String() string { return proto.CompactTextString(m) }
+func (*MediaFile) ProtoMessage()    {}
+func (*MediaFile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f6bdb14f7d0436d6, []int{0}
+}
+
+func (m *MediaFile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFile.Unmarshal(m, b)
+}
+func (m *MediaFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFile.Marshal(b, m, deterministic)
+}
+func (m *MediaFile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFile.Merge(m, src)
+}
+func (m *MediaFile) XXX_Size() int {
+	return xxx_messageInfo_MediaFile.Size(m)
+}
+func (m *MediaFile) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFile proto.InternalMessageInfo
+
+func (m *MediaFile) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MediaFile) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MediaFile) GetType() enums.MediaTypeEnum_MediaType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.MediaTypeEnum_UNSPECIFIED
+}
+
+func (m *MediaFile) GetMimeType() enums.MimeTypeEnum_MimeType {
+	if m != nil {
+		return m.MimeType
+	}
+	return enums.MimeTypeEnum_UNSPECIFIED
+}
+
+func (m *MediaFile) GetSourceUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.SourceUrl
+	}
+	return nil
+}
+
+func (m *MediaFile) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *MediaFile) GetFileSize() *wrappers.Int64Value {
+	if m != nil {
+		return m.FileSize
+	}
+	return nil
+}
+
+type isMediaFile_Mediatype interface {
+	isMediaFile_Mediatype()
+}
+
+type MediaFile_Image struct {
+	Image *MediaImage `protobuf:"bytes,3,opt,name=image,proto3,oneof"`
+}
+
+type MediaFile_MediaBundle struct {
+	MediaBundle *MediaBundle `protobuf:"bytes,4,opt,name=media_bundle,json=mediaBundle,proto3,oneof"`
+}
+
+type MediaFile_Audio struct {
+	Audio *MediaAudio `protobuf:"bytes,10,opt,name=audio,proto3,oneof"`
+}
+
+type MediaFile_Video struct {
+	Video *MediaVideo `protobuf:"bytes,11,opt,name=video,proto3,oneof"`
+}
+
+func (*MediaFile_Image) isMediaFile_Mediatype() {}
+
+func (*MediaFile_MediaBundle) isMediaFile_Mediatype() {}
+
+func (*MediaFile_Audio) isMediaFile_Mediatype() {}
+
+func (*MediaFile_Video) isMediaFile_Mediatype() {}
+
+func (m *MediaFile) GetMediatype() isMediaFile_Mediatype {
+	if m != nil {
+		return m.Mediatype
+	}
+	return nil
+}
+
+func (m *MediaFile) GetImage() *MediaImage {
+	if x, ok := m.GetMediatype().(*MediaFile_Image); ok {
+		return x.Image
+	}
+	return nil
+}
+
+func (m *MediaFile) GetMediaBundle() *MediaBundle {
+	if x, ok := m.GetMediatype().(*MediaFile_MediaBundle); ok {
+		return x.MediaBundle
+	}
+	return nil
+}
+
+func (m *MediaFile) GetAudio() *MediaAudio {
+	if x, ok := m.GetMediatype().(*MediaFile_Audio); ok {
+		return x.Audio
+	}
+	return nil
+}
+
+func (m *MediaFile) GetVideo() *MediaVideo {
+	if x, ok := m.GetMediatype().(*MediaFile_Video); ok {
+		return x.Video
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*MediaFile) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*MediaFile_Image)(nil),
+		(*MediaFile_MediaBundle)(nil),
+		(*MediaFile_Audio)(nil),
+		(*MediaFile_Video)(nil),
+	}
+}
+
+// Encapsulates an Image.
+type MediaImage struct {
+	// Raw image data.
+	Data                 *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaImage) Reset()         { *m = MediaImage{} }
+func (m *MediaImage) String() string { return proto.CompactTextString(m) }
+func (*MediaImage) ProtoMessage()    {}
+func (*MediaImage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f6bdb14f7d0436d6, []int{1}
+}
+
+func (m *MediaImage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaImage.Unmarshal(m, b)
+}
+func (m *MediaImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaImage.Marshal(b, m, deterministic)
+}
+func (m *MediaImage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaImage.Merge(m, src)
+}
+func (m *MediaImage) XXX_Size() int {
+	return xxx_messageInfo_MediaImage.Size(m)
+}
+func (m *MediaImage) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaImage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaImage proto.InternalMessageInfo
+
+func (m *MediaImage) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Represents a ZIP archive media the content of which contains HTML5 assets.
+type MediaBundle struct {
+	// Raw zipped data.
+	Data                 *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaBundle) Reset()         { *m = MediaBundle{} }
+func (m *MediaBundle) String() string { return proto.CompactTextString(m) }
+func (*MediaBundle) ProtoMessage()    {}
+func (*MediaBundle) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f6bdb14f7d0436d6, []int{2}
+}
+
+func (m *MediaBundle) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaBundle.Unmarshal(m, b)
+}
+func (m *MediaBundle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaBundle.Marshal(b, m, deterministic)
+}
+func (m *MediaBundle) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaBundle.Merge(m, src)
+}
+func (m *MediaBundle) XXX_Size() int {
+	return xxx_messageInfo_MediaBundle.Size(m)
+}
+func (m *MediaBundle) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaBundle.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaBundle proto.InternalMessageInfo
+
+func (m *MediaBundle) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Encapsulates an Audio.
+type MediaAudio struct {
+	// The duration of the Audio in milliseconds.
+	AdDurationMillis     *wrappers.Int64Value `protobuf:"bytes,1,opt,name=ad_duration_millis,json=adDurationMillis,proto3" json:"ad_duration_millis,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaAudio) Reset()         { *m = MediaAudio{} }
+func (m *MediaAudio) String() string { return proto.CompactTextString(m) }
+func (*MediaAudio) ProtoMessage()    {}
+func (*MediaAudio) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f6bdb14f7d0436d6, []int{3}
+}
+
+func (m *MediaAudio) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaAudio.Unmarshal(m, b)
+}
+func (m *MediaAudio) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaAudio.Marshal(b, m, deterministic)
+}
+func (m *MediaAudio) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaAudio.Merge(m, src)
+}
+func (m *MediaAudio) XXX_Size() int {
+	return xxx_messageInfo_MediaAudio.Size(m)
+}
+func (m *MediaAudio) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaAudio.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaAudio proto.InternalMessageInfo
+
+func (m *MediaAudio) GetAdDurationMillis() *wrappers.Int64Value {
+	if m != nil {
+		return m.AdDurationMillis
+	}
+	return nil
+}
+
+// Encapsulates a Video.
+type MediaVideo struct {
+	// The duration of the Video in milliseconds.
+	AdDurationMillis *wrappers.Int64Value `protobuf:"bytes,1,opt,name=ad_duration_millis,json=adDurationMillis,proto3" json:"ad_duration_millis,omitempty"`
+	// The YouTube video ID (as seen in YouTube URLs).
+	YoutubeVideoId *wrappers.StringValue `protobuf:"bytes,2,opt,name=youtube_video_id,json=youtubeVideoId,proto3" json:"youtube_video_id,omitempty"`
+	// The Advertising Digital Identification code for this video, as defined by
+	// the American Association of Advertising Agencies, used mainly for
+	// television commercials.
+	AdvertisingIdCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=advertising_id_code,json=advertisingIdCode,proto3" json:"advertising_id_code,omitempty"`
+	// The Industry Standard Commercial Identifier code for this video, used
+	// mainly for television commercials.
+	IsciCode             *wrappers.StringValue `protobuf:"bytes,4,opt,name=isci_code,json=isciCode,proto3" json:"isci_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MediaVideo) Reset()         { *m = MediaVideo{} }
+func (m *MediaVideo) String() string { return proto.CompactTextString(m) }
+func (*MediaVideo) ProtoMessage()    {}
+func (*MediaVideo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f6bdb14f7d0436d6, []int{4}
+}
+
+func (m *MediaVideo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaVideo.Unmarshal(m, b)
+}
+func (m *MediaVideo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaVideo.Marshal(b, m, deterministic)
+}
+func (m *MediaVideo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaVideo.Merge(m, src)
+}
+func (m *MediaVideo) XXX_Size() int {
+	return xxx_messageInfo_MediaVideo.Size(m)
+}
+func (m *MediaVideo) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaVideo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaVideo proto.InternalMessageInfo
+
+func (m *MediaVideo) GetAdDurationMillis() *wrappers.Int64Value {
+	if m != nil {
+		return m.AdDurationMillis
+	}
+	return nil
+}
+
+func (m *MediaVideo) GetYoutubeVideoId() *wrappers.StringValue {
+	if m != nil {
+		return m.YoutubeVideoId
+	}
+	return nil
+}
+
+func (m *MediaVideo) GetAdvertisingIdCode() *wrappers.StringValue {
+	if m != nil {
+		return m.AdvertisingIdCode
+	}
+	return nil
+}
+
+func (m *MediaVideo) GetIsciCode() *wrappers.StringValue {
+	if m != nil {
+		return m.IsciCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*MediaFile)(nil), "google.ads.googleads.v3.resources.MediaFile")
+	proto.RegisterType((*MediaImage)(nil), "google.ads.googleads.v3.resources.MediaImage")
+	proto.RegisterType((*MediaBundle)(nil), "google.ads.googleads.v3.resources.MediaBundle")
+	proto.RegisterType((*MediaAudio)(nil), "google.ads.googleads.v3.resources.MediaAudio")
+	proto.RegisterType((*MediaVideo)(nil), "google.ads.googleads.v3.resources.MediaVideo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/media_file.proto", fileDescriptor_f6bdb14f7d0436d6)
+}
+
+var fileDescriptor_f6bdb14f7d0436d6 = []byte{
+	// 729 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x5f, 0x6b, 0xdb, 0x3c,
+	0x14, 0xc6, 0x9b, 0x34, 0xed, 0x1b, 0x2b, 0x7d, 0x4b, 0x5f, 0xbd, 0x37, 0x5e, 0x57, 0x46, 0x9b,
+	0x51, 0x28, 0x6c, 0x95, 0x47, 0x53, 0xca, 0xe6, 0xb2, 0x41, 0xb2, 0xf5, 0x4f, 0xca, 0x3a, 0x3a,
+	0x77, 0xcd, 0x60, 0x04, 0x8c, 0x12, 0xa9, 0x46, 0x60, 0x5b, 0xc6, 0xb2, 0x33, 0xd2, 0xd2, 0x2f,
+	0xb3, 0xab, 0xb1, 0xdb, 0x7d, 0x8b, 0x7d, 0x94, 0x7e, 0x85, 0xdd, 0x0c, 0xc9, 0xb2, 0x1d, 0xd8,
+	0xda, 0xb4, 0xb0, 0xbb, 0xa3, 0x9c, 0xe7, 0xf9, 0xf9, 0x9c, 0xe3, 0x23, 0x07, 0x6c, 0x79, 0x9c,
+	0x7b, 0x3e, 0xb5, 0x30, 0x11, 0x56, 0x16, 0xca, 0x68, 0xd4, 0xb2, 0x62, 0x2a, 0x78, 0x1a, 0x0f,
+	0xa9, 0xb0, 0x02, 0x4a, 0x18, 0x76, 0xcf, 0x99, 0x4f, 0x51, 0x14, 0xf3, 0x84, 0xc3, 0xb5, 0x4c,
+	0x88, 0x30, 0x11, 0xa8, 0xf0, 0xa0, 0x51, 0x0b, 0x15, 0x9e, 0x65, 0x74, 0x13, 0x96, 0x86, 0x69,
+	0x90, 0x23, 0x93, 0x71, 0xa4, 0x91, 0xcb, 0x9b, 0x53, 0xf4, 0x2c, 0xa0, 0x93, 0xf2, 0x07, 0xb9,
+	0x3c, 0x62, 0x45, 0xa1, 0x3a, 0xf5, 0x48, 0xa7, 0xd4, 0x69, 0x90, 0x9e, 0x5b, 0x9f, 0x63, 0x1c,
+	0x45, 0x34, 0x16, 0x3a, 0xbf, 0x32, 0x61, 0xc5, 0x61, 0xc8, 0x13, 0x9c, 0x30, 0x1e, 0xea, 0x6c,
+	0xf3, 0xfb, 0x3c, 0x30, 0x8e, 0x65, 0x71, 0xfb, 0xcc, 0xa7, 0xf0, 0x31, 0xf8, 0x37, 0xa7, 0xbb,
+	0x21, 0x0e, 0xa8, 0x59, 0x59, 0xad, 0x6c, 0x18, 0xce, 0x42, 0xfe, 0xe3, 0x3b, 0x1c, 0x50, 0xf8,
+	0x04, 0x54, 0x19, 0x31, 0xab, 0xab, 0x95, 0x8d, 0xc6, 0xd6, 0x43, 0xdd, 0x37, 0xca, 0x9f, 0x8e,
+	0xba, 0x61, 0xb2, 0xb3, 0xdd, 0xc3, 0x7e, 0x4a, 0x9d, 0x2a, 0x23, 0xf0, 0x08, 0xd4, 0x64, 0x1b,
+	0xe6, 0xdc, 0x6a, 0x65, 0x63, 0x71, 0x6b, 0x07, 0xdd, 0x34, 0x49, 0xd5, 0x36, 0x52, 0x95, 0x7c,
+	0x18, 0x47, 0x74, 0x2f, 0x4c, 0x83, 0xf2, 0xe4, 0x28, 0x06, 0x7c, 0x0f, 0x8c, 0x62, 0x2e, 0xe6,
+	0xbc, 0x02, 0x6e, 0x4f, 0x03, 0xb2, 0x80, 0x96, 0x3c, 0x7d, 0x70, 0xea, 0x81, 0x8e, 0xe0, 0x2e,
+	0x00, 0xba, 0xdd, 0x34, 0xf6, 0xcd, 0x7f, 0x54, 0x4f, 0x2b, 0xbf, 0xf5, 0x74, 0x9a, 0xc4, 0x2c,
+	0xf4, 0xb2, 0xa6, 0x8c, 0x4c, 0x7f, 0x16, 0xfb, 0xf0, 0x19, 0xa8, 0xa9, 0x21, 0xd5, 0xef, 0x60,
+	0x53, 0x4a, 0xf8, 0x1c, 0x18, 0x72, 0xad, 0x5c, 0xc1, 0x2e, 0xa8, 0x69, 0x4c, 0x9f, 0x60, 0x5d,
+	0xaa, 0x4f, 0xd9, 0x05, 0x85, 0x7b, 0x60, 0x8e, 0x05, 0xd8, 0xa3, 0xe6, 0xac, 0x72, 0x6d, 0xa2,
+	0xa9, 0x2b, 0x99, 0x8d, 0xaf, 0x2b, 0x4d, 0x87, 0x33, 0x4e, 0xe6, 0x86, 0xa7, 0x60, 0x21, 0x5b,
+	0xc5, 0x41, 0x1a, 0x12, 0x9f, 0x9a, 0x35, 0x45, 0x43, 0x77, 0xa5, 0x75, 0x94, 0xeb, 0x70, 0xc6,
+	0x69, 0x04, 0xe5, 0x51, 0xd6, 0x86, 0x53, 0xc2, 0xb8, 0x09, 0xee, 0x57, 0x5b, 0x5b, 0x9a, 0x64,
+	0x6d, 0xca, 0x2d, 0x31, 0x23, 0x46, 0x28, 0x37, 0x1b, 0xf7, 0xc3, 0xf4, 0xa4, 0x49, 0x62, 0x94,
+	0xdb, 0x3e, 0xbb, 0x6e, 0x3b, 0xa0, 0x59, 0x1a, 0x74, 0x14, 0x31, 0x81, 0x86, 0x3c, 0xb0, 0xca,
+	0x65, 0x7f, 0x3a, 0x4c, 0x45, 0xc2, 0x03, 0x1a, 0x0b, 0xeb, 0x32, 0x0f, 0xaf, 0xb2, 0x9b, 0x2a,
+	0xf3, 0xc2, 0xba, 0x2c, 0x3f, 0x04, 0x57, 0x9d, 0x06, 0x30, 0xd4, 0x51, 0x2e, 0x5f, 0xf3, 0x25,
+	0x00, 0xe5, 0x74, 0xa1, 0x05, 0x6a, 0x04, 0x27, 0x58, 0x5d, 0x96, 0x3f, 0xbd, 0xd0, 0xce, 0x38,
+	0xa1, 0x42, 0xaf, 0x81, 0x14, 0x36, 0x5f, 0x81, 0xc6, 0xc4, 0x38, 0xef, 0xef, 0xff, 0xa8, 0x1f,
+	0xaf, 0x06, 0x08, 0xbb, 0x00, 0x62, 0xe2, 0x92, 0x34, 0x56, 0x17, 0xdb, 0x0d, 0x98, 0xef, 0x33,
+	0x71, 0x23, 0x6c, 0x62, 0xbb, 0x96, 0x30, 0x79, 0xa3, 0x5d, 0xc7, 0xca, 0xd4, 0xfc, 0x5a, 0xd5,
+	0x64, 0x35, 0xd3, 0xbf, 0x48, 0x86, 0xfb, 0x60, 0x69, 0xcc, 0xd3, 0x24, 0x1d, 0x50, 0x57, 0xbd,
+	0x26, 0xb7, 0xf8, 0x84, 0xdc, 0x7e, 0x6f, 0x16, 0xb5, 0x4b, 0x15, 0xd4, 0x25, 0xf0, 0x2d, 0xf8,
+	0x1f, 0x93, 0x11, 0x8d, 0x13, 0x26, 0x58, 0xe8, 0xb9, 0x8c, 0xb8, 0x43, 0x4e, 0xf2, 0x5b, 0x71,
+	0x3b, 0xea, 0xbf, 0x09, 0x63, 0x97, 0xbc, 0xe6, 0x84, 0xc2, 0x17, 0xc0, 0x60, 0x62, 0xc8, 0x32,
+	0x46, 0xed, 0x0e, 0x8c, 0xba, 0x94, 0x4b, 0x6b, 0xe7, 0x67, 0x05, 0xac, 0x0f, 0x79, 0x30, 0x7d,
+	0x49, 0x3b, 0x8b, 0xc5, 0xca, 0x9d, 0x48, 0xe4, 0x49, 0xe5, 0xd3, 0x91, 0x36, 0x79, 0xdc, 0xc7,
+	0xa1, 0x87, 0x78, 0xec, 0x59, 0x1e, 0x0d, 0xd5, 0x03, 0xad, 0x72, 0x5d, 0x6f, 0xf9, 0x8b, 0xda,
+	0x2d, 0xa2, 0x2f, 0xd5, 0xd9, 0x83, 0x76, 0xfb, 0x5b, 0x75, 0xed, 0x20, 0x43, 0xb6, 0x89, 0x40,
+	0x59, 0x28, 0xa3, 0x5e, 0x0b, 0x39, 0xb9, 0xf2, 0x47, 0xae, 0xe9, 0xb7, 0x89, 0xe8, 0x17, 0x9a,
+	0x7e, 0xaf, 0xd5, 0x2f, 0x34, 0xd7, 0xd5, 0xf5, 0x2c, 0x61, 0xdb, 0x6d, 0x22, 0x6c, 0xbb, 0x50,
+	0xd9, 0x76, 0xaf, 0x65, 0xdb, 0x85, 0x6e, 0x30, 0xaf, 0x8a, 0x6d, 0xfd, 0x0a, 0x00, 0x00, 0xff,
+	0xff, 0xa4, 0x51, 0x4f, 0x1e, 0x4e, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/merchant_center_link.pb.go b/googleapis/ads/googleads/v3/resources/merchant_center_link.pb.go
new file mode 100644
index 0000000..be327ee
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/merchant_center_link.pb.go
@@ -0,0 +1,140 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/merchant_center_link.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A data sharing connection, proposed or in use,
+// between a Google Ads Customer and a Merchant Center account.
+type MerchantCenterLink struct {
+	// The resource name of the merchant center link.
+	// Merchant center link resource names have the form:
+	//
+	// `customers/{customer_id}/merchantCenterLinks/{merchant_center_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the Merchant Center account.
+	// This field is readonly.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the Merchant Center account.
+	// This field is readonly.
+	MerchantCenterAccountName *wrappers.StringValue `protobuf:"bytes,4,opt,name=merchant_center_account_name,json=merchantCenterAccountName,proto3" json:"merchant_center_account_name,omitempty"`
+	// The status of the link.
+	Status               enums.MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                    `json:"-"`
+	XXX_unrecognized     []byte                                                      `json:"-"`
+	XXX_sizecache        int32                                                       `json:"-"`
+}
+
+func (m *MerchantCenterLink) Reset()         { *m = MerchantCenterLink{} }
+func (m *MerchantCenterLink) String() string { return proto.CompactTextString(m) }
+func (*MerchantCenterLink) ProtoMessage()    {}
+func (*MerchantCenterLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5922ba0a523027c6, []int{0}
+}
+
+func (m *MerchantCenterLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MerchantCenterLink.Unmarshal(m, b)
+}
+func (m *MerchantCenterLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MerchantCenterLink.Marshal(b, m, deterministic)
+}
+func (m *MerchantCenterLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MerchantCenterLink.Merge(m, src)
+}
+func (m *MerchantCenterLink) XXX_Size() int {
+	return xxx_messageInfo_MerchantCenterLink.Size(m)
+}
+func (m *MerchantCenterLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_MerchantCenterLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MerchantCenterLink proto.InternalMessageInfo
+
+func (m *MerchantCenterLink) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MerchantCenterLink) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MerchantCenterLink) GetMerchantCenterAccountName() *wrappers.StringValue {
+	if m != nil {
+		return m.MerchantCenterAccountName
+	}
+	return nil
+}
+
+func (m *MerchantCenterLink) GetStatus() enums.MerchantCenterLinkStatusEnum_MerchantCenterLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.MerchantCenterLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*MerchantCenterLink)(nil), "google.ads.googleads.v3.resources.MerchantCenterLink")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/merchant_center_link.proto", fileDescriptor_5922ba0a523027c6)
+}
+
+var fileDescriptor_5922ba0a523027c6 = []byte{
+	// 455 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x4f, 0x6b, 0xd4, 0x40,
+	0x14, 0x27, 0x59, 0x2d, 0x18, 0xff, 0x1c, 0x72, 0x71, 0x5b, 0x17, 0xd9, 0x2a, 0x85, 0x85, 0xc2,
+	0x0c, 0x34, 0xe2, 0x61, 0x14, 0x4a, 0x2a, 0x52, 0x14, 0x95, 0xb2, 0x95, 0x3d, 0xc8, 0xca, 0x32,
+	0x4d, 0xc6, 0x18, 0x9a, 0x79, 0x13, 0x67, 0x26, 0xf5, 0x50, 0x7a, 0xf3, 0x93, 0x78, 0xf0, 0xe0,
+	0x47, 0xf1, 0xa3, 0xf4, 0x53, 0xc8, 0xce, 0xbf, 0xaa, 0xd9, 0xb5, 0xb7, 0x5f, 0xf2, 0x7e, 0x7f,
+	0xde, 0x7b, 0x79, 0x49, 0x9e, 0x57, 0x42, 0x54, 0x0d, 0xc3, 0xb4, 0x54, 0xd8, 0xc2, 0x25, 0x3a,
+	0xcb, 0xb0, 0x64, 0x4a, 0x74, 0xb2, 0x60, 0x0a, 0x73, 0x26, 0x8b, 0xcf, 0x14, 0xf4, 0xa2, 0x60,
+	0xa0, 0x99, 0x5c, 0x34, 0x35, 0x9c, 0xa2, 0x56, 0x0a, 0x2d, 0xd2, 0x6d, 0x2b, 0x41, 0xb4, 0x54,
+	0x28, 0xa8, 0xd1, 0x59, 0x86, 0x82, 0x7a, 0x6b, 0x7f, 0x5d, 0x00, 0x83, 0x8e, 0xaf, 0x36, 0x5f,
+	0x28, 0x4d, 0x75, 0xa7, 0x6c, 0xc6, 0xd6, 0xa6, 0x37, 0x68, 0xeb, 0xd0, 0x94, 0x2b, 0x3d, 0x74,
+	0x25, 0xf3, 0x74, 0xd2, 0x7d, 0xc2, 0x5f, 0x25, 0x6d, 0x5b, 0x26, 0xbd, 0x74, 0xf4, 0x87, 0x94,
+	0x02, 0x08, 0x4d, 0x75, 0x2d, 0xc0, 0x55, 0x1f, 0xfd, 0x18, 0x24, 0xe9, 0x5b, 0x17, 0xff, 0xc2,
+	0xa4, 0xbf, 0xa9, 0xe1, 0x34, 0x7d, 0x9c, 0xdc, 0xf5, 0x31, 0x0b, 0xa0, 0x9c, 0x0d, 0xa3, 0x71,
+	0x34, 0xb9, 0x35, 0xbd, 0xe3, 0x5f, 0xbe, 0xa3, 0x9c, 0xa5, 0xbb, 0x49, 0x5c, 0x97, 0xc3, 0xc1,
+	0x38, 0x9a, 0xdc, 0xde, 0x7b, 0xe0, 0x46, 0x47, 0xbe, 0x0d, 0xf4, 0x0a, 0xf4, 0xd3, 0x27, 0x33,
+	0xda, 0x74, 0x6c, 0x1a, 0xd7, 0x65, 0xfa, 0x31, 0x19, 0xfd, 0x3b, 0x26, 0x2d, 0x0a, 0xd1, 0x81,
+	0xb6, 0x01, 0x37, 0x8c, 0xcd, 0xa8, 0x67, 0x73, 0xac, 0x65, 0x0d, 0x95, 0xf5, 0xd9, 0xe4, 0x7f,
+	0x75, 0x9a, 0x5b, 0xbd, 0xe9, 0xa5, 0x49, 0x36, 0xec, 0xc2, 0x86, 0x37, 0xc7, 0xd1, 0xe4, 0xde,
+	0xde, 0x7b, 0xb4, 0xee, 0xab, 0x98, 0x95, 0xa3, 0xfe, 0xcc, 0xc7, 0x46, 0xfe, 0x12, 0x3a, 0xbe,
+	0xb6, 0x38, 0x75, 0x19, 0xe4, 0xcb, 0x65, 0x0e, 0xc9, 0xee, 0x95, 0xad, 0x43, 0x6d, 0xad, 0x50,
+	0x21, 0x38, 0x5e, 0xb1, 0xd0, 0xfd, 0xa2, 0x53, 0x5a, 0x70, 0x26, 0x15, 0x3e, 0xf7, 0xf0, 0x02,
+	0xf3, 0x1e, 0x51, 0xe1, 0xf3, 0x55, 0xd7, 0x70, 0x71, 0xf0, 0x2d, 0x4e, 0x76, 0x0a, 0xc1, 0xd1,
+	0xb5, 0xc7, 0x76, 0x70, 0xbf, 0x1f, 0x7f, 0xb4, 0xdc, 0xe6, 0x51, 0xf4, 0xe1, 0xb5, 0x53, 0x57,
+	0xa2, 0xa1, 0x50, 0x21, 0x21, 0x2b, 0x5c, 0x31, 0x30, 0xbb, 0xc6, 0x57, 0x33, 0xfc, 0xe7, 0x3f,
+	0x78, 0x16, 0xd0, 0xf7, 0x78, 0x70, 0x98, 0xe7, 0x3f, 0xe3, 0xed, 0x43, 0x6b, 0x99, 0x97, 0x0a,
+	0x59, 0xb8, 0x44, 0xb3, 0x0c, 0x4d, 0x3d, 0xf3, 0x97, 0xe7, 0xcc, 0xf3, 0x52, 0xcd, 0x03, 0x67,
+	0x3e, 0xcb, 0xe6, 0x81, 0x73, 0x19, 0xef, 0xd8, 0x02, 0x21, 0x79, 0xa9, 0x08, 0x09, 0x2c, 0x42,
+	0x66, 0x19, 0x21, 0x81, 0x77, 0xb2, 0x61, 0x9a, 0xcd, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x91,
+	0x97, 0x6e, 0x3d, 0xb3, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/mobile_app_category_constant.pb.go b/googleapis/ads/googleads/v3/resources/mobile_app_category_constant.pb.go
new file mode 100644
index 0000000..faacb54
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/mobile_app_category_constant.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/mobile_app_category_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A mobile application category constant.
+type MobileAppCategoryConstant struct {
+	// The resource name of the mobile app category constant.
+	// Mobile app category constant resource names have the form:
+	//
+	// `mobileAppCategoryConstants/{mobile_app_category_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the mobile app category constant.
+	Id *wrappers.Int32Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Mobile app category name.
+	Name                 *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MobileAppCategoryConstant) Reset()         { *m = MobileAppCategoryConstant{} }
+func (m *MobileAppCategoryConstant) String() string { return proto.CompactTextString(m) }
+func (*MobileAppCategoryConstant) ProtoMessage()    {}
+func (*MobileAppCategoryConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_14ce0b7d234fc1da, []int{0}
+}
+
+func (m *MobileAppCategoryConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileAppCategoryConstant.Unmarshal(m, b)
+}
+func (m *MobileAppCategoryConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileAppCategoryConstant.Marshal(b, m, deterministic)
+}
+func (m *MobileAppCategoryConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileAppCategoryConstant.Merge(m, src)
+}
+func (m *MobileAppCategoryConstant) XXX_Size() int {
+	return xxx_messageInfo_MobileAppCategoryConstant.Size(m)
+}
+func (m *MobileAppCategoryConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileAppCategoryConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileAppCategoryConstant proto.InternalMessageInfo
+
+func (m *MobileAppCategoryConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MobileAppCategoryConstant) GetId() *wrappers.Int32Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MobileAppCategoryConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*MobileAppCategoryConstant)(nil), "google.ads.googleads.v3.resources.MobileAppCategoryConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/mobile_app_category_constant.proto", fileDescriptor_14ce0b7d234fc1da)
+}
+
+var fileDescriptor_14ce0b7d234fc1da = []byte{
+	// 388 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x6a, 0xdb, 0x30,
+	0x1c, 0xc6, 0xb1, 0x32, 0x06, 0xf3, 0xb6, 0x8b, 0x4f, 0x49, 0x16, 0x42, 0xb2, 0x11, 0x08, 0x0c,
+	0xa4, 0x11, 0x9f, 0xa6, 0x9d, 0x9c, 0x0c, 0xc2, 0x06, 0x1b, 0x21, 0x03, 0x1f, 0x86, 0xc1, 0x28,
+	0xb6, 0x2a, 0x0c, 0xb6, 0x24, 0x24, 0x25, 0xa5, 0x94, 0x3e, 0x41, 0x8f, 0x7d, 0x83, 0x1e, 0xfb,
+	0x28, 0x7d, 0x94, 0x3c, 0x45, 0x89, 0x2d, 0x2b, 0x85, 0x92, 0xf4, 0xf6, 0xd9, 0xdf, 0x4f, 0xdf,
+	0xff, 0xfb, 0x5b, 0xf6, 0x7f, 0x32, 0x21, 0x58, 0x49, 0x11, 0xc9, 0x35, 0x6a, 0xe4, 0x41, 0xed,
+	0x42, 0xa4, 0xa8, 0x16, 0x5b, 0x95, 0x51, 0x8d, 0x2a, 0xb1, 0x29, 0x4a, 0x9a, 0x12, 0x29, 0xd3,
+	0x8c, 0x18, 0xca, 0x84, 0xba, 0x4a, 0x33, 0xc1, 0xb5, 0x21, 0xdc, 0x40, 0xa9, 0x84, 0x11, 0xc1,
+	0xb8, 0x39, 0x0a, 0x49, 0xae, 0xa1, 0x4b, 0x81, 0xbb, 0x10, 0xba, 0x94, 0x7e, 0xaf, 0x1d, 0x24,
+	0x0b, 0x97, 0xdd, 0x9c, 0xee, 0x0f, 0xad, 0x55, 0x3f, 0x6d, 0xb6, 0x17, 0xe8, 0x52, 0x11, 0x29,
+	0xa9, 0xd2, 0xd6, 0x1f, 0x3c, 0x3b, 0x4a, 0x38, 0x17, 0x86, 0x98, 0x42, 0x70, 0xeb, 0x7e, 0xbe,
+	0x03, 0x7e, 0xef, 0x4f, 0x5d, 0x31, 0x92, 0x72, 0x61, 0x0b, 0x2e, 0x6c, 0xbf, 0xe0, 0x8b, 0xff,
+	0xb1, 0x9d, 0x96, 0x72, 0x52, 0xd1, 0xae, 0x37, 0xf2, 0xa6, 0xef, 0xd6, 0x1f, 0xda, 0x97, 0x7f,
+	0x49, 0x45, 0x83, 0xaf, 0x3e, 0x28, 0xf2, 0x2e, 0x18, 0x79, 0xd3, 0xf7, 0xb3, 0x4f, 0x76, 0x01,
+	0xd8, 0xb6, 0x81, 0xbf, 0xb8, 0x09, 0x67, 0x31, 0x29, 0xb7, 0x74, 0x0d, 0x8a, 0x3c, 0xf8, 0xe6,
+	0xbf, 0xa9, 0x83, 0x3a, 0x35, 0x3e, 0x78, 0x81, 0xff, 0x33, 0xaa, 0xe0, 0xac, 0xe1, 0x6b, 0x12,
+	0xab, 0x7d, 0x24, 0xfc, 0xd9, 0xf1, 0xbb, 0x58, 0x25, 0x0b, 0x0d, 0x33, 0x51, 0xa1, 0xd3, 0xe5,
+	0xbf, 0x57, 0xa7, 0x2c, 0x8d, 0xae, 0xcf, 0x5d, 0xcb, 0xcd, 0xfc, 0x16, 0xf8, 0x93, 0x4c, 0x54,
+	0xf0, 0xd5, 0x8b, 0x99, 0x0f, 0x4f, 0xce, 0x5f, 0x1d, 0x56, 0x5a, 0x79, 0xff, 0x7f, 0xdb, 0x10,
+	0x26, 0x4a, 0xc2, 0x19, 0x14, 0x8a, 0x21, 0x46, 0x79, 0xbd, 0x30, 0x3a, 0xee, 0x72, 0xe6, 0x17,
+	0xfa, 0xe1, 0xd4, 0x3d, 0xe8, 0x2c, 0xa3, 0xe8, 0x01, 0x8c, 0x97, 0x4d, 0x64, 0x94, 0x6b, 0xd8,
+	0xc8, 0x83, 0x8a, 0x43, 0xb8, 0x6e, 0xc9, 0xc7, 0x96, 0x49, 0xa2, 0x5c, 0x27, 0x8e, 0x49, 0xe2,
+	0x30, 0x71, 0xcc, 0x1e, 0x4c, 0x1a, 0x03, 0xe3, 0x28, 0xd7, 0x18, 0x3b, 0x0a, 0xe3, 0x38, 0xc4,
+	0xd8, 0x71, 0x9b, 0xb7, 0x75, 0xd9, 0xf0, 0x29, 0x00, 0x00, 0xff, 0xff, 0x84, 0x0f, 0xa0, 0x59,
+	0xee, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/mobile_device_constant.pb.go b/googleapis/ads/googleads/v3/resources/mobile_device_constant.pb.go
new file mode 100644
index 0000000..17ec853
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/mobile_device_constant.pb.go
@@ -0,0 +1,156 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/mobile_device_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A mobile device constant.
+type MobileDeviceConstant struct {
+	// The resource name of the mobile device constant.
+	// Mobile device constant resource names have the form:
+	//
+	// `mobileDeviceConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the mobile device constant.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the mobile device.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The manufacturer of the mobile device.
+	ManufacturerName *wrappers.StringValue `protobuf:"bytes,4,opt,name=manufacturer_name,json=manufacturerName,proto3" json:"manufacturer_name,omitempty"`
+	// The operating system of the mobile device.
+	OperatingSystemName *wrappers.StringValue `protobuf:"bytes,5,opt,name=operating_system_name,json=operatingSystemName,proto3" json:"operating_system_name,omitempty"`
+	// The type of mobile device.
+	Type                 enums.MobileDeviceTypeEnum_MobileDeviceType `protobuf:"varint,6,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.MobileDeviceTypeEnum_MobileDeviceType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *MobileDeviceConstant) Reset()         { *m = MobileDeviceConstant{} }
+func (m *MobileDeviceConstant) String() string { return proto.CompactTextString(m) }
+func (*MobileDeviceConstant) ProtoMessage()    {}
+func (*MobileDeviceConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c5b5d0a29b45d355, []int{0}
+}
+
+func (m *MobileDeviceConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MobileDeviceConstant.Unmarshal(m, b)
+}
+func (m *MobileDeviceConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MobileDeviceConstant.Marshal(b, m, deterministic)
+}
+func (m *MobileDeviceConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MobileDeviceConstant.Merge(m, src)
+}
+func (m *MobileDeviceConstant) XXX_Size() int {
+	return xxx_messageInfo_MobileDeviceConstant.Size(m)
+}
+func (m *MobileDeviceConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_MobileDeviceConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MobileDeviceConstant proto.InternalMessageInfo
+
+func (m *MobileDeviceConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MobileDeviceConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MobileDeviceConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *MobileDeviceConstant) GetManufacturerName() *wrappers.StringValue {
+	if m != nil {
+		return m.ManufacturerName
+	}
+	return nil
+}
+
+func (m *MobileDeviceConstant) GetOperatingSystemName() *wrappers.StringValue {
+	if m != nil {
+		return m.OperatingSystemName
+	}
+	return nil
+}
+
+func (m *MobileDeviceConstant) GetType() enums.MobileDeviceTypeEnum_MobileDeviceType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.MobileDeviceTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*MobileDeviceConstant)(nil), "google.ads.googleads.v3.resources.MobileDeviceConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/mobile_device_constant.proto", fileDescriptor_c5b5d0a29b45d355)
+}
+
+var fileDescriptor_c5b5d0a29b45d355 = []byte{
+	// 480 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x5d, 0x6b, 0x14, 0x31,
+	0x14, 0x65, 0x66, 0xd7, 0x82, 0xf1, 0x03, 0x1d, 0x15, 0xb6, 0xb5, 0xc8, 0x56, 0x29, 0x2c, 0x88,
+	0x19, 0xe9, 0x48, 0x1f, 0x22, 0x08, 0x53, 0x2b, 0xa5, 0x82, 0xb2, 0x6c, 0x65, 0x11, 0x59, 0x18,
+	0xb2, 0x33, 0xb7, 0x43, 0x60, 0x93, 0x0c, 0x49, 0x66, 0x65, 0x11, 0x5f, 0xfd, 0x21, 0x3e, 0xfa,
+	0x53, 0xfc, 0x29, 0x7d, 0xf7, 0x5d, 0x36, 0x99, 0x49, 0x17, 0xbb, 0xb5, 0x7d, 0x3b, 0x93, 0x7b,
+	0xce, 0xb9, 0x27, 0xf7, 0x66, 0xd0, 0x9b, 0x52, 0xca, 0x72, 0x06, 0x31, 0x2d, 0x74, 0xec, 0xe0,
+	0x12, 0xcd, 0x93, 0x58, 0x81, 0x96, 0xb5, 0xca, 0x41, 0xc7, 0x5c, 0x4e, 0xd9, 0x0c, 0xb2, 0x02,
+	0xe6, 0x2c, 0x87, 0x2c, 0x97, 0x42, 0x1b, 0x2a, 0x0c, 0xae, 0x94, 0x34, 0x32, 0xda, 0x71, 0x22,
+	0x4c, 0x0b, 0x8d, 0xbd, 0x1e, 0xcf, 0x13, 0xec, 0xf5, 0x5b, 0xfb, 0x97, 0xb5, 0x00, 0x51, 0xf3,
+	0x7f, 0xed, 0xcd, 0xa2, 0x02, 0x67, 0xbd, 0xb5, 0xd9, 0xea, 0x2a, 0xe6, 0xd3, 0x34, 0xa5, 0x27,
+	0x4d, 0xc9, 0x7e, 0x4d, 0xeb, 0xd3, 0xf8, 0xab, 0xa2, 0x55, 0x05, 0x4a, 0x37, 0xf5, 0xed, 0x15,
+	0x29, 0x15, 0x42, 0x1a, 0x6a, 0x98, 0x14, 0x4d, 0xf5, 0xe9, 0x9f, 0x0e, 0x7a, 0xf8, 0xc1, 0x76,
+	0x3d, 0xb4, 0x4d, 0xdf, 0x36, 0x57, 0x8a, 0x9e, 0xa1, 0x3b, 0x6d, 0xa3, 0x4c, 0x50, 0x0e, 0xbd,
+	0xa0, 0x1f, 0x0c, 0x6e, 0x8e, 0x6e, 0xb7, 0x87, 0x1f, 0x29, 0x87, 0xe8, 0x39, 0x0a, 0x59, 0xd1,
+	0x0b, 0xfb, 0xc1, 0xe0, 0xd6, 0xde, 0xe3, 0xe6, 0xce, 0xb8, 0x0d, 0x82, 0x8f, 0x85, 0xd9, 0x7f,
+	0x35, 0xa6, 0xb3, 0x1a, 0x46, 0x21, 0x2b, 0xa2, 0x97, 0xa8, 0x6b, 0x8d, 0x3a, 0x96, 0xbe, 0x7d,
+	0x81, 0x7e, 0x62, 0x14, 0x13, 0xa5, 0xe3, 0x5b, 0x66, 0x74, 0x8c, 0xee, 0x73, 0x2a, 0xea, 0x53,
+	0x9a, 0x9b, 0x5a, 0x81, 0x72, 0x39, 0xba, 0xd7, 0x90, 0xdf, 0x5b, 0x95, 0xd9, 0xa4, 0x43, 0xf4,
+	0x48, 0x56, 0xa0, 0xa8, 0x61, 0xa2, 0xcc, 0xf4, 0x42, 0x1b, 0xe0, 0xce, 0xee, 0xc6, 0x35, 0xec,
+	0x1e, 0x78, 0xe9, 0x89, 0x55, 0x5a, 0xc7, 0xcf, 0xa8, 0xbb, 0x5c, 0x50, 0x6f, 0xa3, 0x1f, 0x0c,
+	0xee, 0xee, 0x1d, 0xe2, 0xcb, 0x96, 0x6f, 0x37, 0x8b, 0x57, 0x67, 0xfc, 0x69, 0x51, 0xc1, 0x3b,
+	0x51, 0xf3, 0x0b, 0x87, 0x23, 0xeb, 0x48, 0xa6, 0x67, 0x69, 0x86, 0x5e, 0x9c, 0x9b, 0x34, 0xa8,
+	0x62, 0x1a, 0xe7, 0x92, 0xc7, 0x6b, 0xd7, 0x85, 0xf9, 0x9a, 0x53, 0x1d, 0x7f, 0x5b, 0xff, 0x60,
+	0xbf, 0x1f, 0xfc, 0x08, 0xd1, 0x6e, 0x2e, 0x39, 0xbe, 0xf2, 0xc9, 0x1e, 0x6c, 0xae, 0xeb, 0x37,
+	0x5c, 0x8e, 0x69, 0x18, 0x7c, 0x79, 0xdf, 0xe8, 0x4b, 0x39, 0xa3, 0xa2, 0xc4, 0x52, 0x95, 0x71,
+	0x09, 0xc2, 0x0e, 0x31, 0x3e, 0x8f, 0xfd, 0x9f, 0x3f, 0xea, 0xb5, 0x47, 0x3f, 0xc3, 0xce, 0x51,
+	0x9a, 0xfe, 0x0a, 0x77, 0x8e, 0x9c, 0x65, 0x5a, 0x68, 0xec, 0xe0, 0x12, 0x8d, 0x13, 0x3c, 0x6a,
+	0x99, 0xbf, 0x5b, 0xce, 0x24, 0x2d, 0xf4, 0xc4, 0x73, 0x26, 0xe3, 0x64, 0xe2, 0x39, 0x67, 0xe1,
+	0xae, 0x2b, 0x10, 0x92, 0x16, 0x9a, 0x10, 0xcf, 0x22, 0x64, 0x9c, 0x10, 0xe2, 0x79, 0xd3, 0x0d,
+	0x1b, 0x36, 0xf9, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xba, 0x32, 0x30, 0xd1, 0xfd, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/mutate_job.pb.go b/googleapis/ads/googleads/v3/resources/mutate_job.pb.go
new file mode 100644
index 0000000..84f4886
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/mutate_job.pb.go
@@ -0,0 +1,253 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/mutate_job.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A list of mutates being processed asynchronously. The mutates are uploaded
+// by the user. The mutates themselves aren't readable and the results of the
+// job can only be read using MutateJobService.ListMutateJobResults.
+type MutateJob struct {
+	// The resource name of the mutate job.
+	// Mutate job resource names have the form:
+	//
+	// `customers/{customer_id}/mutateJobs/{mutate_job_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// ID of this mutate job.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The next sequence token to use when adding operations. Only set when the
+	// mutate job status is PENDING.
+	NextAddSequenceToken *wrappers.StringValue `protobuf:"bytes,3,opt,name=next_add_sequence_token,json=nextAddSequenceToken,proto3" json:"next_add_sequence_token,omitempty"`
+	// Contains additional information about this mutate job.
+	Metadata *MutateJob_MutateJobMetadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	// Status of this mutate job.
+	Status enums.MutateJobStatusEnum_MutateJobStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.MutateJobStatusEnum_MutateJobStatus" json:"status,omitempty"`
+	// The resource name of the long-running operation that can be used to poll
+	// for completion. Only set when the mutate job status is RUNNING or DONE.
+	LongRunningOperation *wrappers.StringValue `protobuf:"bytes,6,opt,name=long_running_operation,json=longRunningOperation,proto3" json:"long_running_operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateJob) Reset()         { *m = MutateJob{} }
+func (m *MutateJob) String() string { return proto.CompactTextString(m) }
+func (*MutateJob) ProtoMessage()    {}
+func (*MutateJob) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0931df65c93d4349, []int{0}
+}
+
+func (m *MutateJob) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateJob.Unmarshal(m, b)
+}
+func (m *MutateJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateJob.Marshal(b, m, deterministic)
+}
+func (m *MutateJob) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateJob.Merge(m, src)
+}
+func (m *MutateJob) XXX_Size() int {
+	return xxx_messageInfo_MutateJob.Size(m)
+}
+func (m *MutateJob) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateJob.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateJob proto.InternalMessageInfo
+
+func (m *MutateJob) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MutateJob) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MutateJob) GetNextAddSequenceToken() *wrappers.StringValue {
+	if m != nil {
+		return m.NextAddSequenceToken
+	}
+	return nil
+}
+
+func (m *MutateJob) GetMetadata() *MutateJob_MutateJobMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func (m *MutateJob) GetStatus() enums.MutateJobStatusEnum_MutateJobStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.MutateJobStatusEnum_UNSPECIFIED
+}
+
+func (m *MutateJob) GetLongRunningOperation() *wrappers.StringValue {
+	if m != nil {
+		return m.LongRunningOperation
+	}
+	return nil
+}
+
+// Additional information about the mutate job. This message is also used as
+// metadata returned in mutate job Long Running Operations.
+type MutateJob_MutateJobMetadata struct {
+	// The time when this mutate job was created.
+	// Formatted as yyyy-mm-dd hh:mm:ss. Example: "2018-03-05 09:15:00"
+	CreationDateTime *wrappers.StringValue `protobuf:"bytes,1,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
+	// The time when this mutate job was completed.
+	// Formatted as yyyy-MM-dd HH:mm:ss. Example: "2018-03-05 09:16:00"
+	CompletionDateTime *wrappers.StringValue `protobuf:"bytes,2,opt,name=completion_date_time,json=completionDateTime,proto3" json:"completion_date_time,omitempty"`
+	// The fraction (between 0.0 and 1.0) of mutates that have been processed.
+	// This is empty if the job hasn't started running yet.
+	EstimatedCompletionRatio *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=estimated_completion_ratio,json=estimatedCompletionRatio,proto3" json:"estimated_completion_ratio,omitempty"`
+	// The number of mutate operations in the mutate job.
+	OperationCount *wrappers.Int64Value `protobuf:"bytes,4,opt,name=operation_count,json=operationCount,proto3" json:"operation_count,omitempty"`
+	// The number of mutate operations executed by the mutate job.
+	// Present only if the job has started running.
+	ExecutedOperationCount *wrappers.Int64Value `protobuf:"bytes,5,opt,name=executed_operation_count,json=executedOperationCount,proto3" json:"executed_operation_count,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
+	XXX_unrecognized       []byte               `json:"-"`
+	XXX_sizecache          int32                `json:"-"`
+}
+
+func (m *MutateJob_MutateJobMetadata) Reset()         { *m = MutateJob_MutateJobMetadata{} }
+func (m *MutateJob_MutateJobMetadata) String() string { return proto.CompactTextString(m) }
+func (*MutateJob_MutateJobMetadata) ProtoMessage()    {}
+func (*MutateJob_MutateJobMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0931df65c93d4349, []int{0, 0}
+}
+
+func (m *MutateJob_MutateJobMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateJob_MutateJobMetadata.Unmarshal(m, b)
+}
+func (m *MutateJob_MutateJobMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateJob_MutateJobMetadata.Marshal(b, m, deterministic)
+}
+func (m *MutateJob_MutateJobMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateJob_MutateJobMetadata.Merge(m, src)
+}
+func (m *MutateJob_MutateJobMetadata) XXX_Size() int {
+	return xxx_messageInfo_MutateJob_MutateJobMetadata.Size(m)
+}
+func (m *MutateJob_MutateJobMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateJob_MutateJobMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateJob_MutateJobMetadata proto.InternalMessageInfo
+
+func (m *MutateJob_MutateJobMetadata) GetCreationDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDateTime
+	}
+	return nil
+}
+
+func (m *MutateJob_MutateJobMetadata) GetCompletionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CompletionDateTime
+	}
+	return nil
+}
+
+func (m *MutateJob_MutateJobMetadata) GetEstimatedCompletionRatio() *wrappers.DoubleValue {
+	if m != nil {
+		return m.EstimatedCompletionRatio
+	}
+	return nil
+}
+
+func (m *MutateJob_MutateJobMetadata) GetOperationCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.OperationCount
+	}
+	return nil
+}
+
+func (m *MutateJob_MutateJobMetadata) GetExecutedOperationCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.ExecutedOperationCount
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*MutateJob)(nil), "google.ads.googleads.v3.resources.MutateJob")
+	proto.RegisterType((*MutateJob_MutateJobMetadata)(nil), "google.ads.googleads.v3.resources.MutateJob.MutateJobMetadata")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/mutate_job.proto", fileDescriptor_0931df65c93d4349)
+}
+
+var fileDescriptor_0931df65c93d4349 = []byte{
+	// 630 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0x80, 0xd9, 0xd4, 0x56, 0x3b, 0x6a, 0xd5, 0xa1, 0xd4, 0xb8, 0x16, 0x69, 0x2b, 0x85, 0x82,
+	0x32, 0x81, 0xae, 0x7a, 0x11, 0x41, 0x48, 0x5b, 0x29, 0x2e, 0xf4, 0x87, 0x6c, 0xbb, 0x17, 0xcb,
+	0x42, 0x98, 0xcd, 0x1c, 0x43, 0x74, 0x33, 0x13, 0x33, 0x33, 0xb5, 0x50, 0xfa, 0x32, 0x5e, 0x89,
+	0x4f, 0xe1, 0xb5, 0x8f, 0xd2, 0x57, 0xf0, 0x46, 0xf2, 0x37, 0xa9, 0x2d, 0xdb, 0xed, 0xdd, 0xd9,
+	0x9d, 0xf3, 0x7d, 0x73, 0xce, 0xcc, 0xc9, 0xa0, 0xcd, 0x48, 0x88, 0x68, 0x0c, 0x0e, 0x65, 0xd2,
+	0x29, 0xc3, 0x3c, 0x3a, 0xe9, 0x38, 0x19, 0x48, 0xa1, 0xb3, 0x10, 0xa4, 0x93, 0x68, 0x45, 0x15,
+	0x04, 0x5f, 0xc4, 0x88, 0xa4, 0x99, 0x50, 0x02, 0xaf, 0x96, 0x89, 0x84, 0x32, 0x49, 0x0c, 0x43,
+	0x4e, 0x3a, 0xc4, 0x30, 0xed, 0xb7, 0x93, 0xb4, 0xc0, 0x75, 0x72, 0x59, 0x19, 0x48, 0x45, 0x95,
+	0x96, 0xa5, 0xb9, 0xfd, 0xac, 0xc6, 0xd2, 0xd8, 0x14, 0x50, 0x2d, 0xbd, 0xa8, 0x96, 0x8a, 0x5f,
+	0x23, 0xfd, 0xd9, 0xf9, 0x9e, 0xd1, 0x34, 0x85, 0xac, 0x46, 0x97, 0x2f, 0xa1, 0x94, 0x73, 0xa1,
+	0xa8, 0x8a, 0x05, 0xaf, 0x56, 0xd7, 0x7e, 0xdf, 0x45, 0xf3, 0x7b, 0xc5, 0xa6, 0x5d, 0x31, 0xc2,
+	0x2f, 0xd1, 0xc3, 0xda, 0x1e, 0x70, 0x9a, 0x80, 0xdd, 0x5a, 0x69, 0x6d, 0xcc, 0xfb, 0x0f, 0xea,
+	0x3f, 0xf7, 0x69, 0x02, 0xf8, 0x15, 0xb2, 0x62, 0x66, 0x5b, 0x2b, 0xad, 0x8d, 0xfb, 0x9b, 0xcf,
+	0xab, 0x3e, 0x49, 0xbd, 0x3b, 0xf9, 0xc4, 0xd5, 0xbb, 0x37, 0x7d, 0x3a, 0xd6, 0xe0, 0x5b, 0x31,
+	0xc3, 0x3d, 0xf4, 0x94, 0xc3, 0xa9, 0x0a, 0x28, 0x63, 0x81, 0x84, 0x6f, 0x1a, 0x78, 0x08, 0x81,
+	0x12, 0x5f, 0x81, 0xdb, 0x33, 0x85, 0x61, 0xf9, 0x9a, 0xa1, 0xa7, 0xb2, 0x98, 0x47, 0xa5, 0x62,
+	0x31, 0x87, 0x3d, 0xc6, 0x7a, 0x15, 0x7a, 0x94, 0x93, 0x78, 0x80, 0xee, 0x25, 0xa0, 0x28, 0xa3,
+	0x8a, 0xda, 0x77, 0x0a, 0xcb, 0x07, 0x32, 0xf5, 0xe8, 0x89, 0x69, 0xb3, 0x89, 0xf6, 0x2a, 0x8b,
+	0x6f, 0x7c, 0x78, 0x80, 0xe6, 0xca, 0x93, 0xb7, 0x67, 0x57, 0x5a, 0x1b, 0x0b, 0x9b, 0x5b, 0x13,
+	0xcd, 0xc5, 0x8d, 0x35, 0xae, 0x5e, 0x41, 0x7d, 0xe4, 0x3a, 0xb9, 0xfa, 0x9f, 0x5f, 0x19, 0xb1,
+	0x8f, 0x96, 0xc6, 0x82, 0x47, 0x41, 0xa6, 0x39, 0x8f, 0x79, 0x14, 0x88, 0x14, 0xb2, 0xe2, 0x36,
+	0xec, 0xb9, 0xdb, 0x9c, 0x45, 0xce, 0xfa, 0x25, 0x7a, 0x50, 0x93, 0xed, 0x9f, 0x33, 0xe8, 0xc9,
+	0xb5, 0x7e, 0x70, 0x17, 0xe1, 0x30, 0x83, 0x22, 0x23, 0x60, 0xf9, 0x44, 0xa9, 0xb8, 0xba, 0xcd,
+	0x69, 0xbb, 0x3c, 0xae, 0xb9, 0x1d, 0xaa, 0xe0, 0x28, 0x4e, 0x00, 0xef, 0xa3, 0xc5, 0x50, 0x24,
+	0xe9, 0x18, 0xae, 0xd8, 0xac, 0x5b, 0xd8, 0x70, 0x43, 0x1a, 0xdf, 0x00, 0xb5, 0x41, 0xaa, 0x38,
+	0xa1, 0x0a, 0x58, 0x70, 0xc9, 0x5c, 0x34, 0x34, 0x71, 0x2a, 0x76, 0x84, 0x1e, 0x8d, 0xa1, 0xb4,
+	0xda, 0x86, 0xdf, 0x36, 0xb8, 0x9f, 0xd3, 0x78, 0x07, 0x3d, 0x32, 0x87, 0x1a, 0x84, 0x42, 0x73,
+	0x55, 0x0d, 0xc8, 0x8d, 0x83, 0xba, 0x60, 0x98, 0xed, 0x1c, 0xc1, 0xc7, 0xc8, 0x86, 0x53, 0x08,
+	0x75, 0x5e, 0xe0, 0x55, 0xdd, 0xec, 0x74, 0xdd, 0x52, 0x0d, 0x1f, 0xfc, 0xa7, 0x75, 0x8f, 0x2f,
+	0x3c, 0x1f, 0xad, 0x35, 0x33, 0x54, 0x45, 0x69, 0x2c, 0x49, 0x28, 0x12, 0xa7, 0xf9, 0x0c, 0x5f,
+	0x87, 0x5a, 0x2a, 0x91, 0x40, 0x26, 0x9d, 0xb3, 0x3a, 0x3c, 0xaf, 0xde, 0x86, 0xae, 0x18, 0x49,
+	0xe7, 0xac, 0x79, 0x27, 0xce, 0xb7, 0xfe, 0xb6, 0xd0, 0x7a, 0x28, 0x92, 0xe9, 0x5f, 0xc0, 0xd6,
+	0x82, 0xd9, 0xe2, 0x30, 0x2f, 0xfb, 0xb0, 0x35, 0xe8, 0x56, 0x50, 0x24, 0xc6, 0x94, 0x47, 0x44,
+	0x64, 0x91, 0x13, 0x01, 0x2f, 0x9a, 0x72, 0x9a, 0xf2, 0x6e, 0x78, 0x04, 0xdf, 0x9b, 0xe8, 0x87,
+	0x35, 0xb3, 0xeb, 0x79, 0xbf, 0xac, 0xd5, 0xdd, 0x52, 0xe9, 0x31, 0x49, 0xca, 0x30, 0x8f, 0xfa,
+	0x1d, 0xe2, 0xd7, 0x99, 0x7f, 0xea, 0x9c, 0xa1, 0xc7, 0xe4, 0xd0, 0xe4, 0x0c, 0xfb, 0x9d, 0xa1,
+	0xc9, 0xb9, 0xb0, 0xd6, 0xcb, 0x05, 0xd7, 0xf5, 0x98, 0x74, 0x5d, 0x93, 0xe5, 0xba, 0xfd, 0x8e,
+	0xeb, 0x9a, 0xbc, 0xd1, 0x5c, 0x51, 0x6c, 0xe7, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xbf,
+	0xaf, 0xac, 0xb0, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/operating_system_version_constant.pb.go b/googleapis/ads/googleads/v3/resources/operating_system_version_constant.pb.go
new file mode 100644
index 0000000..970315c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/operating_system_version_constant.pb.go
@@ -0,0 +1,160 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/operating_system_version_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A mobile operating system version or a range of versions, depending on
+// `operator_type`. List of available mobile platforms at
+// https://developers.google.com/adwords/api/docs/appendix/codes-formats#mobile-platforms
+type OperatingSystemVersionConstant struct {
+	// The resource name of the operating system version constant.
+	// Operating system version constant resource names have the form:
+	//
+	// `operatingSystemVersionConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the operating system version.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Name of the operating system.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The OS Major Version number.
+	OsMajorVersion *wrappers.Int32Value `protobuf:"bytes,4,opt,name=os_major_version,json=osMajorVersion,proto3" json:"os_major_version,omitempty"`
+	// The OS Minor Version number.
+	OsMinorVersion *wrappers.Int32Value `protobuf:"bytes,5,opt,name=os_minor_version,json=osMinorVersion,proto3" json:"os_minor_version,omitempty"`
+	// Determines whether this constant represents a single version or a range of
+	// versions.
+	OperatorType         enums.OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType `protobuf:"varint,6,opt,name=operator_type,json=operatorType,proto3,enum=google.ads.googleads.v3.enums.OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType" json:"operator_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                        `json:"-"`
+	XXX_unrecognized     []byte                                                                          `json:"-"`
+	XXX_sizecache        int32                                                                           `json:"-"`
+}
+
+func (m *OperatingSystemVersionConstant) Reset()         { *m = OperatingSystemVersionConstant{} }
+func (m *OperatingSystemVersionConstant) String() string { return proto.CompactTextString(m) }
+func (*OperatingSystemVersionConstant) ProtoMessage()    {}
+func (*OperatingSystemVersionConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_246e8d7d26135833, []int{0}
+}
+
+func (m *OperatingSystemVersionConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperatingSystemVersionConstant.Unmarshal(m, b)
+}
+func (m *OperatingSystemVersionConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperatingSystemVersionConstant.Marshal(b, m, deterministic)
+}
+func (m *OperatingSystemVersionConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperatingSystemVersionConstant.Merge(m, src)
+}
+func (m *OperatingSystemVersionConstant) XXX_Size() int {
+	return xxx_messageInfo_OperatingSystemVersionConstant.Size(m)
+}
+func (m *OperatingSystemVersionConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperatingSystemVersionConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperatingSystemVersionConstant proto.InternalMessageInfo
+
+func (m *OperatingSystemVersionConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *OperatingSystemVersionConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *OperatingSystemVersionConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *OperatingSystemVersionConstant) GetOsMajorVersion() *wrappers.Int32Value {
+	if m != nil {
+		return m.OsMajorVersion
+	}
+	return nil
+}
+
+func (m *OperatingSystemVersionConstant) GetOsMinorVersion() *wrappers.Int32Value {
+	if m != nil {
+		return m.OsMinorVersion
+	}
+	return nil
+}
+
+func (m *OperatingSystemVersionConstant) GetOperatorType() enums.OperatingSystemVersionOperatorTypeEnum_OperatingSystemVersionOperatorType {
+	if m != nil {
+		return m.OperatorType
+	}
+	return enums.OperatingSystemVersionOperatorTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*OperatingSystemVersionConstant)(nil), "google.ads.googleads.v3.resources.OperatingSystemVersionConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/operating_system_version_constant.proto", fileDescriptor_246e8d7d26135833)
+}
+
+var fileDescriptor_246e8d7d26135833 = []byte{
+	// 494 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0x26, 0xe9, 0x5a, 0x30, 0xb6, 0x45, 0x72, 0xb5, 0xd6, 0x52, 0xb6, 0x96, 0xc2, 0x82, 0x30,
+	0x23, 0x1b, 0x51, 0x18, 0xaf, 0xd2, 0x52, 0x4a, 0x05, 0x6d, 0xd9, 0x4a, 0x2e, 0x64, 0x21, 0x4c,
+	0x37, 0x63, 0x1c, 0xd9, 0xcc, 0x09, 0x33, 0x93, 0x95, 0x45, 0x14, 0x7c, 0x00, 0xc1, 0x67, 0xf0,
+	0xd2, 0x07, 0xf1, 0xc2, 0x47, 0xe9, 0x53, 0x48, 0x32, 0x33, 0xe9, 0x8a, 0xee, 0xcf, 0xdd, 0x99,
+	0x7c, 0xdf, 0xf9, 0xbe, 0x6f, 0xe6, 0xe4, 0x04, 0xe7, 0x39, 0x40, 0x3e, 0x61, 0x98, 0x66, 0x0a,
+	0x9b, 0xb2, 0xae, 0xa6, 0x11, 0x96, 0x4c, 0x41, 0x25, 0xc7, 0x4c, 0x61, 0x28, 0x99, 0xa4, 0x9a,
+	0x8b, 0x3c, 0x55, 0x33, 0xa5, 0x59, 0x91, 0x4e, 0x99, 0x54, 0x1c, 0x44, 0x3a, 0x06, 0xa1, 0x34,
+	0x15, 0x1a, 0x95, 0x12, 0x34, 0x84, 0x07, 0xa6, 0x1f, 0xd1, 0x4c, 0xa1, 0x56, 0x0a, 0x4d, 0x23,
+	0xd4, 0x4a, 0xed, 0xbe, 0x5c, 0xe4, 0xc6, 0x44, 0x55, 0x2c, 0x71, 0x32, 0x00, 0xc8, 0x54, 0xcf,
+	0x4a, 0x66, 0xec, 0x76, 0x1f, 0x38, 0xad, 0x92, 0xb7, 0x61, 0x2d, 0xb4, 0x6f, 0xa1, 0xe6, 0x74,
+	0x5d, 0xbd, 0xc3, 0x1f, 0x25, 0x2d, 0x4b, 0x26, 0x95, 0xc5, 0xf7, 0xe6, 0x5a, 0xa9, 0x10, 0xa0,
+	0xa9, 0xe6, 0x20, 0x2c, 0xfa, 0xe8, 0x57, 0x27, 0xd8, 0xbf, 0x70, 0x49, 0xae, 0x9a, 0x20, 0x89,
+	0xc9, 0x71, 0x62, 0x2f, 0x1c, 0x1e, 0x06, 0xdb, 0xce, 0x32, 0x15, 0xb4, 0x60, 0x5d, 0xaf, 0xe7,
+	0xf5, 0xef, 0x0e, 0xb7, 0xdc, 0xc7, 0xd7, 0xb4, 0x60, 0xe1, 0xe3, 0xc0, 0xe7, 0x59, 0xd7, 0xef,
+	0x79, 0xfd, 0x7b, 0x83, 0x87, 0xf6, 0x45, 0x90, 0x8b, 0x84, 0xce, 0x85, 0x7e, 0xf6, 0x34, 0xa1,
+	0x93, 0x8a, 0x0d, 0x7d, 0x9e, 0x85, 0x4f, 0x82, 0x4e, 0x23, 0xb4, 0xd1, 0xd0, 0xf7, 0xfe, 0xa1,
+	0x5f, 0x69, 0xc9, 0x45, 0x6e, 0xf8, 0x0d, 0x33, 0x3c, 0x0d, 0xee, 0x83, 0x4a, 0x0b, 0xfa, 0x01,
+	0xa4, 0x7b, 0xa7, 0x6e, 0x67, 0xb1, 0x59, 0x34, 0x30, 0xcd, 0x3b, 0xa0, 0x5e, 0xd5, 0x3d, 0xf6,
+	0x4a, 0x4e, 0x86, 0x8b, 0x39, 0x99, 0x3b, 0xeb, 0xc9, 0xd4, 0x3d, 0x4e, 0xe6, 0x9b, 0x17, 0x6c,
+	0xff, 0x35, 0xa5, 0xee, 0x66, 0xcf, 0xeb, 0xef, 0x0c, 0xde, 0xa3, 0x45, 0x7f, 0x45, 0x33, 0x72,
+	0xf4, 0xff, 0x87, 0xbe, 0xb0, 0x4a, 0x6f, 0x66, 0x25, 0x3b, 0x15, 0x55, 0xb1, 0x06, 0x6d, 0xb8,
+	0x05, 0x73, 0x27, 0xf2, 0xd5, 0xbb, 0x89, 0xbf, 0x04, 0xcf, 0x6f, 0x1d, 0x6d, 0x55, 0x72, 0x85,
+	0xc6, 0x50, 0xe0, 0x15, 0x03, 0x3e, 0x81, 0xa5, 0xb8, 0xc2, 0x9f, 0x56, 0x6e, 0xc5, 0xe7, 0xe3,
+	0xef, 0x7e, 0x70, 0x34, 0x86, 0x02, 0xad, 0xdc, 0x8b, 0xe3, 0xc3, 0xe5, 0x71, 0x2e, 0xeb, 0x01,
+	0x5c, 0x7a, 0x6f, 0xed, 0xfa, 0xa0, 0x1c, 0x26, 0x54, 0xe4, 0x08, 0x64, 0x8e, 0x73, 0x26, 0x9a,
+	0xf1, 0xe0, 0xdb, 0xfb, 0x2d, 0xd9, 0xe5, 0x17, 0x6d, 0xf5, 0xc3, 0xdf, 0x38, 0x8b, 0xe3, 0x9f,
+	0xfe, 0xc1, 0x99, 0x91, 0x8c, 0x33, 0x85, 0x4c, 0x59, 0x57, 0x49, 0x84, 0x86, 0x8e, 0xf9, 0xdb,
+	0x71, 0x46, 0x71, 0xa6, 0x46, 0x2d, 0x67, 0x94, 0x44, 0xa3, 0x96, 0x73, 0xe3, 0x1f, 0x19, 0x80,
+	0x90, 0x38, 0x53, 0x84, 0xb4, 0x2c, 0x42, 0x92, 0x88, 0x90, 0x96, 0x77, 0xbd, 0xd9, 0x84, 0x8d,
+	0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x12, 0x97, 0x8b, 0x9a, 0x77, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/paid_organic_search_term_view.pb.go b/googleapis/ads/googleads/v3/resources/paid_organic_search_term_view.pb.go
new file mode 100644
index 0000000..9585535
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/paid_organic_search_term_view.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/paid_organic_search_term_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A paid organic search term view providing a view of search stats across
+// ads and organic listings aggregated by search term at the ad group level.
+type PaidOrganicSearchTermView struct {
+	// The resource name of the search term view.
+	// Search term view resource names have the form:
+	//
+	// `customers/{customer_id}/paidOrganicSearchTermViews/{campaign_id}~
+	// {ad_group_id}~{URL-base64 search term}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The search term.
+	SearchTerm           *wrappers.StringValue `protobuf:"bytes,2,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PaidOrganicSearchTermView) Reset()         { *m = PaidOrganicSearchTermView{} }
+func (m *PaidOrganicSearchTermView) String() string { return proto.CompactTextString(m) }
+func (*PaidOrganicSearchTermView) ProtoMessage()    {}
+func (*PaidOrganicSearchTermView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9878fc316cec3005, []int{0}
+}
+
+func (m *PaidOrganicSearchTermView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaidOrganicSearchTermView.Unmarshal(m, b)
+}
+func (m *PaidOrganicSearchTermView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaidOrganicSearchTermView.Marshal(b, m, deterministic)
+}
+func (m *PaidOrganicSearchTermView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaidOrganicSearchTermView.Merge(m, src)
+}
+func (m *PaidOrganicSearchTermView) XXX_Size() int {
+	return xxx_messageInfo_PaidOrganicSearchTermView.Size(m)
+}
+func (m *PaidOrganicSearchTermView) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaidOrganicSearchTermView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaidOrganicSearchTermView proto.InternalMessageInfo
+
+func (m *PaidOrganicSearchTermView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *PaidOrganicSearchTermView) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PaidOrganicSearchTermView)(nil), "google.ads.googleads.v3.resources.PaidOrganicSearchTermView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/paid_organic_search_term_view.proto", fileDescriptor_9878fc316cec3005)
+}
+
+var fileDescriptor_9878fc316cec3005 = []byte{
+	// 387 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x41, 0x6b, 0xfa, 0x30,
+	0x1c, 0xa5, 0xfd, 0xc3, 0x1f, 0xfe, 0xf5, 0xbf, 0x8b, 0x27, 0x15, 0x11, 0xdd, 0x10, 0x3c, 0x25,
+	0x60, 0x6f, 0x19, 0x3b, 0x54, 0x18, 0xc2, 0x0e, 0x53, 0x74, 0xf4, 0x30, 0x0a, 0x25, 0xb6, 0x59,
+	0x16, 0xb0, 0x49, 0x49, 0x5a, 0x3d, 0x88, 0xc7, 0x1d, 0x86, 0xdf, 0x62, 0xc7, 0x7d, 0x94, 0x7d,
+	0x14, 0x3f, 0xc5, 0xb0, 0x6d, 0xa2, 0x87, 0xe9, 0x6e, 0xaf, 0x7d, 0xef, 0xf7, 0x7e, 0xef, 0x25,
+	0x71, 0xee, 0xa9, 0x10, 0x74, 0x49, 0x20, 0x8e, 0x15, 0x2c, 0xe1, 0x01, 0xad, 0x5c, 0x28, 0x89,
+	0x12, 0xb9, 0x8c, 0x88, 0x82, 0x29, 0x66, 0x71, 0x28, 0x24, 0xc5, 0x9c, 0x45, 0xa1, 0x22, 0x58,
+	0x46, 0xaf, 0x61, 0x46, 0x64, 0x12, 0xae, 0x18, 0x59, 0x83, 0x54, 0x8a, 0x4c, 0xd4, 0x7b, 0xe5,
+	0x2c, 0xc0, 0xb1, 0x02, 0xc6, 0x06, 0xac, 0x5c, 0x60, 0x6c, 0x5a, 0x4d, 0xbd, 0x29, 0x65, 0xc6,
+	0xbc, 0x9c, 0x6e, 0x75, 0x2a, 0xaa, 0xf8, 0x5a, 0xe4, 0x2f, 0x70, 0x2d, 0x71, 0x9a, 0x12, 0xa9,
+	0x2a, 0xbe, 0x7d, 0x32, 0x8a, 0x39, 0x17, 0x19, 0xce, 0x98, 0xe0, 0x15, 0x7b, 0xbd, 0xb3, 0x9d,
+	0xe6, 0x14, 0xb3, 0x78, 0x52, 0x46, 0x9c, 0x17, 0x09, 0x9f, 0x88, 0x4c, 0x7c, 0x46, 0xd6, 0xf5,
+	0x1b, 0xe7, 0x4a, 0x6f, 0x0b, 0x39, 0x4e, 0x48, 0xc3, 0xea, 0x5a, 0x83, 0x7f, 0xb3, 0xff, 0xfa,
+	0xe7, 0x23, 0x4e, 0x48, 0xfd, 0xce, 0xa9, 0x9d, 0x14, 0x6b, 0xd8, 0x5d, 0x6b, 0x50, 0x1b, 0xb6,
+	0xab, 0x26, 0x40, 0xc7, 0x02, 0xf3, 0x4c, 0x32, 0x4e, 0x7d, 0xbc, 0xcc, 0xc9, 0xcc, 0x51, 0x66,
+	0x0f, 0x7a, 0xb7, 0xf6, 0xde, 0x9b, 0xe5, 0x0c, 0x8f, 0xcd, 0x2b, 0x94, 0x32, 0x05, 0x22, 0x91,
+	0xc0, 0xf3, 0xf1, 0x26, 0x51, 0xae, 0x32, 0x91, 0x10, 0xa9, 0xe0, 0x46, 0xc3, 0x6d, 0x71, 0xe4,
+	0x3f, 0xea, 0x15, 0xdc, 0x5c, 0xbc, 0x8e, 0xed, 0x68, 0x67, 0x3b, 0xfd, 0x48, 0x24, 0xe0, 0xd7,
+	0x0b, 0x19, 0x75, 0xce, 0xa6, 0x9a, 0x1e, 0x0a, 0x4f, 0xad, 0xe7, 0x87, 0xca, 0x84, 0x8a, 0x25,
+	0xe6, 0x14, 0x08, 0x49, 0x21, 0x25, 0xbc, 0x38, 0x0e, 0x78, 0x6c, 0x78, 0xe1, 0xed, 0xdc, 0x1a,
+	0xf4, 0x61, 0xff, 0x19, 0x7b, 0xde, 0xa7, 0xdd, 0x1b, 0x97, 0x96, 0x5e, 0xac, 0x40, 0x09, 0x0f,
+	0xc8, 0x77, 0xc1, 0x4c, 0x2b, 0xbf, 0xb4, 0x26, 0xf0, 0x62, 0x15, 0x18, 0x4d, 0xe0, 0xbb, 0x81,
+	0xd1, 0xec, 0xed, 0x7e, 0x49, 0x20, 0xe4, 0xc5, 0x0a, 0x21, 0xa3, 0x42, 0xc8, 0x77, 0x11, 0x32,
+	0xba, 0xc5, 0xdf, 0x22, 0xac, 0xfb, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x3e, 0x5c, 0xf8, 0xe7,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/parental_status_view.pb.go b/googleapis/ads/googleads/v3/resources/parental_status_view.pb.go
new file mode 100644
index 0000000..e6998bb
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/parental_status_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/parental_status_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A parental status view.
+type ParentalStatusView struct {
+	// The resource name of the parental status view.
+	// Parental Status view resource names have the form:
+	//
+	// `customers/{customer_id}/parentalStatusViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParentalStatusView) Reset()         { *m = ParentalStatusView{} }
+func (m *ParentalStatusView) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusView) ProtoMessage()    {}
+func (*ParentalStatusView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_64f32f4c8c47347e, []int{0}
+}
+
+func (m *ParentalStatusView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusView.Unmarshal(m, b)
+}
+func (m *ParentalStatusView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusView.Marshal(b, m, deterministic)
+}
+func (m *ParentalStatusView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusView.Merge(m, src)
+}
+func (m *ParentalStatusView) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusView.Size(m)
+}
+func (m *ParentalStatusView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusView proto.InternalMessageInfo
+
+func (m *ParentalStatusView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ParentalStatusView)(nil), "google.ads.googleads.v3.resources.ParentalStatusView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/parental_status_view.proto", fileDescriptor_64f32f4c8c47347e)
+}
+
+var fileDescriptor_64f32f4c8c47347e = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0x49, 0x7e, 0xf8, 0xc1, 0xa0, 0x9b, 0x6e, 0xd4, 0xe2, 0xc2, 0x2a, 0x05, 0x41, 0x98,
+	0x59, 0x64, 0x37, 0x0a, 0x32, 0xdd, 0x14, 0x5c, 0x48, 0xa9, 0x90, 0x85, 0x04, 0xca, 0x98, 0x0c,
+	0x43, 0xa0, 0x99, 0x1b, 0xe7, 0x4e, 0xdb, 0x45, 0xe9, 0xce, 0x27, 0x71, 0x29, 0x3e, 0x89, 0x8f,
+	0xd2, 0xa7, 0x90, 0x76, 0x3a, 0x13, 0xc1, 0xa2, 0xbb, 0x43, 0xee, 0x77, 0xce, 0x99, 0x7b, 0x93,
+	0xdc, 0x2a, 0x00, 0x35, 0x95, 0x54, 0x94, 0x48, 0x9d, 0xdc, 0xa8, 0x79, 0x4a, 0x8d, 0x44, 0x98,
+	0x99, 0x42, 0x22, 0x6d, 0x84, 0x91, 0xda, 0x8a, 0xe9, 0x04, 0xad, 0xb0, 0x33, 0x9c, 0xcc, 0x2b,
+	0xb9, 0x20, 0x8d, 0x01, 0x0b, 0x9d, 0x9e, 0xb3, 0x10, 0x51, 0x22, 0x09, 0x6e, 0x32, 0x4f, 0x49,
+	0x70, 0x77, 0x4f, 0x7d, 0x41, 0x53, 0x85, 0x4c, 0xe7, 0xee, 0x9e, 0x7d, 0x1b, 0x09, 0xad, 0xc1,
+	0x0a, 0x5b, 0x81, 0x46, 0x37, 0xbd, 0xf8, 0x88, 0x92, 0xce, 0x68, 0x57, 0xfd, 0xb8, 0x6d, 0xce,
+	0x2a, 0xb9, 0xe8, 0x5c, 0x26, 0x47, 0x3e, 0x66, 0xa2, 0x45, 0x2d, 0x4f, 0xa2, 0xf3, 0xe8, 0xea,
+	0x60, 0x7c, 0xe8, 0x3f, 0x3e, 0x88, 0x5a, 0xb2, 0x97, 0x35, 0xd7, 0xc9, 0x75, 0xfb, 0xa2, 0x9d,
+	0x6a, 0x2a, 0x24, 0x05, 0xd4, 0x74, 0x4f, 0xec, 0x5d, 0x31, 0x43, 0x0b, 0xb5, 0x34, 0x48, 0x97,
+	0x5e, 0xae, 0xc2, 0xea, 0x2d, 0x88, 0x74, 0xb9, 0xef, 0x1e, 0xab, 0xc1, 0x6b, 0x9c, 0xf4, 0x0b,
+	0xa8, 0xc9, 0x9f, 0x17, 0x19, 0x1c, 0xff, 0xac, 0x1f, 0x6d, 0x36, 0x1e, 0x45, 0x4f, 0xf7, 0x3b,
+	0xb7, 0x82, 0xa9, 0xd0, 0x8a, 0x80, 0x51, 0x54, 0x49, 0xbd, 0xbd, 0x07, 0x6d, 0x77, 0xf8, 0xe5,
+	0x67, 0xdd, 0x04, 0xf5, 0x16, 0xff, 0x1b, 0x72, 0xfe, 0x1e, 0xf7, 0x86, 0x2e, 0x92, 0x97, 0x48,
+	0x9c, 0xdc, 0xa8, 0x2c, 0x25, 0x63, 0x4f, 0x7e, 0x7a, 0x26, 0xe7, 0x25, 0xe6, 0x81, 0xc9, 0xb3,
+	0x34, 0x0f, 0xcc, 0x3a, 0xee, 0xbb, 0x01, 0x63, 0xbc, 0x44, 0xc6, 0x02, 0xc5, 0x58, 0x96, 0x32,
+	0x16, 0xb8, 0xe7, 0xff, 0xdb, 0xc7, 0xa6, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x56, 0xcd,
+	0x1c, 0x58, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/payments_account.pb.go b/googleapis/ads/googleads/v3/resources/payments_account.pb.go
new file mode 100644
index 0000000..8adf1f9
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/payments_account.pb.go
@@ -0,0 +1,157 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/payments_account.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A payments account, which can be used to set up billing for an Ads customer.
+type PaymentsAccount struct {
+	// The resource name of the payments account.
+	// PaymentsAccount resource names have the form:
+	//
+	// `customers/{customer_id}/paymentsAccounts/{payments_account_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// A 16 digit ID used to identify a payments account.
+	PaymentsAccountId *wrappers.StringValue `protobuf:"bytes,2,opt,name=payments_account_id,json=paymentsAccountId,proto3" json:"payments_account_id,omitempty"`
+	// The name of the payments account.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The currency code of the payments account.
+	// A subset of the currency codes derived from the ISO 4217 standard is
+	// supported.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,4,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// A 12 digit ID used to identify the payments profile associated with the
+	// payments account.
+	PaymentsProfileId *wrappers.StringValue `protobuf:"bytes,5,opt,name=payments_profile_id,json=paymentsProfileId,proto3" json:"payments_profile_id,omitempty"`
+	// A secondary payments profile ID present in uncommon situations, e.g.
+	// when a sequential liability agreement has been arranged.
+	SecondaryPaymentsProfileId *wrappers.StringValue `protobuf:"bytes,6,opt,name=secondary_payments_profile_id,json=secondaryPaymentsProfileId,proto3" json:"secondary_payments_profile_id,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
+	XXX_unrecognized           []byte                `json:"-"`
+	XXX_sizecache              int32                 `json:"-"`
+}
+
+func (m *PaymentsAccount) Reset()         { *m = PaymentsAccount{} }
+func (m *PaymentsAccount) String() string { return proto.CompactTextString(m) }
+func (*PaymentsAccount) ProtoMessage()    {}
+func (*PaymentsAccount) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37c21bb407f87d61, []int{0}
+}
+
+func (m *PaymentsAccount) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentsAccount.Unmarshal(m, b)
+}
+func (m *PaymentsAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentsAccount.Marshal(b, m, deterministic)
+}
+func (m *PaymentsAccount) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentsAccount.Merge(m, src)
+}
+func (m *PaymentsAccount) XXX_Size() int {
+	return xxx_messageInfo_PaymentsAccount.Size(m)
+}
+func (m *PaymentsAccount) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentsAccount.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaymentsAccount proto.InternalMessageInfo
+
+func (m *PaymentsAccount) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *PaymentsAccount) GetPaymentsAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountId
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileId
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetSecondaryPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.SecondaryPaymentsProfileId
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PaymentsAccount)(nil), "google.ads.googleads.v3.resources.PaymentsAccount")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/payments_account.proto", fileDescriptor_37c21bb407f87d61)
+}
+
+var fileDescriptor_37c21bb407f87d61 = []byte{
+	// 446 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x41, 0x6b, 0xd4, 0x40,
+	0x18, 0x65, 0xd3, 0xb5, 0xe0, 0xd8, 0x22, 0x46, 0x0f, 0xeb, 0x52, 0xa5, 0x55, 0x0a, 0x7b, 0x9a,
+	0x11, 0x73, 0x29, 0xe3, 0x29, 0xf5, 0x50, 0x2a, 0x22, 0x61, 0x85, 0x3d, 0xc8, 0x42, 0x98, 0xce,
+	0x4c, 0x43, 0x60, 0x33, 0xdf, 0x30, 0x93, 0x54, 0x96, 0xd2, 0x83, 0x3f, 0xc1, 0xbf, 0xe0, 0xd1,
+	0x9f, 0xe2, 0x4f, 0xe9, 0xaf, 0x90, 0x64, 0x32, 0x53, 0x37, 0x88, 0x6e, 0x6f, 0x2f, 0xf9, 0xde,
+	0x7b, 0xdf, 0x7b, 0x99, 0x09, 0x3a, 0x29, 0x00, 0x8a, 0x95, 0x24, 0x4c, 0x58, 0xe2, 0x60, 0x8b,
+	0xae, 0x12, 0x62, 0xa4, 0x85, 0xc6, 0x70, 0x69, 0x89, 0x66, 0xeb, 0x4a, 0xaa, 0xda, 0xe6, 0x8c,
+	0x73, 0x68, 0x54, 0x8d, 0xb5, 0x81, 0x1a, 0xe2, 0x23, 0x47, 0xc7, 0x4c, 0x58, 0x1c, 0x94, 0xf8,
+	0x2a, 0xc1, 0x41, 0x39, 0x7d, 0xee, 0xcd, 0x75, 0x19, 0xfc, 0x9c, 0x7a, 0xfa, 0xb2, 0x1f, 0x75,
+	0x4f, 0x17, 0xcd, 0x25, 0xf9, 0x6a, 0x98, 0xd6, 0xd2, 0xd8, 0x7e, 0x7e, 0xf0, 0x87, 0x94, 0x29,
+	0x05, 0x35, 0xab, 0x4b, 0x50, 0xfd, 0xf4, 0xd5, 0xf7, 0x31, 0x7a, 0x9c, 0xf5, 0xb1, 0x52, 0x97,
+	0x2a, 0x7e, 0x8d, 0xf6, 0xfd, 0x8e, 0x5c, 0xb1, 0x4a, 0x4e, 0x46, 0x87, 0xa3, 0xd9, 0xc3, 0xf9,
+	0x9e, 0x7f, 0xf9, 0x89, 0x55, 0x32, 0xfe, 0x88, 0x9e, 0x0e, 0xeb, 0xe4, 0xa5, 0x98, 0x44, 0x87,
+	0xa3, 0xd9, 0xa3, 0xb7, 0x07, 0x7d, 0x0f, 0xec, 0x43, 0xe1, 0xcf, 0xb5, 0x29, 0x55, 0xb1, 0x60,
+	0xab, 0x46, 0xce, 0x9f, 0xe8, 0xcd, 0x85, 0xe7, 0x22, 0x7e, 0x83, 0xc6, 0xdd, 0xa6, 0x9d, 0x2d,
+	0xe4, 0x1d, 0x33, 0x4e, 0xd1, 0x3e, 0x6f, 0x8c, 0x91, 0x8a, 0xaf, 0x73, 0x0e, 0x42, 0x4e, 0xc6,
+	0x5b, 0x48, 0xf7, 0xbc, 0xe4, 0x3d, 0x88, 0xcd, 0x0a, 0xda, 0xc0, 0x65, 0xb9, 0x92, 0x6d, 0x85,
+	0x07, 0xf7, 0xa9, 0x90, 0x39, 0xdd, 0xb9, 0x88, 0x73, 0xf4, 0xc2, 0x4a, 0x0e, 0x4a, 0x30, 0xb3,
+	0xce, 0xff, 0xe6, 0xbb, 0xbb, 0x85, 0xef, 0x34, 0x58, 0x64, 0xc3, 0x05, 0xb4, 0xb8, 0x4d, 0x05,
+	0x9a, 0xdd, 0x5d, 0x90, 0x1e, 0xe9, 0xd2, 0x62, 0x0e, 0x15, 0x19, 0x9e, 0xe2, 0x09, 0x6f, 0x6c,
+	0x0d, 0x95, 0x34, 0x96, 0x5c, 0x7b, 0x78, 0x43, 0x06, 0x9f, 0xde, 0x92, 0xeb, 0xe1, 0x29, 0xde,
+	0x9c, 0x7e, 0x8b, 0xd0, 0x31, 0x87, 0x0a, 0xff, 0xf7, 0x5a, 0x9e, 0x3e, 0x1b, 0x2c, 0xcd, 0xda,
+	0x4e, 0xd9, 0xe8, 0xcb, 0x87, 0x5e, 0x5a, 0xc0, 0x8a, 0xa9, 0x02, 0x83, 0x29, 0x48, 0x21, 0x55,
+	0xd7, 0x98, 0xdc, 0xc5, 0xfe, 0xc7, 0xaf, 0xf2, 0x2e, 0xa0, 0x1f, 0xd1, 0xce, 0x59, 0x9a, 0xfe,
+	0x8c, 0x8e, 0xce, 0x9c, 0x65, 0x2a, 0x2c, 0x76, 0xb0, 0x45, 0x8b, 0x04, 0xcf, 0x3d, 0xf3, 0x97,
+	0xe7, 0x2c, 0x53, 0x61, 0x97, 0x81, 0xb3, 0x5c, 0x24, 0xcb, 0xc0, 0xb9, 0x8d, 0x8e, 0xdd, 0x80,
+	0xd2, 0x54, 0x58, 0x4a, 0x03, 0x8b, 0xd2, 0x45, 0x42, 0x69, 0xe0, 0x5d, 0xec, 0x76, 0x61, 0x93,
+	0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x8d, 0xc1, 0xcd, 0xd6, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/product_bidding_category_constant.pb.go b/googleapis/ads/googleads/v3/resources/product_bidding_category_constant.pb.go
new file mode 100644
index 0000000..2ecf1b3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/product_bidding_category_constant.pb.go
@@ -0,0 +1,183 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/product_bidding_category_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Product Bidding Category.
+type ProductBiddingCategoryConstant struct {
+	// The resource name of the product bidding category.
+	// Product bidding category resource names have the form:
+	//
+	// `productBiddingCategoryConstants/{country_code}~{level}~{id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// ID of the product bidding category.
+	//
+	// This ID is equivalent to the google_product_category ID as described in
+	// this article: https://support.google.com/merchants/answer/6324436.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Two-letter upper-case country code of the product bidding category.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Resource name of the parent product bidding category.
+	ProductBiddingCategoryConstantParent *wrappers.StringValue `protobuf:"bytes,4,opt,name=product_bidding_category_constant_parent,json=productBiddingCategoryConstantParent,proto3" json:"product_bidding_category_constant_parent,omitempty"`
+	// Level of the product bidding category.
+	Level enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel `protobuf:"varint,5,opt,name=level,proto3,enum=google.ads.googleads.v3.enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel" json:"level,omitempty"`
+	// Status of the product bidding category.
+	Status enums.ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus" json:"status,omitempty"`
+	// Language code of the product bidding category.
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,7,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// Display value of the product bidding category localized according to
+	// language_code.
+	LocalizedName        *wrappers.StringValue `protobuf:"bytes,8,opt,name=localized_name,json=localizedName,proto3" json:"localized_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ProductBiddingCategoryConstant) Reset()         { *m = ProductBiddingCategoryConstant{} }
+func (m *ProductBiddingCategoryConstant) String() string { return proto.CompactTextString(m) }
+func (*ProductBiddingCategoryConstant) ProtoMessage()    {}
+func (*ProductBiddingCategoryConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_52fb4d93554a21c8, []int{0}
+}
+
+func (m *ProductBiddingCategoryConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductBiddingCategoryConstant.Unmarshal(m, b)
+}
+func (m *ProductBiddingCategoryConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductBiddingCategoryConstant.Marshal(b, m, deterministic)
+}
+func (m *ProductBiddingCategoryConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductBiddingCategoryConstant.Merge(m, src)
+}
+func (m *ProductBiddingCategoryConstant) XXX_Size() int {
+	return xxx_messageInfo_ProductBiddingCategoryConstant.Size(m)
+}
+func (m *ProductBiddingCategoryConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductBiddingCategoryConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductBiddingCategoryConstant proto.InternalMessageInfo
+
+func (m *ProductBiddingCategoryConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ProductBiddingCategoryConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryConstant) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryConstant) GetProductBiddingCategoryConstantParent() *wrappers.StringValue {
+	if m != nil {
+		return m.ProductBiddingCategoryConstantParent
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryConstant) GetLevel() enums.ProductBiddingCategoryLevelEnum_ProductBiddingCategoryLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.ProductBiddingCategoryLevelEnum_UNSPECIFIED
+}
+
+func (m *ProductBiddingCategoryConstant) GetStatus() enums.ProductBiddingCategoryStatusEnum_ProductBiddingCategoryStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ProductBiddingCategoryStatusEnum_UNSPECIFIED
+}
+
+func (m *ProductBiddingCategoryConstant) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func (m *ProductBiddingCategoryConstant) GetLocalizedName() *wrappers.StringValue {
+	if m != nil {
+		return m.LocalizedName
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ProductBiddingCategoryConstant)(nil), "google.ads.googleads.v3.resources.ProductBiddingCategoryConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/product_bidding_category_constant.proto", fileDescriptor_52fb4d93554a21c8)
+}
+
+var fileDescriptor_52fb4d93554a21c8 = []byte{
+	// 547 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xd1, 0x6a, 0xd4, 0x4c,
+	0x14, 0x26, 0xe9, 0xdf, 0xfd, 0x75, 0xba, 0xdb, 0x8b, 0x5c, 0xc5, 0x5a, 0xca, 0xd6, 0x5a, 0x58,
+	0x10, 0x26, 0xd0, 0x88, 0x42, 0xbc, 0x90, 0x6c, 0x90, 0x52, 0x11, 0x59, 0xb6, 0xb0, 0x17, 0x65,
+	0x21, 0xcc, 0x66, 0xc6, 0x21, 0x90, 0xcc, 0x84, 0x99, 0xc9, 0x8a, 0x8a, 0x82, 0x6f, 0xe0, 0x0b,
+	0x78, 0xe3, 0xa5, 0x8f, 0xe2, 0xa3, 0xf4, 0x29, 0x24, 0x33, 0x93, 0x54, 0xd0, 0x66, 0x97, 0xde,
+	0x9d, 0xe4, 0x9c, 0xef, 0xfb, 0xce, 0x39, 0xdf, 0x61, 0xc0, 0x05, 0xe5, 0x9c, 0x16, 0x24, 0x40,
+	0x58, 0x06, 0x26, 0x6c, 0xa2, 0x75, 0x18, 0x08, 0x22, 0x79, 0x2d, 0x32, 0x22, 0x83, 0x4a, 0x70,
+	0x5c, 0x67, 0x2a, 0x5d, 0xe5, 0x18, 0xe7, 0x8c, 0xa6, 0x19, 0x52, 0x84, 0x72, 0xf1, 0x21, 0xcd,
+	0x38, 0x93, 0x0a, 0x31, 0x05, 0x2b, 0xc1, 0x15, 0xf7, 0x8e, 0x0d, 0x1e, 0x22, 0x2c, 0x61, 0x47,
+	0x05, 0xd7, 0x21, 0xec, 0xa8, 0x0e, 0xa6, 0xb7, 0xa9, 0x11, 0x56, 0x97, 0x3d, 0x4a, 0x05, 0x59,
+	0x93, 0xc2, 0xc8, 0x1c, 0x24, 0x77, 0xe4, 0x90, 0x0a, 0xa9, 0x5a, 0x5a, 0x92, 0x07, 0x2d, 0x49,
+	0x95, 0x77, 0x93, 0xda, 0xd4, 0x91, 0x4d, 0xe9, 0xaf, 0x55, 0xfd, 0x2e, 0x78, 0x2f, 0x50, 0x55,
+	0x11, 0xd1, 0x42, 0x0f, 0xff, 0x80, 0x22, 0xc6, 0xb8, 0x42, 0x2a, 0xe7, 0xcc, 0x66, 0x1f, 0x7d,
+	0x1f, 0x80, 0xa3, 0x99, 0x69, 0x61, 0x6a, 0x3a, 0x48, 0x6c, 0x03, 0x89, 0xdd, 0x96, 0x77, 0x02,
+	0x46, 0xad, 0x64, 0xca, 0x50, 0x49, 0x7c, 0x67, 0xec, 0x4c, 0xee, 0xcf, 0x87, 0xed, 0xcf, 0xb7,
+	0xa8, 0x24, 0xde, 0x13, 0xe0, 0xe6, 0xd8, 0x77, 0xc7, 0xce, 0x64, 0xef, 0xec, 0xa1, 0x5d, 0x27,
+	0x6c, 0x5b, 0x82, 0x17, 0x4c, 0x3d, 0x7b, 0xba, 0x40, 0x45, 0x4d, 0xe6, 0x6e, 0x8e, 0xbd, 0x97,
+	0x60, 0x98, 0xf1, 0x9a, 0x29, 0xed, 0x09, 0x26, 0xfe, 0x8e, 0x86, 0x1d, 0xfe, 0x05, 0xbb, 0x54,
+	0x22, 0x67, 0xd4, 0xe0, 0xf6, 0x2c, 0x22, 0xe1, 0x98, 0x78, 0x0a, 0x4c, 0x36, 0xba, 0x9c, 0x56,
+	0x48, 0x10, 0xa6, 0xfc, 0xff, 0xb6, 0x20, 0x7f, 0x5c, 0xf5, 0xae, 0x60, 0xa6, 0x99, 0xbc, 0x0a,
+	0xec, 0x6a, 0x63, 0xfd, 0xdd, 0xb1, 0x33, 0xd9, 0x3f, 0xbb, 0x82, 0xb7, 0x1d, 0x90, 0x76, 0x16,
+	0xfe, 0x7b, 0xad, 0x6f, 0x1a, 0x86, 0x57, 0xac, 0x2e, 0xfb, 0xf2, 0x73, 0x23, 0xe4, 0x29, 0x30,
+	0x30, 0x67, 0xe0, 0x0f, 0xb4, 0xe4, 0xf2, 0x4e, 0x92, 0x97, 0x9a, 0xa2, 0x47, 0xd3, 0x14, 0xcc,
+	0xad, 0x96, 0x17, 0x83, 0x51, 0x81, 0x18, 0xad, 0x11, 0x25, 0xc6, 0x9f, 0xff, 0xb7, 0x58, 0xe1,
+	0xb0, 0x85, 0x68, 0x83, 0x12, 0xb0, 0x5f, 0xf0, 0x0c, 0x15, 0xf9, 0x47, 0x82, 0xcd, 0xd1, 0xdc,
+	0xdb, 0x82, 0x63, 0xd4, 0x61, 0x9a, 0x9b, 0x8a, 0xbe, 0x3a, 0xd7, 0xf1, 0x17, 0xf0, 0xfc, 0x66,
+	0x4e, 0x1b, 0x55, 0xb9, 0x84, 0x19, 0x2f, 0x83, 0x0d, 0x77, 0x9b, 0xf4, 0x9b, 0x2a, 0x83, 0x4f,
+	0x1b, 0x6f, 0xe8, 0xf3, 0xf4, 0x9b, 0x0b, 0x4e, 0x33, 0x5e, 0xc2, 0x8d, 0x6f, 0xc5, 0xf4, 0xa4,
+	0xbf, 0x9d, 0x59, 0x33, 0xf0, 0xcc, 0xb9, 0x7a, 0x6d, 0x99, 0x28, 0x6f, 0x16, 0x06, 0xb9, 0xa0,
+	0x01, 0x25, 0x4c, 0xaf, 0x23, 0xb8, 0x99, 0xaf, 0xe7, 0x7d, 0x7b, 0xd1, 0x45, 0x3f, 0xdc, 0x9d,
+	0xf3, 0x38, 0xfe, 0xe9, 0x1e, 0x9f, 0x1b, 0xca, 0x18, 0x4b, 0x68, 0xc2, 0x26, 0x5a, 0x84, 0x70,
+	0xde, 0x56, 0xfe, 0x6a, 0x6b, 0x96, 0x31, 0x96, 0xcb, 0xae, 0x66, 0xb9, 0x08, 0x97, 0x5d, 0xcd,
+	0xb5, 0x7b, 0x6a, 0x12, 0x51, 0x14, 0x63, 0x19, 0x45, 0x5d, 0x55, 0x14, 0x2d, 0xc2, 0x28, 0xea,
+	0xea, 0x56, 0x03, 0xdd, 0x6c, 0xf8, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xfd, 0x48, 0xb9, 0x8b,
+	0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/product_group_view.pb.go b/googleapis/ads/googleads/v3/resources/product_group_view.pb.go
new file mode 100644
index 0000000..5aabe0e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/product_group_view.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/product_group_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A product group view.
+type ProductGroupView struct {
+	// The resource name of the product group view.
+	// Product group view resource names have the form:
+	//
+	// `customers/{customer_id}/productGroupViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductGroupView) Reset()         { *m = ProductGroupView{} }
+func (m *ProductGroupView) String() string { return proto.CompactTextString(m) }
+func (*ProductGroupView) ProtoMessage()    {}
+func (*ProductGroupView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd2fe9a1ca896489, []int{0}
+}
+
+func (m *ProductGroupView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductGroupView.Unmarshal(m, b)
+}
+func (m *ProductGroupView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductGroupView.Marshal(b, m, deterministic)
+}
+func (m *ProductGroupView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductGroupView.Merge(m, src)
+}
+func (m *ProductGroupView) XXX_Size() int {
+	return xxx_messageInfo_ProductGroupView.Size(m)
+}
+func (m *ProductGroupView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductGroupView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductGroupView proto.InternalMessageInfo
+
+func (m *ProductGroupView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ProductGroupView)(nil), "google.ads.googleads.v3.resources.ProductGroupView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/product_group_view.proto", fileDescriptor_dd2fe9a1ca896489)
+}
+
+var fileDescriptor_dd2fe9a1ca896489 = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0x49, 0x3e, 0xf8, 0xc0, 0xa0, 0x20, 0x05, 0x41, 0x8b, 0x0b, 0xab, 0x14, 0x74, 0x33,
+	0xb3, 0xc8, 0x6e, 0xba, 0x4a, 0x37, 0x05, 0x17, 0x52, 0xba, 0xc8, 0x42, 0x02, 0x65, 0xcc, 0x0c,
+	0x63, 0xb0, 0x99, 0x1b, 0xe6, 0x26, 0xe9, 0xa2, 0x74, 0xe3, 0xa3, 0x88, 0x2b, 0x1f, 0xc5, 0x47,
+	0xe9, 0x53, 0x48, 0x3a, 0x9d, 0xa9, 0x58, 0xd0, 0xdd, 0x61, 0xee, 0xef, 0x9c, 0xfb, 0x67, 0x22,
+	0xa6, 0x00, 0xd4, 0x42, 0x52, 0x2e, 0x90, 0x5a, 0xd9, 0xa9, 0x36, 0xa6, 0x46, 0x22, 0x34, 0x26,
+	0x97, 0x48, 0x2b, 0x03, 0xa2, 0xc9, 0xeb, 0xb9, 0x32, 0xd0, 0x54, 0xf3, 0xb6, 0x90, 0x4b, 0x52,
+	0x19, 0xa8, 0xa1, 0x37, 0xb0, 0x06, 0xc2, 0x05, 0x12, 0xef, 0x25, 0x6d, 0x4c, 0xbc, 0xb7, 0x7f,
+	0xe1, 0xe2, 0xab, 0xc2, 0x27, 0x5a, 0x77, 0xff, 0xf2, 0x5b, 0x89, 0x6b, 0x0d, 0x35, 0xaf, 0x0b,
+	0xd0, 0x68, 0xab, 0xd7, 0xef, 0x41, 0x74, 0x3a, 0xb5, 0x8d, 0x27, 0x5d, 0xdf, 0xb4, 0x90, 0xcb,
+	0xde, 0x4d, 0x74, 0xe2, 0x42, 0xe6, 0x9a, 0x97, 0xf2, 0x3c, 0xb8, 0x0a, 0x6e, 0x8f, 0x66, 0xc7,
+	0xee, 0xf1, 0x81, 0x97, 0x92, 0xbd, 0x6c, 0x92, 0xe7, 0xe8, 0x6e, 0x3f, 0xcf, 0x4e, 0x55, 0x05,
+	0x92, 0x1c, 0x4a, 0x7a, 0x10, 0x3a, 0xca, 0x1b, 0xac, 0xa1, 0x94, 0x06, 0xe9, 0xca, 0xc9, 0xb5,
+	0x5b, 0xda, 0x63, 0x48, 0x57, 0x87, 0x77, 0x58, 0x8f, 0x5f, 0xc3, 0x68, 0x98, 0x43, 0x49, 0xfe,
+	0xbc, 0xc4, 0xf8, 0xec, 0x67, 0xe3, 0x69, 0xb7, 0xe7, 0x34, 0x78, 0xbc, 0xdf, 0x79, 0x15, 0x2c,
+	0xb8, 0x56, 0x04, 0x8c, 0xa2, 0x4a, 0xea, 0xed, 0x15, 0xe8, 0x7e, 0xf6, 0x5f, 0x3e, 0x68, 0xe4,
+	0xd5, 0x5b, 0xf8, 0x6f, 0x92, 0x24, 0x1f, 0xe1, 0x60, 0x62, 0x23, 0x13, 0x81, 0xc4, 0xca, 0x4e,
+	0xa5, 0x31, 0x99, 0x39, 0xf2, 0xd3, 0x31, 0x59, 0x22, 0x30, 0xf3, 0x4c, 0x96, 0xc6, 0x99, 0x67,
+	0x36, 0xe1, 0xd0, 0x16, 0x18, 0x4b, 0x04, 0x32, 0xe6, 0x29, 0xc6, 0xd2, 0x98, 0x31, 0xcf, 0x3d,
+	0xfd, 0xdf, 0x0e, 0x1b, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x13, 0xd8, 0x1d, 0x4c, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/recommendation.pb.go b/googleapis/ads/googleads/v3/resources/recommendation.pb.go
new file mode 100644
index 0000000..ffaac8a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/recommendation.pb.go
@@ -0,0 +1,1442 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/recommendation.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A recommendation.
+type Recommendation struct {
+	// The resource name of the recommendation.
+	//
+	// `customers/{customer_id}/recommendations/{recommendation_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The type of recommendation.
+	Type enums.RecommendationTypeEnum_RecommendationType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.RecommendationTypeEnum_RecommendationType" json:"type,omitempty"`
+	// The impact on account performance as a result of applying the
+	// recommendation.
+	Impact *Recommendation_RecommendationImpact `protobuf:"bytes,3,opt,name=impact,proto3" json:"impact,omitempty"`
+	// The budget targeted by this recommendation. This will be set only when
+	// the recommendation affects a single campaign budget.
+	//
+	// This field will be set for the following recommendation types:
+	// CAMPAIGN_BUDGET, MOVE_UNUSED_BUDGET
+	CampaignBudget *wrappers.StringValue `protobuf:"bytes,5,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The campaign targeted by this recommendation. This will be set only when
+	// the recommendation affects a single campaign.
+	//
+	// This field will be set for the following recommendation types:
+	// CALL_EXTENSION, CALLOUT_EXTENSION, ENHANCED_CPC_OPT_IN, KEYWORD,
+	// KEYWORD_MATCH_TYPE, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
+	// OPTIMIZE_AD_ROTATION, SEARCH_PARTNERS_OPT_IN, SITELINK_EXTENSION,
+	// TARGET_CPA_OPT_IN, TEXT_AD
+	Campaign *wrappers.StringValue `protobuf:"bytes,6,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ad group targeted by this recommendation. This will be set only when
+	// the recommendation affects a single ad group.
+	//
+	// This field will be set for the following recommendation types:
+	// KEYWORD, OPTIMIZE_AD_ROTATION, TEXT_AD
+	AdGroup *wrappers.StringValue `protobuf:"bytes,7,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Whether the recommendation is dismissed or not.
+	Dismissed *wrappers.BoolValue `protobuf:"bytes,13,opt,name=dismissed,proto3" json:"dismissed,omitempty"`
+	// The details of recommendation.
+	//
+	// Types that are valid to be assigned to Recommendation:
+	//	*Recommendation_CampaignBudgetRecommendation_
+	//	*Recommendation_KeywordRecommendation_
+	//	*Recommendation_TextAdRecommendation_
+	//	*Recommendation_TargetCpaOptInRecommendation_
+	//	*Recommendation_MaximizeConversionsOptInRecommendation_
+	//	*Recommendation_EnhancedCpcOptInRecommendation_
+	//	*Recommendation_SearchPartnersOptInRecommendation_
+	//	*Recommendation_MaximizeClicksOptInRecommendation_
+	//	*Recommendation_OptimizeAdRotationRecommendation_
+	//	*Recommendation_CalloutExtensionRecommendation_
+	//	*Recommendation_SitelinkExtensionRecommendation_
+	//	*Recommendation_CallExtensionRecommendation_
+	//	*Recommendation_KeywordMatchTypeRecommendation_
+	//	*Recommendation_MoveUnusedBudgetRecommendation_
+	Recommendation       isRecommendation_Recommendation `protobuf_oneof:"recommendation"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *Recommendation) Reset()         { *m = Recommendation{} }
+func (m *Recommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation) ProtoMessage()    {}
+func (*Recommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0}
+}
+
+func (m *Recommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation.Unmarshal(m, b)
+}
+func (m *Recommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation.Merge(m, src)
+}
+func (m *Recommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation.Size(m)
+}
+func (m *Recommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation proto.InternalMessageInfo
+
+func (m *Recommendation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Recommendation) GetType() enums.RecommendationTypeEnum_RecommendationType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.RecommendationTypeEnum_UNSPECIFIED
+}
+
+func (m *Recommendation) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaignBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *Recommendation) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *Recommendation) GetDismissed() *wrappers.BoolValue {
+	if m != nil {
+		return m.Dismissed
+	}
+	return nil
+}
+
+type isRecommendation_Recommendation interface {
+	isRecommendation_Recommendation()
+}
+
+type Recommendation_CampaignBudgetRecommendation_ struct {
+	CampaignBudgetRecommendation *Recommendation_CampaignBudgetRecommendation `protobuf:"bytes,4,opt,name=campaign_budget_recommendation,json=campaignBudgetRecommendation,proto3,oneof"`
+}
+
+type Recommendation_KeywordRecommendation_ struct {
+	KeywordRecommendation *Recommendation_KeywordRecommendation `protobuf:"bytes,8,opt,name=keyword_recommendation,json=keywordRecommendation,proto3,oneof"`
+}
+
+type Recommendation_TextAdRecommendation_ struct {
+	TextAdRecommendation *Recommendation_TextAdRecommendation `protobuf:"bytes,9,opt,name=text_ad_recommendation,json=textAdRecommendation,proto3,oneof"`
+}
+
+type Recommendation_TargetCpaOptInRecommendation_ struct {
+	TargetCpaOptInRecommendation *Recommendation_TargetCpaOptInRecommendation `protobuf:"bytes,10,opt,name=target_cpa_opt_in_recommendation,json=targetCpaOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_MaximizeConversionsOptInRecommendation_ struct {
+	MaximizeConversionsOptInRecommendation *Recommendation_MaximizeConversionsOptInRecommendation `protobuf:"bytes,11,opt,name=maximize_conversions_opt_in_recommendation,json=maximizeConversionsOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_EnhancedCpcOptInRecommendation_ struct {
+	EnhancedCpcOptInRecommendation *Recommendation_EnhancedCpcOptInRecommendation `protobuf:"bytes,12,opt,name=enhanced_cpc_opt_in_recommendation,json=enhancedCpcOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_SearchPartnersOptInRecommendation_ struct {
+	SearchPartnersOptInRecommendation *Recommendation_SearchPartnersOptInRecommendation `protobuf:"bytes,14,opt,name=search_partners_opt_in_recommendation,json=searchPartnersOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_MaximizeClicksOptInRecommendation_ struct {
+	MaximizeClicksOptInRecommendation *Recommendation_MaximizeClicksOptInRecommendation `protobuf:"bytes,15,opt,name=maximize_clicks_opt_in_recommendation,json=maximizeClicksOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_OptimizeAdRotationRecommendation_ struct {
+	OptimizeAdRotationRecommendation *Recommendation_OptimizeAdRotationRecommendation `protobuf:"bytes,16,opt,name=optimize_ad_rotation_recommendation,json=optimizeAdRotationRecommendation,proto3,oneof"`
+}
+
+type Recommendation_CalloutExtensionRecommendation_ struct {
+	CalloutExtensionRecommendation *Recommendation_CalloutExtensionRecommendation `protobuf:"bytes,17,opt,name=callout_extension_recommendation,json=calloutExtensionRecommendation,proto3,oneof"`
+}
+
+type Recommendation_SitelinkExtensionRecommendation_ struct {
+	SitelinkExtensionRecommendation *Recommendation_SitelinkExtensionRecommendation `protobuf:"bytes,18,opt,name=sitelink_extension_recommendation,json=sitelinkExtensionRecommendation,proto3,oneof"`
+}
+
+type Recommendation_CallExtensionRecommendation_ struct {
+	CallExtensionRecommendation *Recommendation_CallExtensionRecommendation `protobuf:"bytes,19,opt,name=call_extension_recommendation,json=callExtensionRecommendation,proto3,oneof"`
+}
+
+type Recommendation_KeywordMatchTypeRecommendation_ struct {
+	KeywordMatchTypeRecommendation *Recommendation_KeywordMatchTypeRecommendation `protobuf:"bytes,20,opt,name=keyword_match_type_recommendation,json=keywordMatchTypeRecommendation,proto3,oneof"`
+}
+
+type Recommendation_MoveUnusedBudgetRecommendation_ struct {
+	MoveUnusedBudgetRecommendation *Recommendation_MoveUnusedBudgetRecommendation `protobuf:"bytes,21,opt,name=move_unused_budget_recommendation,json=moveUnusedBudgetRecommendation,proto3,oneof"`
+}
+
+func (*Recommendation_CampaignBudgetRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_KeywordRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_TextAdRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_TargetCpaOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_MaximizeConversionsOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_EnhancedCpcOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_SearchPartnersOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_MaximizeClicksOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_OptimizeAdRotationRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_CalloutExtensionRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_SitelinkExtensionRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_CallExtensionRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_KeywordMatchTypeRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_MoveUnusedBudgetRecommendation_) isRecommendation_Recommendation() {}
+
+func (m *Recommendation) GetRecommendation() isRecommendation_Recommendation {
+	if m != nil {
+		return m.Recommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaignBudgetRecommendation() *Recommendation_CampaignBudgetRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_CampaignBudgetRecommendation_); ok {
+		return x.CampaignBudgetRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetKeywordRecommendation() *Recommendation_KeywordRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_KeywordRecommendation_); ok {
+		return x.KeywordRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetTextAdRecommendation() *Recommendation_TextAdRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_TextAdRecommendation_); ok {
+		return x.TextAdRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetTargetCpaOptInRecommendation() *Recommendation_TargetCpaOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_TargetCpaOptInRecommendation_); ok {
+		return x.TargetCpaOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetMaximizeConversionsOptInRecommendation() *Recommendation_MaximizeConversionsOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeConversionsOptInRecommendation_); ok {
+		return x.MaximizeConversionsOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetEnhancedCpcOptInRecommendation() *Recommendation_EnhancedCpcOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_EnhancedCpcOptInRecommendation_); ok {
+		return x.EnhancedCpcOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetSearchPartnersOptInRecommendation() *Recommendation_SearchPartnersOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_SearchPartnersOptInRecommendation_); ok {
+		return x.SearchPartnersOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetMaximizeClicksOptInRecommendation() *Recommendation_MaximizeClicksOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeClicksOptInRecommendation_); ok {
+		return x.MaximizeClicksOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetOptimizeAdRotationRecommendation() *Recommendation_OptimizeAdRotationRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_OptimizeAdRotationRecommendation_); ok {
+		return x.OptimizeAdRotationRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCalloutExtensionRecommendation() *Recommendation_CalloutExtensionRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_CalloutExtensionRecommendation_); ok {
+		return x.CalloutExtensionRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetSitelinkExtensionRecommendation() *Recommendation_SitelinkExtensionRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_SitelinkExtensionRecommendation_); ok {
+		return x.SitelinkExtensionRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCallExtensionRecommendation() *Recommendation_CallExtensionRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_CallExtensionRecommendation_); ok {
+		return x.CallExtensionRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetKeywordMatchTypeRecommendation() *Recommendation_KeywordMatchTypeRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_KeywordMatchTypeRecommendation_); ok {
+		return x.KeywordMatchTypeRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetMoveUnusedBudgetRecommendation() *Recommendation_MoveUnusedBudgetRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_MoveUnusedBudgetRecommendation_); ok {
+		return x.MoveUnusedBudgetRecommendation
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Recommendation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Recommendation_CampaignBudgetRecommendation_)(nil),
+		(*Recommendation_KeywordRecommendation_)(nil),
+		(*Recommendation_TextAdRecommendation_)(nil),
+		(*Recommendation_TargetCpaOptInRecommendation_)(nil),
+		(*Recommendation_MaximizeConversionsOptInRecommendation_)(nil),
+		(*Recommendation_EnhancedCpcOptInRecommendation_)(nil),
+		(*Recommendation_SearchPartnersOptInRecommendation_)(nil),
+		(*Recommendation_MaximizeClicksOptInRecommendation_)(nil),
+		(*Recommendation_OptimizeAdRotationRecommendation_)(nil),
+		(*Recommendation_CalloutExtensionRecommendation_)(nil),
+		(*Recommendation_SitelinkExtensionRecommendation_)(nil),
+		(*Recommendation_CallExtensionRecommendation_)(nil),
+		(*Recommendation_KeywordMatchTypeRecommendation_)(nil),
+		(*Recommendation_MoveUnusedBudgetRecommendation_)(nil),
+	}
+}
+
+// The impact of making the change as described in the recommendation.
+// Some types of recommendations may not have impact information.
+type Recommendation_RecommendationImpact struct {
+	// Base metrics at the time the recommendation was generated.
+	BaseMetrics *Recommendation_RecommendationMetrics `protobuf:"bytes,1,opt,name=base_metrics,json=baseMetrics,proto3" json:"base_metrics,omitempty"`
+	// Estimated metrics if the recommendation is applied.
+	PotentialMetrics     *Recommendation_RecommendationMetrics `protobuf:"bytes,2,opt,name=potential_metrics,json=potentialMetrics,proto3" json:"potential_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *Recommendation_RecommendationImpact) Reset()         { *m = Recommendation_RecommendationImpact{} }
+func (m *Recommendation_RecommendationImpact) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_RecommendationImpact) ProtoMessage()    {}
+func (*Recommendation_RecommendationImpact) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 0}
+}
+
+func (m *Recommendation_RecommendationImpact) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Unmarshal(m, b)
+}
+func (m *Recommendation_RecommendationImpact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_RecommendationImpact) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_RecommendationImpact.Merge(m, src)
+}
+func (m *Recommendation_RecommendationImpact) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Size(m)
+}
+func (m *Recommendation_RecommendationImpact) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_RecommendationImpact.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_RecommendationImpact proto.InternalMessageInfo
+
+func (m *Recommendation_RecommendationImpact) GetBaseMetrics() *Recommendation_RecommendationMetrics {
+	if m != nil {
+		return m.BaseMetrics
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationImpact) GetPotentialMetrics() *Recommendation_RecommendationMetrics {
+	if m != nil {
+		return m.PotentialMetrics
+	}
+	return nil
+}
+
+// Weekly account performance metrics. For some recommendation types, these
+// are averaged over the past 90-day period and hence can be fractional.
+type Recommendation_RecommendationMetrics struct {
+	// Number of ad impressions.
+	Impressions *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Number of ad clicks.
+	Clicks *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Cost (in micros) for advertising, in the local currency for the account.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Number of conversions.
+	Conversions *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=conversions,proto3" json:"conversions,omitempty"`
+	// Number of video views for a video ad campaign.
+	VideoViews           *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=video_views,json=videoViews,proto3" json:"video_views,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Recommendation_RecommendationMetrics) Reset()         { *m = Recommendation_RecommendationMetrics{} }
+func (m *Recommendation_RecommendationMetrics) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_RecommendationMetrics) ProtoMessage()    {}
+func (*Recommendation_RecommendationMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 1}
+}
+
+func (m *Recommendation_RecommendationMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Unmarshal(m, b)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_RecommendationMetrics.Merge(m, src)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Size(m)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_RecommendationMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_RecommendationMetrics proto.InternalMessageInfo
+
+func (m *Recommendation_RecommendationMetrics) GetImpressions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetClicks() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetVideoViews() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoViews
+	}
+	return nil
+}
+
+// The budget recommendation for budget constrained campaigns.
+type Recommendation_CampaignBudgetRecommendation struct {
+	// The current budget amount in micros.
+	CurrentBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=current_budget_amount_micros,json=currentBudgetAmountMicros,proto3" json:"current_budget_amount_micros,omitempty"`
+	// The recommended budget amount in micros.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	// The budget amounts and associated impact estimates for some values of
+	// possible budget amounts.
+	BudgetOptions        []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption `protobuf:"bytes,3,rep,name=budget_options,json=budgetOptions,proto3" json:"budget_options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                                            `json:"-"`
+	XXX_sizecache        int32                                                                             `json:"-"`
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) Reset() {
+	*m = Recommendation_CampaignBudgetRecommendation{}
+}
+func (m *Recommendation_CampaignBudgetRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CampaignBudgetRecommendation) ProtoMessage() {}
+func (*Recommendation_CampaignBudgetRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 2}
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Merge(m, src)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Size(m)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetCurrentBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CurrentBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetBudgetOptions() []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption {
+	if m != nil {
+		return m.BudgetOptions
+	}
+	return nil
+}
+
+// The impact estimates for a given budget amount.
+type Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption struct {
+	// The budget amount for this option.
+	BudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=budget_amount_micros,json=budgetAmountMicros,proto3" json:"budget_amount_micros,omitempty"`
+	// The impact estimate if budget is changed to amount specified in this
+	// option.
+	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,2,opt,name=impact,proto3" json:"impact,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Reset() {
+	*m = Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption{}
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) ProtoMessage() {
+}
+func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 2, 0}
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Unmarshal(m, b)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Merge(m, src)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Size(m)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption proto.InternalMessageInfo
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+// The keyword recommendation.
+type Recommendation_KeywordRecommendation struct {
+	// The recommended keyword.
+	Keyword *common.KeywordInfo `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	// The recommended CPC (cost-per-click) bid.
+	RecommendedCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_cpc_bid_micros,json=recommendedCpcBidMicros,proto3" json:"recommended_cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}             `json:"-"`
+	XXX_unrecognized        []byte               `json:"-"`
+	XXX_sizecache           int32                `json:"-"`
+}
+
+func (m *Recommendation_KeywordRecommendation) Reset()         { *m = Recommendation_KeywordRecommendation{} }
+func (m *Recommendation_KeywordRecommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_KeywordRecommendation) ProtoMessage()    {}
+func (*Recommendation_KeywordRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 3}
+}
+
+func (m *Recommendation_KeywordRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_KeywordRecommendation.Merge(m, src)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Size(m)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_KeywordRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_KeywordRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_KeywordRecommendation) GetKeyword() *common.KeywordInfo {
+	if m != nil {
+		return m.Keyword
+	}
+	return nil
+}
+
+func (m *Recommendation_KeywordRecommendation) GetRecommendedCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedCpcBidMicros
+	}
+	return nil
+}
+
+// The Maximize Clicks opt-in recommendation.
+type Recommendation_MaximizeClicksOptInRecommendation struct {
+	// The recommended new budget amount.
+	// Only set if the current budget is too high.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *Recommendation_MaximizeClicksOptInRecommendation) Reset() {
+	*m = Recommendation_MaximizeClicksOptInRecommendation{}
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_MaximizeClicksOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_MaximizeClicksOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 4}
+}
+
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Merge(m, src)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Size(m)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_MaximizeClicksOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+// The text ad recommendation.
+type Recommendation_TextAdRecommendation struct {
+	// Recommended ad.
+	Ad *Ad `protobuf:"bytes,1,opt,name=ad,proto3" json:"ad,omitempty"`
+	// Creation date of the recommended ad.
+	// YYYY-MM-DD format, e.g., 2018-04-17.
+	CreationDate *wrappers.StringValue `protobuf:"bytes,2,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"`
+	// Date, if present, is the earliest when the recommendation will be auto
+	// applied.
+	// YYYY-MM-DD format, e.g., 2018-04-17.
+	AutoApplyDate        *wrappers.StringValue `protobuf:"bytes,3,opt,name=auto_apply_date,json=autoApplyDate,proto3" json:"auto_apply_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Recommendation_TextAdRecommendation) Reset()         { *m = Recommendation_TextAdRecommendation{} }
+func (m *Recommendation_TextAdRecommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_TextAdRecommendation) ProtoMessage()    {}
+func (*Recommendation_TextAdRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 5}
+}
+
+func (m *Recommendation_TextAdRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TextAdRecommendation.Merge(m, src)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Size(m)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TextAdRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TextAdRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_TextAdRecommendation) GetAd() *Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+func (m *Recommendation_TextAdRecommendation) GetCreationDate() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDate
+	}
+	return nil
+}
+
+func (m *Recommendation_TextAdRecommendation) GetAutoApplyDate() *wrappers.StringValue {
+	if m != nil {
+		return m.AutoApplyDate
+	}
+	return nil
+}
+
+// The move unused budget recommendation.
+type Recommendation_MoveUnusedBudgetRecommendation struct {
+	// The excess budget's resource_name.
+	ExcessCampaignBudget *wrappers.StringValue `protobuf:"bytes,1,opt,name=excess_campaign_budget,json=excessCampaignBudget,proto3" json:"excess_campaign_budget,omitempty"`
+	// The recommendation for the constrained budget to increase.
+	BudgetRecommendation *Recommendation_CampaignBudgetRecommendation `protobuf:"bytes,2,opt,name=budget_recommendation,json=budgetRecommendation,proto3" json:"budget_recommendation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
+	XXX_unrecognized     []byte                                       `json:"-"`
+	XXX_sizecache        int32                                        `json:"-"`
+}
+
+func (m *Recommendation_MoveUnusedBudgetRecommendation) Reset() {
+	*m = Recommendation_MoveUnusedBudgetRecommendation{}
+}
+func (m *Recommendation_MoveUnusedBudgetRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_MoveUnusedBudgetRecommendation) ProtoMessage() {}
+func (*Recommendation_MoveUnusedBudgetRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 6}
+}
+
+func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Merge(m, src)
+}
+func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Size(m)
+}
+func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_MoveUnusedBudgetRecommendation) GetExcessCampaignBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.ExcessCampaignBudget
+	}
+	return nil
+}
+
+func (m *Recommendation_MoveUnusedBudgetRecommendation) GetBudgetRecommendation() *Recommendation_CampaignBudgetRecommendation {
+	if m != nil {
+		return m.BudgetRecommendation
+	}
+	return nil
+}
+
+// The Target CPA opt-in recommendation.
+type Recommendation_TargetCpaOptInRecommendation struct {
+	// The available goals and corresponding options for Target CPA strategy.
+	Options []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption `protobuf:"bytes,1,rep,name=options,proto3" json:"options,omitempty"`
+	// The recommended average CPA target. See required budget amount and impact
+	// of using this recommendation in options list.
+	RecommendedTargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_target_cpa_micros,json=recommendedTargetCpaMicros,proto3" json:"recommended_target_cpa_micros,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}             `json:"-"`
+	XXX_unrecognized           []byte               `json:"-"`
+	XXX_sizecache              int32                `json:"-"`
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation) Reset() {
+	*m = Recommendation_TargetCpaOptInRecommendation{}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_TargetCpaOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_TargetCpaOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 7}
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Merge(m, src)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Size(m)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_TargetCpaOptInRecommendation) GetOptions() []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation) GetRecommendedTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedTargetCpaMicros
+	}
+	return nil
+}
+
+// The Target CPA opt-in option with impact estimate.
+type Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption struct {
+	// The goal achieved by this option.
+	Goal enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal `protobuf:"varint,1,opt,name=goal,proto3,enum=google.ads.googleads.v3.enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal" json:"goal,omitempty"`
+	// Average CPA target.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// The minimum campaign budget, in local currency for the account,
+	// required to achieve the target CPA.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	RequiredCampaignBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=required_campaign_budget_amount_micros,json=requiredCampaignBudgetAmountMicros,proto3" json:"required_campaign_budget_amount_micros,omitempty"`
+	// The impact estimate if this option is selected.
+	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,4,opt,name=impact,proto3" json:"impact,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Reset() {
+	*m = Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption{}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) ProtoMessage() {
+}
+func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 7, 0}
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Unmarshal(m, b)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Merge(m, src)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Size(m)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption proto.InternalMessageInfo
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetGoal() enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal {
+	if m != nil {
+		return m.Goal
+	}
+	return enums.TargetCpaOptInRecommendationGoalEnum_UNSPECIFIED
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetRequiredCampaignBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RequiredCampaignBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+// The Callout extension recommendation.
+type Recommendation_CalloutExtensionRecommendation struct {
+	// Callout extensions recommended to be added.
+	RecommendedExtensions []*common.CalloutFeedItem `protobuf:"bytes,1,rep,name=recommended_extensions,json=recommendedExtensions,proto3" json:"recommended_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                  `json:"-"`
+	XXX_unrecognized      []byte                    `json:"-"`
+	XXX_sizecache         int32                     `json:"-"`
+}
+
+func (m *Recommendation_CalloutExtensionRecommendation) Reset() {
+	*m = Recommendation_CalloutExtensionRecommendation{}
+}
+func (m *Recommendation_CalloutExtensionRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CalloutExtensionRecommendation) ProtoMessage() {}
+func (*Recommendation_CalloutExtensionRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 8}
+}
+
+func (m *Recommendation_CalloutExtensionRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CalloutExtensionRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_CalloutExtensionRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CalloutExtensionRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_CalloutExtensionRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CalloutExtensionRecommendation.Merge(m, src)
+}
+func (m *Recommendation_CalloutExtensionRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CalloutExtensionRecommendation.Size(m)
+}
+func (m *Recommendation_CalloutExtensionRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CalloutExtensionRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CalloutExtensionRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_CalloutExtensionRecommendation) GetRecommendedExtensions() []*common.CalloutFeedItem {
+	if m != nil {
+		return m.RecommendedExtensions
+	}
+	return nil
+}
+
+// The Maximize Conversions Opt-In recommendation.
+type Recommendation_MaximizeConversionsOptInRecommendation struct {
+	// The recommended new budget amount.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) Reset() {
+	*m = Recommendation_MaximizeConversionsOptInRecommendation{}
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_MaximizeConversionsOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_MaximizeConversionsOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 9}
+}
+
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Merge(m, src)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Size(m)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+// The Enhanced Cost-Per-Click Opt-In recommendation.
+type Recommendation_EnhancedCpcOptInRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_EnhancedCpcOptInRecommendation) Reset() {
+	*m = Recommendation_EnhancedCpcOptInRecommendation{}
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_EnhancedCpcOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_EnhancedCpcOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 10}
+}
+
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Merge(m, src)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Size(m)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation proto.InternalMessageInfo
+
+// The keyword match type recommendation.
+type Recommendation_KeywordMatchTypeRecommendation struct {
+	// The existing keyword where the match type should be more broad.
+	Keyword *common.KeywordInfo `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	// The recommended new match type.
+	RecommendedMatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=recommended_match_type,json=recommendedMatchType,proto3,enum=google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"recommended_match_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *Recommendation_KeywordMatchTypeRecommendation) Reset() {
+	*m = Recommendation_KeywordMatchTypeRecommendation{}
+}
+func (m *Recommendation_KeywordMatchTypeRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_KeywordMatchTypeRecommendation) ProtoMessage() {}
+func (*Recommendation_KeywordMatchTypeRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 11}
+}
+
+func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Merge(m, src)
+}
+func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Size(m)
+}
+func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_KeywordMatchTypeRecommendation) GetKeyword() *common.KeywordInfo {
+	if m != nil {
+		return m.Keyword
+	}
+	return nil
+}
+
+func (m *Recommendation_KeywordMatchTypeRecommendation) GetRecommendedMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.RecommendedMatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+// The Search Partners Opt-In recommendation.
+type Recommendation_SearchPartnersOptInRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_SearchPartnersOptInRecommendation) Reset() {
+	*m = Recommendation_SearchPartnersOptInRecommendation{}
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_SearchPartnersOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_SearchPartnersOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 12}
+}
+
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Merge(m, src)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Size(m)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation proto.InternalMessageInfo
+
+// The Optimize Ad Rotation recommendation.
+type Recommendation_OptimizeAdRotationRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_OptimizeAdRotationRecommendation) Reset() {
+	*m = Recommendation_OptimizeAdRotationRecommendation{}
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_OptimizeAdRotationRecommendation) ProtoMessage() {}
+func (*Recommendation_OptimizeAdRotationRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 13}
+}
+
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Merge(m, src)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Size(m)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation proto.InternalMessageInfo
+
+// The Sitelink extension recommendation.
+type Recommendation_SitelinkExtensionRecommendation struct {
+	// Sitelink extensions recommended to be added.
+	RecommendedExtensions []*common.SitelinkFeedItem `protobuf:"bytes,1,rep,name=recommended_extensions,json=recommendedExtensions,proto3" json:"recommended_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                   `json:"-"`
+	XXX_unrecognized      []byte                     `json:"-"`
+	XXX_sizecache         int32                      `json:"-"`
+}
+
+func (m *Recommendation_SitelinkExtensionRecommendation) Reset() {
+	*m = Recommendation_SitelinkExtensionRecommendation{}
+}
+func (m *Recommendation_SitelinkExtensionRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_SitelinkExtensionRecommendation) ProtoMessage() {}
+func (*Recommendation_SitelinkExtensionRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 14}
+}
+
+func (m *Recommendation_SitelinkExtensionRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_SitelinkExtensionRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_SitelinkExtensionRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation.Merge(m, src)
+}
+func (m *Recommendation_SitelinkExtensionRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation.Size(m)
+}
+func (m *Recommendation_SitelinkExtensionRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_SitelinkExtensionRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_SitelinkExtensionRecommendation) GetRecommendedExtensions() []*common.SitelinkFeedItem {
+	if m != nil {
+		return m.RecommendedExtensions
+	}
+	return nil
+}
+
+// The Call extension recommendation.
+type Recommendation_CallExtensionRecommendation struct {
+	// Call extensions recommended to be added.
+	RecommendedExtensions []*common.CallFeedItem `protobuf:"bytes,1,rep,name=recommended_extensions,json=recommendedExtensions,proto3" json:"recommended_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}               `json:"-"`
+	XXX_unrecognized      []byte                 `json:"-"`
+	XXX_sizecache         int32                  `json:"-"`
+}
+
+func (m *Recommendation_CallExtensionRecommendation) Reset() {
+	*m = Recommendation_CallExtensionRecommendation{}
+}
+func (m *Recommendation_CallExtensionRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CallExtensionRecommendation) ProtoMessage() {}
+func (*Recommendation_CallExtensionRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d8d0d8505cb0b2b, []int{0, 15}
+}
+
+func (m *Recommendation_CallExtensionRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CallExtensionRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_CallExtensionRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CallExtensionRecommendation.Marshal(b, m, deterministic)
+}
+func (m *Recommendation_CallExtensionRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CallExtensionRecommendation.Merge(m, src)
+}
+func (m *Recommendation_CallExtensionRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CallExtensionRecommendation.Size(m)
+}
+func (m *Recommendation_CallExtensionRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CallExtensionRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CallExtensionRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_CallExtensionRecommendation) GetRecommendedExtensions() []*common.CallFeedItem {
+	if m != nil {
+		return m.RecommendedExtensions
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Recommendation)(nil), "google.ads.googleads.v3.resources.Recommendation")
+	proto.RegisterType((*Recommendation_RecommendationImpact)(nil), "google.ads.googleads.v3.resources.Recommendation.RecommendationImpact")
+	proto.RegisterType((*Recommendation_RecommendationMetrics)(nil), "google.ads.googleads.v3.resources.Recommendation.RecommendationMetrics")
+	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.CampaignBudgetRecommendation")
+	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption)(nil), "google.ads.googleads.v3.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption")
+	proto.RegisterType((*Recommendation_KeywordRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.KeywordRecommendation")
+	proto.RegisterType((*Recommendation_MaximizeClicksOptInRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.MaximizeClicksOptInRecommendation")
+	proto.RegisterType((*Recommendation_TextAdRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.TextAdRecommendation")
+	proto.RegisterType((*Recommendation_MoveUnusedBudgetRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.MoveUnusedBudgetRecommendation")
+	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.TargetCpaOptInRecommendation")
+	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption)(nil), "google.ads.googleads.v3.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption")
+	proto.RegisterType((*Recommendation_CalloutExtensionRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.CalloutExtensionRecommendation")
+	proto.RegisterType((*Recommendation_MaximizeConversionsOptInRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.MaximizeConversionsOptInRecommendation")
+	proto.RegisterType((*Recommendation_EnhancedCpcOptInRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.EnhancedCpcOptInRecommendation")
+	proto.RegisterType((*Recommendation_KeywordMatchTypeRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.KeywordMatchTypeRecommendation")
+	proto.RegisterType((*Recommendation_SearchPartnersOptInRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.SearchPartnersOptInRecommendation")
+	proto.RegisterType((*Recommendation_OptimizeAdRotationRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.OptimizeAdRotationRecommendation")
+	proto.RegisterType((*Recommendation_SitelinkExtensionRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.SitelinkExtensionRecommendation")
+	proto.RegisterType((*Recommendation_CallExtensionRecommendation)(nil), "google.ads.googleads.v3.resources.Recommendation.CallExtensionRecommendation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/recommendation.proto", fileDescriptor_4d8d0d8505cb0b2b)
+}
+
+var fileDescriptor_4d8d0d8505cb0b2b = []byte{
+	// 1713 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5b, 0x6f, 0xdc, 0xb8,
+	0x15, 0x2e, 0xc7, 0x5e, 0x3b, 0x39, 0xbe, 0x25, 0x5c, 0xdb, 0x9d, 0x55, 0xbc, 0xb3, 0x63, 0x07,
+	0x4e, 0x8d, 0x6d, 0x3b, 0x53, 0xd8, 0xdb, 0xdd, 0xc5, 0xf4, 0x02, 0x8c, 0x2f, 0xeb, 0x75, 0x0b,
+	0x27, 0xae, 0x92, 0x1a, 0x41, 0x61, 0x44, 0xa5, 0x25, 0x66, 0xa2, 0x7a, 0x24, 0x2a, 0x22, 0xe5,
+	0xd8, 0x09, 0x52, 0x04, 0x6d, 0x1f, 0x7a, 0x01, 0xfa, 0x52, 0xa0, 0xc8, 0x43, 0x2f, 0x40, 0xfb,
+	0x50, 0xa0, 0x3f, 0xa0, 0xc8, 0x3f, 0x28, 0x90, 0xd7, 0x00, 0xfd, 0x03, 0x7d, 0xcb, 0x2f, 0x28,
+	0xfa, 0x54, 0x88, 0xa2, 0x34, 0x9a, 0x8b, 0xa4, 0xf1, 0x34, 0xd9, 0x37, 0x0d, 0x79, 0xbe, 0xef,
+	0x7c, 0x24, 0x0f, 0x0f, 0x0f, 0x39, 0xf0, 0x71, 0x8b, 0xb1, 0x56, 0x9b, 0xd6, 0x89, 0xc5, 0xeb,
+	0xd1, 0x67, 0xf8, 0x75, 0xba, 0x51, 0xf7, 0x29, 0x67, 0x81, 0x6f, 0x52, 0x5e, 0xf7, 0xa9, 0xc9,
+	0x1c, 0x87, 0xba, 0x16, 0x11, 0x36, 0x73, 0x6b, 0x9e, 0xcf, 0x04, 0xc3, 0xcb, 0x91, 0x71, 0x8d,
+	0x58, 0xbc, 0x96, 0xe0, 0x6a, 0xa7, 0x1b, 0xb5, 0x04, 0xa7, 0x7d, 0x3d, 0x8b, 0x3a, 0xa4, 0x63,
+	0x6e, 0xdd, 0xf4, 0x6d, 0x41, 0x7d, 0x9b, 0x44, 0x8c, 0x5a, 0xbd, 0xc0, 0x9c, 0x9e, 0x09, 0xea,
+	0x72, 0x9b, 0xb9, 0x5c, 0x01, 0x32, 0xa5, 0x53, 0x37, 0x70, 0x78, 0xfd, 0x84, 0x9e, 0x3f, 0x62,
+	0xbe, 0x65, 0x38, 0x44, 0x98, 0x0f, 0x0c, 0x71, 0xee, 0x51, 0x85, 0xfb, 0x24, 0x1f, 0xd7, 0x3d,
+	0xdc, 0x34, 0x70, 0x2f, 0x1f, 0x28, 0x88, 0xdf, 0xa2, 0xc2, 0x30, 0x3d, 0x62, 0x30, 0x4f, 0x18,
+	0xb6, 0x6b, 0xf4, 0x50, 0xb5, 0x18, 0x69, 0x2b, 0xaa, 0x0f, 0x8b, 0xa7, 0x9d, 0x58, 0xca, 0xf6,
+	0xbd, 0xd8, 0xd6, 0xb3, 0x93, 0x6e, 0xd5, 0x55, 0x51, 0x5d, 0xf2, 0xd7, 0x71, 0x70, 0xbf, 0xfe,
+	0xc8, 0x27, 0x9e, 0x47, 0xfd, 0x78, 0x8a, 0x96, 0x52, 0x50, 0xe2, 0xba, 0x4c, 0x48, 0x21, 0xaa,
+	0x77, 0xe5, 0x17, 0xeb, 0x30, 0xab, 0x77, 0x49, 0xc4, 0xd7, 0x61, 0x26, 0x76, 0x61, 0xb8, 0xc4,
+	0xa1, 0x65, 0x54, 0x45, 0x6b, 0x97, 0xf5, 0xe9, 0xb8, 0xf1, 0x26, 0x71, 0x28, 0x3e, 0x82, 0xf1,
+	0x70, 0x56, 0xca, 0xa5, 0x2a, 0x5a, 0x9b, 0x5d, 0xff, 0xbc, 0x96, 0x15, 0x0a, 0x72, 0x5a, 0x6a,
+	0xdd, 0x1e, 0xee, 0x9c, 0x7b, 0x74, 0xc7, 0x0d, 0x9c, 0x01, 0xcd, 0xba, 0x64, 0xc5, 0xf7, 0x60,
+	0xc2, 0x76, 0x3c, 0x62, 0x8a, 0xf2, 0x58, 0x15, 0xad, 0x4d, 0xad, 0x7f, 0x56, 0x2b, 0x0c, 0xb5,
+	0x1e, 0xb2, 0x9e, 0x9f, 0x7b, 0x92, 0x4d, 0x57, 0xac, 0x78, 0x07, 0xe6, 0x4c, 0xe2, 0x78, 0xc4,
+	0x6e, 0xb9, 0xc6, 0x71, 0x60, 0xb5, 0xa8, 0x28, 0xbf, 0x23, 0x1d, 0x2d, 0xc5, 0x8e, 0xe2, 0xd9,
+	0xac, 0xdd, 0x16, 0xbe, 0xed, 0xb6, 0x0e, 0x49, 0x3b, 0xa0, 0xfa, 0x6c, 0x0c, 0xda, 0x94, 0x18,
+	0xfc, 0x29, 0x5c, 0x8a, 0x5b, 0xca, 0x13, 0x43, 0xe0, 0x13, 0x6b, 0xfc, 0x09, 0x5c, 0x22, 0x96,
+	0xd1, 0xf2, 0x59, 0xe0, 0x95, 0x27, 0x87, 0x40, 0x4e, 0x12, 0x6b, 0x37, 0x34, 0xc6, 0x9f, 0xc2,
+	0x65, 0xcb, 0xe6, 0x8e, 0xcd, 0x39, 0xb5, 0xca, 0x33, 0x12, 0xa9, 0xf5, 0x21, 0x37, 0x19, 0x6b,
+	0x47, 0xb8, 0x8e, 0x31, 0xfe, 0x3d, 0x82, 0x4a, 0xcf, 0xa0, 0x7b, 0x82, 0xb3, 0x3c, 0x2e, 0xf9,
+	0x6e, 0x5e, 0x7c, 0xb2, 0xb7, 0xba, 0xe6, 0xa5, 0xbb, 0xf3, 0xf3, 0x2f, 0xe9, 0x4b, 0x66, 0x4e,
+	0x3f, 0x7e, 0x86, 0x60, 0x31, 0xde, 0xa8, 0x3d, 0x82, 0x2e, 0x49, 0x41, 0xbb, 0x17, 0x17, 0xf4,
+	0xfd, 0x88, 0xaf, 0x4f, 0xc9, 0xc2, 0xc9, 0xa0, 0x0e, 0xfc, 0x53, 0x58, 0x14, 0xf4, 0x4c, 0x18,
+	0xa4, 0x4f, 0xc1, 0xe5, 0x51, 0xe3, 0xef, 0x0e, 0x3d, 0x13, 0xcd, 0x7e, 0x01, 0xf3, 0x62, 0x40,
+	0x3b, 0x7e, 0x8e, 0xa0, 0x5a, 0x94, 0x3a, 0xca, 0x30, 0xea, 0xea, 0xdc, 0x91, 0xcc, 0x5b, 0x1e,
+	0xb9, 0xe5, 0x89, 0x3d, 0xb7, 0x7f, 0x75, 0x44, 0x4e, 0x3f, 0xfe, 0x07, 0x82, 0x0f, 0x1d, 0x72,
+	0x66, 0x3b, 0xf6, 0x63, 0x6a, 0x98, 0xcc, 0x3d, 0xa5, 0xbe, 0x4c, 0xc0, 0x19, 0x22, 0xa7, 0xa4,
+	0xc8, 0xbb, 0x17, 0x17, 0xb9, 0xaf, 0x7c, 0x6c, 0x75, 0x5c, 0x0c, 0x96, 0x7b, 0xc3, 0x19, 0xca,
+	0x12, 0xff, 0x09, 0xc1, 0x0a, 0x75, 0x1f, 0x10, 0xd7, 0xa4, 0x96, 0x61, 0x7a, 0x66, 0x86, 0xe0,
+	0x69, 0x29, 0xf8, 0xe0, 0xe2, 0x82, 0x77, 0x14, 0xf7, 0x96, 0x67, 0x0e, 0x16, 0x5a, 0xa1, 0xb9,
+	0x16, 0xf8, 0x6f, 0x08, 0x56, 0x39, 0x25, 0xbe, 0xf9, 0xc0, 0xf0, 0x88, 0x2f, 0x5c, 0xea, 0x67,
+	0x4d, 0xea, 0xac, 0xd4, 0x78, 0xfb, 0xe2, 0x1a, 0x6f, 0x4b, 0xfa, 0x03, 0xc5, 0x3e, 0x58, 0xe6,
+	0x32, 0x2f, 0x32, 0x92, 0x4a, 0x3b, 0x31, 0xd0, 0xb6, 0xcd, 0x93, 0x2c, 0xa5, 0x73, 0xa3, 0x2a,
+	0x4d, 0x96, 0x5f, 0xb2, 0x67, 0x28, 0x75, 0x8a, 0x8c, 0xf0, 0x5f, 0x11, 0x5c, 0x67, 0x9e, 0x88,
+	0x94, 0x86, 0xbb, 0x59, 0x1d, 0x77, 0xbd, 0x3a, 0xaf, 0x48, 0x9d, 0xfa, 0xc5, 0x75, 0xde, 0x52,
+	0xe4, 0x4d, 0x4b, 0x57, 0xd4, 0x7d, 0x32, 0xab, 0xac, 0xc0, 0x06, 0xff, 0x01, 0x41, 0xd5, 0x24,
+	0xed, 0x36, 0x0b, 0x84, 0x91, 0x94, 0x34, 0xbd, 0x12, 0xaf, 0x8e, 0x1a, 0x98, 0x5b, 0x11, 0xf3,
+	0x4e, 0x4c, 0xdc, 0x1f, 0x98, 0x66, 0xae, 0x05, 0xfe, 0x33, 0x82, 0x65, 0x6e, 0x0b, 0xda, 0xb6,
+	0xdd, 0x93, 0x6c, 0x7d, 0x58, 0xea, 0xfb, 0xc1, 0x08, 0x41, 0xa9, 0xa8, 0xb3, 0x05, 0x7e, 0xc0,
+	0xf3, 0x4d, 0xf0, 0xef, 0x10, 0xbc, 0x1f, 0x0e, 0x22, 0x5b, 0xdd, 0xbb, 0x52, 0xdd, 0xfe, 0x68,
+	0xb3, 0x97, 0xad, 0xec, 0x9a, 0x99, 0xdd, 0x8d, 0xff, 0x88, 0x60, 0xb9, 0xbf, 0xe2, 0xec, 0x55,
+	0x36, 0x3f, 0xea, 0xba, 0xaa, 0x33, 0x6d, 0x3f, 0x64, 0x96, 0xb5, 0x52, 0xdf, 0xba, 0x9e, 0xe4,
+	0x5a, 0x48, 0x7d, 0x0e, 0x3b, 0xa5, 0x46, 0xe0, 0x06, 0x9c, 0x5a, 0x19, 0x45, 0xc0, 0xc2, 0xa8,
+	0xfa, 0xf6, 0xd9, 0x29, 0xfd, 0xa1, 0x64, 0xce, 0x28, 0x03, 0x2a, 0x4e, 0xae, 0x85, 0xf6, 0x1f,
+	0x04, 0xf3, 0x83, 0xca, 0x36, 0xfc, 0x13, 0x98, 0x3e, 0x26, 0x9c, 0x1a, 0x0e, 0x15, 0xbe, 0x6d,
+	0x72, 0x59, 0x90, 0x8e, 0x54, 0x16, 0x74, 0xff, 0xdc, 0x8f, 0xe8, 0xf4, 0xa9, 0x90, 0x5c, 0xfd,
+	0xc0, 0x02, 0xae, 0x7a, 0x4c, 0x50, 0x57, 0xd8, 0xa4, 0x9d, 0x38, 0x2c, 0xbd, 0x59, 0x87, 0x57,
+	0x12, 0x0f, 0xaa, 0x45, 0x7b, 0x59, 0x82, 0x85, 0x81, 0xb6, 0xf8, 0xbb, 0x30, 0x65, 0x3b, 0x9e,
+	0x4f, 0xb9, 0x3c, 0xe8, 0xd4, 0xd0, 0xfb, 0x8b, 0xc5, 0x6d, 0x16, 0x1c, 0xb7, 0x69, 0x54, 0xf4,
+	0xa5, 0x01, 0xf8, 0x23, 0x98, 0x88, 0x32, 0xb6, 0x1a, 0x44, 0x3e, 0x54, 0xd9, 0xe2, 0x6f, 0xc3,
+	0x94, 0xc9, 0xb8, 0x30, 0x1c, 0xdb, 0xf4, 0x19, 0x57, 0x55, 0xf8, 0xb5, 0x3e, 0xe8, 0x9e, 0x2b,
+	0x3e, 0xfe, 0x28, 0x42, 0x42, 0x68, 0xbf, 0x2f, 0xcd, 0x43, 0xcd, 0xa9, 0x4a, 0x41, 0x95, 0x95,
+	0x05, 0x9a, 0x53, 0x00, 0xfc, 0x1d, 0x98, 0x3a, 0xb5, 0x2d, 0xca, 0x8c, 0x53, 0x9b, 0x3e, 0xe2,
+	0x99, 0xa5, 0x79, 0x1a, 0x0f, 0x12, 0x70, 0x18, 0xda, 0x6b, 0xaf, 0xc6, 0x61, 0x29, 0xaf, 0x22,
+	0xc5, 0x47, 0xb0, 0x64, 0x06, 0xbe, 0x4f, 0x5d, 0x11, 0xef, 0x01, 0xe2, 0xb0, 0xc0, 0x4d, 0x86,
+	0x8b, 0x8a, 0x87, 0xfb, 0x9e, 0x22, 0x88, 0xf8, 0x9b, 0x12, 0xae, 0x46, 0x6f, 0x41, 0x35, 0xd9,
+	0x52, 0x9d, 0x5d, 0xd6, 0xed, 0xa1, 0x54, 0xec, 0xe1, 0xfd, 0x14, 0xc9, 0x00, 0x2f, 0xcf, 0x11,
+	0xcc, 0x2a, 0xea, 0xf0, 0xbc, 0x09, 0xe7, 0x79, 0xac, 0x3a, 0xb6, 0x36, 0xb5, 0xfe, 0xf0, 0xcd,
+	0x96, 0xef, 0xb9, 0x9d, 0xb7, 0xa4, 0x67, 0x7d, 0x26, 0x12, 0x12, 0xfd, 0xe2, 0xda, 0x2b, 0x04,
+	0x2b, 0xc5, 0x28, 0xbc, 0x0f, 0xf3, 0xa3, 0xce, 0x3e, 0x3e, 0xee, 0x9f, 0x90, 0xce, 0x9d, 0xb1,
+	0xf4, 0x36, 0xee, 0x8c, 0xda, 0x0b, 0x04, 0x0b, 0x03, 0xaf, 0x15, 0x78, 0x07, 0x26, 0x55, 0xe6,
+	0x55, 0xda, 0xbf, 0x9a, 0xe9, 0x3a, 0x7a, 0xc7, 0x88, 0x53, 0xf9, 0x9e, 0x7b, 0x9f, 0xe9, 0x31,
+	0x16, 0xdf, 0x05, 0x2d, 0x1d, 0x37, 0x61, 0xc9, 0x7a, 0x6c, 0x5b, 0x17, 0x88, 0x98, 0x2f, 0xa7,
+	0xe0, 0x5b, 0x9e, 0xb9, 0x69, 0x5b, 0xd1, 0xd4, 0x68, 0xbf, 0x42, 0xb0, 0x5c, 0x58, 0x60, 0x0d,
+	0x15, 0xb7, 0xe8, 0xff, 0x8d, 0x5b, 0xed, 0x5f, 0x08, 0xe6, 0x07, 0xdd, 0x8d, 0xf0, 0x37, 0xa1,
+	0x44, 0xe2, 0x09, 0x5c, 0x1d, 0x62, 0xed, 0x9a, 0x96, 0x5e, 0x22, 0x16, 0x6e, 0xc2, 0x8c, 0xe9,
+	0xd3, 0xa8, 0xc8, 0xb3, 0x88, 0xa0, 0x99, 0x69, 0x2e, 0x7d, 0x9d, 0x9e, 0x8e, 0x21, 0xdb, 0x44,
+	0x50, 0xbc, 0x0d, 0x73, 0x24, 0x10, 0xcc, 0x20, 0x9e, 0xd7, 0x3e, 0x8f, 0x48, 0xc6, 0x86, 0x20,
+	0x99, 0x09, 0x41, 0xcd, 0x10, 0x13, 0xb2, 0x68, 0xff, 0x45, 0x50, 0xc9, 0x3f, 0x02, 0xb1, 0x0e,
+	0x8b, 0xf4, 0xcc, 0xa4, 0x9c, 0x1b, 0xbd, 0xaf, 0x0f, 0x68, 0x08, 0x7f, 0xf3, 0x11, 0xb6, 0x7b,
+	0x67, 0xe1, 0x9f, 0x23, 0x58, 0x18, 0x7c, 0x90, 0x97, 0xde, 0xc6, 0x6d, 0x5e, 0x57, 0x7b, 0xb6,
+	0xe7, 0xe8, 0xfe, 0xe7, 0x3b, 0xb0, 0x94, 0x77, 0xcd, 0xc4, 0xbf, 0x41, 0x30, 0x19, 0xe7, 0x29,
+	0x34, 0x6a, 0x9e, 0xca, 0xf3, 0x90, 0xdb, 0xa9, 0xf2, 0x54, 0xac, 0x00, 0xdf, 0x83, 0x74, 0x94,
+	0x1a, 0xa9, 0xab, 0xf7, 0xf0, 0xbb, 0x2d, 0xbd, 0x59, 0x13, 0xdf, 0x2a, 0xc8, 0x5f, 0x8c, 0xc1,
+	0x4a, 0xb1, 0x1e, 0x7c, 0x06, 0xe3, 0x2d, 0x46, 0xda, 0x72, 0xf5, 0x67, 0xd7, 0xad, 0x82, 0x47,
+	0xb4, 0x3c, 0xc2, 0x5d, 0x46, 0xda, 0xf2, 0x49, 0xad, 0xc8, 0x48, 0x97, 0x1e, 0xf1, 0x2e, 0x5c,
+	0x1d, 0x69, 0xd0, 0x73, 0xa2, 0x7b, 0xa4, 0x98, 0xc1, 0x0d, 0x9f, 0x3e, 0x0c, 0x6c, 0x3f, 0xcc,
+	0x58, 0x3d, 0xaf, 0x4b, 0xdd, 0xa9, 0x63, 0x88, 0x1a, 0x62, 0x25, 0xa6, 0xea, 0x8e, 0xc0, 0x8c,
+	0x34, 0x3f, 0xfe, 0x56, 0xd2, 0xfc, 0x2f, 0x11, 0x54, 0xf2, 0x6f, 0x50, 0xf8, 0x3e, 0x2c, 0xa6,
+	0xa3, 0xa7, 0xf3, 0x28, 0xad, 0x22, 0xbb, 0x5e, 0x94, 0xfe, 0x15, 0xff, 0x67, 0x94, 0x5a, 0x7b,
+	0x82, 0x3a, 0xfa, 0x42, 0x8a, 0x2e, 0x71, 0xca, 0xb5, 0xdf, 0x22, 0xb8, 0x31, 0xdc, 0xb3, 0xc8,
+	0x17, 0x94, 0xbb, 0xab, 0x50, 0xc9, 0x7f, 0xf5, 0xd0, 0xfe, 0x8d, 0xa0, 0x92, 0x7f, 0x4f, 0x79,
+	0x53, 0xa7, 0xe5, 0xe3, 0xee, 0x45, 0xe8, 0xdc, 0xb7, 0xd4, 0x93, 0xf4, 0x76, 0xc1, 0x6e, 0xea,
+	0x55, 0x29, 0x77, 0x4f, 0x9f, 0xf4, 0xf9, 0x94, 0x8f, 0xa4, 0x55, 0xbb, 0x0e, 0xcb, 0x85, 0x2f,
+	0x2b, 0xda, 0x0a, 0x54, 0x8b, 0x1e, 0x0b, 0xb4, 0x5f, 0x23, 0xf8, 0xa0, 0xe0, 0x3a, 0x8c, 0x5b,
+	0x05, 0xd1, 0xf6, 0x8d, 0xa2, 0xe9, 0x8b, 0x1d, 0x14, 0x85, 0xdb, 0xcf, 0x10, 0x5c, 0xcb, 0xb9,
+	0xfd, 0x62, 0xb3, 0x40, 0xc8, 0xd7, 0x86, 0x09, 0xfb, 0x02, 0x11, 0x0d, 0xf3, 0x75, 0xf3, 0xc7,
+	0xf0, 0x95, 0x0e, 0x5a, 0x7d, 0x79, 0x36, 0x0f, 0x59, 0xea, 0xbd, 0x35, 0x83, 0x19, 0x70, 0xc1,
+	0x1c, 0xea, 0xf3, 0xfa, 0x93, 0xf8, 0xf3, 0x69, 0xcf, 0xbf, 0x37, 0xbc, 0xfe, 0xa4, 0xbb, 0xe1,
+	0xe9, 0xe6, 0x15, 0x98, 0xed, 0x6e, 0xda, 0x7c, 0x56, 0x82, 0x55, 0x93, 0x39, 0xc5, 0xb9, 0x64,
+	0xf3, 0xdd, 0x6e, 0x09, 0x07, 0xe1, 0x2e, 0x3a, 0x40, 0x3f, 0xfa, 0x9e, 0x42, 0xb6, 0x58, 0x9b,
+	0xb8, 0xad, 0x1a, 0xf3, 0x5b, 0xf5, 0x16, 0x75, 0xe5, 0x1e, 0xab, 0x77, 0xc6, 0x90, 0xf3, 0x5f,
+	0xcf, 0xb7, 0x92, 0xaf, 0xbf, 0x94, 0xc6, 0x76, 0x9b, 0xcd, 0xbf, 0x97, 0x96, 0x77, 0x23, 0xca,
+	0xa6, 0xc5, 0x6b, 0xd1, 0x67, 0xf8, 0x75, 0xb8, 0x51, 0xd3, 0x63, 0xcb, 0x97, 0xb1, 0xcd, 0x51,
+	0xd3, 0xe2, 0x47, 0x89, 0xcd, 0xd1, 0xe1, 0xc6, 0x51, 0x62, 0xf3, 0xba, 0xb4, 0x1a, 0x75, 0x34,
+	0x1a, 0x4d, 0x8b, 0x37, 0x1a, 0x89, 0x55, 0xa3, 0x71, 0xb8, 0xd1, 0x68, 0x24, 0x76, 0xc7, 0x13,
+	0x52, 0xec, 0xc6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x20, 0x4a, 0x9e, 0x0e, 0x1c, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/remarketing_action.pb.go b/googleapis/ads/googleads/v3/resources/remarketing_action.pb.go
new file mode 100644
index 0000000..1946dff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/remarketing_action.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/remarketing_action.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A remarketing action. A snippet of JavaScript code that will collect the
+// product id and the type of page people visited (product page, shopping cart
+// page, purchase page, general site visit) on an advertiser's website.
+type RemarketingAction struct {
+	// The resource name of the remarketing action.
+	// Remarketing action resource names have the form:
+	//
+	// `customers/{customer_id}/remarketingActions/{remarketing_action_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Id of the remarketing action.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the remarketing action.
+	//
+	// This field is required and should not be empty when creating new
+	// remarketing actions.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The snippets used for tracking remarketing actions.
+	TagSnippets          []*common.TagSnippet `protobuf:"bytes,4,rep,name=tag_snippets,json=tagSnippets,proto3" json:"tag_snippets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *RemarketingAction) Reset()         { *m = RemarketingAction{} }
+func (m *RemarketingAction) String() string { return proto.CompactTextString(m) }
+func (*RemarketingAction) ProtoMessage()    {}
+func (*RemarketingAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c40c8690943ef763, []int{0}
+}
+
+func (m *RemarketingAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RemarketingAction.Unmarshal(m, b)
+}
+func (m *RemarketingAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RemarketingAction.Marshal(b, m, deterministic)
+}
+func (m *RemarketingAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RemarketingAction.Merge(m, src)
+}
+func (m *RemarketingAction) XXX_Size() int {
+	return xxx_messageInfo_RemarketingAction.Size(m)
+}
+func (m *RemarketingAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_RemarketingAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RemarketingAction proto.InternalMessageInfo
+
+func (m *RemarketingAction) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *RemarketingAction) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *RemarketingAction) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *RemarketingAction) GetTagSnippets() []*common.TagSnippet {
+	if m != nil {
+		return m.TagSnippets
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*RemarketingAction)(nil), "google.ads.googleads.v3.resources.RemarketingAction")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/remarketing_action.proto", fileDescriptor_c40c8690943ef763)
+}
+
+var fileDescriptor_c40c8690943ef763 = []byte{
+	// 435 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x6b, 0x14, 0x31,
+	0x14, 0xc7, 0x99, 0x6c, 0x11, 0xcc, 0xd6, 0x83, 0x73, 0x90, 0xb5, 0x16, 0xd9, 0x2a, 0x85, 0xa5,
+	0x42, 0x52, 0x3a, 0xe2, 0x21, 0x7a, 0x99, 0x5e, 0x8a, 0x82, 0x52, 0xa6, 0x32, 0x07, 0x19, 0x58,
+	0xd2, 0x99, 0x18, 0xa2, 0x9b, 0x64, 0x48, 0x32, 0xf5, 0x50, 0x7a, 0xf2, 0x9b, 0x78, 0xf4, 0xa3,
+	0x78, 0xf7, 0x4b, 0xec, 0xa7, 0x90, 0x99, 0xcc, 0x64, 0x17, 0x86, 0xb5, 0xb7, 0xff, 0xee, 0xfb,
+	0xfd, 0x5f, 0xde, 0xfb, 0xcf, 0x83, 0x84, 0x6b, 0xcd, 0x57, 0x0c, 0xd3, 0xca, 0x62, 0x2f, 0x5b,
+	0x75, 0x93, 0x60, 0xc3, 0xac, 0x6e, 0x4c, 0xc9, 0x2c, 0x36, 0x4c, 0x52, 0xf3, 0x9d, 0x39, 0xa1,
+	0xf8, 0x92, 0x96, 0x4e, 0x68, 0x85, 0x6a, 0xa3, 0x9d, 0x8e, 0x8f, 0xbc, 0x01, 0xd1, 0xca, 0xa2,
+	0xe0, 0x45, 0x37, 0x09, 0x0a, 0xde, 0x83, 0xd3, 0x5d, 0xed, 0x4b, 0x2d, 0xa5, 0x56, 0xd8, 0x51,
+	0xbe, 0xb4, 0x4a, 0xd4, 0x35, 0x73, 0xbe, 0xe9, 0xc1, 0xd3, 0xc1, 0x51, 0x8b, 0x30, 0x43, 0x5f,
+	0x7a, 0xde, 0x97, 0xba, 0x5f, 0xd7, 0xcd, 0x57, 0xfc, 0xc3, 0xd0, 0xba, 0x66, 0xc6, 0xf6, 0xf5,
+	0xc3, 0x2d, 0x2b, 0x55, 0x4a, 0x3b, 0xda, 0x0e, 0xdb, 0x57, 0x5f, 0xfc, 0x05, 0xf0, 0x71, 0xb6,
+	0x59, 0x25, 0xed, 0x36, 0x89, 0x5f, 0xc2, 0x47, 0xc3, 0x2b, 0x4b, 0x45, 0x25, 0x9b, 0x45, 0xf3,
+	0x68, 0xf1, 0x30, 0xdb, 0x1f, 0xfe, 0xfc, 0x44, 0x25, 0x8b, 0x5f, 0x41, 0x20, 0xaa, 0x19, 0x98,
+	0x47, 0x8b, 0xe9, 0xd9, 0xb3, 0x7e, 0x55, 0x34, 0x4c, 0x81, 0xde, 0x2b, 0xf7, 0xe6, 0x75, 0x4e,
+	0x57, 0x0d, 0xcb, 0x80, 0xa8, 0xe2, 0x53, 0xb8, 0xd7, 0x35, 0x9a, 0x74, 0xf8, 0xe1, 0x08, 0xbf,
+	0x72, 0x46, 0x28, 0xee, 0xf9, 0x8e, 0x8c, 0x3f, 0xc2, 0xfd, 0xad, 0x1c, 0xec, 0x6c, 0x6f, 0x3e,
+	0x59, 0x4c, 0xcf, 0x4e, 0xd0, 0xae, 0x78, 0x7d, 0x76, 0xe8, 0x33, 0xe5, 0x57, 0xde, 0x92, 0x4d,
+	0x5d, 0xd0, 0x96, 0xc8, 0x75, 0xfa, 0x0d, 0x9e, 0x6c, 0x1c, 0xbd, 0xaa, 0x85, 0x6d, 0x9d, 0x78,
+	0x9c, 0xc1, 0xbb, 0xb2, 0xb1, 0x4e, 0x4b, 0x66, 0x2c, 0xbe, 0x1d, 0xe4, 0xdd, 0xf6, 0x67, 0xf7,
+	0x9c, 0xc5, 0xb7, 0xe3, 0x53, 0xb8, 0x3b, 0xff, 0x09, 0xe0, 0x71, 0xa9, 0x25, 0xba, 0xf7, 0x18,
+	0xce, 0x9f, 0x8c, 0x9e, 0xbe, 0x6c, 0x43, 0xb9, 0x8c, 0xbe, 0x7c, 0xe8, 0xcd, 0x5c, 0xaf, 0xa8,
+	0xe2, 0x48, 0x1b, 0x8e, 0x39, 0x53, 0x5d, 0x64, 0x78, 0x33, 0xfe, 0x7f, 0x8e, 0xf4, 0x6d, 0x50,
+	0xbf, 0xc0, 0xe4, 0x22, 0x4d, 0x7f, 0x83, 0xa3, 0x0b, 0xdf, 0x32, 0xad, 0x2c, 0xf2, 0xb2, 0x55,
+	0x79, 0x82, 0xb2, 0x81, 0xfc, 0x33, 0x30, 0x45, 0x5a, 0xd9, 0x22, 0x30, 0x45, 0x9e, 0x14, 0x81,
+	0x59, 0x83, 0x63, 0x5f, 0x20, 0x24, 0xad, 0x2c, 0x21, 0x81, 0x22, 0x24, 0x4f, 0x08, 0x09, 0xdc,
+	0xf5, 0x83, 0x6e, 0xd8, 0xe4, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x41, 0x27, 0xec, 0x50,
+	0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/search_term_view.pb.go b/googleapis/ads/googleads/v3/resources/search_term_view.pb.go
new file mode 100644
index 0000000..e344fed
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/search_term_view.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/search_term_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A search term view with metrics aggregated by search term at the ad group
+// level.
+type SearchTermView struct {
+	// The resource name of the search term view.
+	// Search term view resource names have the form:
+	//
+	// `customers/{customer_id}/searchTermViews/{campaign_id}~{ad_group_id}~{URL-base64_search_term}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The search term.
+	SearchTerm *wrappers.StringValue `protobuf:"bytes,2,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	// The ad group the search term served in.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Indicates whether the search term is currently one of your
+	// targeted or excluded keywords.
+	Status               enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *SearchTermView) Reset()         { *m = SearchTermView{} }
+func (m *SearchTermView) String() string { return proto.CompactTextString(m) }
+func (*SearchTermView) ProtoMessage()    {}
+func (*SearchTermView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5cc5622e8cea5d3c, []int{0}
+}
+
+func (m *SearchTermView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermView.Unmarshal(m, b)
+}
+func (m *SearchTermView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermView.Marshal(b, m, deterministic)
+}
+func (m *SearchTermView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermView.Merge(m, src)
+}
+func (m *SearchTermView) XXX_Size() int {
+	return xxx_messageInfo_SearchTermView.Size(m)
+}
+func (m *SearchTermView) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermView proto.InternalMessageInfo
+
+func (m *SearchTermView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SearchTermView) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func (m *SearchTermView) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *SearchTermView) GetStatus() enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.SearchTermTargetingStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*SearchTermView)(nil), "google.ads.googleads.v3.resources.SearchTermView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/search_term_view.proto", fileDescriptor_5cc5622e8cea5d3c)
+}
+
+var fileDescriptor_5cc5622e8cea5d3c = []byte{
+	// 446 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x6b, 0x13, 0x41,
+	0x1c, 0x65, 0x37, 0x52, 0x75, 0xaa, 0x3d, 0xac, 0x97, 0x58, 0x8a, 0xa4, 0x4a, 0x31, 0xa7, 0x19,
+	0xe8, 0x1e, 0x2a, 0x23, 0x82, 0x5b, 0x90, 0x80, 0x07, 0x29, 0x49, 0xd9, 0x83, 0x04, 0x96, 0xc9,
+	0xee, 0xcf, 0x71, 0x21, 0x33, 0xb3, 0xcc, 0xcc, 0x26, 0x87, 0x52, 0xf0, 0xe0, 0x27, 0xf1, 0xe8,
+	0x47, 0xf1, 0xa3, 0xf4, 0x53, 0xc8, 0xfe, 0x99, 0x49, 0x13, 0x88, 0xf6, 0xf6, 0x76, 0x7f, 0xef,
+	0xfd, 0xde, 0x9b, 0xc7, 0x0f, 0xbd, 0xe3, 0x4a, 0xf1, 0x25, 0x10, 0x56, 0x18, 0xd2, 0xc1, 0x06,
+	0xad, 0x62, 0xa2, 0xc1, 0xa8, 0x5a, 0xe7, 0x60, 0x88, 0x01, 0xa6, 0xf3, 0xef, 0x99, 0x05, 0x2d,
+	0xb2, 0x55, 0x09, 0x6b, 0x5c, 0x69, 0x65, 0x55, 0x74, 0xda, 0xd1, 0x31, 0x2b, 0x0c, 0xf6, 0x4a,
+	0xbc, 0x8a, 0xb1, 0x57, 0x1e, 0x7f, 0xdc, 0xb7, 0x1c, 0x64, 0x2d, 0xb6, 0x17, 0x5b, 0xa6, 0x39,
+	0xd8, 0x52, 0xf2, 0xcc, 0x58, 0x66, 0x6b, 0xd3, 0x99, 0x1c, 0xbf, 0x74, 0x1b, 0xaa, 0xd2, 0x27,
+	0xea, 0x47, 0xaf, 0xfa, 0x51, 0xfb, 0xb5, 0xa8, 0xbf, 0x91, 0xb5, 0x66, 0x55, 0x05, 0xda, 0x49,
+	0x4f, 0xee, 0x49, 0x99, 0x94, 0xca, 0x32, 0x5b, 0x2a, 0xd9, 0x4f, 0x5f, 0xff, 0x1c, 0xa0, 0xa3,
+	0x59, 0xeb, 0x7f, 0x0d, 0x5a, 0xa4, 0x25, 0xac, 0xa3, 0x37, 0xe8, 0xb9, 0xb3, 0xc8, 0x24, 0x13,
+	0x30, 0x0c, 0x46, 0xc1, 0xf8, 0xe9, 0xf4, 0x99, 0xfb, 0xf9, 0x85, 0x09, 0x88, 0x3e, 0xa0, 0xc3,
+	0x7b, 0xb1, 0x87, 0xe1, 0x28, 0x18, 0x1f, 0x9e, 0x9f, 0xf4, 0x05, 0x60, 0x97, 0x05, 0xcf, 0xac,
+	0x2e, 0x25, 0x4f, 0xd9, 0xb2, 0x86, 0x29, 0x32, 0xde, 0x27, 0xba, 0x40, 0x4f, 0x58, 0x91, 0x71,
+	0xad, 0xea, 0x6a, 0x38, 0x78, 0x80, 0xf6, 0x31, 0x2b, 0x26, 0x0d, 0x39, 0x92, 0xe8, 0xa0, 0x2b,
+	0x66, 0xf8, 0x68, 0x14, 0x8c, 0x8f, 0xce, 0x53, 0xbc, 0xaf, 0xfe, 0xb6, 0x5b, 0xbc, 0x79, 0xdb,
+	0xb5, 0x6b, 0x76, 0xd6, 0xea, 0x3f, 0xc9, 0x5a, 0xec, 0x9f, 0x4e, 0x7b, 0x17, 0x0a, 0x77, 0xc9,
+	0x02, 0xbd, 0xdd, 0x2c, 0xee, 0x51, 0x55, 0x1a, 0x9c, 0x2b, 0x41, 0x76, 0xaa, 0xbb, 0xc8, 0x6b,
+	0x63, 0x95, 0x00, 0x6d, 0xc8, 0x8d, 0x83, 0xb7, 0xc4, 0x6c, 0x91, 0x0c, 0xb9, 0xd9, 0xbd, 0xa4,
+	0xdb, 0xcb, 0x1f, 0x21, 0x3a, 0xcb, 0x95, 0xc0, 0xff, 0xbd, 0xa5, 0xcb, 0x17, 0xdb, 0x96, 0x57,
+	0x4d, 0x5b, 0x57, 0xc1, 0xd7, 0xcf, 0xbd, 0x92, 0xab, 0x25, 0x93, 0x1c, 0x2b, 0xcd, 0x09, 0x07,
+	0xd9, 0x76, 0x49, 0x36, 0x99, 0xff, 0x71, 0xde, 0xef, 0x3d, 0xfa, 0x15, 0x0e, 0x26, 0x49, 0xf2,
+	0x3b, 0x3c, 0x9d, 0x74, 0x2b, 0x93, 0xc2, 0xe0, 0x0e, 0x36, 0x28, 0x8d, 0xf1, 0xd4, 0x31, 0xff,
+	0x38, 0xce, 0x3c, 0x29, 0xcc, 0xdc, 0x73, 0xe6, 0x69, 0x3c, 0xf7, 0x9c, 0xbb, 0xf0, 0xac, 0x1b,
+	0x50, 0x9a, 0x14, 0x86, 0x52, 0xcf, 0xa2, 0x34, 0x8d, 0x29, 0xf5, 0xbc, 0xc5, 0x41, 0x1b, 0x36,
+	0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x18, 0x5c, 0x86, 0xcb, 0x8a, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/shared_criterion.pb.go b/googleapis/ads/googleads/v3/resources/shared_criterion.pb.go
new file mode 100644
index 0000000..6ddcd33
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/shared_criterion.pb.go
@@ -0,0 +1,264 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/shared_criterion.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A criterion belonging to a shared set.
+type SharedCriterion struct {
+	// The resource name of the shared criterion.
+	// Shared set resource names have the form:
+	//
+	// `customers/{customer_id}/sharedCriteria/{shared_set_id}~{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The shared set to which the shared criterion belongs.
+	SharedSet *wrappers.StringValue `protobuf:"bytes,2,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,26,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,4,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// The criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*SharedCriterion_Keyword
+	//	*SharedCriterion_YoutubeVideo
+	//	*SharedCriterion_YoutubeChannel
+	//	*SharedCriterion_Placement
+	//	*SharedCriterion_MobileAppCategory
+	//	*SharedCriterion_MobileApplication
+	Criterion            isSharedCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *SharedCriterion) Reset()         { *m = SharedCriterion{} }
+func (m *SharedCriterion) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterion) ProtoMessage()    {}
+func (*SharedCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4619a4fc8d25dd41, []int{0}
+}
+
+func (m *SharedCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterion.Unmarshal(m, b)
+}
+func (m *SharedCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterion.Marshal(b, m, deterministic)
+}
+func (m *SharedCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterion.Merge(m, src)
+}
+func (m *SharedCriterion) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterion.Size(m)
+}
+func (m *SharedCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterion proto.InternalMessageInfo
+
+func (m *SharedCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SharedCriterion) GetSharedSet() *wrappers.StringValue {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+type isSharedCriterion_Criterion interface {
+	isSharedCriterion_Criterion()
+}
+
+type SharedCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,3,opt,name=keyword,proto3,oneof"`
+}
+
+type SharedCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,5,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type SharedCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,6,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type SharedCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,7,opt,name=placement,proto3,oneof"`
+}
+
+type SharedCriterion_MobileAppCategory struct {
+	MobileAppCategory *common.MobileAppCategoryInfo `protobuf:"bytes,8,opt,name=mobile_app_category,json=mobileAppCategory,proto3,oneof"`
+}
+
+type SharedCriterion_MobileApplication struct {
+	MobileApplication *common.MobileApplicationInfo `protobuf:"bytes,9,opt,name=mobile_application,json=mobileApplication,proto3,oneof"`
+}
+
+func (*SharedCriterion_Keyword) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_YoutubeVideo) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_YoutubeChannel) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_Placement) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_MobileAppCategory) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_MobileApplication) isSharedCriterion_Criterion() {}
+
+func (m *SharedCriterion) GetCriterion() isSharedCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetMobileAppCategory() *common.MobileAppCategoryInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_MobileAppCategory); ok {
+		return x.MobileAppCategory
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetMobileApplication() *common.MobileApplicationInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_MobileApplication); ok {
+		return x.MobileApplication
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SharedCriterion) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*SharedCriterion_Keyword)(nil),
+		(*SharedCriterion_YoutubeVideo)(nil),
+		(*SharedCriterion_YoutubeChannel)(nil),
+		(*SharedCriterion_Placement)(nil),
+		(*SharedCriterion_MobileAppCategory)(nil),
+		(*SharedCriterion_MobileApplication)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*SharedCriterion)(nil), "google.ads.googleads.v3.resources.SharedCriterion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/shared_criterion.proto", fileDescriptor_4619a4fc8d25dd41)
+}
+
+var fileDescriptor_4619a4fc8d25dd41 = []byte{
+	// 637 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x6a, 0xd4, 0x4e,
+	0x14, 0xc7, 0x7f, 0xbb, 0xed, 0xaf, 0x75, 0xa7, 0xff, 0x30, 0x7a, 0x11, 0x6b, 0x91, 0x56, 0x29,
+	0x2c, 0x48, 0x27, 0xb2, 0xab, 0x45, 0x52, 0x28, 0xa4, 0x45, 0x6a, 0x95, 0x4a, 0xd9, 0x96, 0x15,
+	0x65, 0x65, 0x99, 0x4d, 0x4e, 0xd3, 0x60, 0x32, 0x13, 0x66, 0x26, 0x2d, 0x4b, 0xe9, 0x85, 0xef,
+	0xe1, 0x95, 0x97, 0x3e, 0x8a, 0x8f, 0xd2, 0xa7, 0x90, 0x4c, 0x66, 0x66, 0x75, 0xcb, 0xba, 0x7a,
+	0x77, 0x32, 0xe7, 0xfb, 0xfd, 0x9c, 0x33, 0x33, 0x99, 0x83, 0x5e, 0xc6, 0x8c, 0xc5, 0x29, 0x78,
+	0x24, 0x12, 0x5e, 0x15, 0x96, 0xd1, 0x45, 0xdb, 0xe3, 0x20, 0x58, 0xc1, 0x43, 0x10, 0x9e, 0x38,
+	0x27, 0x1c, 0xa2, 0x7e, 0xc8, 0x13, 0x09, 0x3c, 0x61, 0x14, 0xe7, 0x9c, 0x49, 0xe6, 0x6c, 0x54,
+	0x72, 0x4c, 0x22, 0x81, 0xad, 0x13, 0x5f, 0xb4, 0xb1, 0x75, 0xae, 0x6e, 0x4d, 0x82, 0x87, 0x2c,
+	0xcb, 0x18, 0xf5, 0x34, 0x92, 0x54, 0xc4, 0xd5, 0xd6, 0x24, 0x39, 0xd0, 0x22, 0x13, 0x9e, 0x6d,
+	0xa0, 0x2f, 0x87, 0x39, 0x68, 0xcf, 0x03, 0xe3, 0xc9, 0x13, 0xdb, 0xb2, 0x4e, 0x3d, 0xd2, 0x29,
+	0xf5, 0x35, 0x28, 0xce, 0xbc, 0x4b, 0x4e, 0xf2, 0x1c, 0xb8, 0xd0, 0xf9, 0xb5, 0x5f, 0xac, 0x84,
+	0x52, 0x26, 0x89, 0x4c, 0x18, 0xd5, 0xd9, 0xc7, 0x5f, 0xe7, 0xd1, 0xca, 0x89, 0xda, 0xf9, 0xbe,
+	0xa9, 0xeb, 0x3c, 0x41, 0x4b, 0xa6, 0x46, 0x9f, 0x92, 0x0c, 0xdc, 0xda, 0x7a, 0xad, 0xd9, 0xe8,
+	0x2c, 0x9a, 0xc5, 0x77, 0x24, 0x03, 0x67, 0x07, 0x21, 0x7d, 0x62, 0x02, 0xa4, 0x5b, 0x5f, 0xaf,
+	0x35, 0x17, 0x5a, 0x6b, 0xfa, 0x84, 0xb0, 0xe9, 0x05, 0x9f, 0x48, 0x9e, 0xd0, 0xb8, 0x4b, 0xd2,
+	0x02, 0x3a, 0x8d, 0x4a, 0x7f, 0x02, 0xd2, 0xd9, 0x45, 0x8b, 0xa3, 0x6d, 0x26, 0x91, 0xbb, 0xaa,
+	0xec, 0x0f, 0x6f, 0xd9, 0x0f, 0xa9, 0xdc, 0x7e, 0x5e, 0xb9, 0x17, 0xac, 0xe1, 0x30, 0x72, 0x3a,
+	0x68, 0xb6, 0x3c, 0x1c, 0x77, 0x76, 0xbd, 0xd6, 0x5c, 0x6e, 0xed, 0xe2, 0x49, 0x77, 0xa4, 0x4e,
+	0x14, 0xdb, 0x9d, 0x9d, 0x0e, 0x73, 0x78, 0x45, 0x8b, 0xec, 0xf7, 0x95, 0x8e, 0x62, 0x39, 0x07,
+	0x68, 0xfe, 0x33, 0x0c, 0x2f, 0x19, 0x8f, 0xdc, 0x19, 0xd5, 0xce, 0xd3, 0x89, 0xd8, 0xea, 0x5e,
+	0xf1, 0xdb, 0x4a, 0x7e, 0x48, 0xcf, 0xd8, 0xeb, 0xff, 0x3a, 0xc6, 0xed, 0xbc, 0x47, 0x4b, 0x43,
+	0x56, 0xc8, 0x62, 0x00, 0xfd, 0x8b, 0x24, 0x02, 0xe6, 0xfe, 0xaf, 0x70, 0xcf, 0xa6, 0xe1, 0x3e,
+	0xb0, 0xe2, 0xb4, 0x18, 0x40, 0xb7, 0xf4, 0x68, 0xe6, 0xa2, 0x06, 0xa9, 0x35, 0xe7, 0x13, 0x5a,
+	0x31, 0xe0, 0xf0, 0x9c, 0x50, 0x0a, 0xa9, 0x3b, 0xa7, 0xd0, 0xad, 0xbf, 0x44, 0xef, 0x57, 0x2e,
+	0x0d, 0x5f, 0xd6, 0x30, 0xbd, 0xea, 0x1c, 0xa1, 0x46, 0x9e, 0x92, 0x10, 0x32, 0xa0, 0xd2, 0x9d,
+	0x57, 0xe0, 0xad, 0x69, 0xe0, 0x63, 0x63, 0xd0, 0xcc, 0x11, 0xc1, 0x89, 0xd1, 0xbd, 0x8c, 0x0d,
+	0x92, 0x14, 0xfa, 0x24, 0xcf, 0xfb, 0x21, 0x91, 0x10, 0x33, 0x3e, 0x74, 0xef, 0x28, 0xf0, 0x8b,
+	0x69, 0xe0, 0x23, 0x65, 0x0d, 0xf2, 0x7c, 0x5f, 0x1b, 0x75, 0x81, 0xbb, 0xd9, 0x78, 0xc2, 0x39,
+	0x43, 0xce, 0xa8, 0x50, 0x9a, 0x84, 0xea, 0xff, 0x76, 0x1b, 0xff, 0x58, 0xc7, 0x18, 0x6f, 0xd5,
+	0x31, 0x09, 0x1f, 0x6e, 0x82, 0x01, 0x6a, 0x8e, 0x20, 0x3a, 0xca, 0x13, 0x51, 0xc2, 0xbc, 0xf1,
+	0x57, 0xb4, 0x1d, 0x16, 0x42, 0xb2, 0x0c, 0xb8, 0xf0, 0xae, 0x4c, 0x78, 0xad, 0xa7, 0x8c, 0x56,
+	0x11, 0xef, 0x6a, 0x7c, 0xea, 0x5c, 0xef, 0x2d, 0xa0, 0x86, 0xfd, 0xda, 0xfb, 0x52, 0x47, 0x9b,
+	0x21, 0xcb, 0xf0, 0xd4, 0x21, 0xb4, 0x77, 0x7f, 0xac, 0xfe, 0x71, 0xf9, 0x86, 0x8e, 0x6b, 0x1f,
+	0xdf, 0x68, 0x6b, 0xcc, 0x52, 0x42, 0x63, 0xcc, 0x78, 0xec, 0xc5, 0x40, 0xd5, 0x0b, 0xf3, 0x46,
+	0x3b, 0xf8, 0xc3, 0x60, 0xdc, 0xb1, 0xd1, 0xb7, 0xfa, 0xcc, 0x41, 0x10, 0x7c, 0xaf, 0x6f, 0x1c,
+	0x54, 0xc8, 0x20, 0x12, 0xb8, 0x0a, 0xcb, 0xa8, 0xdb, 0xc6, 0x1d, 0xa3, 0xfc, 0x61, 0x34, 0xbd,
+	0x20, 0x12, 0x3d, 0xab, 0xe9, 0x75, 0xdb, 0x3d, 0xab, 0xb9, 0xa9, 0x6f, 0x56, 0x09, 0xdf, 0x0f,
+	0x22, 0xe1, 0xfb, 0x56, 0xe5, 0xfb, 0xdd, 0xb6, 0xef, 0x5b, 0xdd, 0x60, 0x4e, 0x35, 0xdb, 0xfe,
+	0x19, 0x00, 0x00, 0xff, 0xff, 0x99, 0xd7, 0x6f, 0xb6, 0xc4, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/shared_set.pb.go b/googleapis/ads/googleads/v3/resources/shared_set.pb.go
new file mode 100644
index 0000000..d55c01d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/shared_set.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/shared_set.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// SharedSets are used for sharing criterion exclusions across multiple
+// campaigns.
+type SharedSet struct {
+	// The resource name of the shared set.
+	// Shared set resource names have the form:
+	//
+	// `customers/{customer_id}/sharedSets/{shared_set_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of this shared set. Read only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The type of this shared set: each shared set holds only a single kind
+	// of resource. Required. Immutable.
+	Type enums.SharedSetTypeEnum_SharedSetType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.SharedSetTypeEnum_SharedSetType" json:"type,omitempty"`
+	// The name of this shared set. Required.
+	// Shared Sets must have names that are unique among active shared sets of
+	// the same type.
+	// The length of this string should be between 1 and 255 UTF-8 bytes,
+	// inclusive.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of this shared set. Read only.
+	Status enums.SharedSetStatusEnum_SharedSetStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.SharedSetStatusEnum_SharedSetStatus" json:"status,omitempty"`
+	// The number of shared criteria within this shared set. Read only.
+	MemberCount *wrappers.Int64Value `protobuf:"bytes,6,opt,name=member_count,json=memberCount,proto3" json:"member_count,omitempty"`
+	// The number of campaigns associated with this shared set. Read only.
+	ReferenceCount       *wrappers.Int64Value `protobuf:"bytes,7,opt,name=reference_count,json=referenceCount,proto3" json:"reference_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *SharedSet) Reset()         { *m = SharedSet{} }
+func (m *SharedSet) String() string { return proto.CompactTextString(m) }
+func (*SharedSet) ProtoMessage()    {}
+func (*SharedSet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4d9291edd18f8ee2, []int{0}
+}
+
+func (m *SharedSet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSet.Unmarshal(m, b)
+}
+func (m *SharedSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSet.Marshal(b, m, deterministic)
+}
+func (m *SharedSet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSet.Merge(m, src)
+}
+func (m *SharedSet) XXX_Size() int {
+	return xxx_messageInfo_SharedSet.Size(m)
+}
+func (m *SharedSet) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSet proto.InternalMessageInfo
+
+func (m *SharedSet) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SharedSet) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *SharedSet) GetType() enums.SharedSetTypeEnum_SharedSetType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.SharedSetTypeEnum_UNSPECIFIED
+}
+
+func (m *SharedSet) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *SharedSet) GetStatus() enums.SharedSetStatusEnum_SharedSetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.SharedSetStatusEnum_UNSPECIFIED
+}
+
+func (m *SharedSet) GetMemberCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.MemberCount
+	}
+	return nil
+}
+
+func (m *SharedSet) GetReferenceCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.ReferenceCount
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*SharedSet)(nil), "google.ads.googleads.v3.resources.SharedSet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/shared_set.proto", fileDescriptor_4d9291edd18f8ee2)
+}
+
+var fileDescriptor_4d9291edd18f8ee2 = []byte{
+	// 502 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xd1, 0x6a, 0xd4, 0x40,
+	0x14, 0x25, 0xe9, 0xba, 0xd2, 0x69, 0x5d, 0x21, 0x4f, 0x6b, 0x2d, 0xb2, 0xad, 0x14, 0x16, 0x94,
+	0x19, 0xd9, 0xa8, 0x0f, 0x11, 0x0a, 0x59, 0x95, 0xa2, 0x0f, 0x52, 0xb2, 0xba, 0x0f, 0x65, 0x61,
+	0x99, 0x4d, 0x6e, 0x63, 0x60, 0x33, 0x13, 0x66, 0x26, 0x95, 0x52, 0xfa, 0x27, 0x3e, 0xf9, 0xe8,
+	0xa7, 0xf8, 0x29, 0xfd, 0x05, 0x5f, 0x24, 0x33, 0x93, 0xd9, 0x16, 0x69, 0xb7, 0x6f, 0x27, 0x73,
+	0xcf, 0x39, 0xf7, 0xdc, 0x9b, 0x19, 0x34, 0xca, 0x39, 0xcf, 0x97, 0x40, 0x68, 0x26, 0x89, 0x81,
+	0x0d, 0x3a, 0x0b, 0x89, 0x00, 0xc9, 0x6b, 0x91, 0x82, 0x24, 0xf2, 0x3b, 0x15, 0x90, 0xcd, 0x25,
+	0x28, 0x5c, 0x09, 0xae, 0x78, 0xb0, 0x67, 0x88, 0x98, 0x66, 0x12, 0x3b, 0x0d, 0x3e, 0x0b, 0xb1,
+	0xd3, 0xec, 0xbc, 0xb9, 0xcd, 0x16, 0x58, 0x5d, 0x5e, 0xb7, 0x9c, 0x4b, 0x45, 0x55, 0x2d, 0x8d,
+	0xf3, 0x4e, 0x78, 0x6f, 0x99, 0x3a, 0xaf, 0xc0, 0x8a, 0x9e, 0xb4, 0xa2, 0xaa, 0x70, 0xa9, 0x6d,
+	0xe9, 0x99, 0x2d, 0xe9, 0xaf, 0x45, 0x7d, 0x4a, 0x7e, 0x08, 0x5a, 0x55, 0x20, 0xda, 0x7e, 0xbb,
+	0xd7, 0xa4, 0x94, 0x31, 0xae, 0xa8, 0x2a, 0x38, 0xb3, 0xd5, 0xfd, 0x9f, 0x1d, 0xb4, 0x39, 0xd1,
+	0x2d, 0x27, 0xa0, 0x82, 0xe7, 0xe8, 0x51, 0xeb, 0x3e, 0x67, 0xb4, 0x84, 0xbe, 0x37, 0xf0, 0x86,
+	0x9b, 0xc9, 0x76, 0x7b, 0xf8, 0x85, 0x96, 0x10, 0xbc, 0x40, 0x7e, 0x91, 0xf5, 0xfd, 0x81, 0x37,
+	0xdc, 0x1a, 0x3d, 0xb5, 0xcb, 0xc1, 0x6d, 0x77, 0xfc, 0x89, 0xa9, 0xb7, 0xaf, 0xa7, 0x74, 0x59,
+	0x43, 0xe2, 0x17, 0x59, 0x90, 0xa0, 0x4e, 0x33, 0x46, 0x7f, 0x63, 0xe0, 0x0d, 0x7b, 0xa3, 0x43,
+	0x7c, 0xdb, 0x5a, 0xf5, 0xf0, 0xd8, 0x25, 0xf9, 0x7a, 0x5e, 0xc1, 0x47, 0x56, 0x97, 0x37, 0x4f,
+	0x12, 0xed, 0x15, 0xbc, 0x42, 0x1d, 0x1d, 0xae, 0xa3, 0x23, 0xec, 0xfe, 0x17, 0x61, 0xa2, 0x44,
+	0xc1, 0x72, 0x93, 0x41, 0x33, 0x83, 0x13, 0xd4, 0x35, 0xff, 0xa0, 0xff, 0x40, 0xe7, 0x18, 0xdf,
+	0x37, 0xc7, 0x44, 0xab, 0x6e, 0x26, 0x31, 0x67, 0x89, 0x75, 0x0c, 0x0e, 0xd1, 0x76, 0x09, 0xe5,
+	0x02, 0xc4, 0x3c, 0xe5, 0x35, 0x53, 0xfd, 0xee, 0xfa, 0xc5, 0x6c, 0x19, 0xc1, 0xfb, 0x86, 0x1f,
+	0x7c, 0x40, 0x8f, 0x05, 0x9c, 0x82, 0x00, 0x96, 0x82, 0xb5, 0x78, 0xb8, 0xde, 0xa2, 0xe7, 0x34,
+	0xda, 0x25, 0xfa, 0x76, 0x15, 0x27, 0x68, 0x7f, 0x35, 0x8a, 0x45, 0x55, 0x21, 0x71, 0xca, 0x4b,
+	0xb2, 0xfa, 0xc5, 0x2f, 0xd3, 0x5a, 0x2a, 0x5e, 0x82, 0x90, 0xe4, 0xa2, 0x85, 0x97, 0xf6, 0xd6,
+	0x4d, 0x40, 0x49, 0x72, 0xb1, 0xba, 0x81, 0x97, 0xe3, 0xbf, 0x1e, 0x3a, 0x48, 0x79, 0x89, 0xd7,
+	0xbe, 0x86, 0x71, 0xcf, 0xb5, 0x38, 0x6e, 0xe2, 0x1e, 0x7b, 0x27, 0x9f, 0xad, 0x28, 0xe7, 0x4b,
+	0xca, 0x72, 0xcc, 0x45, 0x4e, 0x72, 0x60, 0x7a, 0x18, 0xb2, 0x8a, 0x77, 0xc7, 0xab, 0x7c, 0xe7,
+	0xd0, 0x2f, 0x7f, 0xe3, 0x28, 0x8e, 0x7f, 0xfb, 0x7b, 0x47, 0xc6, 0x32, 0xce, 0x24, 0x36, 0xb0,
+	0x41, 0xd3, 0x10, 0x27, 0x2d, 0xf3, 0x4f, 0xcb, 0x99, 0xc5, 0x99, 0x9c, 0x39, 0xce, 0x6c, 0x1a,
+	0xce, 0x1c, 0xe7, 0xca, 0x3f, 0x30, 0x85, 0x28, 0x8a, 0x33, 0x19, 0x45, 0x8e, 0x15, 0x45, 0xd3,
+	0x30, 0x8a, 0x1c, 0x6f, 0xd1, 0xd5, 0x61, 0xc3, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xc7,
+	0xf7, 0x69, 0x41, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/shopping_performance_view.pb.go b/googleapis/ads/googleads/v3/resources/shopping_performance_view.pb.go
new file mode 100644
index 0000000..7fce010
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/shopping_performance_view.pb.go
@@ -0,0 +1,104 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/shopping_performance_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Shopping performance view.
+// Provides Shopping campaign statistics aggregated at several product dimension
+// levels. Product dimension values from Merchant Center such as brand,
+// category, custom attributes, product condition and product type will reflect
+// the state of each dimension as of the date and time when the corresponding
+// event was recorded.
+type ShoppingPerformanceView struct {
+	// The resource name of the Shopping performance view.
+	// Shopping performance view resource names have the form:
+	// `customers/{customer_id}/shoppingPerformanceView`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ShoppingPerformanceView) Reset()         { *m = ShoppingPerformanceView{} }
+func (m *ShoppingPerformanceView) String() string { return proto.CompactTextString(m) }
+func (*ShoppingPerformanceView) ProtoMessage()    {}
+func (*ShoppingPerformanceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f485d5704344bc86, []int{0}
+}
+
+func (m *ShoppingPerformanceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingPerformanceView.Unmarshal(m, b)
+}
+func (m *ShoppingPerformanceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingPerformanceView.Marshal(b, m, deterministic)
+}
+func (m *ShoppingPerformanceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingPerformanceView.Merge(m, src)
+}
+func (m *ShoppingPerformanceView) XXX_Size() int {
+	return xxx_messageInfo_ShoppingPerformanceView.Size(m)
+}
+func (m *ShoppingPerformanceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingPerformanceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingPerformanceView proto.InternalMessageInfo
+
+func (m *ShoppingPerformanceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ShoppingPerformanceView)(nil), "google.ads.googleads.v3.resources.ShoppingPerformanceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/shopping_performance_view.proto", fileDescriptor_f485d5704344bc86)
+}
+
+var fileDescriptor_f485d5704344bc86 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4a, 0xf3, 0x40,
+	0x10, 0xc7, 0x49, 0x3e, 0xf8, 0xc0, 0xa0, 0x97, 0x5e, 0xd4, 0xd2, 0x83, 0x55, 0x0a, 0x1e, 0x64,
+	0x57, 0xc8, 0x6d, 0x3d, 0x6d, 0x2f, 0x05, 0x0f, 0x52, 0x2a, 0xe4, 0x20, 0x81, 0xba, 0x26, 0xeb,
+	0x1a, 0x68, 0x76, 0x96, 0x9d, 0xb4, 0x3d, 0x88, 0x0f, 0xe0, 0x6b, 0xe8, 0xcd, 0x47, 0xf1, 0x51,
+	0xfa, 0x14, 0xd2, 0x6e, 0x77, 0x23, 0x42, 0xf5, 0xf6, 0x27, 0xf3, 0x9b, 0xdf, 0x4c, 0x66, 0x13,
+	0xae, 0x00, 0xd4, 0x4c, 0x52, 0x51, 0x22, 0x75, 0x71, 0x9d, 0x16, 0x29, 0xb5, 0x12, 0x61, 0x6e,
+	0x0b, 0x89, 0x14, 0x9f, 0xc0, 0x98, 0x4a, 0xab, 0xa9, 0x91, 0xf6, 0x11, 0x6c, 0x2d, 0x74, 0x21,
+	0xa7, 0x8b, 0x4a, 0x2e, 0x89, 0xb1, 0xd0, 0x40, 0xa7, 0xef, 0xfa, 0x88, 0x28, 0x91, 0x04, 0x05,
+	0x59, 0xa4, 0x24, 0x28, 0xba, 0xc7, 0x7e, 0x8a, 0xa9, 0x82, 0xd8, 0x75, 0x77, 0x7b, 0xdf, 0x4a,
+	0x42, 0x6b, 0x68, 0x44, 0x53, 0x81, 0x46, 0x57, 0x3d, 0x7d, 0x8f, 0x92, 0xc3, 0xdb, 0xed, 0xfc,
+	0x71, 0x3b, 0x3e, 0xab, 0xe4, 0xb2, 0x73, 0x96, 0x1c, 0x78, 0xd7, 0x54, 0x8b, 0x5a, 0x1e, 0x45,
+	0x27, 0xd1, 0xf9, 0xde, 0x64, 0xdf, 0x7f, 0xbc, 0x11, 0xb5, 0x64, 0xc5, 0x8a, 0xdf, 0x27, 0x97,
+	0xed, 0x5a, 0xdb, 0x64, 0x2a, 0x24, 0x05, 0xd4, 0x74, 0x97, 0xfb, 0xa2, 0x98, 0x63, 0x03, 0xb5,
+	0xb4, 0x48, 0x9f, 0x7d, 0x7c, 0x09, 0x97, 0xf8, 0x41, 0x0f, 0x5f, 0xe3, 0x64, 0x50, 0x40, 0x4d,
+	0xfe, 0x3c, 0xc4, 0xb0, 0xb7, 0x63, 0xe0, 0x78, 0xfd, 0xb7, 0xe3, 0xe8, 0xee, 0x7a, 0xab, 0x50,
+	0x30, 0x13, 0x5a, 0x11, 0xb0, 0x8a, 0x2a, 0xa9, 0x37, 0xb7, 0xa0, 0xed, 0xea, 0xbf, 0xbc, 0xd6,
+	0x55, 0x48, 0x6f, 0xf1, 0xbf, 0x11, 0xe7, 0x1f, 0x71, 0x7f, 0xe4, 0x94, 0xbc, 0x44, 0xe2, 0xe2,
+	0x3a, 0x65, 0x29, 0x99, 0x78, 0xf2, 0xd3, 0x33, 0x39, 0x2f, 0x31, 0x0f, 0x4c, 0x9e, 0xa5, 0x79,
+	0x60, 0x56, 0xf1, 0xc0, 0x15, 0x18, 0xe3, 0x25, 0x32, 0x16, 0x28, 0xc6, 0xb2, 0x94, 0xb1, 0xc0,
+	0x3d, 0xfc, 0xdf, 0x2c, 0x9b, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0xb8, 0x88, 0xfa, 0x29, 0x59,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/topic_constant.pb.go b/googleapis/ads/googleads/v3/resources/topic_constant.pb.go
new file mode 100644
index 0000000..f09e744
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/topic_constant.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/topic_constant.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Use topics to target or exclude placements in the Google Display Network
+// based on the category into which the placement falls (for example,
+// "Pets & Animals/Pets/Dogs").
+type TopicConstant struct {
+	// The resource name of the topic constant.
+	// topic constant resource names have the form:
+	//
+	// `topicConstants/{topic_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the topic.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Resource name of parent of the topic constant.
+	TopicConstantParent *wrappers.StringValue `protobuf:"bytes,3,opt,name=topic_constant_parent,json=topicConstantParent,proto3" json:"topic_constant_parent,omitempty"`
+	// The category to target or exclude. Each subsequent element in the array
+	// describes a more specific sub-category. For example,
+	// {"Pets & Animals", "Pets", "Dogs"} represents the
+	// "Pets & Animals/Pets/Dogs" category. List of available topic categories at
+	// https://developers.google.com/adwords/api/docs/appendix/verticals
+	Path                 []*wrappers.StringValue `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *TopicConstant) Reset()         { *m = TopicConstant{} }
+func (m *TopicConstant) String() string { return proto.CompactTextString(m) }
+func (*TopicConstant) ProtoMessage()    {}
+func (*TopicConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_87af0f21f4e047c9, []int{0}
+}
+
+func (m *TopicConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicConstant.Unmarshal(m, b)
+}
+func (m *TopicConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicConstant.Marshal(b, m, deterministic)
+}
+func (m *TopicConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicConstant.Merge(m, src)
+}
+func (m *TopicConstant) XXX_Size() int {
+	return xxx_messageInfo_TopicConstant.Size(m)
+}
+func (m *TopicConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicConstant proto.InternalMessageInfo
+
+func (m *TopicConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *TopicConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *TopicConstant) GetTopicConstantParent() *wrappers.StringValue {
+	if m != nil {
+		return m.TopicConstantParent
+	}
+	return nil
+}
+
+func (m *TopicConstant) GetPath() []*wrappers.StringValue {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TopicConstant)(nil), "google.ads.googleads.v3.resources.TopicConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/topic_constant.proto", fileDescriptor_87af0f21f4e047c9)
+}
+
+var fileDescriptor_87af0f21f4e047c9 = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x6b, 0xdb, 0x30,
+	0x18, 0xc6, 0xb1, 0x13, 0x06, 0xd3, 0x96, 0x8b, 0xc7, 0xc0, 0xcb, 0xc2, 0x96, 0x6c, 0x64, 0x04,
+	0x06, 0xd2, 0x98, 0x47, 0x0e, 0xda, 0xc9, 0xd9, 0x21, 0x64, 0x8c, 0x61, 0xb2, 0xe1, 0x43, 0x31,
+	0x04, 0xc5, 0x56, 0x5d, 0x43, 0x2c, 0x09, 0x49, 0x49, 0x0f, 0xa5, 0x5f, 0xa6, 0xc7, 0x5e, 0xfb,
+	0x2d, 0xfa, 0x51, 0xf2, 0x25, 0x5a, 0xfc, 0x4f, 0x89, 0x29, 0x34, 0xb7, 0xc7, 0x7e, 0x9f, 0xe7,
+	0xd1, 0xcf, 0xaf, 0x05, 0xa6, 0x29, 0xe7, 0xe9, 0x86, 0x22, 0x92, 0x28, 0x54, 0xc9, 0x42, 0xed,
+	0x3c, 0x24, 0xa9, 0xe2, 0x5b, 0x19, 0x53, 0x85, 0x34, 0x17, 0x59, 0xbc, 0x8a, 0x39, 0x53, 0x9a,
+	0x30, 0x0d, 0x85, 0xe4, 0x9a, 0x3b, 0xa3, 0xca, 0x0c, 0x49, 0xa2, 0xa0, 0xc9, 0xc1, 0x9d, 0x07,
+	0x4d, 0xae, 0xff, 0xae, 0xa9, 0x16, 0x99, 0x69, 0xab, 0xd2, 0xfd, 0x0f, 0xf5, 0xa8, 0x7c, 0x5a,
+	0x6f, 0xcf, 0xd1, 0xa5, 0x24, 0x42, 0x50, 0xa9, 0xea, 0xf9, 0xe0, 0x28, 0x4a, 0x18, 0xe3, 0x9a,
+	0xe8, 0x8c, 0xb3, 0x7a, 0xfa, 0xe9, 0xce, 0x06, 0xbd, 0xff, 0x05, 0xd4, 0xaf, 0x9a, 0xc9, 0xf9,
+	0x0c, 0x7a, 0xcd, 0x09, 0x2b, 0x46, 0x72, 0xea, 0x5a, 0x43, 0x6b, 0xf2, 0x72, 0xf9, 0xba, 0x79,
+	0xf9, 0x97, 0xe4, 0xd4, 0xf9, 0x0a, 0xec, 0x2c, 0x71, 0xed, 0xa1, 0x35, 0x79, 0xf5, 0xfd, 0x7d,
+	0x0d, 0x0d, 0x1b, 0x02, 0xb8, 0x60, 0x7a, 0xfa, 0x23, 0x24, 0x9b, 0x2d, 0x5d, 0xda, 0x59, 0xe2,
+	0x04, 0xe0, 0x6d, 0xfb, 0xbb, 0x57, 0x82, 0x48, 0xca, 0xb4, 0xdb, 0x29, 0xf3, 0x83, 0x27, 0xf9,
+	0x7f, 0x5a, 0x66, 0x2c, 0xad, 0x0a, 0xde, 0xe8, 0x63, 0xba, 0xa0, 0x0c, 0x3a, 0xdf, 0x40, 0x57,
+	0x10, 0x7d, 0xe1, 0x76, 0x87, 0x9d, 0x93, 0x05, 0xa5, 0x13, 0xff, 0xd9, 0xfb, 0x0b, 0xf0, 0xe5,
+	0xb0, 0xdd, 0x5a, 0x89, 0x4c, 0xc1, 0x98, 0xe7, 0xa8, 0xbd, 0x82, 0x8f, 0xad, 0x33, 0x15, 0xba,
+	0x6a, 0xe3, 0x5f, 0xcf, 0x1e, 0x2c, 0x30, 0x8e, 0x79, 0x0e, 0x4f, 0xfe, 0xb8, 0x99, 0xd3, 0x6a,
+	0x0e, 0x0a, 0xc0, 0xc0, 0x3a, 0xfb, 0x5d, 0x07, 0x53, 0xbe, 0x21, 0x2c, 0x85, 0x5c, 0xa6, 0x28,
+	0xa5, 0xac, 0xc4, 0x47, 0x07, 0xb2, 0x67, 0x2e, 0xd2, 0x4f, 0xa3, 0x6e, 0xec, 0xce, 0xdc, 0xf7,
+	0x6f, 0xed, 0xd1, 0xbc, 0xaa, 0xf4, 0x13, 0x05, 0x2b, 0x59, 0xa8, 0xd0, 0x83, 0xcb, 0xc6, 0x79,
+	0xdf, 0x78, 0x22, 0x3f, 0x51, 0x91, 0xf1, 0x44, 0xa1, 0x17, 0x19, 0xcf, 0xde, 0x1e, 0x57, 0x03,
+	0x8c, 0xfd, 0x44, 0x61, 0x6c, 0x5c, 0x18, 0x87, 0x1e, 0xc6, 0xc6, 0xb7, 0x7e, 0x51, 0xc2, 0x7a,
+	0x8f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xba, 0x66, 0x83, 0xb6, 0xf4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/topic_view.pb.go b/googleapis/ads/googleads/v3/resources/topic_view.pb.go
new file mode 100644
index 0000000..437cf32
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/topic_view.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/topic_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A topic view.
+type TopicView struct {
+	// The resource name of the topic view.
+	// Topic view resource names have the form:
+	//
+	// `customers/{customer_id}/topicViews/{ad_group_id}~{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TopicView) Reset()         { *m = TopicView{} }
+func (m *TopicView) String() string { return proto.CompactTextString(m) }
+func (*TopicView) ProtoMessage()    {}
+func (*TopicView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cd8d6dea163affbf, []int{0}
+}
+
+func (m *TopicView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicView.Unmarshal(m, b)
+}
+func (m *TopicView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicView.Marshal(b, m, deterministic)
+}
+func (m *TopicView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicView.Merge(m, src)
+}
+func (m *TopicView) XXX_Size() int {
+	return xxx_messageInfo_TopicView.Size(m)
+}
+func (m *TopicView) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicView proto.InternalMessageInfo
+
+func (m *TopicView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*TopicView)(nil), "google.ads.googleads.v3.resources.TopicView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/topic_view.proto", fileDescriptor_cd8d6dea163affbf)
+}
+
+var fileDescriptor_cd8d6dea163affbf = []byte{
+	// 311 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xb1, 0x6a, 0xf3, 0x30,
+	0x14, 0x85, 0x71, 0x7e, 0xf8, 0x21, 0xa6, 0xed, 0x90, 0xa9, 0x0d, 0x1d, 0x9a, 0x94, 0x40, 0x87,
+	0x22, 0x41, 0xb5, 0xa9, 0x93, 0xb2, 0x04, 0x3a, 0x94, 0x10, 0x5a, 0x0f, 0xc5, 0x10, 0x54, 0x5b,
+	0x08, 0x41, 0xac, 0x6b, 0x7c, 0x1d, 0x67, 0x08, 0x99, 0xfb, 0x1e, 0x1d, 0xfb, 0x28, 0x7d, 0x94,
+	0xbc, 0x42, 0x97, 0xe2, 0x28, 0x92, 0x3b, 0xb5, 0xdb, 0xc1, 0xe7, 0x3b, 0x47, 0xf7, 0x38, 0xbe,
+	0xd3, 0x00, 0x7a, 0xa5, 0xa8, 0xcc, 0x91, 0x3a, 0xd9, 0xaa, 0x86, 0xd1, 0x4a, 0x21, 0xac, 0xab,
+	0x4c, 0x21, 0xad, 0xa1, 0x34, 0xd9, 0xb2, 0x31, 0x6a, 0x43, 0xca, 0x0a, 0x6a, 0x18, 0x8c, 0x1c,
+	0x48, 0x64, 0x8e, 0x24, 0x64, 0x48, 0xc3, 0x48, 0xc8, 0x0c, 0x2f, 0x7c, 0x6d, 0x69, 0x42, 0x93,
+	0x4b, 0x0f, 0x2f, 0x7f, 0x58, 0xd2, 0x5a, 0xa8, 0x65, 0x6d, 0xc0, 0xa2, 0x73, 0xc7, 0x6f, 0x51,
+	0xdc, 0x7f, 0x6a, 0x1f, 0x4c, 0x8c, 0xda, 0x0c, 0xae, 0xe3, 0x53, 0x9f, 0x5e, 0x5a, 0x59, 0xa8,
+	0xf3, 0xe8, 0x2a, 0xba, 0xe9, 0x2f, 0x4e, 0xfc, 0xc7, 0x47, 0x59, 0x28, 0xfe, 0xbc, 0x17, 0x8b,
+	0x78, 0xdc, 0x1d, 0x72, 0x54, 0xa5, 0x41, 0x92, 0x41, 0x41, 0xbb, 0xb6, 0xdb, 0x6c, 0x8d, 0x35,
+	0x14, 0xaa, 0x42, 0xba, 0xf5, 0x72, 0xe7, 0xe6, 0xb5, 0x3e, 0xd2, 0x6d, 0x37, 0x75, 0x37, 0xfd,
+	0x8a, 0xe2, 0x49, 0x06, 0x05, 0xf9, 0x73, 0xec, 0xf4, 0x2c, 0x3c, 0x31, 0x6f, 0x37, 0xcc, 0xa3,
+	0x97, 0x87, 0x63, 0x48, 0xc3, 0x4a, 0x5a, 0x4d, 0xa0, 0xd2, 0x54, 0x2b, 0x7b, 0x58, 0x48, 0xbb,
+	0xf3, 0x7e, 0xf9, 0xe9, 0xf7, 0x41, 0xbd, 0xf7, 0xfe, 0xcd, 0x84, 0xf8, 0xe8, 0x8d, 0x66, 0xae,
+	0x52, 0xe4, 0x48, 0x9c, 0x6c, 0x55, 0xc2, 0xc8, 0xc2, 0x93, 0x9f, 0x9e, 0x49, 0x45, 0x8e, 0x69,
+	0x60, 0xd2, 0x84, 0xa5, 0x81, 0xd9, 0xf7, 0x26, 0xce, 0xe0, 0x5c, 0xe4, 0xc8, 0x79, 0xa0, 0x38,
+	0x4f, 0x18, 0xe7, 0x81, 0x7b, 0xfd, 0x7f, 0x38, 0x96, 0x7d, 0x07, 0x00, 0x00, 0xff, 0xff, 0x7d,
+	0xdf, 0xdb, 0xda, 0x20, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/user_interest.pb.go b/googleapis/ads/googleads/v3/resources/user_interest.pb.go
new file mode 100644
index 0000000..21e4cc6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/user_interest.pb.go
@@ -0,0 +1,172 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/user_interest.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A user interest: a particular interest-based vertical to be targeted.
+type UserInterest struct {
+	// The resource name of the user interest.
+	// User interest resource names have the form:
+	//
+	// `customers/{customer_id}/userInterests/{user_interest_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Taxonomy type of the user interest.
+	TaxonomyType enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType `protobuf:"varint,2,opt,name=taxonomy_type,json=taxonomyType,proto3,enum=google.ads.googleads.v3.enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType" json:"taxonomy_type,omitempty"`
+	// The ID of the user interest.
+	UserInterestId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=user_interest_id,json=userInterestId,proto3" json:"user_interest_id,omitempty"`
+	// The name of the user interest.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The parent of the user interest.
+	UserInterestParent *wrappers.StringValue `protobuf:"bytes,5,opt,name=user_interest_parent,json=userInterestParent,proto3" json:"user_interest_parent,omitempty"`
+	// True if the user interest is launched to all channels and locales.
+	LaunchedToAll *wrappers.BoolValue `protobuf:"bytes,6,opt,name=launched_to_all,json=launchedToAll,proto3" json:"launched_to_all,omitempty"`
+	// Availability information of the user interest.
+	Availabilities       []*common.CriterionCategoryAvailability `protobuf:"bytes,7,rep,name=availabilities,proto3" json:"availabilities,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *UserInterest) Reset()         { *m = UserInterest{} }
+func (m *UserInterest) String() string { return proto.CompactTextString(m) }
+func (*UserInterest) ProtoMessage()    {}
+func (*UserInterest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_853f2530b9dfe755, []int{0}
+}
+
+func (m *UserInterest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterest.Unmarshal(m, b)
+}
+func (m *UserInterest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterest.Marshal(b, m, deterministic)
+}
+func (m *UserInterest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterest.Merge(m, src)
+}
+func (m *UserInterest) XXX_Size() int {
+	return xxx_messageInfo_UserInterest.Size(m)
+}
+func (m *UserInterest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterest proto.InternalMessageInfo
+
+func (m *UserInterest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *UserInterest) GetTaxonomyType() enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType {
+	if m != nil {
+		return m.TaxonomyType
+	}
+	return enums.UserInterestTaxonomyTypeEnum_UNSPECIFIED
+}
+
+func (m *UserInterest) GetUserInterestId() *wrappers.Int64Value {
+	if m != nil {
+		return m.UserInterestId
+	}
+	return nil
+}
+
+func (m *UserInterest) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *UserInterest) GetUserInterestParent() *wrappers.StringValue {
+	if m != nil {
+		return m.UserInterestParent
+	}
+	return nil
+}
+
+func (m *UserInterest) GetLaunchedToAll() *wrappers.BoolValue {
+	if m != nil {
+		return m.LaunchedToAll
+	}
+	return nil
+}
+
+func (m *UserInterest) GetAvailabilities() []*common.CriterionCategoryAvailability {
+	if m != nil {
+		return m.Availabilities
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*UserInterest)(nil), "google.ads.googleads.v3.resources.UserInterest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/user_interest.proto", fileDescriptor_853f2530b9dfe755)
+}
+
+var fileDescriptor_853f2530b9dfe755 = []byte{
+	// 564 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x40,
+	0x10, 0x96, 0xd3, 0x1f, 0x84, 0xdb, 0x06, 0xb0, 0x38, 0x98, 0x50, 0xa1, 0x14, 0x14, 0x29, 0xa7,
+	0x5d, 0x14, 0x03, 0x07, 0x23, 0x84, 0x9c, 0x52, 0x55, 0xe1, 0x50, 0x45, 0x21, 0xe4, 0x00, 0x11,
+	0xd6, 0xc6, 0x1e, 0xcc, 0x4a, 0xeb, 0x5d, 0x6b, 0x77, 0x1d, 0xb0, 0xaa, 0x5e, 0x78, 0x14, 0x8e,
+	0x3c, 0x0a, 0x8f, 0xd2, 0x87, 0x40, 0x28, 0xfe, 0xab, 0xd3, 0x2a, 0xc0, 0xed, 0xdb, 0xcc, 0xf7,
+	0x33, 0x33, 0x99, 0xc4, 0x7c, 0x1e, 0x09, 0x11, 0x31, 0xc0, 0x24, 0x54, 0xb8, 0x80, 0x2b, 0xb4,
+	0x74, 0xb0, 0x04, 0x25, 0x52, 0x19, 0x80, 0xc2, 0xa9, 0x02, 0xe9, 0x53, 0xae, 0x41, 0x82, 0xd2,
+	0x28, 0x91, 0x42, 0x0b, 0xeb, 0xa8, 0xe0, 0x22, 0x12, 0x2a, 0x54, 0xcb, 0xd0, 0xd2, 0x41, 0xb5,
+	0xac, 0xf3, 0x66, 0x93, 0x73, 0x20, 0xe2, 0x58, 0x70, 0x1c, 0x48, 0xaa, 0x41, 0x52, 0xc1, 0xfd,
+	0x80, 0x68, 0x88, 0x84, 0xcc, 0x7c, 0xb2, 0x24, 0x94, 0x91, 0x05, 0x65, 0x54, 0x67, 0x45, 0x50,
+	0xe7, 0xf5, 0x26, 0x17, 0xe0, 0x69, 0x7c, 0xad, 0x37, 0x5f, 0x93, 0x6f, 0x82, 0x8b, 0x38, 0xf3,
+	0x75, 0x96, 0x40, 0x69, 0xf0, 0xa0, 0x32, 0x48, 0x68, 0x3d, 0x53, 0x59, 0x7a, 0x54, 0x96, 0xf2,
+	0xd7, 0x22, 0xfd, 0x8c, 0xbf, 0x4a, 0x92, 0x24, 0x20, 0x55, 0x59, 0x3f, 0x6c, 0x48, 0x09, 0xe7,
+	0x42, 0x13, 0x4d, 0x05, 0x2f, 0xab, 0x8f, 0xbf, 0xef, 0x98, 0xfb, 0xef, 0x15, 0xc8, 0x51, 0x99,
+	0x6e, 0x3d, 0x31, 0x0f, 0xaa, 0x00, 0x9f, 0x93, 0x18, 0x6c, 0xa3, 0x6b, 0xf4, 0x6f, 0x4f, 0xf6,
+	0xab, 0x0f, 0xcf, 0x48, 0x0c, 0x56, 0x66, 0x1e, 0xac, 0x75, 0x69, 0xb7, 0xba, 0x46, 0xbf, 0x3d,
+	0x98, 0xa2, 0x4d, 0x0b, 0xcd, 0xe7, 0x44, 0xcd, 0xa0, 0x69, 0xa9, 0x9f, 0x66, 0x09, 0x9c, 0xf0,
+	0x34, 0xde, 0x58, 0x9c, 0xec, 0xeb, 0xc6, 0xcb, 0x3a, 0x31, 0xef, 0xae, 0xaf, 0x8b, 0x86, 0xf6,
+	0x56, 0xd7, 0xe8, 0xef, 0x0d, 0x1e, 0x56, 0xe9, 0xd5, 0x26, 0xd0, 0x88, 0xeb, 0x17, 0xcf, 0x66,
+	0x84, 0xa5, 0x30, 0x69, 0xa7, 0x0d, 0xfb, 0x51, 0x68, 0x3d, 0x35, 0xb7, 0xf3, 0xe9, 0xb6, 0x73,
+	0xe9, 0xe1, 0x0d, 0xe9, 0x3b, 0x2d, 0x29, 0x8f, 0x0a, 0x6d, 0xce, 0xb4, 0xce, 0xcc, 0xfb, 0xeb,
+	0xc1, 0x09, 0x91, 0xc0, 0xb5, 0xbd, 0xf3, 0x1f, 0x0e, 0x56, 0x33, 0x7d, 0x9c, 0xeb, 0xac, 0xa1,
+	0x79, 0x87, 0x91, 0x94, 0x07, 0x5f, 0x20, 0xf4, 0xb5, 0xf0, 0x09, 0x63, 0xf6, 0x6e, 0x6e, 0xd5,
+	0xb9, 0x61, 0x35, 0x14, 0x82, 0x15, 0x46, 0x07, 0x95, 0x64, 0x2a, 0x3c, 0xc6, 0x2c, 0x30, 0xdb,
+	0x8d, 0x6b, 0xa3, 0xa0, 0xec, 0x5b, 0xdd, 0xad, 0xfe, 0xde, 0xe0, 0xd5, 0xc6, 0x2f, 0xa2, 0x38,
+	0x5b, 0x74, 0x5c, 0x9d, 0xed, 0x71, 0x79, 0xb5, 0x5e, 0xe3, 0x68, 0x27, 0xd7, 0x4c, 0xdd, 0x4f,
+	0x97, 0xde, 0x47, 0xb3, 0x77, 0xe5, 0x53, 0xa2, 0x84, 0xaa, 0x95, 0x1f, 0x5e, 0xbb, 0x9f, 0x41,
+	0x90, 0x2a, 0x2d, 0x62, 0x90, 0x0a, 0x9f, 0x57, 0xf0, 0x02, 0x37, 0xe7, 0x57, 0xf8, 0x7c, 0x6d,
+	0x91, 0x17, 0xc3, 0xdf, 0x86, 0xd9, 0x0b, 0x44, 0x8c, 0xfe, 0xf9, 0x73, 0x1c, 0xde, 0x6b, 0x66,
+	0x8d, 0x57, 0xfb, 0x19, 0x1b, 0x1f, 0xde, 0x96, 0xba, 0x48, 0x30, 0xc2, 0x23, 0x24, 0x64, 0x84,
+	0x23, 0xe0, 0xf9, 0xf6, 0xf0, 0x55, 0xab, 0x7f, 0xf9, 0x73, 0x78, 0x59, 0xa3, 0x1f, 0xad, 0xad,
+	0x53, 0xcf, 0xfb, 0xd9, 0x3a, 0x3a, 0x2d, 0x2c, 0xbd, 0x50, 0xa1, 0x02, 0xae, 0xd0, 0xcc, 0x41,
+	0x93, 0x8a, 0xf9, 0xab, 0xe2, 0xcc, 0xbd, 0x50, 0xcd, 0x6b, 0xce, 0x7c, 0xe6, 0xcc, 0x6b, 0xce,
+	0x65, 0xab, 0x57, 0x14, 0x5c, 0xd7, 0x0b, 0x95, 0xeb, 0xd6, 0x2c, 0xd7, 0x9d, 0x39, 0xae, 0x5b,
+	0xf3, 0x16, 0xbb, 0x79, 0xb3, 0xce, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x06, 0xa2,
+	0xc8, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/user_list.pb.go b/googleapis/ads/googleads/v3/resources/user_list.pb.go
new file mode 100644
index 0000000..d26dace
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/user_list.pb.go
@@ -0,0 +1,431 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/user_list.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A user list. This is a list of users a customer may target.
+type UserList struct {
+	// The resource name of the user list.
+	// User list resource names have the form:
+	//
+	// `customers/{customer_id}/userLists/{user_list_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Id of the user list.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// A flag that indicates if a user may edit a list. Depends on the list
+	// ownership and list type. For example, external remarketing user lists are
+	// not editable.
+	//
+	// This field is read-only.
+	ReadOnly *wrappers.BoolValue `protobuf:"bytes,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
+	// Name of this user list. Depending on its access_reason, the user list name
+	// may not be unique (e.g. if access_reason=SHARED)
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// Description of this user list.
+	Description *wrappers.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	// Membership status of this user list. Indicates whether a user list is open
+	// or active. Only open user lists can accumulate more users and can be
+	// targeted to.
+	MembershipStatus enums.UserListMembershipStatusEnum_UserListMembershipStatus `protobuf:"varint,6,opt,name=membership_status,json=membershipStatus,proto3,enum=google.ads.googleads.v3.enums.UserListMembershipStatusEnum_UserListMembershipStatus" json:"membership_status,omitempty"`
+	// An ID from external system. It is used by user list sellers to correlate
+	// IDs on their systems.
+	IntegrationCode *wrappers.StringValue `protobuf:"bytes,7,opt,name=integration_code,json=integrationCode,proto3" json:"integration_code,omitempty"`
+	// Number of days a user's cookie stays on your list since its most recent
+	// addition to the list. This field must be between 0 and 540 inclusive.
+	// However, for CRM based userlists, this field can be set to 10000 which
+	// means no expiration.
+	//
+	// It'll be ignored for logical_user_list.
+	MembershipLifeSpan *wrappers.Int64Value `protobuf:"bytes,8,opt,name=membership_life_span,json=membershipLifeSpan,proto3" json:"membership_life_span,omitempty"`
+	// Estimated number of users in this user list, on the Google Display Network.
+	// This value is null if the number of users has not yet been determined.
+	//
+	// This field is read-only.
+	SizeForDisplay *wrappers.Int64Value `protobuf:"bytes,9,opt,name=size_for_display,json=sizeForDisplay,proto3" json:"size_for_display,omitempty"`
+	// Size range in terms of number of users of the UserList, on the Google
+	// Display Network.
+	//
+	// This field is read-only.
+	SizeRangeForDisplay enums.UserListSizeRangeEnum_UserListSizeRange `protobuf:"varint,10,opt,name=size_range_for_display,json=sizeRangeForDisplay,proto3,enum=google.ads.googleads.v3.enums.UserListSizeRangeEnum_UserListSizeRange" json:"size_range_for_display,omitempty"`
+	// Estimated number of users in this user list in the google.com domain.
+	// These are the users available for targeting in Search campaigns.
+	// This value is null if the number of users has not yet been determined.
+	//
+	// This field is read-only.
+	SizeForSearch *wrappers.Int64Value `protobuf:"bytes,11,opt,name=size_for_search,json=sizeForSearch,proto3" json:"size_for_search,omitempty"`
+	// Size range in terms of number of users of the UserList, for Search ads.
+	//
+	// This field is read-only.
+	SizeRangeForSearch enums.UserListSizeRangeEnum_UserListSizeRange `protobuf:"varint,12,opt,name=size_range_for_search,json=sizeRangeForSearch,proto3,enum=google.ads.googleads.v3.enums.UserListSizeRangeEnum_UserListSizeRange" json:"size_range_for_search,omitempty"`
+	// Type of this list.
+	//
+	// This field is read-only.
+	Type enums.UserListTypeEnum_UserListType `protobuf:"varint,13,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.UserListTypeEnum_UserListType" json:"type,omitempty"`
+	// Indicating the reason why this user list membership status is closed. It is
+	// only populated on lists that were automatically closed due to inactivity,
+	// and will be cleared once the list membership status becomes open.
+	ClosingReason enums.UserListClosingReasonEnum_UserListClosingReason `protobuf:"varint,14,opt,name=closing_reason,json=closingReason,proto3,enum=google.ads.googleads.v3.enums.UserListClosingReasonEnum_UserListClosingReason" json:"closing_reason,omitempty"`
+	// Indicates the reason this account has been granted access to the list.
+	// The reason can be SHARED, OWNED, LICENSED or SUBSCRIBED.
+	//
+	// This field is read-only.
+	AccessReason enums.AccessReasonEnum_AccessReason `protobuf:"varint,15,opt,name=access_reason,json=accessReason,proto3,enum=google.ads.googleads.v3.enums.AccessReasonEnum_AccessReason" json:"access_reason,omitempty"`
+	// Indicates if this share is still enabled. When a UserList is shared with
+	// the user this field is set to ENABLED. Later the userList owner can decide
+	// to revoke the share and make it DISABLED.
+	// The default value of this field is set to ENABLED.
+	AccountUserListStatus enums.UserListAccessStatusEnum_UserListAccessStatus `protobuf:"varint,16,opt,name=account_user_list_status,json=accountUserListStatus,proto3,enum=google.ads.googleads.v3.enums.UserListAccessStatusEnum_UserListAccessStatus" json:"account_user_list_status,omitempty"`
+	// Indicates if this user list is eligible for Google Search Network.
+	EligibleForSearch *wrappers.BoolValue `protobuf:"bytes,17,opt,name=eligible_for_search,json=eligibleForSearch,proto3" json:"eligible_for_search,omitempty"`
+	// Indicates this user list is eligible for Google Display Network.
+	//
+	// This field is read-only.
+	EligibleForDisplay *wrappers.BoolValue `protobuf:"bytes,18,opt,name=eligible_for_display,json=eligibleForDisplay,proto3" json:"eligible_for_display,omitempty"`
+	// The user list.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to UserList:
+	//	*UserList_CrmBasedUserList
+	//	*UserList_SimilarUserList
+	//	*UserList_RuleBasedUserList
+	//	*UserList_LogicalUserList
+	//	*UserList_BasicUserList
+	UserList             isUserList_UserList `protobuf_oneof:"user_list"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *UserList) Reset()         { *m = UserList{} }
+func (m *UserList) String() string { return proto.CompactTextString(m) }
+func (*UserList) ProtoMessage()    {}
+func (*UserList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2efbaf923f128250, []int{0}
+}
+
+func (m *UserList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserList.Unmarshal(m, b)
+}
+func (m *UserList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserList.Marshal(b, m, deterministic)
+}
+func (m *UserList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserList.Merge(m, src)
+}
+func (m *UserList) XXX_Size() int {
+	return xxx_messageInfo_UserList.Size(m)
+}
+func (m *UserList) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserList proto.InternalMessageInfo
+
+func (m *UserList) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *UserList) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *UserList) GetReadOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.ReadOnly
+	}
+	return nil
+}
+
+func (m *UserList) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *UserList) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *UserList) GetMembershipStatus() enums.UserListMembershipStatusEnum_UserListMembershipStatus {
+	if m != nil {
+		return m.MembershipStatus
+	}
+	return enums.UserListMembershipStatusEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetIntegrationCode() *wrappers.StringValue {
+	if m != nil {
+		return m.IntegrationCode
+	}
+	return nil
+}
+
+func (m *UserList) GetMembershipLifeSpan() *wrappers.Int64Value {
+	if m != nil {
+		return m.MembershipLifeSpan
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeForDisplay() *wrappers.Int64Value {
+	if m != nil {
+		return m.SizeForDisplay
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeRangeForDisplay() enums.UserListSizeRangeEnum_UserListSizeRange {
+	if m != nil {
+		return m.SizeRangeForDisplay
+	}
+	return enums.UserListSizeRangeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetSizeForSearch() *wrappers.Int64Value {
+	if m != nil {
+		return m.SizeForSearch
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeRangeForSearch() enums.UserListSizeRangeEnum_UserListSizeRange {
+	if m != nil {
+		return m.SizeRangeForSearch
+	}
+	return enums.UserListSizeRangeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetType() enums.UserListTypeEnum_UserListType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.UserListTypeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetClosingReason() enums.UserListClosingReasonEnum_UserListClosingReason {
+	if m != nil {
+		return m.ClosingReason
+	}
+	return enums.UserListClosingReasonEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetAccessReason() enums.AccessReasonEnum_AccessReason {
+	if m != nil {
+		return m.AccessReason
+	}
+	return enums.AccessReasonEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetAccountUserListStatus() enums.UserListAccessStatusEnum_UserListAccessStatus {
+	if m != nil {
+		return m.AccountUserListStatus
+	}
+	return enums.UserListAccessStatusEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetEligibleForSearch() *wrappers.BoolValue {
+	if m != nil {
+		return m.EligibleForSearch
+	}
+	return nil
+}
+
+func (m *UserList) GetEligibleForDisplay() *wrappers.BoolValue {
+	if m != nil {
+		return m.EligibleForDisplay
+	}
+	return nil
+}
+
+type isUserList_UserList interface {
+	isUserList_UserList()
+}
+
+type UserList_CrmBasedUserList struct {
+	CrmBasedUserList *common.CrmBasedUserListInfo `protobuf:"bytes,19,opt,name=crm_based_user_list,json=crmBasedUserList,proto3,oneof"`
+}
+
+type UserList_SimilarUserList struct {
+	SimilarUserList *common.SimilarUserListInfo `protobuf:"bytes,20,opt,name=similar_user_list,json=similarUserList,proto3,oneof"`
+}
+
+type UserList_RuleBasedUserList struct {
+	RuleBasedUserList *common.RuleBasedUserListInfo `protobuf:"bytes,21,opt,name=rule_based_user_list,json=ruleBasedUserList,proto3,oneof"`
+}
+
+type UserList_LogicalUserList struct {
+	LogicalUserList *common.LogicalUserListInfo `protobuf:"bytes,22,opt,name=logical_user_list,json=logicalUserList,proto3,oneof"`
+}
+
+type UserList_BasicUserList struct {
+	BasicUserList *common.BasicUserListInfo `protobuf:"bytes,23,opt,name=basic_user_list,json=basicUserList,proto3,oneof"`
+}
+
+func (*UserList_CrmBasedUserList) isUserList_UserList() {}
+
+func (*UserList_SimilarUserList) isUserList_UserList() {}
+
+func (*UserList_RuleBasedUserList) isUserList_UserList() {}
+
+func (*UserList_LogicalUserList) isUserList_UserList() {}
+
+func (*UserList_BasicUserList) isUserList_UserList() {}
+
+func (m *UserList) GetUserList() isUserList_UserList {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+func (m *UserList) GetCrmBasedUserList() *common.CrmBasedUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_CrmBasedUserList); ok {
+		return x.CrmBasedUserList
+	}
+	return nil
+}
+
+func (m *UserList) GetSimilarUserList() *common.SimilarUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_SimilarUserList); ok {
+		return x.SimilarUserList
+	}
+	return nil
+}
+
+func (m *UserList) GetRuleBasedUserList() *common.RuleBasedUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_RuleBasedUserList); ok {
+		return x.RuleBasedUserList
+	}
+	return nil
+}
+
+func (m *UserList) GetLogicalUserList() *common.LogicalUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_LogicalUserList); ok {
+		return x.LogicalUserList
+	}
+	return nil
+}
+
+func (m *UserList) GetBasicUserList() *common.BasicUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_BasicUserList); ok {
+		return x.BasicUserList
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*UserList) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*UserList_CrmBasedUserList)(nil),
+		(*UserList_SimilarUserList)(nil),
+		(*UserList_RuleBasedUserList)(nil),
+		(*UserList_LogicalUserList)(nil),
+		(*UserList_BasicUserList)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*UserList)(nil), "google.ads.googleads.v3.resources.UserList")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/user_list.proto", fileDescriptor_2efbaf923f128250)
+}
+
+var fileDescriptor_2efbaf923f128250 = []byte{
+	// 969 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x6e, 0xdb, 0x36,
+	0x14, 0xc7, 0x67, 0x37, 0xeb, 0x12, 0x26, 0x8e, 0x6d, 0x26, 0xe9, 0xb4, 0xac, 0x18, 0x92, 0x0d,
+	0x05, 0x82, 0x0d, 0x90, 0xd6, 0xb8, 0xfb, 0x80, 0x5a, 0x6c, 0xb0, 0xb3, 0x36, 0x6b, 0xe1, 0xb6,
+	0x81, 0xdc, 0xe5, 0x62, 0x0b, 0x20, 0xd0, 0x12, 0xad, 0x10, 0xa0, 0x48, 0x81, 0x94, 0x3a, 0xb8,
+	0x41, 0x2f, 0x76, 0xb1, 0x17, 0xd9, 0xe5, 0x1e, 0xa5, 0x8f, 0xd2, 0x47, 0xd8, 0xd5, 0x20, 0xea,
+	0xc3, 0x94, 0x53, 0x57, 0xba, 0xe8, 0x1d, 0x75, 0xce, 0xf9, 0xfd, 0xff, 0x3c, 0xfc, 0x90, 0x04,
+	0xee, 0x06, 0x9c, 0x07, 0x14, 0x5b, 0xc8, 0x97, 0x56, 0x36, 0x4c, 0x47, 0x2f, 0x07, 0x96, 0xc0,
+	0x92, 0x27, 0xc2, 0xc3, 0xd2, 0x4a, 0x24, 0x16, 0x2e, 0x25, 0x32, 0x36, 0x23, 0xc1, 0x63, 0x0e,
+	0x0f, 0xb3, 0x3a, 0x13, 0xf9, 0xd2, 0x2c, 0x11, 0xf3, 0xe5, 0xc0, 0x2c, 0x91, 0x7d, 0x6b, 0x95,
+	0xaa, 0xc7, 0xc3, 0x90, 0xb3, 0x85, 0xa4, 0xcc, 0x34, 0xf7, 0x57, 0x4e, 0x03, 0xb3, 0x24, 0x94,
+	0x16, 0xf2, 0x3c, 0x2c, 0xa5, 0x2b, 0x30, 0x92, 0x9c, 0xe5, 0xc8, 0xfd, 0xf7, 0x23, 0xa5, 0x85,
+	0x9b, 0xc3, 0x32, 0x46, 0x71, 0x52, 0xf8, 0x3d, 0x68, 0x0a, 0x7b, 0x94, 0x4b, 0xc2, 0x82, 0xaa,
+	0xf5, 0xcf, 0x4d, 0xe9, 0x10, 0x87, 0x53, 0x2c, 0xe4, 0x25, 0x89, 0xaa, 0xf6, 0x3f, 0x36, 0x15,
+	0x90, 0xe4, 0x15, 0x76, 0x05, 0x62, 0x01, 0xce, 0xc9, 0xe3, 0xa6, 0x64, 0x3c, 0x8f, 0x0a, 0xe6,
+	0xb3, 0x82, 0x89, 0x48, 0xb9, 0xad, 0x79, 0xea, 0x8b, 0x3c, 0xa5, 0x9e, 0xa6, 0xc9, 0xcc, 0xfa,
+	0x53, 0xa0, 0x28, 0xc2, 0xa2, 0x98, 0xe8, 0x6d, 0x0d, 0x45, 0x8c, 0xf1, 0x18, 0xc5, 0x84, 0xb3,
+	0x3c, 0xfb, 0xe5, 0x9b, 0x1e, 0x58, 0xff, 0x4d, 0x62, 0x31, 0x26, 0x32, 0x86, 0x5f, 0x81, 0x4e,
+	0x21, 0xee, 0x32, 0x14, 0x62, 0xa3, 0x75, 0xd0, 0x3a, 0xda, 0x70, 0xb6, 0x8a, 0xe0, 0x33, 0x14,
+	0x62, 0xf8, 0x0d, 0x68, 0x13, 0xdf, 0x68, 0x1f, 0xb4, 0x8e, 0x36, 0x8f, 0x3f, 0xcf, 0x4f, 0x8f,
+	0x59, 0x98, 0x9b, 0x8f, 0x59, 0xfc, 0xfd, 0xbd, 0x73, 0x44, 0x13, 0xec, 0xb4, 0x89, 0x0f, 0x7f,
+	0x00, 0x1b, 0x02, 0x23, 0xdf, 0xe5, 0x8c, 0xce, 0x8d, 0x1b, 0x8a, 0xd9, 0xbf, 0xc6, 0x8c, 0x38,
+	0xa7, 0x19, 0xb2, 0x9e, 0x16, 0x3f, 0x67, 0x74, 0x0e, 0xbf, 0x05, 0x6b, 0x6a, 0x06, 0x6b, 0x8a,
+	0xb9, 0x7d, 0x8d, 0x99, 0xc4, 0x82, 0xb0, 0x20, 0xa3, 0x54, 0x25, 0xfc, 0x09, 0x6c, 0xfa, 0x58,
+	0x7a, 0x82, 0x44, 0x69, 0x7f, 0xc6, 0xc7, 0x0d, 0x40, 0x1d, 0x80, 0x7f, 0xb5, 0x40, 0xff, 0xda,
+	0x66, 0x1b, 0x37, 0x0f, 0x5a, 0x47, 0xdb, 0xc7, 0x2f, 0xcc, 0x55, 0x17, 0x46, 0xed, 0x99, 0x59,
+	0xac, 0xe0, 0xd3, 0x92, 0x9f, 0x28, 0xfc, 0x21, 0x4b, 0xc2, 0x95, 0x49, 0xa7, 0x17, 0x2e, 0x45,
+	0xe0, 0x29, 0xe8, 0x11, 0x16, 0xe3, 0x40, 0xa8, 0x3d, 0x72, 0x3d, 0xee, 0x63, 0xe3, 0x93, 0x06,
+	0x8d, 0x74, 0x35, 0xea, 0x84, 0xfb, 0x18, 0x3e, 0x05, 0xbb, 0x5a, 0x2f, 0x94, 0xcc, 0xb0, 0x2b,
+	0x23, 0xc4, 0x8c, 0xf5, 0xfa, 0x6d, 0x83, 0x0b, 0x70, 0x4c, 0x66, 0x78, 0x12, 0x21, 0x06, 0x1f,
+	0x82, 0x9e, 0x3a, 0xc6, 0x33, 0x2e, 0x5c, 0x9f, 0xc8, 0x88, 0xa2, 0xb9, 0xb1, 0x51, 0x2f, 0xb5,
+	0x9d, 0x42, 0x8f, 0xb8, 0xf8, 0x25, 0x43, 0xe0, 0x15, 0xb8, 0xb5, 0xb8, 0x0d, 0x15, 0x31, 0xa0,
+	0x96, 0xf9, 0x51, 0xc3, 0x65, 0x9e, 0x90, 0x57, 0xd8, 0x49, 0x35, 0x2a, 0xeb, 0x5b, 0x46, 0x9d,
+	0x1d, 0x59, 0x0c, 0x35, 0xf3, 0x13, 0xd0, 0x2d, 0x7b, 0x90, 0x18, 0x09, 0xef, 0xd2, 0xd8, 0xac,
+	0x6f, 0xa1, 0x93, 0xb7, 0x30, 0x51, 0x04, 0x9c, 0x83, 0xbd, 0xa5, 0x0e, 0x72, 0xa9, 0xad, 0x0f,
+	0xda, 0x00, 0xd4, 0x1b, 0xc8, 0xad, 0xcf, 0xc0, 0x5a, 0xfa, 0x42, 0x30, 0x3a, 0xca, 0xe9, 0x41,
+	0x43, 0xa7, 0x17, 0xf3, 0xa8, 0x6a, 0x92, 0x06, 0x1c, 0xa5, 0x04, 0x13, 0xb0, 0x5d, 0x7d, 0x37,
+	0x1a, 0xdb, 0x4a, 0xfb, 0x59, 0x43, 0xed, 0x93, 0x0c, 0x76, 0x14, 0x5b, 0x31, 0xa9, 0x64, 0x9c,
+	0x8e, 0xa7, 0x3f, 0x42, 0x04, 0x3a, 0x95, 0x8f, 0x81, 0xd1, 0x6d, 0xd4, 0xd1, 0x50, 0x31, 0x9a,
+	0x99, 0x1e, 0x70, 0xb6, 0x90, 0xf6, 0x04, 0xff, 0x6e, 0x01, 0x03, 0x79, 0x1e, 0x4f, 0x58, 0xec,
+	0x6a, 0x6f, 0xe2, 0xec, 0x4a, 0xf7, 0x94, 0xdd, 0xb8, 0x61, 0x93, 0x99, 0xcb, 0x3b, 0xae, 0xb3,
+	0x9e, 0x70, 0xf6, 0x72, 0xb7, 0x72, 0x2b, 0xb3, 0xfb, 0xfc, 0x04, 0xec, 0x60, 0x4a, 0x02, 0x32,
+	0xa5, 0x95, 0xc3, 0xd2, 0xaf, 0x7d, 0x11, 0xf6, 0x0b, 0x6c, 0xb1, 0xff, 0x63, 0xb0, 0x5b, 0xd1,
+	0x2a, 0xae, 0x0e, 0xac, 0x15, 0x83, 0x9a, 0x58, 0x71, 0x1b, 0x30, 0xd8, 0xf1, 0x44, 0xe8, 0x4e,
+	0x91, 0xc4, 0xfe, 0x62, 0x89, 0x8c, 0x1d, 0x25, 0x76, 0x6f, 0xe5, 0xda, 0x64, 0x1f, 0x7f, 0xf3,
+	0x44, 0x84, 0xa3, 0x94, 0x2c, 0xda, 0x7d, 0xcc, 0x66, 0xfc, 0xd7, 0x8f, 0x9c, 0x9e, 0xb7, 0x14,
+	0x87, 0x08, 0xf4, 0x25, 0x09, 0x09, 0x45, 0x42, 0x33, 0xd9, 0x55, 0x26, 0x83, 0x3a, 0x93, 0x49,
+	0x06, 0x2e, 0x79, 0x74, 0x65, 0x35, 0x0c, 0x2f, 0xc1, 0xae, 0x48, 0x28, 0xbe, 0xd6, 0xca, 0x9e,
+	0x72, 0xf9, 0xae, 0xce, 0xc5, 0x49, 0x28, 0x7e, 0x57, 0x2f, 0x7d, 0xb1, 0x9c, 0x48, 0x9b, 0xa1,
+	0x3c, 0x20, 0x1e, 0xa2, 0x9a, 0xcd, 0xad, 0x66, 0xcd, 0x8c, 0x33, 0x70, 0xb9, 0x19, 0x5a, 0x0d,
+	0xc3, 0x3f, 0x40, 0x77, 0x8a, 0x24, 0xf1, 0x34, 0x83, 0x4f, 0x95, 0xc1, 0xdd, 0x3a, 0x83, 0x51,
+	0x8a, 0x2d, 0xc9, 0x77, 0xa6, 0x7a, 0xd0, 0x76, 0xde, 0x0e, 0x9f, 0x83, 0xc3, 0x05, 0x9c, 0x8f,
+	0x22, 0x22, 0x53, 0x11, 0xab, 0x9c, 0xc4, 0xd7, 0x5e, 0x22, 0x63, 0x1e, 0x62, 0x21, 0xad, 0xab,
+	0x62, 0xf8, 0x5a, 0xfd, 0x97, 0xa4, 0x69, 0x69, 0x5d, 0x95, 0x93, 0x7b, 0x3d, 0xda, 0x04, 0x1b,
+	0xe5, 0xd3, 0xe8, 0xbf, 0x16, 0xb8, 0xe3, 0xf1, 0xd0, 0xac, 0xfd, 0xbb, 0x1c, 0x75, 0x0a, 0xb3,
+	0xb3, 0xf4, 0xb8, 0x9e, 0xb5, 0x7e, 0x7f, 0x92, 0x33, 0x01, 0xa7, 0x88, 0x05, 0x26, 0x17, 0x81,
+	0x15, 0x60, 0xa6, 0x0e, 0xb3, 0xb5, 0x98, 0xe7, 0x7b, 0xfe, 0x71, 0xef, 0x97, 0xa3, 0x7f, 0xda,
+	0x37, 0x4e, 0x87, 0xc3, 0x7f, 0xdb, 0x87, 0xa7, 0x99, 0xe4, 0xd0, 0x97, 0x66, 0x36, 0x4c, 0x47,
+	0xe7, 0x03, 0xd3, 0x29, 0x2a, 0xdf, 0x14, 0x35, 0x17, 0x43, 0x5f, 0x5e, 0x94, 0x35, 0x17, 0xe7,
+	0x83, 0x8b, 0xb2, 0xe6, 0x6d, 0xfb, 0x4e, 0x96, 0xb0, 0xed, 0xa1, 0x2f, 0x6d, 0xbb, 0xac, 0xb2,
+	0xed, 0xf3, 0x81, 0x6d, 0x97, 0x75, 0xd3, 0x9b, 0x6a, 0xb2, 0x83, 0xff, 0x03, 0x00, 0x00, 0xff,
+	0xff, 0x60, 0x1d, 0x81, 0x7b, 0x8f, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/user_location_view.pb.go b/googleapis/ads/googleads/v3/resources/user_location_view.pb.go
new file mode 100644
index 0000000..4d02f48
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/user_location_view.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/user_location_view.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A user location view.
+//
+// User Location View includes all metrics aggregated at the country level,
+// one row per country. It reports metrics at the actual physical location of
+// the user by targeted or not targeted location. If other segment fields are
+// used, you may get more than one row per country.
+type UserLocationView struct {
+	// The resource name of the user location view.
+	// UserLocation view resource names have the form:
+	//
+	// `customers/{customer_id}/userLocationViews/{country_criterion_id}~{targeting_location}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Criterion Id for the country.
+	CountryCriterionId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=country_criterion_id,json=countryCriterionId,proto3" json:"country_criterion_id,omitempty"`
+	// Indicates whether location was targeted or not.
+	TargetingLocation    *wrappers.BoolValue `protobuf:"bytes,3,opt,name=targeting_location,json=targetingLocation,proto3" json:"targeting_location,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *UserLocationView) Reset()         { *m = UserLocationView{} }
+func (m *UserLocationView) String() string { return proto.CompactTextString(m) }
+func (*UserLocationView) ProtoMessage()    {}
+func (*UserLocationView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_010a04e760a368f3, []int{0}
+}
+
+func (m *UserLocationView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserLocationView.Unmarshal(m, b)
+}
+func (m *UserLocationView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserLocationView.Marshal(b, m, deterministic)
+}
+func (m *UserLocationView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserLocationView.Merge(m, src)
+}
+func (m *UserLocationView) XXX_Size() int {
+	return xxx_messageInfo_UserLocationView.Size(m)
+}
+func (m *UserLocationView) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserLocationView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserLocationView proto.InternalMessageInfo
+
+func (m *UserLocationView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *UserLocationView) GetCountryCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CountryCriterionId
+	}
+	return nil
+}
+
+func (m *UserLocationView) GetTargetingLocation() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetingLocation
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*UserLocationView)(nil), "google.ads.googleads.v3.resources.UserLocationView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/user_location_view.proto", fileDescriptor_010a04e760a368f3)
+}
+
+var fileDescriptor_010a04e760a368f3 = []byte{
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xd1, 0x8a, 0xd4, 0x30,
+	0x14, 0xa5, 0x5d, 0x10, 0xac, 0x0a, 0x5a, 0x14, 0xc6, 0x51, 0x64, 0x57, 0x59, 0x58, 0x5f, 0x12,
+	0xb0, 0xe2, 0x43, 0xf6, 0xa9, 0xe3, 0xc3, 0x32, 0xa2, 0xb2, 0x0c, 0xd8, 0x07, 0x29, 0x94, 0x4c,
+	0x1b, 0x63, 0xb0, 0xcd, 0x2d, 0x49, 0x3a, 0x83, 0x0c, 0xf3, 0xe2, 0xa7, 0xf8, 0xe8, 0x47, 0xf8,
+	0x01, 0x7e, 0xca, 0x7c, 0x85, 0xb4, 0x4d, 0x32, 0x83, 0x03, 0xee, 0xdb, 0x69, 0xef, 0x39, 0xe7,
+	0xde, 0x73, 0x6f, 0x22, 0xc2, 0x01, 0x78, 0xcd, 0x30, 0xad, 0x34, 0x1e, 0x61, 0x8f, 0x56, 0x09,
+	0x56, 0x4c, 0x43, 0xa7, 0x4a, 0xa6, 0x71, 0xa7, 0x99, 0x2a, 0x6a, 0x28, 0xa9, 0x11, 0x20, 0x8b,
+	0x95, 0x60, 0x6b, 0xd4, 0x2a, 0x30, 0x10, 0x9f, 0x8d, 0x02, 0x44, 0x2b, 0x8d, 0xbc, 0x16, 0xad,
+	0x12, 0xe4, 0xb5, 0xd3, 0xc7, 0xce, 0xbe, 0x15, 0xde, 0x71, 0x54, 0x4f, 0x9f, 0xd9, 0xd2, 0xf0,
+	0xb5, 0xec, 0xbe, 0xe0, 0xb5, 0xa2, 0x6d, 0xcb, 0x94, 0xb6, 0xf5, 0xa7, 0x07, 0x52, 0x2a, 0x25,
+	0x98, 0xa1, 0xbf, 0xad, 0x3e, 0xff, 0x1d, 0x46, 0xf7, 0x3f, 0x69, 0xa6, 0xde, 0xdb, 0xb9, 0x32,
+	0xc1, 0xd6, 0xf1, 0x8b, 0xe8, 0x9e, 0x6b, 0x52, 0x48, 0xda, 0xb0, 0x49, 0x70, 0x1a, 0x5c, 0xdc,
+	0x5e, 0xdc, 0x75, 0x3f, 0x3f, 0xd2, 0x86, 0xc5, 0x1f, 0xa2, 0x87, 0x25, 0x74, 0xd2, 0xa8, 0xef,
+	0x45, 0xa9, 0x84, 0x61, 0xaa, 0x4f, 0x25, 0xaa, 0x49, 0x78, 0x1a, 0x5c, 0xdc, 0x79, 0xf5, 0xc4,
+	0x26, 0x41, 0x6e, 0x2c, 0x34, 0x97, 0xe6, 0xcd, 0xeb, 0x8c, 0xd6, 0x1d, 0x5b, 0xc4, 0x56, 0xf8,
+	0xd6, 0xe9, 0xe6, 0x55, 0x3c, 0x8f, 0x62, 0x43, 0x15, 0x67, 0x46, 0x48, 0xee, 0xb7, 0x34, 0x39,
+	0x19, 0xcc, 0xa6, 0x47, 0x66, 0x33, 0x80, 0x7a, 0xf4, 0x7a, 0xe0, 0x55, 0x2e, 0x02, 0xf9, 0xb6,
+	0x4b, 0xbf, 0x46, 0x2f, 0xf7, 0x9b, 0xb4, 0xa8, 0x15, 0x1a, 0x95, 0xd0, 0xe0, 0xa3, 0xb8, 0x97,
+	0x65, 0xa7, 0x0d, 0x34, 0x4c, 0x69, 0xbc, 0x71, 0x70, 0x3b, 0x9c, 0xeb, 0x90, 0xa6, 0xf1, 0xe6,
+	0xf8, 0x82, 0xdb, 0xd9, 0x8f, 0x30, 0x3a, 0x2f, 0xa1, 0x41, 0x37, 0xde, 0x70, 0xf6, 0xe8, 0xdf,
+	0xc6, 0xd7, 0x7d, 0x9a, 0xeb, 0xe0, 0xf3, 0x3b, 0xab, 0xe5, 0x50, 0x53, 0xc9, 0x11, 0x28, 0x8e,
+	0x39, 0x93, 0x43, 0x56, 0xbc, 0x9f, 0xfd, 0x3f, 0x4f, 0xeb, 0xd2, 0xa3, 0x9f, 0xe1, 0xc9, 0x55,
+	0x9a, 0xfe, 0x0a, 0xcf, 0xae, 0x46, 0xcb, 0xb4, 0xd2, 0x68, 0x84, 0x3d, 0xca, 0x12, 0xb4, 0x70,
+	0xcc, 0x3f, 0x8e, 0x93, 0xa7, 0x95, 0xce, 0x3d, 0x27, 0xcf, 0x92, 0xdc, 0x73, 0x76, 0xe1, 0xf9,
+	0x58, 0x20, 0x24, 0xad, 0x34, 0x21, 0x9e, 0x45, 0x48, 0x96, 0x10, 0xe2, 0x79, 0xcb, 0x5b, 0xc3,
+	0xb0, 0xc9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x30, 0xab, 0xb2, 0x8a, 0x06, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/resources/video.pb.go b/googleapis/ads/googleads/v3/resources/video.pb.go
new file mode 100644
index 0000000..2901779
--- /dev/null
+++ b/googleapis/ads/googleads/v3/resources/video.pb.go
@@ -0,0 +1,142 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/resources/video.proto
+
+package resources
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A video.
+type Video struct {
+	// The resource name of the video.
+	// Video resource names have the form:
+	//
+	// `customers/{customer_id}/videos/{video_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the video.
+	Id *wrappers.StringValue `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The owner channel id of the video.
+	ChannelId *wrappers.StringValue `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"`
+	// The duration of the video in milliseconds.
+	DurationMillis *wrappers.Int64Value `protobuf:"bytes,4,opt,name=duration_millis,json=durationMillis,proto3" json:"duration_millis,omitempty"`
+	// The title of the video.
+	Title                *wrappers.StringValue `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Video) Reset()         { *m = Video{} }
+func (m *Video) String() string { return proto.CompactTextString(m) }
+func (*Video) ProtoMessage()    {}
+func (*Video) Descriptor() ([]byte, []int) {
+	return fileDescriptor_19115eaa759c1b28, []int{0}
+}
+
+func (m *Video) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Video.Unmarshal(m, b)
+}
+func (m *Video) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Video.Marshal(b, m, deterministic)
+}
+func (m *Video) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Video.Merge(m, src)
+}
+func (m *Video) XXX_Size() int {
+	return xxx_messageInfo_Video.Size(m)
+}
+func (m *Video) XXX_DiscardUnknown() {
+	xxx_messageInfo_Video.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Video proto.InternalMessageInfo
+
+func (m *Video) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Video) GetId() *wrappers.StringValue {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Video) GetChannelId() *wrappers.StringValue {
+	if m != nil {
+		return m.ChannelId
+	}
+	return nil
+}
+
+func (m *Video) GetDurationMillis() *wrappers.Int64Value {
+	if m != nil {
+		return m.DurationMillis
+	}
+	return nil
+}
+
+func (m *Video) GetTitle() *wrappers.StringValue {
+	if m != nil {
+		return m.Title
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Video)(nil), "google.ads.googleads.v3.resources.Video")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/resources/video.proto", fileDescriptor_19115eaa759c1b28)
+}
+
+var fileDescriptor_19115eaa759c1b28 = []byte{
+	// 415 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4d, 0x6b, 0xd4, 0x40,
+	0x1c, 0xc6, 0x49, 0xea, 0x0a, 0x1d, 0xdf, 0x20, 0xa7, 0x58, 0x4b, 0x69, 0x95, 0x42, 0x0f, 0x3a,
+	0x03, 0x8d, 0x78, 0x98, 0x9e, 0x52, 0x94, 0x5a, 0x41, 0x29, 0x2b, 0xe4, 0x20, 0x81, 0x65, 0x9a,
+	0x19, 0xe3, 0x40, 0x32, 0x13, 0x66, 0x26, 0xeb, 0x61, 0xd9, 0x2f, 0xe3, 0xd1, 0x8f, 0xe2, 0x57,
+	0xf0, 0x1b, 0xec, 0x17, 0xf0, 0x2a, 0x99, 0xb7, 0x15, 0x04, 0xdd, 0x53, 0x9e, 0xe4, 0xff, 0x7b,
+	0x9e, 0x79, 0xc8, 0x7f, 0xc0, 0x8b, 0x56, 0xca, 0xb6, 0x63, 0x88, 0x50, 0x8d, 0x9c, 0x9c, 0xd4,
+	0xb2, 0x40, 0x8a, 0x69, 0x39, 0xaa, 0x86, 0x69, 0xb4, 0xe4, 0x94, 0x49, 0x38, 0x28, 0x69, 0x64,
+	0x76, 0xe2, 0x18, 0x48, 0xa8, 0x86, 0x11, 0x87, 0xcb, 0x02, 0x46, 0xfc, 0xe0, 0x71, 0x48, 0x1c,
+	0x78, 0x0c, 0x71, 0xee, 0x83, 0x23, 0x3f, 0xb2, 0x6f, 0xb7, 0xe3, 0x67, 0xf4, 0x55, 0x91, 0x61,
+	0x60, 0x4a, 0xfb, 0xf9, 0xe1, 0x1f, 0x56, 0x22, 0x84, 0x34, 0xc4, 0x70, 0x29, 0xfc, 0xf4, 0xe9,
+	0xcf, 0x14, 0xcc, 0xaa, 0xa9, 0x4b, 0xf6, 0x0c, 0x3c, 0x08, 0xc9, 0x0b, 0x41, 0x7a, 0x96, 0x27,
+	0xc7, 0xc9, 0xd9, 0xfe, 0xfc, 0x7e, 0xf8, 0xf8, 0x81, 0xf4, 0x2c, 0x7b, 0x0e, 0x52, 0x4e, 0xf3,
+	0xf4, 0x38, 0x39, 0xbb, 0x77, 0x7e, 0xe8, 0xcb, 0xc2, 0x70, 0x32, 0xfc, 0x68, 0x14, 0x17, 0x6d,
+	0x45, 0xba, 0x91, 0xcd, 0x53, 0x4e, 0xb3, 0x0b, 0x00, 0x9a, 0x2f, 0x44, 0x08, 0xd6, 0x2d, 0x38,
+	0xcd, 0xf7, 0x76, 0x70, 0xed, 0x7b, 0xfe, 0x9a, 0x66, 0xaf, 0xc1, 0x23, 0x3a, 0x2a, 0x5b, 0x76,
+	0xd1, 0xf3, 0xae, 0xe3, 0x3a, 0xbf, 0x63, 0x13, 0x9e, 0xfc, 0x95, 0x70, 0x2d, 0xcc, 0xab, 0x97,
+	0x2e, 0xe0, 0x61, 0xf0, 0xbc, 0xb7, 0x96, 0xec, 0x1c, 0xcc, 0x0c, 0x37, 0x1d, 0xcb, 0x67, 0x3b,
+	0x9c, 0xee, 0x50, 0xfc, 0x76, 0x53, 0xbe, 0x01, 0x47, 0xdb, 0x4d, 0x78, 0x35, 0x70, 0x0d, 0x1b,
+	0xd9, 0x23, 0xff, 0xbb, 0x9a, 0x51, 0x1b, 0xd9, 0x33, 0xa5, 0xd1, 0x2a, 0xc8, 0xb5, 0x5b, 0xab,
+	0x46, 0x2b, 0xfb, 0x5c, 0x5f, 0xfe, 0x4a, 0xc0, 0x69, 0x23, 0x7b, 0xf8, 0xdf, 0x05, 0x5f, 0x02,
+	0x9b, 0x7a, 0x33, 0xb5, 0xba, 0x49, 0x3e, 0xbd, 0xf3, 0x86, 0x56, 0x76, 0x44, 0xb4, 0x50, 0xaa,
+	0x16, 0xb5, 0x4c, 0xd8, 0xce, 0x68, 0xdb, 0xe6, 0x1f, 0xf7, 0xeb, 0x22, 0xaa, 0x6f, 0xe9, 0xde,
+	0x55, 0x59, 0x7e, 0x4f, 0x4f, 0xae, 0x5c, 0x64, 0x49, 0x35, 0x74, 0x72, 0x52, 0x55, 0x01, 0xe7,
+	0x81, 0xfc, 0x11, 0x98, 0xba, 0xa4, 0xba, 0x8e, 0x4c, 0x5d, 0x15, 0x75, 0x64, 0x36, 0xe9, 0xa9,
+	0x1b, 0x60, 0x5c, 0x52, 0x8d, 0x71, 0xa4, 0x30, 0xae, 0x0a, 0x8c, 0x23, 0x77, 0x7b, 0xd7, 0x96,
+	0x2d, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x6c, 0x2c, 0x86, 0x0b, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v3/services/account_budget_proposal_service.pb.go b/googleapis/ads/googleads/v3/services/account_budget_proposal_service.pb.go
new file mode 100644
index 0000000..43d64ad
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/account_budget_proposal_service.pb.go
@@ -0,0 +1,494 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/account_budget_proposal_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [AccountBudgetProposalService.GetAccountBudgetProposal][google.ads.googleads.v3.services.AccountBudgetProposalService.GetAccountBudgetProposal].
+type GetAccountBudgetProposalRequest struct {
+	// Required. The resource name of the account-level budget proposal to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAccountBudgetProposalRequest) Reset()         { *m = GetAccountBudgetProposalRequest{} }
+func (m *GetAccountBudgetProposalRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAccountBudgetProposalRequest) ProtoMessage()    {}
+func (*GetAccountBudgetProposalRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9ca78c4fca96fbd7, []int{0}
+}
+
+func (m *GetAccountBudgetProposalRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Unmarshal(m, b)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAccountBudgetProposalRequest.Merge(m, src)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Size(m)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAccountBudgetProposalRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccountBudgetProposalRequest proto.InternalMessageInfo
+
+func (m *GetAccountBudgetProposalRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [AccountBudgetProposalService.MutateAccountBudgetProposal][google.ads.googleads.v3.services.AccountBudgetProposalService.MutateAccountBudgetProposal].
+type MutateAccountBudgetProposalRequest struct {
+	// Required. The ID of the customer.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The operation to perform on an individual account-level budget proposal.
+	Operation *AccountBudgetProposalOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,3,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalRequest) Reset()         { *m = MutateAccountBudgetProposalRequest{} }
+func (m *MutateAccountBudgetProposalRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalRequest) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9ca78c4fca96fbd7, []int{1}
+}
+
+func (m *MutateAccountBudgetProposalRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalRequest.Merge(m, src)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Size(m)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalRequest proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAccountBudgetProposalRequest) GetOperation() *AccountBudgetProposalOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MutateAccountBudgetProposalRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation to propose the creation of a new account-level budget or
+// edit/end/remove an existing one.
+type AccountBudgetProposalOperation struct {
+	// FieldMask that determines which budget fields are modified.  While budgets
+	// may be modified, proposals that propose such modifications are final.
+	// Therefore, update operations are not supported for proposals.
+	//
+	// Proposals that modify budgets have the 'update' proposal type.  Specifying
+	// a mask for any other proposal type is considered an error.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AccountBudgetProposalOperation_Create
+	//	*AccountBudgetProposalOperation_Remove
+	Operation            isAccountBudgetProposalOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
+	XXX_unrecognized     []byte                                     `json:"-"`
+	XXX_sizecache        int32                                      `json:"-"`
+}
+
+func (m *AccountBudgetProposalOperation) Reset()         { *m = AccountBudgetProposalOperation{} }
+func (m *AccountBudgetProposalOperation) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalOperation) ProtoMessage()    {}
+func (*AccountBudgetProposalOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9ca78c4fca96fbd7, []int{2}
+}
+
+func (m *AccountBudgetProposalOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Marshal(b, m, deterministic)
+}
+func (m *AccountBudgetProposalOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalOperation.Merge(m, src)
+}
+func (m *AccountBudgetProposalOperation) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Size(m)
+}
+func (m *AccountBudgetProposalOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalOperation proto.InternalMessageInfo
+
+func (m *AccountBudgetProposalOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAccountBudgetProposalOperation_Operation interface {
+	isAccountBudgetProposalOperation_Operation()
+}
+
+type AccountBudgetProposalOperation_Create struct {
+	Create *resources.AccountBudgetProposal `protobuf:"bytes,2,opt,name=create,proto3,oneof"`
+}
+
+type AccountBudgetProposalOperation_Remove struct {
+	Remove string `protobuf:"bytes,1,opt,name=remove,proto3,oneof"`
+}
+
+func (*AccountBudgetProposalOperation_Create) isAccountBudgetProposalOperation_Operation() {}
+
+func (*AccountBudgetProposalOperation_Remove) isAccountBudgetProposalOperation_Operation() {}
+
+func (m *AccountBudgetProposalOperation) GetOperation() isAccountBudgetProposalOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposalOperation) GetCreate() *resources.AccountBudgetProposal {
+	if x, ok := m.GetOperation().(*AccountBudgetProposalOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposalOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AccountBudgetProposalOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AccountBudgetProposalOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AccountBudgetProposalOperation_Create)(nil),
+		(*AccountBudgetProposalOperation_Remove)(nil),
+	}
+}
+
+// Response message for account-level budget mutate operations.
+type MutateAccountBudgetProposalResponse struct {
+	// The result of the mutate.
+	Result               *MutateAccountBudgetProposalResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalResponse) Reset()         { *m = MutateAccountBudgetProposalResponse{} }
+func (m *MutateAccountBudgetProposalResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalResponse) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9ca78c4fca96fbd7, []int{3}
+}
+
+func (m *MutateAccountBudgetProposalResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalResponse.Merge(m, src)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Size(m)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalResponse proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalResponse) GetResult() *MutateAccountBudgetProposalResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for the account budget proposal mutate.
+type MutateAccountBudgetProposalResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalResult) Reset()         { *m = MutateAccountBudgetProposalResult{} }
+func (m *MutateAccountBudgetProposalResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalResult) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9ca78c4fca96fbd7, []int{4}
+}
+
+func (m *MutateAccountBudgetProposalResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalResult.Merge(m, src)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Size(m)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalResult proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAccountBudgetProposalRequest)(nil), "google.ads.googleads.v3.services.GetAccountBudgetProposalRequest")
+	proto.RegisterType((*MutateAccountBudgetProposalRequest)(nil), "google.ads.googleads.v3.services.MutateAccountBudgetProposalRequest")
+	proto.RegisterType((*AccountBudgetProposalOperation)(nil), "google.ads.googleads.v3.services.AccountBudgetProposalOperation")
+	proto.RegisterType((*MutateAccountBudgetProposalResponse)(nil), "google.ads.googleads.v3.services.MutateAccountBudgetProposalResponse")
+	proto.RegisterType((*MutateAccountBudgetProposalResult)(nil), "google.ads.googleads.v3.services.MutateAccountBudgetProposalResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/account_budget_proposal_service.proto", fileDescriptor_9ca78c4fca96fbd7)
+}
+
+var fileDescriptor_9ca78c4fca96fbd7 = []byte{
+	// 690 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x6b, 0xd4, 0x4e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0x14, 0x3b, 0xdb, 0x5e, 0x06, 0xc4, 0x65, 0x5b, 0xec, 0x36, 0xed,
+	0x61, 0x59, 0x24, 0x81, 0xee, 0xa5, 0xa4, 0x14, 0x9b, 0x55, 0xdb, 0x8a, 0xd4, 0x2e, 0x11, 0x7a,
+	0xd0, 0xc5, 0x30, 0x9b, 0x4c, 0x63, 0x68, 0x92, 0x89, 0x99, 0xc9, 0x42, 0x29, 0xbd, 0xf4, 0x24,
+	0x5e, 0x7d, 0x07, 0x1e, 0x3d, 0xfb, 0x2a, 0x7a, 0xd5, 0x83, 0xf4, 0xe4, 0xc1, 0x8b, 0xbe, 0x0a,
+	0x49, 0x66, 0x66, 0xff, 0xc0, 0x6e, 0x02, 0xf6, 0xf6, 0x64, 0x9e, 0xef, 0x7e, 0x9e, 0xbf, 0x33,
+	0x0b, 0x0e, 0x7c, 0x42, 0xfc, 0x10, 0x1b, 0xc8, 0xa3, 0x06, 0x37, 0x73, 0x6b, 0xd8, 0x31, 0x28,
+	0x4e, 0x87, 0x81, 0x8b, 0xa9, 0x81, 0x5c, 0x97, 0x64, 0x31, 0x73, 0x06, 0x99, 0xe7, 0x63, 0xe6,
+	0x24, 0x29, 0x49, 0x08, 0x45, 0xa1, 0x23, 0x04, 0x7a, 0x92, 0x12, 0x46, 0x60, 0x93, 0xff, 0x58,
+	0x47, 0x1e, 0xd5, 0x47, 0x1c, 0x7d, 0xd8, 0xd1, 0x25, 0xa7, 0xf1, 0x78, 0x5e, 0xa4, 0x14, 0x53,
+	0x92, 0xa5, 0x25, 0xa1, 0x78, 0x88, 0xc6, 0x9a, 0x04, 0x24, 0x81, 0x81, 0xe2, 0x98, 0x30, 0xc4,
+	0x02, 0x12, 0x53, 0xe1, 0x7d, 0x30, 0xe1, 0x75, 0xc3, 0x00, 0xc7, 0x4c, 0x38, 0xd6, 0x27, 0x1c,
+	0x67, 0x01, 0x0e, 0x3d, 0x67, 0x80, 0xdf, 0xa1, 0x61, 0x40, 0x52, 0x21, 0x10, 0xa9, 0x1b, 0xc5,
+	0xd7, 0x20, 0x3b, 0x13, 0xaa, 0x08, 0xd1, 0x73, 0xae, 0xd0, 0x5e, 0x80, 0xf5, 0x43, 0xcc, 0x2c,
+	0x9e, 0x5d, 0xb7, 0x48, 0xae, 0x27, 0x72, 0xb3, 0xf1, 0xfb, 0x0c, 0x53, 0x06, 0x5b, 0x60, 0x45,
+	0xd6, 0xe1, 0xc4, 0x28, 0xc2, 0x75, 0xa5, 0xa9, 0xb4, 0x96, 0xba, 0x0b, 0x3f, 0x2d, 0xd5, 0x5e,
+	0x96, 0x9e, 0x97, 0x28, 0xc2, 0xda, 0x77, 0x05, 0x68, 0xc7, 0x19, 0x43, 0x0c, 0x97, 0x02, 0xb7,
+	0x40, 0xcd, 0xcd, 0x28, 0x23, 0x11, 0x4e, 0x9d, 0xc0, 0x9b, 0xc4, 0x01, 0x79, 0xfe, 0xdc, 0x83,
+	0x2e, 0x58, 0x22, 0x09, 0x4e, 0x8b, 0x4e, 0xd4, 0xd5, 0xa6, 0xd2, 0xaa, 0x6d, 0xef, 0xeb, 0x55,
+	0xa3, 0xd0, 0x67, 0x06, 0x3e, 0x91, 0x1c, 0x1e, 0x65, 0xcc, 0x85, 0x9b, 0x60, 0x65, 0x88, 0xc2,
+	0xc0, 0x43, 0x0c, 0x3b, 0x24, 0x0e, 0x2f, 0xea, 0x0b, 0x4d, 0xa5, 0x75, 0xcf, 0x5e, 0x96, 0x87,
+	0x27, 0x71, 0x78, 0xa1, 0xfd, 0x50, 0xc0, 0xc3, 0x72, 0x2e, 0xdc, 0x05, 0xb5, 0x2c, 0x29, 0x28,
+	0x79, 0x6f, 0x0b, 0x4a, 0x6d, 0xbb, 0x21, 0xd3, 0x95, 0xed, 0xd7, 0x0f, 0xf2, 0xf6, 0x1f, 0x23,
+	0x7a, 0x6e, 0x03, 0x2e, 0xcf, 0x6d, 0x68, 0x83, 0x45, 0x37, 0xc5, 0x88, 0x61, 0x51, 0xe6, 0xce,
+	0xdc, 0x32, 0x47, 0xfb, 0x34, 0xbb, 0xce, 0xa3, 0xff, 0x6c, 0x41, 0x82, 0x75, 0xb0, 0x98, 0xe2,
+	0x88, 0x0c, 0xc5, 0xb4, 0x72, 0x0f, 0xff, 0xee, 0xd6, 0x26, 0xfa, 0xaa, 0x5d, 0x2b, 0x60, 0xb3,
+	0x74, 0x62, 0x34, 0x21, 0x31, 0xc5, 0xf0, 0x4d, 0x8e, 0xa3, 0x59, 0xc8, 0x44, 0x8a, 0x4f, 0xaa,
+	0x27, 0x51, 0x8e, 0xcd, 0x42, 0x66, 0x0b, 0xa4, 0x76, 0x04, 0x36, 0x2a, 0xc5, 0xf9, 0xa4, 0x66,
+	0x6c, 0xe1, 0xf4, 0x02, 0x6e, 0x7f, 0xfd, 0x1f, 0xac, 0xcd, 0x84, 0xbc, 0xe2, 0x59, 0xc1, 0xdf,
+	0x0a, 0xa8, 0xcf, 0xdb, 0x77, 0x68, 0x55, 0x17, 0x55, 0x71, 0x57, 0x1a, 0xff, 0x3c, 0x3a, 0xad,
+	0x77, 0x6b, 0x4d, 0x17, 0x78, 0xfd, 0xed, 0xd7, 0x27, 0xd5, 0x84, 0x3b, 0xf9, 0x3b, 0x72, 0x39,
+	0xe5, 0xd9, 0x93, 0xb7, 0x84, 0x1a, 0x6d, 0xf9, 0xb0, 0x4c, 0xd3, 0xa8, 0xd1, 0xbe, 0x82, 0x1f,
+	0x55, 0xb0, 0x5a, 0xd2, 0x57, 0xf8, 0xf4, 0x8e, 0x33, 0xe4, 0x15, 0x3f, 0xbb, 0xeb, 0x26, 0x14,
+	0x0b, 0xa6, 0xbd, 0xbd, 0xb5, 0xee, 0x4f, 0x3c, 0x0a, 0x8f, 0x46, 0x2b, 0x5a, 0xb4, 0x61, 0x5f,
+	0xdb, 0xcd, 0xdb, 0x30, 0xae, 0xfb, 0x72, 0x42, 0xbb, 0xd7, 0xbe, 0x9a, 0xd3, 0x05, 0x33, 0x2a,
+	0x22, 0x9b, 0x4a, 0xbb, 0xb1, 0x7a, 0x63, 0xd5, 0xc7, 0xd9, 0x09, 0x2b, 0x09, 0xa8, 0xee, 0x92,
+	0xa8, 0xfb, 0x41, 0x05, 0x5b, 0x2e, 0x89, 0x2a, 0x2b, 0xe9, 0x6e, 0x94, 0x2d, 0x57, 0x2f, 0xbf,
+	0xe5, 0x3d, 0xe5, 0xf5, 0x91, 0xc0, 0xf8, 0x24, 0x44, 0xb1, 0xaf, 0x93, 0xd4, 0x37, 0x7c, 0x1c,
+	0x17, 0x6f, 0x80, 0x31, 0x0e, 0x3c, 0xff, 0x6f, 0x69, 0x57, 0x1a, 0x9f, 0xd5, 0x85, 0x43, 0xcb,
+	0xfa, 0xa2, 0x36, 0x0f, 0x39, 0xd0, 0xf2, 0xa8, 0xce, 0xcd, 0xdc, 0x3a, 0xed, 0xe8, 0x22, 0x30,
+	0xbd, 0x91, 0x92, 0xbe, 0xe5, 0xd1, 0xfe, 0x48, 0xd2, 0x3f, 0xed, 0xf4, 0xa5, 0xe4, 0x8f, 0xba,
+	0xc5, 0xcf, 0x4d, 0xd3, 0xf2, 0xa8, 0x69, 0x8e, 0x44, 0xa6, 0x79, 0xda, 0x31, 0x4d, 0x29, 0x1b,
+	0x2c, 0x16, 0x79, 0x76, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x4d, 0x10, 0x0c, 0x3d, 0x07,
+	0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AccountBudgetProposalServiceClient is the client API for AccountBudgetProposalService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AccountBudgetProposalServiceClient interface {
+	// Returns an account-level budget proposal in full detail.
+	GetAccountBudgetProposal(ctx context.Context, in *GetAccountBudgetProposalRequest, opts ...grpc.CallOption) (*resources.AccountBudgetProposal, error)
+	// Creates, updates, or removes account budget proposals.  Operation statuses
+	// are returned.
+	MutateAccountBudgetProposal(ctx context.Context, in *MutateAccountBudgetProposalRequest, opts ...grpc.CallOption) (*MutateAccountBudgetProposalResponse, error)
+}
+
+type accountBudgetProposalServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAccountBudgetProposalServiceClient(cc grpc.ClientConnInterface) AccountBudgetProposalServiceClient {
+	return &accountBudgetProposalServiceClient{cc}
+}
+
+func (c *accountBudgetProposalServiceClient) GetAccountBudgetProposal(ctx context.Context, in *GetAccountBudgetProposalRequest, opts ...grpc.CallOption) (*resources.AccountBudgetProposal, error) {
+	out := new(resources.AccountBudgetProposal)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AccountBudgetProposalService/GetAccountBudgetProposal", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountBudgetProposalServiceClient) MutateAccountBudgetProposal(ctx context.Context, in *MutateAccountBudgetProposalRequest, opts ...grpc.CallOption) (*MutateAccountBudgetProposalResponse, error) {
+	out := new(MutateAccountBudgetProposalResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AccountBudgetProposalService/MutateAccountBudgetProposal", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AccountBudgetProposalServiceServer is the server API for AccountBudgetProposalService service.
+type AccountBudgetProposalServiceServer interface {
+	// Returns an account-level budget proposal in full detail.
+	GetAccountBudgetProposal(context.Context, *GetAccountBudgetProposalRequest) (*resources.AccountBudgetProposal, error)
+	// Creates, updates, or removes account budget proposals.  Operation statuses
+	// are returned.
+	MutateAccountBudgetProposal(context.Context, *MutateAccountBudgetProposalRequest) (*MutateAccountBudgetProposalResponse, error)
+}
+
+// UnimplementedAccountBudgetProposalServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAccountBudgetProposalServiceServer struct {
+}
+
+func (*UnimplementedAccountBudgetProposalServiceServer) GetAccountBudgetProposal(ctx context.Context, req *GetAccountBudgetProposalRequest) (*resources.AccountBudgetProposal, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAccountBudgetProposal not implemented")
+}
+func (*UnimplementedAccountBudgetProposalServiceServer) MutateAccountBudgetProposal(ctx context.Context, req *MutateAccountBudgetProposalRequest) (*MutateAccountBudgetProposalResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateAccountBudgetProposal not implemented")
+}
+
+func RegisterAccountBudgetProposalServiceServer(s *grpc.Server, srv AccountBudgetProposalServiceServer) {
+	s.RegisterService(&_AccountBudgetProposalService_serviceDesc, srv)
+}
+
+func _AccountBudgetProposalService_GetAccountBudgetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAccountBudgetProposalRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetProposalServiceServer).GetAccountBudgetProposal(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AccountBudgetProposalService/GetAccountBudgetProposal",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetProposalServiceServer).GetAccountBudgetProposal(ctx, req.(*GetAccountBudgetProposalRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AccountBudgetProposalService_MutateAccountBudgetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAccountBudgetProposalRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetProposalServiceServer).MutateAccountBudgetProposal(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AccountBudgetProposalService/MutateAccountBudgetProposal",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetProposalServiceServer).MutateAccountBudgetProposal(ctx, req.(*MutateAccountBudgetProposalRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AccountBudgetProposalService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AccountBudgetProposalService",
+	HandlerType: (*AccountBudgetProposalServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAccountBudgetProposal",
+			Handler:    _AccountBudgetProposalService_GetAccountBudgetProposal_Handler,
+		},
+		{
+			MethodName: "MutateAccountBudgetProposal",
+			Handler:    _AccountBudgetProposalService_MutateAccountBudgetProposal_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/account_budget_proposal_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/account_budget_service.pb.go b/googleapis/ads/googleads/v3/services/account_budget_service.pb.go
new file mode 100644
index 0000000..95665b8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/account_budget_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/account_budget_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [AccountBudgetService.GetAccountBudget][google.ads.googleads.v3.services.AccountBudgetService.GetAccountBudget].
+type GetAccountBudgetRequest struct {
+	// Required. The resource name of the account-level budget to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAccountBudgetRequest) Reset()         { *m = GetAccountBudgetRequest{} }
+func (m *GetAccountBudgetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAccountBudgetRequest) ProtoMessage()    {}
+func (*GetAccountBudgetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2e805d79057ca99f, []int{0}
+}
+
+func (m *GetAccountBudgetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAccountBudgetRequest.Unmarshal(m, b)
+}
+func (m *GetAccountBudgetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAccountBudgetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAccountBudgetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAccountBudgetRequest.Merge(m, src)
+}
+func (m *GetAccountBudgetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAccountBudgetRequest.Size(m)
+}
+func (m *GetAccountBudgetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAccountBudgetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccountBudgetRequest proto.InternalMessageInfo
+
+func (m *GetAccountBudgetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAccountBudgetRequest)(nil), "google.ads.googleads.v3.services.GetAccountBudgetRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/account_budget_service.proto", fileDescriptor_2e805d79057ca99f)
+}
+
+var fileDescriptor_2e805d79057ca99f = []byte{
+	// 410 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x8a, 0xd3, 0x40,
+	0x1c, 0x27, 0x29, 0x08, 0x06, 0x05, 0x09, 0x42, 0x6b, 0x14, 0x2c, 0xa5, 0x87, 0xd2, 0xc3, 0x4c,
+	0x69, 0x40, 0x70, 0xa4, 0x87, 0x89, 0x87, 0xf6, 0x24, 0xa5, 0x42, 0x0f, 0x12, 0x08, 0xd3, 0x64,
+	0x8c, 0x81, 0x64, 0xa6, 0x66, 0x26, 0xb9, 0x88, 0x20, 0xbe, 0x82, 0x6f, 0xe0, 0xd1, 0x37, 0xb1,
+	0x57, 0x6f, 0x9e, 0x3c, 0x78, 0xda, 0x97, 0xd8, 0x25, 0x9d, 0x4c, 0xda, 0xec, 0x6e, 0xe8, 0xed,
+	0xc7, 0xfc, 0x7f, 0x1f, 0xff, 0x8f, 0xb1, 0x16, 0x31, 0xe7, 0x71, 0x4a, 0x21, 0x89, 0x04, 0x54,
+	0xb0, 0x42, 0xa5, 0x0b, 0x05, 0xcd, 0xcb, 0x24, 0xa4, 0x02, 0x92, 0x30, 0xe4, 0x05, 0x93, 0xc1,
+	0xae, 0x88, 0x62, 0x2a, 0x83, 0xfa, 0x1d, 0xec, 0x73, 0x2e, 0xb9, 0x3d, 0x54, 0x1a, 0x40, 0x22,
+	0x01, 0x1a, 0x39, 0x28, 0x5d, 0xa0, 0xe5, 0xce, 0xab, 0xae, 0x80, 0x9c, 0x0a, 0x5e, 0xe4, 0x77,
+	0x13, 0x94, 0xb3, 0xf3, 0x42, 0xeb, 0xf6, 0x09, 0x24, 0x8c, 0x71, 0x49, 0x64, 0xc2, 0x99, 0xa8,
+	0xab, 0xfd, 0xb3, 0x6a, 0x98, 0x26, 0x94, 0x69, 0xd9, 0xcb, 0xb3, 0xc2, 0xc7, 0x84, 0xa6, 0x51,
+	0xb0, 0xa3, 0x9f, 0x48, 0x99, 0xf0, 0x5c, 0x11, 0x46, 0x6f, 0xad, 0xfe, 0x92, 0x4a, 0xac, 0x22,
+	0xbd, 0x63, 0xe2, 0x86, 0x7e, 0x2e, 0xa8, 0x90, 0xf6, 0xc4, 0x7a, 0xac, 0x9b, 0x0a, 0x18, 0xc9,
+	0xe8, 0xc0, 0x18, 0x1a, 0x93, 0x87, 0x5e, 0xef, 0x1f, 0x36, 0x37, 0x8f, 0x74, 0xe5, 0x1d, 0xc9,
+	0xe8, 0xfc, 0xda, 0xb0, 0x9e, 0xb6, 0x2c, 0xde, 0xab, 0x71, 0xed, 0xdf, 0x86, 0xf5, 0xe4, 0xb6,
+	0xbd, 0xfd, 0x1a, 0x5c, 0xda, 0x12, 0xe8, 0x68, 0xc9, 0x99, 0x75, 0x4a, 0x9b, 0xf5, 0x81, 0x96,
+	0x70, 0xb4, 0xfa, 0x8b, 0xdb, 0x53, 0x7c, 0xff, 0xf3, 0xff, 0x87, 0x39, 0xb7, 0x67, 0xd5, 0xce,
+	0xbf, 0xb4, 0x2a, 0x8b, 0xb0, 0x10, 0x92, 0x67, 0x34, 0x17, 0x70, 0xaa, 0x8f, 0xa0, 0x5c, 0x04,
+	0x9c, 0x7e, 0x75, 0x9e, 0x1f, 0xf0, 0xe0, 0x14, 0x59, 0xa3, 0x7d, 0x22, 0x40, 0xc8, 0x33, 0xef,
+	0x9b, 0x69, 0x8d, 0x43, 0x9e, 0x5d, 0x9c, 0xcc, 0x7b, 0x76, 0xdf, 0x9e, 0xd6, 0xd5, 0x29, 0xd6,
+	0xc6, 0x87, 0x55, 0x2d, 0x8f, 0x79, 0x4a, 0x58, 0x0c, 0x78, 0x1e, 0xc3, 0x98, 0xb2, 0xe3, 0xa1,
+	0xe0, 0x29, 0xb0, 0xfb, 0x73, 0xbe, 0xd1, 0xe0, 0xa7, 0xd9, 0x5b, 0x62, 0xfc, 0xcb, 0x1c, 0x2e,
+	0x95, 0x21, 0x8e, 0x04, 0x50, 0xb0, 0x42, 0x5b, 0x17, 0xd4, 0xc1, 0xe2, 0xa0, 0x29, 0x3e, 0x8e,
+	0x84, 0xdf, 0x50, 0xfc, 0xad, 0xeb, 0x6b, 0xca, 0x95, 0x39, 0x56, 0xef, 0x08, 0xe1, 0x48, 0x20,
+	0xd4, 0x90, 0x10, 0xda, 0xba, 0x08, 0x69, 0xda, 0xee, 0xc1, 0xb1, 0x4f, 0xf7, 0x26, 0x00, 0x00,
+	0xff, 0xff, 0x7f, 0xaf, 0x6d, 0xc8, 0x43, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AccountBudgetServiceClient is the client API for AccountBudgetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AccountBudgetServiceClient interface {
+	// Returns an account-level budget in full detail.
+	GetAccountBudget(ctx context.Context, in *GetAccountBudgetRequest, opts ...grpc.CallOption) (*resources.AccountBudget, error)
+}
+
+type accountBudgetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAccountBudgetServiceClient(cc grpc.ClientConnInterface) AccountBudgetServiceClient {
+	return &accountBudgetServiceClient{cc}
+}
+
+func (c *accountBudgetServiceClient) GetAccountBudget(ctx context.Context, in *GetAccountBudgetRequest, opts ...grpc.CallOption) (*resources.AccountBudget, error) {
+	out := new(resources.AccountBudget)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AccountBudgetService/GetAccountBudget", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AccountBudgetServiceServer is the server API for AccountBudgetService service.
+type AccountBudgetServiceServer interface {
+	// Returns an account-level budget in full detail.
+	GetAccountBudget(context.Context, *GetAccountBudgetRequest) (*resources.AccountBudget, error)
+}
+
+// UnimplementedAccountBudgetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAccountBudgetServiceServer struct {
+}
+
+func (*UnimplementedAccountBudgetServiceServer) GetAccountBudget(ctx context.Context, req *GetAccountBudgetRequest) (*resources.AccountBudget, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAccountBudget not implemented")
+}
+
+func RegisterAccountBudgetServiceServer(s *grpc.Server, srv AccountBudgetServiceServer) {
+	s.RegisterService(&_AccountBudgetService_serviceDesc, srv)
+}
+
+func _AccountBudgetService_GetAccountBudget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAccountBudgetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetServiceServer).GetAccountBudget(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AccountBudgetService/GetAccountBudget",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetServiceServer).GetAccountBudget(ctx, req.(*GetAccountBudgetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AccountBudgetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AccountBudgetService",
+	HandlerType: (*AccountBudgetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAccountBudget",
+			Handler:    _AccountBudgetService_GetAccountBudget_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/account_budget_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_ad_asset_view_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_ad_asset_view_service.pb.go
new file mode 100644
index 0000000..822963a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_ad_asset_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_ad_asset_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupAdAssetViewService.GetAdGroupAdAssetView][google.ads.googleads.v3.services.AdGroupAdAssetViewService.GetAdGroupAdAssetView].
+type GetAdGroupAdAssetViewRequest struct {
+	// Required. The resource name of the ad group ad asset view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAdAssetViewRequest) Reset()         { *m = GetAdGroupAdAssetViewRequest{} }
+func (m *GetAdGroupAdAssetViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAdAssetViewRequest) ProtoMessage()    {}
+func (*GetAdGroupAdAssetViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6809cbe9c3c4b2f3, []int{0}
+}
+
+func (m *GetAdGroupAdAssetViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAdAssetViewRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAdAssetViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAdAssetViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupAdAssetViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAdAssetViewRequest.Merge(m, src)
+}
+func (m *GetAdGroupAdAssetViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAdAssetViewRequest.Size(m)
+}
+func (m *GetAdGroupAdAssetViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAdAssetViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAdAssetViewRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAdAssetViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAdAssetViewRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupAdAssetViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_ad_asset_view_service.proto", fileDescriptor_6809cbe9c3c4b2f3)
+}
+
+var fileDescriptor_6809cbe9c3c4b2f3 = []byte{
+	// 425 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x6a, 0xd5, 0x40,
+	0x14, 0xe5, 0xa5, 0x20, 0x18, 0x74, 0x13, 0x10, 0xeb, 0xb3, 0xe8, 0xa3, 0x74, 0x51, 0xba, 0x98,
+	0x01, 0x43, 0x11, 0x46, 0x2c, 0xcc, 0x03, 0x79, 0xdd, 0x28, 0xa5, 0x42, 0x16, 0x12, 0x08, 0xd3,
+	0xcc, 0x35, 0x0e, 0x24, 0x99, 0x38, 0x77, 0x92, 0x2e, 0xc4, 0x8d, 0xe0, 0x17, 0xb8, 0x71, 0xed,
+	0xd2, 0x4f, 0xe9, 0xd6, 0x9d, 0x20, 0xb8, 0x70, 0xe5, 0x57, 0x48, 0x3a, 0x99, 0xb4, 0xe5, 0x99,
+	0x76, 0x77, 0xc8, 0x39, 0xf7, 0x9c, 0x3b, 0xe7, 0x26, 0x7c, 0x51, 0x68, 0x5d, 0x94, 0x40, 0x85,
+	0x44, 0xea, 0x60, 0x8f, 0xba, 0x98, 0x22, 0x98, 0x4e, 0xe5, 0x80, 0x54, 0xc8, 0xac, 0x30, 0xba,
+	0x6d, 0x32, 0x21, 0x33, 0x81, 0x08, 0x36, 0xeb, 0x14, 0x9c, 0x66, 0x03, 0x4f, 0x1a, 0xa3, 0xad,
+	0x8e, 0x16, 0x6e, 0x96, 0x08, 0x89, 0x64, 0xb4, 0x21, 0x5d, 0x4c, 0xbc, 0xcd, 0xfc, 0x60, 0x2a,
+	0xc8, 0x00, 0xea, 0xd6, 0x4c, 0x27, 0xb9, 0x84, 0xf9, 0x96, 0x9f, 0x6f, 0x14, 0x15, 0x75, 0xad,
+	0xad, 0xb0, 0x4a, 0xd7, 0x38, 0xb0, 0xf7, 0x2f, 0xb1, 0x79, 0xa9, 0xa0, 0xb6, 0x03, 0xf1, 0xf8,
+	0x12, 0xf1, 0x56, 0x41, 0x29, 0xb3, 0x13, 0x78, 0x27, 0x3a, 0xa5, 0x8d, 0x13, 0x6c, 0x1f, 0x86,
+	0x5b, 0x2b, 0xb0, 0x5c, 0xae, 0xfa, 0x64, 0x2e, 0x79, 0x9f, 0x9b, 0x28, 0x38, 0x3d, 0x86, 0xf7,
+	0x2d, 0xa0, 0x8d, 0x76, 0xc3, 0xbb, 0x7e, 0xc3, 0xac, 0x16, 0x15, 0x6c, 0xce, 0x16, 0xb3, 0xdd,
+	0xdb, 0xcb, 0x8d, 0xdf, 0x3c, 0x38, 0xbe, 0xe3, 0x99, 0x57, 0xa2, 0x82, 0x27, 0x5f, 0x83, 0xf0,
+	0xc1, 0xba, 0xcf, 0x6b, 0x57, 0x40, 0xf4, 0x6b, 0x16, 0xde, 0xfb, 0x6f, 0x50, 0x74, 0x40, 0x6e,
+	0x2a, 0x8f, 0x5c, 0xb7, 0xe1, 0x7c, 0x7f, 0x72, 0x7e, 0xac, 0x96, 0xac, 0x4f, 0x6f, 0xbf, 0xfc,
+	0xc9, 0xaf, 0xbe, 0xec, 0xd3, 0x8f, 0x3f, 0x5f, 0x82, 0xa7, 0xd1, 0x7e, 0x7f, 0x94, 0x0f, 0x57,
+	0x98, 0xe7, 0x79, 0x8b, 0x56, 0x57, 0x60, 0x90, 0xee, 0x51, 0xb1, 0x66, 0x85, 0x74, 0xef, 0xe3,
+	0xfc, 0xe1, 0x19, 0xdf, 0xbc, 0x08, 0x1f, 0x50, 0xa3, 0x90, 0xe4, 0xba, 0x5a, 0x7e, 0x0e, 0xc2,
+	0x9d, 0x5c, 0x57, 0x37, 0x3e, 0x74, 0xf9, 0x68, 0xb2, 0xc0, 0xa3, 0xfe, 0x5a, 0x47, 0xb3, 0x37,
+	0x87, 0x83, 0x47, 0xa1, 0x4b, 0x51, 0x17, 0x44, 0x9b, 0x82, 0x16, 0x50, 0x9f, 0xdf, 0x92, 0x5e,
+	0xa4, 0x4e, 0xff, 0xcf, 0xcf, 0x3c, 0xf8, 0x16, 0x6c, 0xac, 0x38, 0xff, 0x1e, 0x2c, 0x56, 0xce,
+	0x90, 0x4b, 0x24, 0x0e, 0xf6, 0x28, 0x89, 0xc9, 0x10, 0x8c, 0x67, 0x5e, 0x92, 0x72, 0x89, 0xe9,
+	0x28, 0x49, 0x93, 0x38, 0xf5, 0x92, 0xbf, 0xc1, 0x8e, 0xfb, 0xce, 0x18, 0x97, 0xc8, 0xd8, 0x28,
+	0x62, 0x2c, 0x89, 0x19, 0xf3, 0xb2, 0x93, 0x5b, 0xe7, 0x7b, 0xc6, 0xff, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0xa9, 0x66, 0x45, 0x48, 0x76, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupAdAssetViewServiceClient is the client API for AdGroupAdAssetViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAdAssetViewServiceClient interface {
+	// Returns the requested ad group ad asset view in full detail.
+	GetAdGroupAdAssetView(ctx context.Context, in *GetAdGroupAdAssetViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAdAssetView, error)
+}
+
+type adGroupAdAssetViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupAdAssetViewServiceClient(cc grpc.ClientConnInterface) AdGroupAdAssetViewServiceClient {
+	return &adGroupAdAssetViewServiceClient{cc}
+}
+
+func (c *adGroupAdAssetViewServiceClient) GetAdGroupAdAssetView(ctx context.Context, in *GetAdGroupAdAssetViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAdAssetView, error) {
+	out := new(resources.AdGroupAdAssetView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAdAssetViewService/GetAdGroupAdAssetView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAdAssetViewServiceServer is the server API for AdGroupAdAssetViewService service.
+type AdGroupAdAssetViewServiceServer interface {
+	// Returns the requested ad group ad asset view in full detail.
+	GetAdGroupAdAssetView(context.Context, *GetAdGroupAdAssetViewRequest) (*resources.AdGroupAdAssetView, error)
+}
+
+// UnimplementedAdGroupAdAssetViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupAdAssetViewServiceServer struct {
+}
+
+func (*UnimplementedAdGroupAdAssetViewServiceServer) GetAdGroupAdAssetView(ctx context.Context, req *GetAdGroupAdAssetViewRequest) (*resources.AdGroupAdAssetView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAdGroupAdAssetView not implemented")
+}
+
+func RegisterAdGroupAdAssetViewServiceServer(s *grpc.Server, srv AdGroupAdAssetViewServiceServer) {
+	s.RegisterService(&_AdGroupAdAssetViewService_serviceDesc, srv)
+}
+
+func _AdGroupAdAssetViewService_GetAdGroupAdAssetView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAdAssetViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdAssetViewServiceServer).GetAdGroupAdAssetView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAdAssetViewService/GetAdGroupAdAssetView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdAssetViewServiceServer).GetAdGroupAdAssetView(ctx, req.(*GetAdGroupAdAssetViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAdAssetViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupAdAssetViewService",
+	HandlerType: (*AdGroupAdAssetViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAdAssetView",
+			Handler:    _AdGroupAdAssetViewService_GetAdGroupAdAssetView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_ad_asset_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_ad_label_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_ad_label_service.pb.go
new file mode 100644
index 0000000..ae93531
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_ad_label_service.pb.go
@@ -0,0 +1,502 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_ad_label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupAdLabelService.GetAdGroupAdLabel][google.ads.googleads.v3.services.AdGroupAdLabelService.GetAdGroupAdLabel].
+type GetAdGroupAdLabelRequest struct {
+	// Required. The resource name of the ad group ad label to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAdLabelRequest) Reset()         { *m = GetAdGroupAdLabelRequest{} }
+func (m *GetAdGroupAdLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAdLabelRequest) ProtoMessage()    {}
+func (*GetAdGroupAdLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3e6c97fd3f05d422, []int{0}
+}
+
+func (m *GetAdGroupAdLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAdLabelRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAdLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAdLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupAdLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAdLabelRequest.Merge(m, src)
+}
+func (m *GetAdGroupAdLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAdLabelRequest.Size(m)
+}
+func (m *GetAdGroupAdLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAdLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAdLabelRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAdLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupAdLabelService.MutateAdGroupAdLabels][google.ads.googleads.v3.services.AdGroupAdLabelService.MutateAdGroupAdLabels].
+type MutateAdGroupAdLabelsRequest struct {
+	// Required. ID of the customer whose ad group ad labels are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on ad group ad labels.
+	Operations []*AdGroupAdLabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupAdLabelsRequest) Reset()         { *m = MutateAdGroupAdLabelsRequest{} }
+func (m *MutateAdGroupAdLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdLabelsRequest) ProtoMessage()    {}
+func (*MutateAdGroupAdLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3e6c97fd3f05d422, []int{1}
+}
+
+func (m *MutateAdGroupAdLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdLabelsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupAdLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdLabelsRequest.Size(m)
+}
+func (m *MutateAdGroupAdLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupAdLabelsRequest) GetOperations() []*AdGroupAdLabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupAdLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupAdLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on an ad group ad label.
+type AdGroupAdLabelOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupAdLabelOperation_Create
+	//	*AdGroupAdLabelOperation_Remove
+	Operation            isAdGroupAdLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *AdGroupAdLabelOperation) Reset()         { *m = AdGroupAdLabelOperation{} }
+func (m *AdGroupAdLabelOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdLabelOperation) ProtoMessage()    {}
+func (*AdGroupAdLabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3e6c97fd3f05d422, []int{2}
+}
+
+func (m *AdGroupAdLabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdLabelOperation.Unmarshal(m, b)
+}
+func (m *AdGroupAdLabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdLabelOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdLabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdLabelOperation.Merge(m, src)
+}
+func (m *AdGroupAdLabelOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdLabelOperation.Size(m)
+}
+func (m *AdGroupAdLabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdLabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdLabelOperation proto.InternalMessageInfo
+
+type isAdGroupAdLabelOperation_Operation interface {
+	isAdGroupAdLabelOperation_Operation()
+}
+
+type AdGroupAdLabelOperation_Create struct {
+	Create *resources.AdGroupAdLabel `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupAdLabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupAdLabelOperation_Create) isAdGroupAdLabelOperation_Operation() {}
+
+func (*AdGroupAdLabelOperation_Remove) isAdGroupAdLabelOperation_Operation() {}
+
+func (m *AdGroupAdLabelOperation) GetOperation() isAdGroupAdLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupAdLabelOperation) GetCreate() *resources.AdGroupAdLabel {
+	if x, ok := m.GetOperation().(*AdGroupAdLabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupAdLabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupAdLabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupAdLabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupAdLabelOperation_Create)(nil),
+		(*AdGroupAdLabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group ad labels mutate.
+type MutateAdGroupAdLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupAdLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateAdGroupAdLabelsResponse) Reset()         { *m = MutateAdGroupAdLabelsResponse{} }
+func (m *MutateAdGroupAdLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdLabelsResponse) ProtoMessage()    {}
+func (*MutateAdGroupAdLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3e6c97fd3f05d422, []int{3}
+}
+
+func (m *MutateAdGroupAdLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdLabelsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupAdLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdLabelsResponse.Size(m)
+}
+func (m *MutateAdGroupAdLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupAdLabelsResponse) GetResults() []*MutateAdGroupAdLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for an ad group ad label mutate.
+type MutateAdGroupAdLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupAdLabelResult) Reset()         { *m = MutateAdGroupAdLabelResult{} }
+func (m *MutateAdGroupAdLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdLabelResult) ProtoMessage()    {}
+func (*MutateAdGroupAdLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3e6c97fd3f05d422, []int{4}
+}
+
+func (m *MutateAdGroupAdLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdLabelResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdLabelResult.Merge(m, src)
+}
+func (m *MutateAdGroupAdLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdLabelResult.Size(m)
+}
+func (m *MutateAdGroupAdLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdLabelResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAdLabelRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupAdLabelRequest")
+	proto.RegisterType((*MutateAdGroupAdLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdLabelsRequest")
+	proto.RegisterType((*AdGroupAdLabelOperation)(nil), "google.ads.googleads.v3.services.AdGroupAdLabelOperation")
+	proto.RegisterType((*MutateAdGroupAdLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdLabelsResponse")
+	proto.RegisterType((*MutateAdGroupAdLabelResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_ad_label_service.proto", fileDescriptor_3e6c97fd3f05d422)
+}
+
+var fileDescriptor_3e6c97fd3f05d422 = []byte{
+	// 715 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xbd, 0x6f, 0xd3, 0x40,
+	0x14, 0xc7, 0x0e, 0x2a, 0xf4, 0xd2, 0x82, 0x38, 0x54, 0x6a, 0x85, 0x22, 0x22, 0x53, 0x89, 0x28,
+	0x42, 0xb6, 0x9a, 0xb0, 0xd4, 0x50, 0xc0, 0x11, 0x34, 0xad, 0xf8, 0x68, 0x95, 0x4a, 0x11, 0x42,
+	0x11, 0xd6, 0xd5, 0xbe, 0x06, 0x4b, 0xb6, 0xcf, 0xdc, 0x9d, 0x23, 0x55, 0x55, 0x07, 0xd8, 0x99,
+	0xf8, 0x0f, 0x18, 0xf9, 0x27, 0xd8, 0x2b, 0x31, 0xb1, 0x75, 0x62, 0x60, 0x62, 0xec, 0xc6, 0x86,
+	0xfc, 0x71, 0x49, 0x1c, 0x62, 0x45, 0x74, 0x7b, 0xb9, 0xf7, 0xde, 0xef, 0xfd, 0x7e, 0xef, 0xc3,
+	0x01, 0x4f, 0xfa, 0x84, 0xf4, 0x3d, 0xac, 0x23, 0x87, 0xe9, 0xa9, 0x19, 0x5b, 0x83, 0xa6, 0xce,
+	0x30, 0x1d, 0xb8, 0x36, 0x66, 0x3a, 0x72, 0xac, 0x3e, 0x25, 0x51, 0x68, 0x21, 0xc7, 0xf2, 0xd0,
+	0x3e, 0xf6, 0xac, 0xcc, 0xa5, 0x85, 0x94, 0x70, 0x02, 0xab, 0x69, 0x9a, 0x86, 0x1c, 0xa6, 0x0d,
+	0x11, 0xb4, 0x41, 0x53, 0x13, 0x08, 0x95, 0xf5, 0xa2, 0x1a, 0x14, 0x33, 0x12, 0xd1, 0xa9, 0x45,
+	0x52, 0xf0, 0xca, 0x8a, 0x48, 0x0d, 0x5d, 0x1d, 0x05, 0x01, 0xe1, 0x88, 0xbb, 0x24, 0x60, 0x99,
+	0x77, 0x79, 0xcc, 0x6b, 0x7b, 0x2e, 0x0e, 0x78, 0xe6, 0xb8, 0x3d, 0xe6, 0x38, 0x70, 0xb1, 0xe7,
+	0x58, 0xfb, 0xf8, 0x1d, 0x1a, 0xb8, 0x84, 0x4e, 0x64, 0xd2, 0xd0, 0xd6, 0x19, 0x47, 0x3c, 0xca,
+	0x20, 0xd5, 0xa7, 0x40, 0x69, 0x63, 0x6e, 0x3a, 0xed, 0x98, 0x8d, 0xe9, 0xbc, 0x88, 0xb9, 0x74,
+	0xf0, 0xfb, 0x08, 0x33, 0x0e, 0x6b, 0x60, 0x51, 0x30, 0xb6, 0x02, 0xe4, 0x63, 0x45, 0xaa, 0x4a,
+	0xb5, 0xf9, 0x56, 0xe9, 0xa7, 0x29, 0x77, 0x16, 0x84, 0xe7, 0x15, 0xf2, 0xb1, 0x7a, 0x26, 0x81,
+	0x95, 0x97, 0x11, 0x47, 0x1c, 0xe7, 0x91, 0x98, 0x80, 0x5a, 0x05, 0x65, 0x3b, 0x62, 0x9c, 0xf8,
+	0x98, 0x5a, 0xae, 0x33, 0x0e, 0x04, 0xc4, 0xfb, 0xb6, 0x03, 0xdf, 0x02, 0x40, 0x42, 0x4c, 0x53,
+	0xcd, 0x8a, 0x5c, 0x2d, 0xd5, 0xca, 0x8d, 0x75, 0x6d, 0x56, 0xbf, 0xb5, 0x7c, 0xcd, 0x1d, 0x81,
+	0x90, 0xe1, 0x8f, 0x10, 0xe1, 0x5d, 0x70, 0x35, 0x44, 0x94, 0xbb, 0xc8, 0xb3, 0x0e, 0x90, 0xeb,
+	0x45, 0x14, 0x2b, 0xa5, 0xaa, 0x54, 0xbb, 0xdc, 0xb9, 0x92, 0x3d, 0x6f, 0xa6, 0xaf, 0xf0, 0x0e,
+	0x58, 0x1c, 0x20, 0xcf, 0x75, 0x10, 0xc7, 0x16, 0x09, 0xbc, 0x43, 0xe5, 0x62, 0x12, 0xb6, 0x20,
+	0x1e, 0x77, 0x02, 0xef, 0x50, 0xfd, 0x24, 0x81, 0xe5, 0x82, 0xd2, 0xf0, 0x39, 0x98, 0xb3, 0x29,
+	0x46, 0x3c, 0xed, 0x59, 0xb9, 0xb1, 0x56, 0xa8, 0x62, 0xb8, 0x13, 0x13, 0x32, 0xb6, 0x2e, 0x74,
+	0x32, 0x08, 0xa8, 0x80, 0x39, 0x8a, 0x7d, 0x32, 0xc0, 0x8a, 0x1c, 0xf7, 0x2d, 0xf6, 0xa4, 0xbf,
+	0x5b, 0x65, 0x30, 0x3f, 0x94, 0xa7, 0x7e, 0x93, 0xc0, 0xad, 0x82, 0x21, 0xb0, 0x90, 0x04, 0x0c,
+	0xc3, 0x4d, 0xb0, 0x34, 0xa1, 0xdf, 0xc2, 0x94, 0x12, 0x9a, 0x74, 0xa1, 0xdc, 0x80, 0x82, 0x24,
+	0x0d, 0x6d, 0x6d, 0x2f, 0xd9, 0x92, 0xce, 0xf5, 0x7c, 0x67, 0x9e, 0xc5, 0xe1, 0xb0, 0x0b, 0x2e,
+	0x51, 0xcc, 0x22, 0x8f, 0x8b, 0x21, 0x3d, 0x9c, 0x3d, 0xa4, 0x69, 0xcc, 0x3a, 0x09, 0x48, 0x47,
+	0x80, 0xa9, 0x26, 0xa8, 0x14, 0x87, 0xc5, 0x43, 0x99, 0xb2, 0x8e, 0xf9, 0x4d, 0x6c, 0xfc, 0x29,
+	0x81, 0xa5, 0x7c, 0xf6, 0x5e, 0xca, 0x00, 0x7e, 0x97, 0xc0, 0xb5, 0x7f, 0x56, 0x1d, 0x1a, 0xb3,
+	0x99, 0x17, 0xdd, 0x47, 0xe5, 0xff, 0x87, 0xaa, 0x6e, 0x9f, 0x9a, 0x79, 0x11, 0x1f, 0x7f, 0xfc,
+	0xfa, 0x2c, 0x37, 0xe1, 0x5a, 0xfc, 0x79, 0x38, 0xca, 0x79, 0x36, 0xc4, 0x61, 0x30, 0xbd, 0xae,
+	0xa3, 0xfc, 0x44, 0xf5, 0xfa, 0x31, 0x3c, 0x93, 0xc0, 0xd2, 0xd4, 0x71, 0xc3, 0x47, 0xe7, 0x9b,
+	0x86, 0x38, 0xd6, 0xca, 0xe3, 0x73, 0xe7, 0xa7, 0x7b, 0xa6, 0xbe, 0x3e, 0x35, 0x6f, 0x8c, 0x9d,
+	0xfb, 0xbd, 0xd1, 0x09, 0x26, 0x72, 0xd7, 0xd5, 0xfb, 0xb1, 0xdc, 0x91, 0xbe, 0xa3, 0xb1, 0xe0,
+	0x8d, 0xfa, 0xf1, 0xa4, 0x5a, 0xc3, 0x4f, 0xaa, 0x19, 0x52, 0xbd, 0x72, 0xf3, 0xc4, 0x54, 0x46,
+	0x8c, 0x32, 0x2b, 0x74, 0x99, 0x66, 0x13, 0xbf, 0xf5, 0x41, 0x06, 0xab, 0x36, 0xf1, 0x67, 0xb2,
+	0x6f, 0x55, 0xa6, 0x6e, 0xc8, 0x6e, 0xfc, 0x41, 0xdc, 0x95, 0xde, 0x6c, 0x65, 0xf9, 0x7d, 0xe2,
+	0xa1, 0xa0, 0xaf, 0x11, 0xda, 0xd7, 0xfb, 0x38, 0x48, 0x3e, 0x97, 0xfa, 0xa8, 0x62, 0xf1, 0x3f,
+	0xc8, 0x03, 0x61, 0x7c, 0x91, 0x4b, 0x6d, 0xd3, 0xfc, 0x2a, 0x57, 0xdb, 0x29, 0xa0, 0xe9, 0x30,
+	0x2d, 0x35, 0x63, 0xab, 0xdb, 0xd4, 0xb2, 0xc2, 0xec, 0x44, 0x84, 0xf4, 0x4c, 0x87, 0xf5, 0x86,
+	0x21, 0xbd, 0x6e, 0xb3, 0x27, 0x42, 0x7e, 0xcb, 0xab, 0xe9, 0xbb, 0x61, 0x98, 0x0e, 0x33, 0x8c,
+	0x61, 0x90, 0x61, 0x74, 0x9b, 0x86, 0x21, 0xc2, 0xf6, 0xe7, 0x12, 0x9e, 0xcd, 0xbf, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0xbd, 0x74, 0x69, 0xdf, 0xe8, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupAdLabelServiceClient is the client API for AdGroupAdLabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAdLabelServiceClient interface {
+	// Returns the requested ad group ad label in full detail.
+	GetAdGroupAdLabel(ctx context.Context, in *GetAdGroupAdLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupAdLabel, error)
+	// Creates and removes ad group ad labels.
+	// Operation statuses are returned.
+	MutateAdGroupAdLabels(ctx context.Context, in *MutateAdGroupAdLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdLabelsResponse, error)
+}
+
+type adGroupAdLabelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupAdLabelServiceClient(cc grpc.ClientConnInterface) AdGroupAdLabelServiceClient {
+	return &adGroupAdLabelServiceClient{cc}
+}
+
+func (c *adGroupAdLabelServiceClient) GetAdGroupAdLabel(ctx context.Context, in *GetAdGroupAdLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupAdLabel, error) {
+	out := new(resources.AdGroupAdLabel)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAdLabelService/GetAdGroupAdLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupAdLabelServiceClient) MutateAdGroupAdLabels(ctx context.Context, in *MutateAdGroupAdLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdLabelsResponse, error) {
+	out := new(MutateAdGroupAdLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAdLabelService/MutateAdGroupAdLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAdLabelServiceServer is the server API for AdGroupAdLabelService service.
+type AdGroupAdLabelServiceServer interface {
+	// Returns the requested ad group ad label in full detail.
+	GetAdGroupAdLabel(context.Context, *GetAdGroupAdLabelRequest) (*resources.AdGroupAdLabel, error)
+	// Creates and removes ad group ad labels.
+	// Operation statuses are returned.
+	MutateAdGroupAdLabels(context.Context, *MutateAdGroupAdLabelsRequest) (*MutateAdGroupAdLabelsResponse, error)
+}
+
+// UnimplementedAdGroupAdLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupAdLabelServiceServer struct {
+}
+
+func (*UnimplementedAdGroupAdLabelServiceServer) GetAdGroupAdLabel(ctx context.Context, req *GetAdGroupAdLabelRequest) (*resources.AdGroupAdLabel, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupAdLabel not implemented")
+}
+func (*UnimplementedAdGroupAdLabelServiceServer) MutateAdGroupAdLabels(ctx context.Context, req *MutateAdGroupAdLabelsRequest) (*MutateAdGroupAdLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupAdLabels not implemented")
+}
+
+func RegisterAdGroupAdLabelServiceServer(s *grpc.Server, srv AdGroupAdLabelServiceServer) {
+	s.RegisterService(&_AdGroupAdLabelService_serviceDesc, srv)
+}
+
+func _AdGroupAdLabelService_GetAdGroupAdLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAdLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdLabelServiceServer).GetAdGroupAdLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAdLabelService/GetAdGroupAdLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdLabelServiceServer).GetAdGroupAdLabel(ctx, req.(*GetAdGroupAdLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupAdLabelService_MutateAdGroupAdLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupAdLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdLabelServiceServer).MutateAdGroupAdLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAdLabelService/MutateAdGroupAdLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdLabelServiceServer).MutateAdGroupAdLabels(ctx, req.(*MutateAdGroupAdLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAdLabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupAdLabelService",
+	HandlerType: (*AdGroupAdLabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAdLabel",
+			Handler:    _AdGroupAdLabelService_GetAdGroupAdLabel_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupAdLabels",
+			Handler:    _AdGroupAdLabelService_MutateAdGroupAdLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_ad_label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_ad_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_ad_service.pb.go
new file mode 100644
index 0000000..bc4375a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_ad_service.pb.go
@@ -0,0 +1,542 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_ad_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupAdService.GetAdGroupAd][google.ads.googleads.v3.services.AdGroupAdService.GetAdGroupAd].
+type GetAdGroupAdRequest struct {
+	// Required. The resource name of the ad to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAdRequest) Reset()         { *m = GetAdGroupAdRequest{} }
+func (m *GetAdGroupAdRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAdRequest) ProtoMessage()    {}
+func (*GetAdGroupAdRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aa65a543bdddcd6, []int{0}
+}
+
+func (m *GetAdGroupAdRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAdRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAdRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupAdRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAdRequest.Merge(m, src)
+}
+func (m *GetAdGroupAdRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAdRequest.Size(m)
+}
+func (m *GetAdGroupAdRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAdRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAdRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAdRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupAdService.MutateAdGroupAds][google.ads.googleads.v3.services.AdGroupAdService.MutateAdGroupAds].
+type MutateAdGroupAdsRequest struct {
+	// Required. The ID of the customer whose ads are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ads.
+	Operations []*AdGroupAdOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupAdsRequest) Reset()         { *m = MutateAdGroupAdsRequest{} }
+func (m *MutateAdGroupAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdsRequest) ProtoMessage()    {}
+func (*MutateAdGroupAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aa65a543bdddcd6, []int{1}
+}
+
+func (m *MutateAdGroupAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Size(m)
+}
+func (m *MutateAdGroupAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupAdsRequest) GetOperations() []*AdGroupAdOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupAdsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupAdsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an ad group ad.
+type AdGroupAdOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// Configuration for how policies are validated.
+	PolicyValidationParameter *common.PolicyValidationParameter `protobuf:"bytes,5,opt,name=policy_validation_parameter,json=policyValidationParameter,proto3" json:"policy_validation_parameter,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupAdOperation_Create
+	//	*AdGroupAdOperation_Update
+	//	*AdGroupAdOperation_Remove
+	Operation            isAdGroupAdOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *AdGroupAdOperation) Reset()         { *m = AdGroupAdOperation{} }
+func (m *AdGroupAdOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdOperation) ProtoMessage()    {}
+func (*AdGroupAdOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aa65a543bdddcd6, []int{2}
+}
+
+func (m *AdGroupAdOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdOperation.Unmarshal(m, b)
+}
+func (m *AdGroupAdOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupAdOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdOperation.Merge(m, src)
+}
+func (m *AdGroupAdOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdOperation.Size(m)
+}
+func (m *AdGroupAdOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdOperation proto.InternalMessageInfo
+
+func (m *AdGroupAdOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetPolicyValidationParameter() *common.PolicyValidationParameter {
+	if m != nil {
+		return m.PolicyValidationParameter
+	}
+	return nil
+}
+
+type isAdGroupAdOperation_Operation interface {
+	isAdGroupAdOperation_Operation()
+}
+
+type AdGroupAdOperation_Create struct {
+	Create *resources.AdGroupAd `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupAdOperation_Update struct {
+	Update *resources.AdGroupAd `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupAdOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupAdOperation_Create) isAdGroupAdOperation_Operation() {}
+
+func (*AdGroupAdOperation_Update) isAdGroupAdOperation_Operation() {}
+
+func (*AdGroupAdOperation_Remove) isAdGroupAdOperation_Operation() {}
+
+func (m *AdGroupAdOperation) GetOperation() isAdGroupAdOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetCreate() *resources.AdGroupAd {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetUpdate() *resources.AdGroupAd {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupAdOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupAdOperation_Create)(nil),
+		(*AdGroupAdOperation_Update)(nil),
+		(*AdGroupAdOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group ad mutate.
+type MutateAdGroupAdsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupAdResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateAdGroupAdsResponse) Reset()         { *m = MutateAdGroupAdsResponse{} }
+func (m *MutateAdGroupAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdsResponse) ProtoMessage()    {}
+func (*MutateAdGroupAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aa65a543bdddcd6, []int{3}
+}
+
+func (m *MutateAdGroupAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Size(m)
+}
+func (m *MutateAdGroupAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupAdsResponse) GetResults() []*MutateAdGroupAdResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad mutate.
+type MutateAdGroupAdResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupAdResult) Reset()         { *m = MutateAdGroupAdResult{} }
+func (m *MutateAdGroupAdResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdResult) ProtoMessage()    {}
+func (*MutateAdGroupAdResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aa65a543bdddcd6, []int{4}
+}
+
+func (m *MutateAdGroupAdResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupAdResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdResult.Merge(m, src)
+}
+func (m *MutateAdGroupAdResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdResult.Size(m)
+}
+func (m *MutateAdGroupAdResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAdRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupAdRequest")
+	proto.RegisterType((*MutateAdGroupAdsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdsRequest")
+	proto.RegisterType((*AdGroupAdOperation)(nil), "google.ads.googleads.v3.services.AdGroupAdOperation")
+	proto.RegisterType((*MutateAdGroupAdsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdsResponse")
+	proto.RegisterType((*MutateAdGroupAdResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupAdResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_ad_service.proto", fileDescriptor_9aa65a543bdddcd6)
+}
+
+var fileDescriptor_9aa65a543bdddcd6 = []byte{
+	// 817 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6b, 0xe3, 0x46,
+	0x14, 0xaf, 0xec, 0x36, 0x6d, 0xc6, 0x49, 0x1b, 0x26, 0xa4, 0x51, 0x9d, 0x42, 0x8d, 0x1a, 0xa8,
+	0x71, 0x83, 0x04, 0x76, 0x4a, 0x89, 0xd2, 0x50, 0x64, 0xda, 0x38, 0x3d, 0xa4, 0x71, 0x15, 0x30,
+	0xb4, 0x18, 0xc4, 0x44, 0x9a, 0xb8, 0x22, 0x92, 0x46, 0x3b, 0x33, 0x32, 0x98, 0x90, 0xcb, 0xee,
+	0x47, 0xd8, 0x6f, 0xb0, 0xc7, 0xbd, 0xef, 0x61, 0xbf, 0x42, 0xd8, 0xdb, 0xde, 0x72, 0x58, 0xf6,
+	0xb0, 0x87, 0x65, 0x3f, 0xc3, 0x1e, 0x16, 0x69, 0x34, 0xf2, 0x9f, 0xc4, 0x98, 0xe4, 0xf6, 0x34,
+	0xef, 0xf7, 0xfb, 0xbd, 0xf7, 0xe6, 0xbd, 0x37, 0x02, 0xe6, 0x80, 0x90, 0x41, 0x80, 0x0d, 0xe4,
+	0x31, 0x43, 0x98, 0xa9, 0x35, 0x6c, 0x19, 0x0c, 0xd3, 0xa1, 0xef, 0x62, 0x66, 0x20, 0xcf, 0x19,
+	0x50, 0x92, 0xc4, 0x0e, 0xf2, 0x9c, 0xfc, 0x50, 0x8f, 0x29, 0xe1, 0x04, 0xd6, 0x04, 0x41, 0x47,
+	0x1e, 0xd3, 0x0b, 0xae, 0x3e, 0x6c, 0xe9, 0x92, 0x5b, 0xfd, 0x79, 0x9e, 0xba, 0x4b, 0xc2, 0x90,
+	0x44, 0x46, 0x4c, 0x02, 0xdf, 0x1d, 0x09, 0xb9, 0x6a, 0x6b, 0x1e, 0x98, 0x62, 0x46, 0x12, 0x3a,
+	0x93, 0x4b, 0x4e, 0xfa, 0x5e, 0x92, 0x62, 0xdf, 0x40, 0x51, 0x44, 0x38, 0xe2, 0x3e, 0x89, 0x58,
+	0xee, 0xdd, 0x9c, 0xf0, 0xba, 0x81, 0x8f, 0x23, 0x9e, 0x3b, 0x7e, 0x98, 0x70, 0x9c, 0xfb, 0x38,
+	0xf0, 0x9c, 0x33, 0xfc, 0x3f, 0x1a, 0xfa, 0x84, 0xe6, 0x80, 0xbc, 0x36, 0x23, 0xfb, 0x3a, 0x4b,
+	0xce, 0x73, 0x54, 0x88, 0xd8, 0xc5, 0x8c, 0x36, 0x8d, 0x5d, 0x83, 0x71, 0xc4, 0x93, 0x3c, 0xa8,
+	0xf6, 0x3b, 0x58, 0xef, 0x60, 0x6e, 0x79, 0x9d, 0x34, 0x53, 0xcb, 0xb3, 0xf1, 0xa3, 0x04, 0x33,
+	0x0e, 0xeb, 0x60, 0x55, 0x16, 0xe2, 0x44, 0x28, 0xc4, 0xaa, 0x52, 0x53, 0xea, 0xcb, 0xed, 0xf2,
+	0x5b, 0xab, 0x64, 0xaf, 0x48, 0xcf, 0xdf, 0x28, 0xc4, 0xda, 0x7b, 0x05, 0x6c, 0x1e, 0x27, 0x1c,
+	0x71, 0x5c, 0x88, 0x30, 0xa9, 0xb2, 0x0d, 0x2a, 0x6e, 0xc2, 0x38, 0x09, 0x31, 0x75, 0x7c, 0x6f,
+	0x52, 0x03, 0xc8, 0xf3, 0xbf, 0x3c, 0xf8, 0x2f, 0x00, 0x24, 0xc6, 0x54, 0xdc, 0x85, 0x5a, 0xaa,
+	0x95, 0xeb, 0x95, 0xe6, 0xae, 0xbe, 0xa8, 0x5d, 0x7a, 0x11, 0xee, 0x44, 0x92, 0x73, 0xe9, 0xb1,
+	0x18, 0xfc, 0x09, 0x7c, 0x13, 0x23, 0xca, 0x7d, 0x14, 0x38, 0xe7, 0xc8, 0x0f, 0x12, 0x8a, 0xd5,
+	0x72, 0x4d, 0xa9, 0x7f, 0x65, 0x7f, 0x9d, 0x1f, 0x1f, 0x8a, 0x53, 0xf8, 0x23, 0x58, 0x1d, 0xa2,
+	0xc0, 0xf7, 0x10, 0xc7, 0x0e, 0x89, 0x82, 0x91, 0xfa, 0x79, 0x06, 0x5b, 0x91, 0x87, 0x27, 0x51,
+	0x30, 0xd2, 0x9e, 0x94, 0x01, 0xbc, 0x1d, 0x15, 0xee, 0x83, 0x4a, 0x12, 0x67, 0xcc, 0xf4, 0xc2,
+	0x33, 0x66, 0xa5, 0x59, 0x95, 0x05, 0xc8, 0x9e, 0xe8, 0x87, 0x69, 0x4f, 0x8e, 0x11, 0xbb, 0xb0,
+	0x81, 0x80, 0xa7, 0x36, 0x1c, 0x81, 0x2d, 0x31, 0x57, 0x4e, 0x1e, 0xca, 0x27, 0x91, 0x13, 0x23,
+	0x8a, 0x42, 0xcc, 0x31, 0x55, 0xbf, 0xc8, 0xc4, 0xf6, 0xe6, 0xde, 0x86, 0x18, 0x4d, 0xbd, 0x9b,
+	0x49, 0xf4, 0x0a, 0x85, 0xae, 0x14, 0xb0, 0xbf, 0x8b, 0xe7, 0xb9, 0xe0, 0x21, 0x58, 0x72, 0x29,
+	0x46, 0x5c, 0x34, 0xb7, 0xd2, 0xdc, 0x99, 0x1b, 0xa5, 0x98, 0xe9, 0xf1, 0xa5, 0x1f, 0x7d, 0x66,
+	0xe7, 0xec, 0x54, 0x47, 0x14, 0xa4, 0x96, 0x1e, 0xa6, 0x23, 0xd8, 0x50, 0x05, 0x4b, 0x14, 0x87,
+	0x64, 0x28, 0x7a, 0xb4, 0x9c, 0x7a, 0xc4, 0x77, 0xbb, 0x02, 0x96, 0x8b, 0xa6, 0x6a, 0x2f, 0x14,
+	0xa0, 0xde, 0x1e, 0x38, 0x16, 0x93, 0x88, 0xa5, 0xb9, 0x6c, 0xcc, 0x34, 0xdc, 0xc1, 0x94, 0x12,
+	0x9a, 0x49, 0x56, 0x9a, 0x50, 0xa6, 0x46, 0x63, 0x57, 0x3f, 0xcd, 0xf6, 0xc0, 0x5e, 0x9f, 0x1e,
+	0x85, 0x3f, 0x53, 0x38, 0xfc, 0x07, 0x7c, 0x49, 0x31, 0x4b, 0x02, 0x2e, 0x07, 0xf2, 0xd7, 0xc5,
+	0x03, 0x39, 0x93, 0x94, 0x9d, 0xf1, 0x6d, 0xa9, 0xa3, 0xfd, 0x06, 0x36, 0xee, 0x44, 0xa4, 0xb3,
+	0x77, 0xc7, 0xae, 0x4d, 0xaf, 0x59, 0xf3, 0x55, 0x19, 0xac, 0x15, 0xc4, 0x53, 0x11, 0x12, 0xbe,
+	0x54, 0xc0, 0xca, 0xe4, 0xf6, 0xc2, 0x5f, 0x16, 0x67, 0x79, 0xc7, 0xb6, 0x57, 0xef, 0xd5, 0x31,
+	0xed, 0x8f, 0x1b, 0x6b, 0x3a, 0xe1, 0xc7, 0xaf, 0xdf, 0x3d, 0x2d, 0xe9, 0x70, 0x27, 0x7d, 0xfe,
+	0x2e, 0xa7, 0x3c, 0x07, 0x72, 0xcd, 0x99, 0xd1, 0x30, 0x50, 0xd1, 0x2e, 0xa3, 0x71, 0x05, 0xdf,
+	0x28, 0x60, 0x6d, 0xb6, 0x8d, 0x70, 0xef, 0xde, 0xb7, 0x2c, 0xdf, 0x9a, 0xaa, 0xf9, 0x10, 0xaa,
+	0x98, 0x1a, 0xed, 0xf4, 0xc6, 0xfa, 0x76, 0xe2, 0xa1, 0xda, 0x19, 0xbf, 0x20, 0x59, 0x69, 0xbb,
+	0x9a, 0x91, 0xfd, 0x06, 0x8a, 0x5a, 0x2e, 0x27, 0xc0, 0x07, 0x8d, 0xab, 0x89, 0xca, 0xcc, 0x30,
+	0x8b, 0x61, 0x2a, 0x8d, 0xea, 0xd6, 0xb5, 0xa5, 0x8e, 0xf3, 0xc8, 0xad, 0xd8, 0x67, 0xe9, 0xce,
+	0xb6, 0x3f, 0x2a, 0x60, 0xdb, 0x25, 0xe1, 0xc2, 0x9c, 0xdb, 0x1b, 0xb3, 0x4d, 0xef, 0xa6, 0xef,
+	0x49, 0x57, 0xf9, 0xef, 0x28, 0xa7, 0x0e, 0x48, 0x80, 0xa2, 0x81, 0x4e, 0xe8, 0xc0, 0x18, 0xe0,
+	0x28, 0x7b, 0x6d, 0x8c, 0x71, 0xb0, 0xf9, 0xbf, 0xca, 0x7d, 0x69, 0x3c, 0x2b, 0x95, 0x3b, 0x96,
+	0xf5, 0xbc, 0x54, 0xeb, 0x08, 0x41, 0xcb, 0x63, 0xba, 0x30, 0x53, 0xab, 0xd7, 0xd2, 0xf3, 0xc0,
+	0xec, 0x5a, 0x42, 0xfa, 0x96, 0xc7, 0xfa, 0x05, 0xa4, 0xdf, 0x6b, 0xf5, 0x25, 0xe4, 0x43, 0x69,
+	0x5b, 0x9c, 0x9b, 0x66, 0x7a, 0x19, 0x66, 0x01, 0x32, 0xcd, 0x5e, 0xcb, 0x34, 0x25, 0xec, 0x6c,
+	0x29, 0xcb, 0xb3, 0xf5, 0x29, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xba, 0x81, 0xa5, 0xd1, 0x07, 0x00,
+	0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupAdServiceClient is the client API for AdGroupAdService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAdServiceClient interface {
+	// Returns the requested ad in full detail.
+	GetAdGroupAd(ctx context.Context, in *GetAdGroupAdRequest, opts ...grpc.CallOption) (*resources.AdGroupAd, error)
+	// Creates, updates, or removes ads. Operation statuses are returned.
+	MutateAdGroupAds(ctx context.Context, in *MutateAdGroupAdsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdsResponse, error)
+}
+
+type adGroupAdServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupAdServiceClient(cc grpc.ClientConnInterface) AdGroupAdServiceClient {
+	return &adGroupAdServiceClient{cc}
+}
+
+func (c *adGroupAdServiceClient) GetAdGroupAd(ctx context.Context, in *GetAdGroupAdRequest, opts ...grpc.CallOption) (*resources.AdGroupAd, error) {
+	out := new(resources.AdGroupAd)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAdService/GetAdGroupAd", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupAdServiceClient) MutateAdGroupAds(ctx context.Context, in *MutateAdGroupAdsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdsResponse, error) {
+	out := new(MutateAdGroupAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAdService/MutateAdGroupAds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAdServiceServer is the server API for AdGroupAdService service.
+type AdGroupAdServiceServer interface {
+	// Returns the requested ad in full detail.
+	GetAdGroupAd(context.Context, *GetAdGroupAdRequest) (*resources.AdGroupAd, error)
+	// Creates, updates, or removes ads. Operation statuses are returned.
+	MutateAdGroupAds(context.Context, *MutateAdGroupAdsRequest) (*MutateAdGroupAdsResponse, error)
+}
+
+// UnimplementedAdGroupAdServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupAdServiceServer struct {
+}
+
+func (*UnimplementedAdGroupAdServiceServer) GetAdGroupAd(ctx context.Context, req *GetAdGroupAdRequest) (*resources.AdGroupAd, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupAd not implemented")
+}
+func (*UnimplementedAdGroupAdServiceServer) MutateAdGroupAds(ctx context.Context, req *MutateAdGroupAdsRequest) (*MutateAdGroupAdsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupAds not implemented")
+}
+
+func RegisterAdGroupAdServiceServer(s *grpc.Server, srv AdGroupAdServiceServer) {
+	s.RegisterService(&_AdGroupAdService_serviceDesc, srv)
+}
+
+func _AdGroupAdService_GetAdGroupAd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAdRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdServiceServer).GetAdGroupAd(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAdService/GetAdGroupAd",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdServiceServer).GetAdGroupAd(ctx, req.(*GetAdGroupAdRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupAdService_MutateAdGroupAds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdServiceServer).MutateAdGroupAds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAdService/MutateAdGroupAds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdServiceServer).MutateAdGroupAds(ctx, req.(*MutateAdGroupAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAdService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupAdService",
+	HandlerType: (*AdGroupAdServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAd",
+			Handler:    _AdGroupAdService_GetAdGroupAd_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupAds",
+			Handler:    _AdGroupAdService_MutateAdGroupAds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_ad_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_audience_view_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_audience_view_service.pb.go
new file mode 100644
index 0000000..590d339
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_audience_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_audience_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupAudienceViewService.GetAdGoupAudienceView][].
+type GetAdGroupAudienceViewRequest struct {
+	// Required. The resource name of the ad group audience view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAudienceViewRequest) Reset()         { *m = GetAdGroupAudienceViewRequest{} }
+func (m *GetAdGroupAudienceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAudienceViewRequest) ProtoMessage()    {}
+func (*GetAdGroupAudienceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_88c843f8d448d38a, []int{0}
+}
+
+func (m *GetAdGroupAudienceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAudienceViewRequest.Merge(m, src)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Size(m)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAudienceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAudienceViewRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAudienceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAudienceViewRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupAudienceViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_audience_view_service.proto", fileDescriptor_88c843f8d448d38a)
+}
+
+var fileDescriptor_88c843f8d448d38a = []byte{
+	// 423 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xb1, 0x8a, 0xd5, 0x40,
+	0x14, 0x25, 0x59, 0x10, 0x0c, 0xda, 0xa4, 0xd0, 0x25, 0x2a, 0xfb, 0x58, 0xb6, 0x58, 0xb6, 0x98,
+	0x01, 0x03, 0x8b, 0x8c, 0xa8, 0xcc, 0x03, 0x89, 0x36, 0xcb, 0xb2, 0x42, 0x0a, 0x09, 0x84, 0xd9,
+	0xcc, 0x35, 0x0e, 0x24, 0x33, 0x71, 0x26, 0xc9, 0x16, 0x62, 0x63, 0xe1, 0x0f, 0x58, 0xdb, 0x58,
+	0xfa, 0x29, 0xdb, 0xda, 0x59, 0x29, 0x58, 0xf9, 0x15, 0x92, 0x9d, 0x4c, 0xf6, 0x3d, 0x7c, 0xf1,
+	0x75, 0x87, 0x9c, 0x73, 0xcf, 0xb9, 0x73, 0x6e, 0x82, 0xe7, 0xa5, 0x52, 0x65, 0x05, 0x98, 0x71,
+	0x83, 0x2d, 0x1c, 0x50, 0x1f, 0x63, 0x03, 0xba, 0x17, 0x05, 0x18, 0xcc, 0x78, 0x5e, 0x6a, 0xd5,
+	0x35, 0x39, 0xeb, 0xb8, 0x00, 0x59, 0x40, 0xde, 0x0b, 0xb8, 0xc8, 0x47, 0x1e, 0x35, 0x5a, 0xb5,
+	0x2a, 0x5c, 0xd8, 0x59, 0xc4, 0xb8, 0x41, 0x93, 0x0d, 0xea, 0x63, 0xe4, 0x6c, 0xa2, 0xa7, 0x73,
+	0x41, 0x1a, 0x8c, 0xea, 0xf4, 0x7c, 0x92, 0x4d, 0x88, 0xee, 0xbb, 0xf9, 0x46, 0x60, 0x26, 0xa5,
+	0x6a, 0x59, 0x2b, 0x94, 0x34, 0x23, 0x7b, 0x77, 0x85, 0x2d, 0x2a, 0x01, 0xb2, 0x1d, 0x89, 0xbd,
+	0x15, 0xe2, 0x8d, 0x80, 0x8a, 0xe7, 0xe7, 0xf0, 0x96, 0xf5, 0x42, 0x69, 0x2b, 0xd8, 0x7f, 0x19,
+	0x3c, 0x48, 0xa0, 0xa5, 0x3c, 0x19, 0x92, 0xe9, 0x18, 0x9c, 0x0a, 0xb8, 0x38, 0x83, 0x77, 0x1d,
+	0x98, 0x36, 0x3c, 0x0c, 0x6e, 0xbb, 0x15, 0x73, 0xc9, 0x6a, 0xd8, 0xf5, 0x16, 0xde, 0xe1, 0xcd,
+	0xe5, 0xce, 0x4f, 0xea, 0x9f, 0xdd, 0x72, 0xcc, 0x09, 0xab, 0xe1, 0xe1, 0x17, 0x3f, 0x88, 0x36,
+	0x18, 0xbd, 0xb2, 0x15, 0x84, 0xbf, 0xbc, 0xe0, 0xce, 0xe6, 0xa8, 0xf0, 0x19, 0xda, 0xd6, 0x1f,
+	0xfa, 0xef, 0x92, 0xd1, 0xf1, 0xac, 0xc1, 0x54, 0x2f, 0xda, 0x30, 0xbe, 0x7f, 0xf2, 0x83, 0xae,
+	0xbf, 0xee, 0xe3, 0xf7, 0xdf, 0x9f, 0xfd, 0x47, 0xe1, 0xf1, 0x70, 0x99, 0xf7, 0x6b, 0xcc, 0x93,
+	0xa2, 0x33, 0xad, 0xaa, 0x41, 0x1b, 0x7c, 0x84, 0xd9, 0xbf, 0x5e, 0x06, 0x1f, 0x7d, 0x88, 0xee,
+	0x5d, 0xd2, 0xdd, 0xeb, 0xf8, 0x11, 0x35, 0xc2, 0xa0, 0x42, 0xd5, 0xcb, 0x4f, 0x7e, 0x70, 0x50,
+	0xa8, 0x7a, 0xeb, 0x5b, 0x97, 0x7b, 0xf3, 0x2d, 0x9e, 0x0e, 0x47, 0x3b, 0xf5, 0x5e, 0xbf, 0x18,
+	0x4d, 0x4a, 0x55, 0x31, 0x59, 0x22, 0xa5, 0x4b, 0x5c, 0x82, 0xbc, 0x3a, 0x29, 0xbe, 0x8e, 0x9d,
+	0xff, 0xad, 0x1f, 0x3b, 0xf0, 0xd5, 0xdf, 0x49, 0x28, 0xfd, 0xe6, 0x2f, 0x12, 0x6b, 0x48, 0xb9,
+	0x41, 0x16, 0x0e, 0x28, 0x8d, 0xd1, 0x18, 0x6c, 0x2e, 0x9d, 0x24, 0xa3, 0xdc, 0x64, 0x93, 0x24,
+	0x4b, 0xe3, 0xcc, 0x49, 0xfe, 0xf8, 0x07, 0xf6, 0x3b, 0x21, 0x94, 0x1b, 0x42, 0x26, 0x11, 0x21,
+	0x69, 0x4c, 0x88, 0x93, 0x9d, 0xdf, 0xb8, 0xda, 0x33, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc0,
+	0x2d, 0x4d, 0x1d, 0x7d, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupAudienceViewServiceClient is the client API for AdGroupAudienceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAudienceViewServiceClient interface {
+	// Returns the requested ad group audience view in full detail.
+	GetAdGroupAudienceView(ctx context.Context, in *GetAdGroupAudienceViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAudienceView, error)
+}
+
+type adGroupAudienceViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupAudienceViewServiceClient(cc grpc.ClientConnInterface) AdGroupAudienceViewServiceClient {
+	return &adGroupAudienceViewServiceClient{cc}
+}
+
+func (c *adGroupAudienceViewServiceClient) GetAdGroupAudienceView(ctx context.Context, in *GetAdGroupAudienceViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAudienceView, error) {
+	out := new(resources.AdGroupAudienceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupAudienceViewService/GetAdGroupAudienceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAudienceViewServiceServer is the server API for AdGroupAudienceViewService service.
+type AdGroupAudienceViewServiceServer interface {
+	// Returns the requested ad group audience view in full detail.
+	GetAdGroupAudienceView(context.Context, *GetAdGroupAudienceViewRequest) (*resources.AdGroupAudienceView, error)
+}
+
+// UnimplementedAdGroupAudienceViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupAudienceViewServiceServer struct {
+}
+
+func (*UnimplementedAdGroupAudienceViewServiceServer) GetAdGroupAudienceView(ctx context.Context, req *GetAdGroupAudienceViewRequest) (*resources.AdGroupAudienceView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAdGroupAudienceView not implemented")
+}
+
+func RegisterAdGroupAudienceViewServiceServer(s *grpc.Server, srv AdGroupAudienceViewServiceServer) {
+	s.RegisterService(&_AdGroupAudienceViewService_serviceDesc, srv)
+}
+
+func _AdGroupAudienceViewService_GetAdGroupAudienceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAudienceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAudienceViewServiceServer).GetAdGroupAudienceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupAudienceViewService/GetAdGroupAudienceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAudienceViewServiceServer).GetAdGroupAudienceView(ctx, req.(*GetAdGroupAudienceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAudienceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupAudienceViewService",
+	HandlerType: (*AdGroupAudienceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAudienceView",
+			Handler:    _AdGroupAudienceViewService_GetAdGroupAudienceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_audience_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_bid_modifier_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_bid_modifier_service.pb.go
new file mode 100644
index 0000000..12cf7f2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_bid_modifier_service.pb.go
@@ -0,0 +1,531 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_bid_modifier_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupBidModifierService.GetAdGroupBidModifier][google.ads.googleads.v3.services.AdGroupBidModifierService.GetAdGroupBidModifier].
+type GetAdGroupBidModifierRequest struct {
+	// Required. The resource name of the ad group bid modifier to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupBidModifierRequest) Reset()         { *m = GetAdGroupBidModifierRequest{} }
+func (m *GetAdGroupBidModifierRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupBidModifierRequest) ProtoMessage()    {}
+func (*GetAdGroupBidModifierRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6e83475391d628e3, []int{0}
+}
+
+func (m *GetAdGroupBidModifierRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupBidModifierRequest.Merge(m, src)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Size(m)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupBidModifierRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupBidModifierRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupBidModifierRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupBidModifierService.MutateAdGroupBidModifiers][google.ads.googleads.v3.services.AdGroupBidModifierService.MutateAdGroupBidModifiers].
+type MutateAdGroupBidModifiersRequest struct {
+	// Required. ID of the customer whose ad group bid modifiers are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ad group bid modifiers.
+	Operations []*AdGroupBidModifierOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifiersRequest) Reset()         { *m = MutateAdGroupBidModifiersRequest{} }
+func (m *MutateAdGroupBidModifiersRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifiersRequest) ProtoMessage()    {}
+func (*MutateAdGroupBidModifiersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6e83475391d628e3, []int{1}
+}
+
+func (m *MutateAdGroupBidModifiersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifiersRequest.Merge(m, src)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Size(m)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifiersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifiersRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifiersRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupBidModifiersRequest) GetOperations() []*AdGroupBidModifierOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupBidModifiersRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupBidModifiersRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove, update) on an ad group bid modifier.
+type AdGroupBidModifierOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupBidModifierOperation_Create
+	//	*AdGroupBidModifierOperation_Update
+	//	*AdGroupBidModifierOperation_Remove
+	Operation            isAdGroupBidModifierOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *AdGroupBidModifierOperation) Reset()         { *m = AdGroupBidModifierOperation{} }
+func (m *AdGroupBidModifierOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifierOperation) ProtoMessage()    {}
+func (*AdGroupBidModifierOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6e83475391d628e3, []int{2}
+}
+
+func (m *AdGroupBidModifierOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifierOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupBidModifierOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifierOperation.Merge(m, src)
+}
+func (m *AdGroupBidModifierOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Size(m)
+}
+func (m *AdGroupBidModifierOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifierOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifierOperation proto.InternalMessageInfo
+
+func (m *AdGroupBidModifierOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupBidModifierOperation_Operation interface {
+	isAdGroupBidModifierOperation_Operation()
+}
+
+type AdGroupBidModifierOperation_Create struct {
+	Create *resources.AdGroupBidModifier `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupBidModifierOperation_Update struct {
+	Update *resources.AdGroupBidModifier `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupBidModifierOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupBidModifierOperation_Create) isAdGroupBidModifierOperation_Operation() {}
+
+func (*AdGroupBidModifierOperation_Update) isAdGroupBidModifierOperation_Operation() {}
+
+func (*AdGroupBidModifierOperation_Remove) isAdGroupBidModifierOperation_Operation() {}
+
+func (m *AdGroupBidModifierOperation) GetOperation() isAdGroupBidModifierOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetCreate() *resources.AdGroupBidModifier {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetUpdate() *resources.AdGroupBidModifier {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupBidModifierOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupBidModifierOperation_Create)(nil),
+		(*AdGroupBidModifierOperation_Update)(nil),
+		(*AdGroupBidModifierOperation_Remove)(nil),
+	}
+}
+
+// Response message for ad group bid modifiers mutate.
+type MutateAdGroupBidModifiersResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupBidModifierResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifiersResponse) Reset()         { *m = MutateAdGroupBidModifiersResponse{} }
+func (m *MutateAdGroupBidModifiersResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifiersResponse) ProtoMessage()    {}
+func (*MutateAdGroupBidModifiersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6e83475391d628e3, []int{3}
+}
+
+func (m *MutateAdGroupBidModifiersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifiersResponse.Merge(m, src)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Size(m)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifiersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifiersResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifiersResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupBidModifiersResponse) GetResults() []*MutateAdGroupBidModifierResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateAdGroupBidModifierResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifierResult) Reset()         { *m = MutateAdGroupBidModifierResult{} }
+func (m *MutateAdGroupBidModifierResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifierResult) ProtoMessage()    {}
+func (*MutateAdGroupBidModifierResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6e83475391d628e3, []int{4}
+}
+
+func (m *MutateAdGroupBidModifierResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifierResult.Merge(m, src)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Size(m)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifierResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifierResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifierResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupBidModifierRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupBidModifierRequest")
+	proto.RegisterType((*MutateAdGroupBidModifiersRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupBidModifiersRequest")
+	proto.RegisterType((*AdGroupBidModifierOperation)(nil), "google.ads.googleads.v3.services.AdGroupBidModifierOperation")
+	proto.RegisterType((*MutateAdGroupBidModifiersResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupBidModifiersResponse")
+	proto.RegisterType((*MutateAdGroupBidModifierResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupBidModifierResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_bid_modifier_service.proto", fileDescriptor_6e83475391d628e3)
+}
+
+var fileDescriptor_6e83475391d628e3 = []byte{
+	// 778 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6b, 0xdb, 0x48,
+	0x14, 0xc7, 0x57, 0x72, 0xc8, 0x6e, 0xc6, 0xc9, 0x2e, 0xcc, 0x92, 0x5d, 0xc7, 0x09, 0x59, 0xaf,
+	0x36, 0xb0, 0xc6, 0x2c, 0x12, 0xd8, 0x84, 0x2d, 0x0a, 0x2e, 0x95, 0xdb, 0xc4, 0xe9, 0xc1, 0x4d,
+	0x50, 0x20, 0x87, 0x60, 0x10, 0x63, 0x69, 0xec, 0x8a, 0x48, 0x1a, 0x75, 0x46, 0x32, 0x84, 0x90,
+	0x4b, 0xa0, 0x7f, 0x41, 0xcf, 0xbd, 0xb4, 0xb7, 0xfe, 0x23, 0x85, 0x5c, 0x7b, 0x0b, 0x14, 0x7a,
+	0xe8, 0xa9, 0x7f, 0x42, 0x4f, 0x45, 0x1a, 0x8d, 0x7f, 0xc4, 0xbf, 0x20, 0xb9, 0x3d, 0xcf, 0xfb,
+	0xea, 0xf3, 0xde, 0x9b, 0xf7, 0xe6, 0x19, 0x3c, 0xeb, 0x11, 0xd2, 0xf3, 0xb0, 0x86, 0x1c, 0xa6,
+	0x71, 0x33, 0xb1, 0xfa, 0x35, 0x8d, 0x61, 0xda, 0x77, 0x6d, 0xcc, 0x34, 0xe4, 0x58, 0x3d, 0x4a,
+	0xe2, 0xd0, 0xea, 0xb8, 0x8e, 0xe5, 0x13, 0xc7, 0xed, 0xba, 0x98, 0x5a, 0x99, 0x5b, 0x0d, 0x29,
+	0x89, 0x08, 0x2c, 0xf1, 0x4f, 0x55, 0xe4, 0x30, 0x75, 0x40, 0x51, 0xfb, 0x35, 0x55, 0x50, 0x8a,
+	0xf5, 0x59, 0x71, 0x28, 0x66, 0x24, 0xa6, 0x33, 0x03, 0xf1, 0x00, 0xc5, 0x2d, 0xf1, 0x79, 0xe8,
+	0x6a, 0x28, 0x08, 0x48, 0x84, 0x22, 0x97, 0x04, 0x2c, 0xf3, 0xfe, 0x39, 0xe2, 0xb5, 0x3d, 0x17,
+	0x07, 0x51, 0xe6, 0xf8, 0x6b, 0xc4, 0xd1, 0x75, 0xb1, 0xe7, 0x58, 0x1d, 0xfc, 0x12, 0xf5, 0x5d,
+	0x22, 0xb8, 0x59, 0xe2, 0x5a, 0xfa, 0xab, 0x13, 0x77, 0x33, 0x95, 0x8f, 0xd8, 0xf9, 0x1d, 0x36,
+	0x0d, 0x6d, 0x8d, 0x45, 0x28, 0x8a, 0xb3, 0xa0, 0xca, 0x21, 0xd8, 0x6a, 0xe2, 0xc8, 0x70, 0x9a,
+	0x49, 0xce, 0x0d, 0xd7, 0x69, 0x65, 0x19, 0x9b, 0xf8, 0x55, 0x8c, 0x59, 0x04, 0xcb, 0x60, 0x4d,
+	0xd4, 0x66, 0x05, 0xc8, 0xc7, 0x05, 0xa9, 0x24, 0x95, 0x57, 0x1a, 0xb9, 0x2f, 0x86, 0x6c, 0xae,
+	0x0a, 0xcf, 0x0b, 0xe4, 0x63, 0xe5, 0xbb, 0x04, 0x4a, 0xad, 0x38, 0x42, 0x11, 0x9e, 0xa4, 0x31,
+	0x81, 0xdb, 0x01, 0x79, 0x3b, 0x66, 0x11, 0xf1, 0x31, 0xb5, 0x5c, 0x67, 0x14, 0x06, 0xc4, 0xf9,
+	0x73, 0x07, 0x76, 0x00, 0x20, 0x21, 0xa6, 0xfc, 0x76, 0x0a, 0x72, 0x29, 0x57, 0xce, 0x57, 0xeb,
+	0xea, 0xa2, 0xee, 0xa8, 0x93, 0x71, 0x8f, 0x04, 0x25, 0x8b, 0x31, 0xa4, 0xc2, 0x7f, 0xc1, 0x6f,
+	0x21, 0xa2, 0x91, 0x8b, 0x3c, 0xab, 0x8b, 0x5c, 0x2f, 0xa6, 0xb8, 0x90, 0x2b, 0x49, 0xe5, 0x5f,
+	0xcc, 0x5f, 0xb3, 0xe3, 0x03, 0x7e, 0x0a, 0xff, 0x01, 0x6b, 0x7d, 0xe4, 0xb9, 0x0e, 0x8a, 0xb0,
+	0x45, 0x02, 0xef, 0xa2, 0xb0, 0x94, 0xca, 0x56, 0xc5, 0xe1, 0x51, 0xe0, 0x5d, 0x28, 0xef, 0x65,
+	0xb0, 0x39, 0x27, 0x3c, 0xdc, 0x03, 0xf9, 0x38, 0x4c, 0x11, 0x49, 0x53, 0x52, 0x44, 0xbe, 0x5a,
+	0x14, 0x25, 0x89, 0xbe, 0xa9, 0x07, 0x49, 0xdf, 0x5a, 0x88, 0x9d, 0x9b, 0x80, 0xcb, 0x13, 0x1b,
+	0x1e, 0x81, 0x65, 0x9b, 0x62, 0x14, 0xf1, 0xcb, 0xcf, 0x57, 0x77, 0x67, 0x5e, 0xc5, 0x60, 0x0c,
+	0xa7, 0xdc, 0xc5, 0xe1, 0x4f, 0x66, 0x86, 0x49, 0x80, 0x1c, 0x5f, 0x90, 0x1f, 0x08, 0xe4, 0x18,
+	0x58, 0x00, 0xcb, 0x14, 0xfb, 0xa4, 0xcf, 0xef, 0x70, 0x25, 0xf1, 0xf0, 0xdf, 0x8d, 0x3c, 0x58,
+	0x19, 0x5c, 0xba, 0xf2, 0x51, 0x02, 0x7f, 0xcf, 0x19, 0x11, 0x16, 0x92, 0x80, 0x61, 0x78, 0x00,
+	0xd6, 0xef, 0x74, 0xc6, 0xc2, 0x94, 0x12, 0x9a, 0xb2, 0xf3, 0x55, 0x28, 0x92, 0xa5, 0xa1, 0xad,
+	0x9e, 0xa4, 0xb3, 0x6c, 0xfe, 0x3e, 0xde, 0xb3, 0xfd, 0x44, 0x0e, 0xcf, 0xc0, 0xcf, 0x14, 0xb3,
+	0xd8, 0x8b, 0xc4, 0x08, 0x3d, 0x59, 0x3c, 0x42, 0xb3, 0xb2, 0x33, 0x53, 0x90, 0x29, 0x80, 0xca,
+	0x3e, 0xd8, 0x9e, 0x2f, 0x4d, 0xc6, 0x66, 0xca, 0xc3, 0x19, 0x7f, 0x33, 0xd5, 0xb7, 0x4b, 0x60,
+	0x63, 0x92, 0x70, 0xc2, 0xb3, 0x81, 0x9f, 0x25, 0xb0, 0x3e, 0xf5, 0x71, 0xc2, 0xc7, 0x8b, 0x2b,
+	0x99, 0xf7, 0xaa, 0x8b, 0xf7, 0x6b, 0xb8, 0xd2, 0xba, 0x35, 0xc6, 0x8b, 0xba, 0xfe, 0xf4, 0xf5,
+	0x8d, 0xfc, 0x3f, 0xdc, 0x4d, 0x56, 0xe0, 0xe5, 0x98, 0xa7, 0x2e, 0x9e, 0x33, 0xd3, 0x2a, 0x1a,
+	0x9a, 0xec, 0xb6, 0x56, 0xb9, 0x82, 0xd7, 0x32, 0xd8, 0x98, 0x39, 0x0e, 0xb0, 0x71, 0xff, 0x6e,
+	0x89, 0x75, 0x53, 0x7c, 0xfa, 0x20, 0x06, 0x9f, 0x47, 0xa5, 0x7d, 0x6b, 0xfc, 0x31, 0xb2, 0xb4,
+	0xfe, 0x1b, 0x2e, 0x91, 0xb4, 0xfc, 0xba, 0xf2, 0x28, 0x29, 0x7f, 0x58, 0xef, 0xe5, 0x88, 0xb8,
+	0x5e, 0xb9, 0x9a, 0x56, 0xbd, 0xee, 0xa7, 0x51, 0x75, 0xa9, 0x52, 0xdc, 0xbc, 0x31, 0x0a, 0xc3,
+	0xcc, 0x32, 0x2b, 0x74, 0x99, 0x6a, 0x13, 0xbf, 0xf1, 0x5a, 0x06, 0x3b, 0x36, 0xf1, 0x17, 0x56,
+	0xd1, 0xd8, 0x9e, 0x39, 0x45, 0xc7, 0xc9, 0x6e, 0x39, 0x96, 0xce, 0x0e, 0x33, 0x46, 0x8f, 0x78,
+	0x28, 0xe8, 0xa9, 0x84, 0xf6, 0xb4, 0x1e, 0x0e, 0xd2, 0xcd, 0xa3, 0x0d, 0xa3, 0xce, 0xfe, 0x07,
+	0xdd, 0x13, 0xc6, 0x3b, 0x39, 0xd7, 0x34, 0x8c, 0x0f, 0x72, 0xa9, 0xc9, 0x81, 0x86, 0xc3, 0x54,
+	0x6e, 0x26, 0xd6, 0x69, 0x4d, 0xcd, 0x02, 0xb3, 0x1b, 0x21, 0x69, 0x1b, 0x0e, 0x6b, 0x0f, 0x24,
+	0xed, 0xd3, 0x5a, 0x5b, 0x48, 0xbe, 0xc9, 0x3b, 0xfc, 0x5c, 0xd7, 0x0d, 0x87, 0xe9, 0xfa, 0x40,
+	0xa4, 0xeb, 0xa7, 0x35, 0x5d, 0x17, 0xb2, 0xce, 0x72, 0x9a, 0x67, 0xed, 0x47, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xfb, 0xe6, 0x6b, 0x85, 0xe8, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupBidModifierServiceClient is the client API for AdGroupBidModifierService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupBidModifierServiceClient interface {
+	// Returns the requested ad group bid modifier in full detail.
+	GetAdGroupBidModifier(ctx context.Context, in *GetAdGroupBidModifierRequest, opts ...grpc.CallOption) (*resources.AdGroupBidModifier, error)
+	// Creates, updates, or removes ad group bid modifiers.
+	// Operation statuses are returned.
+	MutateAdGroupBidModifiers(ctx context.Context, in *MutateAdGroupBidModifiersRequest, opts ...grpc.CallOption) (*MutateAdGroupBidModifiersResponse, error)
+}
+
+type adGroupBidModifierServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupBidModifierServiceClient(cc grpc.ClientConnInterface) AdGroupBidModifierServiceClient {
+	return &adGroupBidModifierServiceClient{cc}
+}
+
+func (c *adGroupBidModifierServiceClient) GetAdGroupBidModifier(ctx context.Context, in *GetAdGroupBidModifierRequest, opts ...grpc.CallOption) (*resources.AdGroupBidModifier, error) {
+	out := new(resources.AdGroupBidModifier)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupBidModifierService/GetAdGroupBidModifier", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupBidModifierServiceClient) MutateAdGroupBidModifiers(ctx context.Context, in *MutateAdGroupBidModifiersRequest, opts ...grpc.CallOption) (*MutateAdGroupBidModifiersResponse, error) {
+	out := new(MutateAdGroupBidModifiersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupBidModifierService/MutateAdGroupBidModifiers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupBidModifierServiceServer is the server API for AdGroupBidModifierService service.
+type AdGroupBidModifierServiceServer interface {
+	// Returns the requested ad group bid modifier in full detail.
+	GetAdGroupBidModifier(context.Context, *GetAdGroupBidModifierRequest) (*resources.AdGroupBidModifier, error)
+	// Creates, updates, or removes ad group bid modifiers.
+	// Operation statuses are returned.
+	MutateAdGroupBidModifiers(context.Context, *MutateAdGroupBidModifiersRequest) (*MutateAdGroupBidModifiersResponse, error)
+}
+
+// UnimplementedAdGroupBidModifierServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupBidModifierServiceServer struct {
+}
+
+func (*UnimplementedAdGroupBidModifierServiceServer) GetAdGroupBidModifier(ctx context.Context, req *GetAdGroupBidModifierRequest) (*resources.AdGroupBidModifier, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupBidModifier not implemented")
+}
+func (*UnimplementedAdGroupBidModifierServiceServer) MutateAdGroupBidModifiers(ctx context.Context, req *MutateAdGroupBidModifiersRequest) (*MutateAdGroupBidModifiersResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupBidModifiers not implemented")
+}
+
+func RegisterAdGroupBidModifierServiceServer(s *grpc.Server, srv AdGroupBidModifierServiceServer) {
+	s.RegisterService(&_AdGroupBidModifierService_serviceDesc, srv)
+}
+
+func _AdGroupBidModifierService_GetAdGroupBidModifier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupBidModifierRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupBidModifierServiceServer).GetAdGroupBidModifier(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupBidModifierService/GetAdGroupBidModifier",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupBidModifierServiceServer).GetAdGroupBidModifier(ctx, req.(*GetAdGroupBidModifierRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupBidModifierService_MutateAdGroupBidModifiers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupBidModifiersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupBidModifierServiceServer).MutateAdGroupBidModifiers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupBidModifierService/MutateAdGroupBidModifiers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupBidModifierServiceServer).MutateAdGroupBidModifiers(ctx, req.(*MutateAdGroupBidModifiersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupBidModifierService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupBidModifierService",
+	HandlerType: (*AdGroupBidModifierServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupBidModifier",
+			Handler:    _AdGroupBidModifierService_GetAdGroupBidModifier_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupBidModifiers",
+			Handler:    _AdGroupBidModifierService_MutateAdGroupBidModifiers_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_bid_modifier_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_criterion_label_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_criterion_label_service.pb.go
new file mode 100644
index 0000000..c328598
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_criterion_label_service.pb.go
@@ -0,0 +1,505 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_criterion_label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [AdGroupCriterionLabelService.GetAdGroupCriterionLabel][google.ads.googleads.v3.services.AdGroupCriterionLabelService.GetAdGroupCriterionLabel].
+type GetAdGroupCriterionLabelRequest struct {
+	// Required. The resource name of the ad group criterion label to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupCriterionLabelRequest) Reset()         { *m = GetAdGroupCriterionLabelRequest{} }
+func (m *GetAdGroupCriterionLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupCriterionLabelRequest) ProtoMessage()    {}
+func (*GetAdGroupCriterionLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9d794cf6cbc5ec4, []int{0}
+}
+
+func (m *GetAdGroupCriterionLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupCriterionLabelRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupCriterionLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupCriterionLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupCriterionLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupCriterionLabelRequest.Merge(m, src)
+}
+func (m *GetAdGroupCriterionLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupCriterionLabelRequest.Size(m)
+}
+func (m *GetAdGroupCriterionLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupCriterionLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupCriterionLabelRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupCriterionLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [AdGroupCriterionLabelService.MutateAdGroupCriterionLabels][google.ads.googleads.v3.services.AdGroupCriterionLabelService.MutateAdGroupCriterionLabels].
+type MutateAdGroupCriterionLabelsRequest struct {
+	// Required. ID of the customer whose ad group criterion labels are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on ad group criterion labels.
+	Operations []*AdGroupCriterionLabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupCriterionLabelsRequest) Reset()         { *m = MutateAdGroupCriterionLabelsRequest{} }
+func (m *MutateAdGroupCriterionLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriterionLabelsRequest) ProtoMessage()    {}
+func (*MutateAdGroupCriterionLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9d794cf6cbc5ec4, []int{1}
+}
+
+func (m *MutateAdGroupCriterionLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriterionLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriterionLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriterionLabelsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupCriterionLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsRequest.Size(m)
+}
+func (m *MutateAdGroupCriterionLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriterionLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriterionLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriterionLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupCriterionLabelsRequest) GetOperations() []*AdGroupCriterionLabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupCriterionLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupCriterionLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on an ad group criterion label.
+type AdGroupCriterionLabelOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupCriterionLabelOperation_Create
+	//	*AdGroupCriterionLabelOperation_Remove
+	Operation            isAdGroupCriterionLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
+	XXX_unrecognized     []byte                                     `json:"-"`
+	XXX_sizecache        int32                                      `json:"-"`
+}
+
+func (m *AdGroupCriterionLabelOperation) Reset()         { *m = AdGroupCriterionLabelOperation{} }
+func (m *AdGroupCriterionLabelOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionLabelOperation) ProtoMessage()    {}
+func (*AdGroupCriterionLabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9d794cf6cbc5ec4, []int{2}
+}
+
+func (m *AdGroupCriterionLabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionLabelOperation.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionLabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionLabelOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionLabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionLabelOperation.Merge(m, src)
+}
+func (m *AdGroupCriterionLabelOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionLabelOperation.Size(m)
+}
+func (m *AdGroupCriterionLabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionLabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionLabelOperation proto.InternalMessageInfo
+
+type isAdGroupCriterionLabelOperation_Operation interface {
+	isAdGroupCriterionLabelOperation_Operation()
+}
+
+type AdGroupCriterionLabelOperation_Create struct {
+	Create *resources.AdGroupCriterionLabel `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupCriterionLabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupCriterionLabelOperation_Create) isAdGroupCriterionLabelOperation_Operation() {}
+
+func (*AdGroupCriterionLabelOperation_Remove) isAdGroupCriterionLabelOperation_Operation() {}
+
+func (m *AdGroupCriterionLabelOperation) GetOperation() isAdGroupCriterionLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionLabelOperation) GetCreate() *resources.AdGroupCriterionLabel {
+	if x, ok := m.GetOperation().(*AdGroupCriterionLabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionLabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupCriterionLabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupCriterionLabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupCriterionLabelOperation_Create)(nil),
+		(*AdGroupCriterionLabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group criterion labels mutate.
+type MutateAdGroupCriterionLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupCriterionLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *MutateAdGroupCriterionLabelsResponse) Reset()         { *m = MutateAdGroupCriterionLabelsResponse{} }
+func (m *MutateAdGroupCriterionLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriterionLabelsResponse) ProtoMessage()    {}
+func (*MutateAdGroupCriterionLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9d794cf6cbc5ec4, []int{3}
+}
+
+func (m *MutateAdGroupCriterionLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriterionLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriterionLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriterionLabelsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupCriterionLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelsResponse.Size(m)
+}
+func (m *MutateAdGroupCriterionLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriterionLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriterionLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriterionLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupCriterionLabelsResponse) GetResults() []*MutateAdGroupCriterionLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for an ad group criterion label mutate.
+type MutateAdGroupCriterionLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupCriterionLabelResult) Reset()         { *m = MutateAdGroupCriterionLabelResult{} }
+func (m *MutateAdGroupCriterionLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriterionLabelResult) ProtoMessage()    {}
+func (*MutateAdGroupCriterionLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f9d794cf6cbc5ec4, []int{4}
+}
+
+func (m *MutateAdGroupCriterionLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriterionLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriterionLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriterionLabelResult.Merge(m, src)
+}
+func (m *MutateAdGroupCriterionLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriterionLabelResult.Size(m)
+}
+func (m *MutateAdGroupCriterionLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriterionLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriterionLabelResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriterionLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupCriterionLabelRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupCriterionLabelRequest")
+	proto.RegisterType((*MutateAdGroupCriterionLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriterionLabelsRequest")
+	proto.RegisterType((*AdGroupCriterionLabelOperation)(nil), "google.ads.googleads.v3.services.AdGroupCriterionLabelOperation")
+	proto.RegisterType((*MutateAdGroupCriterionLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriterionLabelsResponse")
+	proto.RegisterType((*MutateAdGroupCriterionLabelResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriterionLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_criterion_label_service.proto", fileDescriptor_f9d794cf6cbc5ec4)
+}
+
+var fileDescriptor_f9d794cf6cbc5ec4 = []byte{
+	// 725 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcb, 0x6a, 0xdb, 0x4c,
+	0x14, 0xfe, 0x25, 0x87, 0xfc, 0xcd, 0x38, 0x69, 0x61, 0x4a, 0x5b, 0xe1, 0x86, 0xc6, 0x51, 0x0c,
+	0x35, 0xa6, 0x48, 0x60, 0x6f, 0x82, 0x42, 0x20, 0x72, 0x48, 0x9c, 0xd2, 0x4b, 0x82, 0x02, 0x59,
+	0x14, 0x17, 0x31, 0x96, 0x26, 0xaa, 0x40, 0xd2, 0xa8, 0x33, 0x23, 0x43, 0x08, 0x81, 0xd2, 0x55,
+	0x57, 0xdd, 0x74, 0xd9, 0x5d, 0x97, 0x7d, 0x82, 0x3e, 0x43, 0xa0, 0xab, 0xee, 0xb2, 0xea, 0xa2,
+	0x9b, 0xf6, 0x29, 0x8a, 0x2e, 0xe3, 0x4b, 0xf0, 0x05, 0x9a, 0xdd, 0xf1, 0x39, 0x9f, 0xbe, 0xf3,
+	0x9d, 0xcb, 0x1c, 0x83, 0x8e, 0x47, 0x88, 0x17, 0x60, 0x1d, 0xb9, 0x4c, 0xcf, 0xcd, 0xd4, 0xea,
+	0xb7, 0x74, 0x86, 0x69, 0xdf, 0x77, 0x30, 0xd3, 0x91, 0x6b, 0x7b, 0x94, 0x24, 0xb1, 0xed, 0x50,
+	0x9f, 0x63, 0xea, 0x93, 0xc8, 0x0e, 0x50, 0x0f, 0x07, 0x76, 0x81, 0xd0, 0x62, 0x4a, 0x38, 0x81,
+	0xd5, 0xfc, 0x6b, 0x0d, 0xb9, 0x4c, 0x1b, 0x10, 0x69, 0xfd, 0x96, 0x26, 0x88, 0x2a, 0x3b, 0xd3,
+	0x52, 0x51, 0xcc, 0x48, 0x42, 0x67, 0xe5, 0xca, 0x73, 0x54, 0x56, 0x05, 0x43, 0xec, 0xeb, 0x28,
+	0x8a, 0x08, 0x47, 0xdc, 0x27, 0x11, 0x2b, 0xa2, 0x0f, 0x46, 0xa2, 0x4e, 0xe0, 0xe3, 0x88, 0x17,
+	0x81, 0xb5, 0x91, 0xc0, 0xa9, 0x8f, 0x03, 0xd7, 0xee, 0xe1, 0x37, 0xa8, 0xef, 0x13, 0x7a, 0xed,
+	0x4b, 0x1a, 0x3b, 0x3a, 0xe3, 0x88, 0x27, 0x05, 0xa5, 0xfa, 0x0c, 0xac, 0x75, 0x30, 0x37, 0xdd,
+	0x4e, 0x2a, 0x6a, 0x57, 0x68, 0x7a, 0x9e, 0x4a, 0xb2, 0xf0, 0xdb, 0x04, 0x33, 0x0e, 0xeb, 0x60,
+	0x45, 0xe8, 0xb7, 0x23, 0x14, 0x62, 0x45, 0xaa, 0x4a, 0xf5, 0xa5, 0x76, 0xe9, 0xa7, 0x29, 0x5b,
+	0xcb, 0x22, 0xf2, 0x12, 0x85, 0x58, 0x7d, 0x27, 0x83, 0x8d, 0x17, 0x09, 0x47, 0x1c, 0x4f, 0x24,
+	0x64, 0x82, 0xb1, 0x06, 0xca, 0x4e, 0xc2, 0x38, 0x09, 0x31, 0xb5, 0x7d, 0x77, 0x94, 0x0f, 0x08,
+	0xff, 0x53, 0x17, 0x62, 0x00, 0x48, 0x8c, 0x69, 0xde, 0x01, 0x45, 0xae, 0x96, 0xea, 0xe5, 0xe6,
+	0x8e, 0x36, 0x6f, 0x08, 0xda, 0xc4, 0xd4, 0x87, 0x82, 0xa8, 0x48, 0x33, 0x24, 0x86, 0x8f, 0xc1,
+	0x9d, 0x18, 0x51, 0xee, 0xa3, 0xc0, 0x3e, 0x45, 0x7e, 0x90, 0x50, 0xac, 0x94, 0xaa, 0x52, 0xfd,
+	0x96, 0x75, 0xbb, 0x70, 0xef, 0xe7, 0x5e, 0xb8, 0x01, 0x56, 0xfa, 0x28, 0xf0, 0x5d, 0xc4, 0xb1,
+	0x4d, 0xa2, 0xe0, 0x4c, 0x59, 0xc8, 0x60, 0xcb, 0xc2, 0x79, 0x18, 0x05, 0x67, 0xea, 0x67, 0x09,
+	0x3c, 0x9a, 0xad, 0x00, 0x5a, 0x60, 0xd1, 0xa1, 0x18, 0xf1, 0xbc, 0x91, 0xe5, 0xe6, 0xe6, 0xd4,
+	0x9a, 0x06, 0x6b, 0x33, 0xb9, 0xa8, 0x83, 0xff, 0xac, 0x82, 0x09, 0x2a, 0x60, 0x91, 0xe2, 0x90,
+	0xf4, 0xb1, 0x22, 0xa7, 0xcd, 0x4c, 0x23, 0xf9, 0xef, 0x76, 0x19, 0x2c, 0x0d, 0x8a, 0x55, 0xbf,
+	0x4b, 0xa0, 0x36, 0x7b, 0x40, 0x2c, 0x26, 0x11, 0xc3, 0x70, 0x1f, 0xdc, 0xbb, 0xd6, 0x14, 0x1b,
+	0x53, 0x4a, 0x68, 0xd6, 0x9a, 0x72, 0x13, 0x0a, 0xc9, 0x34, 0x76, 0xb4, 0xe3, 0x6c, 0x9f, 0xac,
+	0xbb, 0xe3, 0xed, 0xda, 0x4b, 0xe1, 0xf0, 0x35, 0xf8, 0x9f, 0x62, 0x96, 0x04, 0x5c, 0x0c, 0x70,
+	0x77, 0xfe, 0x00, 0x67, 0x08, 0xb4, 0x32, 0x2e, 0x4b, 0x70, 0xaa, 0x07, 0x60, 0x7d, 0x2e, 0x3a,
+	0x9d, 0xdb, 0x84, 0xfd, 0x1d, 0x5f, 0xdd, 0xe6, 0xb7, 0x05, 0xb0, 0x3a, 0x91, 0xe4, 0x38, 0x97,
+	0x05, 0x7f, 0x4b, 0x40, 0x99, 0xf6, 0x52, 0xa0, 0x39, 0xbf, 0xaa, 0x39, 0xaf, 0xac, 0xf2, 0xcf,
+	0x5b, 0xa0, 0x1e, 0x5d, 0x99, 0xe3, 0x05, 0xbe, 0xff, 0xf1, 0xeb, 0x93, 0x6c, 0xc0, 0xcd, 0xf4,
+	0xf2, 0x9c, 0x8f, 0x45, 0xb6, 0xc5, 0xf3, 0x62, 0x7a, 0x43, 0x47, 0x13, 0x57, 0x40, 0x6f, 0x5c,
+	0xc0, 0x8f, 0x32, 0x58, 0x9d, 0xb5, 0x26, 0x70, 0xef, 0x46, 0x53, 0x14, 0x77, 0xa0, 0xb2, 0x7f,
+	0x53, 0x9a, 0x7c, 0x5b, 0x55, 0xfb, 0xca, 0xbc, 0x3f, 0x72, 0x50, 0x9e, 0x0c, 0x5f, 0x77, 0xd6,
+	0x8a, 0x1d, 0x75, 0x2b, 0x6d, 0xc5, 0xb0, 0xf6, 0xf3, 0x11, 0xf0, 0x76, 0xe3, 0x62, 0x4a, 0x27,
+	0x8c, 0x30, 0xcb, 0x6d, 0x48, 0x8d, 0xca, 0xc3, 0x4b, 0x53, 0x19, 0xea, 0x2b, 0xac, 0xd8, 0x67,
+	0x9a, 0x43, 0xc2, 0xf6, 0x07, 0x19, 0xd4, 0x1c, 0x12, 0xce, 0xad, 0xa5, 0xbd, 0x3e, 0x6b, 0xc1,
+	0x8e, 0xd2, 0x73, 0x7c, 0x24, 0xbd, 0x3a, 0x28, 0x68, 0x3c, 0x12, 0xa0, 0xc8, 0xd3, 0x08, 0xf5,
+	0x74, 0x0f, 0x47, 0xd9, 0xb1, 0xd6, 0x87, 0x89, 0xa7, 0xff, 0x9b, 0x6d, 0x09, 0xe3, 0x8b, 0x5c,
+	0xea, 0x98, 0xe6, 0x57, 0xb9, 0xda, 0xc9, 0x09, 0x4d, 0x97, 0x69, 0xb9, 0x99, 0x5a, 0x27, 0x2d,
+	0xad, 0x48, 0xcc, 0x2e, 0x05, 0xa4, 0x6b, 0xba, 0xac, 0x3b, 0x80, 0x74, 0x4f, 0x5a, 0x5d, 0x01,
+	0xf9, 0x23, 0xd7, 0x72, 0xbf, 0x61, 0x98, 0x2e, 0x33, 0x8c, 0x01, 0xc8, 0x30, 0x4e, 0x5a, 0x86,
+	0x21, 0x60, 0xbd, 0xc5, 0x4c, 0x67, 0xeb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x77, 0xe8,
+	0x94, 0x74, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupCriterionLabelServiceClient is the client API for AdGroupCriterionLabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupCriterionLabelServiceClient interface {
+	// Returns the requested ad group criterion label in full detail.
+	GetAdGroupCriterionLabel(ctx context.Context, in *GetAdGroupCriterionLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterionLabel, error)
+	// Creates and removes ad group criterion labels.
+	// Operation statuses are returned.
+	MutateAdGroupCriterionLabels(ctx context.Context, in *MutateAdGroupCriterionLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupCriterionLabelsResponse, error)
+}
+
+type adGroupCriterionLabelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupCriterionLabelServiceClient(cc grpc.ClientConnInterface) AdGroupCriterionLabelServiceClient {
+	return &adGroupCriterionLabelServiceClient{cc}
+}
+
+func (c *adGroupCriterionLabelServiceClient) GetAdGroupCriterionLabel(ctx context.Context, in *GetAdGroupCriterionLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterionLabel, error) {
+	out := new(resources.AdGroupCriterionLabel)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupCriterionLabelService/GetAdGroupCriterionLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupCriterionLabelServiceClient) MutateAdGroupCriterionLabels(ctx context.Context, in *MutateAdGroupCriterionLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupCriterionLabelsResponse, error) {
+	out := new(MutateAdGroupCriterionLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupCriterionLabelService/MutateAdGroupCriterionLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupCriterionLabelServiceServer is the server API for AdGroupCriterionLabelService service.
+type AdGroupCriterionLabelServiceServer interface {
+	// Returns the requested ad group criterion label in full detail.
+	GetAdGroupCriterionLabel(context.Context, *GetAdGroupCriterionLabelRequest) (*resources.AdGroupCriterionLabel, error)
+	// Creates and removes ad group criterion labels.
+	// Operation statuses are returned.
+	MutateAdGroupCriterionLabels(context.Context, *MutateAdGroupCriterionLabelsRequest) (*MutateAdGroupCriterionLabelsResponse, error)
+}
+
+// UnimplementedAdGroupCriterionLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupCriterionLabelServiceServer struct {
+}
+
+func (*UnimplementedAdGroupCriterionLabelServiceServer) GetAdGroupCriterionLabel(ctx context.Context, req *GetAdGroupCriterionLabelRequest) (*resources.AdGroupCriterionLabel, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupCriterionLabel not implemented")
+}
+func (*UnimplementedAdGroupCriterionLabelServiceServer) MutateAdGroupCriterionLabels(ctx context.Context, req *MutateAdGroupCriterionLabelsRequest) (*MutateAdGroupCriterionLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupCriterionLabels not implemented")
+}
+
+func RegisterAdGroupCriterionLabelServiceServer(s *grpc.Server, srv AdGroupCriterionLabelServiceServer) {
+	s.RegisterService(&_AdGroupCriterionLabelService_serviceDesc, srv)
+}
+
+func _AdGroupCriterionLabelService_GetAdGroupCriterionLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupCriterionLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionLabelServiceServer).GetAdGroupCriterionLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupCriterionLabelService/GetAdGroupCriterionLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionLabelServiceServer).GetAdGroupCriterionLabel(ctx, req.(*GetAdGroupCriterionLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupCriterionLabelService_MutateAdGroupCriterionLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupCriterionLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionLabelServiceServer).MutateAdGroupCriterionLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupCriterionLabelService/MutateAdGroupCriterionLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionLabelServiceServer).MutateAdGroupCriterionLabels(ctx, req.(*MutateAdGroupCriterionLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupCriterionLabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupCriterionLabelService",
+	HandlerType: (*AdGroupCriterionLabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupCriterionLabel",
+			Handler:    _AdGroupCriterionLabelService_GetAdGroupCriterionLabel_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupCriterionLabels",
+			Handler:    _AdGroupCriterionLabelService_MutateAdGroupCriterionLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_criterion_label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_criterion_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_criterion_service.pb.go
new file mode 100644
index 0000000..27e100e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_criterion_service.pb.go
@@ -0,0 +1,550 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_criterion_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupCriterionService.GetAdGroupCriterion][google.ads.googleads.v3.services.AdGroupCriterionService.GetAdGroupCriterion].
+type GetAdGroupCriterionRequest struct {
+	// Required. The resource name of the criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupCriterionRequest) Reset()         { *m = GetAdGroupCriterionRequest{} }
+func (m *GetAdGroupCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupCriterionRequest) ProtoMessage()    {}
+func (*GetAdGroupCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_112a602b3a19937a, []int{0}
+}
+
+func (m *GetAdGroupCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupCriterionRequest.Merge(m, src)
+}
+func (m *GetAdGroupCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Size(m)
+}
+func (m *GetAdGroupCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupCriterionRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupCriterionService.MutateAdGroupCriteria][google.ads.googleads.v3.services.AdGroupCriterionService.MutateAdGroupCriteria].
+type MutateAdGroupCriteriaRequest struct {
+	// Required. ID of the customer whose criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual criteria.
+	Operations []*AdGroupCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupCriteriaRequest) Reset()         { *m = MutateAdGroupCriteriaRequest{} }
+func (m *MutateAdGroupCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriteriaRequest) ProtoMessage()    {}
+func (*MutateAdGroupCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_112a602b3a19937a, []int{1}
+}
+
+func (m *MutateAdGroupCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriteriaRequest.Merge(m, src)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Size(m)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupCriteriaRequest) GetOperations() []*AdGroupCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupCriteriaRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupCriteriaRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove, update) on an ad group criterion.
+type AdGroupCriterionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The list of policy violation keys that should not cause a
+	// PolicyViolationError to be reported. Not all policy violations are
+	// exemptable, please refer to the is_exemptible field in the returned
+	// PolicyViolationError.
+	//
+	// Resources violating these polices will be saved, but will not be eligible
+	// to serve. They may begin serving at a later time due to a change in
+	// policies, re-review of the resource, or a change in advertiser
+	// certificates.
+	ExemptPolicyViolationKeys []*common.PolicyViolationKey `protobuf:"bytes,5,rep,name=exempt_policy_violation_keys,json=exemptPolicyViolationKeys,proto3" json:"exempt_policy_violation_keys,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupCriterionOperation_Create
+	//	*AdGroupCriterionOperation_Update
+	//	*AdGroupCriterionOperation_Remove
+	Operation            isAdGroupCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *AdGroupCriterionOperation) Reset()         { *m = AdGroupCriterionOperation{} }
+func (m *AdGroupCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionOperation) ProtoMessage()    {}
+func (*AdGroupCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_112a602b3a19937a, []int{2}
+}
+
+func (m *AdGroupCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionOperation.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionOperation.Merge(m, src)
+}
+func (m *AdGroupCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionOperation.Size(m)
+}
+func (m *AdGroupCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionOperation proto.InternalMessageInfo
+
+func (m *AdGroupCriterionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetExemptPolicyViolationKeys() []*common.PolicyViolationKey {
+	if m != nil {
+		return m.ExemptPolicyViolationKeys
+	}
+	return nil
+}
+
+type isAdGroupCriterionOperation_Operation interface {
+	isAdGroupCriterionOperation_Operation()
+}
+
+type AdGroupCriterionOperation_Create struct {
+	Create *resources.AdGroupCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupCriterionOperation_Update struct {
+	Update *resources.AdGroupCriterion `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupCriterionOperation_Create) isAdGroupCriterionOperation_Operation() {}
+
+func (*AdGroupCriterionOperation_Update) isAdGroupCriterionOperation_Operation() {}
+
+func (*AdGroupCriterionOperation_Remove) isAdGroupCriterionOperation_Operation() {}
+
+func (m *AdGroupCriterionOperation) GetOperation() isAdGroupCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetCreate() *resources.AdGroupCriterion {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetUpdate() *resources.AdGroupCriterion {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupCriterionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupCriterionOperation_Create)(nil),
+		(*AdGroupCriterionOperation_Update)(nil),
+		(*AdGroupCriterionOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group criterion mutate.
+type MutateAdGroupCriteriaResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateAdGroupCriteriaResponse) Reset()         { *m = MutateAdGroupCriteriaResponse{} }
+func (m *MutateAdGroupCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriteriaResponse) ProtoMessage()    {}
+func (*MutateAdGroupCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_112a602b3a19937a, []int{3}
+}
+
+func (m *MutateAdGroupCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriteriaResponse.Merge(m, src)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Size(m)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriteriaResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupCriteriaResponse) GetResults() []*MutateAdGroupCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateAdGroupCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupCriterionResult) Reset()         { *m = MutateAdGroupCriterionResult{} }
+func (m *MutateAdGroupCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriterionResult) ProtoMessage()    {}
+func (*MutateAdGroupCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_112a602b3a19937a, []int{4}
+}
+
+func (m *MutateAdGroupCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriterionResult.Merge(m, src)
+}
+func (m *MutateAdGroupCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Size(m)
+}
+func (m *MutateAdGroupCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriterionResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupCriterionRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupCriterionRequest")
+	proto.RegisterType((*MutateAdGroupCriteriaRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriteriaRequest")
+	proto.RegisterType((*AdGroupCriterionOperation)(nil), "google.ads.googleads.v3.services.AdGroupCriterionOperation")
+	proto.RegisterType((*MutateAdGroupCriteriaResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriteriaResponse")
+	proto.RegisterType((*MutateAdGroupCriterionResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupCriterionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_criterion_service.proto", fileDescriptor_112a602b3a19937a)
+}
+
+var fileDescriptor_112a602b3a19937a = []byte{
+	// 830 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6f, 0xeb, 0x44,
+	0x10, 0xc7, 0xce, 0xa3, 0xd0, 0xcd, 0x7b, 0x20, 0xed, 0xd3, 0xe3, 0xb9, 0x21, 0x88, 0xc8, 0x54,
+	0x22, 0x0a, 0xc8, 0x16, 0x31, 0x17, 0x5c, 0x0a, 0x72, 0x2a, 0x92, 0x56, 0xa8, 0xb4, 0x72, 0xa5,
+	0xa8, 0x42, 0x91, 0xcc, 0xd6, 0xde, 0x06, 0xab, 0xb6, 0xd7, 0xec, 0xae, 0x23, 0xa2, 0xaa, 0x07,
+	0xe0, 0x1b, 0xc0, 0x37, 0xe0, 0xc8, 0xb7, 0xe0, 0xda, 0x6b, 0x6f, 0x3d, 0x71, 0xe0, 0xc4, 0x11,
+	0xf1, 0x01, 0x90, 0xbd, 0xde, 0xfc, 0x6b, 0xac, 0x48, 0x7d, 0xb7, 0xf1, 0xce, 0x6f, 0x7e, 0x33,
+	0xb3, 0xf3, 0xdb, 0x31, 0x70, 0xc6, 0x84, 0x8c, 0x23, 0x6c, 0xa2, 0x80, 0x99, 0xc2, 0xcc, 0xad,
+	0x89, 0x65, 0x32, 0x4c, 0x27, 0xa1, 0x8f, 0x99, 0x89, 0x02, 0x6f, 0x4c, 0x49, 0x96, 0x7a, 0x3e,
+	0x0d, 0x39, 0xa6, 0x21, 0x49, 0xbc, 0xd2, 0x67, 0xa4, 0x94, 0x70, 0x02, 0x5b, 0x22, 0xce, 0x40,
+	0x01, 0x33, 0x66, 0x14, 0xc6, 0xc4, 0x32, 0x24, 0x45, 0xe3, 0xa3, 0xaa, 0x24, 0x3e, 0x89, 0x63,
+	0x92, 0x98, 0x29, 0x89, 0x42, 0x7f, 0x2a, 0xe8, 0x1a, 0x76, 0x15, 0x98, 0x62, 0x46, 0x32, 0xba,
+	0xbe, 0xa4, 0x32, 0xb6, 0x29, 0x63, 0xd3, 0xd0, 0x44, 0x49, 0x42, 0x38, 0xe2, 0x21, 0x49, 0x58,
+	0xe9, 0x7d, 0xb9, 0xe0, 0xf5, 0xa3, 0x10, 0x27, 0xbc, 0x74, 0xbc, 0xbf, 0xe0, 0xb8, 0x0c, 0x71,
+	0x14, 0x78, 0x17, 0xf8, 0x7b, 0x34, 0x09, 0x09, 0x2d, 0x01, 0x65, 0x8b, 0x66, 0xf1, 0x75, 0x91,
+	0x5d, 0x96, 0xa8, 0x18, 0xb1, 0xab, 0x15, 0x6e, 0x9a, 0xfa, 0x26, 0xe3, 0x88, 0x67, 0x65, 0x52,
+	0xbd, 0x0f, 0x1a, 0x03, 0xcc, 0x9d, 0x60, 0x90, 0x17, 0x7c, 0x20, 0xeb, 0x75, 0xf1, 0x0f, 0x19,
+	0x66, 0x1c, 0xb6, 0xc1, 0x33, 0xd9, 0x96, 0x97, 0xa0, 0x18, 0x6b, 0x4a, 0x4b, 0x69, 0x6f, 0xf7,
+	0x6a, 0x7f, 0x39, 0xaa, 0xfb, 0x54, 0x7a, 0xbe, 0x41, 0x31, 0xd6, 0xff, 0x53, 0x40, 0xf3, 0x38,
+	0xe3, 0x88, 0xe3, 0x65, 0x2e, 0x24, 0xa9, 0x76, 0x41, 0xdd, 0xcf, 0x18, 0x27, 0x31, 0xa6, 0x5e,
+	0x18, 0x2c, 0x12, 0x01, 0x79, 0x7e, 0x14, 0xc0, 0xef, 0x00, 0x20, 0x29, 0xa6, 0xe2, 0x5e, 0x34,
+	0xb5, 0x55, 0x6b, 0xd7, 0xbb, 0x7b, 0xc6, 0xa6, 0x09, 0x1a, 0xab, 0xf5, 0x9f, 0x48, 0x8e, 0x32,
+	0xc3, 0x9c, 0x13, 0x7e, 0x08, 0xde, 0x4e, 0x11, 0xe5, 0x21, 0x8a, 0xbc, 0x4b, 0x14, 0x46, 0x19,
+	0xc5, 0x5a, 0xad, 0xa5, 0xb4, 0xdf, 0x74, 0xdf, 0x2a, 0x8f, 0xfb, 0xe2, 0x14, 0x7e, 0x00, 0x9e,
+	0x4d, 0x50, 0x14, 0x06, 0x88, 0x63, 0x8f, 0x24, 0xd1, 0x54, 0x7b, 0x52, 0xc0, 0x9e, 0xca, 0xc3,
+	0x93, 0x24, 0x9a, 0xea, 0xbf, 0xd6, 0xc0, 0x4e, 0x65, 0x72, 0xb8, 0x07, 0xea, 0x59, 0x5a, 0x10,
+	0xe4, 0xa3, 0x28, 0x08, 0xea, 0xdd, 0x86, 0x6c, 0x47, 0x4e, 0xcb, 0xe8, 0xe7, 0xd3, 0x3a, 0x46,
+	0xec, 0xca, 0x05, 0x02, 0x9e, 0xdb, 0x90, 0x81, 0x26, 0xfe, 0x11, 0xc7, 0x29, 0xf7, 0x84, 0xfe,
+	0xbc, 0x49, 0x48, 0xa2, 0x82, 0xd7, 0xbb, 0xc2, 0x53, 0xa6, 0xbd, 0x5e, 0x5c, 0x4e, 0xb7, 0xf2,
+	0x72, 0x84, 0x78, 0x8d, 0xd3, 0x22, 0x78, 0x28, 0x63, 0xbf, 0xc6, 0x53, 0x77, 0x47, 0xf0, 0x3e,
+	0xf4, 0x30, 0x78, 0x0c, 0xb6, 0x7c, 0x8a, 0x11, 0x17, 0x93, 0xae, 0x77, 0xad, 0x4a, 0xfa, 0x99,
+	0xdc, 0x1f, 0x5c, 0xfe, 0xe1, 0x6b, 0x6e, 0x49, 0x92, 0xd3, 0x89, 0x8e, 0x34, 0xf5, 0x95, 0xe8,
+	0x04, 0x09, 0xd4, 0xc0, 0x16, 0xc5, 0x31, 0x99, 0x88, 0x91, 0x6d, 0xe7, 0x1e, 0xf1, 0xdd, 0xab,
+	0x83, 0xed, 0xd9, 0x8c, 0xf5, 0x3f, 0x15, 0xf0, 0x5e, 0x85, 0x16, 0x59, 0x4a, 0x12, 0x86, 0x61,
+	0x1f, 0xbc, 0x58, 0x11, 0x81, 0x87, 0x29, 0x25, 0xb4, 0xe0, 0xad, 0x77, 0xa1, 0x2c, 0x93, 0xa6,
+	0xbe, 0x71, 0x56, 0x3c, 0x17, 0xf7, 0xf9, 0xb2, 0x3c, 0xbe, 0xca, 0xe1, 0xf0, 0x1c, 0xbc, 0x41,
+	0x31, 0xcb, 0x22, 0x2e, 0xb5, 0xfa, 0xc5, 0x66, 0xad, 0xae, 0xab, 0x2c, 0x7f, 0x71, 0x39, 0x8d,
+	0x2b, 0xe9, 0xf4, 0x83, 0xf5, 0xcf, 0x49, 0x02, 0x73, 0x75, 0xae, 0x79, 0x99, 0xcb, 0x8f, 0xb2,
+	0xfb, 0xd3, 0x13, 0xf0, 0x72, 0x35, 0xfe, 0x4c, 0xd4, 0x01, 0xef, 0x14, 0xf0, 0x7c, 0xcd, 0xcb,
+	0x87, 0x9f, 0x6f, 0xee, 0xa0, 0x7a, 0x61, 0x34, 0x1e, 0x33, 0x60, 0xfd, 0xe8, 0xde, 0x59, 0x6e,
+	0xe6, 0xe7, 0xbb, 0xbf, 0x7f, 0x53, 0x2d, 0xf8, 0x49, 0xbe, 0x56, 0xaf, 0x97, 0x3c, 0xfb, 0x72,
+	0x57, 0x30, 0xb3, 0x63, 0xa2, 0xe5, 0xe9, 0x9a, 0x9d, 0x1b, 0xf8, 0xaf, 0x02, 0x5e, 0xac, 0x1d,
+	0x3d, 0x7c, 0xe4, 0x64, 0xe4, 0xfe, 0x6a, 0x7c, 0xf9, 0xe8, 0x78, 0xa1, 0x39, 0xfd, 0xfc, 0xde,
+	0x79, 0x67, 0x61, 0x03, 0x7e, 0x3c, 0xdf, 0x49, 0x45, 0xbb, 0x9f, 0xe9, 0x9f, 0x16, 0xbf, 0x9c,
+	0x59, 0x7f, 0xd7, 0x0b, 0xe0, 0xfd, 0xce, 0xcd, 0x6a, 0xb7, 0x76, 0x5c, 0x64, 0xb3, 0x95, 0x4e,
+	0xe3, 0xdd, 0x5b, 0x47, 0x9b, 0x57, 0x54, 0x5a, 0x69, 0xc8, 0xf2, 0x15, 0xd0, 0xfb, 0x45, 0x05,
+	0xbb, 0x3e, 0x89, 0x37, 0x56, 0xdf, 0x6b, 0x56, 0x28, 0xe5, 0x34, 0x5f, 0x53, 0xa7, 0xca, 0xb7,
+	0x87, 0x25, 0xc3, 0x98, 0x44, 0x28, 0x19, 0x1b, 0x84, 0x8e, 0xcd, 0x31, 0x4e, 0x8a, 0x25, 0x66,
+	0xce, 0x73, 0x56, 0xff, 0xa9, 0xf7, 0xa4, 0xf1, 0xbb, 0x5a, 0x1b, 0x38, 0xce, 0x1f, 0x6a, 0x6b,
+	0x20, 0x08, 0x9d, 0x80, 0x19, 0xc2, 0xcc, 0xad, 0xa1, 0x65, 0x94, 0x89, 0xd9, 0xad, 0x84, 0x8c,
+	0x9c, 0x80, 0x8d, 0x66, 0x90, 0xd1, 0xd0, 0x1a, 0x49, 0xc8, 0x3f, 0xea, 0xae, 0x38, 0xb7, 0x6d,
+	0x27, 0x60, 0xb6, 0x3d, 0x03, 0xd9, 0xf6, 0xd0, 0xb2, 0x6d, 0x09, 0xbb, 0xd8, 0x2a, 0xea, 0xb4,
+	0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x94, 0x1c, 0x0a, 0xad, 0x50, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupCriterionServiceClient is the client API for AdGroupCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupCriterionServiceClient interface {
+	// Returns the requested criterion in full detail.
+	GetAdGroupCriterion(ctx context.Context, in *GetAdGroupCriterionRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateAdGroupCriteria(ctx context.Context, in *MutateAdGroupCriteriaRequest, opts ...grpc.CallOption) (*MutateAdGroupCriteriaResponse, error)
+}
+
+type adGroupCriterionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupCriterionServiceClient(cc grpc.ClientConnInterface) AdGroupCriterionServiceClient {
+	return &adGroupCriterionServiceClient{cc}
+}
+
+func (c *adGroupCriterionServiceClient) GetAdGroupCriterion(ctx context.Context, in *GetAdGroupCriterionRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterion, error) {
+	out := new(resources.AdGroupCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupCriterionService/GetAdGroupCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupCriterionServiceClient) MutateAdGroupCriteria(ctx context.Context, in *MutateAdGroupCriteriaRequest, opts ...grpc.CallOption) (*MutateAdGroupCriteriaResponse, error) {
+	out := new(MutateAdGroupCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupCriterionService/MutateAdGroupCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupCriterionServiceServer is the server API for AdGroupCriterionService service.
+type AdGroupCriterionServiceServer interface {
+	// Returns the requested criterion in full detail.
+	GetAdGroupCriterion(context.Context, *GetAdGroupCriterionRequest) (*resources.AdGroupCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateAdGroupCriteria(context.Context, *MutateAdGroupCriteriaRequest) (*MutateAdGroupCriteriaResponse, error)
+}
+
+// UnimplementedAdGroupCriterionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupCriterionServiceServer struct {
+}
+
+func (*UnimplementedAdGroupCriterionServiceServer) GetAdGroupCriterion(ctx context.Context, req *GetAdGroupCriterionRequest) (*resources.AdGroupCriterion, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupCriterion not implemented")
+}
+func (*UnimplementedAdGroupCriterionServiceServer) MutateAdGroupCriteria(ctx context.Context, req *MutateAdGroupCriteriaRequest) (*MutateAdGroupCriteriaResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupCriteria not implemented")
+}
+
+func RegisterAdGroupCriterionServiceServer(s *grpc.Server, srv AdGroupCriterionServiceServer) {
+	s.RegisterService(&_AdGroupCriterionService_serviceDesc, srv)
+}
+
+func _AdGroupCriterionService_GetAdGroupCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionServiceServer).GetAdGroupCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupCriterionService/GetAdGroupCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionServiceServer).GetAdGroupCriterion(ctx, req.(*GetAdGroupCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupCriterionService_MutateAdGroupCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionServiceServer).MutateAdGroupCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupCriterionService/MutateAdGroupCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionServiceServer).MutateAdGroupCriteria(ctx, req.(*MutateAdGroupCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupCriterionService",
+	HandlerType: (*AdGroupCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupCriterion",
+			Handler:    _AdGroupCriterionService_GetAdGroupCriterion_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupCriteria",
+			Handler:    _AdGroupCriterionService_MutateAdGroupCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_criterion_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_criterion_simulation_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_criterion_simulation_service.pb.go
new file mode 100644
index 0000000..5340880
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_criterion_simulation_service.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_criterion_simulation_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [AdGroupCriterionSimulationService.GetAdGroupCriterionSimulation][google.ads.googleads.v3.services.AdGroupCriterionSimulationService.GetAdGroupCriterionSimulation].
+type GetAdGroupCriterionSimulationRequest struct {
+	// Required. The resource name of the ad group criterion simulation to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupCriterionSimulationRequest) Reset()         { *m = GetAdGroupCriterionSimulationRequest{} }
+func (m *GetAdGroupCriterionSimulationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupCriterionSimulationRequest) ProtoMessage()    {}
+func (*GetAdGroupCriterionSimulationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da600f48a422603f, []int{0}
+}
+
+func (m *GetAdGroupCriterionSimulationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupCriterionSimulationRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupCriterionSimulationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupCriterionSimulationRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupCriterionSimulationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupCriterionSimulationRequest.Merge(m, src)
+}
+func (m *GetAdGroupCriterionSimulationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupCriterionSimulationRequest.Size(m)
+}
+func (m *GetAdGroupCriterionSimulationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupCriterionSimulationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupCriterionSimulationRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupCriterionSimulationRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupCriterionSimulationRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupCriterionSimulationRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_criterion_simulation_service.proto", fileDescriptor_da600f48a422603f)
+}
+
+var fileDescriptor_da600f48a422603f = []byte{
+	// 425 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xb1, 0x8b, 0xd4, 0x40,
+	0x14, 0xc6, 0xd9, 0x1c, 0x08, 0x06, 0x6d, 0xd2, 0x78, 0x44, 0xc5, 0xf5, 0x58, 0xe4, 0xb8, 0x62,
+	0x06, 0x4c, 0x37, 0xb2, 0xc8, 0xac, 0x68, 0x2c, 0x44, 0x96, 0x3b, 0xdc, 0x42, 0x02, 0x61, 0x2e,
+	0x33, 0xc6, 0x81, 0x24, 0x13, 0xe7, 0x4d, 0xd2, 0x88, 0x8d, 0xbd, 0x95, 0xff, 0x81, 0xa5, 0x7f,
+	0x85, 0xf5, 0xb5, 0x76, 0x56, 0x16, 0x56, 0xfe, 0x0f, 0x82, 0x24, 0x93, 0xc9, 0xdd, 0x16, 0x31,
+	0x76, 0x1f, 0xf9, 0x3e, 0x7e, 0xdf, 0xcb, 0x7b, 0x89, 0xff, 0x22, 0x57, 0x2a, 0x2f, 0x04, 0x66,
+	0x1c, 0xb0, 0x95, 0x9d, 0x6a, 0x23, 0x0c, 0x42, 0xb7, 0x32, 0x13, 0x80, 0x19, 0x4f, 0x73, 0xad,
+	0x9a, 0x3a, 0xcd, 0xb4, 0x34, 0x42, 0x4b, 0x55, 0xa5, 0x20, 0xcb, 0xa6, 0x60, 0xa6, 0x97, 0x36,
+	0x86, 0x6a, 0xad, 0x8c, 0x0a, 0x96, 0x16, 0x81, 0x18, 0x07, 0x34, 0xd2, 0x50, 0x1b, 0x21, 0x47,
+	0x0b, 0x9f, 0x4e, 0xf5, 0x69, 0x01, 0xaa, 0xd1, 0xb3, 0x85, 0xb6, 0x28, 0xbc, 0xe3, 0x30, 0xb5,
+	0xc4, 0xac, 0xaa, 0x94, 0xe9, 0x4d, 0x18, 0xdc, 0x5b, 0x57, 0xdc, 0xac, 0x90, 0xa2, 0x32, 0x83,
+	0x71, 0xef, 0x8a, 0xf1, 0x46, 0x8a, 0x82, 0xa7, 0xe7, 0xe2, 0x2d, 0x6b, 0xa5, 0xd2, 0x36, 0x70,
+	0xb4, 0xf5, 0x57, 0xb1, 0x30, 0x94, 0xc7, 0xdd, 0x00, 0x4f, 0x5c, 0xff, 0xd9, 0x58, 0x7f, 0x2a,
+	0xde, 0x35, 0x02, 0x4c, 0x70, 0xec, 0xdf, 0x74, 0x03, 0xa7, 0x15, 0x2b, 0xc5, 0xe1, 0x62, 0xb9,
+	0x38, 0xbe, 0xbe, 0x39, 0xf8, 0x49, 0xbd, 0xd3, 0x1b, 0xce, 0x79, 0xc9, 0x4a, 0xf1, 0xf0, 0x9b,
+	0xe7, 0xdf, 0x9f, 0xe6, 0x9d, 0xd9, 0xbd, 0x04, 0x7f, 0x16, 0xfe, 0xdd, 0x7f, 0x16, 0x07, 0xcf,
+	0xd0, 0xdc, 0x6e, 0xd1, 0xff, 0x4c, 0x1e, 0xae, 0x27, 0x39, 0xe3, 0x05, 0xd0, 0x34, 0xe5, 0xe8,
+	0xd5, 0x0f, 0xba, 0xff, 0xe6, 0x1f, 0xbf, 0xff, 0xfa, 0xec, 0x3d, 0x0e, 0xd6, 0xdd, 0x0d, 0xdf,
+	0xef, 0x39, 0xeb, 0xac, 0x01, 0xa3, 0x4a, 0xa1, 0x01, 0x9f, 0x60, 0x36, 0x89, 0x04, 0x7c, 0xf2,
+	0x21, 0xbc, 0x7d, 0x41, 0x0f, 0x2f, 0x87, 0x19, 0x54, 0x2d, 0x01, 0x65, 0xaa, 0xdc, 0x7c, 0xf2,
+	0xfc, 0x55, 0xa6, 0xca, 0xd9, 0x05, 0x6c, 0x1e, 0xcc, 0x2e, 0x7a, 0xdb, 0x5d, 0x79, 0xbb, 0x78,
+	0xfd, 0x7c, 0x60, 0xe5, 0xaa, 0x60, 0x55, 0x8e, 0x94, 0xce, 0x71, 0x2e, 0xaa, 0xfe, 0x1b, 0xc0,
+	0x97, 0xed, 0xd3, 0x7f, 0xc5, 0x23, 0x27, 0xbe, 0x78, 0x07, 0x31, 0xa5, 0x5f, 0xbd, 0x65, 0x6c,
+	0x81, 0x94, 0x03, 0xb2, 0xb2, 0x53, 0xbb, 0x08, 0x0d, 0xc5, 0x70, 0xe1, 0x22, 0x09, 0xe5, 0x90,
+	0x8c, 0x91, 0x64, 0x17, 0x25, 0x2e, 0xf2, 0xdb, 0x5b, 0xd9, 0xe7, 0x84, 0x50, 0x0e, 0x84, 0x8c,
+	0x21, 0x42, 0x76, 0x11, 0x21, 0x2e, 0x76, 0x7e, 0xad, 0x9f, 0x33, 0xfa, 0x1b, 0x00, 0x00, 0xff,
+	0xff, 0x6b, 0x09, 0x38, 0x11, 0xbc, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupCriterionSimulationServiceClient is the client API for AdGroupCriterionSimulationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupCriterionSimulationServiceClient interface {
+	// Returns the requested ad group criterion simulation in full detail.
+	GetAdGroupCriterionSimulation(ctx context.Context, in *GetAdGroupCriterionSimulationRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterionSimulation, error)
+}
+
+type adGroupCriterionSimulationServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupCriterionSimulationServiceClient(cc grpc.ClientConnInterface) AdGroupCriterionSimulationServiceClient {
+	return &adGroupCriterionSimulationServiceClient{cc}
+}
+
+func (c *adGroupCriterionSimulationServiceClient) GetAdGroupCriterionSimulation(ctx context.Context, in *GetAdGroupCriterionSimulationRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterionSimulation, error) {
+	out := new(resources.AdGroupCriterionSimulation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupCriterionSimulationService/GetAdGroupCriterionSimulation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupCriterionSimulationServiceServer is the server API for AdGroupCriterionSimulationService service.
+type AdGroupCriterionSimulationServiceServer interface {
+	// Returns the requested ad group criterion simulation in full detail.
+	GetAdGroupCriterionSimulation(context.Context, *GetAdGroupCriterionSimulationRequest) (*resources.AdGroupCriterionSimulation, error)
+}
+
+// UnimplementedAdGroupCriterionSimulationServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupCriterionSimulationServiceServer struct {
+}
+
+func (*UnimplementedAdGroupCriterionSimulationServiceServer) GetAdGroupCriterionSimulation(ctx context.Context, req *GetAdGroupCriterionSimulationRequest) (*resources.AdGroupCriterionSimulation, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAdGroupCriterionSimulation not implemented")
+}
+
+func RegisterAdGroupCriterionSimulationServiceServer(s *grpc.Server, srv AdGroupCriterionSimulationServiceServer) {
+	s.RegisterService(&_AdGroupCriterionSimulationService_serviceDesc, srv)
+}
+
+func _AdGroupCriterionSimulationService_GetAdGroupCriterionSimulation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupCriterionSimulationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionSimulationServiceServer).GetAdGroupCriterionSimulation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupCriterionSimulationService/GetAdGroupCriterionSimulation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionSimulationServiceServer).GetAdGroupCriterionSimulation(ctx, req.(*GetAdGroupCriterionSimulationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupCriterionSimulationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupCriterionSimulationService",
+	HandlerType: (*AdGroupCriterionSimulationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupCriterionSimulation",
+			Handler:    _AdGroupCriterionSimulationService_GetAdGroupCriterionSimulation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_criterion_simulation_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_extension_setting_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_extension_setting_service.pb.go
new file mode 100644
index 0000000..c14b633
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_extension_setting_service.pb.go
@@ -0,0 +1,537 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_extension_setting_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [AdGroupExtensionSettingService.GetAdGroupExtensionSetting][google.ads.googleads.v3.services.AdGroupExtensionSettingService.GetAdGroupExtensionSetting].
+type GetAdGroupExtensionSettingRequest struct {
+	// Required. The resource name of the ad group extension setting to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupExtensionSettingRequest) Reset()         { *m = GetAdGroupExtensionSettingRequest{} }
+func (m *GetAdGroupExtensionSettingRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupExtensionSettingRequest) ProtoMessage()    {}
+func (*GetAdGroupExtensionSettingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e62529bec79772a, []int{0}
+}
+
+func (m *GetAdGroupExtensionSettingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupExtensionSettingRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupExtensionSettingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupExtensionSettingRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupExtensionSettingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupExtensionSettingRequest.Merge(m, src)
+}
+func (m *GetAdGroupExtensionSettingRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupExtensionSettingRequest.Size(m)
+}
+func (m *GetAdGroupExtensionSettingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupExtensionSettingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupExtensionSettingRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupExtensionSettingRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [AdGroupExtensionSettingService.MutateAdGroupExtensionSettings][google.ads.googleads.v3.services.AdGroupExtensionSettingService.MutateAdGroupExtensionSettings].
+type MutateAdGroupExtensionSettingsRequest struct {
+	// Required. The ID of the customer whose ad group extension settings are being
+	// modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ad group extension
+	// settings.
+	Operations []*AdGroupExtensionSettingOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupExtensionSettingsRequest) Reset()         { *m = MutateAdGroupExtensionSettingsRequest{} }
+func (m *MutateAdGroupExtensionSettingsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupExtensionSettingsRequest) ProtoMessage()    {}
+func (*MutateAdGroupExtensionSettingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e62529bec79772a, []int{1}
+}
+
+func (m *MutateAdGroupExtensionSettingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupExtensionSettingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupExtensionSettingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupExtensionSettingsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupExtensionSettingsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsRequest.Size(m)
+}
+func (m *MutateAdGroupExtensionSettingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupExtensionSettingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupExtensionSettingsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupExtensionSettingsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupExtensionSettingsRequest) GetOperations() []*AdGroupExtensionSettingOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupExtensionSettingsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupExtensionSettingsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an ad group extension setting.
+type AdGroupExtensionSettingOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupExtensionSettingOperation_Create
+	//	*AdGroupExtensionSettingOperation_Update
+	//	*AdGroupExtensionSettingOperation_Remove
+	Operation            isAdGroupExtensionSettingOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
+	XXX_unrecognized     []byte                                       `json:"-"`
+	XXX_sizecache        int32                                        `json:"-"`
+}
+
+func (m *AdGroupExtensionSettingOperation) Reset()         { *m = AdGroupExtensionSettingOperation{} }
+func (m *AdGroupExtensionSettingOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupExtensionSettingOperation) ProtoMessage()    {}
+func (*AdGroupExtensionSettingOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e62529bec79772a, []int{2}
+}
+
+func (m *AdGroupExtensionSettingOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupExtensionSettingOperation.Unmarshal(m, b)
+}
+func (m *AdGroupExtensionSettingOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupExtensionSettingOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupExtensionSettingOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupExtensionSettingOperation.Merge(m, src)
+}
+func (m *AdGroupExtensionSettingOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupExtensionSettingOperation.Size(m)
+}
+func (m *AdGroupExtensionSettingOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupExtensionSettingOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupExtensionSettingOperation proto.InternalMessageInfo
+
+func (m *AdGroupExtensionSettingOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupExtensionSettingOperation_Operation interface {
+	isAdGroupExtensionSettingOperation_Operation()
+}
+
+type AdGroupExtensionSettingOperation_Create struct {
+	Create *resources.AdGroupExtensionSetting `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupExtensionSettingOperation_Update struct {
+	Update *resources.AdGroupExtensionSetting `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupExtensionSettingOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupExtensionSettingOperation_Create) isAdGroupExtensionSettingOperation_Operation() {}
+
+func (*AdGroupExtensionSettingOperation_Update) isAdGroupExtensionSettingOperation_Operation() {}
+
+func (*AdGroupExtensionSettingOperation_Remove) isAdGroupExtensionSettingOperation_Operation() {}
+
+func (m *AdGroupExtensionSettingOperation) GetOperation() isAdGroupExtensionSettingOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupExtensionSettingOperation) GetCreate() *resources.AdGroupExtensionSetting {
+	if x, ok := m.GetOperation().(*AdGroupExtensionSettingOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupExtensionSettingOperation) GetUpdate() *resources.AdGroupExtensionSetting {
+	if x, ok := m.GetOperation().(*AdGroupExtensionSettingOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupExtensionSettingOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupExtensionSettingOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupExtensionSettingOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupExtensionSettingOperation_Create)(nil),
+		(*AdGroupExtensionSettingOperation_Update)(nil),
+		(*AdGroupExtensionSettingOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group extension setting mutate.
+type MutateAdGroupExtensionSettingsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupExtensionSettingResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *MutateAdGroupExtensionSettingsResponse) Reset() {
+	*m = MutateAdGroupExtensionSettingsResponse{}
+}
+func (m *MutateAdGroupExtensionSettingsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupExtensionSettingsResponse) ProtoMessage()    {}
+func (*MutateAdGroupExtensionSettingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e62529bec79772a, []int{3}
+}
+
+func (m *MutateAdGroupExtensionSettingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupExtensionSettingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupExtensionSettingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupExtensionSettingsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupExtensionSettingsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingsResponse.Size(m)
+}
+func (m *MutateAdGroupExtensionSettingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupExtensionSettingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupExtensionSettingsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupExtensionSettingsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupExtensionSettingsResponse) GetResults() []*MutateAdGroupExtensionSettingResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad group extension setting mutate.
+type MutateAdGroupExtensionSettingResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupExtensionSettingResult) Reset()         { *m = MutateAdGroupExtensionSettingResult{} }
+func (m *MutateAdGroupExtensionSettingResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupExtensionSettingResult) ProtoMessage()    {}
+func (*MutateAdGroupExtensionSettingResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1e62529bec79772a, []int{4}
+}
+
+func (m *MutateAdGroupExtensionSettingResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupExtensionSettingResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupExtensionSettingResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupExtensionSettingResult.Merge(m, src)
+}
+func (m *MutateAdGroupExtensionSettingResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupExtensionSettingResult.Size(m)
+}
+func (m *MutateAdGroupExtensionSettingResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupExtensionSettingResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupExtensionSettingResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupExtensionSettingResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupExtensionSettingRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupExtensionSettingRequest")
+	proto.RegisterType((*MutateAdGroupExtensionSettingsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupExtensionSettingsRequest")
+	proto.RegisterType((*AdGroupExtensionSettingOperation)(nil), "google.ads.googleads.v3.services.AdGroupExtensionSettingOperation")
+	proto.RegisterType((*MutateAdGroupExtensionSettingsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupExtensionSettingsResponse")
+	proto.RegisterType((*MutateAdGroupExtensionSettingResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupExtensionSettingResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_extension_setting_service.proto", fileDescriptor_1e62529bec79772a)
+}
+
+var fileDescriptor_1e62529bec79772a = []byte{
+	// 776 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x4d, 0x6f, 0xd3, 0x4a,
+	0x14, 0x7d, 0x71, 0xaa, 0xbe, 0xd7, 0x49, 0xfb, 0x90, 0x06, 0x01, 0x51, 0x40, 0x25, 0xb8, 0x05,
+	0xa2, 0x08, 0xd9, 0x52, 0xb2, 0x73, 0xe9, 0xc2, 0x41, 0x6d, 0x5a, 0xa4, 0xd2, 0xca, 0x45, 0x5d,
+	0xa0, 0x48, 0xd6, 0xd4, 0x9e, 0x1a, 0xab, 0xb6, 0xc7, 0xcc, 0x8c, 0x23, 0xaa, 0xaa, 0x1b, 0xc4,
+	0x8a, 0x2d, 0x12, 0x3f, 0x80, 0x25, 0x4b, 0x7e, 0x46, 0x77, 0x88, 0x5d, 0x57, 0x2c, 0x58, 0xb1,
+	0xe3, 0x1f, 0x20, 0x7b, 0x3c, 0xf9, 0xa8, 0x70, 0x8c, 0x54, 0x76, 0xd7, 0x73, 0x4f, 0xce, 0xb9,
+	0x73, 0xef, 0x99, 0x1b, 0xb0, 0xed, 0x11, 0xe2, 0x05, 0x58, 0x47, 0x2e, 0xd3, 0x45, 0x98, 0x46,
+	0xc3, 0xae, 0xce, 0x30, 0x1d, 0xfa, 0x0e, 0x66, 0x3a, 0x72, 0x6d, 0x8f, 0x92, 0x24, 0xb6, 0xf1,
+	0x6b, 0x8e, 0x23, 0xe6, 0x93, 0xc8, 0x66, 0x98, 0x73, 0x3f, 0xf2, 0xec, 0x1c, 0xa3, 0xc5, 0x94,
+	0x70, 0x02, 0x9b, 0xe2, 0xf7, 0x1a, 0x72, 0x99, 0x36, 0xa2, 0xd2, 0x86, 0x5d, 0x4d, 0x52, 0x35,
+	0x7a, 0x45, 0x62, 0x14, 0x33, 0x92, 0xd0, 0xd9, 0x6a, 0x42, 0xa5, 0x71, 0x47, 0x72, 0xc4, 0xbe,
+	0x8e, 0xa2, 0x88, 0x70, 0xc4, 0x7d, 0x12, 0xb1, 0x3c, 0x7b, 0x6b, 0x22, 0xeb, 0x04, 0x3e, 0x8e,
+	0x78, 0x9e, 0xb8, 0x3b, 0x91, 0x38, 0xf2, 0x71, 0xe0, 0xda, 0x87, 0xf8, 0x25, 0x1a, 0xfa, 0x84,
+	0xe6, 0x80, 0xbc, 0x7a, 0x3d, 0xfb, 0x3a, 0x4c, 0x8e, 0x72, 0x54, 0x88, 0xd8, 0xf1, 0x25, 0x6e,
+	0x1a, 0x3b, 0x3a, 0xe3, 0x88, 0x27, 0xb9, 0xa8, 0xba, 0x03, 0xee, 0xf5, 0x31, 0x37, 0xdd, 0x7e,
+	0x5a, 0xf8, 0x86, 0xac, 0x7b, 0x5f, 0x94, 0x6d, 0xe1, 0x57, 0x09, 0x66, 0x1c, 0xb6, 0xc0, 0x92,
+	0xbc, 0xa5, 0x1d, 0xa1, 0x10, 0xd7, 0x2b, 0xcd, 0x4a, 0x6b, 0xa1, 0x57, 0xfd, 0x66, 0x2a, 0xd6,
+	0xa2, 0xcc, 0x3c, 0x43, 0x21, 0x56, 0xdf, 0x2a, 0xe0, 0xfe, 0x4e, 0xc2, 0x11, 0xc7, 0x05, 0x94,
+	0x4c, 0x72, 0xae, 0x82, 0x9a, 0x93, 0x30, 0x4e, 0x42, 0x4c, 0x6d, 0xdf, 0x9d, 0x64, 0x04, 0xf2,
+	0x7c, 0xdb, 0x85, 0x1e, 0x00, 0x24, 0xc6, 0x54, 0xf4, 0xa9, 0xae, 0x34, 0xab, 0xad, 0x5a, 0xa7,
+	0xa7, 0x95, 0x0d, 0x4b, 0x2b, 0x10, 0xdf, 0x95, 0x54, 0xb9, 0xd0, 0x98, 0x1a, 0x3e, 0x04, 0xd7,
+	0x62, 0x44, 0xb9, 0x8f, 0x02, 0xfb, 0x08, 0xf9, 0x41, 0x42, 0x71, 0xbd, 0xda, 0xac, 0xb4, 0xfe,
+	0xb3, 0xfe, 0xcf, 0x8f, 0x37, 0xc5, 0x29, 0x5c, 0x01, 0x4b, 0x43, 0x14, 0xf8, 0x2e, 0xe2, 0xd8,
+	0x26, 0x51, 0x70, 0x52, 0x9f, 0xcb, 0x60, 0x8b, 0xf2, 0x70, 0x37, 0x0a, 0x4e, 0xd4, 0xcf, 0x0a,
+	0x68, 0x96, 0xd5, 0x00, 0xd7, 0x40, 0x2d, 0x89, 0x33, 0x9e, 0x74, 0x50, 0x19, 0x4f, 0xad, 0xd3,
+	0x90, 0x97, 0x93, 0xb3, 0xd4, 0x36, 0xd3, 0x59, 0xee, 0x20, 0x76, 0x6c, 0x01, 0x01, 0x4f, 0x63,
+	0xf8, 0x1c, 0xcc, 0x3b, 0x14, 0x23, 0x2e, 0x66, 0x51, 0xeb, 0x18, 0x85, 0x4d, 0x19, 0xf9, 0xb3,
+	0xa8, 0x2b, 0x5b, 0xff, 0x58, 0x39, 0x57, 0xca, 0x2a, 0x34, 0xea, 0xca, 0xdf, 0x60, 0x15, 0x5c,
+	0xb0, 0x0e, 0xe6, 0x29, 0x0e, 0xc9, 0x50, 0xb4, 0x74, 0x21, 0xcd, 0x88, 0xef, 0x5e, 0x0d, 0x2c,
+	0x8c, 0x66, 0xa0, 0x7e, 0xa9, 0x80, 0x07, 0x65, 0xde, 0x61, 0x31, 0x89, 0x18, 0x86, 0x9b, 0xe0,
+	0xc6, 0xa5, 0x69, 0xd9, 0x98, 0x52, 0x42, 0x33, 0x81, 0x5a, 0x07, 0xca, 0xb2, 0x69, 0xec, 0x68,
+	0xfb, 0x99, 0xdd, 0xad, 0xeb, 0xd3, 0x73, 0xdc, 0x48, 0xe1, 0xd0, 0x06, 0xff, 0x52, 0xcc, 0x92,
+	0x80, 0x4b, 0x6f, 0x6d, 0x94, 0x7b, 0x6b, 0x66, 0x89, 0x56, 0xc6, 0x66, 0x49, 0x56, 0xf5, 0x29,
+	0x58, 0xf9, 0x03, 0x7c, 0x6a, 0xaa, 0xdf, 0x3c, 0xb0, 0xe9, 0xb7, 0xd5, 0x39, 0x9f, 0x03, 0xcb,
+	0x05, 0x34, 0xfb, 0xa2, 0x38, 0xf8, 0xb3, 0x02, 0x1a, 0xc5, 0xcf, 0x19, 0x3e, 0x29, 0xbf, 0x5d,
+	0xe9, 0x32, 0x68, 0x5c, 0xc1, 0x13, 0xaa, 0x75, 0x61, 0x4e, 0x5f, 0xf4, 0xcd, 0xd7, 0xef, 0xef,
+	0x95, 0xc7, 0xd0, 0x48, 0x17, 0xe9, 0xe9, 0x54, 0x66, 0x5d, 0x6e, 0x01, 0xa6, 0xb7, 0x75, 0x54,
+	0x60, 0x08, 0xbd, 0x7d, 0x06, 0x3f, 0x28, 0x60, 0x79, 0xb6, 0x6d, 0x60, 0xff, 0x8a, 0x53, 0x95,
+	0x4b, 0xab, 0xb1, 0x75, 0x75, 0x22, 0xe1, 0x60, 0x15, 0x5d, 0x98, 0x37, 0x27, 0xf6, 0xdf, 0xa3,
+	0xf1, 0x2a, 0xca, 0x5a, 0xd2, 0x53, 0xd7, 0xd3, 0x96, 0x8c, 0x7b, 0x70, 0x3a, 0x01, 0x5e, 0x6f,
+	0x9f, 0x15, 0x76, 0xc4, 0x08, 0x33, 0x7d, 0xa3, 0xd2, 0x6e, 0xdc, 0x3e, 0x37, 0xeb, 0xe3, 0x1a,
+	0xf3, 0x28, 0xf6, 0x99, 0xe6, 0x90, 0xb0, 0xf7, 0x4e, 0x01, 0xab, 0x0e, 0x09, 0x4b, 0xef, 0xd3,
+	0x5b, 0x99, 0x6d, 0xb9, 0xbd, 0x74, 0x4d, 0xed, 0x55, 0x5e, 0x6c, 0xe5, 0x44, 0x1e, 0x09, 0x50,
+	0xe4, 0x69, 0x84, 0x7a, 0xba, 0x87, 0xa3, 0x6c, 0x89, 0xe9, 0x63, 0xe9, 0xe2, 0xbf, 0xea, 0x35,
+	0x19, 0x7c, 0x54, 0xaa, 0x7d, 0xd3, 0xfc, 0xa4, 0x34, 0xfb, 0x82, 0xd0, 0x74, 0x99, 0x26, 0xc2,
+	0x34, 0x3a, 0xe8, 0x6a, 0xb9, 0x30, 0x3b, 0x97, 0x90, 0x81, 0xe9, 0xb2, 0xc1, 0x08, 0x32, 0x38,
+	0xe8, 0x0e, 0x24, 0xe4, 0x87, 0xb2, 0x2a, 0xce, 0x0d, 0xc3, 0x74, 0x99, 0x61, 0x8c, 0x40, 0x86,
+	0x71, 0xd0, 0x35, 0x0c, 0x09, 0x3b, 0x9c, 0xcf, 0xea, 0xec, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff,
+	0xe9, 0xaf, 0x15, 0x5d, 0x51, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupExtensionSettingServiceClient is the client API for AdGroupExtensionSettingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupExtensionSettingServiceClient interface {
+	// Returns the requested ad group extension setting in full detail.
+	GetAdGroupExtensionSetting(ctx context.Context, in *GetAdGroupExtensionSettingRequest, opts ...grpc.CallOption) (*resources.AdGroupExtensionSetting, error)
+	// Creates, updates, or removes ad group extension settings. Operation
+	// statuses are returned.
+	MutateAdGroupExtensionSettings(ctx context.Context, in *MutateAdGroupExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateAdGroupExtensionSettingsResponse, error)
+}
+
+type adGroupExtensionSettingServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupExtensionSettingServiceClient(cc grpc.ClientConnInterface) AdGroupExtensionSettingServiceClient {
+	return &adGroupExtensionSettingServiceClient{cc}
+}
+
+func (c *adGroupExtensionSettingServiceClient) GetAdGroupExtensionSetting(ctx context.Context, in *GetAdGroupExtensionSettingRequest, opts ...grpc.CallOption) (*resources.AdGroupExtensionSetting, error) {
+	out := new(resources.AdGroupExtensionSetting)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupExtensionSettingService/GetAdGroupExtensionSetting", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupExtensionSettingServiceClient) MutateAdGroupExtensionSettings(ctx context.Context, in *MutateAdGroupExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateAdGroupExtensionSettingsResponse, error) {
+	out := new(MutateAdGroupExtensionSettingsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupExtensionSettingService/MutateAdGroupExtensionSettings", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupExtensionSettingServiceServer is the server API for AdGroupExtensionSettingService service.
+type AdGroupExtensionSettingServiceServer interface {
+	// Returns the requested ad group extension setting in full detail.
+	GetAdGroupExtensionSetting(context.Context, *GetAdGroupExtensionSettingRequest) (*resources.AdGroupExtensionSetting, error)
+	// Creates, updates, or removes ad group extension settings. Operation
+	// statuses are returned.
+	MutateAdGroupExtensionSettings(context.Context, *MutateAdGroupExtensionSettingsRequest) (*MutateAdGroupExtensionSettingsResponse, error)
+}
+
+// UnimplementedAdGroupExtensionSettingServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupExtensionSettingServiceServer struct {
+}
+
+func (*UnimplementedAdGroupExtensionSettingServiceServer) GetAdGroupExtensionSetting(ctx context.Context, req *GetAdGroupExtensionSettingRequest) (*resources.AdGroupExtensionSetting, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupExtensionSetting not implemented")
+}
+func (*UnimplementedAdGroupExtensionSettingServiceServer) MutateAdGroupExtensionSettings(ctx context.Context, req *MutateAdGroupExtensionSettingsRequest) (*MutateAdGroupExtensionSettingsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupExtensionSettings not implemented")
+}
+
+func RegisterAdGroupExtensionSettingServiceServer(s *grpc.Server, srv AdGroupExtensionSettingServiceServer) {
+	s.RegisterService(&_AdGroupExtensionSettingService_serviceDesc, srv)
+}
+
+func _AdGroupExtensionSettingService_GetAdGroupExtensionSetting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupExtensionSettingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupExtensionSettingServiceServer).GetAdGroupExtensionSetting(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupExtensionSettingService/GetAdGroupExtensionSetting",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupExtensionSettingServiceServer).GetAdGroupExtensionSetting(ctx, req.(*GetAdGroupExtensionSettingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupExtensionSettingService_MutateAdGroupExtensionSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupExtensionSettingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupExtensionSettingServiceServer).MutateAdGroupExtensionSettings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupExtensionSettingService/MutateAdGroupExtensionSettings",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupExtensionSettingServiceServer).MutateAdGroupExtensionSettings(ctx, req.(*MutateAdGroupExtensionSettingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupExtensionSettingService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupExtensionSettingService",
+	HandlerType: (*AdGroupExtensionSettingServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupExtensionSetting",
+			Handler:    _AdGroupExtensionSettingService_GetAdGroupExtensionSetting_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupExtensionSettings",
+			Handler:    _AdGroupExtensionSettingService_MutateAdGroupExtensionSettings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_extension_setting_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_feed_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_feed_service.pb.go
new file mode 100644
index 0000000..5761420
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_feed_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_feed_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupFeedService.GetAdGroupFeed][google.ads.googleads.v3.services.AdGroupFeedService.GetAdGroupFeed].
+type GetAdGroupFeedRequest struct {
+	// Required. The resource name of the ad group feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupFeedRequest) Reset()         { *m = GetAdGroupFeedRequest{} }
+func (m *GetAdGroupFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupFeedRequest) ProtoMessage()    {}
+func (*GetAdGroupFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c9cbcec5e3a4ac2, []int{0}
+}
+
+func (m *GetAdGroupFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupFeedRequest.Merge(m, src)
+}
+func (m *GetAdGroupFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Size(m)
+}
+func (m *GetAdGroupFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupFeedRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupFeedService.MutateAdGroupFeeds][google.ads.googleads.v3.services.AdGroupFeedService.MutateAdGroupFeeds].
+type MutateAdGroupFeedsRequest struct {
+	// Required. The ID of the customer whose ad group feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ad group feeds.
+	Operations []*AdGroupFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupFeedsRequest) Reset()         { *m = MutateAdGroupFeedsRequest{} }
+func (m *MutateAdGroupFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedsRequest) ProtoMessage()    {}
+func (*MutateAdGroupFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c9cbcec5e3a4ac2, []int{1}
+}
+
+func (m *MutateAdGroupFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Size(m)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupFeedsRequest) GetOperations() []*AdGroupFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupFeedsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupFeedsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an ad group feed.
+type AdGroupFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupFeedOperation_Create
+	//	*AdGroupFeedOperation_Update
+	//	*AdGroupFeedOperation_Remove
+	Operation            isAdGroupFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *AdGroupFeedOperation) Reset()         { *m = AdGroupFeedOperation{} }
+func (m *AdGroupFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeedOperation) ProtoMessage()    {}
+func (*AdGroupFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c9cbcec5e3a4ac2, []int{2}
+}
+
+func (m *AdGroupFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeedOperation.Unmarshal(m, b)
+}
+func (m *AdGroupFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeedOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeedOperation.Merge(m, src)
+}
+func (m *AdGroupFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeedOperation.Size(m)
+}
+func (m *AdGroupFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeedOperation proto.InternalMessageInfo
+
+func (m *AdGroupFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupFeedOperation_Operation interface {
+	isAdGroupFeedOperation_Operation()
+}
+
+type AdGroupFeedOperation_Create struct {
+	Create *resources.AdGroupFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupFeedOperation_Update struct {
+	Update *resources.AdGroupFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupFeedOperation_Create) isAdGroupFeedOperation_Operation() {}
+
+func (*AdGroupFeedOperation_Update) isAdGroupFeedOperation_Operation() {}
+
+func (*AdGroupFeedOperation_Remove) isAdGroupFeedOperation_Operation() {}
+
+func (m *AdGroupFeedOperation) GetOperation() isAdGroupFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetCreate() *resources.AdGroupFeed {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetUpdate() *resources.AdGroupFeed {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupFeedOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupFeedOperation_Create)(nil),
+		(*AdGroupFeedOperation_Update)(nil),
+		(*AdGroupFeedOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group feed mutate.
+type MutateAdGroupFeedsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateAdGroupFeedsResponse) Reset()         { *m = MutateAdGroupFeedsResponse{} }
+func (m *MutateAdGroupFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedsResponse) ProtoMessage()    {}
+func (*MutateAdGroupFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c9cbcec5e3a4ac2, []int{3}
+}
+
+func (m *MutateAdGroupFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Size(m)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupFeedsResponse) GetResults() []*MutateAdGroupFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad group feed mutate.
+type MutateAdGroupFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupFeedResult) Reset()         { *m = MutateAdGroupFeedResult{} }
+func (m *MutateAdGroupFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedResult) ProtoMessage()    {}
+func (*MutateAdGroupFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4c9cbcec5e3a4ac2, []int{4}
+}
+
+func (m *MutateAdGroupFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedResult.Merge(m, src)
+}
+func (m *MutateAdGroupFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Size(m)
+}
+func (m *MutateAdGroupFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupFeedRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupFeedRequest")
+	proto.RegisterType((*MutateAdGroupFeedsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupFeedsRequest")
+	proto.RegisterType((*AdGroupFeedOperation)(nil), "google.ads.googleads.v3.services.AdGroupFeedOperation")
+	proto.RegisterType((*MutateAdGroupFeedsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupFeedsResponse")
+	proto.RegisterType((*MutateAdGroupFeedResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupFeedResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_feed_service.proto", fileDescriptor_4c9cbcec5e3a4ac2)
+}
+
+var fileDescriptor_4c9cbcec5e3a4ac2 = []byte{
+	// 760 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xbf, 0x6e, 0xd3, 0x40,
+	0x18, 0xc7, 0x0e, 0x2a, 0xf4, 0xd2, 0x16, 0xe9, 0xa0, 0x34, 0x04, 0x24, 0x22, 0x53, 0x89, 0x28,
+	0x42, 0x36, 0x24, 0xa2, 0x08, 0xb7, 0x45, 0x72, 0x24, 0x92, 0x32, 0x94, 0x56, 0xae, 0xe8, 0x00,
+	0x91, 0xac, 0xab, 0x7d, 0x09, 0x56, 0x6d, 0x9f, 0xb9, 0xb3, 0x23, 0x55, 0x55, 0x17, 0x1e, 0x80,
+	0x85, 0x37, 0x60, 0xe4, 0x0d, 0x18, 0x59, 0xbb, 0xb2, 0x75, 0x40, 0x0c, 0x88, 0x01, 0xf1, 0x0c,
+	0x08, 0xd9, 0xe7, 0x4b, 0x9c, 0x26, 0x51, 0x44, 0xb7, 0xcf, 0xf7, 0xfd, 0x7e, 0xbf, 0xef, 0xef,
+	0x9d, 0xc1, 0x46, 0x8f, 0x90, 0x9e, 0x87, 0x35, 0xe4, 0x30, 0x8d, 0x9b, 0x89, 0xd5, 0x6f, 0x68,
+	0x0c, 0xd3, 0xbe, 0x6b, 0x63, 0xa6, 0x21, 0xc7, 0xea, 0x51, 0x12, 0x87, 0x56, 0x17, 0x63, 0xc7,
+	0xca, 0x8e, 0xd5, 0x90, 0x92, 0x88, 0xc0, 0x0a, 0xa7, 0xa8, 0xc8, 0x61, 0xea, 0x80, 0xad, 0xf6,
+	0x1b, 0xaa, 0x60, 0x97, 0x1f, 0x4f, 0xd3, 0xa7, 0x98, 0x91, 0x98, 0x8e, 0x05, 0xe0, 0xc2, 0xe5,
+	0x3b, 0x82, 0x16, 0xba, 0x1a, 0x0a, 0x02, 0x12, 0xa1, 0xc8, 0x25, 0x01, 0xcb, 0xbc, 0x2b, 0x39,
+	0xaf, 0xed, 0xb9, 0x38, 0x88, 0x32, 0xc7, 0xdd, 0x9c, 0xa3, 0xeb, 0x62, 0xcf, 0xb1, 0x0e, 0xf0,
+	0x5b, 0xd4, 0x77, 0x09, 0xcd, 0x00, 0x59, 0xc2, 0x5a, 0xfa, 0x75, 0x10, 0x77, 0x33, 0x94, 0x8f,
+	0xd8, 0xe1, 0x39, 0x6d, 0x1a, 0xda, 0x1a, 0x8b, 0x50, 0x14, 0x67, 0x41, 0x15, 0x03, 0x2c, 0xb7,
+	0x71, 0x64, 0x38, 0xed, 0x24, 0xd7, 0x16, 0xc6, 0x8e, 0x89, 0xdf, 0xc5, 0x98, 0x45, 0xb0, 0x0a,
+	0x16, 0x45, 0x31, 0x56, 0x80, 0x7c, 0x5c, 0x92, 0x2a, 0x52, 0x75, 0xbe, 0x59, 0xf8, 0x61, 0xc8,
+	0xe6, 0x82, 0xf0, 0xbc, 0x44, 0x3e, 0x56, 0xfe, 0x48, 0xe0, 0xd6, 0x76, 0x1c, 0xa1, 0x08, 0xe7,
+	0x64, 0x98, 0xd0, 0x59, 0x05, 0x45, 0x3b, 0x66, 0x11, 0xf1, 0x31, 0xb5, 0x5c, 0x27, 0xaf, 0x02,
+	0xc4, 0xf9, 0x0b, 0x07, 0xbe, 0x01, 0x80, 0x84, 0x98, 0xf2, 0x7e, 0x94, 0xe4, 0x4a, 0xa1, 0x5a,
+	0xac, 0xaf, 0xa9, 0xb3, 0xe6, 0xa0, 0xe6, 0x02, 0xee, 0x08, 0x7a, 0x26, 0x3e, 0x94, 0x83, 0xf7,
+	0xc1, 0xb5, 0x10, 0xd1, 0xc8, 0x45, 0x9e, 0xd5, 0x45, 0xae, 0x17, 0x53, 0x5c, 0x2a, 0x54, 0xa4,
+	0xea, 0x55, 0x73, 0x29, 0x3b, 0x6e, 0xf1, 0x53, 0x78, 0x0f, 0x2c, 0xf6, 0x91, 0xe7, 0x3a, 0x28,
+	0xc2, 0x16, 0x09, 0xbc, 0xa3, 0xd2, 0xe5, 0x14, 0xb6, 0x20, 0x0e, 0x77, 0x02, 0xef, 0x48, 0xf9,
+	0x20, 0x83, 0x1b, 0x93, 0xe2, 0xc2, 0x75, 0x50, 0x8c, 0xc3, 0x94, 0x9b, 0x34, 0x3e, 0xe5, 0x16,
+	0xeb, 0x65, 0x51, 0x84, 0x98, 0x8d, 0xda, 0x4a, 0x66, 0xb3, 0x8d, 0xd8, 0xa1, 0x09, 0x38, 0x3c,
+	0xb1, 0xe1, 0x16, 0x98, 0xb3, 0x29, 0x46, 0x11, 0xef, 0x73, 0xb1, 0xae, 0x4e, 0x2d, 0x7e, 0xb0,
+	0x62, 0xf9, 0xea, 0xb7, 0x2e, 0x99, 0x19, 0x3f, 0x51, 0xe2, 0xba, 0x25, 0xf9, 0xa2, 0x4a, 0x9c,
+	0x0f, 0x4b, 0x60, 0x8e, 0x62, 0x9f, 0xf4, 0x79, 0xbb, 0xe6, 0x13, 0x0f, 0xff, 0x6e, 0x16, 0xc1,
+	0xfc, 0xa0, 0xbf, 0xca, 0x17, 0x09, 0x94, 0x27, 0xcd, 0x9f, 0x85, 0x24, 0x60, 0x18, 0xb6, 0xc0,
+	0xf2, 0xb9, 0xee, 0x5b, 0x98, 0x52, 0x42, 0x53, 0xd1, 0x62, 0x1d, 0x8a, 0xf4, 0x68, 0x68, 0xab,
+	0x7b, 0xe9, 0x6a, 0x9a, 0xd7, 0x47, 0xe7, 0xf2, 0x3c, 0x81, 0xc3, 0x3d, 0x70, 0x85, 0x62, 0x16,
+	0x7b, 0x91, 0xd8, 0x8f, 0xa7, 0xb3, 0xf7, 0x63, 0x2c, 0x2d, 0x33, 0x55, 0x30, 0x85, 0x92, 0xf2,
+	0x0c, 0xac, 0x4c, 0xc1, 0x24, 0xcb, 0x30, 0xe1, 0x02, 0x8c, 0xee, 0x7e, 0xfd, 0x7b, 0x01, 0xc0,
+	0x1c, 0x75, 0x8f, 0x07, 0x86, 0x5f, 0x25, 0xb0, 0x34, 0x7a, 0xad, 0xe0, 0x93, 0xd9, 0xd9, 0x4e,
+	0xbc, 0x88, 0xe5, 0xff, 0x9c, 0x9f, 0xd2, 0x3a, 0x33, 0x46, 0x13, 0x7f, 0xff, 0xed, 0xe7, 0x47,
+	0xf9, 0x21, 0x54, 0x93, 0xf7, 0xe9, 0x78, 0xc4, 0xb3, 0x29, 0x6e, 0x20, 0xd3, 0x6a, 0x1a, 0xca,
+	0x0d, 0x4f, 0xab, 0x9d, 0xc0, 0x5f, 0x12, 0x80, 0xe3, 0x63, 0x85, 0xeb, 0x17, 0xe8, 0xba, 0x78,
+	0x0c, 0xca, 0x1b, 0x17, 0x23, 0xf3, 0x4d, 0x52, 0x5e, 0x9d, 0x19, 0x37, 0x73, 0x6f, 0xc9, 0x83,
+	0xe1, 0x15, 0x4f, 0x4b, 0x5c, 0x53, 0x1e, 0x25, 0x25, 0x0e, 0x6b, 0x3a, 0xce, 0x81, 0x37, 0x6b,
+	0x27, 0x23, 0x15, 0xea, 0x7e, 0x1a, 0x47, 0x97, 0x6a, 0xe5, 0xdb, 0xa7, 0x46, 0x69, 0x98, 0x4b,
+	0x66, 0x85, 0x2e, 0x53, 0x6d, 0xe2, 0x37, 0xff, 0x4a, 0x60, 0xd5, 0x26, 0xfe, 0xcc, 0xbc, 0x9b,
+	0x2b, 0xe3, 0x6b, 0xb0, 0x9b, 0x5c, 0xf9, 0x5d, 0xe9, 0xf5, 0x56, 0x46, 0xee, 0x11, 0x0f, 0x05,
+	0x3d, 0x95, 0xd0, 0x9e, 0xd6, 0xc3, 0x41, 0xfa, 0x20, 0x68, 0xc3, 0x70, 0xd3, 0x7f, 0x56, 0xeb,
+	0xc2, 0xf8, 0x24, 0x17, 0xda, 0x86, 0xf1, 0x59, 0xae, 0xb4, 0xb9, 0xa0, 0xe1, 0x30, 0x95, 0x9b,
+	0x89, 0xb5, 0xdf, 0x50, 0xb3, 0xc0, 0xec, 0x54, 0x40, 0x3a, 0x86, 0xc3, 0x3a, 0x03, 0x48, 0x67,
+	0xbf, 0xd1, 0x11, 0x90, 0xdf, 0xf2, 0x2a, 0x3f, 0xd7, 0x75, 0xc3, 0x61, 0xba, 0x3e, 0x00, 0xe9,
+	0xfa, 0x7e, 0x43, 0xd7, 0x05, 0xec, 0x60, 0x2e, 0xcd, 0xb3, 0xf1, 0x2f, 0x00, 0x00, 0xff, 0xff,
+	0x4e, 0x99, 0x27, 0xaa, 0x53, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupFeedServiceClient is the client API for AdGroupFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupFeedServiceClient interface {
+	// Returns the requested ad group feed in full detail.
+	GetAdGroupFeed(ctx context.Context, in *GetAdGroupFeedRequest, opts ...grpc.CallOption) (*resources.AdGroupFeed, error)
+	// Creates, updates, or removes ad group feeds. Operation statuses are
+	// returned.
+	MutateAdGroupFeeds(ctx context.Context, in *MutateAdGroupFeedsRequest, opts ...grpc.CallOption) (*MutateAdGroupFeedsResponse, error)
+}
+
+type adGroupFeedServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupFeedServiceClient(cc grpc.ClientConnInterface) AdGroupFeedServiceClient {
+	return &adGroupFeedServiceClient{cc}
+}
+
+func (c *adGroupFeedServiceClient) GetAdGroupFeed(ctx context.Context, in *GetAdGroupFeedRequest, opts ...grpc.CallOption) (*resources.AdGroupFeed, error) {
+	out := new(resources.AdGroupFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupFeedService/GetAdGroupFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupFeedServiceClient) MutateAdGroupFeeds(ctx context.Context, in *MutateAdGroupFeedsRequest, opts ...grpc.CallOption) (*MutateAdGroupFeedsResponse, error) {
+	out := new(MutateAdGroupFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupFeedService/MutateAdGroupFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupFeedServiceServer is the server API for AdGroupFeedService service.
+type AdGroupFeedServiceServer interface {
+	// Returns the requested ad group feed in full detail.
+	GetAdGroupFeed(context.Context, *GetAdGroupFeedRequest) (*resources.AdGroupFeed, error)
+	// Creates, updates, or removes ad group feeds. Operation statuses are
+	// returned.
+	MutateAdGroupFeeds(context.Context, *MutateAdGroupFeedsRequest) (*MutateAdGroupFeedsResponse, error)
+}
+
+// UnimplementedAdGroupFeedServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupFeedServiceServer struct {
+}
+
+func (*UnimplementedAdGroupFeedServiceServer) GetAdGroupFeed(ctx context.Context, req *GetAdGroupFeedRequest) (*resources.AdGroupFeed, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupFeed not implemented")
+}
+func (*UnimplementedAdGroupFeedServiceServer) MutateAdGroupFeeds(ctx context.Context, req *MutateAdGroupFeedsRequest) (*MutateAdGroupFeedsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupFeeds not implemented")
+}
+
+func RegisterAdGroupFeedServiceServer(s *grpc.Server, srv AdGroupFeedServiceServer) {
+	s.RegisterService(&_AdGroupFeedService_serviceDesc, srv)
+}
+
+func _AdGroupFeedService_GetAdGroupFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupFeedServiceServer).GetAdGroupFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupFeedService/GetAdGroupFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupFeedServiceServer).GetAdGroupFeed(ctx, req.(*GetAdGroupFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupFeedService_MutateAdGroupFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupFeedServiceServer).MutateAdGroupFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupFeedService/MutateAdGroupFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupFeedServiceServer).MutateAdGroupFeeds(ctx, req.(*MutateAdGroupFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupFeedService",
+	HandlerType: (*AdGroupFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupFeed",
+			Handler:    _AdGroupFeedService_GetAdGroupFeed_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupFeeds",
+			Handler:    _AdGroupFeedService_MutateAdGroupFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_feed_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_label_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_label_service.pb.go
new file mode 100644
index 0000000..3dd2d5b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_label_service.pb.go
@@ -0,0 +1,502 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupLabelService.GetAdGroupLabel][google.ads.googleads.v3.services.AdGroupLabelService.GetAdGroupLabel].
+type GetAdGroupLabelRequest struct {
+	// Required. The resource name of the ad group label to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupLabelRequest) Reset()         { *m = GetAdGroupLabelRequest{} }
+func (m *GetAdGroupLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupLabelRequest) ProtoMessage()    {}
+func (*GetAdGroupLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7054d11c8a405fc3, []int{0}
+}
+
+func (m *GetAdGroupLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupLabelRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupLabelRequest.Merge(m, src)
+}
+func (m *GetAdGroupLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupLabelRequest.Size(m)
+}
+func (m *GetAdGroupLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupLabelRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupLabelService.MutateAdGroupLabels][google.ads.googleads.v3.services.AdGroupLabelService.MutateAdGroupLabels].
+type MutateAdGroupLabelsRequest struct {
+	// Required. ID of the customer whose ad group labels are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on ad group labels.
+	Operations []*AdGroupLabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupLabelsRequest) Reset()         { *m = MutateAdGroupLabelsRequest{} }
+func (m *MutateAdGroupLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupLabelsRequest) ProtoMessage()    {}
+func (*MutateAdGroupLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7054d11c8a405fc3, []int{1}
+}
+
+func (m *MutateAdGroupLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupLabelsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupLabelsRequest.Size(m)
+}
+func (m *MutateAdGroupLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupLabelsRequest) GetOperations() []*AdGroupLabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on an ad group label.
+type AdGroupLabelOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupLabelOperation_Create
+	//	*AdGroupLabelOperation_Remove
+	Operation            isAdGroupLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *AdGroupLabelOperation) Reset()         { *m = AdGroupLabelOperation{} }
+func (m *AdGroupLabelOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupLabelOperation) ProtoMessage()    {}
+func (*AdGroupLabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7054d11c8a405fc3, []int{2}
+}
+
+func (m *AdGroupLabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupLabelOperation.Unmarshal(m, b)
+}
+func (m *AdGroupLabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupLabelOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupLabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupLabelOperation.Merge(m, src)
+}
+func (m *AdGroupLabelOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupLabelOperation.Size(m)
+}
+func (m *AdGroupLabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupLabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupLabelOperation proto.InternalMessageInfo
+
+type isAdGroupLabelOperation_Operation interface {
+	isAdGroupLabelOperation_Operation()
+}
+
+type AdGroupLabelOperation_Create struct {
+	Create *resources.AdGroupLabel `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupLabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupLabelOperation_Create) isAdGroupLabelOperation_Operation() {}
+
+func (*AdGroupLabelOperation_Remove) isAdGroupLabelOperation_Operation() {}
+
+func (m *AdGroupLabelOperation) GetOperation() isAdGroupLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupLabelOperation) GetCreate() *resources.AdGroupLabel {
+	if x, ok := m.GetOperation().(*AdGroupLabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupLabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupLabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupLabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupLabelOperation_Create)(nil),
+		(*AdGroupLabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group labels mutate.
+type MutateAdGroupLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateAdGroupLabelsResponse) Reset()         { *m = MutateAdGroupLabelsResponse{} }
+func (m *MutateAdGroupLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupLabelsResponse) ProtoMessage()    {}
+func (*MutateAdGroupLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7054d11c8a405fc3, []int{3}
+}
+
+func (m *MutateAdGroupLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupLabelsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupLabelsResponse.Size(m)
+}
+func (m *MutateAdGroupLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupLabelsResponse) GetResults() []*MutateAdGroupLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for an ad group label mutate.
+type MutateAdGroupLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupLabelResult) Reset()         { *m = MutateAdGroupLabelResult{} }
+func (m *MutateAdGroupLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupLabelResult) ProtoMessage()    {}
+func (*MutateAdGroupLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7054d11c8a405fc3, []int{4}
+}
+
+func (m *MutateAdGroupLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupLabelResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupLabelResult.Merge(m, src)
+}
+func (m *MutateAdGroupLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupLabelResult.Size(m)
+}
+func (m *MutateAdGroupLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupLabelResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupLabelRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupLabelRequest")
+	proto.RegisterType((*MutateAdGroupLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupLabelsRequest")
+	proto.RegisterType((*AdGroupLabelOperation)(nil), "google.ads.googleads.v3.services.AdGroupLabelOperation")
+	proto.RegisterType((*MutateAdGroupLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupLabelsResponse")
+	proto.RegisterType((*MutateAdGroupLabelResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_label_service.proto", fileDescriptor_7054d11c8a405fc3)
+}
+
+var fileDescriptor_7054d11c8a405fc3 = []byte{
+	// 709 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6b, 0x13, 0x41,
+	0x14, 0x77, 0x37, 0x52, 0xed, 0xa4, 0xb5, 0x30, 0xa5, 0x75, 0x49, 0x05, 0xc3, 0x5a, 0x30, 0x04,
+	0xd9, 0xc5, 0x04, 0xac, 0xac, 0x06, 0xd9, 0x80, 0x4d, 0x0b, 0x6a, 0xcb, 0x56, 0x72, 0x90, 0xc0,
+	0x32, 0xdd, 0x9d, 0xae, 0x0b, 0xbb, 0x3b, 0xeb, 0xcc, 0x6c, 0xa0, 0x94, 0x5e, 0xbc, 0x79, 0xf6,
+	0x1b, 0x78, 0xf4, 0x2b, 0x78, 0xf6, 0xd2, 0xab, 0xb7, 0x9e, 0x3c, 0x08, 0x42, 0x0f, 0x7e, 0x05,
+	0x65, 0xff, 0x4c, 0xb2, 0x69, 0x13, 0x82, 0xbd, 0xbd, 0xbc, 0x3f, 0xbf, 0xf7, 0xfb, 0xbd, 0xf7,
+	0x66, 0x03, 0x3a, 0x1e, 0x21, 0x5e, 0x80, 0x75, 0xe4, 0x32, 0x3d, 0x37, 0x53, 0x6b, 0xd8, 0xd6,
+	0x19, 0xa6, 0x43, 0xdf, 0xc1, 0x4c, 0x47, 0xae, 0xed, 0x51, 0x92, 0xc4, 0x76, 0x80, 0x0e, 0x71,
+	0x60, 0x17, 0x7e, 0x2d, 0xa6, 0x84, 0x13, 0x58, 0xcf, 0x6b, 0x34, 0xe4, 0x32, 0x6d, 0x54, 0xae,
+	0x0d, 0xdb, 0x9a, 0x28, 0xaf, 0x3d, 0x99, 0xd5, 0x80, 0x62, 0x46, 0x12, 0x7a, 0xb5, 0x43, 0x8e,
+	0x5c, 0xbb, 0x27, 0xea, 0x62, 0x5f, 0x47, 0x51, 0x44, 0x38, 0xe2, 0x3e, 0x89, 0x58, 0x11, 0xbd,
+	0x5b, 0x8a, 0x3a, 0x81, 0x8f, 0x23, 0x5e, 0x04, 0xee, 0x97, 0x02, 0x47, 0x3e, 0x0e, 0x5c, 0xfb,
+	0x10, 0xbf, 0x47, 0x43, 0x9f, 0xd0, 0x4b, 0x95, 0x34, 0x76, 0x74, 0xc6, 0x11, 0x4f, 0x0a, 0x48,
+	0xb5, 0x0b, 0xd6, 0x7b, 0x98, 0x9b, 0x6e, 0x2f, 0xa5, 0xf2, 0x2a, 0x65, 0x62, 0xe1, 0x0f, 0x09,
+	0x66, 0x1c, 0x36, 0xc0, 0xb2, 0x20, 0x6b, 0x47, 0x28, 0xc4, 0x8a, 0x54, 0x97, 0x1a, 0x8b, 0xdd,
+	0xca, 0x4f, 0x53, 0xb6, 0x96, 0x44, 0xe4, 0x0d, 0x0a, 0xb1, 0xfa, 0x47, 0x02, 0xb5, 0xd7, 0x09,
+	0x47, 0x1c, 0x97, 0x71, 0x98, 0x00, 0xda, 0x04, 0x55, 0x27, 0x61, 0x9c, 0x84, 0x98, 0xda, 0xbe,
+	0x5b, 0x86, 0x01, 0xc2, 0xbf, 0xeb, 0xc2, 0x01, 0x00, 0x24, 0xc6, 0x34, 0xd7, 0xab, 0xc8, 0xf5,
+	0x4a, 0xa3, 0xda, 0xda, 0xd2, 0xe6, 0x0d, 0x5a, 0x2b, 0x77, 0xdc, 0x13, 0xf5, 0x05, 0xfa, 0x18,
+	0x0f, 0x3e, 0x04, 0x2b, 0x31, 0xa2, 0xdc, 0x47, 0x81, 0x7d, 0x84, 0xfc, 0x20, 0xa1, 0x58, 0xa9,
+	0xd4, 0xa5, 0xc6, 0x6d, 0xeb, 0x4e, 0xe1, 0xde, 0xce, 0xbd, 0xf0, 0x01, 0x58, 0x1e, 0xa2, 0xc0,
+	0x77, 0x11, 0xc7, 0x36, 0x89, 0x82, 0x63, 0xe5, 0x66, 0x96, 0xb6, 0x24, 0x9c, 0x7b, 0x51, 0x70,
+	0xac, 0x7e, 0x92, 0xc0, 0xda, 0xd4, 0xc6, 0x70, 0x17, 0x2c, 0x38, 0x14, 0x23, 0x9e, 0x4f, 0xab,
+	0xda, 0xd2, 0x67, 0x2a, 0x18, 0x1d, 0xc2, 0x84, 0x84, 0x9d, 0x1b, 0x56, 0x01, 0x00, 0x15, 0xb0,
+	0x40, 0x71, 0x48, 0x86, 0x58, 0x91, 0xd3, 0x89, 0xa5, 0x91, 0xfc, 0x77, 0xb7, 0x0a, 0x16, 0x47,
+	0xd2, 0xd4, 0x6f, 0x12, 0xd8, 0x98, 0x3a, 0x7c, 0x16, 0x93, 0x88, 0x61, 0xb8, 0x0d, 0xd6, 0x2e,
+	0x29, 0xb7, 0x31, 0xa5, 0x84, 0x66, 0xfa, 0xab, 0x2d, 0x28, 0x08, 0xd2, 0xd8, 0xd1, 0x0e, 0xb2,
+	0xcb, 0xb0, 0x56, 0x27, 0x67, 0xf2, 0x32, 0x4d, 0x87, 0x6f, 0xc1, 0x2d, 0x8a, 0x59, 0x12, 0x70,
+	0xb1, 0x1c, 0x63, 0xfe, 0x72, 0xae, 0xf2, 0xb2, 0x32, 0x08, 0x4b, 0x40, 0xa9, 0x2f, 0x80, 0x32,
+	0x2b, 0x29, 0x5d, 0xc5, 0x94, 0x03, 0x9c, 0xbc, 0xbd, 0xd6, 0xef, 0x0a, 0x58, 0x2d, 0xd7, 0x1e,
+	0xe4, 0xbd, 0xe1, 0x77, 0x09, 0xac, 0x5c, 0x3a, 0x6c, 0xf8, 0x74, 0x3e, 0xe3, 0xe9, 0x6f, 0xa1,
+	0xf6, 0xbf, 0x6b, 0x54, 0x7b, 0xe7, 0xe6, 0x24, 0xf9, 0x8f, 0x3f, 0x7e, 0x7d, 0x96, 0x1f, 0x43,
+	0x3d, 0xfd, 0x06, 0x9c, 0x4c, 0x44, 0x3a, 0xe2, 0x11, 0x30, 0xbd, 0xa9, 0xa3, 0xf2, 0x0e, 0xf5,
+	0xe6, 0x29, 0xbc, 0x90, 0xc0, 0xea, 0x94, 0xf5, 0xc2, 0xe7, 0xd7, 0x99, 0xbe, 0x78, 0x92, 0xb5,
+	0xce, 0x35, 0xab, 0xf3, 0x9b, 0x52, 0xfb, 0xe7, 0xe6, 0x7a, 0xe9, 0x49, 0x3f, 0x1a, 0x3f, 0xb4,
+	0x4c, 0xe6, 0x96, 0xda, 0x4a, 0x65, 0x8e, 0x75, 0x9d, 0x94, 0x92, 0x3b, 0xcd, 0xd3, 0x49, 0x95,
+	0x46, 0x98, 0x75, 0x32, 0xa4, 0x66, 0x6d, 0xe3, 0xcc, 0x54, 0xc6, 0x6c, 0x0a, 0x2b, 0xf6, 0x99,
+	0xe6, 0x90, 0xb0, 0xfb, 0x57, 0x02, 0x9b, 0x0e, 0x09, 0xe7, 0x32, 0xef, 0x2a, 0x53, 0xee, 0x61,
+	0x3f, 0xfd, 0xd8, 0xed, 0x4b, 0xef, 0x76, 0x8a, 0x6a, 0x8f, 0x04, 0x28, 0xf2, 0x34, 0x42, 0x3d,
+	0xdd, 0xc3, 0x51, 0xf6, 0x29, 0xd4, 0xc7, 0xfd, 0x66, 0xff, 0x2f, 0x3c, 0x13, 0xc6, 0x17, 0xb9,
+	0xd2, 0x33, 0xcd, 0xaf, 0x72, 0xbd, 0x97, 0x03, 0x9a, 0x2e, 0xd3, 0x72, 0x33, 0xb5, 0xfa, 0x6d,
+	0xad, 0x68, 0xcc, 0xce, 0x44, 0xca, 0xc0, 0x74, 0xd9, 0x60, 0x94, 0x32, 0xe8, 0xb7, 0x07, 0x22,
+	0xe5, 0x42, 0xde, 0xcc, 0xfd, 0x86, 0x61, 0xba, 0xcc, 0x30, 0x46, 0x49, 0x86, 0xd1, 0x6f, 0x1b,
+	0x86, 0x48, 0x3b, 0x5c, 0xc8, 0x78, 0xb6, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x2f, 0xf4, 0xfc,
+	0x5b, 0xbe, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupLabelServiceClient is the client API for AdGroupLabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupLabelServiceClient interface {
+	// Returns the requested ad group label in full detail.
+	GetAdGroupLabel(ctx context.Context, in *GetAdGroupLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupLabel, error)
+	// Creates and removes ad group labels.
+	// Operation statuses are returned.
+	MutateAdGroupLabels(ctx context.Context, in *MutateAdGroupLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupLabelsResponse, error)
+}
+
+type adGroupLabelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupLabelServiceClient(cc grpc.ClientConnInterface) AdGroupLabelServiceClient {
+	return &adGroupLabelServiceClient{cc}
+}
+
+func (c *adGroupLabelServiceClient) GetAdGroupLabel(ctx context.Context, in *GetAdGroupLabelRequest, opts ...grpc.CallOption) (*resources.AdGroupLabel, error) {
+	out := new(resources.AdGroupLabel)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupLabelService/GetAdGroupLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupLabelServiceClient) MutateAdGroupLabels(ctx context.Context, in *MutateAdGroupLabelsRequest, opts ...grpc.CallOption) (*MutateAdGroupLabelsResponse, error) {
+	out := new(MutateAdGroupLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupLabelService/MutateAdGroupLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupLabelServiceServer is the server API for AdGroupLabelService service.
+type AdGroupLabelServiceServer interface {
+	// Returns the requested ad group label in full detail.
+	GetAdGroupLabel(context.Context, *GetAdGroupLabelRequest) (*resources.AdGroupLabel, error)
+	// Creates and removes ad group labels.
+	// Operation statuses are returned.
+	MutateAdGroupLabels(context.Context, *MutateAdGroupLabelsRequest) (*MutateAdGroupLabelsResponse, error)
+}
+
+// UnimplementedAdGroupLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupLabelServiceServer struct {
+}
+
+func (*UnimplementedAdGroupLabelServiceServer) GetAdGroupLabel(ctx context.Context, req *GetAdGroupLabelRequest) (*resources.AdGroupLabel, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroupLabel not implemented")
+}
+func (*UnimplementedAdGroupLabelServiceServer) MutateAdGroupLabels(ctx context.Context, req *MutateAdGroupLabelsRequest) (*MutateAdGroupLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroupLabels not implemented")
+}
+
+func RegisterAdGroupLabelServiceServer(s *grpc.Server, srv AdGroupLabelServiceServer) {
+	s.RegisterService(&_AdGroupLabelService_serviceDesc, srv)
+}
+
+func _AdGroupLabelService_GetAdGroupLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupLabelServiceServer).GetAdGroupLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupLabelService/GetAdGroupLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupLabelServiceServer).GetAdGroupLabel(ctx, req.(*GetAdGroupLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupLabelService_MutateAdGroupLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupLabelServiceServer).MutateAdGroupLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupLabelService/MutateAdGroupLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupLabelServiceServer).MutateAdGroupLabels(ctx, req.(*MutateAdGroupLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupLabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupLabelService",
+	HandlerType: (*AdGroupLabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupLabel",
+			Handler:    _AdGroupLabelService_GetAdGroupLabel_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupLabels",
+			Handler:    _AdGroupLabelService_MutateAdGroupLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_service.pb.go
new file mode 100644
index 0000000..fb40ef3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_service.pb.go
@@ -0,0 +1,527 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupService.GetAdGroup][google.ads.googleads.v3.services.AdGroupService.GetAdGroup].
+type GetAdGroupRequest struct {
+	// Required. The resource name of the ad group to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupRequest) Reset()         { *m = GetAdGroupRequest{} }
+func (m *GetAdGroupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupRequest) ProtoMessage()    {}
+func (*GetAdGroupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4788d5c8fc9bdd61, []int{0}
+}
+
+func (m *GetAdGroupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupRequest.Merge(m, src)
+}
+func (m *GetAdGroupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupRequest.Size(m)
+}
+func (m *GetAdGroupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupService.MutateAdGroups][google.ads.googleads.v3.services.AdGroupService.MutateAdGroups].
+type MutateAdGroupsRequest struct {
+	// Required. The ID of the customer whose ad groups are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ad groups.
+	Operations []*AdGroupOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupsRequest) Reset()         { *m = MutateAdGroupsRequest{} }
+func (m *MutateAdGroupsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupsRequest) ProtoMessage()    {}
+func (*MutateAdGroupsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4788d5c8fc9bdd61, []int{1}
+}
+
+func (m *MutateAdGroupsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupsRequest.Merge(m, src)
+}
+func (m *MutateAdGroupsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupsRequest.Size(m)
+}
+func (m *MutateAdGroupsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupsRequest) GetOperations() []*AdGroupOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdGroupsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdGroupsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an ad group.
+type AdGroupOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupOperation_Create
+	//	*AdGroupOperation_Update
+	//	*AdGroupOperation_Remove
+	Operation            isAdGroupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *AdGroupOperation) Reset()         { *m = AdGroupOperation{} }
+func (m *AdGroupOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupOperation) ProtoMessage()    {}
+func (*AdGroupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4788d5c8fc9bdd61, []int{2}
+}
+
+func (m *AdGroupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupOperation.Unmarshal(m, b)
+}
+func (m *AdGroupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupOperation.Marshal(b, m, deterministic)
+}
+func (m *AdGroupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupOperation.Merge(m, src)
+}
+func (m *AdGroupOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupOperation.Size(m)
+}
+func (m *AdGroupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupOperation proto.InternalMessageInfo
+
+func (m *AdGroupOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupOperation_Operation interface {
+	isAdGroupOperation_Operation()
+}
+
+type AdGroupOperation_Create struct {
+	Create *resources.AdGroup `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupOperation_Update struct {
+	Update *resources.AdGroup `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupOperation_Create) isAdGroupOperation_Operation() {}
+
+func (*AdGroupOperation_Update) isAdGroupOperation_Operation() {}
+
+func (*AdGroupOperation_Remove) isAdGroupOperation_Operation() {}
+
+func (m *AdGroupOperation) GetOperation() isAdGroupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetCreate() *resources.AdGroup {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetUpdate() *resources.AdGroup {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdGroupOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdGroupOperation_Create)(nil),
+		(*AdGroupOperation_Update)(nil),
+		(*AdGroupOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad group mutate.
+type MutateAdGroupsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdGroupResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *MutateAdGroupsResponse) Reset()         { *m = MutateAdGroupsResponse{} }
+func (m *MutateAdGroupsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupsResponse) ProtoMessage()    {}
+func (*MutateAdGroupsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4788d5c8fc9bdd61, []int{3}
+}
+
+func (m *MutateAdGroupsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupsResponse.Merge(m, src)
+}
+func (m *MutateAdGroupsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupsResponse.Size(m)
+}
+func (m *MutateAdGroupsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdGroupsResponse) GetResults() []*MutateAdGroupResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad group mutate.
+type MutateAdGroupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupResult) Reset()         { *m = MutateAdGroupResult{} }
+func (m *MutateAdGroupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupResult) ProtoMessage()    {}
+func (*MutateAdGroupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4788d5c8fc9bdd61, []int{4}
+}
+
+func (m *MutateAdGroupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdGroupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupResult.Merge(m, src)
+}
+func (m *MutateAdGroupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupResult.Size(m)
+}
+func (m *MutateAdGroupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupRequest")
+	proto.RegisterType((*MutateAdGroupsRequest)(nil), "google.ads.googleads.v3.services.MutateAdGroupsRequest")
+	proto.RegisterType((*AdGroupOperation)(nil), "google.ads.googleads.v3.services.AdGroupOperation")
+	proto.RegisterType((*MutateAdGroupsResponse)(nil), "google.ads.googleads.v3.services.MutateAdGroupsResponse")
+	proto.RegisterType((*MutateAdGroupResult)(nil), "google.ads.googleads.v3.services.MutateAdGroupResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_service.proto", fileDescriptor_4788d5c8fc9bdd61)
+}
+
+var fileDescriptor_4788d5c8fc9bdd61 = []byte{
+	// 750 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x4f, 0xd4, 0x4c,
+	0x18, 0x7f, 0xdb, 0x7d, 0xc3, 0xfb, 0x32, 0x0b, 0xa8, 0x43, 0xc0, 0xcd, 0x6a, 0xe2, 0xa6, 0x92,
+	0xb8, 0xd9, 0x60, 0x6b, 0x76, 0x63, 0x30, 0x25, 0x1c, 0xba, 0x51, 0x16, 0x0f, 0x08, 0x96, 0x04,
+	0x13, 0xb3, 0x49, 0x33, 0xb4, 0xc3, 0xda, 0xd0, 0x76, 0xea, 0xcc, 0x74, 0x13, 0x42, 0xb8, 0xf0,
+	0x15, 0xfc, 0x06, 0x1e, 0xbd, 0x71, 0xf5, 0x23, 0x70, 0x35, 0xf1, 0xc0, 0xc9, 0x03, 0x27, 0x3f,
+	0x82, 0x27, 0xd3, 0xce, 0xcc, 0xfe, 0x13, 0xb2, 0xc1, 0xdb, 0xb3, 0xf3, 0xfc, 0x7e, 0xbf, 0xe7,
+	0x7f, 0x17, 0xac, 0xf5, 0x08, 0xe9, 0x45, 0xd8, 0x42, 0x01, 0xb3, 0x84, 0x99, 0x5b, 0xfd, 0x96,
+	0xc5, 0x30, 0xed, 0x87, 0x3e, 0x66, 0x16, 0x0a, 0xbc, 0x1e, 0x25, 0x59, 0xea, 0xc9, 0x17, 0x33,
+	0xa5, 0x84, 0x13, 0x58, 0x13, 0x68, 0x13, 0x05, 0xcc, 0x1c, 0x10, 0xcd, 0x7e, 0xcb, 0x54, 0xc4,
+	0xea, 0xb3, 0x9b, 0xa4, 0x29, 0x66, 0x24, 0xa3, 0xa3, 0xda, 0x42, 0xb3, 0xfa, 0x50, 0x31, 0xd2,
+	0xd0, 0x42, 0x49, 0x42, 0x38, 0xe2, 0x21, 0x49, 0x98, 0xf4, 0xde, 0x1f, 0xf1, 0xfa, 0x51, 0x88,
+	0x13, 0x2e, 0x1d, 0x8f, 0x46, 0x1c, 0x87, 0x21, 0x8e, 0x02, 0xef, 0x00, 0x7f, 0x40, 0xfd, 0x90,
+	0x50, 0x09, 0x90, 0xb9, 0x5a, 0xc5, 0xaf, 0x83, 0xec, 0x50, 0xa2, 0x62, 0xc4, 0x8e, 0x26, 0xb4,
+	0x69, 0xea, 0x5b, 0x8c, 0x23, 0x9e, 0xc9, 0xa0, 0xc6, 0x06, 0xb8, 0xd7, 0xc1, 0xdc, 0x09, 0x3a,
+	0x79, 0x9a, 0x2e, 0xfe, 0x98, 0x61, 0xc6, 0x61, 0x1d, 0xcc, 0xab, 0x1a, 0xbc, 0x04, 0xc5, 0xb8,
+	0xa2, 0xd5, 0xb4, 0xfa, 0x6c, 0xbb, 0xf4, 0xc3, 0xd1, 0xdd, 0x39, 0xe5, 0x79, 0x83, 0x62, 0x6c,
+	0x5c, 0x69, 0x60, 0x69, 0x3b, 0xe3, 0x88, 0x63, 0x29, 0xc1, 0x94, 0xc6, 0x0a, 0x28, 0xfb, 0x19,
+	0xe3, 0x24, 0xc6, 0xd4, 0x0b, 0x83, 0x51, 0x05, 0xa0, 0xde, 0x5f, 0x07, 0xf0, 0x1d, 0x00, 0x24,
+	0xc5, 0x54, 0xf4, 0xa1, 0xa2, 0xd7, 0x4a, 0xf5, 0x72, 0xb3, 0x69, 0x4e, 0x6b, 0xbd, 0x29, 0x83,
+	0xed, 0x28, 0xaa, 0x14, 0x1e, 0x4a, 0xc1, 0x27, 0xe0, 0x4e, 0x8a, 0x28, 0x0f, 0x51, 0xe4, 0x1d,
+	0xa2, 0x30, 0xca, 0x28, 0xae, 0x94, 0x6a, 0x5a, 0xfd, 0x7f, 0x77, 0x41, 0x3e, 0x6f, 0x8a, 0x57,
+	0xf8, 0x18, 0xcc, 0xf7, 0x51, 0x14, 0x06, 0x88, 0x63, 0x8f, 0x24, 0xd1, 0x71, 0xe5, 0xdf, 0x02,
+	0x36, 0xa7, 0x1e, 0x77, 0x92, 0xe8, 0xd8, 0x38, 0xd3, 0xc1, 0xdd, 0xc9, 0x98, 0x70, 0x1d, 0x94,
+	0xb3, 0xb4, 0xe0, 0xe5, 0x8d, 0x2e, 0x78, 0xe5, 0x66, 0x55, 0x25, 0xaf, 0x66, 0x61, 0x6e, 0xe6,
+	0xb3, 0xd8, 0x46, 0xec, 0xc8, 0x05, 0x02, 0x9e, 0xdb, 0xf0, 0x25, 0x98, 0xf1, 0x29, 0x46, 0x5c,
+	0xf4, 0xb6, 0xdc, 0x6c, 0xdc, 0x58, 0xf4, 0x60, 0x9b, 0x54, 0xd5, 0x5b, 0xff, 0xb8, 0x92, 0x9b,
+	0xab, 0x08, 0xcd, 0x8a, 0xfe, 0x37, 0x2a, 0x82, 0x0b, 0x2b, 0x60, 0x86, 0xe2, 0x98, 0xf4, 0x45,
+	0x8b, 0x66, 0x73, 0x8f, 0xf8, 0xdd, 0x2e, 0x83, 0xd9, 0x41, 0x4f, 0x8d, 0x73, 0x0d, 0x2c, 0x4f,
+	0xce, 0x9a, 0xa5, 0x24, 0x61, 0x18, 0x6e, 0x82, 0xa5, 0x89, 0x6e, 0x7b, 0x98, 0x52, 0x42, 0x0b,
+	0xc1, 0x72, 0x13, 0xaa, 0xb4, 0x68, 0xea, 0x9b, 0x7b, 0xc5, 0xfa, 0xb9, 0x8b, 0xe3, 0x73, 0x78,
+	0x95, 0xc3, 0xe1, 0x0e, 0xf8, 0x8f, 0x62, 0x96, 0x45, 0x5c, 0xed, 0xc2, 0xf3, 0xe9, 0xbb, 0x30,
+	0x96, 0x92, 0x5b, 0xb0, 0x5d, 0xa5, 0x62, 0xd8, 0x60, 0xf1, 0x1a, 0x7f, 0x3e, 0xf4, 0x6b, 0x16,
+	0x7c, 0x7c, 0xb7, 0x9b, 0x5f, 0x4b, 0x60, 0x41, 0xd2, 0xf6, 0x44, 0x30, 0x78, 0xae, 0x01, 0x30,
+	0x3c, 0x17, 0xd8, 0x9a, 0x9e, 0xdd, 0x1f, 0xc7, 0x55, 0xbd, 0xc5, 0x8c, 0x8c, 0xf6, 0xa5, 0x33,
+	0x9e, 0xe8, 0xd9, 0xb7, 0xab, 0x4f, 0xfa, 0x2a, 0x6c, 0xe4, 0x9f, 0x99, 0x93, 0x31, 0xcf, 0x86,
+	0xba, 0x2a, 0x66, 0x35, 0x2c, 0x24, 0x07, 0x64, 0x35, 0x4e, 0xe1, 0x77, 0x0d, 0x2c, 0x8c, 0x8f,
+	0x0d, 0xae, 0xdd, 0xb2, 0xab, 0xea, 0xa8, 0xab, 0x2f, 0x6e, 0x4f, 0x14, 0x1b, 0x62, 0xbc, 0xbd,
+	0x74, 0x96, 0x47, 0xbe, 0x07, 0xab, 0xc3, 0x53, 0x2d, 0x4a, 0x6a, 0x1a, 0x4f, 0xf3, 0x92, 0x86,
+	0x35, 0x9c, 0x8c, 0x80, 0x37, 0x1a, 0xa7, 0x83, 0x8a, 0xec, 0xb8, 0xd0, 0xb7, 0xb5, 0x46, 0xf5,
+	0xc1, 0x85, 0x53, 0x19, 0xe6, 0x20, 0xad, 0x34, 0x64, 0xa6, 0x4f, 0xe2, 0xf6, 0x2f, 0x0d, 0xac,
+	0xf8, 0x24, 0x9e, 0x9a, 0x6f, 0x7b, 0x71, 0x7c, 0xc4, 0xbb, 0xf9, 0xd9, 0xee, 0x6a, 0xef, 0xb7,
+	0x24, 0xb1, 0x47, 0x22, 0x94, 0xf4, 0x4c, 0x42, 0x7b, 0x56, 0x0f, 0x27, 0xc5, 0x51, 0x5b, 0xc3,
+	0x50, 0x37, 0xff, 0xad, 0xac, 0x2b, 0xe3, 0xb3, 0x5e, 0xea, 0x38, 0xce, 0x17, 0xbd, 0xd6, 0x11,
+	0x82, 0x4e, 0xc0, 0x4c, 0x61, 0xe6, 0xd6, 0x7e, 0xcb, 0x94, 0x81, 0xd9, 0x85, 0x82, 0x74, 0x9d,
+	0x80, 0x75, 0x07, 0x90, 0xee, 0x7e, 0xab, 0xab, 0x20, 0x3f, 0xf5, 0x15, 0xf1, 0x6e, 0xdb, 0x4e,
+	0xc0, 0x6c, 0x7b, 0x00, 0xb2, 0xed, 0xfd, 0x96, 0x6d, 0x2b, 0xd8, 0xc1, 0x4c, 0x91, 0x67, 0xeb,
+	0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xa1, 0x1e, 0x4e, 0xfd, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupServiceClient is the client API for AdGroupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupServiceClient interface {
+	// Returns the requested ad group in full detail.
+	GetAdGroup(ctx context.Context, in *GetAdGroupRequest, opts ...grpc.CallOption) (*resources.AdGroup, error)
+	// Creates, updates, or removes ad groups. Operation statuses are returned.
+	MutateAdGroups(ctx context.Context, in *MutateAdGroupsRequest, opts ...grpc.CallOption) (*MutateAdGroupsResponse, error)
+}
+
+type adGroupServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupServiceClient(cc grpc.ClientConnInterface) AdGroupServiceClient {
+	return &adGroupServiceClient{cc}
+}
+
+func (c *adGroupServiceClient) GetAdGroup(ctx context.Context, in *GetAdGroupRequest, opts ...grpc.CallOption) (*resources.AdGroup, error) {
+	out := new(resources.AdGroup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupService/GetAdGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupServiceClient) MutateAdGroups(ctx context.Context, in *MutateAdGroupsRequest, opts ...grpc.CallOption) (*MutateAdGroupsResponse, error) {
+	out := new(MutateAdGroupsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupService/MutateAdGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupServiceServer is the server API for AdGroupService service.
+type AdGroupServiceServer interface {
+	// Returns the requested ad group in full detail.
+	GetAdGroup(context.Context, *GetAdGroupRequest) (*resources.AdGroup, error)
+	// Creates, updates, or removes ad groups. Operation statuses are returned.
+	MutateAdGroups(context.Context, *MutateAdGroupsRequest) (*MutateAdGroupsResponse, error)
+}
+
+// UnimplementedAdGroupServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupServiceServer struct {
+}
+
+func (*UnimplementedAdGroupServiceServer) GetAdGroup(ctx context.Context, req *GetAdGroupRequest) (*resources.AdGroup, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdGroup not implemented")
+}
+func (*UnimplementedAdGroupServiceServer) MutateAdGroups(ctx context.Context, req *MutateAdGroupsRequest) (*MutateAdGroupsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdGroups not implemented")
+}
+
+func RegisterAdGroupServiceServer(s *grpc.Server, srv AdGroupServiceServer) {
+	s.RegisterService(&_AdGroupService_serviceDesc, srv)
+}
+
+func _AdGroupService_GetAdGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupServiceServer).GetAdGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupService/GetAdGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupServiceServer).GetAdGroup(ctx, req.(*GetAdGroupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupService_MutateAdGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupServiceServer).MutateAdGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupService/MutateAdGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupServiceServer).MutateAdGroups(ctx, req.(*MutateAdGroupsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupService",
+	HandlerType: (*AdGroupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroup",
+			Handler:    _AdGroupService_GetAdGroup_Handler,
+		},
+		{
+			MethodName: "MutateAdGroups",
+			Handler:    _AdGroupService_MutateAdGroups_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_group_simulation_service.pb.go b/googleapis/ads/googleads/v3/services/ad_group_simulation_service.pb.go
new file mode 100644
index 0000000..855d8fe
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_group_simulation_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_group_simulation_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdGroupSimulationService.GetAdGroupSimulation][google.ads.googleads.v3.services.AdGroupSimulationService.GetAdGroupSimulation].
+type GetAdGroupSimulationRequest struct {
+	// Required. The resource name of the ad group simulation to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupSimulationRequest) Reset()         { *m = GetAdGroupSimulationRequest{} }
+func (m *GetAdGroupSimulationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupSimulationRequest) ProtoMessage()    {}
+func (*GetAdGroupSimulationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0549cf58468ce402, []int{0}
+}
+
+func (m *GetAdGroupSimulationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupSimulationRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupSimulationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupSimulationRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdGroupSimulationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupSimulationRequest.Merge(m, src)
+}
+func (m *GetAdGroupSimulationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupSimulationRequest.Size(m)
+}
+func (m *GetAdGroupSimulationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupSimulationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupSimulationRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupSimulationRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupSimulationRequest)(nil), "google.ads.googleads.v3.services.GetAdGroupSimulationRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_group_simulation_service.proto", fileDescriptor_0549cf58468ce402)
+}
+
+var fileDescriptor_0549cf58468ce402 = []byte{
+	// 415 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x1c, 0x25, 0x39, 0x10, 0x0c, 0xda, 0x04, 0xc1, 0x25, 0xa7, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x80, 0x39, 0x2c, 0xe6, 0xb8, 0x62, 0xd2, 0xc4, 0x42, 0xe4, 0xb8, 0x83, 0x2d, 0x24, 0x10, 0xe6,
+	0x32, 0x63, 0x1c, 0x48, 0x32, 0x71, 0x7e, 0x49, 0x1a, 0xb1, 0x11, 0xbf, 0xc1, 0x7e, 0x03, 0x4b,
+	0x3f, 0xca, 0xb6, 0x56, 0x5a, 0x59, 0x58, 0xf9, 0x29, 0x24, 0x3b, 0x99, 0xec, 0xae, 0x6b, 0xdc,
+	0xee, 0x31, 0xef, 0xfd, 0xde, 0xfb, 0xfd, 0x19, 0x2f, 0xca, 0x95, 0xca, 0x0b, 0x81, 0x19, 0x07,
+	0x6c, 0x60, 0x8f, 0xba, 0x10, 0x83, 0xd0, 0x9d, 0xcc, 0x04, 0x60, 0xc6, 0xd3, 0x5c, 0xab, 0xb6,
+	0x4e, 0x41, 0x96, 0x6d, 0xc1, 0x1a, 0xa9, 0xaa, 0x74, 0x20, 0x51, 0xad, 0x55, 0xa3, 0xfc, 0xb9,
+	0x29, 0x44, 0x8c, 0x03, 0x1a, 0x3d, 0x50, 0x17, 0x22, 0xeb, 0x11, 0x5c, 0x4e, 0xa5, 0x68, 0x01,
+	0xaa, 0xd5, 0x13, 0x31, 0xc6, 0x3e, 0x78, 0x62, 0x8b, 0x6b, 0x89, 0x59, 0x55, 0xa9, 0x66, 0x4d,
+	0xc2, 0xc0, 0x3e, 0xde, 0x62, 0xb3, 0x42, 0x8a, 0xaa, 0x19, 0x88, 0x67, 0x5b, 0xc4, 0x5b, 0x29,
+	0x0a, 0x9e, 0xde, 0x89, 0x77, 0xac, 0x93, 0x4a, 0x1b, 0xc1, 0x49, 0xec, 0x1d, 0xc7, 0xa2, 0xa1,
+	0x3c, 0xee, 0x63, 0x6f, 0xc7, 0xd4, 0x1b, 0xf1, 0xbe, 0x15, 0xd0, 0xf8, 0x67, 0xde, 0x43, 0xdb,
+	0x5d, 0x5a, 0xb1, 0x52, 0xcc, 0x9c, 0xb9, 0x73, 0x76, 0x3f, 0x3a, 0xfa, 0x49, 0xdd, 0x9b, 0x07,
+	0x96, 0x79, 0xcd, 0x4a, 0xf1, 0x7c, 0xe9, 0x7a, 0xb3, 0x3d, 0x9b, 0x5b, 0x33, 0xbb, 0xff, 0xdd,
+	0xf1, 0x1e, 0xfd, 0x2b, 0xc6, 0xbf, 0x42, 0x87, 0xd6, 0x86, 0xfe, 0xd3, 0x5e, 0x70, 0x31, 0x59,
+	0x3e, 0xee, 0x14, 0xed, 0x15, 0x9f, 0xbc, 0xfa, 0x41, 0x77, 0xa7, 0xfa, 0xf4, 0xed, 0xd7, 0xd2,
+	0x7d, 0xe1, 0x5f, 0xf4, 0xc7, 0xf8, 0xb0, 0xc3, 0x5c, 0x65, 0x2d, 0x34, 0xaa, 0x14, 0x1a, 0xf0,
+	0x39, 0x66, 0x7f, 0x3b, 0x01, 0x3e, 0xff, 0x18, 0x1c, 0xaf, 0xe8, 0x6c, 0x13, 0x3d, 0xa0, 0x5a,
+	0x02, 0xca, 0x54, 0x19, 0x7d, 0x76, 0xbd, 0xd3, 0x4c, 0x95, 0x07, 0xa7, 0x8c, 0x9e, 0x4e, 0xed,
+	0xee, 0xba, 0x3f, 0xd3, 0xb5, 0xf3, 0xe6, 0xe5, 0x60, 0x91, 0xab, 0x82, 0x55, 0x39, 0x52, 0x3a,
+	0xc7, 0xb9, 0xa8, 0xd6, 0x47, 0xc4, 0x9b, 0xd0, 0xe9, 0x2f, 0x7c, 0x69, 0xc1, 0x17, 0xf7, 0x28,
+	0xa6, 0xf4, 0xab, 0x3b, 0x8f, 0x8d, 0x21, 0xe5, 0x80, 0x0c, 0xec, 0xd1, 0x22, 0x44, 0x43, 0x30,
+	0xac, 0xac, 0x24, 0xa1, 0x1c, 0x92, 0x51, 0x92, 0x2c, 0xc2, 0xc4, 0x4a, 0x7e, 0xbb, 0xa7, 0xe6,
+	0x9d, 0x10, 0xca, 0x81, 0x90, 0x51, 0x44, 0xc8, 0x22, 0x24, 0xc4, 0xca, 0xee, 0xee, 0xad, 0xfb,
+	0x0c, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x35, 0x6d, 0x4b, 0x69, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdGroupSimulationServiceClient is the client API for AdGroupSimulationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupSimulationServiceClient interface {
+	// Returns the requested ad group simulation in full detail.
+	GetAdGroupSimulation(ctx context.Context, in *GetAdGroupSimulationRequest, opts ...grpc.CallOption) (*resources.AdGroupSimulation, error)
+}
+
+type adGroupSimulationServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdGroupSimulationServiceClient(cc grpc.ClientConnInterface) AdGroupSimulationServiceClient {
+	return &adGroupSimulationServiceClient{cc}
+}
+
+func (c *adGroupSimulationServiceClient) GetAdGroupSimulation(ctx context.Context, in *GetAdGroupSimulationRequest, opts ...grpc.CallOption) (*resources.AdGroupSimulation, error) {
+	out := new(resources.AdGroupSimulation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdGroupSimulationService/GetAdGroupSimulation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupSimulationServiceServer is the server API for AdGroupSimulationService service.
+type AdGroupSimulationServiceServer interface {
+	// Returns the requested ad group simulation in full detail.
+	GetAdGroupSimulation(context.Context, *GetAdGroupSimulationRequest) (*resources.AdGroupSimulation, error)
+}
+
+// UnimplementedAdGroupSimulationServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdGroupSimulationServiceServer struct {
+}
+
+func (*UnimplementedAdGroupSimulationServiceServer) GetAdGroupSimulation(ctx context.Context, req *GetAdGroupSimulationRequest) (*resources.AdGroupSimulation, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAdGroupSimulation not implemented")
+}
+
+func RegisterAdGroupSimulationServiceServer(s *grpc.Server, srv AdGroupSimulationServiceServer) {
+	s.RegisterService(&_AdGroupSimulationService_serviceDesc, srv)
+}
+
+func _AdGroupSimulationService_GetAdGroupSimulation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupSimulationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupSimulationServiceServer).GetAdGroupSimulation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdGroupSimulationService/GetAdGroupSimulation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupSimulationServiceServer).GetAdGroupSimulation(ctx, req.(*GetAdGroupSimulationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupSimulationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdGroupSimulationService",
+	HandlerType: (*AdGroupSimulationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupSimulation",
+			Handler:    _AdGroupSimulationService_GetAdGroupSimulation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_group_simulation_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_parameter_service.pb.go b/googleapis/ads/googleads/v3/services/ad_parameter_service.pb.go
new file mode 100644
index 0000000..39b4dc6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_parameter_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_parameter_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdParameterService.GetAdParameter][google.ads.googleads.v3.services.AdParameterService.GetAdParameter]
+type GetAdParameterRequest struct {
+	// Required. The resource name of the ad parameter to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdParameterRequest) Reset()         { *m = GetAdParameterRequest{} }
+func (m *GetAdParameterRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdParameterRequest) ProtoMessage()    {}
+func (*GetAdParameterRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eee1e6c793ab006d, []int{0}
+}
+
+func (m *GetAdParameterRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdParameterRequest.Unmarshal(m, b)
+}
+func (m *GetAdParameterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdParameterRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdParameterRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdParameterRequest.Merge(m, src)
+}
+func (m *GetAdParameterRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdParameterRequest.Size(m)
+}
+func (m *GetAdParameterRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdParameterRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdParameterRequest proto.InternalMessageInfo
+
+func (m *GetAdParameterRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdParameterService.MutateAdParameters][google.ads.googleads.v3.services.AdParameterService.MutateAdParameters]
+type MutateAdParametersRequest struct {
+	// Required. The ID of the customer whose ad parameters are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ad parameters.
+	Operations []*AdParameterOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdParametersRequest) Reset()         { *m = MutateAdParametersRequest{} }
+func (m *MutateAdParametersRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdParametersRequest) ProtoMessage()    {}
+func (*MutateAdParametersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eee1e6c793ab006d, []int{1}
+}
+
+func (m *MutateAdParametersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdParametersRequest.Unmarshal(m, b)
+}
+func (m *MutateAdParametersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdParametersRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdParametersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdParametersRequest.Merge(m, src)
+}
+func (m *MutateAdParametersRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdParametersRequest.Size(m)
+}
+func (m *MutateAdParametersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdParametersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdParametersRequest proto.InternalMessageInfo
+
+func (m *MutateAdParametersRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdParametersRequest) GetOperations() []*AdParameterOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateAdParametersRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateAdParametersRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on ad parameter.
+type AdParameterOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdParameterOperation_Create
+	//	*AdParameterOperation_Update
+	//	*AdParameterOperation_Remove
+	Operation            isAdParameterOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *AdParameterOperation) Reset()         { *m = AdParameterOperation{} }
+func (m *AdParameterOperation) String() string { return proto.CompactTextString(m) }
+func (*AdParameterOperation) ProtoMessage()    {}
+func (*AdParameterOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eee1e6c793ab006d, []int{2}
+}
+
+func (m *AdParameterOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdParameterOperation.Unmarshal(m, b)
+}
+func (m *AdParameterOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdParameterOperation.Marshal(b, m, deterministic)
+}
+func (m *AdParameterOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdParameterOperation.Merge(m, src)
+}
+func (m *AdParameterOperation) XXX_Size() int {
+	return xxx_messageInfo_AdParameterOperation.Size(m)
+}
+func (m *AdParameterOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdParameterOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdParameterOperation proto.InternalMessageInfo
+
+func (m *AdParameterOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdParameterOperation_Operation interface {
+	isAdParameterOperation_Operation()
+}
+
+type AdParameterOperation_Create struct {
+	Create *resources.AdParameter `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdParameterOperation_Update struct {
+	Update *resources.AdParameter `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdParameterOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdParameterOperation_Create) isAdParameterOperation_Operation() {}
+
+func (*AdParameterOperation_Update) isAdParameterOperation_Operation() {}
+
+func (*AdParameterOperation_Remove) isAdParameterOperation_Operation() {}
+
+func (m *AdParameterOperation) GetOperation() isAdParameterOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdParameterOperation) GetCreate() *resources.AdParameter {
+	if x, ok := m.GetOperation().(*AdParameterOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdParameterOperation) GetUpdate() *resources.AdParameter {
+	if x, ok := m.GetOperation().(*AdParameterOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdParameterOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdParameterOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdParameterOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdParameterOperation_Create)(nil),
+		(*AdParameterOperation_Update)(nil),
+		(*AdParameterOperation_Remove)(nil),
+	}
+}
+
+// Response message for an ad parameter mutate.
+type MutateAdParametersResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateAdParameterResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateAdParametersResponse) Reset()         { *m = MutateAdParametersResponse{} }
+func (m *MutateAdParametersResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdParametersResponse) ProtoMessage()    {}
+func (*MutateAdParametersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eee1e6c793ab006d, []int{3}
+}
+
+func (m *MutateAdParametersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdParametersResponse.Unmarshal(m, b)
+}
+func (m *MutateAdParametersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdParametersResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdParametersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdParametersResponse.Merge(m, src)
+}
+func (m *MutateAdParametersResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdParametersResponse.Size(m)
+}
+func (m *MutateAdParametersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdParametersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdParametersResponse proto.InternalMessageInfo
+
+func (m *MutateAdParametersResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateAdParametersResponse) GetResults() []*MutateAdParameterResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad parameter mutate.
+type MutateAdParameterResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdParameterResult) Reset()         { *m = MutateAdParameterResult{} }
+func (m *MutateAdParameterResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdParameterResult) ProtoMessage()    {}
+func (*MutateAdParameterResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eee1e6c793ab006d, []int{4}
+}
+
+func (m *MutateAdParameterResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdParameterResult.Unmarshal(m, b)
+}
+func (m *MutateAdParameterResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdParameterResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdParameterResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdParameterResult.Merge(m, src)
+}
+func (m *MutateAdParameterResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdParameterResult.Size(m)
+}
+func (m *MutateAdParameterResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdParameterResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdParameterResult proto.InternalMessageInfo
+
+func (m *MutateAdParameterResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdParameterRequest)(nil), "google.ads.googleads.v3.services.GetAdParameterRequest")
+	proto.RegisterType((*MutateAdParametersRequest)(nil), "google.ads.googleads.v3.services.MutateAdParametersRequest")
+	proto.RegisterType((*AdParameterOperation)(nil), "google.ads.googleads.v3.services.AdParameterOperation")
+	proto.RegisterType((*MutateAdParametersResponse)(nil), "google.ads.googleads.v3.services.MutateAdParametersResponse")
+	proto.RegisterType((*MutateAdParameterResult)(nil), "google.ads.googleads.v3.services.MutateAdParameterResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_parameter_service.proto", fileDescriptor_eee1e6c793ab006d)
+}
+
+var fileDescriptor_eee1e6c793ab006d = []byte{
+	// 758 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x6e, 0xd3, 0x4a,
+	0x14, 0xbe, 0x76, 0xae, 0x7a, 0x6f, 0x27, 0x6d, 0xaf, 0x34, 0x97, 0xd2, 0x10, 0x90, 0x88, 0x4c,
+	0x25, 0xa2, 0x08, 0xd9, 0x90, 0xa0, 0x22, 0x1c, 0x8a, 0xe4, 0x48, 0xa4, 0x65, 0x51, 0x5a, 0xb9,
+	0xa2, 0x0b, 0x88, 0x64, 0x4d, 0xed, 0x69, 0xb0, 0x6a, 0x7b, 0xcc, 0xcc, 0x38, 0x52, 0x55, 0x75,
+	0xc3, 0x03, 0xb0, 0xe1, 0x0d, 0x58, 0xf2, 0x06, 0x2c, 0xd9, 0x76, 0xcb, 0xae, 0x0b, 0xc4, 0x02,
+	0xb1, 0x40, 0x3c, 0x03, 0x42, 0xf6, 0x78, 0x12, 0xa7, 0x4d, 0x14, 0xd1, 0xdd, 0xf1, 0x39, 0xe7,
+	0xfb, 0xce, 0xff, 0x18, 0xb4, 0xfb, 0x84, 0xf4, 0x03, 0x6c, 0x20, 0x8f, 0x19, 0x42, 0x4c, 0xa5,
+	0x41, 0xcb, 0x60, 0x98, 0x0e, 0x7c, 0x17, 0x33, 0x03, 0x79, 0x4e, 0x8c, 0x28, 0x0a, 0x31, 0xc7,
+	0xd4, 0xc9, 0xb5, 0x7a, 0x4c, 0x09, 0x27, 0xb0, 0x26, 0x10, 0x3a, 0xf2, 0x98, 0x3e, 0x04, 0xeb,
+	0x83, 0x96, 0x2e, 0xc1, 0xd5, 0xfb, 0xd3, 0xe8, 0x29, 0x66, 0x24, 0xa1, 0xe7, 0xf9, 0x05, 0x6f,
+	0xf5, 0x86, 0x44, 0xc5, 0xbe, 0x81, 0xa2, 0x88, 0x70, 0xc4, 0x7d, 0x12, 0xb1, 0xdc, 0xba, 0x52,
+	0xb0, 0xba, 0x81, 0x8f, 0x23, 0x9e, 0x1b, 0x6e, 0x16, 0x0c, 0x07, 0x3e, 0x0e, 0x3c, 0x67, 0x1f,
+	0xbf, 0x42, 0x03, 0x9f, 0x48, 0xde, 0x3c, 0x5f, 0x23, 0xfb, 0xda, 0x4f, 0x0e, 0x72, 0xaf, 0x10,
+	0xb1, 0xc3, 0x73, 0xdc, 0x34, 0x76, 0x0d, 0xc6, 0x11, 0x4f, 0xf2, 0xa0, 0x9a, 0x05, 0x96, 0x37,
+	0x30, 0xb7, 0xbc, 0x1d, 0x99, 0xaa, 0x8d, 0x5f, 0x27, 0x98, 0x71, 0x58, 0x07, 0x8b, 0xb2, 0x16,
+	0x27, 0x42, 0x21, 0xae, 0x28, 0x35, 0xa5, 0x3e, 0xdf, 0x29, 0x7d, 0xb5, 0x54, 0x7b, 0x41, 0x5a,
+	0x9e, 0xa1, 0x10, 0x6b, 0x3f, 0x15, 0x70, 0x6d, 0x2b, 0xe1, 0x88, 0xe3, 0x02, 0x0d, 0x93, 0x3c,
+	0xab, 0xa0, 0xec, 0x26, 0x8c, 0x93, 0x10, 0x53, 0xc7, 0xf7, 0x8a, 0x2c, 0x40, 0xea, 0x9f, 0x7a,
+	0xf0, 0x25, 0x00, 0x24, 0xc6, 0x54, 0xf4, 0xa3, 0xa2, 0xd6, 0x4a, 0xf5, 0x72, 0x73, 0x4d, 0x9f,
+	0x35, 0x06, 0xbd, 0x10, 0x70, 0x5b, 0xc2, 0x73, 0xf2, 0x11, 0x1d, 0xbc, 0x0d, 0xfe, 0x8b, 0x11,
+	0xe5, 0x3e, 0x0a, 0x9c, 0x03, 0xe4, 0x07, 0x09, 0xc5, 0x95, 0x52, 0x4d, 0xa9, 0xff, 0x6b, 0x2f,
+	0xe5, 0xea, 0xae, 0xd0, 0xc2, 0x5b, 0x60, 0x71, 0x80, 0x02, 0xdf, 0x43, 0x1c, 0x3b, 0x24, 0x0a,
+	0x8e, 0x2a, 0x7f, 0x67, 0x6e, 0x0b, 0x52, 0xb9, 0x1d, 0x05, 0x47, 0xda, 0x5b, 0x15, 0x5c, 0x99,
+	0x14, 0x17, 0xb6, 0x41, 0x39, 0x89, 0x33, 0x6c, 0xda, 0xf8, 0x0c, 0x5b, 0x6e, 0x56, 0x65, 0x11,
+	0x72, 0x36, 0x7a, 0x37, 0x9d, 0xcd, 0x16, 0x62, 0x87, 0x36, 0x10, 0xee, 0xa9, 0x0c, 0x37, 0xc1,
+	0x9c, 0x4b, 0x31, 0xe2, 0xa2, 0xcf, 0xe5, 0xa6, 0x3e, 0xb5, 0xf8, 0xe1, 0x86, 0x15, 0xab, 0xdf,
+	0xfc, 0xcb, 0xce, 0xf1, 0x29, 0x93, 0xe0, 0xad, 0xa8, 0x97, 0x65, 0x12, 0x78, 0x58, 0x01, 0x73,
+	0x14, 0x87, 0x64, 0x20, 0xda, 0x35, 0x9f, 0x5a, 0xc4, 0x77, 0xa7, 0x0c, 0xe6, 0x87, 0xfd, 0xd5,
+	0x3e, 0x2a, 0xa0, 0x3a, 0x69, 0xfe, 0x2c, 0x26, 0x11, 0xc3, 0xb0, 0x0b, 0x96, 0xcf, 0x75, 0xdf,
+	0xc1, 0x94, 0x12, 0x9a, 0x91, 0x96, 0x9b, 0x50, 0xa6, 0x47, 0x63, 0x57, 0xdf, 0xcd, 0x56, 0xd3,
+	0xfe, 0x7f, 0x7c, 0x2e, 0x4f, 0x52, 0x77, 0xb8, 0x0b, 0xfe, 0xa1, 0x98, 0x25, 0x01, 0x97, 0xfb,
+	0xf1, 0x70, 0xf6, 0x7e, 0x5c, 0x48, 0xcb, 0xce, 0x18, 0x6c, 0xc9, 0xa4, 0x3d, 0x06, 0x2b, 0x53,
+	0x7c, 0xd2, 0x65, 0x98, 0x70, 0x00, 0xe3, 0xbb, 0xdf, 0xfc, 0x52, 0x02, 0xb0, 0x00, 0xdd, 0x15,
+	0x81, 0xe1, 0x27, 0x05, 0x2c, 0x8d, 0x9f, 0x15, 0x7c, 0x30, 0x3b, 0xdb, 0x89, 0x87, 0x58, 0xfd,
+	0xc3, 0xf9, 0x69, 0xdd, 0x33, 0x6b, 0x3c, 0xf1, 0x37, 0x9f, 0xbf, 0xbd, 0x53, 0xef, 0x42, 0x3d,
+	0x7d, 0x9e, 0x8e, 0xc7, 0x2c, 0xeb, 0xf2, 0x02, 0x99, 0xd1, 0x30, 0x50, 0x61, 0x78, 0x46, 0xe3,
+	0x04, 0x7e, 0x57, 0x00, 0xbc, 0x38, 0x56, 0xd8, 0xbe, 0x44, 0xd7, 0xe5, 0x63, 0x50, 0x7d, 0x74,
+	0x39, 0xb0, 0xd8, 0x24, 0xed, 0xf9, 0x99, 0x75, 0xb5, 0xf0, 0x96, 0xdc, 0x19, 0x9d, 0x78, 0x56,
+	0xe2, 0x9a, 0x76, 0x2f, 0x2d, 0x71, 0x54, 0xd3, 0x71, 0xc1, 0x79, 0xbd, 0x71, 0x32, 0x56, 0xa1,
+	0x19, 0x66, 0x71, 0x4c, 0xa5, 0x51, 0xbd, 0x7e, 0x6a, 0x55, 0x46, 0xb9, 0xe4, 0x52, 0xec, 0x33,
+	0xdd, 0x25, 0x61, 0xe7, 0x97, 0x02, 0x56, 0x5d, 0x12, 0xce, 0xcc, 0xbb, 0xb3, 0x72, 0x71, 0x0d,
+	0x76, 0xd2, 0x93, 0xdf, 0x51, 0x5e, 0x6c, 0xe6, 0xe0, 0x3e, 0x09, 0x50, 0xd4, 0xd7, 0x09, 0xed,
+	0x1b, 0x7d, 0x1c, 0x65, 0x0f, 0x82, 0x31, 0x0a, 0x37, 0xfd, 0x57, 0xd5, 0x96, 0xc2, 0x7b, 0xb5,
+	0xb4, 0x61, 0x59, 0x1f, 0xd4, 0xda, 0x86, 0x20, 0xb4, 0x3c, 0xa6, 0x0b, 0x31, 0x95, 0xf6, 0x5a,
+	0x7a, 0x1e, 0x98, 0x9d, 0x4a, 0x97, 0x9e, 0xe5, 0xb1, 0xde, 0xd0, 0xa5, 0xb7, 0xd7, 0xea, 0x49,
+	0x97, 0x1f, 0xea, 0xaa, 0xd0, 0x9b, 0xa6, 0xe5, 0x31, 0xd3, 0x1c, 0x3a, 0x99, 0xe6, 0x5e, 0xcb,
+	0x34, 0xa5, 0xdb, 0xfe, 0x5c, 0x96, 0x67, 0xeb, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x19,
+	0x17, 0xd4, 0x51, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdParameterServiceClient is the client API for AdParameterService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdParameterServiceClient interface {
+	// Returns the requested ad parameter in full detail.
+	GetAdParameter(ctx context.Context, in *GetAdParameterRequest, opts ...grpc.CallOption) (*resources.AdParameter, error)
+	// Creates, updates, or removes ad parameters. Operation statuses are
+	// returned.
+	MutateAdParameters(ctx context.Context, in *MutateAdParametersRequest, opts ...grpc.CallOption) (*MutateAdParametersResponse, error)
+}
+
+type adParameterServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdParameterServiceClient(cc grpc.ClientConnInterface) AdParameterServiceClient {
+	return &adParameterServiceClient{cc}
+}
+
+func (c *adParameterServiceClient) GetAdParameter(ctx context.Context, in *GetAdParameterRequest, opts ...grpc.CallOption) (*resources.AdParameter, error) {
+	out := new(resources.AdParameter)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdParameterService/GetAdParameter", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adParameterServiceClient) MutateAdParameters(ctx context.Context, in *MutateAdParametersRequest, opts ...grpc.CallOption) (*MutateAdParametersResponse, error) {
+	out := new(MutateAdParametersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdParameterService/MutateAdParameters", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdParameterServiceServer is the server API for AdParameterService service.
+type AdParameterServiceServer interface {
+	// Returns the requested ad parameter in full detail.
+	GetAdParameter(context.Context, *GetAdParameterRequest) (*resources.AdParameter, error)
+	// Creates, updates, or removes ad parameters. Operation statuses are
+	// returned.
+	MutateAdParameters(context.Context, *MutateAdParametersRequest) (*MutateAdParametersResponse, error)
+}
+
+// UnimplementedAdParameterServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdParameterServiceServer struct {
+}
+
+func (*UnimplementedAdParameterServiceServer) GetAdParameter(ctx context.Context, req *GetAdParameterRequest) (*resources.AdParameter, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetAdParameter not implemented")
+}
+func (*UnimplementedAdParameterServiceServer) MutateAdParameters(ctx context.Context, req *MutateAdParametersRequest) (*MutateAdParametersResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateAdParameters not implemented")
+}
+
+func RegisterAdParameterServiceServer(s *grpc.Server, srv AdParameterServiceServer) {
+	s.RegisterService(&_AdParameterService_serviceDesc, srv)
+}
+
+func _AdParameterService_GetAdParameter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdParameterRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdParameterServiceServer).GetAdParameter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdParameterService/GetAdParameter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdParameterServiceServer).GetAdParameter(ctx, req.(*GetAdParameterRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdParameterService_MutateAdParameters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdParametersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdParameterServiceServer).MutateAdParameters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdParameterService/MutateAdParameters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdParameterServiceServer).MutateAdParameters(ctx, req.(*MutateAdParametersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdParameterService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdParameterService",
+	HandlerType: (*AdParameterServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdParameter",
+			Handler:    _AdParameterService_GetAdParameter_Handler,
+		},
+		{
+			MethodName: "MutateAdParameters",
+			Handler:    _AdParameterService_MutateAdParameters_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_parameter_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_schedule_view_service.pb.go b/googleapis/ads/googleads/v3/services/ad_schedule_view_service.pb.go
new file mode 100644
index 0000000..9b71c1c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_schedule_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_schedule_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdScheduleViewService.GetAdScheduleView][google.ads.googleads.v3.services.AdScheduleViewService.GetAdScheduleView].
+type GetAdScheduleViewRequest struct {
+	// Required. The resource name of the ad schedule view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdScheduleViewRequest) Reset()         { *m = GetAdScheduleViewRequest{} }
+func (m *GetAdScheduleViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdScheduleViewRequest) ProtoMessage()    {}
+func (*GetAdScheduleViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_12439311f71170b1, []int{0}
+}
+
+func (m *GetAdScheduleViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdScheduleViewRequest.Unmarshal(m, b)
+}
+func (m *GetAdScheduleViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdScheduleViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdScheduleViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdScheduleViewRequest.Merge(m, src)
+}
+func (m *GetAdScheduleViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdScheduleViewRequest.Size(m)
+}
+func (m *GetAdScheduleViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdScheduleViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdScheduleViewRequest proto.InternalMessageInfo
+
+func (m *GetAdScheduleViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdScheduleViewRequest)(nil), "google.ads.googleads.v3.services.GetAdScheduleViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_schedule_view_service.proto", fileDescriptor_12439311f71170b1)
+}
+
+var fileDescriptor_12439311f71170b1 = []byte{
+	// 414 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x14, 0x27, 0x39, 0x10, 0x0c, 0x5a, 0x18, 0x10, 0x97, 0x28, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x70, 0xa6, 0x91, 0x11, 0x91, 0x59, 0x84, 0xd5, 0x46, 0x8e, 0x3b, 0x48, 0x21, 0x81, 0x30, 0x97,
+	0x79, 0xe6, 0x06, 0x92, 0xcc, 0x9a, 0x97, 0xe4, 0x0a, 0xb1, 0x50, 0xfc, 0x06, 0x7e, 0x03, 0x4b,
+	0x3f, 0xca, 0x81, 0x95, 0x9d, 0x95, 0x85, 0x95, 0x9f, 0x42, 0xb2, 0x93, 0xc9, 0x6e, 0x70, 0xc3,
+	0x76, 0x3f, 0xf2, 0xfb, 0xf7, 0xde, 0x9b, 0x78, 0x2f, 0x32, 0xad, 0xb3, 0x1c, 0xa8, 0x90, 0x48,
+	0x0d, 0xec, 0x50, 0x1b, 0x52, 0x84, 0xaa, 0x55, 0x29, 0x20, 0x15, 0x32, 0xc1, 0xf4, 0x0a, 0x64,
+	0x93, 0x43, 0xd2, 0x2a, 0xb8, 0x4e, 0x7a, 0x86, 0xac, 0x2a, 0x5d, 0x6b, 0x7f, 0x6e, 0x5c, 0x44,
+	0x48, 0x24, 0x43, 0x00, 0x69, 0x43, 0x62, 0x03, 0x82, 0xa7, 0x53, 0x15, 0x15, 0xa0, 0x6e, 0xaa,
+	0x5d, 0x1d, 0x26, 0x3b, 0x78, 0x64, 0x9d, 0x2b, 0x45, 0x45, 0x59, 0xea, 0x5a, 0xd4, 0x4a, 0x97,
+	0xd8, 0xb3, 0x0f, 0xb6, 0xd8, 0x34, 0x57, 0x50, 0xd6, 0x3d, 0xf1, 0x78, 0x8b, 0x78, 0xa7, 0x20,
+	0x97, 0xc9, 0x25, 0x5c, 0x89, 0x56, 0xe9, 0xca, 0x08, 0x0e, 0x5f, 0x7a, 0xb3, 0x25, 0xd4, 0x5c,
+	0x5e, 0xf4, 0x9d, 0x91, 0x82, 0xeb, 0x73, 0x78, 0xdf, 0x00, 0xd6, 0xfe, 0xb1, 0x77, 0xd7, 0xce,
+	0x95, 0x94, 0xa2, 0x80, 0x99, 0x33, 0x77, 0x8e, 0x6f, 0x2f, 0x0e, 0x7e, 0x73, 0xf7, 0xfc, 0x8e,
+	0x65, 0xde, 0x88, 0x02, 0x9e, 0x7c, 0x71, 0xbd, 0xfb, 0xe3, 0x8c, 0x0b, 0xb3, 0xb2, 0xff, 0xc3,
+	0xf1, 0xee, 0xfd, 0x57, 0xe0, 0x33, 0xb2, 0xef, 0x54, 0x64, 0x6a, 0xaa, 0xe0, 0x74, 0xd2, 0x3b,
+	0x1c, 0x91, 0x8c, 0x9d, 0x87, 0xaf, 0x7f, 0xf1, 0xf1, 0x26, 0x9f, 0x7f, 0xfe, 0xf9, 0xea, 0x86,
+	0xfe, 0x69, 0x77, 0xfa, 0x0f, 0x23, 0xe6, 0x79, 0xda, 0x60, 0xad, 0x0b, 0xa8, 0x90, 0x9e, 0x50,
+	0x31, 0x8a, 0x41, 0x7a, 0xf2, 0x31, 0x78, 0x78, 0xc3, 0x67, 0x9b, 0xd2, 0x1e, 0xad, 0x14, 0x92,
+	0x54, 0x17, 0x8b, 0x4f, 0xae, 0x77, 0x94, 0xea, 0x62, 0xef, 0x72, 0x8b, 0x60, 0xe7, 0xb1, 0xce,
+	0xba, 0x17, 0x39, 0x73, 0xde, 0xbe, 0xea, 0xfd, 0x99, 0xce, 0x45, 0x99, 0x11, 0x5d, 0x65, 0x34,
+	0x83, 0x72, 0xfd, 0x5e, 0x74, 0xd3, 0x38, 0xfd, 0x9f, 0x3e, 0xb3, 0xe0, 0x9b, 0x7b, 0xb0, 0xe4,
+	0xfc, 0xbb, 0x3b, 0x5f, 0x9a, 0x40, 0x2e, 0x91, 0x18, 0xd8, 0xa1, 0x28, 0x24, 0x7d, 0x31, 0xde,
+	0x58, 0x49, 0xcc, 0x25, 0xc6, 0x83, 0x24, 0x8e, 0xc2, 0xd8, 0x4a, 0xfe, 0xba, 0x47, 0xe6, 0x3b,
+	0x63, 0x5c, 0x22, 0x63, 0x83, 0x88, 0xb1, 0x28, 0x64, 0xcc, 0xca, 0x2e, 0x6f, 0xad, 0xe7, 0x0c,
+	0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x88, 0x26, 0x88, 0x99, 0x4e, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdScheduleViewServiceClient is the client API for AdScheduleViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdScheduleViewServiceClient interface {
+	// Returns the requested ad schedule view in full detail.
+	GetAdScheduleView(ctx context.Context, in *GetAdScheduleViewRequest, opts ...grpc.CallOption) (*resources.AdScheduleView, error)
+}
+
+type adScheduleViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdScheduleViewServiceClient(cc grpc.ClientConnInterface) AdScheduleViewServiceClient {
+	return &adScheduleViewServiceClient{cc}
+}
+
+func (c *adScheduleViewServiceClient) GetAdScheduleView(ctx context.Context, in *GetAdScheduleViewRequest, opts ...grpc.CallOption) (*resources.AdScheduleView, error) {
+	out := new(resources.AdScheduleView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdScheduleViewService/GetAdScheduleView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdScheduleViewServiceServer is the server API for AdScheduleViewService service.
+type AdScheduleViewServiceServer interface {
+	// Returns the requested ad schedule view in full detail.
+	GetAdScheduleView(context.Context, *GetAdScheduleViewRequest) (*resources.AdScheduleView, error)
+}
+
+// UnimplementedAdScheduleViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdScheduleViewServiceServer struct {
+}
+
+func (*UnimplementedAdScheduleViewServiceServer) GetAdScheduleView(ctx context.Context, req *GetAdScheduleViewRequest) (*resources.AdScheduleView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAdScheduleView not implemented")
+}
+
+func RegisterAdScheduleViewServiceServer(s *grpc.Server, srv AdScheduleViewServiceServer) {
+	s.RegisterService(&_AdScheduleViewService_serviceDesc, srv)
+}
+
+func _AdScheduleViewService_GetAdScheduleView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdScheduleViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdScheduleViewServiceServer).GetAdScheduleView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdScheduleViewService/GetAdScheduleView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdScheduleViewServiceServer).GetAdScheduleView(ctx, req.(*GetAdScheduleViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdScheduleViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdScheduleViewService",
+	HandlerType: (*AdScheduleViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdScheduleView",
+			Handler:    _AdScheduleViewService_GetAdScheduleView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_schedule_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/ad_service.pb.go b/googleapis/ads/googleads/v3/services/ad_service.pb.go
new file mode 100644
index 0000000..ec106e6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/ad_service.pb.go
@@ -0,0 +1,454 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/ad_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AdService.GetAd][google.ads.googleads.v3.services.AdService.GetAd].
+type GetAdRequest struct {
+	// Required. The resource name of the ad to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdRequest) Reset()         { *m = GetAdRequest{} }
+func (m *GetAdRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdRequest) ProtoMessage()    {}
+func (*GetAdRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eaf281ec3618ebbd, []int{0}
+}
+
+func (m *GetAdRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdRequest.Unmarshal(m, b)
+}
+func (m *GetAdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAdRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdRequest.Merge(m, src)
+}
+func (m *GetAdRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdRequest.Size(m)
+}
+func (m *GetAdRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdRequest proto.InternalMessageInfo
+
+func (m *GetAdRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdService.MutateAds][google.ads.googleads.v3.services.AdService.MutateAds].
+type MutateAdsRequest struct {
+	// Required. The ID of the customer whose ads are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual ads.
+	Operations           []*AdOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *MutateAdsRequest) Reset()         { *m = MutateAdsRequest{} }
+func (m *MutateAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdsRequest) ProtoMessage()    {}
+func (*MutateAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eaf281ec3618ebbd, []int{1}
+}
+
+func (m *MutateAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdsRequest.Merge(m, src)
+}
+func (m *MutateAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdsRequest.Size(m)
+}
+func (m *MutateAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdsRequest proto.InternalMessageInfo
+
+func (m *MutateAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdsRequest) GetOperations() []*AdOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single update operation on an ad.
+type AdOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdOperation_Update
+	Operation            isAdOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *AdOperation) Reset()         { *m = AdOperation{} }
+func (m *AdOperation) String() string { return proto.CompactTextString(m) }
+func (*AdOperation) ProtoMessage()    {}
+func (*AdOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eaf281ec3618ebbd, []int{2}
+}
+
+func (m *AdOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdOperation.Unmarshal(m, b)
+}
+func (m *AdOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdOperation.Marshal(b, m, deterministic)
+}
+func (m *AdOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdOperation.Merge(m, src)
+}
+func (m *AdOperation) XXX_Size() int {
+	return xxx_messageInfo_AdOperation.Size(m)
+}
+func (m *AdOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdOperation proto.InternalMessageInfo
+
+func (m *AdOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdOperation_Operation interface {
+	isAdOperation_Operation()
+}
+
+type AdOperation_Update struct {
+	Update *resources.Ad `protobuf:"bytes,1,opt,name=update,proto3,oneof"`
+}
+
+func (*AdOperation_Update) isAdOperation_Operation() {}
+
+func (m *AdOperation) GetOperation() isAdOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdOperation) GetUpdate() *resources.Ad {
+	if x, ok := m.GetOperation().(*AdOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AdOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AdOperation_Update)(nil),
+	}
+}
+
+// Response message for an ad mutate.
+type MutateAdsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *MutateAdsResponse) Reset()         { *m = MutateAdsResponse{} }
+func (m *MutateAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdsResponse) ProtoMessage()    {}
+func (*MutateAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eaf281ec3618ebbd, []int{3}
+}
+
+func (m *MutateAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdsResponse.Merge(m, src)
+}
+func (m *MutateAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdsResponse.Size(m)
+}
+func (m *MutateAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdsResponse proto.InternalMessageInfo
+
+func (m *MutateAdsResponse) GetResults() []*MutateAdResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad mutate.
+type MutateAdResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdResult) Reset()         { *m = MutateAdResult{} }
+func (m *MutateAdResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdResult) ProtoMessage()    {}
+func (*MutateAdResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eaf281ec3618ebbd, []int{4}
+}
+
+func (m *MutateAdResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdResult.Unmarshal(m, b)
+}
+func (m *MutateAdResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAdResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdResult.Merge(m, src)
+}
+func (m *MutateAdResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdResult.Size(m)
+}
+func (m *MutateAdResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdResult proto.InternalMessageInfo
+
+func (m *MutateAdResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdRequest)(nil), "google.ads.googleads.v3.services.GetAdRequest")
+	proto.RegisterType((*MutateAdsRequest)(nil), "google.ads.googleads.v3.services.MutateAdsRequest")
+	proto.RegisterType((*AdOperation)(nil), "google.ads.googleads.v3.services.AdOperation")
+	proto.RegisterType((*MutateAdsResponse)(nil), "google.ads.googleads.v3.services.MutateAdsResponse")
+	proto.RegisterType((*MutateAdResult)(nil), "google.ads.googleads.v3.services.MutateAdResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/ad_service.proto", fileDescriptor_eaf281ec3618ebbd)
+}
+
+var fileDescriptor_eaf281ec3618ebbd = []byte{
+	// 619 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x31, 0x6f, 0xd3, 0x40,
+	0x18, 0xc5, 0x8e, 0x28, 0xca, 0xb9, 0x54, 0x70, 0x03, 0x44, 0x06, 0x89, 0xc8, 0xb4, 0x22, 0x8a,
+	0xe8, 0x19, 0x62, 0x21, 0x21, 0x57, 0x15, 0xba, 0x0c, 0xb4, 0x20, 0x0a, 0x95, 0x91, 0x32, 0xa0,
+	0x48, 0xd1, 0x25, 0x77, 0x35, 0x56, 0x63, 0x9f, 0xf1, 0xd9, 0x59, 0xaa, 0x2e, 0xcc, 0x30, 0xb1,
+	0xb0, 0xb0, 0x30, 0xf2, 0x33, 0x18, 0xbb, 0xb2, 0x75, 0x62, 0x60, 0x62, 0x67, 0x47, 0xf6, 0xf9,
+	0x1c, 0x47, 0x22, 0x4a, 0xd9, 0x3e, 0xfb, 0x7b, 0xef, 0xdd, 0xbb, 0xf7, 0x7d, 0x36, 0x78, 0xe8,
+	0x73, 0xee, 0x4f, 0x99, 0x4d, 0xa8, 0xb0, 0x65, 0x99, 0x57, 0x33, 0xc7, 0x16, 0x2c, 0x99, 0x05,
+	0x13, 0x26, 0x6c, 0x42, 0x47, 0x65, 0x8d, 0xe2, 0x84, 0xa7, 0x1c, 0xb6, 0x25, 0x0e, 0x11, 0x2a,
+	0x50, 0x45, 0x41, 0x33, 0x07, 0x29, 0x8a, 0xd9, 0x5d, 0x26, 0x9a, 0x30, 0xc1, 0xb3, 0x44, 0xaa,
+	0x4a, 0x35, 0xf3, 0xb6, 0xc2, 0xc6, 0x81, 0x4d, 0xa2, 0x88, 0xa7, 0x24, 0x0d, 0x78, 0x24, 0xca,
+	0xee, 0xcd, 0x5a, 0x77, 0x32, 0x0d, 0x58, 0x94, 0x96, 0x8d, 0x3b, 0xb5, 0xc6, 0x51, 0xc0, 0xa6,
+	0x74, 0x34, 0x66, 0x6f, 0xc9, 0x2c, 0xe0, 0x49, 0x09, 0x28, 0x5d, 0xda, 0xc5, 0xd3, 0x38, 0x3b,
+	0x2a, 0x51, 0x21, 0x11, 0xc7, 0x12, 0x61, 0x3d, 0x06, 0xeb, 0x7b, 0x2c, 0xc5, 0xd4, 0x63, 0xef,
+	0x32, 0x26, 0x52, 0xd8, 0x01, 0x57, 0x95, 0xbf, 0x51, 0x44, 0x42, 0xd6, 0xd2, 0xda, 0x5a, 0xa7,
+	0xd9, 0x6f, 0xfc, 0xc4, 0xba, 0xb7, 0xae, 0x3a, 0x2f, 0x49, 0xc8, 0xac, 0x0f, 0x1a, 0xb8, 0x76,
+	0x90, 0xa5, 0x24, 0x65, 0x98, 0x0a, 0x45, 0xdf, 0x04, 0xc6, 0x24, 0x13, 0x29, 0x0f, 0x59, 0x32,
+	0x0a, 0x68, 0x9d, 0x0c, 0xd4, 0xfb, 0x67, 0x14, 0x7a, 0x00, 0xf0, 0x98, 0x25, 0xf2, 0x92, 0x2d,
+	0xbd, 0xdd, 0xe8, 0x18, 0xbd, 0x6d, 0xb4, 0x2a, 0x51, 0x84, 0xe9, 0x2b, 0xc5, 0x2a, 0x35, 0xe7,
+	0x2a, 0xd6, 0x67, 0x0d, 0x18, 0x35, 0x00, 0xdc, 0x01, 0x46, 0x16, 0x53, 0x92, 0xb2, 0xe2, 0xb6,
+	0x2d, 0xbd, 0xad, 0x75, 0x8c, 0x9e, 0xa9, 0x0e, 0x51, 0x81, 0xa0, 0xa7, 0x79, 0x20, 0x07, 0x44,
+	0x1c, 0x7b, 0x40, 0xc2, 0xf3, 0x1a, 0x3e, 0x01, 0x6b, 0xf2, 0xa9, 0xb8, 0x81, 0xd1, 0xdb, 0x5a,
+	0x6a, 0xae, 0x1a, 0x26, 0xc2, 0x74, 0xff, 0x92, 0x57, 0xd2, 0xfa, 0x06, 0x68, 0x56, 0xde, 0xac,
+	0x11, 0xb8, 0x5e, 0x0b, 0x4a, 0xc4, 0x3c, 0x12, 0x0c, 0x3e, 0x07, 0x57, 0x12, 0x26, 0xb2, 0x69,
+	0xaa, 0x02, 0x78, 0xb0, 0x3a, 0x00, 0xa5, 0xe2, 0x15, 0x44, 0x4f, 0x09, 0x58, 0x8f, 0xc0, 0xc6,
+	0x62, 0x0b, 0xde, 0xfd, 0xe7, 0x18, 0x17, 0x27, 0xd8, 0xfb, 0xd8, 0x00, 0x4d, 0x4c, 0x5f, 0x4b,
+	0x75, 0xf8, 0x45, 0x03, 0x97, 0x8b, 0x55, 0x80, 0x68, 0xb5, 0x93, 0xfa, 0xce, 0x98, 0x17, 0x4b,
+	0xc7, 0xda, 0x3d, 0xc7, 0x8b, 0xa6, 0xde, 0xff, 0xf8, 0xf5, 0x49, 0xbf, 0x07, 0xb7, 0xf2, 0x8f,
+	0xe2, 0x64, 0xa1, 0xb3, 0xab, 0x96, 0x45, 0xd8, 0xdd, 0xe2, 0x03, 0xea, 0x9e, 0xc2, 0xef, 0x1a,
+	0x68, 0x56, 0x31, 0xc2, 0xde, 0xc5, 0xd3, 0x52, 0xcb, 0x69, 0x3a, 0xff, 0xc5, 0x91, 0x73, 0xb2,
+	0x5e, 0x9c, 0xe3, 0x1b, 0xb5, 0x95, 0xbe, 0x3f, 0x5f, 0xb9, 0xc2, 0xfe, 0xb6, 0xd5, 0xc9, 0xed,
+	0xcf, 0xfd, 0x9e, 0xd4, 0xc0, 0xbb, 0xdd, 0xd3, 0xdc, 0xbd, 0x1b, 0x16, 0xaa, 0xae, 0xd6, 0x35,
+	0x6f, 0x9d, 0xe1, 0xd6, 0xfc, 0xe4, 0xb2, 0x8a, 0x03, 0x81, 0x26, 0x3c, 0xec, 0xff, 0xd1, 0xc0,
+	0xe6, 0x84, 0x87, 0x2b, 0x5d, 0xf6, 0x37, 0xaa, 0xa9, 0x1d, 0xe6, 0x7b, 0x7c, 0xa8, 0xbd, 0xd9,
+	0x2f, 0x39, 0x3e, 0x9f, 0x92, 0xc8, 0x47, 0x3c, 0xf1, 0x6d, 0x9f, 0x45, 0xc5, 0x96, 0xdb, 0xf3,
+	0x53, 0x96, 0xff, 0xe0, 0x76, 0x54, 0xf1, 0x55, 0x6f, 0xec, 0x61, 0xfc, 0x4d, 0x6f, 0xef, 0x49,
+	0x41, 0x4c, 0x05, 0x92, 0x65, 0x5e, 0x0d, 0x1c, 0x54, 0x1e, 0x2c, 0xce, 0x14, 0x64, 0x88, 0xa9,
+	0x18, 0x56, 0x90, 0xe1, 0xc0, 0x19, 0x2a, 0xc8, 0x6f, 0x7d, 0x53, 0xbe, 0x77, 0x5d, 0x4c, 0x85,
+	0xeb, 0x56, 0x20, 0xd7, 0x1d, 0x38, 0xae, 0xab, 0x60, 0xe3, 0xb5, 0xc2, 0xa7, 0xf3, 0x37, 0x00,
+	0x00, 0xff, 0xff, 0x5c, 0x86, 0xe6, 0x2e, 0x87, 0x05, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdServiceClient is the client API for AdService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdServiceClient interface {
+	// Returns the requested ad in full detail.
+	GetAd(ctx context.Context, in *GetAdRequest, opts ...grpc.CallOption) (*resources.Ad, error)
+	// Updates ads. Operation statuses are returned.
+	MutateAds(ctx context.Context, in *MutateAdsRequest, opts ...grpc.CallOption) (*MutateAdsResponse, error)
+}
+
+type adServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdServiceClient(cc grpc.ClientConnInterface) AdServiceClient {
+	return &adServiceClient{cc}
+}
+
+func (c *adServiceClient) GetAd(ctx context.Context, in *GetAdRequest, opts ...grpc.CallOption) (*resources.Ad, error) {
+	out := new(resources.Ad)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdService/GetAd", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adServiceClient) MutateAds(ctx context.Context, in *MutateAdsRequest, opts ...grpc.CallOption) (*MutateAdsResponse, error) {
+	out := new(MutateAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AdService/MutateAds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdServiceServer is the server API for AdService service.
+type AdServiceServer interface {
+	// Returns the requested ad in full detail.
+	GetAd(context.Context, *GetAdRequest) (*resources.Ad, error)
+	// Updates ads. Operation statuses are returned.
+	MutateAds(context.Context, *MutateAdsRequest) (*MutateAdsResponse, error)
+}
+
+// UnimplementedAdServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAdServiceServer struct {
+}
+
+func (*UnimplementedAdServiceServer) GetAd(ctx context.Context, req *GetAdRequest) (*resources.Ad, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAd not implemented")
+}
+func (*UnimplementedAdServiceServer) MutateAds(ctx context.Context, req *MutateAdsRequest) (*MutateAdsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateAds not implemented")
+}
+
+func RegisterAdServiceServer(s *grpc.Server, srv AdServiceServer) {
+	s.RegisterService(&_AdService_serviceDesc, srv)
+}
+
+func _AdService_GetAd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdServiceServer).GetAd(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdService/GetAd",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdServiceServer).GetAd(ctx, req.(*GetAdRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdService_MutateAds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdServiceServer).MutateAds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AdService/MutateAds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdServiceServer).MutateAds(ctx, req.(*MutateAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AdService",
+	HandlerType: (*AdServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAd",
+			Handler:    _AdService_GetAd_Handler,
+		},
+		{
+			MethodName: "MutateAds",
+			Handler:    _AdService_MutateAds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/ad_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/age_range_view_service.pb.go b/googleapis/ads/googleads/v3/services/age_range_view_service.pb.go
new file mode 100644
index 0000000..c3e7679
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/age_range_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/age_range_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AgeRangeViewService.GetAgeRangeView][google.ads.googleads.v3.services.AgeRangeViewService.GetAgeRangeView].
+type GetAgeRangeViewRequest struct {
+	// Required. The resource name of the age range view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAgeRangeViewRequest) Reset()         { *m = GetAgeRangeViewRequest{} }
+func (m *GetAgeRangeViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAgeRangeViewRequest) ProtoMessage()    {}
+func (*GetAgeRangeViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8b0ca94c02774afd, []int{0}
+}
+
+func (m *GetAgeRangeViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Unmarshal(m, b)
+}
+func (m *GetAgeRangeViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAgeRangeViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAgeRangeViewRequest.Merge(m, src)
+}
+func (m *GetAgeRangeViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Size(m)
+}
+func (m *GetAgeRangeViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAgeRangeViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAgeRangeViewRequest proto.InternalMessageInfo
+
+func (m *GetAgeRangeViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAgeRangeViewRequest)(nil), "google.ads.googleads.v3.services.GetAgeRangeViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/age_range_view_service.proto", fileDescriptor_8b0ca94c02774afd)
+}
+
+var fileDescriptor_8b0ca94c02774afd = []byte{
+	// 415 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x25, 0x39, 0x10, 0x0c, 0x8a, 0x10, 0x41, 0x97, 0x28, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0xa0, 0x01, 0x91, 0x91, 0x2b, 0x26, 0x4d, 0xac, 0xe4, 0x58, 0x21, 0x85, 0x04, 0xc2, 0x5c, 0xf2,
+	0x39, 0x0e, 0x24, 0x33, 0xeb, 0x4c, 0x36, 0x57, 0x88, 0x8d, 0x7f, 0xc1, 0x7f, 0x60, 0xe9, 0xff,
+	0xb0, 0xb9, 0xd6, 0xce, 0xca, 0xc2, 0xca, 0x9f, 0x60, 0xa3, 0x64, 0x27, 0x93, 0xcd, 0xea, 0x2e,
+	0xdb, 0x3d, 0xf2, 0xde, 0xfb, 0xde, 0xf7, 0xbd, 0x49, 0x70, 0xce, 0x95, 0xe2, 0x35, 0x60, 0x56,
+	0x19, 0x6c, 0x61, 0x8f, 0xba, 0x18, 0x1b, 0xd0, 0x9d, 0x28, 0xc1, 0x60, 0xc6, 0xa1, 0xd0, 0x4c,
+	0x72, 0x28, 0x3a, 0x01, 0x57, 0xc5, 0xf0, 0x1d, 0x2d, 0xb5, 0x6a, 0x55, 0x38, 0xb7, 0x1e, 0xc4,
+	0x2a, 0x83, 0x46, 0x3b, 0xea, 0x62, 0xe4, 0xec, 0xd1, 0xd3, 0x7d, 0x01, 0x1a, 0x8c, 0x5a, 0xe9,
+	0xff, 0x13, 0xec, 0xe4, 0xe8, 0xa1, 0xf3, 0x2d, 0x05, 0x66, 0x52, 0xaa, 0x96, 0xb5, 0x42, 0x49,
+	0x33, 0xb0, 0xf7, 0x27, 0x6c, 0x59, 0x0b, 0x90, 0xed, 0x40, 0x3c, 0x9a, 0x10, 0x6f, 0x04, 0xd4,
+	0x55, 0x71, 0x09, 0x6f, 0x59, 0x27, 0x94, 0xb6, 0x82, 0xe3, 0x24, 0xb8, 0x97, 0x42, 0x4b, 0x39,
+	0x2c, 0xfa, 0xc4, 0x4c, 0xc0, 0xd5, 0x02, 0xde, 0xad, 0xc0, 0xb4, 0xe1, 0x69, 0x70, 0xdb, 0xed,
+	0x54, 0x48, 0xd6, 0xc0, 0xcc, 0x9b, 0x7b, 0xa7, 0x37, 0x93, 0xa3, 0x1f, 0xd4, 0x5f, 0xdc, 0x72,
+	0xcc, 0x4b, 0xd6, 0xc0, 0x93, 0xdf, 0x5e, 0x70, 0x77, 0x3a, 0xe1, 0x95, 0x3d, 0x36, 0xfc, 0xea,
+	0x05, 0x77, 0xfe, 0x19, 0x1e, 0x3e, 0x43, 0x87, 0x2a, 0x42, 0xbb, 0xf7, 0x89, 0xf0, 0x5e, 0xe7,
+	0x58, 0x1d, 0x9a, 0xfa, 0x8e, 0xd3, 0xef, 0x74, 0xfb, 0x82, 0x8f, 0xdf, 0x7e, 0x7e, 0xf2, 0x1f,
+	0x87, 0xb8, 0xaf, 0xfb, 0xfd, 0x16, 0x73, 0x5e, 0xae, 0x4c, 0xab, 0x1a, 0xd0, 0x06, 0x9f, 0xf5,
+	0xfd, 0x8f, 0x43, 0x0c, 0x3e, 0xfb, 0x10, 0x3d, 0xb8, 0xa6, 0xb3, 0x4d, 0xe0, 0x80, 0x96, 0xc2,
+	0xa0, 0x52, 0x35, 0xc9, 0x1f, 0x2f, 0x38, 0x29, 0x55, 0x73, 0xf0, 0xac, 0x64, 0xb6, 0xa3, 0xa2,
+	0x8b, 0xfe, 0x0d, 0x2e, 0xbc, 0xd7, 0x2f, 0x06, 0x37, 0x57, 0x35, 0x93, 0x1c, 0x29, 0xcd, 0x31,
+	0x07, 0xb9, 0x7e, 0x21, 0xbc, 0xc9, 0xdb, 0xff, 0x57, 0x3e, 0x77, 0xe0, 0xb3, 0x7f, 0x94, 0x52,
+	0xfa, 0xc5, 0x9f, 0xa7, 0x76, 0x20, 0xad, 0x0c, 0xb2, 0xb0, 0x47, 0x59, 0x8c, 0x86, 0x60, 0x73,
+	0xed, 0x24, 0x39, 0xad, 0x4c, 0x3e, 0x4a, 0xf2, 0x2c, 0xce, 0x9d, 0xe4, 0x97, 0x7f, 0x62, 0xbf,
+	0x13, 0x42, 0x2b, 0x43, 0xc8, 0x28, 0x22, 0x24, 0x8b, 0x09, 0x71, 0xb2, 0xcb, 0x1b, 0xeb, 0x3d,
+	0xe3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x7c, 0x1c, 0x10, 0x3c, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AgeRangeViewServiceClient is the client API for AgeRangeViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AgeRangeViewServiceClient interface {
+	// Returns the requested age range view in full detail.
+	GetAgeRangeView(ctx context.Context, in *GetAgeRangeViewRequest, opts ...grpc.CallOption) (*resources.AgeRangeView, error)
+}
+
+type ageRangeViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAgeRangeViewServiceClient(cc grpc.ClientConnInterface) AgeRangeViewServiceClient {
+	return &ageRangeViewServiceClient{cc}
+}
+
+func (c *ageRangeViewServiceClient) GetAgeRangeView(ctx context.Context, in *GetAgeRangeViewRequest, opts ...grpc.CallOption) (*resources.AgeRangeView, error) {
+	out := new(resources.AgeRangeView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AgeRangeViewService/GetAgeRangeView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AgeRangeViewServiceServer is the server API for AgeRangeViewService service.
+type AgeRangeViewServiceServer interface {
+	// Returns the requested age range view in full detail.
+	GetAgeRangeView(context.Context, *GetAgeRangeViewRequest) (*resources.AgeRangeView, error)
+}
+
+// UnimplementedAgeRangeViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAgeRangeViewServiceServer struct {
+}
+
+func (*UnimplementedAgeRangeViewServiceServer) GetAgeRangeView(ctx context.Context, req *GetAgeRangeViewRequest) (*resources.AgeRangeView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAgeRangeView not implemented")
+}
+
+func RegisterAgeRangeViewServiceServer(s *grpc.Server, srv AgeRangeViewServiceServer) {
+	s.RegisterService(&_AgeRangeViewService_serviceDesc, srv)
+}
+
+func _AgeRangeViewService_GetAgeRangeView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAgeRangeViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AgeRangeViewServiceServer).GetAgeRangeView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AgeRangeViewService/GetAgeRangeView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AgeRangeViewServiceServer).GetAgeRangeView(ctx, req.(*GetAgeRangeViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AgeRangeViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AgeRangeViewService",
+	HandlerType: (*AgeRangeViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAgeRangeView",
+			Handler:    _AgeRangeViewService_GetAgeRangeView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/age_range_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/asset_service.pb.go b/googleapis/ads/googleads/v3/services/asset_service.pb.go
new file mode 100644
index 0000000..f3dfe04
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/asset_service.pb.go
@@ -0,0 +1,444 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/asset_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [AssetService.GetAsset][google.ads.googleads.v3.services.AssetService.GetAsset]
+type GetAssetRequest struct {
+	// Required. The resource name of the asset to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAssetRequest) Reset()         { *m = GetAssetRequest{} }
+func (m *GetAssetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAssetRequest) ProtoMessage()    {}
+func (*GetAssetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09a43928a39eb915, []int{0}
+}
+
+func (m *GetAssetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAssetRequest.Unmarshal(m, b)
+}
+func (m *GetAssetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAssetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetAssetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAssetRequest.Merge(m, src)
+}
+func (m *GetAssetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAssetRequest.Size(m)
+}
+func (m *GetAssetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAssetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAssetRequest proto.InternalMessageInfo
+
+func (m *GetAssetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AssetService.MutateAssets][google.ads.googleads.v3.services.AssetService.MutateAssets]
+type MutateAssetsRequest struct {
+	// Required. The ID of the customer whose assets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual assets.
+	Operations           []*AssetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *MutateAssetsRequest) Reset()         { *m = MutateAssetsRequest{} }
+func (m *MutateAssetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAssetsRequest) ProtoMessage()    {}
+func (*MutateAssetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09a43928a39eb915, []int{1}
+}
+
+func (m *MutateAssetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAssetsRequest.Unmarshal(m, b)
+}
+func (m *MutateAssetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAssetsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateAssetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAssetsRequest.Merge(m, src)
+}
+func (m *MutateAssetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAssetsRequest.Size(m)
+}
+func (m *MutateAssetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAssetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAssetsRequest proto.InternalMessageInfo
+
+func (m *MutateAssetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAssetsRequest) GetOperations() []*AssetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation to create an asset. Supported asset types are
+// YoutubeVideoAsset, MediaBundleAsset and ImageAsset. TextAsset should be
+// created with Ad inline.
+type AssetOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AssetOperation_Create
+	Operation            isAssetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *AssetOperation) Reset()         { *m = AssetOperation{} }
+func (m *AssetOperation) String() string { return proto.CompactTextString(m) }
+func (*AssetOperation) ProtoMessage()    {}
+func (*AssetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09a43928a39eb915, []int{2}
+}
+
+func (m *AssetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AssetOperation.Unmarshal(m, b)
+}
+func (m *AssetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AssetOperation.Marshal(b, m, deterministic)
+}
+func (m *AssetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AssetOperation.Merge(m, src)
+}
+func (m *AssetOperation) XXX_Size() int {
+	return xxx_messageInfo_AssetOperation.Size(m)
+}
+func (m *AssetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AssetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AssetOperation proto.InternalMessageInfo
+
+type isAssetOperation_Operation interface {
+	isAssetOperation_Operation()
+}
+
+type AssetOperation_Create struct {
+	Create *resources.Asset `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+func (*AssetOperation_Create) isAssetOperation_Operation() {}
+
+func (m *AssetOperation) GetOperation() isAssetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AssetOperation) GetCreate() *resources.Asset {
+	if x, ok := m.GetOperation().(*AssetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*AssetOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*AssetOperation_Create)(nil),
+	}
+}
+
+// Response message for an asset mutate.
+type MutateAssetsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAssetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MutateAssetsResponse) Reset()         { *m = MutateAssetsResponse{} }
+func (m *MutateAssetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAssetsResponse) ProtoMessage()    {}
+func (*MutateAssetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09a43928a39eb915, []int{3}
+}
+
+func (m *MutateAssetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAssetsResponse.Unmarshal(m, b)
+}
+func (m *MutateAssetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAssetsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateAssetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAssetsResponse.Merge(m, src)
+}
+func (m *MutateAssetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAssetsResponse.Size(m)
+}
+func (m *MutateAssetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAssetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAssetsResponse proto.InternalMessageInfo
+
+func (m *MutateAssetsResponse) GetResults() []*MutateAssetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the asset mutate.
+type MutateAssetResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAssetResult) Reset()         { *m = MutateAssetResult{} }
+func (m *MutateAssetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAssetResult) ProtoMessage()    {}
+func (*MutateAssetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_09a43928a39eb915, []int{4}
+}
+
+func (m *MutateAssetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAssetResult.Unmarshal(m, b)
+}
+func (m *MutateAssetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAssetResult.Marshal(b, m, deterministic)
+}
+func (m *MutateAssetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAssetResult.Merge(m, src)
+}
+func (m *MutateAssetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAssetResult.Size(m)
+}
+func (m *MutateAssetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAssetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAssetResult proto.InternalMessageInfo
+
+func (m *MutateAssetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAssetRequest)(nil), "google.ads.googleads.v3.services.GetAssetRequest")
+	proto.RegisterType((*MutateAssetsRequest)(nil), "google.ads.googleads.v3.services.MutateAssetsRequest")
+	proto.RegisterType((*AssetOperation)(nil), "google.ads.googleads.v3.services.AssetOperation")
+	proto.RegisterType((*MutateAssetsResponse)(nil), "google.ads.googleads.v3.services.MutateAssetsResponse")
+	proto.RegisterType((*MutateAssetResult)(nil), "google.ads.googleads.v3.services.MutateAssetResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/asset_service.proto", fileDescriptor_09a43928a39eb915)
+}
+
+var fileDescriptor_09a43928a39eb915 = []byte{
+	// 581 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xbd, 0x6e, 0xd3, 0x5e,
+	0x14, 0xff, 0xdb, 0x91, 0xfa, 0xa7, 0x37, 0x01, 0x54, 0x83, 0x20, 0x0a, 0x48, 0x44, 0x26, 0x43,
+	0x14, 0xe0, 0xba, 0xc4, 0x80, 0x90, 0xab, 0x4a, 0x38, 0x4b, 0xca, 0x50, 0x5a, 0x05, 0x91, 0x01,
+	0x45, 0x8a, 0x6e, 0xed, 0x83, 0xb1, 0x14, 0xfb, 0x06, 0x9f, 0x9b, 0x2c, 0x55, 0x17, 0x1e, 0x01,
+	0xde, 0x80, 0x09, 0x78, 0x94, 0x0e, 0x2c, 0x6c, 0x9d, 0x18, 0x98, 0x78, 0x02, 0x46, 0x64, 0x5f,
+	0x5f, 0xc7, 0x01, 0xa2, 0xd0, 0xed, 0xc4, 0xe7, 0xf7, 0x71, 0xbe, 0x6e, 0xc8, 0x83, 0x80, 0xf3,
+	0x60, 0x02, 0x16, 0xf3, 0xd1, 0x92, 0x61, 0x1a, 0xcd, 0x6d, 0x0b, 0x21, 0x99, 0x87, 0x1e, 0xa0,
+	0xc5, 0x10, 0x41, 0x8c, 0xf3, 0x9f, 0x74, 0x9a, 0x70, 0xc1, 0x8d, 0xa6, 0x84, 0x52, 0xe6, 0x23,
+	0x2d, 0x58, 0x74, 0x6e, 0x53, 0xc5, 0x6a, 0xdc, 0x5b, 0xa5, 0x9b, 0x00, 0xf2, 0x59, 0x52, 0x08,
+	0x4b, 0xc1, 0xc6, 0x4d, 0x05, 0x9f, 0x86, 0x16, 0x8b, 0x63, 0x2e, 0x98, 0x08, 0x79, 0x8c, 0x79,
+	0xf6, 0x7a, 0x29, 0xeb, 0x4d, 0x42, 0x88, 0x15, 0xed, 0x56, 0x29, 0xf1, 0x2a, 0x84, 0x89, 0x3f,
+	0x3e, 0x82, 0xd7, 0x6c, 0x1e, 0xf2, 0x44, 0x02, 0xcc, 0x1d, 0x72, 0xb9, 0x0f, 0xc2, 0x4d, 0x9d,
+	0x06, 0xf0, 0x66, 0x06, 0x28, 0x8c, 0x36, 0xb9, 0xa8, 0x6a, 0x18, 0xc7, 0x2c, 0x82, 0xba, 0xd6,
+	0xd4, 0xda, 0x9b, 0xbd, 0xca, 0x37, 0x57, 0x1f, 0xd4, 0x54, 0xe6, 0x19, 0x8b, 0xc0, 0x7c, 0xa7,
+	0x91, 0x2b, 0xfb, 0x33, 0xc1, 0x04, 0x64, 0x02, 0xa8, 0x14, 0x5a, 0xa4, 0xea, 0xcd, 0x50, 0xf0,
+	0x08, 0x92, 0x71, 0xe8, 0x97, 0xf9, 0x44, 0x7d, 0x7f, 0xea, 0x1b, 0x2f, 0x08, 0xe1, 0x53, 0x48,
+	0x64, 0x23, 0x75, 0xbd, 0x59, 0x69, 0x57, 0xbb, 0xdb, 0x74, 0xdd, 0xe0, 0x68, 0x66, 0x75, 0xa0,
+	0x88, 0xb9, 0xec, 0x42, 0xc8, 0x64, 0xe4, 0xd2, 0x32, 0xc4, 0xe8, 0x91, 0x0d, 0x2f, 0x01, 0x26,
+	0x64, 0x27, 0xd5, 0x6e, 0x7b, 0xa5, 0x49, 0x31, 0x7b, 0xe9, 0xb2, 0xf7, 0xdf, 0x20, 0x67, 0xf6,
+	0xaa, 0x64, 0xb3, 0xf0, 0x30, 0x81, 0x5c, 0x5d, 0x6e, 0x1b, 0xa7, 0x3c, 0x46, 0x30, 0xf6, 0xc9,
+	0xff, 0x09, 0xe0, 0x6c, 0x22, 0x54, 0x3b, 0xf6, 0xfa, 0x76, 0x4a, 0x42, 0x83, 0x8c, 0x3b, 0x50,
+	0x1a, 0xe6, 0x63, 0xb2, 0xf5, 0x47, 0xd6, 0xb8, 0xfd, 0xd7, 0xed, 0x2c, 0x2f, 0xa6, 0xfb, 0xb1,
+	0x42, 0x6a, 0x19, 0xe9, 0xb9, 0xb4, 0x31, 0x3e, 0x69, 0xe4, 0x82, 0xda, 0xb3, 0x71, 0x7f, 0x7d,
+	0x55, 0xbf, 0xdd, 0x44, 0xe3, 0x9f, 0x47, 0x66, 0x3e, 0x39, 0x73, 0x97, 0x0b, 0x7c, 0xfb, 0xf5,
+	0xfb, 0x7b, 0xbd, 0x63, 0xb4, 0xd3, 0xdb, 0x3e, 0x5e, 0xca, 0xec, 0xaa, 0x63, 0x40, 0xab, 0x23,
+	0x8f, 0x1d, 0xad, 0xce, 0x89, 0xf1, 0x45, 0x23, 0xb5, 0xf2, 0x78, 0x8d, 0x87, 0xe7, 0x9a, 0xa2,
+	0xba, 0xc2, 0xc6, 0xa3, 0xf3, 0xd2, 0xe4, 0x16, 0xcd, 0x83, 0x33, 0xf7, 0x5a, 0xe9, 0x7c, 0xef,
+	0x2e, 0x6e, 0x2b, 0x6b, 0x65, 0xdb, 0xbc, 0x93, 0xb6, 0xb2, 0xa8, 0xfd, 0xb8, 0x04, 0xde, 0xed,
+	0x9c, 0xe4, 0x9d, 0x38, 0x51, 0xa6, 0xed, 0x68, 0x9d, 0xc6, 0x8d, 0x53, 0xb7, 0xbe, 0xf0, 0xcf,
+	0xa3, 0x69, 0x88, 0xd4, 0xe3, 0x51, 0xef, 0xa7, 0x46, 0x5a, 0x1e, 0x8f, 0xd6, 0xd6, 0xda, 0xdb,
+	0x2a, 0x2f, 0xf4, 0x30, 0x7d, 0xbc, 0x87, 0xda, 0xcb, 0xbd, 0x9c, 0x16, 0xf0, 0x09, 0x8b, 0x03,
+	0xca, 0x93, 0xc0, 0x0a, 0x20, 0xce, 0x9e, 0xb6, 0xb5, 0x30, 0x5a, 0xfd, 0xe7, 0xb5, 0xa3, 0x82,
+	0x0f, 0x7a, 0xa5, 0xef, 0xba, 0x9f, 0xf5, 0x66, 0x5f, 0x0a, 0xba, 0x3e, 0x52, 0x19, 0xa6, 0xd1,
+	0xd0, 0xa6, 0xb9, 0x31, 0x9e, 0x2a, 0xc8, 0xc8, 0xf5, 0x71, 0x54, 0x40, 0x46, 0x43, 0x7b, 0xa4,
+	0x20, 0x3f, 0xf4, 0x96, 0xfc, 0xee, 0x38, 0xae, 0x8f, 0x8e, 0x53, 0x80, 0x1c, 0x67, 0x68, 0x3b,
+	0x8e, 0x82, 0x1d, 0x6d, 0x64, 0x75, 0xda, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x47, 0x5c,
+	0xd3, 0x63, 0x05, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AssetServiceClient is the client API for AssetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AssetServiceClient interface {
+	// Returns the requested asset in full detail.
+	GetAsset(ctx context.Context, in *GetAssetRequest, opts ...grpc.CallOption) (*resources.Asset, error)
+	// Creates assets. Operation statuses are returned.
+	MutateAssets(ctx context.Context, in *MutateAssetsRequest, opts ...grpc.CallOption) (*MutateAssetsResponse, error)
+}
+
+type assetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAssetServiceClient(cc grpc.ClientConnInterface) AssetServiceClient {
+	return &assetServiceClient{cc}
+}
+
+func (c *assetServiceClient) GetAsset(ctx context.Context, in *GetAssetRequest, opts ...grpc.CallOption) (*resources.Asset, error) {
+	out := new(resources.Asset)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AssetService/GetAsset", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *assetServiceClient) MutateAssets(ctx context.Context, in *MutateAssetsRequest, opts ...grpc.CallOption) (*MutateAssetsResponse, error) {
+	out := new(MutateAssetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.AssetService/MutateAssets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AssetServiceServer is the server API for AssetService service.
+type AssetServiceServer interface {
+	// Returns the requested asset in full detail.
+	GetAsset(context.Context, *GetAssetRequest) (*resources.Asset, error)
+	// Creates assets. Operation statuses are returned.
+	MutateAssets(context.Context, *MutateAssetsRequest) (*MutateAssetsResponse, error)
+}
+
+// UnimplementedAssetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedAssetServiceServer struct {
+}
+
+func (*UnimplementedAssetServiceServer) GetAsset(ctx context.Context, req *GetAssetRequest) (*resources.Asset, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAsset not implemented")
+}
+func (*UnimplementedAssetServiceServer) MutateAssets(ctx context.Context, req *MutateAssetsRequest) (*MutateAssetsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateAssets not implemented")
+}
+
+func RegisterAssetServiceServer(s *grpc.Server, srv AssetServiceServer) {
+	s.RegisterService(&_AssetService_serviceDesc, srv)
+}
+
+func _AssetService_GetAsset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAssetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AssetServiceServer).GetAsset(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AssetService/GetAsset",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AssetServiceServer).GetAsset(ctx, req.(*GetAssetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AssetService_MutateAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAssetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AssetServiceServer).MutateAssets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.AssetService/MutateAssets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AssetServiceServer).MutateAssets(ctx, req.(*MutateAssetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AssetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.AssetService",
+	HandlerType: (*AssetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAsset",
+			Handler:    _AssetService_GetAsset_Handler,
+		},
+		{
+			MethodName: "MutateAssets",
+			Handler:    _AssetService_MutateAssets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/asset_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/bidding_strategy_service.pb.go b/googleapis/ads/googleads/v3/services/bidding_strategy_service.pb.go
new file mode 100644
index 0000000..0f6eb47
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/bidding_strategy_service.pb.go
@@ -0,0 +1,531 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/bidding_strategy_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [BiddingStrategyService.GetBiddingStrategy][google.ads.googleads.v3.services.BiddingStrategyService.GetBiddingStrategy].
+type GetBiddingStrategyRequest struct {
+	// Required. The resource name of the bidding strategy to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBiddingStrategyRequest) Reset()         { *m = GetBiddingStrategyRequest{} }
+func (m *GetBiddingStrategyRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBiddingStrategyRequest) ProtoMessage()    {}
+func (*GetBiddingStrategyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_527fe3c2a1fca4fa, []int{0}
+}
+
+func (m *GetBiddingStrategyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Unmarshal(m, b)
+}
+func (m *GetBiddingStrategyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Marshal(b, m, deterministic)
+}
+func (m *GetBiddingStrategyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBiddingStrategyRequest.Merge(m, src)
+}
+func (m *GetBiddingStrategyRequest) XXX_Size() int {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Size(m)
+}
+func (m *GetBiddingStrategyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBiddingStrategyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBiddingStrategyRequest proto.InternalMessageInfo
+
+func (m *GetBiddingStrategyRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [BiddingStrategyService.MutateBiddingStrategies][google.ads.googleads.v3.services.BiddingStrategyService.MutateBiddingStrategies].
+type MutateBiddingStrategiesRequest struct {
+	// Required. The ID of the customer whose bidding strategies are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual bidding strategies.
+	Operations []*BiddingStrategyOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateBiddingStrategiesRequest) Reset()         { *m = MutateBiddingStrategiesRequest{} }
+func (m *MutateBiddingStrategiesRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategiesRequest) ProtoMessage()    {}
+func (*MutateBiddingStrategiesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_527fe3c2a1fca4fa, []int{1}
+}
+
+func (m *MutateBiddingStrategiesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategiesRequest.Merge(m, src)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Size(m)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategiesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategiesRequest proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategiesRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateBiddingStrategiesRequest) GetOperations() []*BiddingStrategyOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateBiddingStrategiesRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateBiddingStrategiesRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a bidding strategy.
+type BiddingStrategyOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*BiddingStrategyOperation_Create
+	//	*BiddingStrategyOperation_Update
+	//	*BiddingStrategyOperation_Remove
+	Operation            isBiddingStrategyOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *BiddingStrategyOperation) Reset()         { *m = BiddingStrategyOperation{} }
+func (m *BiddingStrategyOperation) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyOperation) ProtoMessage()    {}
+func (*BiddingStrategyOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_527fe3c2a1fca4fa, []int{2}
+}
+
+func (m *BiddingStrategyOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyOperation.Unmarshal(m, b)
+}
+func (m *BiddingStrategyOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyOperation.Marshal(b, m, deterministic)
+}
+func (m *BiddingStrategyOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyOperation.Merge(m, src)
+}
+func (m *BiddingStrategyOperation) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyOperation.Size(m)
+}
+func (m *BiddingStrategyOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyOperation proto.InternalMessageInfo
+
+func (m *BiddingStrategyOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isBiddingStrategyOperation_Operation interface {
+	isBiddingStrategyOperation_Operation()
+}
+
+type BiddingStrategyOperation_Create struct {
+	Create *resources.BiddingStrategy `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type BiddingStrategyOperation_Update struct {
+	Update *resources.BiddingStrategy `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type BiddingStrategyOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*BiddingStrategyOperation_Create) isBiddingStrategyOperation_Operation() {}
+
+func (*BiddingStrategyOperation_Update) isBiddingStrategyOperation_Operation() {}
+
+func (*BiddingStrategyOperation_Remove) isBiddingStrategyOperation_Operation() {}
+
+func (m *BiddingStrategyOperation) GetOperation() isBiddingStrategyOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetCreate() *resources.BiddingStrategy {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetUpdate() *resources.BiddingStrategy {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*BiddingStrategyOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*BiddingStrategyOperation_Create)(nil),
+		(*BiddingStrategyOperation_Update)(nil),
+		(*BiddingStrategyOperation_Remove)(nil),
+	}
+}
+
+// Response message for bidding strategy mutate.
+type MutateBiddingStrategiesResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateBiddingStrategyResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateBiddingStrategiesResponse) Reset()         { *m = MutateBiddingStrategiesResponse{} }
+func (m *MutateBiddingStrategiesResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategiesResponse) ProtoMessage()    {}
+func (*MutateBiddingStrategiesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_527fe3c2a1fca4fa, []int{3}
+}
+
+func (m *MutateBiddingStrategiesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategiesResponse.Merge(m, src)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Size(m)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategiesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategiesResponse proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategiesResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateBiddingStrategiesResponse) GetResults() []*MutateBiddingStrategyResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the bidding strategy mutate.
+type MutateBiddingStrategyResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateBiddingStrategyResult) Reset()         { *m = MutateBiddingStrategyResult{} }
+func (m *MutateBiddingStrategyResult) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategyResult) ProtoMessage()    {}
+func (*MutateBiddingStrategyResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_527fe3c2a1fca4fa, []int{4}
+}
+
+func (m *MutateBiddingStrategyResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategyResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Marshal(b, m, deterministic)
+}
+func (m *MutateBiddingStrategyResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategyResult.Merge(m, src)
+}
+func (m *MutateBiddingStrategyResult) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Size(m)
+}
+func (m *MutateBiddingStrategyResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategyResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategyResult proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategyResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetBiddingStrategyRequest)(nil), "google.ads.googleads.v3.services.GetBiddingStrategyRequest")
+	proto.RegisterType((*MutateBiddingStrategiesRequest)(nil), "google.ads.googleads.v3.services.MutateBiddingStrategiesRequest")
+	proto.RegisterType((*BiddingStrategyOperation)(nil), "google.ads.googleads.v3.services.BiddingStrategyOperation")
+	proto.RegisterType((*MutateBiddingStrategiesResponse)(nil), "google.ads.googleads.v3.services.MutateBiddingStrategiesResponse")
+	proto.RegisterType((*MutateBiddingStrategyResult)(nil), "google.ads.googleads.v3.services.MutateBiddingStrategyResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/bidding_strategy_service.proto", fileDescriptor_527fe3c2a1fca4fa)
+}
+
+var fileDescriptor_527fe3c2a1fca4fa = []byte{
+	// 771 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6b, 0xe3, 0x46,
+	0x14, 0xaf, 0xe4, 0x90, 0x36, 0xe3, 0xa4, 0x85, 0x29, 0x4d, 0x54, 0xa7, 0x34, 0x46, 0x0d, 0xd4,
+	0x98, 0x22, 0x81, 0x4d, 0x4b, 0x91, 0x09, 0xad, 0x0c, 0xf9, 0x28, 0x6d, 0x9a, 0xa0, 0x40, 0x0a,
+	0xc1, 0x20, 0xc6, 0xd2, 0x44, 0x15, 0x91, 0x34, 0xea, 0xcc, 0xc8, 0x60, 0x42, 0x2e, 0xb9, 0xf4,
+	0x0f, 0xe8, 0xad, 0xc7, 0x3d, 0xee, 0x9f, 0xb1, 0xc7, 0x1c, 0x77, 0x6f, 0x39, 0xed, 0x61, 0x4f,
+	0x7b, 0xdf, 0xcb, 0x9e, 0x16, 0x69, 0x34, 0xfe, 0x8a, 0xbd, 0x86, 0xe4, 0xf6, 0x34, 0xef, 0x37,
+	0xbf, 0xf7, 0xf1, 0x7b, 0xf3, 0x04, 0x7e, 0x09, 0x08, 0x09, 0x22, 0x6c, 0x22, 0x9f, 0x99, 0xc2,
+	0xcc, 0xad, 0x41, 0xdb, 0x64, 0x98, 0x0e, 0x42, 0x0f, 0x33, 0xb3, 0x1f, 0xfa, 0x7e, 0x98, 0x04,
+	0x2e, 0xe3, 0x14, 0x71, 0x1c, 0x0c, 0xdd, 0xd2, 0x63, 0xa4, 0x94, 0x70, 0x02, 0xeb, 0xe2, 0x96,
+	0x81, 0x7c, 0x66, 0x8c, 0x08, 0x8c, 0x41, 0xdb, 0x90, 0x04, 0xb5, 0x9f, 0x17, 0x85, 0xa0, 0x98,
+	0x91, 0x8c, 0xce, 0x8b, 0x21, 0xb8, 0x6b, 0xdf, 0xc8, 0x9b, 0x69, 0x68, 0xa2, 0x24, 0x21, 0x1c,
+	0xf1, 0x90, 0x24, 0xac, 0xf4, 0x6e, 0x4d, 0x78, 0xbd, 0x28, 0xc4, 0x09, 0x2f, 0x1d, 0x3b, 0x13,
+	0x8e, 0xcb, 0x10, 0x47, 0xbe, 0xdb, 0xc7, 0x7f, 0xa3, 0x41, 0x48, 0x68, 0x09, 0x28, 0x73, 0x36,
+	0x8b, 0xaf, 0x7e, 0x76, 0x59, 0xa2, 0x62, 0xc4, 0xae, 0x66, 0xb8, 0x69, 0xea, 0x99, 0x8c, 0x23,
+	0x9e, 0x95, 0x41, 0xf5, 0x7d, 0xf0, 0xf5, 0x21, 0xe6, 0x5d, 0x91, 0xef, 0x59, 0x99, 0xae, 0x83,
+	0xff, 0xc9, 0x30, 0xe3, 0xb0, 0x01, 0x36, 0x64, 0x4d, 0x6e, 0x82, 0x62, 0xac, 0x29, 0x75, 0xa5,
+	0xb1, 0xd6, 0xad, 0xbc, 0xb6, 0x55, 0x67, 0x5d, 0x7a, 0xfe, 0x44, 0x31, 0xd6, 0xdf, 0x29, 0xe0,
+	0xdb, 0xe3, 0x8c, 0x23, 0x8e, 0xa7, 0xa9, 0x42, 0xcc, 0x24, 0xd9, 0x2e, 0xa8, 0x7a, 0x19, 0xe3,
+	0x24, 0xc6, 0xd4, 0x0d, 0xfd, 0x49, 0x2a, 0x20, 0xcf, 0x7f, 0xf3, 0xa1, 0x0b, 0x00, 0x49, 0x31,
+	0x15, 0x8d, 0xd1, 0xd4, 0x7a, 0xa5, 0x51, 0x6d, 0x59, 0xc6, 0x32, 0x4d, 0x8c, 0x99, 0x02, 0x4e,
+	0x24, 0x45, 0x19, 0x60, 0x4c, 0x09, 0xbf, 0x07, 0x5f, 0xa4, 0x88, 0xf2, 0x10, 0x45, 0xee, 0x25,
+	0x0a, 0xa3, 0x8c, 0x62, 0xad, 0x52, 0x57, 0x1a, 0x9f, 0x39, 0x9f, 0x97, 0xc7, 0x07, 0xe2, 0x14,
+	0x7e, 0x07, 0x36, 0x06, 0x28, 0x0a, 0x7d, 0xc4, 0xb1, 0x4b, 0x92, 0x68, 0xa8, 0xad, 0x14, 0xb0,
+	0x75, 0x79, 0x78, 0x92, 0x44, 0x43, 0xfd, 0x7f, 0x15, 0x68, 0x8b, 0x62, 0xc3, 0x0e, 0xa8, 0x66,
+	0x69, 0x71, 0x3f, 0x57, 0xa2, 0xb8, 0x5f, 0x6d, 0xd5, 0x64, 0x31, 0x52, 0x2c, 0xe3, 0x20, 0x17,
+	0xeb, 0x18, 0xb1, 0x2b, 0x07, 0x08, 0x78, 0x6e, 0xc3, 0x3f, 0xc0, 0xaa, 0x47, 0x31, 0xe2, 0xa2,
+	0xe9, 0xd5, 0x56, 0x6b, 0x61, 0x13, 0x46, 0x63, 0x37, 0xdb, 0x85, 0xa3, 0x4f, 0x9c, 0x92, 0x23,
+	0x67, 0x13, 0xdc, 0x9a, 0xfa, 0x14, 0x36, 0xc1, 0x01, 0x35, 0xb0, 0x4a, 0x71, 0x4c, 0x06, 0xa2,
+	0x75, 0x6b, 0xb9, 0x47, 0x7c, 0x77, 0xab, 0x60, 0x6d, 0xd4, 0x6b, 0xfd, 0x85, 0x02, 0x76, 0x16,
+	0x0e, 0x05, 0x4b, 0x49, 0xc2, 0x30, 0x3c, 0x00, 0x5f, 0xcd, 0xc8, 0xe1, 0x62, 0x4a, 0x09, 0x2d,
+	0x98, 0xab, 0x2d, 0x28, 0xf3, 0xa4, 0xa9, 0x67, 0x9c, 0x15, 0x83, 0xeb, 0x7c, 0x39, 0x2d, 0xd4,
+	0x7e, 0x0e, 0x87, 0x7f, 0x81, 0x4f, 0x29, 0x66, 0x59, 0xc4, 0xe5, 0xd0, 0xec, 0x2d, 0x1f, 0x9a,
+	0x79, 0xb9, 0x0d, 0x9d, 0x82, 0xc5, 0x91, 0x6c, 0x7a, 0x17, 0x6c, 0x7f, 0x04, 0x97, 0x4f, 0xc9,
+	0x9c, 0x27, 0x32, 0xfd, 0x3a, 0x5a, 0xff, 0xae, 0x80, 0xcd, 0x99, 0xeb, 0x67, 0x22, 0x09, 0xf8,
+	0x52, 0x01, 0xf0, 0xe1, 0x03, 0x84, 0x9d, 0xe5, 0xd9, 0x2f, 0x7c, 0xb6, 0xb5, 0x47, 0x88, 0xab,
+	0xff, 0x7e, 0x6f, 0x4f, 0x17, 0x72, 0xfb, 0xea, 0xcd, 0x7f, 0xea, 0x8f, 0xb0, 0x9d, 0x2f, 0xb6,
+	0xeb, 0x29, 0xcf, 0x9e, 0x7c, 0xae, 0xcc, 0x6c, 0xca, 0x4d, 0x37, 0x56, 0xd6, 0x6c, 0xde, 0xc0,
+	0xf7, 0x0a, 0xd8, 0x5a, 0x20, 0x3c, 0xfc, 0xf5, 0x71, 0xba, 0x8c, 0x17, 0x49, 0xcd, 0x7e, 0x02,
+	0x83, 0x98, 0x3a, 0xfd, 0xe2, 0xde, 0xde, 0x9c, 0x58, 0x46, 0x3f, 0x8c, 0xf7, 0x43, 0x51, 0x76,
+	0x47, 0xff, 0x29, 0x2f, 0x7b, 0x5c, 0xe7, 0xf5, 0x04, 0x78, 0xaf, 0x79, 0xf3, 0xb0, 0x6a, 0x2b,
+	0x2e, 0x22, 0x5a, 0x4a, 0xb3, 0xb6, 0x7d, 0x67, 0x6b, 0xe3, 0xac, 0x4a, 0x2b, 0x0d, 0x99, 0xe1,
+	0x91, 0xb8, 0x7b, 0xab, 0x82, 0x5d, 0x8f, 0xc4, 0x4b, 0x2b, 0xe8, 0x6e, 0xcf, 0x9f, 0x97, 0xd3,
+	0x7c, 0x69, 0x9c, 0x2a, 0x17, 0x47, 0x25, 0x41, 0x40, 0x22, 0x94, 0x04, 0x06, 0xa1, 0x81, 0x19,
+	0xe0, 0xa4, 0x58, 0x29, 0xe6, 0x38, 0xe4, 0xe2, 0xbf, 0x60, 0x47, 0x1a, 0xcf, 0xd4, 0xca, 0xa1,
+	0x6d, 0x3f, 0x57, 0xeb, 0x87, 0x82, 0xd0, 0xf6, 0x99, 0x21, 0xcc, 0xdc, 0x3a, 0x6f, 0x1b, 0x65,
+	0x60, 0x76, 0x27, 0x21, 0x3d, 0xdb, 0x67, 0xbd, 0x11, 0xa4, 0x77, 0xde, 0xee, 0x49, 0xc8, 0x5b,
+	0x75, 0x57, 0x9c, 0x5b, 0x96, 0xed, 0x33, 0xcb, 0x1a, 0x81, 0x2c, 0xeb, 0xbc, 0x6d, 0x59, 0x12,
+	0xd6, 0x5f, 0x2d, 0xf2, 0x6c, 0x7f, 0x08, 0x00, 0x00, 0xff, 0xff, 0xed, 0x02, 0xf8, 0x92, 0xac,
+	0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// BiddingStrategyServiceClient is the client API for BiddingStrategyService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BiddingStrategyServiceClient interface {
+	// Returns the requested bidding strategy in full detail.
+	GetBiddingStrategy(ctx context.Context, in *GetBiddingStrategyRequest, opts ...grpc.CallOption) (*resources.BiddingStrategy, error)
+	// Creates, updates, or removes bidding strategies. Operation statuses are
+	// returned.
+	MutateBiddingStrategies(ctx context.Context, in *MutateBiddingStrategiesRequest, opts ...grpc.CallOption) (*MutateBiddingStrategiesResponse, error)
+}
+
+type biddingStrategyServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewBiddingStrategyServiceClient(cc grpc.ClientConnInterface) BiddingStrategyServiceClient {
+	return &biddingStrategyServiceClient{cc}
+}
+
+func (c *biddingStrategyServiceClient) GetBiddingStrategy(ctx context.Context, in *GetBiddingStrategyRequest, opts ...grpc.CallOption) (*resources.BiddingStrategy, error) {
+	out := new(resources.BiddingStrategy)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.BiddingStrategyService/GetBiddingStrategy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *biddingStrategyServiceClient) MutateBiddingStrategies(ctx context.Context, in *MutateBiddingStrategiesRequest, opts ...grpc.CallOption) (*MutateBiddingStrategiesResponse, error) {
+	out := new(MutateBiddingStrategiesResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.BiddingStrategyService/MutateBiddingStrategies", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BiddingStrategyServiceServer is the server API for BiddingStrategyService service.
+type BiddingStrategyServiceServer interface {
+	// Returns the requested bidding strategy in full detail.
+	GetBiddingStrategy(context.Context, *GetBiddingStrategyRequest) (*resources.BiddingStrategy, error)
+	// Creates, updates, or removes bidding strategies. Operation statuses are
+	// returned.
+	MutateBiddingStrategies(context.Context, *MutateBiddingStrategiesRequest) (*MutateBiddingStrategiesResponse, error)
+}
+
+// UnimplementedBiddingStrategyServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedBiddingStrategyServiceServer struct {
+}
+
+func (*UnimplementedBiddingStrategyServiceServer) GetBiddingStrategy(ctx context.Context, req *GetBiddingStrategyRequest) (*resources.BiddingStrategy, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetBiddingStrategy not implemented")
+}
+func (*UnimplementedBiddingStrategyServiceServer) MutateBiddingStrategies(ctx context.Context, req *MutateBiddingStrategiesRequest) (*MutateBiddingStrategiesResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateBiddingStrategies not implemented")
+}
+
+func RegisterBiddingStrategyServiceServer(s *grpc.Server, srv BiddingStrategyServiceServer) {
+	s.RegisterService(&_BiddingStrategyService_serviceDesc, srv)
+}
+
+func _BiddingStrategyService_GetBiddingStrategy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetBiddingStrategyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BiddingStrategyServiceServer).GetBiddingStrategy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.BiddingStrategyService/GetBiddingStrategy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiddingStrategyServiceServer).GetBiddingStrategy(ctx, req.(*GetBiddingStrategyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BiddingStrategyService_MutateBiddingStrategies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateBiddingStrategiesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BiddingStrategyServiceServer).MutateBiddingStrategies(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.BiddingStrategyService/MutateBiddingStrategies",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiddingStrategyServiceServer).MutateBiddingStrategies(ctx, req.(*MutateBiddingStrategiesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BiddingStrategyService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.BiddingStrategyService",
+	HandlerType: (*BiddingStrategyServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetBiddingStrategy",
+			Handler:    _BiddingStrategyService_GetBiddingStrategy_Handler,
+		},
+		{
+			MethodName: "MutateBiddingStrategies",
+			Handler:    _BiddingStrategyService_MutateBiddingStrategies_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/bidding_strategy_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/billing_setup_service.pb.go b/googleapis/ads/googleads/v3/services/billing_setup_service.pb.go
new file mode 100644
index 0000000..af08d50
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/billing_setup_service.pb.go
@@ -0,0 +1,461 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/billing_setup_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [BillingSetupService.GetBillingSetup][google.ads.googleads.v3.services.BillingSetupService.GetBillingSetup].
+type GetBillingSetupRequest struct {
+	// Required. The resource name of the billing setup to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBillingSetupRequest) Reset()         { *m = GetBillingSetupRequest{} }
+func (m *GetBillingSetupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBillingSetupRequest) ProtoMessage()    {}
+func (*GetBillingSetupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af7397edaa9e82ba, []int{0}
+}
+
+func (m *GetBillingSetupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBillingSetupRequest.Unmarshal(m, b)
+}
+func (m *GetBillingSetupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBillingSetupRequest.Marshal(b, m, deterministic)
+}
+func (m *GetBillingSetupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBillingSetupRequest.Merge(m, src)
+}
+func (m *GetBillingSetupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetBillingSetupRequest.Size(m)
+}
+func (m *GetBillingSetupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBillingSetupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBillingSetupRequest proto.InternalMessageInfo
+
+func (m *GetBillingSetupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for billing setup mutate operations.
+type MutateBillingSetupRequest struct {
+	// Required. Id of the customer to apply the billing setup mutate operation to.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The operation to perform.
+	Operation            *BillingSetupOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *MutateBillingSetupRequest) Reset()         { *m = MutateBillingSetupRequest{} }
+func (m *MutateBillingSetupRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupRequest) ProtoMessage()    {}
+func (*MutateBillingSetupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af7397edaa9e82ba, []int{1}
+}
+
+func (m *MutateBillingSetupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupRequest.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateBillingSetupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupRequest.Merge(m, src)
+}
+func (m *MutateBillingSetupRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupRequest.Size(m)
+}
+func (m *MutateBillingSetupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupRequest proto.InternalMessageInfo
+
+func (m *MutateBillingSetupRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateBillingSetupRequest) GetOperation() *BillingSetupOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// A single operation on a billing setup, which describes the cancellation of an
+// existing billing setup.
+type BillingSetupOperation struct {
+	// Only one of these operations can be set. "Update" operations are not
+	// supported.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*BillingSetupOperation_Create
+	//	*BillingSetupOperation_Remove
+	Operation            isBillingSetupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *BillingSetupOperation) Reset()         { *m = BillingSetupOperation{} }
+func (m *BillingSetupOperation) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupOperation) ProtoMessage()    {}
+func (*BillingSetupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af7397edaa9e82ba, []int{2}
+}
+
+func (m *BillingSetupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupOperation.Unmarshal(m, b)
+}
+func (m *BillingSetupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupOperation.Marshal(b, m, deterministic)
+}
+func (m *BillingSetupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupOperation.Merge(m, src)
+}
+func (m *BillingSetupOperation) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupOperation.Size(m)
+}
+func (m *BillingSetupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupOperation proto.InternalMessageInfo
+
+type isBillingSetupOperation_Operation interface {
+	isBillingSetupOperation_Operation()
+}
+
+type BillingSetupOperation_Create struct {
+	Create *resources.BillingSetup `protobuf:"bytes,2,opt,name=create,proto3,oneof"`
+}
+
+type BillingSetupOperation_Remove struct {
+	Remove string `protobuf:"bytes,1,opt,name=remove,proto3,oneof"`
+}
+
+func (*BillingSetupOperation_Create) isBillingSetupOperation_Operation() {}
+
+func (*BillingSetupOperation_Remove) isBillingSetupOperation_Operation() {}
+
+func (m *BillingSetupOperation) GetOperation() isBillingSetupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *BillingSetupOperation) GetCreate() *resources.BillingSetup {
+	if x, ok := m.GetOperation().(*BillingSetupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *BillingSetupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*BillingSetupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*BillingSetupOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*BillingSetupOperation_Create)(nil),
+		(*BillingSetupOperation_Remove)(nil),
+	}
+}
+
+// Response message for a billing setup operation.
+type MutateBillingSetupResponse struct {
+	// A result that identifies the resource affected by the mutate request.
+	Result               *MutateBillingSetupResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *MutateBillingSetupResponse) Reset()         { *m = MutateBillingSetupResponse{} }
+func (m *MutateBillingSetupResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupResponse) ProtoMessage()    {}
+func (*MutateBillingSetupResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af7397edaa9e82ba, []int{3}
+}
+
+func (m *MutateBillingSetupResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupResponse.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateBillingSetupResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupResponse.Merge(m, src)
+}
+func (m *MutateBillingSetupResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupResponse.Size(m)
+}
+func (m *MutateBillingSetupResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupResponse proto.InternalMessageInfo
+
+func (m *MutateBillingSetupResponse) GetResult() *MutateBillingSetupResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// Result for a single billing setup mutate.
+type MutateBillingSetupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateBillingSetupResult) Reset()         { *m = MutateBillingSetupResult{} }
+func (m *MutateBillingSetupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupResult) ProtoMessage()    {}
+func (*MutateBillingSetupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_af7397edaa9e82ba, []int{4}
+}
+
+func (m *MutateBillingSetupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupResult.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupResult.Marshal(b, m, deterministic)
+}
+func (m *MutateBillingSetupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupResult.Merge(m, src)
+}
+func (m *MutateBillingSetupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupResult.Size(m)
+}
+func (m *MutateBillingSetupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupResult proto.InternalMessageInfo
+
+func (m *MutateBillingSetupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetBillingSetupRequest)(nil), "google.ads.googleads.v3.services.GetBillingSetupRequest")
+	proto.RegisterType((*MutateBillingSetupRequest)(nil), "google.ads.googleads.v3.services.MutateBillingSetupRequest")
+	proto.RegisterType((*BillingSetupOperation)(nil), "google.ads.googleads.v3.services.BillingSetupOperation")
+	proto.RegisterType((*MutateBillingSetupResponse)(nil), "google.ads.googleads.v3.services.MutateBillingSetupResponse")
+	proto.RegisterType((*MutateBillingSetupResult)(nil), "google.ads.googleads.v3.services.MutateBillingSetupResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/billing_setup_service.proto", fileDescriptor_af7397edaa9e82ba)
+}
+
+var fileDescriptor_af7397edaa9e82ba = []byte{
+	// 604 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xcf, 0x8b, 0xd3, 0x40,
+	0x14, 0x36, 0x29, 0x14, 0x76, 0xaa, 0x08, 0x23, 0xab, 0xb1, 0x0a, 0x96, 0xd8, 0x43, 0x29, 0x92,
+	0xc1, 0x06, 0x59, 0x99, 0xdd, 0x45, 0x92, 0x4b, 0x77, 0x0f, 0xea, 0xd2, 0xc5, 0x1e, 0x96, 0x42,
+	0x49, 0x93, 0x31, 0x06, 0x92, 0x4c, 0xcc, 0x4c, 0x7a, 0x59, 0xf6, 0xe2, 0xcd, 0xb3, 0x67, 0x2f,
+	0x1e, 0xfd, 0x3f, 0xbc, 0xec, 0xd5, 0xdb, 0x9e, 0x04, 0xc5, 0x83, 0xff, 0x84, 0x92, 0x4c, 0xa6,
+	0x4d, 0xdd, 0x94, 0xb2, 0x7b, 0x7b, 0x33, 0xef, 0x7b, 0xdf, 0xf7, 0x7e, 0xcd, 0x80, 0x3d, 0x9f,
+	0x52, 0x3f, 0x24, 0xc8, 0xf1, 0x18, 0x12, 0x66, 0x6e, 0xcd, 0x4d, 0xc4, 0x48, 0x3a, 0x0f, 0x5c,
+	0xc2, 0xd0, 0x2c, 0x08, 0xc3, 0x20, 0xf6, 0xa7, 0x8c, 0xf0, 0x2c, 0x99, 0x96, 0xd7, 0x46, 0x92,
+	0x52, 0x4e, 0x61, 0x47, 0x84, 0x18, 0x8e, 0xc7, 0x8c, 0x45, 0xb4, 0x31, 0x37, 0x0d, 0x19, 0xdd,
+	0x7e, 0xb6, 0x8e, 0x3f, 0x25, 0x8c, 0x66, 0xe9, 0x25, 0x01, 0x41, 0xdc, 0x7e, 0x28, 0xc3, 0x92,
+	0x00, 0x39, 0x71, 0x4c, 0xb9, 0xc3, 0x03, 0x1a, 0xb3, 0xd2, 0x7b, 0xaf, 0xe2, 0x75, 0xc3, 0x80,
+	0xc4, 0xbc, 0x74, 0x3c, 0xaa, 0x38, 0xde, 0x06, 0x24, 0xf4, 0xa6, 0x33, 0xf2, 0xce, 0x99, 0x07,
+	0x34, 0x15, 0x00, 0xdd, 0x06, 0x77, 0x87, 0x84, 0xdb, 0x42, 0xf1, 0x38, 0x17, 0x1c, 0x91, 0xf7,
+	0x19, 0x61, 0x1c, 0xf6, 0xc0, 0x2d, 0x99, 0xd2, 0x34, 0x76, 0x22, 0xa2, 0x29, 0x1d, 0xa5, 0xb7,
+	0x65, 0x37, 0x7e, 0x58, 0xea, 0xe8, 0xa6, 0xf4, 0xbc, 0x72, 0x22, 0xa2, 0x7f, 0x56, 0xc0, 0xfd,
+	0x97, 0x19, 0x77, 0x38, 0xa9, 0xe3, 0xe9, 0x82, 0x96, 0x9b, 0x31, 0x4e, 0x23, 0x92, 0x4e, 0x03,
+	0xaf, 0xca, 0x02, 0xe4, 0xfd, 0xa1, 0x07, 0x4f, 0xc0, 0x16, 0x4d, 0x48, 0x5a, 0x54, 0xa5, 0xa9,
+	0x1d, 0xa5, 0xd7, 0x1a, 0xec, 0x18, 0x9b, 0x9a, 0x69, 0x54, 0xf5, 0x5e, 0xcb, 0x70, 0x41, 0xbe,
+	0xa4, 0xd3, 0x3f, 0x2a, 0x60, 0xbb, 0x16, 0x09, 0x0f, 0x41, 0xd3, 0x4d, 0x89, 0xc3, 0x49, 0x29,
+	0x89, 0xd6, 0x4a, 0x2e, 0xa6, 0xb3, 0xa2, 0x79, 0x70, 0x63, 0x54, 0x12, 0x40, 0x0d, 0x34, 0x53,
+	0x12, 0xd1, 0x79, 0xd9, 0xa7, 0xdc, 0x23, 0xce, 0x76, 0xab, 0x52, 0x9a, 0x9e, 0x80, 0x76, 0x5d,
+	0xab, 0x58, 0x42, 0x63, 0x46, 0xe0, 0x28, 0x27, 0x61, 0x59, 0xc8, 0x0b, 0x92, 0xd6, 0x00, 0x6f,
+	0x6e, 0x41, 0x2d, 0x5b, 0x16, 0xf2, 0x51, 0xc9, 0xa4, 0xbf, 0x00, 0xda, 0x3a, 0x0c, 0x7c, 0x5c,
+	0x3b, 0xe3, 0xd5, 0xf1, 0x0e, 0x7e, 0x36, 0xc0, 0x9d, 0x6a, 0xec, 0xb1, 0x90, 0x86, 0xdf, 0x14,
+	0x70, 0xfb, 0xbf, 0xdd, 0x81, 0xcf, 0x37, 0x27, 0x5c, 0xbf, 0x6e, 0xed, 0xab, 0xb6, 0x5e, 0x1f,
+	0x5e, 0x58, 0xab, 0xc9, 0x7f, 0xf8, 0xfe, 0xeb, 0x93, 0xfa, 0x14, 0xa2, 0xfc, 0x31, 0x9d, 0xae,
+	0x78, 0xf6, 0xe5, 0xa2, 0x31, 0xd4, 0x97, 0xaf, 0xab, 0x20, 0x61, 0xa8, 0x7f, 0x06, 0x7f, 0x2b,
+	0x00, 0x5e, 0xee, 0x10, 0xdc, 0xbd, 0x5e, 0xef, 0x45, 0x35, 0x7b, 0xd7, 0x1c, 0x5c, 0xb1, 0x06,
+	0xfa, 0x9b, 0x0b, 0x6b, 0xbb, 0xf2, 0x66, 0x9e, 0x2c, 0xd6, 0xa7, 0x28, 0x71, 0x47, 0x1f, 0xe4,
+	0x25, 0x2e, 0x6b, 0x3a, 0xad, 0x60, 0xf7, 0xfb, 0x67, 0xab, 0x15, 0xe2, 0xa8, 0xd0, 0xc1, 0x4a,
+	0xbf, 0xfd, 0xe0, 0xdc, 0xd2, 0x96, 0xb9, 0x94, 0x56, 0x12, 0x30, 0xc3, 0xa5, 0x91, 0xfd, 0x57,
+	0x01, 0x5d, 0x97, 0x46, 0x1b, 0xf3, 0xb6, 0xb5, 0x9a, 0x5d, 0x38, 0xca, 0xff, 0x92, 0x23, 0xe5,
+	0xe4, 0xa0, 0x8c, 0xf6, 0x69, 0xe8, 0xc4, 0xbe, 0x41, 0x53, 0x1f, 0xf9, 0x24, 0x2e, 0x7e, 0x1a,
+	0xb4, 0xd4, 0x5b, 0xff, 0xb7, 0xee, 0x4a, 0xe3, 0x8b, 0xda, 0x18, 0x5a, 0xd6, 0x57, 0xb5, 0x33,
+	0x14, 0x84, 0x96, 0xc7, 0x0c, 0x61, 0xe6, 0xd6, 0xd8, 0x34, 0x4a, 0x61, 0x76, 0x2e, 0x21, 0x13,
+	0xcb, 0x63, 0x93, 0x05, 0x64, 0x32, 0x36, 0x27, 0x12, 0xf2, 0x47, 0xed, 0x8a, 0x7b, 0x8c, 0x2d,
+	0x8f, 0x61, 0xbc, 0x00, 0x61, 0x3c, 0x36, 0x31, 0x96, 0xb0, 0x59, 0xb3, 0xc8, 0xd3, 0xfc, 0x17,
+	0x00, 0x00, 0xff, 0xff, 0xef, 0xc3, 0xe5, 0xae, 0x02, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// BillingSetupServiceClient is the client API for BillingSetupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BillingSetupServiceClient interface {
+	// Returns a billing setup.
+	GetBillingSetup(ctx context.Context, in *GetBillingSetupRequest, opts ...grpc.CallOption) (*resources.BillingSetup, error)
+	// Creates a billing setup, or cancels an existing billing setup.
+	MutateBillingSetup(ctx context.Context, in *MutateBillingSetupRequest, opts ...grpc.CallOption) (*MutateBillingSetupResponse, error)
+}
+
+type billingSetupServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewBillingSetupServiceClient(cc grpc.ClientConnInterface) BillingSetupServiceClient {
+	return &billingSetupServiceClient{cc}
+}
+
+func (c *billingSetupServiceClient) GetBillingSetup(ctx context.Context, in *GetBillingSetupRequest, opts ...grpc.CallOption) (*resources.BillingSetup, error) {
+	out := new(resources.BillingSetup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.BillingSetupService/GetBillingSetup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *billingSetupServiceClient) MutateBillingSetup(ctx context.Context, in *MutateBillingSetupRequest, opts ...grpc.CallOption) (*MutateBillingSetupResponse, error) {
+	out := new(MutateBillingSetupResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.BillingSetupService/MutateBillingSetup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BillingSetupServiceServer is the server API for BillingSetupService service.
+type BillingSetupServiceServer interface {
+	// Returns a billing setup.
+	GetBillingSetup(context.Context, *GetBillingSetupRequest) (*resources.BillingSetup, error)
+	// Creates a billing setup, or cancels an existing billing setup.
+	MutateBillingSetup(context.Context, *MutateBillingSetupRequest) (*MutateBillingSetupResponse, error)
+}
+
+// UnimplementedBillingSetupServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedBillingSetupServiceServer struct {
+}
+
+func (*UnimplementedBillingSetupServiceServer) GetBillingSetup(ctx context.Context, req *GetBillingSetupRequest) (*resources.BillingSetup, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetBillingSetup not implemented")
+}
+func (*UnimplementedBillingSetupServiceServer) MutateBillingSetup(ctx context.Context, req *MutateBillingSetupRequest) (*MutateBillingSetupResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateBillingSetup not implemented")
+}
+
+func RegisterBillingSetupServiceServer(s *grpc.Server, srv BillingSetupServiceServer) {
+	s.RegisterService(&_BillingSetupService_serviceDesc, srv)
+}
+
+func _BillingSetupService_GetBillingSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetBillingSetupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BillingSetupServiceServer).GetBillingSetup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.BillingSetupService/GetBillingSetup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BillingSetupServiceServer).GetBillingSetup(ctx, req.(*GetBillingSetupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BillingSetupService_MutateBillingSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateBillingSetupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BillingSetupServiceServer).MutateBillingSetup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.BillingSetupService/MutateBillingSetup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BillingSetupServiceServer).MutateBillingSetup(ctx, req.(*MutateBillingSetupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BillingSetupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.BillingSetupService",
+	HandlerType: (*BillingSetupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetBillingSetup",
+			Handler:    _BillingSetupService_GetBillingSetup_Handler,
+		},
+		{
+			MethodName: "MutateBillingSetup",
+			Handler:    _BillingSetupService_MutateBillingSetup_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/billing_setup_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_audience_view_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_audience_view_service.pb.go
new file mode 100644
index 0000000..3a2279b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_audience_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_audience_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignAudienceViewService.GetCampaignAudienceView][google.ads.googleads.v3.services.CampaignAudienceViewService.GetCampaignAudienceView].
+type GetCampaignAudienceViewRequest struct {
+	// Required. The resource name of the campaign audience view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignAudienceViewRequest) Reset()         { *m = GetCampaignAudienceViewRequest{} }
+func (m *GetCampaignAudienceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignAudienceViewRequest) ProtoMessage()    {}
+func (*GetCampaignAudienceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fe165b782c41c4e2, []int{0}
+}
+
+func (m *GetCampaignAudienceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignAudienceViewRequest.Merge(m, src)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Size(m)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignAudienceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignAudienceViewRequest proto.InternalMessageInfo
+
+func (m *GetCampaignAudienceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignAudienceViewRequest)(nil), "google.ads.googleads.v3.services.GetCampaignAudienceViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_audience_view_service.proto", fileDescriptor_fe165b782c41c4e2)
+}
+
+var fileDescriptor_fe165b782c41c4e2 = []byte{
+	// 424 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xb9, 0x23, 0x27, 0x1a, 0x8e, 0x2b, 0x8e, 0x2b, 0x66,
+	0xc0, 0x14, 0x87, 0x23, 0x8a, 0xb3, 0x22, 0x2b, 0x16, 0x7a, 0x9c, 0x90, 0x42, 0x02, 0x61, 0x2e,
+	0xf9, 0x8c, 0x03, 0xc9, 0x4c, 0xcc, 0x24, 0xb9, 0x42, 0x6c, 0x6c, 0xfc, 0x01, 0xfe, 0x83, 0x2b,
+	0xfd, 0x29, 0xd7, 0xda, 0x59, 0x59, 0x68, 0xe3, 0xaf, 0x38, 0xb2, 0x33, 0x93, 0xdd, 0x85, 0xcd,
+	0x6e, 0xf7, 0xc8, 0x7b, 0xdf, 0x7b, 0xdf, 0x7c, 0x2f, 0xde, 0xab, 0x42, 0xca, 0xa2, 0x04, 0xcc,
+	0x72, 0x85, 0x35, 0x1c, 0x50, 0x1f, 0x61, 0x05, 0x4d, 0xcf, 0x33, 0x50, 0x38, 0x63, 0x55, 0xcd,
+	0x78, 0x21, 0x52, 0xd6, 0xe5, 0x1c, 0x44, 0x06, 0x69, 0xcf, 0xe1, 0x2a, 0x35, 0x3c, 0xaa, 0x1b,
+	0xd9, 0x4a, 0x3f, 0xd4, 0xb3, 0x88, 0xe5, 0x0a, 0x8d, 0x36, 0xa8, 0x8f, 0x90, 0xb5, 0x09, 0x9e,
+	0x4f, 0x05, 0x35, 0xa0, 0x64, 0xd7, 0x4c, 0x27, 0xe9, 0x84, 0xe0, 0x81, 0x9d, 0xaf, 0x39, 0x66,
+	0x42, 0xc8, 0x96, 0xb5, 0x5c, 0x0a, 0x65, 0xd8, 0xfd, 0x15, 0x36, 0x2b, 0x39, 0x88, 0xd6, 0x10,
+	0x8f, 0x56, 0x88, 0x8f, 0x1c, 0xca, 0x3c, 0xbd, 0x84, 0x4f, 0xac, 0xe7, 0xb2, 0xd1, 0x82, 0xa3,
+	0x37, 0xde, 0xc3, 0x39, 0xb4, 0x2f, 0x4d, 0x34, 0x35, 0xc9, 0x31, 0x87, 0xab, 0x0b, 0xf8, 0xdc,
+	0x81, 0x6a, 0xfd, 0x13, 0xef, 0xbe, 0xdd, 0x31, 0x15, 0xac, 0x82, 0x03, 0x27, 0x74, 0x4e, 0xee,
+	0xce, 0xf6, 0xfe, 0x50, 0xf7, 0xe2, 0x9e, 0x65, 0xde, 0xb2, 0x0a, 0x1e, 0x5f, 0xbb, 0xde, 0xe1,
+	0x26, 0xa7, 0xf7, 0xfa, 0x08, 0xfe, 0x3f, 0xc7, 0xdb, 0x9f, 0x08, 0xf3, 0x5f, 0xa0, 0x5d, 0x27,
+	0x44, 0xdb, 0xf7, 0x0c, 0xce, 0x26, 0x1d, 0xc6, 0x13, 0xa3, 0x4d, 0xf3, 0x47, 0xef, 0x7e, 0xd3,
+	0xf5, 0x17, 0x7e, 0xfb, 0xf5, 0xf7, 0x87, 0xfb, 0xc4, 0x3f, 0x1b, 0xea, 0xf9, 0xb2, 0xc6, 0x3c,
+	0xcb, 0x3a, 0xd5, 0xca, 0x0a, 0x1a, 0x85, 0x4f, 0xc7, 0xbe, 0x56, 0xcd, 0x14, 0x3e, 0xfd, 0x1a,
+	0x1c, 0xde, 0xd0, 0x83, 0xe5, 0x02, 0x06, 0xd5, 0x5c, 0xa1, 0x4c, 0x56, 0xb3, 0xef, 0xae, 0x77,
+	0x9c, 0xc9, 0x6a, 0xe7, 0x73, 0x67, 0xe1, 0x96, 0x53, 0x9e, 0x0f, 0xdd, 0x9d, 0x3b, 0x1f, 0x5e,
+	0x1b, 0x97, 0x42, 0x96, 0x4c, 0x14, 0x48, 0x36, 0x05, 0x2e, 0x40, 0x2c, 0x9a, 0xc5, 0xcb, 0xdc,
+	0xe9, 0xbf, 0xfb, 0xa9, 0x05, 0xd7, 0xee, 0xde, 0x9c, 0xd2, 0x9f, 0x6e, 0x38, 0xd7, 0x86, 0x34,
+	0x57, 0x48, 0xc3, 0x01, 0xc5, 0x11, 0x32, 0xc1, 0xea, 0xc6, 0x4a, 0x12, 0x9a, 0xab, 0x64, 0x94,
+	0x24, 0x71, 0x94, 0x58, 0xc9, 0x7f, 0xf7, 0x58, 0x7f, 0x27, 0x84, 0xe6, 0x8a, 0x90, 0x51, 0x44,
+	0x48, 0x1c, 0x11, 0x62, 0x65, 0x97, 0x77, 0x16, 0x7b, 0x46, 0xb7, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x02, 0x16, 0xa9, 0x57, 0x84, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignAudienceViewServiceClient is the client API for CampaignAudienceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignAudienceViewServiceClient interface {
+	// Returns the requested campaign audience view in full detail.
+	GetCampaignAudienceView(ctx context.Context, in *GetCampaignAudienceViewRequest, opts ...grpc.CallOption) (*resources.CampaignAudienceView, error)
+}
+
+type campaignAudienceViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignAudienceViewServiceClient(cc grpc.ClientConnInterface) CampaignAudienceViewServiceClient {
+	return &campaignAudienceViewServiceClient{cc}
+}
+
+func (c *campaignAudienceViewServiceClient) GetCampaignAudienceView(ctx context.Context, in *GetCampaignAudienceViewRequest, opts ...grpc.CallOption) (*resources.CampaignAudienceView, error) {
+	out := new(resources.CampaignAudienceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignAudienceViewService/GetCampaignAudienceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignAudienceViewServiceServer is the server API for CampaignAudienceViewService service.
+type CampaignAudienceViewServiceServer interface {
+	// Returns the requested campaign audience view in full detail.
+	GetCampaignAudienceView(context.Context, *GetCampaignAudienceViewRequest) (*resources.CampaignAudienceView, error)
+}
+
+// UnimplementedCampaignAudienceViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignAudienceViewServiceServer struct {
+}
+
+func (*UnimplementedCampaignAudienceViewServiceServer) GetCampaignAudienceView(ctx context.Context, req *GetCampaignAudienceViewRequest) (*resources.CampaignAudienceView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCampaignAudienceView not implemented")
+}
+
+func RegisterCampaignAudienceViewServiceServer(s *grpc.Server, srv CampaignAudienceViewServiceServer) {
+	s.RegisterService(&_CampaignAudienceViewService_serviceDesc, srv)
+}
+
+func _CampaignAudienceViewService_GetCampaignAudienceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignAudienceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignAudienceViewServiceServer).GetCampaignAudienceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignAudienceViewService/GetCampaignAudienceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignAudienceViewServiceServer).GetCampaignAudienceView(ctx, req.(*GetCampaignAudienceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignAudienceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignAudienceViewService",
+	HandlerType: (*CampaignAudienceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignAudienceView",
+			Handler:    _CampaignAudienceViewService_GetCampaignAudienceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_audience_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_bid_modifier_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_bid_modifier_service.pb.go
new file mode 100644
index 0000000..d029a8b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_bid_modifier_service.pb.go
@@ -0,0 +1,531 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_bid_modifier_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignBidModifierService.GetCampaignBidModifier][google.ads.googleads.v3.services.CampaignBidModifierService.GetCampaignBidModifier].
+type GetCampaignBidModifierRequest struct {
+	// Required. The resource name of the campaign bid modifier to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignBidModifierRequest) Reset()         { *m = GetCampaignBidModifierRequest{} }
+func (m *GetCampaignBidModifierRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignBidModifierRequest) ProtoMessage()    {}
+func (*GetCampaignBidModifierRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7c1d366a2da265bc, []int{0}
+}
+
+func (m *GetCampaignBidModifierRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignBidModifierRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignBidModifierRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignBidModifierRequest.Merge(m, src)
+}
+func (m *GetCampaignBidModifierRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Size(m)
+}
+func (m *GetCampaignBidModifierRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignBidModifierRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignBidModifierRequest proto.InternalMessageInfo
+
+func (m *GetCampaignBidModifierRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignBidModifierService.MutateCampaignBidModifier][].
+type MutateCampaignBidModifiersRequest struct {
+	// Required. ID of the customer whose campaign bid modifiers are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign bid modifiers.
+	Operations []*CampaignBidModifierOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBidModifiersRequest) Reset()         { *m = MutateCampaignBidModifiersRequest{} }
+func (m *MutateCampaignBidModifiersRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifiersRequest) ProtoMessage()    {}
+func (*MutateCampaignBidModifiersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7c1d366a2da265bc, []int{1}
+}
+
+func (m *MutateCampaignBidModifiersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifiersRequest.Merge(m, src)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Size(m)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifiersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifiersRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifiersRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignBidModifiersRequest) GetOperations() []*CampaignBidModifierOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignBidModifiersRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignBidModifiersRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove, update) on a campaign bid modifier.
+type CampaignBidModifierOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignBidModifierOperation_Create
+	//	*CampaignBidModifierOperation_Update
+	//	*CampaignBidModifierOperation_Remove
+	Operation            isCampaignBidModifierOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *CampaignBidModifierOperation) Reset()         { *m = CampaignBidModifierOperation{} }
+func (m *CampaignBidModifierOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignBidModifierOperation) ProtoMessage()    {}
+func (*CampaignBidModifierOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7c1d366a2da265bc, []int{2}
+}
+
+func (m *CampaignBidModifierOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBidModifierOperation.Unmarshal(m, b)
+}
+func (m *CampaignBidModifierOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBidModifierOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignBidModifierOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBidModifierOperation.Merge(m, src)
+}
+func (m *CampaignBidModifierOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignBidModifierOperation.Size(m)
+}
+func (m *CampaignBidModifierOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBidModifierOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBidModifierOperation proto.InternalMessageInfo
+
+func (m *CampaignBidModifierOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignBidModifierOperation_Operation interface {
+	isCampaignBidModifierOperation_Operation()
+}
+
+type CampaignBidModifierOperation_Create struct {
+	Create *resources.CampaignBidModifier `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignBidModifierOperation_Update struct {
+	Update *resources.CampaignBidModifier `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignBidModifierOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignBidModifierOperation_Create) isCampaignBidModifierOperation_Operation() {}
+
+func (*CampaignBidModifierOperation_Update) isCampaignBidModifierOperation_Operation() {}
+
+func (*CampaignBidModifierOperation_Remove) isCampaignBidModifierOperation_Operation() {}
+
+func (m *CampaignBidModifierOperation) GetOperation() isCampaignBidModifierOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetCreate() *resources.CampaignBidModifier {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetUpdate() *resources.CampaignBidModifier {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignBidModifierOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignBidModifierOperation_Create)(nil),
+		(*CampaignBidModifierOperation_Update)(nil),
+		(*CampaignBidModifierOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign bid modifiers mutate.
+type MutateCampaignBidModifiersResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignBidModifierResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateCampaignBidModifiersResponse) Reset()         { *m = MutateCampaignBidModifiersResponse{} }
+func (m *MutateCampaignBidModifiersResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifiersResponse) ProtoMessage()    {}
+func (*MutateCampaignBidModifiersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7c1d366a2da265bc, []int{3}
+}
+
+func (m *MutateCampaignBidModifiersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifiersResponse.Merge(m, src)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Size(m)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifiersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifiersResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifiersResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignBidModifiersResponse) GetResults() []*MutateCampaignBidModifierResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateCampaignBidModifierResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBidModifierResult) Reset()         { *m = MutateCampaignBidModifierResult{} }
+func (m *MutateCampaignBidModifierResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifierResult) ProtoMessage()    {}
+func (*MutateCampaignBidModifierResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7c1d366a2da265bc, []int{4}
+}
+
+func (m *MutateCampaignBidModifierResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifierResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBidModifierResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifierResult.Merge(m, src)
+}
+func (m *MutateCampaignBidModifierResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Size(m)
+}
+func (m *MutateCampaignBidModifierResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifierResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifierResult proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifierResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignBidModifierRequest)(nil), "google.ads.googleads.v3.services.GetCampaignBidModifierRequest")
+	proto.RegisterType((*MutateCampaignBidModifiersRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignBidModifiersRequest")
+	proto.RegisterType((*CampaignBidModifierOperation)(nil), "google.ads.googleads.v3.services.CampaignBidModifierOperation")
+	proto.RegisterType((*MutateCampaignBidModifiersResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignBidModifiersResponse")
+	proto.RegisterType((*MutateCampaignBidModifierResult)(nil), "google.ads.googleads.v3.services.MutateCampaignBidModifierResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_bid_modifier_service.proto", fileDescriptor_7c1d366a2da265bc)
+}
+
+var fileDescriptor_7c1d366a2da265bc = []byte{
+	// 777 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6b, 0xe3, 0x46,
+	0x14, 0xc7, 0x2b, 0x39, 0xa4, 0xcd, 0x38, 0x69, 0x61, 0x4a, 0x53, 0xa3, 0xa6, 0xc4, 0x55, 0x03,
+	0x35, 0xa6, 0x48, 0x60, 0x43, 0x68, 0x15, 0x92, 0x22, 0x27, 0x75, 0x92, 0x43, 0x7e, 0xa0, 0x40,
+	0x0e, 0xad, 0x17, 0x31, 0x96, 0xc6, 0xde, 0x21, 0x92, 0x46, 0x3b, 0x23, 0x19, 0x42, 0xc8, 0x65,
+	0x0f, 0xf9, 0x07, 0xf6, 0x3f, 0xd8, 0x43, 0x0e, 0xfb, 0x9f, 0x6c, 0xae, 0x7b, 0xcb, 0x69, 0x17,
+	0xf6, 0xb4, 0x7f, 0xc3, 0x1e, 0x16, 0x69, 0x34, 0xfe, 0x11, 0xec, 0x18, 0x36, 0xb7, 0xe7, 0x79,
+	0x5f, 0x7d, 0xde, 0x9b, 0xf7, 0xde, 0x3c, 0x83, 0xbd, 0x3e, 0xa5, 0xfd, 0x00, 0x9b, 0xc8, 0xe7,
+	0xa6, 0x30, 0x33, 0x6b, 0xd0, 0x34, 0x39, 0x66, 0x03, 0xe2, 0x61, 0x6e, 0x7a, 0x28, 0x8c, 0x11,
+	0xe9, 0x47, 0x6e, 0x97, 0xf8, 0x6e, 0x48, 0x7d, 0xd2, 0x23, 0x98, 0xb9, 0x85, 0xdb, 0x88, 0x19,
+	0x4d, 0x28, 0xac, 0x8a, 0x4f, 0x0d, 0xe4, 0x73, 0x63, 0x48, 0x31, 0x06, 0x4d, 0x43, 0x52, 0xb4,
+	0xed, 0x59, 0x71, 0x18, 0xe6, 0x34, 0x65, 0x33, 0x03, 0x89, 0x00, 0xda, 0x9a, 0xfc, 0x3c, 0x26,
+	0x26, 0x8a, 0x22, 0x9a, 0xa0, 0x84, 0xd0, 0x88, 0x17, 0xde, 0x9f, 0xc7, 0xbc, 0x5e, 0x40, 0x70,
+	0x94, 0x14, 0x8e, 0xf5, 0x31, 0x47, 0x8f, 0xe0, 0xc0, 0x77, 0xbb, 0xf8, 0x39, 0x1a, 0x10, 0x2a,
+	0xb9, 0x45, 0xe2, 0x66, 0xfe, 0xab, 0x9b, 0xf6, 0x0a, 0x55, 0x88, 0xf8, 0xc5, 0x03, 0x36, 0x8b,
+	0x3d, 0x93, 0x27, 0x28, 0x49, 0x8b, 0xa0, 0xfa, 0x21, 0xf8, 0x75, 0x1f, 0x27, 0xbb, 0x45, 0xd2,
+	0x2d, 0xe2, 0x1f, 0x15, 0x29, 0x3b, 0xf8, 0x45, 0x8a, 0x79, 0x02, 0x6b, 0x60, 0x45, 0x5e, 0xce,
+	0x8d, 0x50, 0x88, 0x2b, 0x4a, 0x55, 0xa9, 0x2d, 0xb5, 0x4a, 0xef, 0x6d, 0xd5, 0x59, 0x96, 0x9e,
+	0x63, 0x14, 0x62, 0xfd, 0xb3, 0x02, 0x7e, 0x3b, 0x4a, 0x13, 0x94, 0xe0, 0x29, 0x38, 0x2e, 0x79,
+	0x1b, 0xa0, 0xec, 0xa5, 0x3c, 0xa1, 0x21, 0x66, 0x2e, 0xf1, 0xc7, 0x69, 0x40, 0x9e, 0x1f, 0xfa,
+	0xd0, 0x03, 0x80, 0xc6, 0x98, 0x89, 0xfa, 0x54, 0xd4, 0x6a, 0xa9, 0x56, 0x6e, 0xec, 0x18, 0xf3,
+	0xfa, 0x63, 0x4c, 0x09, 0x7c, 0x22, 0x31, 0x45, 0x90, 0x11, 0x16, 0xfe, 0x01, 0x7e, 0x88, 0x11,
+	0x4b, 0x08, 0x0a, 0xdc, 0x1e, 0x22, 0x41, 0xca, 0x70, 0xa5, 0x54, 0x55, 0x6a, 0xdf, 0x39, 0xdf,
+	0x17, 0xc7, 0x6d, 0x71, 0x0a, 0x7f, 0x07, 0x2b, 0x03, 0x14, 0x10, 0x1f, 0x25, 0xd8, 0xa5, 0x51,
+	0x70, 0x59, 0x59, 0xc8, 0x65, 0xcb, 0xf2, 0xf0, 0x24, 0x0a, 0x2e, 0xf5, 0x5b, 0x15, 0xac, 0x3d,
+	0x16, 0x1f, 0x6e, 0x81, 0x72, 0x1a, 0xe7, 0x8c, 0xac, 0x31, 0x39, 0xa3, 0xdc, 0xd0, 0xe4, 0xa5,
+	0x64, 0xef, 0x8c, 0x76, 0xd6, 0xbb, 0x23, 0xc4, 0x2f, 0x1c, 0x20, 0xe4, 0x99, 0x0d, 0x4f, 0xc1,
+	0xa2, 0xc7, 0x30, 0x4a, 0x44, 0xfd, 0xcb, 0x8d, 0xcd, 0x99, 0xc5, 0x18, 0x8e, 0xe2, 0xb4, 0x6a,
+	0x1c, 0x7c, 0xe3, 0x14, 0x9c, 0x8c, 0x28, 0xf8, 0x15, 0xf5, 0xa9, 0x44, 0xc1, 0x81, 0x15, 0xb0,
+	0xc8, 0x70, 0x48, 0x07, 0xa2, 0x8c, 0x4b, 0x99, 0x47, 0xfc, 0x6e, 0x95, 0xc1, 0xd2, 0xb0, 0xee,
+	0xfa, 0x5b, 0x05, 0xe8, 0x8f, 0xcd, 0x09, 0x8f, 0x69, 0xc4, 0x31, 0x6c, 0x83, 0x9f, 0x1e, 0x74,
+	0xc7, 0xc5, 0x8c, 0x51, 0x96, 0xc3, 0xcb, 0x0d, 0x28, 0xd3, 0x65, 0xb1, 0x67, 0x9c, 0xe5, 0x23,
+	0xed, 0xfc, 0x38, 0xd9, 0xb7, 0x7f, 0x33, 0x39, 0xfc, 0x1f, 0x7c, 0xcb, 0x30, 0x4f, 0x83, 0x44,
+	0xce, 0x91, 0x3d, 0x7f, 0x8e, 0x66, 0xa6, 0xe7, 0xe4, 0x24, 0x47, 0x12, 0xf5, 0x36, 0x58, 0x9f,
+	0xa3, 0xcd, 0x86, 0x67, 0xca, 0x03, 0x9a, 0x7c, 0x3b, 0x8d, 0xdb, 0x05, 0xa0, 0x4d, 0x41, 0x9c,
+	0x89, 0x84, 0xe0, 0x07, 0x05, 0xac, 0x4e, 0x7f, 0xa6, 0xf0, 0x9f, 0xf9, 0xb7, 0x79, 0xf4, 0x81,
+	0x6b, 0x5f, 0xd9, 0x77, 0xfd, 0xf8, 0xde, 0x9e, 0xbc, 0xd8, 0xcb, 0x77, 0x1f, 0x5f, 0xa9, 0x7f,
+	0xc1, 0xcd, 0x6c, 0x1f, 0x5e, 0x4d, 0x78, 0xb6, 0xe5, 0xcb, 0xe6, 0x66, 0x7d, 0xb8, 0x20, 0xc7,
+	0x9b, 0x6e, 0xd6, 0xaf, 0xe1, 0x8d, 0x0a, 0xb4, 0xd9, 0x63, 0x01, 0x77, 0x9f, 0xd0, 0x35, 0xb9,
+	0x7c, 0xb4, 0xbd, 0xa7, 0x41, 0xc4, 0x64, 0xea, 0xcf, 0xee, 0xed, 0xd5, 0xb1, 0x1d, 0xf6, 0xe7,
+	0x68, 0xa5, 0xe4, 0x25, 0xd8, 0xd1, 0xff, 0xce, 0x4a, 0x30, 0xba, 0xf3, 0xd5, 0x98, 0x78, 0xbb,
+	0x7e, 0x3d, 0xb5, 0x02, 0x56, 0x98, 0xc7, 0xb5, 0x94, 0xba, 0xf6, 0xcb, 0x9d, 0x5d, 0x19, 0xe5,
+	0x56, 0x58, 0x31, 0xe1, 0x86, 0x47, 0xc3, 0xd6, 0x8d, 0x0a, 0x36, 0x3c, 0x1a, 0xce, 0xbd, 0x47,
+	0x6b, 0x7d, 0xf6, 0x38, 0x9d, 0x66, 0xab, 0xe6, 0x54, 0xf9, 0xef, 0xa0, 0x80, 0xf4, 0x69, 0x80,
+	0xa2, 0xbe, 0x41, 0x59, 0xdf, 0xec, 0xe3, 0x28, 0x5f, 0x44, 0xe6, 0x28, 0xec, 0xec, 0x3f, 0xd5,
+	0x2d, 0x69, 0xbc, 0x56, 0x4b, 0xfb, 0xb6, 0xfd, 0x46, 0xad, 0xee, 0x0b, 0xa0, 0xed, 0x73, 0x43,
+	0x98, 0x99, 0x75, 0xde, 0x34, 0x8a, 0xc0, 0xfc, 0x4e, 0x4a, 0x3a, 0xb6, 0xcf, 0x3b, 0x43, 0x49,
+	0xe7, 0xbc, 0xd9, 0x91, 0x92, 0x4f, 0xea, 0x86, 0x38, 0xb7, 0x2c, 0xdb, 0xe7, 0x96, 0x35, 0x14,
+	0x59, 0xd6, 0x79, 0xd3, 0xb2, 0xa4, 0xac, 0xbb, 0x98, 0xe7, 0xd9, 0xfc, 0x12, 0x00, 0x00, 0xff,
+	0xff, 0x72, 0x5b, 0xe8, 0x90, 0xfb, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignBidModifierServiceClient is the client API for CampaignBidModifierService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignBidModifierServiceClient interface {
+	// Returns the requested campaign bid modifier in full detail.
+	GetCampaignBidModifier(ctx context.Context, in *GetCampaignBidModifierRequest, opts ...grpc.CallOption) (*resources.CampaignBidModifier, error)
+	// Creates, updates, or removes campaign bid modifiers.
+	// Operation statuses are returned.
+	MutateCampaignBidModifiers(ctx context.Context, in *MutateCampaignBidModifiersRequest, opts ...grpc.CallOption) (*MutateCampaignBidModifiersResponse, error)
+}
+
+type campaignBidModifierServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignBidModifierServiceClient(cc grpc.ClientConnInterface) CampaignBidModifierServiceClient {
+	return &campaignBidModifierServiceClient{cc}
+}
+
+func (c *campaignBidModifierServiceClient) GetCampaignBidModifier(ctx context.Context, in *GetCampaignBidModifierRequest, opts ...grpc.CallOption) (*resources.CampaignBidModifier, error) {
+	out := new(resources.CampaignBidModifier)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignBidModifierService/GetCampaignBidModifier", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignBidModifierServiceClient) MutateCampaignBidModifiers(ctx context.Context, in *MutateCampaignBidModifiersRequest, opts ...grpc.CallOption) (*MutateCampaignBidModifiersResponse, error) {
+	out := new(MutateCampaignBidModifiersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignBidModifierService/MutateCampaignBidModifiers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignBidModifierServiceServer is the server API for CampaignBidModifierService service.
+type CampaignBidModifierServiceServer interface {
+	// Returns the requested campaign bid modifier in full detail.
+	GetCampaignBidModifier(context.Context, *GetCampaignBidModifierRequest) (*resources.CampaignBidModifier, error)
+	// Creates, updates, or removes campaign bid modifiers.
+	// Operation statuses are returned.
+	MutateCampaignBidModifiers(context.Context, *MutateCampaignBidModifiersRequest) (*MutateCampaignBidModifiersResponse, error)
+}
+
+// UnimplementedCampaignBidModifierServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignBidModifierServiceServer struct {
+}
+
+func (*UnimplementedCampaignBidModifierServiceServer) GetCampaignBidModifier(ctx context.Context, req *GetCampaignBidModifierRequest) (*resources.CampaignBidModifier, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignBidModifier not implemented")
+}
+func (*UnimplementedCampaignBidModifierServiceServer) MutateCampaignBidModifiers(ctx context.Context, req *MutateCampaignBidModifiersRequest) (*MutateCampaignBidModifiersResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignBidModifiers not implemented")
+}
+
+func RegisterCampaignBidModifierServiceServer(s *grpc.Server, srv CampaignBidModifierServiceServer) {
+	s.RegisterService(&_CampaignBidModifierService_serviceDesc, srv)
+}
+
+func _CampaignBidModifierService_GetCampaignBidModifier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignBidModifierRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBidModifierServiceServer).GetCampaignBidModifier(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignBidModifierService/GetCampaignBidModifier",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBidModifierServiceServer).GetCampaignBidModifier(ctx, req.(*GetCampaignBidModifierRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignBidModifierService_MutateCampaignBidModifiers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignBidModifiersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBidModifierServiceServer).MutateCampaignBidModifiers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignBidModifierService/MutateCampaignBidModifiers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBidModifierServiceServer).MutateCampaignBidModifiers(ctx, req.(*MutateCampaignBidModifiersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignBidModifierService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignBidModifierService",
+	HandlerType: (*CampaignBidModifierServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignBidModifier",
+			Handler:    _CampaignBidModifierService_GetCampaignBidModifier_Handler,
+		},
+		{
+			MethodName: "MutateCampaignBidModifiers",
+			Handler:    _CampaignBidModifierService_MutateCampaignBidModifiers_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_bid_modifier_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_budget_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_budget_service.pb.go
new file mode 100644
index 0000000..4a80fe5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_budget_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_budget_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignBudgetService.GetCampaignBudget][google.ads.googleads.v3.services.CampaignBudgetService.GetCampaignBudget].
+type GetCampaignBudgetRequest struct {
+	// Required. The resource name of the campaign budget to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignBudgetRequest) Reset()         { *m = GetCampaignBudgetRequest{} }
+func (m *GetCampaignBudgetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignBudgetRequest) ProtoMessage()    {}
+func (*GetCampaignBudgetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2d4a4b1fda62b03f, []int{0}
+}
+
+func (m *GetCampaignBudgetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignBudgetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignBudgetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignBudgetRequest.Merge(m, src)
+}
+func (m *GetCampaignBudgetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Size(m)
+}
+func (m *GetCampaignBudgetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignBudgetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignBudgetRequest proto.InternalMessageInfo
+
+func (m *GetCampaignBudgetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignBudgetService.MutateCampaignBudgets][google.ads.googleads.v3.services.CampaignBudgetService.MutateCampaignBudgets].
+type MutateCampaignBudgetsRequest struct {
+	// Required. The ID of the customer whose campaign budgets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign budgets.
+	Operations []*CampaignBudgetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBudgetsRequest) Reset()         { *m = MutateCampaignBudgetsRequest{} }
+func (m *MutateCampaignBudgetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetsRequest) ProtoMessage()    {}
+func (*MutateCampaignBudgetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2d4a4b1fda62b03f, []int{1}
+}
+
+func (m *MutateCampaignBudgetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetsRequest.Merge(m, src)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Size(m)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignBudgetsRequest) GetOperations() []*CampaignBudgetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignBudgetsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignBudgetsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a campaign budget.
+type CampaignBudgetOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignBudgetOperation_Create
+	//	*CampaignBudgetOperation_Update
+	//	*CampaignBudgetOperation_Remove
+	Operation            isCampaignBudgetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *CampaignBudgetOperation) Reset()         { *m = CampaignBudgetOperation{} }
+func (m *CampaignBudgetOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudgetOperation) ProtoMessage()    {}
+func (*CampaignBudgetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2d4a4b1fda62b03f, []int{2}
+}
+
+func (m *CampaignBudgetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudgetOperation.Unmarshal(m, b)
+}
+func (m *CampaignBudgetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudgetOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignBudgetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudgetOperation.Merge(m, src)
+}
+func (m *CampaignBudgetOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudgetOperation.Size(m)
+}
+func (m *CampaignBudgetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudgetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudgetOperation proto.InternalMessageInfo
+
+func (m *CampaignBudgetOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignBudgetOperation_Operation interface {
+	isCampaignBudgetOperation_Operation()
+}
+
+type CampaignBudgetOperation_Create struct {
+	Create *resources.CampaignBudget `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignBudgetOperation_Update struct {
+	Update *resources.CampaignBudget `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignBudgetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignBudgetOperation_Create) isCampaignBudgetOperation_Operation() {}
+
+func (*CampaignBudgetOperation_Update) isCampaignBudgetOperation_Operation() {}
+
+func (*CampaignBudgetOperation_Remove) isCampaignBudgetOperation_Operation() {}
+
+func (m *CampaignBudgetOperation) GetOperation() isCampaignBudgetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetCreate() *resources.CampaignBudget {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetUpdate() *resources.CampaignBudget {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignBudgetOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignBudgetOperation_Create)(nil),
+		(*CampaignBudgetOperation_Update)(nil),
+		(*CampaignBudgetOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign budget mutate.
+type MutateCampaignBudgetsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignBudgetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateCampaignBudgetsResponse) Reset()         { *m = MutateCampaignBudgetsResponse{} }
+func (m *MutateCampaignBudgetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetsResponse) ProtoMessage()    {}
+func (*MutateCampaignBudgetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2d4a4b1fda62b03f, []int{3}
+}
+
+func (m *MutateCampaignBudgetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetsResponse.Merge(m, src)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Size(m)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignBudgetsResponse) GetResults() []*MutateCampaignBudgetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign budget mutate.
+type MutateCampaignBudgetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBudgetResult) Reset()         { *m = MutateCampaignBudgetResult{} }
+func (m *MutateCampaignBudgetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetResult) ProtoMessage()    {}
+func (*MutateCampaignBudgetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2d4a4b1fda62b03f, []int{4}
+}
+
+func (m *MutateCampaignBudgetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignBudgetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetResult.Merge(m, src)
+}
+func (m *MutateCampaignBudgetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Size(m)
+}
+func (m *MutateCampaignBudgetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetResult proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignBudgetRequest)(nil), "google.ads.googleads.v3.services.GetCampaignBudgetRequest")
+	proto.RegisterType((*MutateCampaignBudgetsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignBudgetsRequest")
+	proto.RegisterType((*CampaignBudgetOperation)(nil), "google.ads.googleads.v3.services.CampaignBudgetOperation")
+	proto.RegisterType((*MutateCampaignBudgetsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignBudgetsResponse")
+	proto.RegisterType((*MutateCampaignBudgetResult)(nil), "google.ads.googleads.v3.services.MutateCampaignBudgetResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_budget_service.proto", fileDescriptor_2d4a4b1fda62b03f)
+}
+
+var fileDescriptor_2d4a4b1fda62b03f = []byte{
+	// 767 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6b, 0xdc, 0x46,
+	0x14, 0xaf, 0xb4, 0xc5, 0xad, 0x67, 0xed, 0x96, 0x4e, 0x71, 0x2d, 0x54, 0x97, 0x2e, 0xaa, 0xa1,
+	0xcb, 0x52, 0x24, 0xbc, 0x5b, 0x28, 0x96, 0x6b, 0x17, 0x6d, 0x13, 0x7f, 0x10, 0x1c, 0x1b, 0x19,
+	0x96, 0x10, 0x96, 0x88, 0x59, 0x69, 0xac, 0x08, 0x4b, 0x1a, 0x65, 0x46, 0x5a, 0x30, 0xc6, 0x87,
+	0xe4, 0x5f, 0xc8, 0x21, 0xf7, 0x1c, 0xf3, 0x4f, 0xe4, 0x6e, 0xc8, 0x29, 0x37, 0x9f, 0x72, 0xc8,
+	0x29, 0x47, 0xdf, 0x72, 0x0b, 0xd2, 0x68, 0xf6, 0x2b, 0xbb, 0x2c, 0x71, 0x6e, 0x4f, 0xf3, 0x7e,
+	0xef, 0xf7, 0xbe, 0x9f, 0xc0, 0x8e, 0x4f, 0x88, 0x1f, 0x62, 0x03, 0x79, 0xcc, 0xe0, 0x62, 0x2e,
+	0xf5, 0x5b, 0x06, 0xc3, 0xb4, 0x1f, 0xb8, 0x98, 0x19, 0x2e, 0x8a, 0x12, 0x14, 0xf8, 0xb1, 0xd3,
+	0xcb, 0x3c, 0x1f, 0xa7, 0x4e, 0xa9, 0xd0, 0x13, 0x4a, 0x52, 0x02, 0x6b, 0xdc, 0x48, 0x47, 0x1e,
+	0xd3, 0x07, 0xf6, 0x7a, 0xbf, 0xa5, 0x0b, 0x7b, 0xf5, 0x9f, 0x59, 0x1e, 0x28, 0x66, 0x24, 0xa3,
+	0x53, 0x5c, 0x70, 0x6a, 0x75, 0x4d, 0x18, 0x26, 0x81, 0x81, 0xe2, 0x98, 0xa4, 0x28, 0x0d, 0x48,
+	0xcc, 0x4a, 0xed, 0xea, 0x88, 0xd6, 0x0d, 0x03, 0x1c, 0x0b, 0xb3, 0xdf, 0x47, 0x14, 0xa7, 0x01,
+	0x0e, 0x3d, 0xa7, 0x87, 0x1f, 0xa3, 0x7e, 0x40, 0x68, 0x09, 0x28, 0x43, 0x36, 0x8a, 0xaf, 0x5e,
+	0x76, 0x5a, 0xa2, 0x22, 0xc4, 0xce, 0x26, 0xb8, 0x69, 0xe2, 0x1a, 0x2c, 0x45, 0x69, 0x56, 0x3a,
+	0xd5, 0xee, 0x00, 0x65, 0x0f, 0xa7, 0xff, 0x97, 0xe1, 0xb6, 0x8b, 0x68, 0x6d, 0xfc, 0x24, 0xc3,
+	0x2c, 0x85, 0x75, 0xb0, 0x2c, 0x32, 0x72, 0x62, 0x14, 0x61, 0x45, 0xaa, 0x49, 0xf5, 0xc5, 0x76,
+	0xe5, 0x9d, 0x25, 0xdb, 0x4b, 0x42, 0x73, 0x1f, 0x45, 0x58, 0xbb, 0x91, 0xc0, 0xda, 0x61, 0x96,
+	0xa2, 0x14, 0x8f, 0x33, 0x31, 0x41, 0xb5, 0x0e, 0xaa, 0x6e, 0xc6, 0x52, 0x12, 0x61, 0xea, 0x04,
+	0xde, 0x28, 0x11, 0x10, 0xef, 0x07, 0x1e, 0x7c, 0x04, 0x00, 0x49, 0x30, 0xe5, 0x55, 0x51, 0xe4,
+	0x5a, 0xa5, 0x5e, 0x6d, 0x6e, 0xea, 0xf3, 0xfa, 0xa1, 0x8f, 0xfb, 0x3c, 0x12, 0x0c, 0x25, 0xff,
+	0x90, 0x11, 0xfe, 0x09, 0x7e, 0x4c, 0x10, 0x4d, 0x03, 0x14, 0x3a, 0xa7, 0x28, 0x08, 0x33, 0x8a,
+	0x95, 0x4a, 0x4d, 0xaa, 0x7f, 0x6f, 0xff, 0x50, 0x3e, 0xef, 0xf2, 0x57, 0xf8, 0x07, 0x58, 0xee,
+	0xa3, 0x30, 0xf0, 0x50, 0x8a, 0x1d, 0x12, 0x87, 0xe7, 0xca, 0xb7, 0x05, 0x6c, 0x49, 0x3c, 0x1e,
+	0xc5, 0xe1, 0xb9, 0xf6, 0x42, 0x06, 0xab, 0x33, 0x5c, 0xc3, 0x2d, 0x50, 0xcd, 0x92, 0xc2, 0x3c,
+	0x6f, 0x42, 0x61, 0x5e, 0x6d, 0xaa, 0x22, 0x15, 0xd1, 0x27, 0x7d, 0x37, 0xef, 0xd3, 0x21, 0x62,
+	0x67, 0x36, 0xe0, 0xf0, 0x5c, 0x86, 0xf7, 0xc0, 0x82, 0x4b, 0x31, 0x4a, 0x79, 0xc1, 0xab, 0xcd,
+	0x8d, 0x99, 0x25, 0x18, 0x0c, 0xdc, 0x44, 0x0d, 0xf6, 0xbf, 0xb1, 0x4b, 0x8a, 0x9c, 0x8c, 0x53,
+	0x2b, 0xf2, 0x57, 0x90, 0x71, 0x0a, 0xa8, 0x80, 0x05, 0x8a, 0x23, 0xd2, 0xe7, 0x75, 0x5b, 0xcc,
+	0x35, 0xfc, 0xbb, 0x5d, 0x05, 0x8b, 0x83, 0x42, 0x6b, 0xaf, 0x25, 0xf0, 0xdb, 0x8c, 0x71, 0x60,
+	0x09, 0x89, 0x19, 0x86, 0xbb, 0x60, 0x65, 0xa2, 0x13, 0x0e, 0xa6, 0x94, 0xd0, 0x82, 0xb7, 0xda,
+	0x84, 0x22, 0x48, 0x9a, 0xb8, 0xfa, 0x49, 0x31, 0xaf, 0xf6, 0xcf, 0xe3, 0x3d, 0xba, 0x9b, 0xc3,
+	0x61, 0x07, 0x7c, 0x47, 0x31, 0xcb, 0xc2, 0x54, 0x8c, 0xcb, 0xbf, 0xf3, 0xc7, 0x65, 0x5a, 0x64,
+	0x76, 0x41, 0x62, 0x0b, 0x32, 0xcd, 0x02, 0xea, 0x6c, 0x58, 0x3e, 0x1e, 0x53, 0x16, 0x63, 0x7c,
+	0x27, 0x9a, 0x1f, 0x2b, 0x60, 0x65, 0xdc, 0xfa, 0x84, 0x47, 0x00, 0xdf, 0x48, 0xe0, 0xa7, 0xcf,
+	0x96, 0x0e, 0x9a, 0xf3, 0x23, 0x9f, 0xb5, 0xa9, 0xea, 0x97, 0x37, 0x55, 0x3b, 0xb8, 0xb6, 0xc6,
+	0x93, 0x78, 0xf6, 0xf6, 0xfd, 0x73, 0xb9, 0x05, 0x37, 0xf2, 0x43, 0x76, 0x31, 0xa6, 0xd9, 0x16,
+	0x2b, 0xca, 0x8c, 0xc6, 0xe0, 0xb2, 0x95, 0x1d, 0x35, 0x1a, 0x97, 0xf0, 0x46, 0x02, 0x2b, 0x53,
+	0xdb, 0x0d, 0x77, 0x6e, 0xd7, 0x0d, 0x71, 0x36, 0xd4, 0xff, 0x6e, 0x6d, 0xcf, 0xe7, 0x4c, 0x7b,
+	0x70, 0x6d, 0xfd, 0x32, 0x72, 0x78, 0xfe, 0x1a, 0x1e, 0x83, 0x22, 0xdd, 0x4d, 0xed, 0xef, 0x3c,
+	0xdd, 0x61, 0x7e, 0x17, 0x23, 0xe0, 0xed, 0xc6, 0xe5, 0x64, 0xb6, 0x66, 0x54, 0x78, 0x33, 0xa5,
+	0x86, 0xfa, 0xeb, 0x95, 0xa5, 0x0c, 0x23, 0x2a, 0xa5, 0x24, 0x60, 0xba, 0x4b, 0xa2, 0xf6, 0x53,
+	0x19, 0xac, 0xbb, 0x24, 0x9a, 0x1b, 0x7d, 0x5b, 0x9d, 0x3a, 0x21, 0xc7, 0xf9, 0x7d, 0x38, 0x96,
+	0x1e, 0xee, 0x97, 0xf6, 0x3e, 0x09, 0x51, 0xec, 0xeb, 0x84, 0xfa, 0x86, 0x8f, 0xe3, 0xe2, 0x7a,
+	0x18, 0x43, 0x8f, 0xb3, 0xff, 0x74, 0x5b, 0x42, 0x78, 0x29, 0x57, 0xf6, 0x2c, 0xeb, 0x95, 0x5c,
+	0xdb, 0xe3, 0x84, 0x96, 0xc7, 0x74, 0x2e, 0xe6, 0x52, 0xa7, 0xa5, 0x97, 0x8e, 0xd9, 0x95, 0x80,
+	0x74, 0x2d, 0x8f, 0x75, 0x07, 0x90, 0x6e, 0xa7, 0xd5, 0x15, 0x90, 0x0f, 0xf2, 0x3a, 0x7f, 0x37,
+	0x4d, 0xcb, 0x63, 0xa6, 0x39, 0x00, 0x99, 0x66, 0xa7, 0x65, 0x9a, 0x02, 0xd6, 0x5b, 0x28, 0xe2,
+	0x6c, 0x7d, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x08, 0x43, 0xec, 0xd9, 0x90, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignBudgetServiceClient is the client API for CampaignBudgetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignBudgetServiceClient interface {
+	// Returns the requested Campaign Budget in full detail.
+	GetCampaignBudget(ctx context.Context, in *GetCampaignBudgetRequest, opts ...grpc.CallOption) (*resources.CampaignBudget, error)
+	// Creates, updates, or removes campaign budgets. Operation statuses are
+	// returned.
+	MutateCampaignBudgets(ctx context.Context, in *MutateCampaignBudgetsRequest, opts ...grpc.CallOption) (*MutateCampaignBudgetsResponse, error)
+}
+
+type campaignBudgetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignBudgetServiceClient(cc grpc.ClientConnInterface) CampaignBudgetServiceClient {
+	return &campaignBudgetServiceClient{cc}
+}
+
+func (c *campaignBudgetServiceClient) GetCampaignBudget(ctx context.Context, in *GetCampaignBudgetRequest, opts ...grpc.CallOption) (*resources.CampaignBudget, error) {
+	out := new(resources.CampaignBudget)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignBudgetService/GetCampaignBudget", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignBudgetServiceClient) MutateCampaignBudgets(ctx context.Context, in *MutateCampaignBudgetsRequest, opts ...grpc.CallOption) (*MutateCampaignBudgetsResponse, error) {
+	out := new(MutateCampaignBudgetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignBudgetService/MutateCampaignBudgets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignBudgetServiceServer is the server API for CampaignBudgetService service.
+type CampaignBudgetServiceServer interface {
+	// Returns the requested Campaign Budget in full detail.
+	GetCampaignBudget(context.Context, *GetCampaignBudgetRequest) (*resources.CampaignBudget, error)
+	// Creates, updates, or removes campaign budgets. Operation statuses are
+	// returned.
+	MutateCampaignBudgets(context.Context, *MutateCampaignBudgetsRequest) (*MutateCampaignBudgetsResponse, error)
+}
+
+// UnimplementedCampaignBudgetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignBudgetServiceServer struct {
+}
+
+func (*UnimplementedCampaignBudgetServiceServer) GetCampaignBudget(ctx context.Context, req *GetCampaignBudgetRequest) (*resources.CampaignBudget, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignBudget not implemented")
+}
+func (*UnimplementedCampaignBudgetServiceServer) MutateCampaignBudgets(ctx context.Context, req *MutateCampaignBudgetsRequest) (*MutateCampaignBudgetsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignBudgets not implemented")
+}
+
+func RegisterCampaignBudgetServiceServer(s *grpc.Server, srv CampaignBudgetServiceServer) {
+	s.RegisterService(&_CampaignBudgetService_serviceDesc, srv)
+}
+
+func _CampaignBudgetService_GetCampaignBudget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignBudgetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBudgetServiceServer).GetCampaignBudget(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignBudgetService/GetCampaignBudget",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBudgetServiceServer).GetCampaignBudget(ctx, req.(*GetCampaignBudgetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignBudgetService_MutateCampaignBudgets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignBudgetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBudgetServiceServer).MutateCampaignBudgets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignBudgetService/MutateCampaignBudgets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBudgetServiceServer).MutateCampaignBudgets(ctx, req.(*MutateCampaignBudgetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignBudgetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignBudgetService",
+	HandlerType: (*CampaignBudgetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignBudget",
+			Handler:    _CampaignBudgetService_GetCampaignBudget_Handler,
+		},
+		{
+			MethodName: "MutateCampaignBudgets",
+			Handler:    _CampaignBudgetService_MutateCampaignBudgets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_budget_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_criterion_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_criterion_service.pb.go
new file mode 100644
index 0000000..b4d01e2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_criterion_service.pb.go
@@ -0,0 +1,529 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_criterion_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignCriterionService.GetCampaignCriterion][google.ads.googleads.v3.services.CampaignCriterionService.GetCampaignCriterion].
+type GetCampaignCriterionRequest struct {
+	// Required. The resource name of the criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignCriterionRequest) Reset()         { *m = GetCampaignCriterionRequest{} }
+func (m *GetCampaignCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignCriterionRequest) ProtoMessage()    {}
+func (*GetCampaignCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aaa1f8d0677bfb8, []int{0}
+}
+
+func (m *GetCampaignCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignCriterionRequest.Merge(m, src)
+}
+func (m *GetCampaignCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Size(m)
+}
+func (m *GetCampaignCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignCriterionRequest proto.InternalMessageInfo
+
+func (m *GetCampaignCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignCriterionService.MutateCampaignCriteria][google.ads.googleads.v3.services.CampaignCriterionService.MutateCampaignCriteria].
+type MutateCampaignCriteriaRequest struct {
+	// Required. The ID of the customer whose criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual criteria.
+	Operations []*CampaignCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignCriteriaRequest) Reset()         { *m = MutateCampaignCriteriaRequest{} }
+func (m *MutateCampaignCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriteriaRequest) ProtoMessage()    {}
+func (*MutateCampaignCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aaa1f8d0677bfb8, []int{1}
+}
+
+func (m *MutateCampaignCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriteriaRequest.Merge(m, src)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Size(m)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignCriteriaRequest) GetOperations() []*CampaignCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignCriteriaRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignCriteriaRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a campaign criterion.
+type CampaignCriterionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignCriterionOperation_Create
+	//	*CampaignCriterionOperation_Update
+	//	*CampaignCriterionOperation_Remove
+	Operation            isCampaignCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CampaignCriterionOperation) Reset()         { *m = CampaignCriterionOperation{} }
+func (m *CampaignCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionOperation) ProtoMessage()    {}
+func (*CampaignCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aaa1f8d0677bfb8, []int{2}
+}
+
+func (m *CampaignCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionOperation.Unmarshal(m, b)
+}
+func (m *CampaignCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionOperation.Merge(m, src)
+}
+func (m *CampaignCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionOperation.Size(m)
+}
+func (m *CampaignCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionOperation proto.InternalMessageInfo
+
+func (m *CampaignCriterionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignCriterionOperation_Operation interface {
+	isCampaignCriterionOperation_Operation()
+}
+
+type CampaignCriterionOperation_Create struct {
+	Create *resources.CampaignCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignCriterionOperation_Update struct {
+	Update *resources.CampaignCriterion `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignCriterionOperation_Create) isCampaignCriterionOperation_Operation() {}
+
+func (*CampaignCriterionOperation_Update) isCampaignCriterionOperation_Operation() {}
+
+func (*CampaignCriterionOperation_Remove) isCampaignCriterionOperation_Operation() {}
+
+func (m *CampaignCriterionOperation) GetOperation() isCampaignCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetCreate() *resources.CampaignCriterion {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetUpdate() *resources.CampaignCriterion {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignCriterionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignCriterionOperation_Create)(nil),
+		(*CampaignCriterionOperation_Update)(nil),
+		(*CampaignCriterionOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign criterion mutate.
+type MutateCampaignCriteriaResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateCampaignCriteriaResponse) Reset()         { *m = MutateCampaignCriteriaResponse{} }
+func (m *MutateCampaignCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriteriaResponse) ProtoMessage()    {}
+func (*MutateCampaignCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aaa1f8d0677bfb8, []int{3}
+}
+
+func (m *MutateCampaignCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriteriaResponse.Merge(m, src)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Size(m)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignCriteriaResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignCriteriaResponse) GetResults() []*MutateCampaignCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateCampaignCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignCriterionResult) Reset()         { *m = MutateCampaignCriterionResult{} }
+func (m *MutateCampaignCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriterionResult) ProtoMessage()    {}
+func (*MutateCampaignCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9aaa1f8d0677bfb8, []int{4}
+}
+
+func (m *MutateCampaignCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriterionResult.Merge(m, src)
+}
+func (m *MutateCampaignCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Size(m)
+}
+func (m *MutateCampaignCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriterionResult proto.InternalMessageInfo
+
+func (m *MutateCampaignCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignCriterionRequest)(nil), "google.ads.googleads.v3.services.GetCampaignCriterionRequest")
+	proto.RegisterType((*MutateCampaignCriteriaRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignCriteriaRequest")
+	proto.RegisterType((*CampaignCriterionOperation)(nil), "google.ads.googleads.v3.services.CampaignCriterionOperation")
+	proto.RegisterType((*MutateCampaignCriteriaResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignCriteriaResponse")
+	proto.RegisterType((*MutateCampaignCriterionResult)(nil), "google.ads.googleads.v3.services.MutateCampaignCriterionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_criterion_service.proto", fileDescriptor_9aaa1f8d0677bfb8)
+}
+
+var fileDescriptor_9aaa1f8d0677bfb8 = []byte{
+	// 773 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6b, 0xdb, 0x48,
+	0x14, 0xc7, 0x57, 0x72, 0xc8, 0x6e, 0xc6, 0xc9, 0x2e, 0xcc, 0xee, 0xa6, 0xc2, 0x69, 0x5a, 0xa3,
+	0x06, 0x6a, 0x4c, 0x91, 0xc0, 0x4e, 0x2f, 0x4a, 0x43, 0x2b, 0xa7, 0x8d, 0xd3, 0x42, 0x7e, 0xe0,
+	0x40, 0x20, 0xc5, 0x20, 0x26, 0xd2, 0xc4, 0x15, 0x91, 0x34, 0xea, 0xcc, 0xc8, 0x10, 0x42, 0x2e,
+	0xa5, 0xa7, 0x5e, 0xfb, 0x0f, 0x94, 0x1e, 0xfb, 0x6f, 0xf4, 0x96, 0x6b, 0x0f, 0x85, 0x9c, 0x7a,
+	0xe8, 0xa9, 0x7f, 0x40, 0xce, 0x45, 0x1a, 0x8d, 0x7f, 0xc4, 0x76, 0x0d, 0xe9, 0xed, 0x79, 0xde,
+	0x57, 0x9f, 0xf7, 0xde, 0xbc, 0x37, 0xcf, 0xc0, 0xee, 0x10, 0xd2, 0x09, 0xb0, 0x89, 0x3c, 0x66,
+	0x0a, 0x33, 0xb5, 0xba, 0x75, 0x93, 0x61, 0xda, 0xf5, 0x5d, 0xcc, 0x4c, 0x17, 0x85, 0x31, 0xf2,
+	0x3b, 0x91, 0xe3, 0x52, 0x9f, 0x63, 0xea, 0x93, 0xc8, 0xc9, 0x7d, 0x46, 0x4c, 0x09, 0x27, 0xb0,
+	0x2c, 0xbe, 0x33, 0x90, 0xc7, 0x8c, 0x1e, 0xc2, 0xe8, 0xd6, 0x0d, 0x89, 0x28, 0x59, 0x93, 0x82,
+	0x50, 0xcc, 0x48, 0x42, 0xc7, 0x47, 0x11, 0xf4, 0xd2, 0x6d, 0xf9, 0x6d, 0xec, 0x9b, 0x28, 0x8a,
+	0x08, 0x47, 0xdc, 0x27, 0x11, 0xcb, 0xbd, 0xb7, 0x06, 0xbc, 0x6e, 0xe0, 0xe3, 0x88, 0xe7, 0x8e,
+	0xbb, 0x03, 0x8e, 0x63, 0x1f, 0x07, 0x9e, 0x73, 0x84, 0x5f, 0xa1, 0xae, 0x4f, 0x68, 0x2e, 0xc8,
+	0xb3, 0x36, 0xb3, 0x5f, 0x47, 0xc9, 0x71, 0xae, 0x0a, 0x11, 0x3b, 0xb9, 0xc6, 0xa6, 0xb1, 0x6b,
+	0x32, 0x8e, 0x78, 0x92, 0x07, 0xd5, 0x9b, 0x60, 0xa9, 0x89, 0xf9, 0x46, 0x9e, 0xf1, 0x86, 0x4c,
+	0xb8, 0x85, 0x5f, 0x27, 0x98, 0x71, 0x58, 0x01, 0x0b, 0xb2, 0x2e, 0x27, 0x42, 0x21, 0xd6, 0x94,
+	0xb2, 0x52, 0x99, 0x6b, 0x14, 0xbe, 0xd9, 0x6a, 0x6b, 0x5e, 0x7a, 0x76, 0x50, 0x88, 0xf5, 0x2b,
+	0x05, 0x2c, 0x6f, 0x27, 0x1c, 0x71, 0x7c, 0x0d, 0x86, 0x24, 0x6b, 0x05, 0x14, 0xdd, 0x84, 0x71,
+	0x12, 0x62, 0xea, 0xf8, 0xde, 0x20, 0x09, 0xc8, 0xf3, 0xe7, 0x1e, 0x44, 0x00, 0x90, 0x18, 0x53,
+	0x71, 0x33, 0x9a, 0x5a, 0x2e, 0x54, 0x8a, 0xb5, 0x47, 0xc6, 0xb4, 0xb6, 0x18, 0x23, 0x15, 0xec,
+	0x4a, 0x48, 0x1e, 0xa2, 0x0f, 0x85, 0xf7, 0xc1, 0x3f, 0x31, 0xa2, 0xdc, 0x47, 0x81, 0x73, 0x8c,
+	0xfc, 0x20, 0xa1, 0x58, 0x2b, 0x94, 0x95, 0xca, 0x5f, 0xad, 0xbf, 0xf3, 0xe3, 0x4d, 0x71, 0x0a,
+	0xef, 0x81, 0x85, 0x2e, 0x0a, 0x7c, 0x0f, 0x71, 0xec, 0x90, 0x28, 0x38, 0xd5, 0x66, 0x32, 0xd9,
+	0xbc, 0x3c, 0xdc, 0x8d, 0x82, 0x53, 0xfd, 0x83, 0x0a, 0x4a, 0x93, 0xa3, 0xc3, 0x35, 0x50, 0x4c,
+	0xe2, 0x8c, 0x90, 0xb6, 0x23, 0x23, 0x14, 0x6b, 0x25, 0x59, 0x90, 0xec, 0x98, 0xb1, 0x99, 0x76,
+	0x6c, 0x1b, 0xb1, 0x93, 0x16, 0x10, 0xf2, 0xd4, 0x86, 0x3b, 0x60, 0xd6, 0xa5, 0x18, 0x71, 0x71,
+	0xef, 0xc5, 0xda, 0xea, 0xc4, 0x8b, 0xe8, 0x4d, 0xdf, 0xe8, 0x4d, 0x6c, 0xfd, 0xd1, 0xca, 0x29,
+	0x29, 0x4f, 0xd0, 0x35, 0xf5, 0xf7, 0x78, 0x82, 0x02, 0x35, 0x30, 0x4b, 0x71, 0x48, 0xba, 0xe2,
+	0x02, 0xe7, 0x52, 0x8f, 0xf8, 0xdd, 0x28, 0x82, 0xb9, 0xde, 0x8d, 0xeb, 0x9f, 0x15, 0x70, 0x67,
+	0xd2, 0x6c, 0xb0, 0x98, 0x44, 0x0c, 0xc3, 0x4d, 0xf0, 0xff, 0xb5, 0x9e, 0x38, 0x98, 0x52, 0x42,
+	0x33, 0x70, 0xb1, 0x06, 0x65, 0xa2, 0x34, 0x76, 0x8d, 0xfd, 0x6c, 0x80, 0x5b, 0xff, 0x0e, 0x77,
+	0xeb, 0x59, 0x2a, 0x87, 0x87, 0xe0, 0x4f, 0x8a, 0x59, 0x12, 0x70, 0x39, 0x3b, 0x8f, 0xa7, 0xcf,
+	0xce, 0xd8, 0xd4, 0xd2, 0x37, 0x90, 0x72, 0x5a, 0x92, 0xa7, 0x3f, 0x9d, 0x30, 0xe0, 0x52, 0x99,
+	0x8e, 0xcb, 0x98, 0xc7, 0x32, 0xfc, 0x4e, 0x6a, 0xef, 0x66, 0x80, 0x36, 0x02, 0xd8, 0x17, 0xa9,
+	0xc0, 0xaf, 0x0a, 0xf8, 0x6f, 0xdc, 0x73, 0x84, 0xeb, 0xd3, 0xab, 0xf8, 0xc5, 0x33, 0x2e, 0xdd,
+	0xa8, 0xcf, 0xfa, 0x8b, 0x4b, 0x7b, 0xb8, 0xa0, 0x37, 0x5f, 0xbe, 0xbf, 0x57, 0x57, 0x61, 0x2d,
+	0x5d, 0x77, 0x67, 0x43, 0x9e, 0x75, 0xf9, 0x82, 0x99, 0x59, 0xed, 0xed, 0x3f, 0xd9, 0x64, 0xb3,
+	0x7a, 0x0e, 0xaf, 0x14, 0xb0, 0x38, 0x7e, 0x04, 0xe0, 0x4d, 0x3b, 0x24, 0x17, 0x4b, 0xe9, 0xc9,
+	0xcd, 0x01, 0x62, 0xfa, 0xf4, 0xc3, 0x4b, 0x7b, 0x71, 0x60, 0x37, 0x3d, 0xe8, 0x2f, 0x8b, 0xac,
+	0x64, 0x4b, 0x7f, 0x98, 0x96, 0xdc, 0xaf, 0xf1, 0x6c, 0x40, 0xbc, 0x5e, 0x3d, 0x1f, 0xa9, 0xd8,
+	0x0a, 0xb3, 0x78, 0x96, 0x52, 0x2d, 0x2d, 0x5d, 0xd8, 0x5a, 0x3f, 0xa7, 0xdc, 0x8a, 0x7d, 0x66,
+	0xb8, 0x24, 0x6c, 0xbc, 0x55, 0xc1, 0x8a, 0x4b, 0xc2, 0xa9, 0xf9, 0x37, 0x96, 0x27, 0x8d, 0xcc,
+	0x5e, 0xba, 0x40, 0xf6, 0x94, 0x97, 0x5b, 0x39, 0xa2, 0x43, 0x02, 0x14, 0x75, 0x0c, 0x42, 0x3b,
+	0x66, 0x07, 0x47, 0xd9, 0x7a, 0x31, 0xfb, 0x41, 0x27, 0xff, 0x35, 0xae, 0x49, 0xe3, 0xa3, 0x5a,
+	0x68, 0xda, 0xf6, 0x27, 0xb5, 0xdc, 0x14, 0x40, 0xdb, 0x63, 0x86, 0x30, 0x53, 0xeb, 0xa0, 0x6e,
+	0xe4, 0x81, 0xd9, 0x85, 0x94, 0xb4, 0x6d, 0x8f, 0xb5, 0x7b, 0x92, 0xf6, 0x41, 0xbd, 0x2d, 0x25,
+	0x3f, 0xd4, 0x15, 0x71, 0x6e, 0x59, 0xb6, 0xc7, 0x2c, 0xab, 0x27, 0xb2, 0xac, 0x83, 0xba, 0x65,
+	0x49, 0xd9, 0xd1, 0x6c, 0x96, 0x67, 0xfd, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x22, 0x62,
+	0x9d, 0xc1, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignCriterionServiceClient is the client API for CampaignCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignCriterionServiceClient interface {
+	// Returns the requested criterion in full detail.
+	GetCampaignCriterion(ctx context.Context, in *GetCampaignCriterionRequest, opts ...grpc.CallOption) (*resources.CampaignCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateCampaignCriteria(ctx context.Context, in *MutateCampaignCriteriaRequest, opts ...grpc.CallOption) (*MutateCampaignCriteriaResponse, error)
+}
+
+type campaignCriterionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignCriterionServiceClient(cc grpc.ClientConnInterface) CampaignCriterionServiceClient {
+	return &campaignCriterionServiceClient{cc}
+}
+
+func (c *campaignCriterionServiceClient) GetCampaignCriterion(ctx context.Context, in *GetCampaignCriterionRequest, opts ...grpc.CallOption) (*resources.CampaignCriterion, error) {
+	out := new(resources.CampaignCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignCriterionService/GetCampaignCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignCriterionServiceClient) MutateCampaignCriteria(ctx context.Context, in *MutateCampaignCriteriaRequest, opts ...grpc.CallOption) (*MutateCampaignCriteriaResponse, error) {
+	out := new(MutateCampaignCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignCriterionService/MutateCampaignCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignCriterionServiceServer is the server API for CampaignCriterionService service.
+type CampaignCriterionServiceServer interface {
+	// Returns the requested criterion in full detail.
+	GetCampaignCriterion(context.Context, *GetCampaignCriterionRequest) (*resources.CampaignCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateCampaignCriteria(context.Context, *MutateCampaignCriteriaRequest) (*MutateCampaignCriteriaResponse, error)
+}
+
+// UnimplementedCampaignCriterionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignCriterionServiceServer struct {
+}
+
+func (*UnimplementedCampaignCriterionServiceServer) GetCampaignCriterion(ctx context.Context, req *GetCampaignCriterionRequest) (*resources.CampaignCriterion, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignCriterion not implemented")
+}
+func (*UnimplementedCampaignCriterionServiceServer) MutateCampaignCriteria(ctx context.Context, req *MutateCampaignCriteriaRequest) (*MutateCampaignCriteriaResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignCriteria not implemented")
+}
+
+func RegisterCampaignCriterionServiceServer(s *grpc.Server, srv CampaignCriterionServiceServer) {
+	s.RegisterService(&_CampaignCriterionService_serviceDesc, srv)
+}
+
+func _CampaignCriterionService_GetCampaignCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignCriterionServiceServer).GetCampaignCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignCriterionService/GetCampaignCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignCriterionServiceServer).GetCampaignCriterion(ctx, req.(*GetCampaignCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignCriterionService_MutateCampaignCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignCriterionServiceServer).MutateCampaignCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignCriterionService/MutateCampaignCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignCriterionServiceServer).MutateCampaignCriteria(ctx, req.(*MutateCampaignCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignCriterionService",
+	HandlerType: (*CampaignCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignCriterion",
+			Handler:    _CampaignCriterionService_GetCampaignCriterion_Handler,
+		},
+		{
+			MethodName: "MutateCampaignCriteria",
+			Handler:    _CampaignCriterionService_MutateCampaignCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_criterion_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_criterion_simulation_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_criterion_simulation_service.pb.go
new file mode 100644
index 0000000..9ee4232
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_criterion_simulation_service.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_criterion_simulation_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [CampaignCriterionSimulationService.GetCampaignCriterionSimulation][google.ads.googleads.v3.services.CampaignCriterionSimulationService.GetCampaignCriterionSimulation].
+type GetCampaignCriterionSimulationRequest struct {
+	// Required. The resource name of the campaign criterion simulation to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignCriterionSimulationRequest) Reset()         { *m = GetCampaignCriterionSimulationRequest{} }
+func (m *GetCampaignCriterionSimulationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignCriterionSimulationRequest) ProtoMessage()    {}
+func (*GetCampaignCriterionSimulationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3b7a1ec06fe4172, []int{0}
+}
+
+func (m *GetCampaignCriterionSimulationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignCriterionSimulationRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignCriterionSimulationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignCriterionSimulationRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignCriterionSimulationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignCriterionSimulationRequest.Merge(m, src)
+}
+func (m *GetCampaignCriterionSimulationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignCriterionSimulationRequest.Size(m)
+}
+func (m *GetCampaignCriterionSimulationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignCriterionSimulationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignCriterionSimulationRequest proto.InternalMessageInfo
+
+func (m *GetCampaignCriterionSimulationRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignCriterionSimulationRequest)(nil), "google.ads.googleads.v3.services.GetCampaignCriterionSimulationRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_criterion_simulation_service.proto", fileDescriptor_d3b7a1ec06fe4172)
+}
+
+var fileDescriptor_d3b7a1ec06fe4172 = []byte{
+	// 427 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x86, 0xd9, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xf1, 0x58, 0x45, 0x97, 0xe5, 0xc4, 0xe3, 0x8a,
+	0x19, 0x30, 0xdd, 0x88, 0x87, 0xb3, 0x87, 0xac, 0x85, 0xc8, 0x79, 0x07, 0x29, 0x24, 0x10, 0xe6,
+	0x92, 0x31, 0x0e, 0x24, 0x33, 0x71, 0xbe, 0x49, 0x1a, 0xb1, 0xd0, 0x1f, 0x60, 0xe3, 0x3f, 0xb0,
+	0xf4, 0x7f, 0xd8, 0x5c, 0x6b, 0x67, 0x65, 0x61, 0xe5, 0xaf, 0x90, 0x64, 0x32, 0xb9, 0x3b, 0x70,
+	0x37, 0xd7, 0xbd, 0xe4, 0x7d, 0x79, 0xde, 0x2f, 0xdf, 0x97, 0x04, 0x2f, 0x0b, 0xad, 0x8b, 0x52,
+	0x10, 0x9e, 0x03, 0x71, 0xb2, 0x53, 0x6d, 0x44, 0x40, 0x98, 0x56, 0x66, 0x02, 0x48, 0xc6, 0xab,
+	0x9a, 0xcb, 0x42, 0xa5, 0x99, 0x91, 0x56, 0x18, 0xa9, 0x55, 0x0a, 0xb2, 0x6a, 0x4a, 0x6e, 0x7b,
+	0xe9, 0x62, 0xb8, 0x36, 0xda, 0xea, 0x70, 0xe1, 0x10, 0x98, 0xe7, 0x80, 0x47, 0x1a, 0x6e, 0x23,
+	0xec, 0x69, 0xf3, 0xe7, 0x9b, 0xfa, 0x8c, 0x00, 0xdd, 0x98, 0xc9, 0x42, 0x57, 0x34, 0xbf, 0xe7,
+	0x31, 0xb5, 0x24, 0x5c, 0x29, 0x6d, 0x7b, 0x13, 0x06, 0xf7, 0xce, 0x25, 0x37, 0x2b, 0xa5, 0x50,
+	0x76, 0x30, 0x1e, 0x5c, 0x32, 0xde, 0x4a, 0x51, 0xe6, 0xe9, 0x99, 0x78, 0xc7, 0x5b, 0xa9, 0x8d,
+	0x0b, 0x2c, 0x5f, 0x07, 0x0f, 0xd7, 0xc2, 0x1e, 0x0d, 0x13, 0x1c, 0xf9, 0x01, 0x4e, 0xc7, 0xfe,
+	0x13, 0xf1, 0xbe, 0x11, 0x60, 0xc3, 0xfd, 0xe0, 0xb6, 0x9f, 0x38, 0x55, 0xbc, 0x12, 0xbb, 0xb3,
+	0xc5, 0x6c, 0xff, 0xe6, 0x6a, 0xe7, 0x37, 0x43, 0x27, 0xb7, 0xbc, 0xf3, 0x8a, 0x57, 0xe2, 0xf1,
+	0x0f, 0x14, 0x2c, 0xb7, 0x00, 0x4f, 0xdd, 0x66, 0xc2, 0x4f, 0x28, 0xb8, 0xbf, 0xbd, 0x3a, 0x5c,
+	0xe3, 0xa9, 0xf5, 0xe2, 0x6b, 0x0d, 0x3f, 0x3f, 0xdc, 0x08, 0x1a, 0xaf, 0x80, 0xb7, 0x60, 0x96,
+	0xf1, 0x2f, 0x76, 0xf5, 0xed, 0x3f, 0xff, 0xfc, 0xf3, 0x15, 0x3d, 0x0b, 0x0f, 0xbb, 0x43, 0x7e,
+	0xb8, 0xe2, 0x3c, 0xcd, 0x1a, 0xb0, 0xba, 0x12, 0x06, 0xc8, 0xc1, 0x78, 0xd9, 0xff, 0x30, 0x81,
+	0x1c, 0x7c, 0x9c, 0xdf, 0x3d, 0x67, 0xbb, 0x17, 0xe3, 0x0c, 0xaa, 0x96, 0x80, 0x33, 0x5d, 0xad,
+	0xbe, 0xa0, 0x60, 0x2f, 0xd3, 0xd5, 0xe4, 0x0e, 0x56, 0x8f, 0xa6, 0xb7, 0x7d, 0xdc, 0x1d, 0xfb,
+	0x78, 0xf6, 0xe6, 0xc5, 0x00, 0x2b, 0x74, 0xc9, 0x55, 0x81, 0xb5, 0x29, 0x48, 0x21, 0x54, 0xff,
+	0x29, 0x90, 0x8b, 0xfa, 0xcd, 0x3f, 0xc7, 0x13, 0x2f, 0xbe, 0xa1, 0x9d, 0x35, 0x63, 0xdf, 0xd1,
+	0x62, 0xed, 0x80, 0x2c, 0x07, 0xec, 0x64, 0xa7, 0xe2, 0x08, 0x0f, 0xc5, 0x70, 0xee, 0x23, 0x09,
+	0xcb, 0x21, 0x19, 0x23, 0x49, 0x1c, 0x25, 0x3e, 0xf2, 0x17, 0xed, 0xb9, 0xe7, 0x94, 0xb2, 0x1c,
+	0x28, 0x1d, 0x43, 0x94, 0xc6, 0x11, 0xa5, 0x3e, 0x76, 0x76, 0xa3, 0x9f, 0x33, 0xfa, 0x17, 0x00,
+	0x00, 0xff, 0xff, 0x16, 0x2f, 0x95, 0xd8, 0xc3, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignCriterionSimulationServiceClient is the client API for CampaignCriterionSimulationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignCriterionSimulationServiceClient interface {
+	// Returns the requested campaign criterion simulation in full detail.
+	GetCampaignCriterionSimulation(ctx context.Context, in *GetCampaignCriterionSimulationRequest, opts ...grpc.CallOption) (*resources.CampaignCriterionSimulation, error)
+}
+
+type campaignCriterionSimulationServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignCriterionSimulationServiceClient(cc grpc.ClientConnInterface) CampaignCriterionSimulationServiceClient {
+	return &campaignCriterionSimulationServiceClient{cc}
+}
+
+func (c *campaignCriterionSimulationServiceClient) GetCampaignCriterionSimulation(ctx context.Context, in *GetCampaignCriterionSimulationRequest, opts ...grpc.CallOption) (*resources.CampaignCriterionSimulation, error) {
+	out := new(resources.CampaignCriterionSimulation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignCriterionSimulationService/GetCampaignCriterionSimulation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignCriterionSimulationServiceServer is the server API for CampaignCriterionSimulationService service.
+type CampaignCriterionSimulationServiceServer interface {
+	// Returns the requested campaign criterion simulation in full detail.
+	GetCampaignCriterionSimulation(context.Context, *GetCampaignCriterionSimulationRequest) (*resources.CampaignCriterionSimulation, error)
+}
+
+// UnimplementedCampaignCriterionSimulationServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignCriterionSimulationServiceServer struct {
+}
+
+func (*UnimplementedCampaignCriterionSimulationServiceServer) GetCampaignCriterionSimulation(ctx context.Context, req *GetCampaignCriterionSimulationRequest) (*resources.CampaignCriterionSimulation, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCampaignCriterionSimulation not implemented")
+}
+
+func RegisterCampaignCriterionSimulationServiceServer(s *grpc.Server, srv CampaignCriterionSimulationServiceServer) {
+	s.RegisterService(&_CampaignCriterionSimulationService_serviceDesc, srv)
+}
+
+func _CampaignCriterionSimulationService_GetCampaignCriterionSimulation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignCriterionSimulationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignCriterionSimulationServiceServer).GetCampaignCriterionSimulation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignCriterionSimulationService/GetCampaignCriterionSimulation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignCriterionSimulationServiceServer).GetCampaignCriterionSimulation(ctx, req.(*GetCampaignCriterionSimulationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignCriterionSimulationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignCriterionSimulationService",
+	HandlerType: (*CampaignCriterionSimulationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignCriterionSimulation",
+			Handler:    _CampaignCriterionSimulationService_GetCampaignCriterionSimulation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_criterion_simulation_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_draft_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_draft_service.pb.go
new file mode 100644
index 0000000..610ea11
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_draft_service.pb.go
@@ -0,0 +1,803 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_draft_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	longrunning "google.golang.org/genproto/googleapis/longrunning"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignDraftService.GetCampaignDraft][google.ads.googleads.v3.services.CampaignDraftService.GetCampaignDraft].
+type GetCampaignDraftRequest struct {
+	// Required. The resource name of the campaign draft to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignDraftRequest) Reset()         { *m = GetCampaignDraftRequest{} }
+func (m *GetCampaignDraftRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignDraftRequest) ProtoMessage()    {}
+func (*GetCampaignDraftRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{0}
+}
+
+func (m *GetCampaignDraftRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignDraftRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignDraftRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignDraftRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignDraftRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignDraftRequest.Merge(m, src)
+}
+func (m *GetCampaignDraftRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignDraftRequest.Size(m)
+}
+func (m *GetCampaignDraftRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignDraftRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignDraftRequest proto.InternalMessageInfo
+
+func (m *GetCampaignDraftRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignDraftService.MutateCampaignDrafts][google.ads.googleads.v3.services.CampaignDraftService.MutateCampaignDrafts].
+type MutateCampaignDraftsRequest struct {
+	// Required. The ID of the customer whose campaign drafts are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign drafts.
+	Operations []*CampaignDraftOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignDraftsRequest) Reset()         { *m = MutateCampaignDraftsRequest{} }
+func (m *MutateCampaignDraftsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignDraftsRequest) ProtoMessage()    {}
+func (*MutateCampaignDraftsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{1}
+}
+
+func (m *MutateCampaignDraftsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignDraftsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignDraftsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignDraftsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignDraftsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignDraftsRequest.Merge(m, src)
+}
+func (m *MutateCampaignDraftsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignDraftsRequest.Size(m)
+}
+func (m *MutateCampaignDraftsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignDraftsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignDraftsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignDraftsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignDraftsRequest) GetOperations() []*CampaignDraftOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignDraftsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignDraftsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Request message for [CampaignDraftService.PromoteCampaignDraft][google.ads.googleads.v3.services.CampaignDraftService.PromoteCampaignDraft].
+type PromoteCampaignDraftRequest struct {
+	// Required. The resource name of the campaign draft to promote.
+	CampaignDraft        string   `protobuf:"bytes,1,opt,name=campaign_draft,json=campaignDraft,proto3" json:"campaign_draft,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromoteCampaignDraftRequest) Reset()         { *m = PromoteCampaignDraftRequest{} }
+func (m *PromoteCampaignDraftRequest) String() string { return proto.CompactTextString(m) }
+func (*PromoteCampaignDraftRequest) ProtoMessage()    {}
+func (*PromoteCampaignDraftRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{2}
+}
+
+func (m *PromoteCampaignDraftRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromoteCampaignDraftRequest.Unmarshal(m, b)
+}
+func (m *PromoteCampaignDraftRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromoteCampaignDraftRequest.Marshal(b, m, deterministic)
+}
+func (m *PromoteCampaignDraftRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromoteCampaignDraftRequest.Merge(m, src)
+}
+func (m *PromoteCampaignDraftRequest) XXX_Size() int {
+	return xxx_messageInfo_PromoteCampaignDraftRequest.Size(m)
+}
+func (m *PromoteCampaignDraftRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromoteCampaignDraftRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromoteCampaignDraftRequest proto.InternalMessageInfo
+
+func (m *PromoteCampaignDraftRequest) GetCampaignDraft() string {
+	if m != nil {
+		return m.CampaignDraft
+	}
+	return ""
+}
+
+// A single operation (create, update, remove) on a campaign draft.
+type CampaignDraftOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignDraftOperation_Create
+	//	*CampaignDraftOperation_Update
+	//	*CampaignDraftOperation_Remove
+	Operation            isCampaignDraftOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *CampaignDraftOperation) Reset()         { *m = CampaignDraftOperation{} }
+func (m *CampaignDraftOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignDraftOperation) ProtoMessage()    {}
+func (*CampaignDraftOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{3}
+}
+
+func (m *CampaignDraftOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignDraftOperation.Unmarshal(m, b)
+}
+func (m *CampaignDraftOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignDraftOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignDraftOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignDraftOperation.Merge(m, src)
+}
+func (m *CampaignDraftOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignDraftOperation.Size(m)
+}
+func (m *CampaignDraftOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignDraftOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignDraftOperation proto.InternalMessageInfo
+
+func (m *CampaignDraftOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignDraftOperation_Operation interface {
+	isCampaignDraftOperation_Operation()
+}
+
+type CampaignDraftOperation_Create struct {
+	Create *resources.CampaignDraft `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignDraftOperation_Update struct {
+	Update *resources.CampaignDraft `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignDraftOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignDraftOperation_Create) isCampaignDraftOperation_Operation() {}
+
+func (*CampaignDraftOperation_Update) isCampaignDraftOperation_Operation() {}
+
+func (*CampaignDraftOperation_Remove) isCampaignDraftOperation_Operation() {}
+
+func (m *CampaignDraftOperation) GetOperation() isCampaignDraftOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignDraftOperation) GetCreate() *resources.CampaignDraft {
+	if x, ok := m.GetOperation().(*CampaignDraftOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignDraftOperation) GetUpdate() *resources.CampaignDraft {
+	if x, ok := m.GetOperation().(*CampaignDraftOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignDraftOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignDraftOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignDraftOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignDraftOperation_Create)(nil),
+		(*CampaignDraftOperation_Update)(nil),
+		(*CampaignDraftOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign draft mutate.
+type MutateCampaignDraftsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignDraftResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateCampaignDraftsResponse) Reset()         { *m = MutateCampaignDraftsResponse{} }
+func (m *MutateCampaignDraftsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignDraftsResponse) ProtoMessage()    {}
+func (*MutateCampaignDraftsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{4}
+}
+
+func (m *MutateCampaignDraftsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignDraftsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignDraftsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignDraftsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignDraftsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignDraftsResponse.Merge(m, src)
+}
+func (m *MutateCampaignDraftsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignDraftsResponse.Size(m)
+}
+func (m *MutateCampaignDraftsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignDraftsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignDraftsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignDraftsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignDraftsResponse) GetResults() []*MutateCampaignDraftResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign draft mutate.
+type MutateCampaignDraftResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignDraftResult) Reset()         { *m = MutateCampaignDraftResult{} }
+func (m *MutateCampaignDraftResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignDraftResult) ProtoMessage()    {}
+func (*MutateCampaignDraftResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{5}
+}
+
+func (m *MutateCampaignDraftResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignDraftResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignDraftResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignDraftResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignDraftResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignDraftResult.Merge(m, src)
+}
+func (m *MutateCampaignDraftResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignDraftResult.Size(m)
+}
+func (m *MutateCampaignDraftResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignDraftResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignDraftResult proto.InternalMessageInfo
+
+func (m *MutateCampaignDraftResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignDraftService.ListCampaignDraftAsyncErrors][google.ads.googleads.v3.services.CampaignDraftService.ListCampaignDraftAsyncErrors].
+type ListCampaignDraftAsyncErrorsRequest struct {
+	// Required. The name of the campaign draft from which to retrieve the async errors.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Token of the page to retrieve. If not specified, the first
+	// page of results will be returned. Use the value obtained from
+	// `next_page_token` in the previous response in order to request
+	// the next page of results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When a page request is too large, the server may decide to
+	// further limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListCampaignDraftAsyncErrorsRequest) Reset()         { *m = ListCampaignDraftAsyncErrorsRequest{} }
+func (m *ListCampaignDraftAsyncErrorsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListCampaignDraftAsyncErrorsRequest) ProtoMessage()    {}
+func (*ListCampaignDraftAsyncErrorsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{6}
+}
+
+func (m *ListCampaignDraftAsyncErrorsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest.Unmarshal(m, b)
+}
+func (m *ListCampaignDraftAsyncErrorsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListCampaignDraftAsyncErrorsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest.Merge(m, src)
+}
+func (m *ListCampaignDraftAsyncErrorsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest.Size(m)
+}
+func (m *ListCampaignDraftAsyncErrorsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCampaignDraftAsyncErrorsRequest proto.InternalMessageInfo
+
+func (m *ListCampaignDraftAsyncErrorsRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ListCampaignDraftAsyncErrorsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListCampaignDraftAsyncErrorsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for [CampaignDraftService.ListCampaignDraftAsyncErrors][google.ads.googleads.v3.services.CampaignDraftService.ListCampaignDraftAsyncErrors].
+type ListCampaignDraftAsyncErrorsResponse struct {
+	// Details of the errors when performing the asynchronous operation.
+	Errors []*status.Status `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"`
+	// Pagination token used to retrieve the next page of results.
+	// Pass the content of this string as the `page_token` attribute of
+	// the next request. `next_page_token` is not returned for the last
+	// page.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListCampaignDraftAsyncErrorsResponse) Reset()         { *m = ListCampaignDraftAsyncErrorsResponse{} }
+func (m *ListCampaignDraftAsyncErrorsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListCampaignDraftAsyncErrorsResponse) ProtoMessage()    {}
+func (*ListCampaignDraftAsyncErrorsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_01b2400b8d9061a5, []int{7}
+}
+
+func (m *ListCampaignDraftAsyncErrorsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse.Unmarshal(m, b)
+}
+func (m *ListCampaignDraftAsyncErrorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListCampaignDraftAsyncErrorsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse.Merge(m, src)
+}
+func (m *ListCampaignDraftAsyncErrorsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse.Size(m)
+}
+func (m *ListCampaignDraftAsyncErrorsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCampaignDraftAsyncErrorsResponse proto.InternalMessageInfo
+
+func (m *ListCampaignDraftAsyncErrorsResponse) GetErrors() []*status.Status {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+func (m *ListCampaignDraftAsyncErrorsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignDraftRequest)(nil), "google.ads.googleads.v3.services.GetCampaignDraftRequest")
+	proto.RegisterType((*MutateCampaignDraftsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignDraftsRequest")
+	proto.RegisterType((*PromoteCampaignDraftRequest)(nil), "google.ads.googleads.v3.services.PromoteCampaignDraftRequest")
+	proto.RegisterType((*CampaignDraftOperation)(nil), "google.ads.googleads.v3.services.CampaignDraftOperation")
+	proto.RegisterType((*MutateCampaignDraftsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignDraftsResponse")
+	proto.RegisterType((*MutateCampaignDraftResult)(nil), "google.ads.googleads.v3.services.MutateCampaignDraftResult")
+	proto.RegisterType((*ListCampaignDraftAsyncErrorsRequest)(nil), "google.ads.googleads.v3.services.ListCampaignDraftAsyncErrorsRequest")
+	proto.RegisterType((*ListCampaignDraftAsyncErrorsResponse)(nil), "google.ads.googleads.v3.services.ListCampaignDraftAsyncErrorsResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_draft_service.proto", fileDescriptor_01b2400b8d9061a5)
+}
+
+var fileDescriptor_01b2400b8d9061a5 = []byte{
+	// 994 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x6f, 0xdc, 0x44,
+	0x14, 0xc7, 0x0e, 0xa4, 0xdd, 0xb7, 0x4d, 0x8b, 0x86, 0xb4, 0xd9, 0x6e, 0x52, 0xb1, 0x72, 0x22,
+	0x88, 0x56, 0xc8, 0xae, 0x76, 0x25, 0xd4, 0x3a, 0x4a, 0x55, 0x6f, 0xc9, 0x9f, 0x22, 0x4a, 0x23,
+	0x07, 0x02, 0x42, 0x41, 0xd6, 0xc4, 0x9e, 0x18, 0x2b, 0xb6, 0xc7, 0xcc, 0xd8, 0x2b, 0x92, 0xaa,
+	0x12, 0xe2, 0xc2, 0x81, 0x23, 0x7c, 0x02, 0x8e, 0x7c, 0x07, 0x3e, 0x00, 0xb9, 0x72, 0xcb, 0x09,
+	0x21, 0xb8, 0x70, 0x40, 0x7c, 0x04, 0xe4, 0x3f, 0xb3, 0xbb, 0xde, 0x7a, 0xb3, 0x4d, 0x7a, 0x1b,
+	0xbf, 0x3f, 0xbf, 0xf7, 0x7e, 0xf3, 0x7b, 0xf3, 0x76, 0x61, 0xdd, 0xa5, 0xd4, 0xf5, 0x89, 0x86,
+	0x1d, 0xae, 0xe5, 0xc7, 0xf4, 0xd4, 0xef, 0x6a, 0x9c, 0xb0, 0xbe, 0x67, 0x13, 0xae, 0xd9, 0x38,
+	0x88, 0xb0, 0xe7, 0x86, 0x96, 0xc3, 0xf0, 0x61, 0x6c, 0x15, 0x76, 0x35, 0x62, 0x34, 0xa6, 0xa8,
+	0x95, 0xe7, 0xa8, 0xd8, 0xe1, 0xea, 0x20, 0x5d, 0xed, 0x77, 0x55, 0x91, 0xde, 0x7c, 0x7f, 0x52,
+	0x01, 0x46, 0x38, 0x4d, 0xd8, 0x8b, 0x15, 0x72, 0xe4, 0xe6, 0x92, 0xc8, 0x8b, 0x3c, 0x0d, 0x87,
+	0x21, 0x8d, 0x71, 0xec, 0xd1, 0x90, 0x17, 0xde, 0x85, 0x11, 0xaf, 0xed, 0x7b, 0x24, 0x14, 0x69,
+	0x6f, 0x8f, 0x38, 0x0e, 0x3d, 0xe2, 0x3b, 0xd6, 0x01, 0xf9, 0x0a, 0xf7, 0x3d, 0xca, 0x8a, 0x80,
+	0xe5, 0x22, 0xc0, 0xa7, 0xa1, 0xcb, 0x92, 0x30, 0xf4, 0x42, 0x57, 0xa3, 0x11, 0x61, 0x25, 0xf8,
+	0x82, 0x96, 0x96, 0x7d, 0x1d, 0x24, 0x87, 0x05, 0x54, 0x80, 0xf9, 0xd1, 0x58, 0x03, 0x2c, 0xb2,
+	0x35, 0x1e, 0xe3, 0x38, 0x29, 0x52, 0x95, 0x47, 0xb0, 0xb0, 0x45, 0xe2, 0x47, 0x05, 0xa5, 0x0f,
+	0x52, 0x46, 0x26, 0xf9, 0x3a, 0x21, 0x3c, 0x46, 0xab, 0x30, 0x27, 0x48, 0x5b, 0x21, 0x0e, 0x48,
+	0x43, 0x6a, 0x49, 0xab, 0xb5, 0xde, 0xcc, 0x1f, 0x86, 0x6c, 0x5e, 0x13, 0x9e, 0x8f, 0x71, 0x40,
+	0x94, 0xff, 0x24, 0x58, 0x7c, 0x92, 0xc4, 0x38, 0x26, 0x25, 0x20, 0x2e, 0x90, 0x56, 0xa0, 0x6e,
+	0x27, 0x3c, 0xa6, 0x01, 0x61, 0x96, 0xe7, 0x8c, 0xe2, 0x80, 0xb0, 0x3f, 0x76, 0xd0, 0x97, 0x00,
+	0x43, 0x66, 0x0d, 0xb9, 0x35, 0xb3, 0x5a, 0xef, 0xdc, 0x53, 0xa7, 0x29, 0xa6, 0x96, 0x4a, 0x3e,
+	0x15, 0x00, 0x05, 0xfc, 0x10, 0x10, 0xbd, 0x0b, 0x37, 0x22, 0xcc, 0x62, 0x0f, 0xfb, 0xd6, 0x21,
+	0xf6, 0xfc, 0x84, 0x91, 0xc6, 0x4c, 0x4b, 0x5a, 0xbd, 0x6a, 0x5e, 0x2f, 0xcc, 0x9b, 0xb9, 0x15,
+	0x2d, 0xc3, 0x5c, 0x1f, 0xfb, 0x9e, 0x83, 0x63, 0x62, 0xd1, 0xd0, 0x3f, 0x6e, 0xbc, 0x9e, 0x85,
+	0x5d, 0x13, 0xc6, 0xa7, 0xa1, 0x7f, 0xac, 0x3c, 0x86, 0xc5, 0x1d, 0x46, 0x03, 0x3a, 0x46, 0x59,
+	0x30, 0x6e, 0xc3, 0xf5, 0xf2, 0x98, 0x8c, 0x92, 0x9e, 0xb3, 0x47, 0x53, 0x94, 0x9f, 0x64, 0xb8,
+	0x55, 0x4d, 0x02, 0xad, 0x41, 0x3d, 0x89, 0xb2, 0x46, 0x52, 0x2d, 0xb3, 0x46, 0xea, 0x9d, 0xa6,
+	0xb8, 0x13, 0x21, 0xb7, 0xba, 0x99, 0xca, 0xfd, 0x04, 0xf3, 0x23, 0x13, 0xf2, 0xf0, 0xf4, 0x8c,
+	0x3e, 0x84, 0x59, 0x9b, 0x11, 0x1c, 0xe7, 0xc2, 0xd5, 0x3b, 0x77, 0x27, 0xde, 0xe5, 0x60, 0xb6,
+	0xcb, 0x97, 0xb9, 0xfd, 0x9a, 0x59, 0x20, 0xa4, 0x58, 0x39, 0x72, 0x43, 0xbe, 0x3c, 0x56, 0x8e,
+	0x80, 0x1a, 0x30, 0xcb, 0x48, 0x40, 0xfb, 0xf9, 0xfd, 0xd7, 0x52, 0x4f, 0xfe, 0xdd, 0xab, 0x43,
+	0x6d, 0x20, 0x98, 0xf2, 0xab, 0x04, 0x4b, 0xd5, 0x43, 0xc5, 0x23, 0x1a, 0x72, 0x82, 0x36, 0xe1,
+	0xe6, 0x98, 0xa0, 0x16, 0x61, 0x8c, 0xb2, 0x0c, 0xb6, 0xde, 0x41, 0xa2, 0x45, 0x16, 0xd9, 0xea,
+	0x6e, 0x36, 0xf3, 0xe6, 0x5b, 0x65, 0xa9, 0x37, 0xd2, 0x70, 0xf4, 0x29, 0x5c, 0x61, 0x84, 0x27,
+	0x7e, 0x2c, 0x86, 0x6e, 0x6d, 0xfa, 0xd0, 0x55, 0x34, 0x66, 0x66, 0x18, 0xa6, 0xc0, 0x52, 0x1e,
+	0xc2, 0xed, 0x89, 0x51, 0xe9, 0x8c, 0x55, 0xbc, 0xad, 0xb1, 0x67, 0xf5, 0x83, 0x04, 0xcb, 0x1f,
+	0x79, 0xbc, 0xfc, 0x3a, 0x0d, 0x7e, 0x1c, 0xda, 0x59, 0xe3, 0xfc, 0xc2, 0x0f, 0x15, 0xdd, 0x01,
+	0x88, 0xb0, 0x4b, 0xac, 0x98, 0x1e, 0x91, 0x30, 0x93, 0xb2, 0x66, 0xd6, 0x52, 0xcb, 0x27, 0xa9,
+	0x01, 0x2d, 0x42, 0xf6, 0x61, 0x71, 0xef, 0x24, 0x17, 0xe7, 0x0d, 0xf3, 0x6a, 0x6a, 0xd8, 0xf5,
+	0x4e, 0x88, 0x72, 0x02, 0x2b, 0xe7, 0x37, 0x53, 0xc8, 0xd2, 0x86, 0xd9, 0x4c, 0x06, 0xde, 0x90,
+	0xb2, 0xdb, 0xac, 0xd2, 0xa1, 0x88, 0x40, 0xef, 0xc0, 0x8d, 0x90, 0x7c, 0x13, 0x5b, 0x2f, 0x34,
+	0x35, 0x97, 0x9a, 0x77, 0x44, 0x63, 0x9d, 0x3f, 0xaf, 0xc0, 0x7c, 0xa9, 0xf0, 0x6e, 0x2e, 0x04,
+	0xfa, 0x4d, 0x82, 0x37, 0xc7, 0xf7, 0x17, 0xba, 0x3f, 0x5d, 0xbf, 0x09, 0x3b, 0xaf, 0x79, 0xe1,
+	0xb9, 0x56, 0xb6, 0xcf, 0x8c, 0xf2, 0xed, 0x7f, 0xf7, 0xfb, 0x5f, 0x3f, 0xca, 0x1d, 0x74, 0x37,
+	0xfd, 0xd1, 0x78, 0x56, 0xf2, 0xac, 0x8b, 0x65, 0xc7, 0xb5, 0xb6, 0x56, 0xda, 0x01, 0x5c, 0x6b,
+	0x3f, 0x47, 0xff, 0x4a, 0x30, 0x5f, 0x35, 0xf0, 0x68, 0xfd, 0x52, 0xf3, 0x28, 0xc6, 0xa3, 0xf9,
+	0xe0, 0xb2, 0xe9, 0xb9, 0xa0, 0xca, 0x67, 0x67, 0xc6, 0xad, 0x91, 0xf5, 0xfd, 0xde, 0x70, 0xa7,
+	0x66, 0x54, 0xef, 0x29, 0xdd, 0x94, 0xea, 0x90, 0xdb, 0xb3, 0x91, 0xe0, 0xf5, 0xf6, 0xf3, 0x31,
+	0xa6, 0x7a, 0x90, 0xd5, 0xd2, 0xa5, 0x36, 0xfa, 0x5b, 0x82, 0xf9, 0xaa, 0x25, 0xfa, 0x32, 0x84,
+	0xcf, 0x59, 0xbe, 0xcd, 0x3b, 0x22, 0x7d, 0xe4, 0x47, 0x53, 0x1d, 0x2c, 0x55, 0x85, 0x9e, 0x1a,
+	0x0b, 0x70, 0x73, 0x7c, 0x87, 0x6e, 0x04, 0x51, 0x7c, 0x7c, 0x66, 0x8c, 0xad, 0xed, 0x8c, 0xe1,
+	0x03, 0xe5, 0x7e, 0x26, 0x66, 0xd9, 0x75, 0xbe, 0x9a, 0x7a, 0x94, 0x37, 0x98, 0xf2, 0xfc, 0x5e,
+	0x86, 0xa5, 0xf3, 0x9e, 0x0e, 0xda, 0x98, 0xce, 0xf7, 0x25, 0xf6, 0x40, 0x73, 0xf3, 0x55, 0x61,
+	0x0a, 0xc1, 0x3f, 0xaf, 0x1c, 0xe9, 0x1e, 0x7a, 0x78, 0xd1, 0x91, 0xd6, 0x7d, 0x8f, 0x8f, 0x56,
+	0x68, 0x2e, 0x9e, 0x1a, 0x8d, 0x61, 0x63, 0xc5, 0x29, 0xf2, 0xb8, 0x6a, 0xd3, 0xa0, 0xf7, 0xad,
+	0x0c, 0x2b, 0x36, 0x0d, 0xa6, 0x92, 0xe8, 0xdd, 0xae, 0x5a, 0x05, 0x3b, 0xa9, 0x90, 0x3b, 0xd2,
+	0x17, 0xdb, 0x45, 0xba, 0x4b, 0x7d, 0x1c, 0xba, 0x2a, 0x65, 0xae, 0xe6, 0x92, 0x30, 0x93, 0x59,
+	0x1b, 0x16, 0x9c, 0xfc, 0x07, 0x72, 0x4d, 0x1c, 0x7e, 0x96, 0x67, 0xb6, 0x0c, 0xe3, 0x17, 0xb9,
+	0xb5, 0x95, 0x03, 0x1a, 0x0e, 0x57, 0xf3, 0x63, 0x7a, 0xda, 0xeb, 0xaa, 0x45, 0x61, 0x7e, 0x2a,
+	0x42, 0xf6, 0x0d, 0x87, 0xef, 0x0f, 0x42, 0xf6, 0xf7, 0xba, 0xfb, 0x22, 0xe4, 0x1f, 0x79, 0x25,
+	0xb7, 0xeb, 0xba, 0xe1, 0x70, 0x5d, 0x1f, 0x04, 0xe9, 0xfa, 0x5e, 0x57, 0xd7, 0x45, 0xd8, 0xc1,
+	0x6c, 0xd6, 0x67, 0xf7, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xff, 0x50, 0xf2, 0xe7, 0x0a,
+	0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignDraftServiceClient is the client API for CampaignDraftService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignDraftServiceClient interface {
+	// Returns the requested campaign draft in full detail.
+	GetCampaignDraft(ctx context.Context, in *GetCampaignDraftRequest, opts ...grpc.CallOption) (*resources.CampaignDraft, error)
+	// Creates, updates, or removes campaign drafts. Operation statuses are
+	// returned.
+	MutateCampaignDrafts(ctx context.Context, in *MutateCampaignDraftsRequest, opts ...grpc.CallOption) (*MutateCampaignDraftsResponse, error)
+	// Promotes the changes in a draft back to the base campaign.
+	//
+	// This method returns a Long Running Operation (LRO) indicating if the
+	// Promote is done. Use [Operations.GetOperation] to poll the LRO until it
+	// is done. Only a done status is returned in the response. See the status
+	// in the Campaign Draft resource to determine if the promotion was
+	// successful. If the LRO failed, use
+	// [CampaignDraftService.ListCampaignDraftAsyncErrors][google.ads.googleads.v3.services.CampaignDraftService.ListCampaignDraftAsyncErrors] to view the list of
+	// error reasons.
+	PromoteCampaignDraft(ctx context.Context, in *PromoteCampaignDraftRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
+	// Returns all errors that occurred during CampaignDraft promote. Throws an
+	// error if called before campaign draft is promoted.
+	// Supports standard list paging.
+	ListCampaignDraftAsyncErrors(ctx context.Context, in *ListCampaignDraftAsyncErrorsRequest, opts ...grpc.CallOption) (*ListCampaignDraftAsyncErrorsResponse, error)
+}
+
+type campaignDraftServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignDraftServiceClient(cc grpc.ClientConnInterface) CampaignDraftServiceClient {
+	return &campaignDraftServiceClient{cc}
+}
+
+func (c *campaignDraftServiceClient) GetCampaignDraft(ctx context.Context, in *GetCampaignDraftRequest, opts ...grpc.CallOption) (*resources.CampaignDraft, error) {
+	out := new(resources.CampaignDraft)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignDraftService/GetCampaignDraft", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignDraftServiceClient) MutateCampaignDrafts(ctx context.Context, in *MutateCampaignDraftsRequest, opts ...grpc.CallOption) (*MutateCampaignDraftsResponse, error) {
+	out := new(MutateCampaignDraftsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignDraftService/MutateCampaignDrafts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignDraftServiceClient) PromoteCampaignDraft(ctx context.Context, in *PromoteCampaignDraftRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
+	out := new(longrunning.Operation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignDraftService/PromoteCampaignDraft", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignDraftServiceClient) ListCampaignDraftAsyncErrors(ctx context.Context, in *ListCampaignDraftAsyncErrorsRequest, opts ...grpc.CallOption) (*ListCampaignDraftAsyncErrorsResponse, error) {
+	out := new(ListCampaignDraftAsyncErrorsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignDraftService/ListCampaignDraftAsyncErrors", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignDraftServiceServer is the server API for CampaignDraftService service.
+type CampaignDraftServiceServer interface {
+	// Returns the requested campaign draft in full detail.
+	GetCampaignDraft(context.Context, *GetCampaignDraftRequest) (*resources.CampaignDraft, error)
+	// Creates, updates, or removes campaign drafts. Operation statuses are
+	// returned.
+	MutateCampaignDrafts(context.Context, *MutateCampaignDraftsRequest) (*MutateCampaignDraftsResponse, error)
+	// Promotes the changes in a draft back to the base campaign.
+	//
+	// This method returns a Long Running Operation (LRO) indicating if the
+	// Promote is done. Use [Operations.GetOperation] to poll the LRO until it
+	// is done. Only a done status is returned in the response. See the status
+	// in the Campaign Draft resource to determine if the promotion was
+	// successful. If the LRO failed, use
+	// [CampaignDraftService.ListCampaignDraftAsyncErrors][google.ads.googleads.v3.services.CampaignDraftService.ListCampaignDraftAsyncErrors] to view the list of
+	// error reasons.
+	PromoteCampaignDraft(context.Context, *PromoteCampaignDraftRequest) (*longrunning.Operation, error)
+	// Returns all errors that occurred during CampaignDraft promote. Throws an
+	// error if called before campaign draft is promoted.
+	// Supports standard list paging.
+	ListCampaignDraftAsyncErrors(context.Context, *ListCampaignDraftAsyncErrorsRequest) (*ListCampaignDraftAsyncErrorsResponse, error)
+}
+
+// UnimplementedCampaignDraftServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignDraftServiceServer struct {
+}
+
+func (*UnimplementedCampaignDraftServiceServer) GetCampaignDraft(ctx context.Context, req *GetCampaignDraftRequest) (*resources.CampaignDraft, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignDraft not implemented")
+}
+func (*UnimplementedCampaignDraftServiceServer) MutateCampaignDrafts(ctx context.Context, req *MutateCampaignDraftsRequest) (*MutateCampaignDraftsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignDrafts not implemented")
+}
+func (*UnimplementedCampaignDraftServiceServer) PromoteCampaignDraft(ctx context.Context, req *PromoteCampaignDraftRequest) (*longrunning.Operation, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method PromoteCampaignDraft not implemented")
+}
+func (*UnimplementedCampaignDraftServiceServer) ListCampaignDraftAsyncErrors(ctx context.Context, req *ListCampaignDraftAsyncErrorsRequest) (*ListCampaignDraftAsyncErrorsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method ListCampaignDraftAsyncErrors not implemented")
+}
+
+func RegisterCampaignDraftServiceServer(s *grpc.Server, srv CampaignDraftServiceServer) {
+	s.RegisterService(&_CampaignDraftService_serviceDesc, srv)
+}
+
+func _CampaignDraftService_GetCampaignDraft_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignDraftRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignDraftServiceServer).GetCampaignDraft(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignDraftService/GetCampaignDraft",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignDraftServiceServer).GetCampaignDraft(ctx, req.(*GetCampaignDraftRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignDraftService_MutateCampaignDrafts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignDraftsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignDraftServiceServer).MutateCampaignDrafts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignDraftService/MutateCampaignDrafts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignDraftServiceServer).MutateCampaignDrafts(ctx, req.(*MutateCampaignDraftsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignDraftService_PromoteCampaignDraft_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PromoteCampaignDraftRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignDraftServiceServer).PromoteCampaignDraft(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignDraftService/PromoteCampaignDraft",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignDraftServiceServer).PromoteCampaignDraft(ctx, req.(*PromoteCampaignDraftRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignDraftService_ListCampaignDraftAsyncErrors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListCampaignDraftAsyncErrorsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignDraftServiceServer).ListCampaignDraftAsyncErrors(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignDraftService/ListCampaignDraftAsyncErrors",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignDraftServiceServer).ListCampaignDraftAsyncErrors(ctx, req.(*ListCampaignDraftAsyncErrorsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignDraftService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignDraftService",
+	HandlerType: (*CampaignDraftServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignDraft",
+			Handler:    _CampaignDraftService_GetCampaignDraft_Handler,
+		},
+		{
+			MethodName: "MutateCampaignDrafts",
+			Handler:    _CampaignDraftService_MutateCampaignDrafts_Handler,
+		},
+		{
+			MethodName: "PromoteCampaignDraft",
+			Handler:    _CampaignDraftService_PromoteCampaignDraft_Handler,
+		},
+		{
+			MethodName: "ListCampaignDraftAsyncErrors",
+			Handler:    _CampaignDraftService_ListCampaignDraftAsyncErrors_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_draft_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_experiment_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_experiment_service.pb.go
new file mode 100644
index 0000000..7022d12
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_experiment_service.pb.go
@@ -0,0 +1,1181 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_experiment_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	empty "github.com/golang/protobuf/ptypes/empty"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	longrunning "google.golang.org/genproto/googleapis/longrunning"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignExperimentService.GetCampaignExperiment][google.ads.googleads.v3.services.CampaignExperimentService.GetCampaignExperiment].
+type GetCampaignExperimentRequest struct {
+	// Required. The resource name of the campaign experiment to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignExperimentRequest) Reset()         { *m = GetCampaignExperimentRequest{} }
+func (m *GetCampaignExperimentRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignExperimentRequest) ProtoMessage()    {}
+func (*GetCampaignExperimentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{0}
+}
+
+func (m *GetCampaignExperimentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignExperimentRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignExperimentRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignExperimentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignExperimentRequest.Merge(m, src)
+}
+func (m *GetCampaignExperimentRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignExperimentRequest.Size(m)
+}
+func (m *GetCampaignExperimentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignExperimentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignExperimentRequest proto.InternalMessageInfo
+
+func (m *GetCampaignExperimentRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignExperimentService.MutateCampaignExperiments][google.ads.googleads.v3.services.CampaignExperimentService.MutateCampaignExperiments].
+type MutateCampaignExperimentsRequest struct {
+	// Required. The ID of the customer whose campaign experiments are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign experiments.
+	Operations []*CampaignExperimentOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignExperimentsRequest) Reset()         { *m = MutateCampaignExperimentsRequest{} }
+func (m *MutateCampaignExperimentsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExperimentsRequest) ProtoMessage()    {}
+func (*MutateCampaignExperimentsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{1}
+}
+
+func (m *MutateCampaignExperimentsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExperimentsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignExperimentsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExperimentsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExperimentsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExperimentsRequest.Merge(m, src)
+}
+func (m *MutateCampaignExperimentsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExperimentsRequest.Size(m)
+}
+func (m *MutateCampaignExperimentsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExperimentsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExperimentsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignExperimentsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignExperimentsRequest) GetOperations() []*CampaignExperimentOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignExperimentsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignExperimentsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single update operation on a campaign experiment.
+type CampaignExperimentOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignExperimentOperation_Update
+	//	*CampaignExperimentOperation_Remove
+	Operation            isCampaignExperimentOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CampaignExperimentOperation) Reset()         { *m = CampaignExperimentOperation{} }
+func (m *CampaignExperimentOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignExperimentOperation) ProtoMessage()    {}
+func (*CampaignExperimentOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{2}
+}
+
+func (m *CampaignExperimentOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExperimentOperation.Unmarshal(m, b)
+}
+func (m *CampaignExperimentOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExperimentOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignExperimentOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExperimentOperation.Merge(m, src)
+}
+func (m *CampaignExperimentOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignExperimentOperation.Size(m)
+}
+func (m *CampaignExperimentOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExperimentOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExperimentOperation proto.InternalMessageInfo
+
+func (m *CampaignExperimentOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignExperimentOperation_Operation interface {
+	isCampaignExperimentOperation_Operation()
+}
+
+type CampaignExperimentOperation_Update struct {
+	Update *resources.CampaignExperiment `protobuf:"bytes,1,opt,name=update,proto3,oneof"`
+}
+
+type CampaignExperimentOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignExperimentOperation_Update) isCampaignExperimentOperation_Operation() {}
+
+func (*CampaignExperimentOperation_Remove) isCampaignExperimentOperation_Operation() {}
+
+func (m *CampaignExperimentOperation) GetOperation() isCampaignExperimentOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignExperimentOperation) GetUpdate() *resources.CampaignExperiment {
+	if x, ok := m.GetOperation().(*CampaignExperimentOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignExperimentOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignExperimentOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignExperimentOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignExperimentOperation_Update)(nil),
+		(*CampaignExperimentOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign experiment mutate.
+type MutateCampaignExperimentsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignExperimentResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateCampaignExperimentsResponse) Reset()         { *m = MutateCampaignExperimentsResponse{} }
+func (m *MutateCampaignExperimentsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExperimentsResponse) ProtoMessage()    {}
+func (*MutateCampaignExperimentsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{3}
+}
+
+func (m *MutateCampaignExperimentsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExperimentsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignExperimentsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExperimentsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExperimentsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExperimentsResponse.Merge(m, src)
+}
+func (m *MutateCampaignExperimentsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExperimentsResponse.Size(m)
+}
+func (m *MutateCampaignExperimentsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExperimentsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExperimentsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignExperimentsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignExperimentsResponse) GetResults() []*MutateCampaignExperimentResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign experiment mutate.
+type MutateCampaignExperimentResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignExperimentResult) Reset()         { *m = MutateCampaignExperimentResult{} }
+func (m *MutateCampaignExperimentResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExperimentResult) ProtoMessage()    {}
+func (*MutateCampaignExperimentResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{4}
+}
+
+func (m *MutateCampaignExperimentResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExperimentResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignExperimentResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExperimentResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExperimentResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExperimentResult.Merge(m, src)
+}
+func (m *MutateCampaignExperimentResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExperimentResult.Size(m)
+}
+func (m *MutateCampaignExperimentResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExperimentResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExperimentResult proto.InternalMessageInfo
+
+func (m *MutateCampaignExperimentResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignExperimentService.CreateCampaignExperiment][google.ads.googleads.v3.services.CampaignExperimentService.CreateCampaignExperiment].
+type CreateCampaignExperimentRequest struct {
+	// Required. The ID of the customer whose campaign experiment is being created.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The campaign experiment to be created.
+	CampaignExperiment *resources.CampaignExperiment `protobuf:"bytes,2,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,3,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateCampaignExperimentRequest) Reset()         { *m = CreateCampaignExperimentRequest{} }
+func (m *CreateCampaignExperimentRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateCampaignExperimentRequest) ProtoMessage()    {}
+func (*CreateCampaignExperimentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{5}
+}
+
+func (m *CreateCampaignExperimentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCampaignExperimentRequest.Unmarshal(m, b)
+}
+func (m *CreateCampaignExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCampaignExperimentRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateCampaignExperimentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCampaignExperimentRequest.Merge(m, src)
+}
+func (m *CreateCampaignExperimentRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateCampaignExperimentRequest.Size(m)
+}
+func (m *CreateCampaignExperimentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCampaignExperimentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCampaignExperimentRequest proto.InternalMessageInfo
+
+func (m *CreateCampaignExperimentRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *CreateCampaignExperimentRequest) GetCampaignExperiment() *resources.CampaignExperiment {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return nil
+}
+
+func (m *CreateCampaignExperimentRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Message used as metadata returned in Long Running Operations for
+// CreateCampaignExperimentRequest
+type CreateCampaignExperimentMetadata struct {
+	// Resource name of campaign experiment created.
+	CampaignExperiment   string   `protobuf:"bytes,1,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateCampaignExperimentMetadata) Reset()         { *m = CreateCampaignExperimentMetadata{} }
+func (m *CreateCampaignExperimentMetadata) String() string { return proto.CompactTextString(m) }
+func (*CreateCampaignExperimentMetadata) ProtoMessage()    {}
+func (*CreateCampaignExperimentMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{6}
+}
+
+func (m *CreateCampaignExperimentMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCampaignExperimentMetadata.Unmarshal(m, b)
+}
+func (m *CreateCampaignExperimentMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCampaignExperimentMetadata.Marshal(b, m, deterministic)
+}
+func (m *CreateCampaignExperimentMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCampaignExperimentMetadata.Merge(m, src)
+}
+func (m *CreateCampaignExperimentMetadata) XXX_Size() int {
+	return xxx_messageInfo_CreateCampaignExperimentMetadata.Size(m)
+}
+func (m *CreateCampaignExperimentMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCampaignExperimentMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCampaignExperimentMetadata proto.InternalMessageInfo
+
+func (m *CreateCampaignExperimentMetadata) GetCampaignExperiment() string {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return ""
+}
+
+// Request message for [CampaignExperimentService.GraduateCampaignExperiment][google.ads.googleads.v3.services.CampaignExperimentService.GraduateCampaignExperiment].
+type GraduateCampaignExperimentRequest struct {
+	// Required. The resource name of the campaign experiment to graduate.
+	CampaignExperiment string `protobuf:"bytes,1,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	// Required. Resource name of the budget to attach to the campaign graduated from the
+	// experiment.
+	CampaignBudget       string   `protobuf:"bytes,2,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GraduateCampaignExperimentRequest) Reset()         { *m = GraduateCampaignExperimentRequest{} }
+func (m *GraduateCampaignExperimentRequest) String() string { return proto.CompactTextString(m) }
+func (*GraduateCampaignExperimentRequest) ProtoMessage()    {}
+func (*GraduateCampaignExperimentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{7}
+}
+
+func (m *GraduateCampaignExperimentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GraduateCampaignExperimentRequest.Unmarshal(m, b)
+}
+func (m *GraduateCampaignExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GraduateCampaignExperimentRequest.Marshal(b, m, deterministic)
+}
+func (m *GraduateCampaignExperimentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GraduateCampaignExperimentRequest.Merge(m, src)
+}
+func (m *GraduateCampaignExperimentRequest) XXX_Size() int {
+	return xxx_messageInfo_GraduateCampaignExperimentRequest.Size(m)
+}
+func (m *GraduateCampaignExperimentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GraduateCampaignExperimentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GraduateCampaignExperimentRequest proto.InternalMessageInfo
+
+func (m *GraduateCampaignExperimentRequest) GetCampaignExperiment() string {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return ""
+}
+
+func (m *GraduateCampaignExperimentRequest) GetCampaignBudget() string {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return ""
+}
+
+// Response message for campaign experiment graduate.
+type GraduateCampaignExperimentResponse struct {
+	// The resource name of the campaign from the graduated experiment.
+	// This campaign is the same one as CampaignExperiment.experiment_campaign.
+	GraduatedCampaign    string   `protobuf:"bytes,1,opt,name=graduated_campaign,json=graduatedCampaign,proto3" json:"graduated_campaign,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GraduateCampaignExperimentResponse) Reset()         { *m = GraduateCampaignExperimentResponse{} }
+func (m *GraduateCampaignExperimentResponse) String() string { return proto.CompactTextString(m) }
+func (*GraduateCampaignExperimentResponse) ProtoMessage()    {}
+func (*GraduateCampaignExperimentResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{8}
+}
+
+func (m *GraduateCampaignExperimentResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GraduateCampaignExperimentResponse.Unmarshal(m, b)
+}
+func (m *GraduateCampaignExperimentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GraduateCampaignExperimentResponse.Marshal(b, m, deterministic)
+}
+func (m *GraduateCampaignExperimentResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GraduateCampaignExperimentResponse.Merge(m, src)
+}
+func (m *GraduateCampaignExperimentResponse) XXX_Size() int {
+	return xxx_messageInfo_GraduateCampaignExperimentResponse.Size(m)
+}
+func (m *GraduateCampaignExperimentResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GraduateCampaignExperimentResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GraduateCampaignExperimentResponse proto.InternalMessageInfo
+
+func (m *GraduateCampaignExperimentResponse) GetGraduatedCampaign() string {
+	if m != nil {
+		return m.GraduatedCampaign
+	}
+	return ""
+}
+
+// Request message for [CampaignExperimentService.PromoteCampaignExperiment][google.ads.googleads.v3.services.CampaignExperimentService.PromoteCampaignExperiment].
+type PromoteCampaignExperimentRequest struct {
+	// Required. The resource name of the campaign experiment to promote.
+	CampaignExperiment   string   `protobuf:"bytes,1,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromoteCampaignExperimentRequest) Reset()         { *m = PromoteCampaignExperimentRequest{} }
+func (m *PromoteCampaignExperimentRequest) String() string { return proto.CompactTextString(m) }
+func (*PromoteCampaignExperimentRequest) ProtoMessage()    {}
+func (*PromoteCampaignExperimentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{9}
+}
+
+func (m *PromoteCampaignExperimentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromoteCampaignExperimentRequest.Unmarshal(m, b)
+}
+func (m *PromoteCampaignExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromoteCampaignExperimentRequest.Marshal(b, m, deterministic)
+}
+func (m *PromoteCampaignExperimentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromoteCampaignExperimentRequest.Merge(m, src)
+}
+func (m *PromoteCampaignExperimentRequest) XXX_Size() int {
+	return xxx_messageInfo_PromoteCampaignExperimentRequest.Size(m)
+}
+func (m *PromoteCampaignExperimentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromoteCampaignExperimentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromoteCampaignExperimentRequest proto.InternalMessageInfo
+
+func (m *PromoteCampaignExperimentRequest) GetCampaignExperiment() string {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return ""
+}
+
+// Request message for [CampaignExperimentService.EndCampaignExperiment][google.ads.googleads.v3.services.CampaignExperimentService.EndCampaignExperiment].
+type EndCampaignExperimentRequest struct {
+	// Required. The resource name of the campaign experiment to end.
+	CampaignExperiment   string   `protobuf:"bytes,1,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EndCampaignExperimentRequest) Reset()         { *m = EndCampaignExperimentRequest{} }
+func (m *EndCampaignExperimentRequest) String() string { return proto.CompactTextString(m) }
+func (*EndCampaignExperimentRequest) ProtoMessage()    {}
+func (*EndCampaignExperimentRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{10}
+}
+
+func (m *EndCampaignExperimentRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EndCampaignExperimentRequest.Unmarshal(m, b)
+}
+func (m *EndCampaignExperimentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EndCampaignExperimentRequest.Marshal(b, m, deterministic)
+}
+func (m *EndCampaignExperimentRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EndCampaignExperimentRequest.Merge(m, src)
+}
+func (m *EndCampaignExperimentRequest) XXX_Size() int {
+	return xxx_messageInfo_EndCampaignExperimentRequest.Size(m)
+}
+func (m *EndCampaignExperimentRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_EndCampaignExperimentRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EndCampaignExperimentRequest proto.InternalMessageInfo
+
+func (m *EndCampaignExperimentRequest) GetCampaignExperiment() string {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return ""
+}
+
+// Request message for
+// [CampaignExperimentService.ListCampaignExperimentAsyncErrors][google.ads.googleads.v3.services.CampaignExperimentService.ListCampaignExperimentAsyncErrors].
+type ListCampaignExperimentAsyncErrorsRequest struct {
+	// Required. The name of the campaign experiment from which to retrieve the async
+	// errors.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Token of the page to retrieve. If not specified, the first
+	// page of results will be returned. Use the value obtained from
+	// `next_page_token` in the previous response in order to request
+	// the next page of results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When a page request is too large, the server may decide to
+	// further limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListCampaignExperimentAsyncErrorsRequest) Reset() {
+	*m = ListCampaignExperimentAsyncErrorsRequest{}
+}
+func (m *ListCampaignExperimentAsyncErrorsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListCampaignExperimentAsyncErrorsRequest) ProtoMessage()    {}
+func (*ListCampaignExperimentAsyncErrorsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{11}
+}
+
+func (m *ListCampaignExperimentAsyncErrorsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest.Unmarshal(m, b)
+}
+func (m *ListCampaignExperimentAsyncErrorsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListCampaignExperimentAsyncErrorsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest.Merge(m, src)
+}
+func (m *ListCampaignExperimentAsyncErrorsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest.Size(m)
+}
+func (m *ListCampaignExperimentAsyncErrorsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCampaignExperimentAsyncErrorsRequest proto.InternalMessageInfo
+
+func (m *ListCampaignExperimentAsyncErrorsRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ListCampaignExperimentAsyncErrorsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListCampaignExperimentAsyncErrorsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for
+// [CampaignExperimentService.ListCampaignExperimentAsyncErrors][google.ads.googleads.v3.services.CampaignExperimentService.ListCampaignExperimentAsyncErrors].
+type ListCampaignExperimentAsyncErrorsResponse struct {
+	// Details of the errors when performing the asynchronous operation.
+	Errors []*status.Status `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"`
+	// Pagination token used to retrieve the next page of results.
+	// Pass the content of this string as the `page_token` attribute of
+	// the next request. `next_page_token` is not returned for the last
+	// page.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListCampaignExperimentAsyncErrorsResponse) Reset() {
+	*m = ListCampaignExperimentAsyncErrorsResponse{}
+}
+func (m *ListCampaignExperimentAsyncErrorsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListCampaignExperimentAsyncErrorsResponse) ProtoMessage()    {}
+func (*ListCampaignExperimentAsyncErrorsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_28da8316d8332ea0, []int{12}
+}
+
+func (m *ListCampaignExperimentAsyncErrorsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse.Unmarshal(m, b)
+}
+func (m *ListCampaignExperimentAsyncErrorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListCampaignExperimentAsyncErrorsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse.Merge(m, src)
+}
+func (m *ListCampaignExperimentAsyncErrorsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse.Size(m)
+}
+func (m *ListCampaignExperimentAsyncErrorsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCampaignExperimentAsyncErrorsResponse proto.InternalMessageInfo
+
+func (m *ListCampaignExperimentAsyncErrorsResponse) GetErrors() []*status.Status {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+func (m *ListCampaignExperimentAsyncErrorsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignExperimentRequest)(nil), "google.ads.googleads.v3.services.GetCampaignExperimentRequest")
+	proto.RegisterType((*MutateCampaignExperimentsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignExperimentsRequest")
+	proto.RegisterType((*CampaignExperimentOperation)(nil), "google.ads.googleads.v3.services.CampaignExperimentOperation")
+	proto.RegisterType((*MutateCampaignExperimentsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignExperimentsResponse")
+	proto.RegisterType((*MutateCampaignExperimentResult)(nil), "google.ads.googleads.v3.services.MutateCampaignExperimentResult")
+	proto.RegisterType((*CreateCampaignExperimentRequest)(nil), "google.ads.googleads.v3.services.CreateCampaignExperimentRequest")
+	proto.RegisterType((*CreateCampaignExperimentMetadata)(nil), "google.ads.googleads.v3.services.CreateCampaignExperimentMetadata")
+	proto.RegisterType((*GraduateCampaignExperimentRequest)(nil), "google.ads.googleads.v3.services.GraduateCampaignExperimentRequest")
+	proto.RegisterType((*GraduateCampaignExperimentResponse)(nil), "google.ads.googleads.v3.services.GraduateCampaignExperimentResponse")
+	proto.RegisterType((*PromoteCampaignExperimentRequest)(nil), "google.ads.googleads.v3.services.PromoteCampaignExperimentRequest")
+	proto.RegisterType((*EndCampaignExperimentRequest)(nil), "google.ads.googleads.v3.services.EndCampaignExperimentRequest")
+	proto.RegisterType((*ListCampaignExperimentAsyncErrorsRequest)(nil), "google.ads.googleads.v3.services.ListCampaignExperimentAsyncErrorsRequest")
+	proto.RegisterType((*ListCampaignExperimentAsyncErrorsResponse)(nil), "google.ads.googleads.v3.services.ListCampaignExperimentAsyncErrorsResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_experiment_service.proto", fileDescriptor_28da8316d8332ea0)
+}
+
+var fileDescriptor_28da8316d8332ea0 = []byte{
+	// 1224 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x4f, 0x23, 0x55,
+	0x14, 0x77, 0x06, 0xc5, 0xe5, 0x74, 0x81, 0x78, 0x09, 0xbb, 0xa5, 0xb0, 0x4b, 0x19, 0x88, 0x22,
+	0xc1, 0x99, 0x84, 0xba, 0xd1, 0x0c, 0x41, 0x9d, 0x42, 0x81, 0x55, 0x11, 0x52, 0x36, 0xc4, 0x10,
+	0xcc, 0x78, 0xe9, 0x5c, 0xc6, 0x09, 0xf3, 0xe5, 0xdc, 0x99, 0x66, 0xd9, 0xcd, 0x6a, 0xb2, 0x89,
+	0xf1, 0xd5, 0xc4, 0x47, 0x13, 0x1f, 0x7c, 0xf4, 0xbf, 0xd0, 0x17, 0x13, 0xde, 0xd4, 0x27, 0x49,
+	0x4c, 0x7c, 0xf0, 0xc9, 0x77, 0x5f, 0x7c, 0x30, 0x9b, 0xf9, 0xb8, 0x6d, 0x69, 0x67, 0xda, 0x6e,
+	0xe1, 0xed, 0xf6, 0x9e, 0x73, 0x7f, 0xe7, 0x9c, 0xdf, 0xf9, 0x9a, 0x14, 0xca, 0xba, 0xe3, 0xe8,
+	0x26, 0x91, 0xb0, 0x46, 0xa5, 0xf8, 0x18, 0x9e, 0xea, 0x25, 0x89, 0x12, 0xaf, 0x6e, 0xd4, 0x08,
+	0x95, 0x6a, 0xd8, 0x72, 0xb1, 0xa1, 0xdb, 0x2a, 0x79, 0xe8, 0x12, 0xcf, 0xb0, 0x88, 0xed, 0xab,
+	0x89, 0x50, 0x74, 0x3d, 0xc7, 0x77, 0x50, 0x31, 0x7e, 0x28, 0x62, 0x8d, 0x8a, 0x0d, 0x0c, 0xb1,
+	0x5e, 0x12, 0x19, 0x46, 0x61, 0x35, 0xcb, 0x8a, 0x47, 0xa8, 0x13, 0x78, 0x19, 0x66, 0x62, 0xf8,
+	0xc2, 0x0c, 0x7b, 0xec, 0x1a, 0x12, 0xb6, 0x6d, 0xc7, 0xc7, 0xbe, 0xe1, 0xd8, 0x34, 0x91, 0xde,
+	0x6e, 0x91, 0xd6, 0x4c, 0xa3, 0xf9, 0x6c, 0xb6, 0x45, 0x70, 0x62, 0x10, 0x53, 0x53, 0x8f, 0xc9,
+	0x67, 0xb8, 0x6e, 0x38, 0x5e, 0xa2, 0x30, 0x9f, 0x28, 0x98, 0x8e, 0xad, 0x7b, 0x81, 0x6d, 0x1b,
+	0xb6, 0x2e, 0x39, 0x2e, 0xf1, 0x2e, 0xc1, 0x4f, 0x27, 0x4a, 0xd1, 0xaf, 0xe3, 0xe0, 0x44, 0x22,
+	0x96, 0xeb, 0x9f, 0x25, 0xc2, 0x62, 0xbb, 0x30, 0xb6, 0x63, 0x61, 0x7a, 0xda, 0xe6, 0x9d, 0xe7,
+	0xd6, 0x24, 0xea, 0x63, 0x3f, 0x48, 0x70, 0x85, 0x6d, 0x98, 0xd9, 0x22, 0xfe, 0x7a, 0x12, 0x74,
+	0xa5, 0x11, 0x73, 0x95, 0x7c, 0x1e, 0x10, 0xea, 0xa3, 0x45, 0x18, 0x65, 0xdc, 0xa8, 0x36, 0xb6,
+	0x48, 0x9e, 0x2b, 0x72, 0x8b, 0x23, 0xe5, 0xa1, 0xbf, 0x14, 0xbe, 0x7a, 0x93, 0x49, 0x3e, 0xc2,
+	0x16, 0x11, 0xfe, 0xe3, 0xa0, 0xb8, 0x13, 0xf8, 0xd8, 0x27, 0x9d, 0x68, 0x94, 0xc1, 0x2d, 0x40,
+	0xae, 0x16, 0x50, 0xdf, 0xb1, 0x88, 0xa7, 0x1a, 0x5a, 0x2b, 0x18, 0xb0, 0xfb, 0xfb, 0x1a, 0x3a,
+	0x06, 0x68, 0x12, 0x90, 0xe7, 0x8b, 0x43, 0x8b, 0xb9, 0x95, 0x35, 0xb1, 0x57, 0x76, 0xc5, 0x4e,
+	0xbb, 0xbb, 0x0c, 0x25, 0xb1, 0xd1, 0x44, 0x45, 0xaf, 0xc1, 0xb8, 0x8b, 0x3d, 0xdf, 0xc0, 0xa6,
+	0x7a, 0x82, 0x0d, 0x33, 0xf0, 0x48, 0x7e, 0xa8, 0xc8, 0x2d, 0xde, 0xa8, 0x8e, 0x25, 0xd7, 0x9b,
+	0xf1, 0x2d, 0x9a, 0x87, 0xd1, 0x3a, 0x36, 0x0d, 0x0d, 0xfb, 0x44, 0x75, 0x6c, 0xf3, 0x2c, 0xff,
+	0x62, 0xa4, 0x76, 0x93, 0x5d, 0xee, 0xda, 0xe6, 0x99, 0xf0, 0x1b, 0x07, 0xd3, 0x5d, 0xcc, 0xa3,
+	0x55, 0xc8, 0x05, 0x6e, 0x04, 0x11, 0x26, 0x25, 0xb2, 0x94, 0x5b, 0x29, 0xb0, 0x90, 0x58, 0xde,
+	0xc4, 0xcd, 0x30, 0x6f, 0x3b, 0x98, 0x9e, 0x56, 0x21, 0x56, 0x0f, 0xcf, 0x68, 0x17, 0x86, 0xe3,
+	0x5f, 0x11, 0x5f, 0xb9, 0x95, 0x7b, 0x99, 0x54, 0x34, 0xca, 0x38, 0x85, 0x8b, 0xed, 0x17, 0xaa,
+	0x09, 0x0c, 0xca, 0xc3, 0xb0, 0x47, 0x2c, 0xa7, 0x4e, 0xf2, 0x7c, 0x98, 0x80, 0x50, 0x12, 0xff,
+	0x2e, 0xe7, 0x60, 0xa4, 0xc1, 0x91, 0xf0, 0x0b, 0x07, 0x73, 0x5d, 0x32, 0x4a, 0x5d, 0xc7, 0xa6,
+	0x04, 0x6d, 0xc2, 0x64, 0x1b, 0x91, 0x2a, 0xf1, 0x3c, 0xc7, 0x4b, 0x82, 0x44, 0xcc, 0x59, 0xcf,
+	0xad, 0x89, 0xfb, 0x51, 0xe9, 0x55, 0x27, 0x2e, 0x53, 0x5c, 0x09, 0xd5, 0xd1, 0x21, 0xbc, 0xec,
+	0x11, 0x1a, 0x98, 0x3e, 0xcb, 0xf8, 0x7b, 0xbd, 0x33, 0x9e, 0xe5, 0x5d, 0x35, 0x02, 0xaa, 0x32,
+	0x40, 0xa1, 0x02, 0x77, 0xbb, 0xab, 0x86, 0x59, 0x4e, 0xa9, 0xf3, 0xb6, 0x12, 0xff, 0x83, 0x83,
+	0xd9, 0x75, 0x8f, 0x64, 0xe0, 0x3c, 0x4f, 0x85, 0x9f, 0xc2, 0x44, 0xca, 0xa0, 0x89, 0xd2, 0x31,
+	0x68, 0x7e, 0x63, 0x23, 0xa8, 0xd6, 0x21, 0xe8, 0xac, 0xe0, 0xa1, 0x94, 0x0a, 0xde, 0x87, 0x62,
+	0x56, 0x68, 0x3b, 0xc4, 0xc7, 0x1a, 0xf6, 0x31, 0x92, 0xd2, 0xbd, 0x8e, 0xa9, 0x4a, 0xb1, 0x2c,
+	0x7c, 0xcd, 0xc1, 0xdc, 0x96, 0x87, 0xb5, 0xa0, 0x2b, 0x65, 0x6f, 0x76, 0x81, 0xcd, 0x8e, 0x6a,
+	0x19, 0xc6, 0x1b, 0xaf, 0x8e, 0x03, 0x4d, 0x27, 0x31, 0x7d, 0xc9, 0x8b, 0x31, 0x26, 0x2b, 0x47,
+	0x22, 0x61, 0x1f, 0x84, 0x6e, 0x8e, 0x24, 0xb5, 0xfc, 0x06, 0x20, 0x3d, 0xd1, 0xd2, 0x54, 0x86,
+	0x90, 0xc4, 0xf7, 0x4a, 0x43, 0xc2, 0x00, 0x84, 0x8f, 0xa1, 0xb8, 0xe7, 0x39, 0x96, 0x73, 0xed,
+	0xc1, 0x09, 0x0f, 0x60, 0xa6, 0x62, 0x6b, 0xd7, 0x8d, 0xfa, 0x0d, 0x07, 0x8b, 0x1f, 0x1a, 0x34,
+	0x65, 0xdc, 0x2b, 0xf4, 0xcc, 0xae, 0x45, 0x7d, 0x48, 0x9f, 0x7b, 0xf2, 0xa3, 0x3b, 0x00, 0x2e,
+	0xd6, 0x89, 0xea, 0x3b, 0xa7, 0xc4, 0x8e, 0x93, 0x50, 0x1d, 0x09, 0x6f, 0x1e, 0x84, 0x17, 0x68,
+	0x1a, 0xa2, 0x1f, 0x2a, 0x35, 0x1e, 0xc5, 0x33, 0xf6, 0xa5, 0xea, 0x8d, 0xf0, 0x62, 0xdf, 0x78,
+	0x44, 0x84, 0x2f, 0xe1, 0xf5, 0x3e, 0x3c, 0x4a, 0xd2, 0xb3, 0x04, 0xc3, 0xd1, 0x68, 0xa1, 0x79,
+	0x2e, 0x9a, 0x10, 0x69, 0xb3, 0x25, 0xd1, 0x40, 0xaf, 0xc2, 0xb8, 0x4d, 0x1e, 0xfa, 0x6a, 0x87,
+	0x67, 0xa3, 0xe1, 0xf5, 0x1e, 0xf3, 0x6e, 0xe5, 0xdf, 0x31, 0x98, 0xea, 0xb4, 0xbe, 0x1f, 0x4f,
+	0x18, 0xf4, 0x27, 0x07, 0x93, 0xa9, 0xfb, 0x11, 0xbd, 0xd3, 0x7b, 0x3a, 0x75, 0x5b, 0xac, 0x85,
+	0xc1, 0x9a, 0x5c, 0xd8, 0xb9, 0x50, 0x2e, 0xa7, 0xe5, 0xe9, 0xef, 0x7f, 0x7f, 0xcb, 0xbf, 0x85,
+	0xee, 0x85, 0x5f, 0x31, 0x8f, 0x2f, 0x49, 0xd6, 0xd8, 0xbc, 0xa1, 0xd2, 0x92, 0xd4, 0x59, 0x0d,
+	0x54, 0x5a, 0x7a, 0x82, 0x7e, 0xe2, 0x21, 0x9f, 0xd5, 0xf6, 0x48, 0xe9, 0x63, 0xe5, 0x76, 0x9f,
+	0x86, 0x85, 0x3b, 0x0c, 0xa2, 0xe5, 0xe3, 0x46, 0x6c, 0xac, 0x45, 0xe1, 0x67, 0xee, 0x5c, 0x39,
+	0x84, 0xc9, 0xf6, 0x35, 0x58, 0x09, 0xbf, 0x6d, 0x90, 0x32, 0xb0, 0x75, 0x36, 0xb0, 0x2e, 0x94,
+	0xd9, 0x96, 0x59, 0xbc, 0x9c, 0xd2, 0x31, 0x11, 0x7b, 0x6b, 0xc2, 0xdb, 0x21, 0x7b, 0x4d, 0xba,
+	0x1e, 0xb7, 0xbc, 0x5a, 0x5b, 0x7a, 0x92, 0x46, 0x9e, 0x5c, 0x8b, 0x6c, 0xcb, 0xdc, 0x12, 0x7a,
+	0xca, 0xc3, 0x54, 0xe6, 0x9a, 0x44, 0xe5, 0xc1, 0xb7, 0x18, 0x6b, 0xc5, 0xc2, 0xfa, 0x95, 0x30,
+	0xe2, 0xe6, 0x11, 0x8e, 0x2e, 0x94, 0x5b, 0xad, 0x6c, 0x34, 0xbf, 0x85, 0x06, 0x27, 0xc1, 0x8a,
+	0xac, 0x86, 0x24, 0x7c, 0xcf, 0x43, 0x21, 0x7b, 0xc0, 0xa2, 0x3e, 0x22, 0xe8, 0xb9, 0x27, 0x0a,
+	0x1b, 0x57, 0x03, 0x49, 0x78, 0x08, 0x2e, 0x94, 0xf9, 0x94, 0x4a, 0x58, 0x6e, 0x5b, 0x26, 0x11,
+	0x29, 0xf7, 0x85, 0x8d, 0xa8, 0xaf, 0x52, 0xf4, 0xfb, 0xe8, 0x2e, 0x99, 0x6d, 0x8c, 0x90, 0xa0,
+	0xff, 0x39, 0x98, 0xca, 0x5c, 0x16, 0xfd, 0x54, 0x49, 0xaf, 0x4d, 0xd3, 0xab, 0xd7, 0xbe, 0x38,
+	0x57, 0x6e, 0x67, 0xb4, 0xda, 0x85, 0x32, 0x91, 0xd5, 0x1b, 0xdb, 0xc2, 0xfa, 0x55, 0x18, 0x70,
+	0x63, 0xa7, 0x43, 0x02, 0x7e, 0xe5, 0x60, 0x32, 0x75, 0xa7, 0xf5, 0x33, 0x4a, 0xbb, 0x2d, 0xc3,
+	0xc2, 0x2d, 0x31, 0x35, 0x2a, 0xe1, 0xd3, 0x2e, 0x71, 0x6d, 0x08, 0xef, 0x5e, 0x25, 0x2e, 0x62,
+	0x6b, 0x61, 0x4c, 0xdf, 0xf1, 0x30, 0xd7, 0x73, 0x7d, 0xa1, 0xf7, 0x7b, 0xc7, 0xd7, 0xef, 0x56,
+	0x2e, 0x7c, 0x70, 0x2d, 0x58, 0x49, 0x2b, 0x7c, 0x92, 0xba, 0x4c, 0xb6, 0x50, 0x65, 0xa0, 0x65,
+	0x22, 0x9b, 0x06, 0x6d, 0x35, 0x53, 0x98, 0x3e, 0x57, 0xf2, 0x4d, 0x17, 0x93, 0x93, 0x6b, 0x50,
+	0xb1, 0xe6, 0x58, 0xe5, 0xaf, 0x78, 0x58, 0xa8, 0x39, 0x56, 0xcf, 0x70, 0xca, 0x77, 0x33, 0xb7,
+	0xf3, 0x5e, 0x98, 0xee, 0x3d, 0xee, 0x70, 0x3b, 0xc1, 0xd0, 0x1d, 0x13, 0xdb, 0xba, 0xe8, 0x78,
+	0xba, 0xa4, 0x13, 0x3b, 0x2a, 0x06, 0xa9, 0x69, 0x35, 0xfb, 0xaf, 0x85, 0x55, 0x76, 0xf8, 0x81,
+	0x1f, 0xda, 0x52, 0x94, 0x1f, 0xf9, 0xe2, 0x56, 0x0c, 0xa8, 0x68, 0x54, 0x8c, 0x8f, 0xe1, 0xe9,
+	0xa0, 0x24, 0x26, 0x86, 0xe9, 0x39, 0x53, 0x39, 0x52, 0x34, 0x7a, 0xd4, 0x50, 0x39, 0x3a, 0x28,
+	0x1d, 0x31, 0x95, 0x7f, 0xf8, 0x85, 0xf8, 0x5e, 0x96, 0x15, 0x8d, 0xca, 0x72, 0x43, 0x49, 0x96,
+	0x0f, 0x4a, 0xb2, 0xcc, 0xd4, 0x8e, 0x87, 0x23, 0x3f, 0x4b, 0xcf, 0x02, 0x00, 0x00, 0xff, 0xff,
+	0xb2, 0xd0, 0x60, 0xa4, 0x01, 0x11, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignExperimentServiceClient is the client API for CampaignExperimentService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignExperimentServiceClient interface {
+	// Returns the requested campaign experiment in full detail.
+	GetCampaignExperiment(ctx context.Context, in *GetCampaignExperimentRequest, opts ...grpc.CallOption) (*resources.CampaignExperiment, error)
+	// Creates a campaign experiment based on a campaign draft. The draft campaign
+	// will be forked into a real campaign (called the experiment campaign) that
+	// will begin serving ads if successfully created.
+	//
+	// The campaign experiment is created immediately with status INITIALIZING.
+	// This method return a long running operation that tracks the forking of the
+	// draft campaign. If the forking fails, a list of errors can be retrieved
+	// using the ListCampaignExperimentAsyncErrors method. The operation's
+	// metadata will be a StringValue containing the resource name of the created
+	// campaign experiment.
+	CreateCampaignExperiment(ctx context.Context, in *CreateCampaignExperimentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
+	// Updates campaign experiments. Operation statuses are returned.
+	MutateCampaignExperiments(ctx context.Context, in *MutateCampaignExperimentsRequest, opts ...grpc.CallOption) (*MutateCampaignExperimentsResponse, error)
+	// Graduates a campaign experiment to a full campaign. The base and experiment
+	// campaigns will start running independently with their own budgets.
+	GraduateCampaignExperiment(ctx context.Context, in *GraduateCampaignExperimentRequest, opts ...grpc.CallOption) (*GraduateCampaignExperimentResponse, error)
+	// Promotes the changes in a experiment campaign back to the base campaign.
+	//
+	// The campaign experiment is updated immediately with status PROMOTING.
+	// This method return a long running operation that tracks the promoting of
+	// the experiment campaign. If the promoting fails, a list of errors can be
+	// retrieved using the ListCampaignExperimentAsyncErrors method.
+	PromoteCampaignExperiment(ctx context.Context, in *PromoteCampaignExperimentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
+	// Immediately ends a campaign experiment, changing the experiment's scheduled
+	// end date and without waiting for end of day. End date is updated to be the
+	// time of the request.
+	EndCampaignExperiment(ctx context.Context, in *EndCampaignExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Returns all errors that occurred during CampaignExperiment create or
+	// promote (whichever occurred last).
+	// Supports standard list paging.
+	ListCampaignExperimentAsyncErrors(ctx context.Context, in *ListCampaignExperimentAsyncErrorsRequest, opts ...grpc.CallOption) (*ListCampaignExperimentAsyncErrorsResponse, error)
+}
+
+type campaignExperimentServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignExperimentServiceClient(cc grpc.ClientConnInterface) CampaignExperimentServiceClient {
+	return &campaignExperimentServiceClient{cc}
+}
+
+func (c *campaignExperimentServiceClient) GetCampaignExperiment(ctx context.Context, in *GetCampaignExperimentRequest, opts ...grpc.CallOption) (*resources.CampaignExperiment, error) {
+	out := new(resources.CampaignExperiment)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/GetCampaignExperiment", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) CreateCampaignExperiment(ctx context.Context, in *CreateCampaignExperimentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
+	out := new(longrunning.Operation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/CreateCampaignExperiment", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) MutateCampaignExperiments(ctx context.Context, in *MutateCampaignExperimentsRequest, opts ...grpc.CallOption) (*MutateCampaignExperimentsResponse, error) {
+	out := new(MutateCampaignExperimentsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/MutateCampaignExperiments", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) GraduateCampaignExperiment(ctx context.Context, in *GraduateCampaignExperimentRequest, opts ...grpc.CallOption) (*GraduateCampaignExperimentResponse, error) {
+	out := new(GraduateCampaignExperimentResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/GraduateCampaignExperiment", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) PromoteCampaignExperiment(ctx context.Context, in *PromoteCampaignExperimentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
+	out := new(longrunning.Operation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/PromoteCampaignExperiment", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) EndCampaignExperiment(ctx context.Context, in *EndCampaignExperimentRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/EndCampaignExperiment", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExperimentServiceClient) ListCampaignExperimentAsyncErrors(ctx context.Context, in *ListCampaignExperimentAsyncErrorsRequest, opts ...grpc.CallOption) (*ListCampaignExperimentAsyncErrorsResponse, error) {
+	out := new(ListCampaignExperimentAsyncErrorsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExperimentService/ListCampaignExperimentAsyncErrors", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignExperimentServiceServer is the server API for CampaignExperimentService service.
+type CampaignExperimentServiceServer interface {
+	// Returns the requested campaign experiment in full detail.
+	GetCampaignExperiment(context.Context, *GetCampaignExperimentRequest) (*resources.CampaignExperiment, error)
+	// Creates a campaign experiment based on a campaign draft. The draft campaign
+	// will be forked into a real campaign (called the experiment campaign) that
+	// will begin serving ads if successfully created.
+	//
+	// The campaign experiment is created immediately with status INITIALIZING.
+	// This method return a long running operation that tracks the forking of the
+	// draft campaign. If the forking fails, a list of errors can be retrieved
+	// using the ListCampaignExperimentAsyncErrors method. The operation's
+	// metadata will be a StringValue containing the resource name of the created
+	// campaign experiment.
+	CreateCampaignExperiment(context.Context, *CreateCampaignExperimentRequest) (*longrunning.Operation, error)
+	// Updates campaign experiments. Operation statuses are returned.
+	MutateCampaignExperiments(context.Context, *MutateCampaignExperimentsRequest) (*MutateCampaignExperimentsResponse, error)
+	// Graduates a campaign experiment to a full campaign. The base and experiment
+	// campaigns will start running independently with their own budgets.
+	GraduateCampaignExperiment(context.Context, *GraduateCampaignExperimentRequest) (*GraduateCampaignExperimentResponse, error)
+	// Promotes the changes in a experiment campaign back to the base campaign.
+	//
+	// The campaign experiment is updated immediately with status PROMOTING.
+	// This method return a long running operation that tracks the promoting of
+	// the experiment campaign. If the promoting fails, a list of errors can be
+	// retrieved using the ListCampaignExperimentAsyncErrors method.
+	PromoteCampaignExperiment(context.Context, *PromoteCampaignExperimentRequest) (*longrunning.Operation, error)
+	// Immediately ends a campaign experiment, changing the experiment's scheduled
+	// end date and without waiting for end of day. End date is updated to be the
+	// time of the request.
+	EndCampaignExperiment(context.Context, *EndCampaignExperimentRequest) (*empty.Empty, error)
+	// Returns all errors that occurred during CampaignExperiment create or
+	// promote (whichever occurred last).
+	// Supports standard list paging.
+	ListCampaignExperimentAsyncErrors(context.Context, *ListCampaignExperimentAsyncErrorsRequest) (*ListCampaignExperimentAsyncErrorsResponse, error)
+}
+
+// UnimplementedCampaignExperimentServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignExperimentServiceServer struct {
+}
+
+func (*UnimplementedCampaignExperimentServiceServer) GetCampaignExperiment(ctx context.Context, req *GetCampaignExperimentRequest) (*resources.CampaignExperiment, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignExperiment not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) CreateCampaignExperiment(ctx context.Context, req *CreateCampaignExperimentRequest) (*longrunning.Operation, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method CreateCampaignExperiment not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) MutateCampaignExperiments(ctx context.Context, req *MutateCampaignExperimentsRequest) (*MutateCampaignExperimentsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignExperiments not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) GraduateCampaignExperiment(ctx context.Context, req *GraduateCampaignExperimentRequest) (*GraduateCampaignExperimentResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GraduateCampaignExperiment not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) PromoteCampaignExperiment(ctx context.Context, req *PromoteCampaignExperimentRequest) (*longrunning.Operation, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method PromoteCampaignExperiment not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) EndCampaignExperiment(ctx context.Context, req *EndCampaignExperimentRequest) (*empty.Empty, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method EndCampaignExperiment not implemented")
+}
+func (*UnimplementedCampaignExperimentServiceServer) ListCampaignExperimentAsyncErrors(ctx context.Context, req *ListCampaignExperimentAsyncErrorsRequest) (*ListCampaignExperimentAsyncErrorsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method ListCampaignExperimentAsyncErrors not implemented")
+}
+
+func RegisterCampaignExperimentServiceServer(s *grpc.Server, srv CampaignExperimentServiceServer) {
+	s.RegisterService(&_CampaignExperimentService_serviceDesc, srv)
+}
+
+func _CampaignExperimentService_GetCampaignExperiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignExperimentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).GetCampaignExperiment(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/GetCampaignExperiment",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).GetCampaignExperiment(ctx, req.(*GetCampaignExperimentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_CreateCampaignExperiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateCampaignExperimentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).CreateCampaignExperiment(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/CreateCampaignExperiment",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).CreateCampaignExperiment(ctx, req.(*CreateCampaignExperimentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_MutateCampaignExperiments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignExperimentsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).MutateCampaignExperiments(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/MutateCampaignExperiments",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).MutateCampaignExperiments(ctx, req.(*MutateCampaignExperimentsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_GraduateCampaignExperiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GraduateCampaignExperimentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).GraduateCampaignExperiment(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/GraduateCampaignExperiment",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).GraduateCampaignExperiment(ctx, req.(*GraduateCampaignExperimentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_PromoteCampaignExperiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PromoteCampaignExperimentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).PromoteCampaignExperiment(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/PromoteCampaignExperiment",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).PromoteCampaignExperiment(ctx, req.(*PromoteCampaignExperimentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_EndCampaignExperiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(EndCampaignExperimentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).EndCampaignExperiment(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/EndCampaignExperiment",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).EndCampaignExperiment(ctx, req.(*EndCampaignExperimentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExperimentService_ListCampaignExperimentAsyncErrors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListCampaignExperimentAsyncErrorsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExperimentServiceServer).ListCampaignExperimentAsyncErrors(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExperimentService/ListCampaignExperimentAsyncErrors",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExperimentServiceServer).ListCampaignExperimentAsyncErrors(ctx, req.(*ListCampaignExperimentAsyncErrorsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignExperimentService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignExperimentService",
+	HandlerType: (*CampaignExperimentServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignExperiment",
+			Handler:    _CampaignExperimentService_GetCampaignExperiment_Handler,
+		},
+		{
+			MethodName: "CreateCampaignExperiment",
+			Handler:    _CampaignExperimentService_CreateCampaignExperiment_Handler,
+		},
+		{
+			MethodName: "MutateCampaignExperiments",
+			Handler:    _CampaignExperimentService_MutateCampaignExperiments_Handler,
+		},
+		{
+			MethodName: "GraduateCampaignExperiment",
+			Handler:    _CampaignExperimentService_GraduateCampaignExperiment_Handler,
+		},
+		{
+			MethodName: "PromoteCampaignExperiment",
+			Handler:    _CampaignExperimentService_PromoteCampaignExperiment_Handler,
+		},
+		{
+			MethodName: "EndCampaignExperiment",
+			Handler:    _CampaignExperimentService_EndCampaignExperiment_Handler,
+		},
+		{
+			MethodName: "ListCampaignExperimentAsyncErrors",
+			Handler:    _CampaignExperimentService_ListCampaignExperimentAsyncErrors_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_experiment_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_extension_setting_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_extension_setting_service.pb.go
new file mode 100644
index 0000000..02403a6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_extension_setting_service.pb.go
@@ -0,0 +1,539 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_extension_setting_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [CampaignExtensionSettingService.GetCampaignExtensionSetting][google.ads.googleads.v3.services.CampaignExtensionSettingService.GetCampaignExtensionSetting].
+type GetCampaignExtensionSettingRequest struct {
+	// Required. The resource name of the campaign extension setting to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignExtensionSettingRequest) Reset()         { *m = GetCampaignExtensionSettingRequest{} }
+func (m *GetCampaignExtensionSettingRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignExtensionSettingRequest) ProtoMessage()    {}
+func (*GetCampaignExtensionSettingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_153949fd6dd7bcce, []int{0}
+}
+
+func (m *GetCampaignExtensionSettingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignExtensionSettingRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignExtensionSettingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignExtensionSettingRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignExtensionSettingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignExtensionSettingRequest.Merge(m, src)
+}
+func (m *GetCampaignExtensionSettingRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignExtensionSettingRequest.Size(m)
+}
+func (m *GetCampaignExtensionSettingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignExtensionSettingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignExtensionSettingRequest proto.InternalMessageInfo
+
+func (m *GetCampaignExtensionSettingRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [CampaignExtensionSettingService.MutateCampaignExtensionSettings][google.ads.googleads.v3.services.CampaignExtensionSettingService.MutateCampaignExtensionSettings].
+type MutateCampaignExtensionSettingsRequest struct {
+	// Required. The ID of the customer whose campaign extension settings are being
+	// modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign extension
+	// settings.
+	Operations []*CampaignExtensionSettingOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignExtensionSettingsRequest) Reset() {
+	*m = MutateCampaignExtensionSettingsRequest{}
+}
+func (m *MutateCampaignExtensionSettingsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExtensionSettingsRequest) ProtoMessage()    {}
+func (*MutateCampaignExtensionSettingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_153949fd6dd7bcce, []int{1}
+}
+
+func (m *MutateCampaignExtensionSettingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignExtensionSettingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExtensionSettingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExtensionSettingsRequest.Merge(m, src)
+}
+func (m *MutateCampaignExtensionSettingsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsRequest.Size(m)
+}
+func (m *MutateCampaignExtensionSettingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExtensionSettingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExtensionSettingsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignExtensionSettingsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignExtensionSettingsRequest) GetOperations() []*CampaignExtensionSettingOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignExtensionSettingsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignExtensionSettingsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a campaign extension setting.
+type CampaignExtensionSettingOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignExtensionSettingOperation_Create
+	//	*CampaignExtensionSettingOperation_Update
+	//	*CampaignExtensionSettingOperation_Remove
+	Operation            isCampaignExtensionSettingOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *CampaignExtensionSettingOperation) Reset()         { *m = CampaignExtensionSettingOperation{} }
+func (m *CampaignExtensionSettingOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignExtensionSettingOperation) ProtoMessage()    {}
+func (*CampaignExtensionSettingOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_153949fd6dd7bcce, []int{2}
+}
+
+func (m *CampaignExtensionSettingOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignExtensionSettingOperation.Unmarshal(m, b)
+}
+func (m *CampaignExtensionSettingOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignExtensionSettingOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignExtensionSettingOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignExtensionSettingOperation.Merge(m, src)
+}
+func (m *CampaignExtensionSettingOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignExtensionSettingOperation.Size(m)
+}
+func (m *CampaignExtensionSettingOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignExtensionSettingOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignExtensionSettingOperation proto.InternalMessageInfo
+
+func (m *CampaignExtensionSettingOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignExtensionSettingOperation_Operation interface {
+	isCampaignExtensionSettingOperation_Operation()
+}
+
+type CampaignExtensionSettingOperation_Create struct {
+	Create *resources.CampaignExtensionSetting `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignExtensionSettingOperation_Update struct {
+	Update *resources.CampaignExtensionSetting `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignExtensionSettingOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignExtensionSettingOperation_Create) isCampaignExtensionSettingOperation_Operation() {}
+
+func (*CampaignExtensionSettingOperation_Update) isCampaignExtensionSettingOperation_Operation() {}
+
+func (*CampaignExtensionSettingOperation_Remove) isCampaignExtensionSettingOperation_Operation() {}
+
+func (m *CampaignExtensionSettingOperation) GetOperation() isCampaignExtensionSettingOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignExtensionSettingOperation) GetCreate() *resources.CampaignExtensionSetting {
+	if x, ok := m.GetOperation().(*CampaignExtensionSettingOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignExtensionSettingOperation) GetUpdate() *resources.CampaignExtensionSetting {
+	if x, ok := m.GetOperation().(*CampaignExtensionSettingOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignExtensionSettingOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignExtensionSettingOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignExtensionSettingOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignExtensionSettingOperation_Create)(nil),
+		(*CampaignExtensionSettingOperation_Update)(nil),
+		(*CampaignExtensionSettingOperation_Remove)(nil),
+	}
+}
+
+// Response message for a campaign extension setting mutate.
+type MutateCampaignExtensionSettingsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignExtensionSettingResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *MutateCampaignExtensionSettingsResponse) Reset() {
+	*m = MutateCampaignExtensionSettingsResponse{}
+}
+func (m *MutateCampaignExtensionSettingsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExtensionSettingsResponse) ProtoMessage()    {}
+func (*MutateCampaignExtensionSettingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_153949fd6dd7bcce, []int{3}
+}
+
+func (m *MutateCampaignExtensionSettingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignExtensionSettingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExtensionSettingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExtensionSettingsResponse.Merge(m, src)
+}
+func (m *MutateCampaignExtensionSettingsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExtensionSettingsResponse.Size(m)
+}
+func (m *MutateCampaignExtensionSettingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExtensionSettingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExtensionSettingsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignExtensionSettingsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignExtensionSettingsResponse) GetResults() []*MutateCampaignExtensionSettingResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign extension setting mutate.
+type MutateCampaignExtensionSettingResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignExtensionSettingResult) Reset()         { *m = MutateCampaignExtensionSettingResult{} }
+func (m *MutateCampaignExtensionSettingResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignExtensionSettingResult) ProtoMessage()    {}
+func (*MutateCampaignExtensionSettingResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_153949fd6dd7bcce, []int{4}
+}
+
+func (m *MutateCampaignExtensionSettingResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignExtensionSettingResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignExtensionSettingResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignExtensionSettingResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignExtensionSettingResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignExtensionSettingResult.Merge(m, src)
+}
+func (m *MutateCampaignExtensionSettingResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignExtensionSettingResult.Size(m)
+}
+func (m *MutateCampaignExtensionSettingResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignExtensionSettingResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignExtensionSettingResult proto.InternalMessageInfo
+
+func (m *MutateCampaignExtensionSettingResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignExtensionSettingRequest)(nil), "google.ads.googleads.v3.services.GetCampaignExtensionSettingRequest")
+	proto.RegisterType((*MutateCampaignExtensionSettingsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignExtensionSettingsRequest")
+	proto.RegisterType((*CampaignExtensionSettingOperation)(nil), "google.ads.googleads.v3.services.CampaignExtensionSettingOperation")
+	proto.RegisterType((*MutateCampaignExtensionSettingsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignExtensionSettingsResponse")
+	proto.RegisterType((*MutateCampaignExtensionSettingResult)(nil), "google.ads.googleads.v3.services.MutateCampaignExtensionSettingResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_extension_setting_service.proto", fileDescriptor_153949fd6dd7bcce)
+}
+
+var fileDescriptor_153949fd6dd7bcce = []byte{
+	// 780 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xbf, 0x6f, 0xe3, 0x36,
+	0x14, 0xae, 0xe5, 0x20, 0x6d, 0xe8, 0xa4, 0x05, 0x58, 0xb4, 0x35, 0x9c, 0x02, 0x71, 0x55, 0xa3,
+	0x31, 0x8c, 0x42, 0x02, 0xec, 0x4d, 0x46, 0x0a, 0xc8, 0x69, 0x9c, 0x04, 0x45, 0x7e, 0x40, 0x46,
+	0x33, 0x14, 0x06, 0x54, 0x5a, 0x62, 0x14, 0x21, 0x92, 0xa8, 0x92, 0x94, 0xd1, 0x20, 0xc8, 0xd2,
+	0xa1, 0x4b, 0xc7, 0x6e, 0x1d, 0x3b, 0xde, 0x7e, 0xff, 0x44, 0xd6, 0x6c, 0x99, 0x6e, 0xb8, 0xe9,
+	0xf6, 0xdb, 0x0f, 0x12, 0x45, 0xff, 0xc8, 0x9d, 0xa2, 0x03, 0x92, 0xed, 0x99, 0xef, 0xd3, 0xf7,
+	0x3e, 0xbe, 0xf7, 0xf1, 0x19, 0x1c, 0x7a, 0x84, 0x78, 0x01, 0xd6, 0x91, 0xcb, 0x74, 0x11, 0xa6,
+	0xd1, 0xb4, 0xa7, 0x33, 0x4c, 0xa7, 0xbe, 0x83, 0x99, 0xee, 0xa0, 0x30, 0x46, 0xbe, 0x17, 0xd9,
+	0xf8, 0x4f, 0x8e, 0x23, 0xe6, 0x93, 0xc8, 0x66, 0x98, 0x73, 0x3f, 0xf2, 0xec, 0x1c, 0xa3, 0xc5,
+	0x94, 0x70, 0x02, 0x9b, 0xe2, 0x7b, 0x0d, 0xb9, 0x4c, 0x9b, 0x51, 0x69, 0xd3, 0x9e, 0x26, 0xa9,
+	0x1a, 0x83, 0xa2, 0x62, 0x14, 0x33, 0x92, 0xd0, 0xc7, 0xab, 0x89, 0x2a, 0x8d, 0x6f, 0x25, 0x47,
+	0xec, 0xeb, 0x28, 0x8a, 0x08, 0x47, 0xdc, 0x27, 0x11, 0xcb, 0xb3, 0xdf, 0x2c, 0x64, 0x9d, 0xc0,
+	0xc7, 0x11, 0xcf, 0x13, 0x5b, 0x0b, 0x89, 0x73, 0x1f, 0x07, 0xae, 0x3d, 0xc1, 0x17, 0x68, 0xea,
+	0x13, 0x9a, 0x03, 0x72, 0xf5, 0x7a, 0xf6, 0x6b, 0x92, 0x9c, 0xe7, 0xa8, 0x10, 0xb1, 0xcb, 0x07,
+	0xdc, 0x34, 0x76, 0x74, 0xc6, 0x11, 0x4f, 0xf2, 0xa2, 0xea, 0x31, 0x50, 0xf7, 0x31, 0xdf, 0xcd,
+	0x95, 0xef, 0x49, 0xe1, 0x23, 0xa1, 0xdb, 0xc2, 0x7f, 0x24, 0x98, 0x71, 0xd8, 0x06, 0x1b, 0xf2,
+	0x9a, 0x76, 0x84, 0x42, 0x5c, 0xaf, 0x34, 0x2b, 0xed, 0xb5, 0x41, 0xf5, 0x95, 0xa9, 0x58, 0xeb,
+	0x32, 0x73, 0x8c, 0x42, 0xac, 0xfe, 0xad, 0x80, 0x1f, 0x8e, 0x12, 0x8e, 0x38, 0x2e, 0xe2, 0x64,
+	0x92, 0xb4, 0x05, 0x6a, 0x4e, 0xc2, 0x38, 0x09, 0x31, 0xb5, 0x7d, 0x77, 0x91, 0x12, 0xc8, 0xf3,
+	0x43, 0x17, 0x5e, 0x00, 0x40, 0x62, 0x4c, 0x45, 0xa7, 0xea, 0x4a, 0xb3, 0xda, 0xae, 0x75, 0x77,
+	0xb5, 0xb2, 0x71, 0x69, 0x45, 0xd5, 0x4f, 0x24, 0x57, 0x5e, 0x69, 0xce, 0x0d, 0xb7, 0xc1, 0x17,
+	0x31, 0xa2, 0xdc, 0x47, 0x81, 0x7d, 0x8e, 0xfc, 0x20, 0xa1, 0xb8, 0x5e, 0x6d, 0x56, 0xda, 0x9f,
+	0x59, 0x9f, 0xe7, 0xc7, 0x43, 0x71, 0x0a, 0xbf, 0x07, 0x1b, 0x53, 0x14, 0xf8, 0x2e, 0xe2, 0xd8,
+	0x26, 0x51, 0x70, 0x55, 0x5f, 0xc9, 0x60, 0xeb, 0xf2, 0xf0, 0x24, 0x0a, 0xae, 0xd4, 0x97, 0x0a,
+	0xf8, 0xae, 0x54, 0x04, 0xec, 0x83, 0x5a, 0x12, 0x67, 0x44, 0xe9, 0xb0, 0x32, 0xa2, 0x5a, 0xb7,
+	0x21, 0xaf, 0x27, 0xe7, 0xa9, 0x0d, 0xd3, 0x79, 0x1e, 0x21, 0x76, 0x69, 0x01, 0x01, 0x4f, 0x63,
+	0xf8, 0x2b, 0x58, 0x75, 0x28, 0x46, 0x5c, 0x8c, 0xa3, 0xd6, 0xed, 0x17, 0xb6, 0x65, 0xe6, 0xd1,
+	0xc2, 0xbe, 0x1c, 0x7c, 0x62, 0xe5, 0x64, 0x29, 0xad, 0x28, 0x52, 0x57, 0x9e, 0x85, 0x56, 0x90,
+	0xc1, 0x3a, 0x58, 0xa5, 0x38, 0x24, 0x53, 0xd1, 0xd5, 0xb5, 0x34, 0x23, 0x7e, 0x0f, 0x6a, 0x60,
+	0x6d, 0x36, 0x06, 0xf5, 0xae, 0x02, 0xb6, 0x4b, 0x0d, 0xc4, 0x62, 0x12, 0x31, 0x0c, 0x87, 0xe0,
+	0xab, 0x07, 0x13, 0xb3, 0x31, 0xa5, 0x84, 0x66, 0x15, 0x6a, 0x5d, 0x28, 0x85, 0xd3, 0xd8, 0xd1,
+	0x46, 0x99, 0xeb, 0xad, 0x2f, 0x97, 0x67, 0xb9, 0x97, 0xc2, 0xe1, 0xef, 0xe0, 0x53, 0x8a, 0x59,
+	0x12, 0x70, 0x69, 0xb0, 0x61, 0xb9, 0xc1, 0x1e, 0xd7, 0x68, 0x65, 0x74, 0x96, 0xa4, 0x55, 0x7f,
+	0x01, 0xad, 0x8f, 0xf9, 0x20, 0xb5, 0xd6, 0x07, 0x1e, 0xda, 0xf2, 0x1b, 0xeb, 0xde, 0xad, 0x80,
+	0xad, 0x22, 0x9e, 0x91, 0xd0, 0x07, 0xdf, 0x56, 0xc0, 0xe6, 0x23, 0x0f, 0x1b, 0xfe, 0x5c, 0x7e,
+	0xc3, 0xf2, 0xbd, 0xd0, 0x78, 0x8a, 0x35, 0xd4, 0xd1, 0xbd, 0xb9, 0x7c, 0xd9, 0xbf, 0xee, 0x5e,
+	0xff, 0xab, 0xec, 0xc0, 0x7e, 0xba, 0x55, 0xaf, 0x97, 0x32, 0x3b, 0x72, 0x21, 0x30, 0xbd, 0x33,
+	0x5b, 0xb3, 0xef, 0xf9, 0x42, 0xef, 0xdc, 0xc0, 0xff, 0x14, 0xb0, 0x55, 0x62, 0x1f, 0x78, 0xf0,
+	0xd4, 0xe9, 0xca, 0x15, 0xd6, 0x38, 0x7c, 0x06, 0x26, 0xe1, 0x65, 0x75, 0x72, 0x6f, 0x7e, 0xbd,
+	0xb0, 0x0e, 0x7f, 0x9c, 0x2f, 0xa6, 0xac, 0x2d, 0xbb, 0xea, 0x4f, 0x69, 0x5b, 0xe6, 0x7d, 0xb8,
+	0x5e, 0x00, 0xef, 0x74, 0x6e, 0x8a, 0xbb, 0x62, 0x84, 0x99, 0x02, 0xa3, 0xd2, 0x69, 0x6c, 0xde,
+	0x9a, 0xf5, 0xb9, 0xca, 0x3c, 0x8a, 0x7d, 0xa6, 0x39, 0x24, 0x1c, 0xfc, 0xa3, 0x80, 0x96, 0x43,
+	0xc2, 0xd2, 0x1b, 0x0d, 0x5a, 0x25, 0xde, 0x3b, 0x4d, 0xb7, 0xd6, 0x69, 0xe5, 0xb7, 0x83, 0x9c,
+	0xc9, 0x23, 0x01, 0x8a, 0x3c, 0x8d, 0x50, 0x4f, 0xf7, 0x70, 0x94, 0xed, 0x34, 0x7d, 0x5e, 0xbb,
+	0xf8, 0xdf, 0xbb, 0x2f, 0x83, 0xff, 0x95, 0xea, 0xbe, 0x69, 0xbe, 0x50, 0x9a, 0xfb, 0x82, 0xd0,
+	0x74, 0x99, 0x26, 0xc2, 0x34, 0x3a, 0xeb, 0x69, 0x79, 0x61, 0x76, 0x2b, 0x21, 0x63, 0xd3, 0x65,
+	0xe3, 0x19, 0x64, 0x7c, 0xd6, 0x1b, 0x4b, 0xc8, 0x1b, 0xa5, 0x25, 0xce, 0x0d, 0xc3, 0x74, 0x99,
+	0x61, 0xcc, 0x40, 0x86, 0x71, 0xd6, 0x33, 0x0c, 0x09, 0x9b, 0xac, 0x66, 0x3a, 0x7b, 0xef, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xb2, 0xd3, 0xc6, 0xbb, 0x64, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignExtensionSettingServiceClient is the client API for CampaignExtensionSettingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignExtensionSettingServiceClient interface {
+	// Returns the requested campaign extension setting in full detail.
+	GetCampaignExtensionSetting(ctx context.Context, in *GetCampaignExtensionSettingRequest, opts ...grpc.CallOption) (*resources.CampaignExtensionSetting, error)
+	// Creates, updates, or removes campaign extension settings. Operation
+	// statuses are returned.
+	MutateCampaignExtensionSettings(ctx context.Context, in *MutateCampaignExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateCampaignExtensionSettingsResponse, error)
+}
+
+type campaignExtensionSettingServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignExtensionSettingServiceClient(cc grpc.ClientConnInterface) CampaignExtensionSettingServiceClient {
+	return &campaignExtensionSettingServiceClient{cc}
+}
+
+func (c *campaignExtensionSettingServiceClient) GetCampaignExtensionSetting(ctx context.Context, in *GetCampaignExtensionSettingRequest, opts ...grpc.CallOption) (*resources.CampaignExtensionSetting, error) {
+	out := new(resources.CampaignExtensionSetting)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExtensionSettingService/GetCampaignExtensionSetting", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignExtensionSettingServiceClient) MutateCampaignExtensionSettings(ctx context.Context, in *MutateCampaignExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateCampaignExtensionSettingsResponse, error) {
+	out := new(MutateCampaignExtensionSettingsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignExtensionSettingService/MutateCampaignExtensionSettings", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignExtensionSettingServiceServer is the server API for CampaignExtensionSettingService service.
+type CampaignExtensionSettingServiceServer interface {
+	// Returns the requested campaign extension setting in full detail.
+	GetCampaignExtensionSetting(context.Context, *GetCampaignExtensionSettingRequest) (*resources.CampaignExtensionSetting, error)
+	// Creates, updates, or removes campaign extension settings. Operation
+	// statuses are returned.
+	MutateCampaignExtensionSettings(context.Context, *MutateCampaignExtensionSettingsRequest) (*MutateCampaignExtensionSettingsResponse, error)
+}
+
+// UnimplementedCampaignExtensionSettingServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignExtensionSettingServiceServer struct {
+}
+
+func (*UnimplementedCampaignExtensionSettingServiceServer) GetCampaignExtensionSetting(ctx context.Context, req *GetCampaignExtensionSettingRequest) (*resources.CampaignExtensionSetting, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignExtensionSetting not implemented")
+}
+func (*UnimplementedCampaignExtensionSettingServiceServer) MutateCampaignExtensionSettings(ctx context.Context, req *MutateCampaignExtensionSettingsRequest) (*MutateCampaignExtensionSettingsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignExtensionSettings not implemented")
+}
+
+func RegisterCampaignExtensionSettingServiceServer(s *grpc.Server, srv CampaignExtensionSettingServiceServer) {
+	s.RegisterService(&_CampaignExtensionSettingService_serviceDesc, srv)
+}
+
+func _CampaignExtensionSettingService_GetCampaignExtensionSetting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignExtensionSettingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExtensionSettingServiceServer).GetCampaignExtensionSetting(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExtensionSettingService/GetCampaignExtensionSetting",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExtensionSettingServiceServer).GetCampaignExtensionSetting(ctx, req.(*GetCampaignExtensionSettingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignExtensionSettingService_MutateCampaignExtensionSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignExtensionSettingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignExtensionSettingServiceServer).MutateCampaignExtensionSettings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignExtensionSettingService/MutateCampaignExtensionSettings",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignExtensionSettingServiceServer).MutateCampaignExtensionSettings(ctx, req.(*MutateCampaignExtensionSettingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignExtensionSettingService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignExtensionSettingService",
+	HandlerType: (*CampaignExtensionSettingServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignExtensionSetting",
+			Handler:    _CampaignExtensionSettingService_GetCampaignExtensionSetting_Handler,
+		},
+		{
+			MethodName: "MutateCampaignExtensionSettings",
+			Handler:    _CampaignExtensionSettingService_MutateCampaignExtensionSettings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_extension_setting_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_feed_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_feed_service.pb.go
new file mode 100644
index 0000000..6e97133
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_feed_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_feed_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignFeedService.GetCampaignFeed][google.ads.googleads.v3.services.CampaignFeedService.GetCampaignFeed].
+type GetCampaignFeedRequest struct {
+	// Required. The resource name of the campaign feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignFeedRequest) Reset()         { *m = GetCampaignFeedRequest{} }
+func (m *GetCampaignFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignFeedRequest) ProtoMessage()    {}
+func (*GetCampaignFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f28fd8f5bcce23c1, []int{0}
+}
+
+func (m *GetCampaignFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignFeedRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignFeedRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignFeedRequest.Merge(m, src)
+}
+func (m *GetCampaignFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignFeedRequest.Size(m)
+}
+func (m *GetCampaignFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignFeedRequest proto.InternalMessageInfo
+
+func (m *GetCampaignFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignFeedService.MutateCampaignFeeds][google.ads.googleads.v3.services.CampaignFeedService.MutateCampaignFeeds].
+type MutateCampaignFeedsRequest struct {
+	// Required. The ID of the customer whose campaign feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign feeds.
+	Operations []*CampaignFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignFeedsRequest) Reset()         { *m = MutateCampaignFeedsRequest{} }
+func (m *MutateCampaignFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedsRequest) ProtoMessage()    {}
+func (*MutateCampaignFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f28fd8f5bcce23c1, []int{1}
+}
+
+func (m *MutateCampaignFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedsRequest.Merge(m, src)
+}
+func (m *MutateCampaignFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Size(m)
+}
+func (m *MutateCampaignFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignFeedsRequest) GetOperations() []*CampaignFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignFeedsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignFeedsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a campaign feed.
+type CampaignFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignFeedOperation_Create
+	//	*CampaignFeedOperation_Update
+	//	*CampaignFeedOperation_Remove
+	Operation            isCampaignFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *CampaignFeedOperation) Reset()         { *m = CampaignFeedOperation{} }
+func (m *CampaignFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeedOperation) ProtoMessage()    {}
+func (*CampaignFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f28fd8f5bcce23c1, []int{2}
+}
+
+func (m *CampaignFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeedOperation.Unmarshal(m, b)
+}
+func (m *CampaignFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeedOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeedOperation.Merge(m, src)
+}
+func (m *CampaignFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeedOperation.Size(m)
+}
+func (m *CampaignFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeedOperation proto.InternalMessageInfo
+
+func (m *CampaignFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignFeedOperation_Operation interface {
+	isCampaignFeedOperation_Operation()
+}
+
+type CampaignFeedOperation_Create struct {
+	Create *resources.CampaignFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignFeedOperation_Update struct {
+	Update *resources.CampaignFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignFeedOperation_Create) isCampaignFeedOperation_Operation() {}
+
+func (*CampaignFeedOperation_Update) isCampaignFeedOperation_Operation() {}
+
+func (*CampaignFeedOperation_Remove) isCampaignFeedOperation_Operation() {}
+
+func (m *CampaignFeedOperation) GetOperation() isCampaignFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetCreate() *resources.CampaignFeed {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetUpdate() *resources.CampaignFeed {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignFeedOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignFeedOperation_Create)(nil),
+		(*CampaignFeedOperation_Update)(nil),
+		(*CampaignFeedOperation_Remove)(nil),
+	}
+}
+
+// Response message for a campaign feed mutate.
+type MutateCampaignFeedsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateCampaignFeedsResponse) Reset()         { *m = MutateCampaignFeedsResponse{} }
+func (m *MutateCampaignFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedsResponse) ProtoMessage()    {}
+func (*MutateCampaignFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f28fd8f5bcce23c1, []int{3}
+}
+
+func (m *MutateCampaignFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedsResponse.Merge(m, src)
+}
+func (m *MutateCampaignFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Size(m)
+}
+func (m *MutateCampaignFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignFeedsResponse) GetResults() []*MutateCampaignFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign feed mutate.
+type MutateCampaignFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignFeedResult) Reset()         { *m = MutateCampaignFeedResult{} }
+func (m *MutateCampaignFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedResult) ProtoMessage()    {}
+func (*MutateCampaignFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f28fd8f5bcce23c1, []int{4}
+}
+
+func (m *MutateCampaignFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedResult.Merge(m, src)
+}
+func (m *MutateCampaignFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedResult.Size(m)
+}
+func (m *MutateCampaignFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedResult proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignFeedRequest)(nil), "google.ads.googleads.v3.services.GetCampaignFeedRequest")
+	proto.RegisterType((*MutateCampaignFeedsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignFeedsRequest")
+	proto.RegisterType((*CampaignFeedOperation)(nil), "google.ads.googleads.v3.services.CampaignFeedOperation")
+	proto.RegisterType((*MutateCampaignFeedsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignFeedsResponse")
+	proto.RegisterType((*MutateCampaignFeedResult)(nil), "google.ads.googleads.v3.services.MutateCampaignFeedResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_feed_service.proto", fileDescriptor_f28fd8f5bcce23c1)
+}
+
+var fileDescriptor_f28fd8f5bcce23c1 = []byte{
+	// 761 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x6a, 0xdb, 0x4a,
+	0x14, 0xbe, 0x92, 0x2f, 0xb9, 0x37, 0xe3, 0xe4, 0x06, 0x26, 0x24, 0x57, 0x38, 0x85, 0x1a, 0x35,
+	0x50, 0x63, 0x8a, 0x44, 0x6d, 0x4a, 0x8a, 0x92, 0x50, 0xe4, 0x52, 0x3b, 0x59, 0xa4, 0x09, 0x4a,
+	0xf1, 0xa2, 0x18, 0xc4, 0x44, 0x1a, 0xbb, 0x22, 0x92, 0x46, 0x9d, 0x91, 0x0c, 0x21, 0x64, 0xd3,
+	0x37, 0x28, 0x7d, 0x83, 0x2e, 0xfb, 0x0a, 0x5d, 0x77, 0x93, 0x6d, 0x77, 0x59, 0x75, 0x51, 0x28,
+	0x64, 0xd1, 0x57, 0x68, 0x91, 0x46, 0x63, 0xcb, 0x89, 0x8d, 0x69, 0x76, 0x47, 0x73, 0xbe, 0xf3,
+	0x9d, 0xff, 0x23, 0xb0, 0x33, 0x20, 0x64, 0xe0, 0x63, 0x1d, 0xb9, 0x4c, 0xe7, 0x62, 0x2a, 0x0d,
+	0x9b, 0x3a, 0xc3, 0x74, 0xe8, 0x39, 0x98, 0xe9, 0x0e, 0x0a, 0x22, 0xe4, 0x0d, 0x42, 0xbb, 0x8f,
+	0xb1, 0x6b, 0xe7, 0xcf, 0x5a, 0x44, 0x49, 0x4c, 0x60, 0x95, 0x9b, 0x68, 0xc8, 0x65, 0xda, 0xc8,
+	0x5a, 0x1b, 0x36, 0x35, 0x61, 0x5d, 0x79, 0x32, 0x8b, 0x9f, 0x62, 0x46, 0x12, 0x7a, 0xcb, 0x01,
+	0x27, 0xae, 0xdc, 0x13, 0x66, 0x91, 0xa7, 0xa3, 0x30, 0x24, 0x31, 0x8a, 0x3d, 0x12, 0xb2, 0x5c,
+	0xfb, 0x7f, 0x41, 0xeb, 0xf8, 0x1e, 0x0e, 0xe3, 0x5c, 0x71, 0xbf, 0xa0, 0xe8, 0x7b, 0xd8, 0x77,
+	0xed, 0x13, 0xfc, 0x06, 0x0d, 0x3d, 0x42, 0x73, 0x40, 0x1e, 0xb0, 0x9e, 0x7d, 0x9d, 0x24, 0xfd,
+	0x1c, 0x15, 0x20, 0x76, 0x7a, 0x83, 0x9b, 0x46, 0x8e, 0xce, 0x62, 0x14, 0x27, 0xb9, 0x53, 0xb5,
+	0x05, 0xd6, 0x3b, 0x38, 0x7e, 0x9e, 0x07, 0xdb, 0xc6, 0xd8, 0xb5, 0xf0, 0xdb, 0x04, 0xb3, 0x18,
+	0xd6, 0xc0, 0xb2, 0xc8, 0xc6, 0x0e, 0x51, 0x80, 0x15, 0xa9, 0x2a, 0xd5, 0x16, 0x5b, 0xa5, 0x6f,
+	0xa6, 0x6c, 0x2d, 0x09, 0xcd, 0x4b, 0x14, 0x60, 0xf5, 0xa7, 0x04, 0x2a, 0x07, 0x49, 0x8c, 0x62,
+	0x5c, 0xe4, 0x61, 0x82, 0x68, 0x13, 0x94, 0x9d, 0x84, 0xc5, 0x24, 0xc0, 0xd4, 0xf6, 0xdc, 0x22,
+	0x0d, 0x10, 0xef, 0xfb, 0x2e, 0xec, 0x01, 0x40, 0x22, 0x4c, 0x79, 0x45, 0x14, 0xb9, 0x5a, 0xaa,
+	0x95, 0x1b, 0x5b, 0xda, 0xbc, 0x4e, 0x68, 0x45, 0x8f, 0x87, 0xc2, 0x3e, 0x67, 0x1f, 0xf3, 0xc1,
+	0x87, 0x60, 0x25, 0x42, 0x34, 0xf6, 0x90, 0x6f, 0xf7, 0x91, 0xe7, 0x27, 0x14, 0x2b, 0xa5, 0xaa,
+	0x54, 0xfb, 0xd7, 0xfa, 0x2f, 0x7f, 0x6e, 0xf3, 0x57, 0xf8, 0x00, 0x2c, 0x0f, 0x91, 0xef, 0xb9,
+	0x28, 0xc6, 0x36, 0x09, 0xfd, 0x33, 0xe5, 0xef, 0x0c, 0xb6, 0x24, 0x1e, 0x0f, 0x43, 0xff, 0x4c,
+	0x7d, 0x2f, 0x83, 0xb5, 0xa9, 0x8e, 0xe1, 0x36, 0x28, 0x27, 0x51, 0x66, 0x9c, 0x16, 0x3f, 0x33,
+	0x2e, 0x37, 0x2a, 0x22, 0x0d, 0xd1, 0x1f, 0xad, 0x9d, 0xf6, 0xe7, 0x00, 0xb1, 0x53, 0x0b, 0x70,
+	0x78, 0x2a, 0xc3, 0x7d, 0xb0, 0xe0, 0x50, 0x8c, 0x62, 0x5e, 0xea, 0x72, 0x43, 0x9f, 0x99, 0xfe,
+	0x68, 0xcc, 0x26, 0xf2, 0xdf, 0xfb, 0xcb, 0xca, 0x09, 0x52, 0x2a, 0x4e, 0xac, 0xc8, 0x77, 0xa6,
+	0xe2, 0x04, 0x50, 0x01, 0x0b, 0x14, 0x07, 0x64, 0xc8, 0x2b, 0xb6, 0x98, 0x6a, 0xf8, 0x77, 0xab,
+	0x0c, 0x16, 0x47, 0x25, 0x56, 0x3f, 0x4b, 0x60, 0x63, 0xea, 0x10, 0xb0, 0x88, 0x84, 0x0c, 0xc3,
+	0x36, 0x58, 0xbb, 0xd1, 0x01, 0x1b, 0x53, 0x4a, 0x68, 0xc6, 0x5a, 0x6e, 0x40, 0x11, 0x20, 0x8d,
+	0x1c, 0xed, 0x38, 0x9b, 0x50, 0x6b, 0x75, 0xb2, 0x37, 0x2f, 0x52, 0x38, 0x7c, 0x05, 0xfe, 0xa1,
+	0x98, 0x25, 0x7e, 0x2c, 0x86, 0xc4, 0x98, 0x3f, 0x24, 0xb7, 0xe3, 0xb2, 0x32, 0x0a, 0x4b, 0x50,
+	0xa9, 0xcf, 0x80, 0x32, 0x0b, 0x94, 0x8e, 0xc4, 0x94, 0x45, 0x98, 0xdc, 0x81, 0xc6, 0x8f, 0x12,
+	0x58, 0x2d, 0xda, 0x1e, 0x73, 0xdf, 0xf0, 0x8b, 0x04, 0x56, 0x6e, 0x2c, 0x18, 0x7c, 0x3a, 0x3f,
+	0xe2, 0xe9, 0x3b, 0x59, 0xf9, 0xd3, 0x36, 0xaa, 0x9d, 0x2b, 0x73, 0x32, 0xf8, 0x77, 0x5f, 0xbf,
+	0x7f, 0x90, 0x1f, 0x43, 0x3d, 0x3d, 0x56, 0xe7, 0x13, 0x9a, 0x5d, 0xb1, 0x8c, 0x4c, 0xaf, 0x8f,
+	0xae, 0x57, 0xd6, 0x43, 0xbd, 0x7e, 0x01, 0xaf, 0x25, 0xb0, 0x3a, 0xa5, 0xbd, 0x70, 0xe7, 0x2e,
+	0xd5, 0x17, 0xa7, 0xa1, 0xb2, 0x7b, 0x47, 0x6b, 0x3e, 0x53, 0x6a, 0xf7, 0xca, 0x5c, 0x2f, 0x9c,
+	0x96, 0x47, 0xe3, 0x85, 0xcf, 0xd2, 0xdc, 0x52, 0x1b, 0x69, 0x9a, 0xe3, 0xbc, 0xce, 0x0b, 0xe0,
+	0xdd, 0xfa, 0xc5, 0x64, 0x96, 0x46, 0x90, 0x79, 0x32, 0xa4, 0x7a, 0x65, 0xe3, 0xd2, 0x54, 0xc6,
+	0xd1, 0xe4, 0x52, 0xe4, 0x31, 0xcd, 0x21, 0x41, 0xeb, 0x97, 0x04, 0x36, 0x1d, 0x12, 0xcc, 0x8d,
+	0xbc, 0xa5, 0x4c, 0x99, 0x87, 0xa3, 0xf4, 0x02, 0x1c, 0x49, 0xaf, 0xf7, 0x72, 0xeb, 0x01, 0xf1,
+	0x51, 0x38, 0xd0, 0x08, 0x1d, 0xe8, 0x03, 0x1c, 0x66, 0xf7, 0x41, 0x1f, 0xfb, 0x9b, 0xfd, 0xff,
+	0xda, 0x16, 0xc2, 0x47, 0xb9, 0xd4, 0x31, 0xcd, 0x4f, 0x72, 0xb5, 0xc3, 0x09, 0x4d, 0x97, 0x69,
+	0x5c, 0x4c, 0xa5, 0x6e, 0x53, 0xcb, 0x1d, 0xb3, 0x4b, 0x01, 0xe9, 0x99, 0x2e, 0xeb, 0x8d, 0x20,
+	0xbd, 0x6e, 0xb3, 0x27, 0x20, 0xd7, 0xf2, 0x26, 0x7f, 0x37, 0x0c, 0xd3, 0x65, 0x86, 0x31, 0x02,
+	0x19, 0x46, 0xb7, 0x69, 0x18, 0x02, 0x76, 0xb2, 0x90, 0xc5, 0xd9, 0xfc, 0x1d, 0x00, 0x00, 0xff,
+	0xff, 0x53, 0x2c, 0xb0, 0x93, 0x66, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignFeedServiceClient is the client API for CampaignFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignFeedServiceClient interface {
+	// Returns the requested campaign feed in full detail.
+	GetCampaignFeed(ctx context.Context, in *GetCampaignFeedRequest, opts ...grpc.CallOption) (*resources.CampaignFeed, error)
+	// Creates, updates, or removes campaign feeds. Operation statuses are
+	// returned.
+	MutateCampaignFeeds(ctx context.Context, in *MutateCampaignFeedsRequest, opts ...grpc.CallOption) (*MutateCampaignFeedsResponse, error)
+}
+
+type campaignFeedServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignFeedServiceClient(cc grpc.ClientConnInterface) CampaignFeedServiceClient {
+	return &campaignFeedServiceClient{cc}
+}
+
+func (c *campaignFeedServiceClient) GetCampaignFeed(ctx context.Context, in *GetCampaignFeedRequest, opts ...grpc.CallOption) (*resources.CampaignFeed, error) {
+	out := new(resources.CampaignFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignFeedService/GetCampaignFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignFeedServiceClient) MutateCampaignFeeds(ctx context.Context, in *MutateCampaignFeedsRequest, opts ...grpc.CallOption) (*MutateCampaignFeedsResponse, error) {
+	out := new(MutateCampaignFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignFeedService/MutateCampaignFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignFeedServiceServer is the server API for CampaignFeedService service.
+type CampaignFeedServiceServer interface {
+	// Returns the requested campaign feed in full detail.
+	GetCampaignFeed(context.Context, *GetCampaignFeedRequest) (*resources.CampaignFeed, error)
+	// Creates, updates, or removes campaign feeds. Operation statuses are
+	// returned.
+	MutateCampaignFeeds(context.Context, *MutateCampaignFeedsRequest) (*MutateCampaignFeedsResponse, error)
+}
+
+// UnimplementedCampaignFeedServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignFeedServiceServer struct {
+}
+
+func (*UnimplementedCampaignFeedServiceServer) GetCampaignFeed(ctx context.Context, req *GetCampaignFeedRequest) (*resources.CampaignFeed, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignFeed not implemented")
+}
+func (*UnimplementedCampaignFeedServiceServer) MutateCampaignFeeds(ctx context.Context, req *MutateCampaignFeedsRequest) (*MutateCampaignFeedsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignFeeds not implemented")
+}
+
+func RegisterCampaignFeedServiceServer(s *grpc.Server, srv CampaignFeedServiceServer) {
+	s.RegisterService(&_CampaignFeedService_serviceDesc, srv)
+}
+
+func _CampaignFeedService_GetCampaignFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignFeedServiceServer).GetCampaignFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignFeedService/GetCampaignFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignFeedServiceServer).GetCampaignFeed(ctx, req.(*GetCampaignFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignFeedService_MutateCampaignFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignFeedServiceServer).MutateCampaignFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignFeedService/MutateCampaignFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignFeedServiceServer).MutateCampaignFeeds(ctx, req.(*MutateCampaignFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignFeedService",
+	HandlerType: (*CampaignFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignFeed",
+			Handler:    _CampaignFeedService_GetCampaignFeed_Handler,
+		},
+		{
+			MethodName: "MutateCampaignFeeds",
+			Handler:    _CampaignFeedService_MutateCampaignFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_feed_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_label_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_label_service.pb.go
new file mode 100644
index 0000000..48780ed
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_label_service.pb.go
@@ -0,0 +1,502 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignLabelService.GetCampaignLabel][google.ads.googleads.v3.services.CampaignLabelService.GetCampaignLabel].
+type GetCampaignLabelRequest struct {
+	// Required. The resource name of the campaign-label relationship to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignLabelRequest) Reset()         { *m = GetCampaignLabelRequest{} }
+func (m *GetCampaignLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignLabelRequest) ProtoMessage()    {}
+func (*GetCampaignLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37778cde3b4fe5c9, []int{0}
+}
+
+func (m *GetCampaignLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignLabelRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignLabelRequest.Merge(m, src)
+}
+func (m *GetCampaignLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignLabelRequest.Size(m)
+}
+func (m *GetCampaignLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignLabelRequest proto.InternalMessageInfo
+
+func (m *GetCampaignLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignLabelService.MutateCampaignLabels][google.ads.googleads.v3.services.CampaignLabelService.MutateCampaignLabels].
+type MutateCampaignLabelsRequest struct {
+	// Required. ID of the customer whose campaign-label relationships are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on campaign-label relationships.
+	Operations []*CampaignLabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignLabelsRequest) Reset()         { *m = MutateCampaignLabelsRequest{} }
+func (m *MutateCampaignLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignLabelsRequest) ProtoMessage()    {}
+func (*MutateCampaignLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37778cde3b4fe5c9, []int{1}
+}
+
+func (m *MutateCampaignLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignLabelsRequest.Merge(m, src)
+}
+func (m *MutateCampaignLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignLabelsRequest.Size(m)
+}
+func (m *MutateCampaignLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignLabelsRequest) GetOperations() []*CampaignLabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on a campaign-label relationship.
+type CampaignLabelOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignLabelOperation_Create
+	//	*CampaignLabelOperation_Remove
+	Operation            isCampaignLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *CampaignLabelOperation) Reset()         { *m = CampaignLabelOperation{} }
+func (m *CampaignLabelOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignLabelOperation) ProtoMessage()    {}
+func (*CampaignLabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37778cde3b4fe5c9, []int{2}
+}
+
+func (m *CampaignLabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignLabelOperation.Unmarshal(m, b)
+}
+func (m *CampaignLabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignLabelOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignLabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignLabelOperation.Merge(m, src)
+}
+func (m *CampaignLabelOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignLabelOperation.Size(m)
+}
+func (m *CampaignLabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignLabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignLabelOperation proto.InternalMessageInfo
+
+type isCampaignLabelOperation_Operation interface {
+	isCampaignLabelOperation_Operation()
+}
+
+type CampaignLabelOperation_Create struct {
+	Create *resources.CampaignLabel `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignLabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignLabelOperation_Create) isCampaignLabelOperation_Operation() {}
+
+func (*CampaignLabelOperation_Remove) isCampaignLabelOperation_Operation() {}
+
+func (m *CampaignLabelOperation) GetOperation() isCampaignLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignLabelOperation) GetCreate() *resources.CampaignLabel {
+	if x, ok := m.GetOperation().(*CampaignLabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignLabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignLabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignLabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignLabelOperation_Create)(nil),
+		(*CampaignLabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for a campaign labels mutate.
+type MutateCampaignLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateCampaignLabelsResponse) Reset()         { *m = MutateCampaignLabelsResponse{} }
+func (m *MutateCampaignLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignLabelsResponse) ProtoMessage()    {}
+func (*MutateCampaignLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37778cde3b4fe5c9, []int{3}
+}
+
+func (m *MutateCampaignLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignLabelsResponse.Merge(m, src)
+}
+func (m *MutateCampaignLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignLabelsResponse.Size(m)
+}
+func (m *MutateCampaignLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignLabelsResponse) GetResults() []*MutateCampaignLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for a campaign label mutate.
+type MutateCampaignLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignLabelResult) Reset()         { *m = MutateCampaignLabelResult{} }
+func (m *MutateCampaignLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignLabelResult) ProtoMessage()    {}
+func (*MutateCampaignLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_37778cde3b4fe5c9, []int{4}
+}
+
+func (m *MutateCampaignLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignLabelResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignLabelResult.Merge(m, src)
+}
+func (m *MutateCampaignLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignLabelResult.Size(m)
+}
+func (m *MutateCampaignLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignLabelResult proto.InternalMessageInfo
+
+func (m *MutateCampaignLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignLabelRequest)(nil), "google.ads.googleads.v3.services.GetCampaignLabelRequest")
+	proto.RegisterType((*MutateCampaignLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignLabelsRequest")
+	proto.RegisterType((*CampaignLabelOperation)(nil), "google.ads.googleads.v3.services.CampaignLabelOperation")
+	proto.RegisterType((*MutateCampaignLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignLabelsResponse")
+	proto.RegisterType((*MutateCampaignLabelResult)(nil), "google.ads.googleads.v3.services.MutateCampaignLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_label_service.proto", fileDescriptor_37778cde3b4fe5c9)
+}
+
+var fileDescriptor_37778cde3b4fe5c9 = []byte{
+	// 716 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x6e, 0xd3, 0x4a,
+	0x14, 0xbe, 0x76, 0xae, 0x7a, 0x6f, 0x27, 0xed, 0xbd, 0x68, 0x28, 0x6d, 0x9a, 0x56, 0x22, 0x32,
+	0x95, 0x88, 0x22, 0x64, 0x57, 0x89, 0x84, 0x8a, 0xab, 0x20, 0x9c, 0x8a, 0xb6, 0x20, 0xa0, 0x95,
+	0x2b, 0x8a, 0x84, 0x82, 0xac, 0xa9, 0x3d, 0x35, 0x96, 0x6c, 0x8f, 0x99, 0x19, 0x47, 0xaa, 0xaa,
+	0x4a, 0x88, 0x2d, 0x4b, 0xde, 0x80, 0x25, 0xef, 0xc0, 0x03, 0xd0, 0x2d, 0xbb, 0xae, 0x58, 0xb0,
+	0x62, 0x81, 0xfa, 0x08, 0xc8, 0x3f, 0x93, 0xc4, 0x21, 0x51, 0x44, 0x77, 0xc7, 0xe7, 0xe7, 0x3b,
+	0xe7, 0x3b, 0x3f, 0x63, 0xd0, 0x76, 0x09, 0x71, 0x7d, 0xac, 0x21, 0x87, 0x69, 0x99, 0x98, 0x48,
+	0xbd, 0x96, 0xc6, 0x30, 0xed, 0x79, 0x36, 0x66, 0x9a, 0x8d, 0x82, 0x08, 0x79, 0x6e, 0x68, 0xf9,
+	0xe8, 0x08, 0xfb, 0x56, 0xae, 0x57, 0x23, 0x4a, 0x38, 0x81, 0xb5, 0x2c, 0x46, 0x45, 0x0e, 0x53,
+	0xfb, 0xe1, 0x6a, 0xaf, 0xa5, 0x8a, 0xf0, 0xea, 0xdd, 0x49, 0x09, 0x28, 0x66, 0x24, 0xa6, 0xbf,
+	0x67, 0xc8, 0x90, 0xab, 0xab, 0x22, 0x2e, 0xf2, 0x34, 0x14, 0x86, 0x84, 0x23, 0xee, 0x91, 0x90,
+	0xe5, 0xd6, 0xa5, 0x21, 0xab, 0xed, 0x7b, 0x38, 0xe4, 0xb9, 0xe1, 0xe6, 0x90, 0xe1, 0xd8, 0xc3,
+	0xbe, 0x63, 0x1d, 0xe1, 0xd7, 0xa8, 0xe7, 0x11, 0x3a, 0x12, 0x49, 0x23, 0x5b, 0x63, 0x1c, 0xf1,
+	0x38, 0x87, 0x54, 0xb6, 0xc0, 0xd2, 0x0e, 0xe6, 0x5b, 0x79, 0x2d, 0x4f, 0x92, 0x52, 0x4c, 0xfc,
+	0x26, 0xc6, 0x8c, 0xc3, 0x3a, 0x98, 0x17, 0xd5, 0x5a, 0x21, 0x0a, 0x70, 0x45, 0xaa, 0x49, 0xf5,
+	0xd9, 0x4e, 0xe9, 0x9b, 0x21, 0x9b, 0x73, 0xc2, 0xf2, 0x0c, 0x05, 0x58, 0xb9, 0x94, 0xc0, 0xca,
+	0xd3, 0x98, 0x23, 0x8e, 0x0b, 0x40, 0x4c, 0x20, 0xad, 0x81, 0xb2, 0x1d, 0x33, 0x4e, 0x02, 0x4c,
+	0x2d, 0xcf, 0x19, 0xc6, 0x01, 0x42, 0xff, 0xc8, 0x81, 0xaf, 0x00, 0x20, 0x11, 0xa6, 0x19, 0xe3,
+	0x8a, 0x5c, 0x2b, 0xd5, 0xcb, 0xcd, 0x0d, 0x75, 0x5a, 0xab, 0xd5, 0x42, 0xca, 0x3d, 0x01, 0x90,
+	0xc3, 0x0f, 0x00, 0xe1, 0x6d, 0xf0, 0x7f, 0x84, 0x28, 0xf7, 0x90, 0x6f, 0x1d, 0x23, 0xcf, 0x8f,
+	0x29, 0xae, 0x94, 0x6a, 0x52, 0xfd, 0x5f, 0xf3, 0xbf, 0x5c, 0xbd, 0x9d, 0x69, 0xe1, 0x2d, 0x30,
+	0xdf, 0x43, 0xbe, 0xe7, 0x20, 0x8e, 0x2d, 0x12, 0xfa, 0x27, 0x95, 0xbf, 0x53, 0xb7, 0x39, 0xa1,
+	0xdc, 0x0b, 0xfd, 0x13, 0xe5, 0xbd, 0x04, 0x16, 0xc7, 0x67, 0x86, 0x8f, 0xc1, 0x8c, 0x4d, 0x31,
+	0xe2, 0x59, 0xc3, 0xca, 0xcd, 0xf5, 0x89, 0x1c, 0xfa, 0xcb, 0x50, 0x24, 0xb1, 0xfb, 0x97, 0x99,
+	0x23, 0xc0, 0x0a, 0x98, 0xa1, 0x38, 0x20, 0x3d, 0x5c, 0x91, 0x93, 0xa6, 0x25, 0x96, 0xec, 0xbb,
+	0x53, 0x06, 0xb3, 0x7d, 0x72, 0xca, 0x67, 0x09, 0xac, 0x8e, 0x1f, 0x00, 0x8b, 0x48, 0xc8, 0x30,
+	0xdc, 0x06, 0x37, 0x46, 0xc8, 0x5b, 0x98, 0x52, 0x42, 0xd3, 0x16, 0x94, 0x9b, 0x50, 0x94, 0x48,
+	0x23, 0x5b, 0x3d, 0x48, 0xf7, 0xc3, 0xbc, 0x5e, 0x6c, 0xcb, 0xc3, 0xc4, 0x1d, 0x3e, 0x07, 0xff,
+	0x50, 0xcc, 0x62, 0x9f, 0x8b, 0x01, 0x6d, 0x4e, 0x1f, 0xd0, 0x98, 0xc2, 0xcc, 0x14, 0xc3, 0x14,
+	0x58, 0xca, 0x03, 0xb0, 0x3c, 0xd1, 0x2b, 0x99, 0xc7, 0x98, 0x3d, 0x2c, 0xae, 0x60, 0xf3, 0xb2,
+	0x04, 0x16, 0x0a, 0xc1, 0x07, 0x59, 0x7a, 0xf8, 0x45, 0x02, 0xd7, 0x46, 0x37, 0x1c, 0xde, 0x9b,
+	0x5e, 0xf5, 0x84, 0xab, 0xa8, 0xfe, 0xf1, 0x34, 0x95, 0xdd, 0x0b, 0xa3, 0x48, 0xe0, 0xdd, 0xd7,
+	0xef, 0x1f, 0xe4, 0x26, 0x5c, 0x4f, 0xde, 0x83, 0xd3, 0x82, 0xa5, 0x2d, 0xce, 0x81, 0x69, 0x8d,
+	0xfe, 0x03, 0x91, 0x8d, 0x52, 0x6b, 0x9c, 0xc1, 0x9f, 0x12, 0x58, 0x18, 0x37, 0x66, 0xd8, 0xbe,
+	0xd2, 0x14, 0xc4, 0x7d, 0x56, 0xef, 0x5f, 0x35, 0x3c, 0xdb, 0x2e, 0xe5, 0xc5, 0x85, 0xb1, 0x38,
+	0x74, 0xe0, 0x77, 0x06, 0x57, 0x97, 0x52, 0xdd, 0x50, 0x5a, 0x09, 0xd5, 0x01, 0xb7, 0xd3, 0x21,
+	0xe7, 0x76, 0xe3, 0x6c, 0x84, 0xa9, 0x1e, 0xa4, 0xb9, 0x74, 0xa9, 0x51, 0x5d, 0x39, 0x37, 0x2a,
+	0x83, 0x7a, 0x72, 0x29, 0xf2, 0x98, 0x6a, 0x93, 0xa0, 0xf3, 0x56, 0x06, 0x6b, 0x36, 0x09, 0xa6,
+	0xd6, 0xde, 0x59, 0x1e, 0xb7, 0x18, 0xfb, 0xc9, 0xf3, 0xb7, 0x2f, 0xbd, 0xdc, 0xcd, 0xc3, 0x5d,
+	0xe2, 0xa3, 0xd0, 0x55, 0x09, 0x75, 0x35, 0x17, 0x87, 0xe9, 0xe3, 0xa8, 0x0d, 0x12, 0x4e, 0xfe,
+	0x53, 0x6c, 0x0a, 0xe1, 0xa3, 0x5c, 0xda, 0x31, 0x8c, 0x4f, 0x72, 0x6d, 0x27, 0x03, 0x34, 0x1c,
+	0xa6, 0x66, 0x62, 0x22, 0x1d, 0xb6, 0xd4, 0x3c, 0x31, 0x3b, 0x17, 0x2e, 0x5d, 0xc3, 0x61, 0xdd,
+	0xbe, 0x4b, 0xf7, 0xb0, 0xd5, 0x15, 0x2e, 0x3f, 0xe4, 0xb5, 0x4c, 0xaf, 0xeb, 0x86, 0xc3, 0x74,
+	0xbd, 0xef, 0xa4, 0xeb, 0x87, 0x2d, 0x5d, 0x17, 0x6e, 0x47, 0x33, 0x69, 0x9d, 0xad, 0x5f, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0xe9, 0xfc, 0x2e, 0xc6, 0xd0, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignLabelServiceClient is the client API for CampaignLabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignLabelServiceClient interface {
+	// Returns the requested campaign-label relationship in full detail.
+	GetCampaignLabel(ctx context.Context, in *GetCampaignLabelRequest, opts ...grpc.CallOption) (*resources.CampaignLabel, error)
+	// Creates and removes campaign-label relationships.
+	// Operation statuses are returned.
+	MutateCampaignLabels(ctx context.Context, in *MutateCampaignLabelsRequest, opts ...grpc.CallOption) (*MutateCampaignLabelsResponse, error)
+}
+
+type campaignLabelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignLabelServiceClient(cc grpc.ClientConnInterface) CampaignLabelServiceClient {
+	return &campaignLabelServiceClient{cc}
+}
+
+func (c *campaignLabelServiceClient) GetCampaignLabel(ctx context.Context, in *GetCampaignLabelRequest, opts ...grpc.CallOption) (*resources.CampaignLabel, error) {
+	out := new(resources.CampaignLabel)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignLabelService/GetCampaignLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignLabelServiceClient) MutateCampaignLabels(ctx context.Context, in *MutateCampaignLabelsRequest, opts ...grpc.CallOption) (*MutateCampaignLabelsResponse, error) {
+	out := new(MutateCampaignLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignLabelService/MutateCampaignLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignLabelServiceServer is the server API for CampaignLabelService service.
+type CampaignLabelServiceServer interface {
+	// Returns the requested campaign-label relationship in full detail.
+	GetCampaignLabel(context.Context, *GetCampaignLabelRequest) (*resources.CampaignLabel, error)
+	// Creates and removes campaign-label relationships.
+	// Operation statuses are returned.
+	MutateCampaignLabels(context.Context, *MutateCampaignLabelsRequest) (*MutateCampaignLabelsResponse, error)
+}
+
+// UnimplementedCampaignLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignLabelServiceServer struct {
+}
+
+func (*UnimplementedCampaignLabelServiceServer) GetCampaignLabel(ctx context.Context, req *GetCampaignLabelRequest) (*resources.CampaignLabel, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignLabel not implemented")
+}
+func (*UnimplementedCampaignLabelServiceServer) MutateCampaignLabels(ctx context.Context, req *MutateCampaignLabelsRequest) (*MutateCampaignLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignLabels not implemented")
+}
+
+func RegisterCampaignLabelServiceServer(s *grpc.Server, srv CampaignLabelServiceServer) {
+	s.RegisterService(&_CampaignLabelService_serviceDesc, srv)
+}
+
+func _CampaignLabelService_GetCampaignLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignLabelServiceServer).GetCampaignLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignLabelService/GetCampaignLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignLabelServiceServer).GetCampaignLabel(ctx, req.(*GetCampaignLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignLabelService_MutateCampaignLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignLabelServiceServer).MutateCampaignLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignLabelService/MutateCampaignLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignLabelServiceServer).MutateCampaignLabels(ctx, req.(*MutateCampaignLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignLabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignLabelService",
+	HandlerType: (*CampaignLabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignLabel",
+			Handler:    _CampaignLabelService_GetCampaignLabel_Handler,
+		},
+		{
+			MethodName: "MutateCampaignLabels",
+			Handler:    _CampaignLabelService_MutateCampaignLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_service.pb.go
new file mode 100644
index 0000000..589c7da
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_service.pb.go
@@ -0,0 +1,527 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignService.GetCampaign][google.ads.googleads.v3.services.CampaignService.GetCampaign].
+type GetCampaignRequest struct {
+	// Required. The resource name of the campaign to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignRequest) Reset()         { *m = GetCampaignRequest{} }
+func (m *GetCampaignRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignRequest) ProtoMessage()    {}
+func (*GetCampaignRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ae6454f925b0d531, []int{0}
+}
+
+func (m *GetCampaignRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignRequest.Merge(m, src)
+}
+func (m *GetCampaignRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignRequest.Size(m)
+}
+func (m *GetCampaignRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignRequest proto.InternalMessageInfo
+
+func (m *GetCampaignRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignService.MutateCampaigns][google.ads.googleads.v3.services.CampaignService.MutateCampaigns].
+type MutateCampaignsRequest struct {
+	// Required. The ID of the customer whose campaigns are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaigns.
+	Operations []*CampaignOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignsRequest) Reset()         { *m = MutateCampaignsRequest{} }
+func (m *MutateCampaignsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignsRequest) ProtoMessage()    {}
+func (*MutateCampaignsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ae6454f925b0d531, []int{1}
+}
+
+func (m *MutateCampaignsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignsRequest.Merge(m, src)
+}
+func (m *MutateCampaignsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignsRequest.Size(m)
+}
+func (m *MutateCampaignsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignsRequest) GetOperations() []*CampaignOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a campaign.
+type CampaignOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignOperation_Create
+	//	*CampaignOperation_Update
+	//	*CampaignOperation_Remove
+	Operation            isCampaignOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *CampaignOperation) Reset()         { *m = CampaignOperation{} }
+func (m *CampaignOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignOperation) ProtoMessage()    {}
+func (*CampaignOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ae6454f925b0d531, []int{2}
+}
+
+func (m *CampaignOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignOperation.Unmarshal(m, b)
+}
+func (m *CampaignOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignOperation.Merge(m, src)
+}
+func (m *CampaignOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignOperation.Size(m)
+}
+func (m *CampaignOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignOperation proto.InternalMessageInfo
+
+func (m *CampaignOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignOperation_Operation interface {
+	isCampaignOperation_Operation()
+}
+
+type CampaignOperation_Create struct {
+	Create *resources.Campaign `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignOperation_Update struct {
+	Update *resources.Campaign `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignOperation_Create) isCampaignOperation_Operation() {}
+
+func (*CampaignOperation_Update) isCampaignOperation_Operation() {}
+
+func (*CampaignOperation_Remove) isCampaignOperation_Operation() {}
+
+func (m *CampaignOperation) GetOperation() isCampaignOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetCreate() *resources.Campaign {
+	if x, ok := m.GetOperation().(*CampaignOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetUpdate() *resources.Campaign {
+	if x, ok := m.GetOperation().(*CampaignOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignOperation_Create)(nil),
+		(*CampaignOperation_Update)(nil),
+		(*CampaignOperation_Remove)(nil),
+	}
+}
+
+// Response message for campaign mutate.
+type MutateCampaignsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateCampaignsResponse) Reset()         { *m = MutateCampaignsResponse{} }
+func (m *MutateCampaignsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignsResponse) ProtoMessage()    {}
+func (*MutateCampaignsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ae6454f925b0d531, []int{3}
+}
+
+func (m *MutateCampaignsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignsResponse.Merge(m, src)
+}
+func (m *MutateCampaignsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignsResponse.Size(m)
+}
+func (m *MutateCampaignsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignsResponse) GetResults() []*MutateCampaignResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign mutate.
+type MutateCampaignResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignResult) Reset()         { *m = MutateCampaignResult{} }
+func (m *MutateCampaignResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignResult) ProtoMessage()    {}
+func (*MutateCampaignResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ae6454f925b0d531, []int{4}
+}
+
+func (m *MutateCampaignResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignResult.Merge(m, src)
+}
+func (m *MutateCampaignResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignResult.Size(m)
+}
+func (m *MutateCampaignResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignResult proto.InternalMessageInfo
+
+func (m *MutateCampaignResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignRequest)(nil), "google.ads.googleads.v3.services.GetCampaignRequest")
+	proto.RegisterType((*MutateCampaignsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignsRequest")
+	proto.RegisterType((*CampaignOperation)(nil), "google.ads.googleads.v3.services.CampaignOperation")
+	proto.RegisterType((*MutateCampaignsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignsResponse")
+	proto.RegisterType((*MutateCampaignResult)(nil), "google.ads.googleads.v3.services.MutateCampaignResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_service.proto", fileDescriptor_ae6454f925b0d531)
+}
+
+var fileDescriptor_ae6454f925b0d531 = []byte{
+	// 750 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6b, 0xd4, 0x4e,
+	0x18, 0xff, 0x27, 0xfb, 0xa7, 0xda, 0x49, 0x6b, 0x71, 0xac, 0xed, 0xb2, 0x0a, 0x2e, 0xb1, 0xe0,
+	0xb2, 0xd5, 0x44, 0x36, 0xe2, 0x4b, 0x4a, 0x85, 0x6c, 0xe9, 0x8b, 0x87, 0xda, 0x92, 0x42, 0x11,
+	0x59, 0x58, 0xa6, 0xc9, 0x74, 0x0d, 0x4d, 0x32, 0x71, 0x66, 0xb2, 0x50, 0x4a, 0x2f, 0x82, 0x9f,
+	0xc0, 0x6f, 0xe0, 0xd1, 0xab, 0xf8, 0x09, 0xbc, 0xf5, 0xea, 0xad, 0x27, 0x0f, 0xe2, 0xc1, 0xaf,
+	0xe0, 0x45, 0x92, 0xc9, 0xec, 0x5b, 0x5b, 0x96, 0xf6, 0xf6, 0xec, 0x3c, 0xbf, 0xdf, 0xef, 0x79,
+	0xcf, 0x82, 0x67, 0x1d, 0x42, 0x3a, 0x21, 0x36, 0x91, 0xcf, 0x4c, 0x61, 0x66, 0x56, 0xd7, 0x32,
+	0x19, 0xa6, 0xdd, 0xc0, 0xc3, 0xcc, 0xf4, 0x50, 0x94, 0xa0, 0xa0, 0x13, 0xb7, 0x8b, 0x17, 0x23,
+	0xa1, 0x84, 0x13, 0x58, 0x15, 0x68, 0x03, 0xf9, 0xcc, 0xe8, 0x11, 0x8d, 0xae, 0x65, 0x48, 0x62,
+	0xe5, 0xf1, 0x45, 0xd2, 0x14, 0x33, 0x92, 0xd2, 0x41, 0x6d, 0xa1, 0x59, 0xb9, 0x2b, 0x19, 0x49,
+	0x60, 0xa2, 0x38, 0x26, 0x1c, 0xf1, 0x80, 0xc4, 0xac, 0xf0, 0xce, 0x0f, 0x78, 0xbd, 0x30, 0xc0,
+	0x31, 0x2f, 0x1c, 0xf7, 0x06, 0x1c, 0xfb, 0x01, 0x0e, 0xfd, 0xf6, 0x1e, 0x7e, 0x87, 0xba, 0x01,
+	0xa1, 0x05, 0xa0, 0xc8, 0xd5, 0xcc, 0x7f, 0xed, 0xa5, 0xfb, 0x05, 0x2a, 0x42, 0xec, 0x60, 0x44,
+	0x9b, 0x26, 0x9e, 0xc9, 0x38, 0xe2, 0x69, 0x11, 0x54, 0x7f, 0x09, 0xe0, 0x3a, 0xe6, 0x2b, 0x45,
+	0x9e, 0x2e, 0x7e, 0x9f, 0x62, 0xc6, 0x61, 0x0d, 0x4c, 0xcb, 0x22, 0xda, 0x31, 0x8a, 0x70, 0x59,
+	0xa9, 0x2a, 0xb5, 0xc9, 0x66, 0xe9, 0xa7, 0xa3, 0xba, 0x53, 0xd2, 0xf3, 0x1a, 0x45, 0x58, 0xff,
+	0xad, 0x80, 0xb9, 0xcd, 0x94, 0x23, 0x8e, 0xa5, 0x06, 0x93, 0x22, 0x0b, 0x40, 0xf3, 0x52, 0xc6,
+	0x49, 0x84, 0x69, 0x3b, 0xf0, 0x07, 0x25, 0x80, 0x7c, 0x7f, 0xe5, 0xc3, 0x37, 0x00, 0x90, 0x04,
+	0x53, 0xd1, 0x89, 0xb2, 0x5a, 0x2d, 0xd5, 0xb4, 0x86, 0x65, 0x8c, 0x6b, 0xbe, 0x21, 0xa3, 0x6d,
+	0x49, 0x6e, 0xa1, 0xdc, 0xd7, 0x82, 0x0f, 0xc0, 0x4c, 0x82, 0x28, 0x0f, 0x50, 0xd8, 0xde, 0x47,
+	0x41, 0x98, 0x52, 0x5c, 0x2e, 0x55, 0x95, 0xda, 0x75, 0xf7, 0x46, 0xf1, 0xbc, 0x26, 0x5e, 0xe1,
+	0x7d, 0x30, 0xdd, 0x45, 0x61, 0xe0, 0x23, 0x8e, 0xdb, 0x24, 0x0e, 0x0f, 0xcb, 0xff, 0xe7, 0xb0,
+	0x29, 0xf9, 0xb8, 0x15, 0x87, 0x87, 0xfa, 0x47, 0x15, 0xdc, 0x3c, 0x13, 0x14, 0x2e, 0x01, 0x2d,
+	0x4d, 0x72, 0x62, 0xd6, 0xec, 0x9c, 0xa8, 0x35, 0x2a, 0x32, 0x7d, 0x39, 0x0f, 0x63, 0x2d, 0x9b,
+	0xc7, 0x26, 0x62, 0x07, 0x2e, 0x10, 0xf0, 0xcc, 0x86, 0xab, 0x60, 0xc2, 0xa3, 0x18, 0x71, 0xd1,
+	0x5e, 0xad, 0xb1, 0x78, 0x61, 0xd9, 0xbd, 0x8d, 0xea, 0xd5, 0xbd, 0xf1, 0x9f, 0x5b, 0x90, 0x33,
+	0x19, 0x21, 0x5a, 0x56, 0xaf, 0x24, 0x23, 0xc8, 0xb0, 0x0c, 0x26, 0x28, 0x8e, 0x48, 0x57, 0x74,
+	0x69, 0x32, 0xf3, 0x88, 0xdf, 0x4d, 0x0d, 0x4c, 0xf6, 0xda, 0xaa, 0x7f, 0x55, 0xc0, 0xfc, 0x99,
+	0x81, 0xb3, 0x84, 0xc4, 0x0c, 0xc3, 0x35, 0x70, 0x7b, 0xa4, 0xe3, 0x6d, 0x4c, 0x29, 0xa1, 0xb9,
+	0xa2, 0xd6, 0x80, 0x32, 0x31, 0x9a, 0x78, 0xc6, 0x4e, 0xbe, 0x85, 0xee, 0xad, 0xe1, 0x59, 0xac,
+	0x66, 0x70, 0xb8, 0x0d, 0xae, 0x51, 0xcc, 0xd2, 0x90, 0xcb, 0x85, 0x78, 0x3a, 0x7e, 0x21, 0x86,
+	0x73, 0x72, 0x73, 0xba, 0x2b, 0x65, 0xf4, 0x25, 0x30, 0x7b, 0x1e, 0x20, 0x1b, 0xfd, 0x39, 0x8b,
+	0x3e, 0xbc, 0xe3, 0x8d, 0xef, 0x25, 0x30, 0x23, 0x79, 0x3b, 0x22, 0x1e, 0xfc, 0xa6, 0x00, 0x6d,
+	0xe0, 0x70, 0xe0, 0x93, 0xf1, 0x19, 0x9e, 0xbd, 0xb3, 0xca, 0x65, 0x46, 0xa5, 0xaf, 0x9c, 0x3a,
+	0xc3, 0xc9, 0x7e, 0xf8, 0xf1, 0xeb, 0x93, 0xfa, 0x08, 0x2e, 0x66, 0xdf, 0x9c, 0xa3, 0x21, 0xcf,
+	0xb2, 0x3c, 0x30, 0x66, 0xd6, 0x7b, 0x1f, 0x21, 0x66, 0xd6, 0x8f, 0xe1, 0xa9, 0x02, 0x66, 0x46,
+	0xc6, 0x07, 0x9f, 0x5f, 0xb6, 0xbb, 0xf2, 0xc4, 0x2b, 0x2f, 0xae, 0xc0, 0x14, 0xbb, 0xa2, 0xbb,
+	0xa7, 0xce, 0xdc, 0xc0, 0xe7, 0xe1, 0x61, 0xff, 0x70, 0xf3, 0xb2, 0x2c, 0xdd, 0xc8, 0xca, 0xea,
+	0xd7, 0x71, 0x34, 0x00, 0x5e, 0xae, 0x1f, 0xf7, 0xab, 0xb2, 0xa3, 0x3c, 0x82, 0xad, 0xd4, 0x2b,
+	0x77, 0x4e, 0x9c, 0x72, 0x3f, 0x8b, 0xc2, 0x4a, 0x02, 0x66, 0x78, 0x24, 0x6a, 0xfe, 0x55, 0xc0,
+	0x82, 0x47, 0xa2, 0xb1, 0x19, 0x37, 0x67, 0x47, 0x66, 0xbd, 0x9d, 0x5d, 0xf1, 0xb6, 0xf2, 0x76,
+	0xa3, 0x60, 0x76, 0x48, 0x88, 0xe2, 0x8e, 0x41, 0x68, 0xc7, 0xec, 0xe0, 0x38, 0xbf, 0x71, 0xb3,
+	0x1f, 0xeb, 0xe2, 0x7f, 0x9a, 0x25, 0x69, 0x7c, 0x56, 0x4b, 0xeb, 0x8e, 0xf3, 0x45, 0xad, 0xae,
+	0x0b, 0x41, 0xc7, 0x67, 0x86, 0x30, 0x33, 0x6b, 0xd7, 0x32, 0x8a, 0xc0, 0xec, 0x44, 0x42, 0x5a,
+	0x8e, 0xcf, 0x5a, 0x3d, 0x48, 0x6b, 0xd7, 0x6a, 0x49, 0xc8, 0x1f, 0x75, 0x41, 0xbc, 0xdb, 0xb6,
+	0xe3, 0x33, 0xdb, 0xee, 0x81, 0x6c, 0x7b, 0xd7, 0xb2, 0x6d, 0x09, 0xdb, 0x9b, 0xc8, 0xf3, 0xb4,
+	0xfe, 0x05, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xae, 0xd1, 0x44, 0x10, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignServiceClient is the client API for CampaignService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignServiceClient interface {
+	// Returns the requested campaign in full detail.
+	GetCampaign(ctx context.Context, in *GetCampaignRequest, opts ...grpc.CallOption) (*resources.Campaign, error)
+	// Creates, updates, or removes campaigns. Operation statuses are returned.
+	MutateCampaigns(ctx context.Context, in *MutateCampaignsRequest, opts ...grpc.CallOption) (*MutateCampaignsResponse, error)
+}
+
+type campaignServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignServiceClient(cc grpc.ClientConnInterface) CampaignServiceClient {
+	return &campaignServiceClient{cc}
+}
+
+func (c *campaignServiceClient) GetCampaign(ctx context.Context, in *GetCampaignRequest, opts ...grpc.CallOption) (*resources.Campaign, error) {
+	out := new(resources.Campaign)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignService/GetCampaign", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignServiceClient) MutateCampaigns(ctx context.Context, in *MutateCampaignsRequest, opts ...grpc.CallOption) (*MutateCampaignsResponse, error) {
+	out := new(MutateCampaignsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignService/MutateCampaigns", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignServiceServer is the server API for CampaignService service.
+type CampaignServiceServer interface {
+	// Returns the requested campaign in full detail.
+	GetCampaign(context.Context, *GetCampaignRequest) (*resources.Campaign, error)
+	// Creates, updates, or removes campaigns. Operation statuses are returned.
+	MutateCampaigns(context.Context, *MutateCampaignsRequest) (*MutateCampaignsResponse, error)
+}
+
+// UnimplementedCampaignServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignServiceServer struct {
+}
+
+func (*UnimplementedCampaignServiceServer) GetCampaign(ctx context.Context, req *GetCampaignRequest) (*resources.Campaign, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaign not implemented")
+}
+func (*UnimplementedCampaignServiceServer) MutateCampaigns(ctx context.Context, req *MutateCampaignsRequest) (*MutateCampaignsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaigns not implemented")
+}
+
+func RegisterCampaignServiceServer(s *grpc.Server, srv CampaignServiceServer) {
+	s.RegisterService(&_CampaignService_serviceDesc, srv)
+}
+
+func _CampaignService_GetCampaign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignServiceServer).GetCampaign(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignService/GetCampaign",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignServiceServer).GetCampaign(ctx, req.(*GetCampaignRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignService_MutateCampaigns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignServiceServer).MutateCampaigns(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignService/MutateCampaigns",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignServiceServer).MutateCampaigns(ctx, req.(*MutateCampaignsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignService",
+	HandlerType: (*CampaignServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaign",
+			Handler:    _CampaignService_GetCampaign_Handler,
+		},
+		{
+			MethodName: "MutateCampaigns",
+			Handler:    _CampaignService_MutateCampaigns_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/campaign_shared_set_service.pb.go b/googleapis/ads/googleads/v3/services/campaign_shared_set_service.pb.go
new file mode 100644
index 0000000..6a5aeff
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/campaign_shared_set_service.pb.go
@@ -0,0 +1,500 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/campaign_shared_set_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CampaignSharedSetService.GetCampaignSharedSet][google.ads.googleads.v3.services.CampaignSharedSetService.GetCampaignSharedSet].
+type GetCampaignSharedSetRequest struct {
+	// Required. The resource name of the campaign shared set to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignSharedSetRequest) Reset()         { *m = GetCampaignSharedSetRequest{} }
+func (m *GetCampaignSharedSetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignSharedSetRequest) ProtoMessage()    {}
+func (*GetCampaignSharedSetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f69153fae607b70e, []int{0}
+}
+
+func (m *GetCampaignSharedSetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignSharedSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCampaignSharedSetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignSharedSetRequest.Merge(m, src)
+}
+func (m *GetCampaignSharedSetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Size(m)
+}
+func (m *GetCampaignSharedSetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignSharedSetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignSharedSetRequest proto.InternalMessageInfo
+
+func (m *GetCampaignSharedSetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignSharedSetService.MutateCampaignSharedSets][google.ads.googleads.v3.services.CampaignSharedSetService.MutateCampaignSharedSets].
+type MutateCampaignSharedSetsRequest struct {
+	// Required. The ID of the customer whose campaign shared sets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual campaign shared sets.
+	Operations []*CampaignSharedSetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetsRequest) Reset()         { *m = MutateCampaignSharedSetsRequest{} }
+func (m *MutateCampaignSharedSetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetsRequest) ProtoMessage()    {}
+func (*MutateCampaignSharedSetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f69153fae607b70e, []int{1}
+}
+
+func (m *MutateCampaignSharedSetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetsRequest.Merge(m, src)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Size(m)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignSharedSetsRequest) GetOperations() []*CampaignSharedSetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCampaignSharedSetsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCampaignSharedSetsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on an campaign shared set.
+type CampaignSharedSetOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignSharedSetOperation_Create
+	//	*CampaignSharedSetOperation_Remove
+	Operation            isCampaignSharedSetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CampaignSharedSetOperation) Reset()         { *m = CampaignSharedSetOperation{} }
+func (m *CampaignSharedSetOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetOperation) ProtoMessage()    {}
+func (*CampaignSharedSetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f69153fae607b70e, []int{2}
+}
+
+func (m *CampaignSharedSetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetOperation.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetOperation.Marshal(b, m, deterministic)
+}
+func (m *CampaignSharedSetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetOperation.Merge(m, src)
+}
+func (m *CampaignSharedSetOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetOperation.Size(m)
+}
+func (m *CampaignSharedSetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetOperation proto.InternalMessageInfo
+
+type isCampaignSharedSetOperation_Operation interface {
+	isCampaignSharedSetOperation_Operation()
+}
+
+type CampaignSharedSetOperation_Create struct {
+	Create *resources.CampaignSharedSet `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignSharedSetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignSharedSetOperation_Create) isCampaignSharedSetOperation_Operation() {}
+
+func (*CampaignSharedSetOperation_Remove) isCampaignSharedSetOperation_Operation() {}
+
+func (m *CampaignSharedSetOperation) GetOperation() isCampaignSharedSetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignSharedSetOperation) GetCreate() *resources.CampaignSharedSet {
+	if x, ok := m.GetOperation().(*CampaignSharedSetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignSharedSetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignSharedSetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CampaignSharedSetOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CampaignSharedSetOperation_Create)(nil),
+		(*CampaignSharedSetOperation_Remove)(nil),
+	}
+}
+
+// Response message for a campaign shared set mutate.
+type MutateCampaignSharedSetsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCampaignSharedSetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetsResponse) Reset()         { *m = MutateCampaignSharedSetsResponse{} }
+func (m *MutateCampaignSharedSetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetsResponse) ProtoMessage()    {}
+func (*MutateCampaignSharedSetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f69153fae607b70e, []int{3}
+}
+
+func (m *MutateCampaignSharedSetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetsResponse.Merge(m, src)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Size(m)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCampaignSharedSetsResponse) GetResults() []*MutateCampaignSharedSetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign shared set mutate.
+type MutateCampaignSharedSetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetResult) Reset()         { *m = MutateCampaignSharedSetResult{} }
+func (m *MutateCampaignSharedSetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetResult) ProtoMessage()    {}
+func (*MutateCampaignSharedSetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f69153fae607b70e, []int{4}
+}
+
+func (m *MutateCampaignSharedSetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCampaignSharedSetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetResult.Merge(m, src)
+}
+func (m *MutateCampaignSharedSetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Size(m)
+}
+func (m *MutateCampaignSharedSetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetResult proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignSharedSetRequest)(nil), "google.ads.googleads.v3.services.GetCampaignSharedSetRequest")
+	proto.RegisterType((*MutateCampaignSharedSetsRequest)(nil), "google.ads.googleads.v3.services.MutateCampaignSharedSetsRequest")
+	proto.RegisterType((*CampaignSharedSetOperation)(nil), "google.ads.googleads.v3.services.CampaignSharedSetOperation")
+	proto.RegisterType((*MutateCampaignSharedSetsResponse)(nil), "google.ads.googleads.v3.services.MutateCampaignSharedSetsResponse")
+	proto.RegisterType((*MutateCampaignSharedSetResult)(nil), "google.ads.googleads.v3.services.MutateCampaignSharedSetResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/campaign_shared_set_service.proto", fileDescriptor_f69153fae607b70e)
+}
+
+var fileDescriptor_f69153fae607b70e = []byte{
+	// 717 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcb, 0x6a, 0xdb, 0x4c,
+	0x14, 0xfe, 0x65, 0x87, 0xfc, 0x7f, 0xc6, 0xc9, 0x5f, 0x98, 0xde, 0x84, 0xd3, 0x10, 0xa3, 0x06,
+	0x6a, 0x4c, 0x91, 0xc0, 0x0e, 0x2d, 0x28, 0x09, 0x45, 0x6e, 0x1b, 0xa7, 0xd0, 0x26, 0x41, 0x86,
+	0x40, 0x5b, 0x83, 0x98, 0x48, 0x13, 0x45, 0x20, 0x69, 0xd4, 0x99, 0x91, 0x21, 0x84, 0x6c, 0x4a,
+	0xdf, 0x20, 0x7d, 0x82, 0x2e, 0xfb, 0x1e, 0xdd, 0x64, 0xdb, 0x55, 0xb3, 0xea, 0xa2, 0xab, 0x3e,
+	0x41, 0x57, 0xa5, 0xe8, 0x32, 0xbe, 0xc4, 0x51, 0x0c, 0xe9, 0xee, 0x68, 0xce, 0x99, 0xef, 0x7c,
+	0xdf, 0x9c, 0x8b, 0x40, 0xdb, 0x25, 0xc4, 0xf5, 0xb1, 0x86, 0x1c, 0xa6, 0x65, 0x66, 0x62, 0xf5,
+	0x5b, 0x1a, 0xc3, 0xb4, 0xef, 0xd9, 0x98, 0x69, 0x36, 0x0a, 0x22, 0xe4, 0xb9, 0xa1, 0xc5, 0x0e,
+	0x11, 0xc5, 0x8e, 0xc5, 0x30, 0xb7, 0x72, 0xa7, 0x1a, 0x51, 0xc2, 0x09, 0xac, 0x65, 0x17, 0x55,
+	0xe4, 0x30, 0x75, 0x80, 0xa1, 0xf6, 0x5b, 0xaa, 0xc0, 0xa8, 0xae, 0x15, 0x65, 0xa1, 0x98, 0x91,
+	0x98, 0x16, 0xa4, 0xc9, 0xe0, 0xab, 0xf7, 0xc4, 0xe5, 0xc8, 0xd3, 0x50, 0x18, 0x12, 0x8e, 0xb8,
+	0x47, 0x42, 0x96, 0x7b, 0xef, 0x8e, 0x78, 0x6d, 0xdf, 0xc3, 0xa1, 0xb8, 0xb6, 0x3c, 0xe2, 0x38,
+	0xf0, 0xb0, 0xef, 0x58, 0xfb, 0xf8, 0x10, 0xf5, 0x3d, 0x42, 0x2f, 0xdc, 0xa4, 0x91, 0xad, 0x31,
+	0x8e, 0x78, 0x9c, 0x43, 0x2a, 0x1d, 0xb0, 0xd8, 0xc1, 0xfc, 0x69, 0x4e, 0xa8, 0x9b, 0xf2, 0xe9,
+	0x62, 0x6e, 0xe2, 0x77, 0x31, 0x66, 0x1c, 0xd6, 0xc1, 0x82, 0xa0, 0x6d, 0x85, 0x28, 0xc0, 0xb2,
+	0x54, 0x93, 0xea, 0x73, 0xed, 0xf2, 0x77, 0xa3, 0x64, 0xce, 0x0b, 0xcf, 0x36, 0x0a, 0xb0, 0xf2,
+	0x4b, 0x02, 0xcb, 0xaf, 0x62, 0x8e, 0x38, 0x9e, 0x00, 0x63, 0x02, 0x6d, 0x05, 0x54, 0xec, 0x98,
+	0x71, 0x12, 0x60, 0x6a, 0x79, 0xce, 0x28, 0x16, 0x10, 0xe7, 0x2f, 0x1c, 0x88, 0x00, 0x20, 0x11,
+	0xa6, 0x99, 0x72, 0xb9, 0x54, 0x2b, 0xd7, 0x2b, 0xcd, 0x75, 0x75, 0xda, 0xbb, 0xab, 0x13, 0x69,
+	0x77, 0x04, 0x48, 0x9e, 0x62, 0x08, 0x0a, 0x1f, 0x80, 0x1b, 0x11, 0xa2, 0xdc, 0x43, 0xbe, 0x75,
+	0x80, 0x3c, 0x3f, 0xa6, 0x58, 0x2e, 0xd7, 0xa4, 0xfa, 0x7f, 0xe6, 0xff, 0xf9, 0xf1, 0x66, 0x76,
+	0x0a, 0xef, 0x83, 0x85, 0x3e, 0xf2, 0x3d, 0x07, 0x71, 0x6c, 0x91, 0xd0, 0x3f, 0x92, 0x67, 0xd2,
+	0xb0, 0x79, 0x71, 0xb8, 0x13, 0xfa, 0x47, 0xca, 0xa9, 0x04, 0xaa, 0xc5, 0xd9, 0xe1, 0x36, 0x98,
+	0xb5, 0x29, 0x46, 0x3c, 0x7b, 0xbc, 0x4a, 0x73, 0xb5, 0x50, 0xcb, 0xa0, 0x43, 0x26, 0xc5, 0x6c,
+	0xfd, 0x63, 0xe6, 0x28, 0x50, 0x06, 0xb3, 0x14, 0x07, 0xa4, 0x9f, 0x71, 0x9e, 0x4b, 0x3c, 0xd9,
+	0x77, 0xbb, 0x02, 0xe6, 0x06, 0x22, 0x95, 0x2f, 0x12, 0xa8, 0x15, 0x17, 0x84, 0x45, 0x24, 0x64,
+	0x18, 0x6e, 0x82, 0xdb, 0x17, 0x1e, 0xc2, 0xc2, 0x94, 0x12, 0x9a, 0x42, 0x57, 0x9a, 0x50, 0x50,
+	0xa5, 0x91, 0xad, 0x76, 0xd3, 0xbe, 0x31, 0x6f, 0x8e, 0x3f, 0xd1, 0xf3, 0x24, 0x1c, 0xbe, 0x06,
+	0xff, 0x52, 0xcc, 0x62, 0x9f, 0x8b, 0x82, 0x3d, 0x99, 0x5e, 0xb0, 0x02, 0x72, 0x66, 0x8a, 0x63,
+	0x0a, 0x3c, 0xe5, 0x19, 0x58, 0xba, 0x32, 0x32, 0xa9, 0xd1, 0x25, 0x3d, 0x3a, 0xde, 0x9e, 0xcd,
+	0x8f, 0x33, 0x40, 0x9e, 0x00, 0xe8, 0x66, 0x54, 0xe0, 0x37, 0x09, 0xdc, 0xba, 0x6c, 0x0a, 0xe0,
+	0xc6, 0x74, 0x15, 0x57, 0x4c, 0x4f, 0xf5, 0x5a, 0x95, 0x56, 0x5e, 0x9e, 0x1b, 0xe3, 0x82, 0xde,
+	0x7f, 0xfd, 0x71, 0x5a, 0x7a, 0x04, 0x57, 0x93, 0x25, 0x72, 0x3c, 0xe6, 0xd9, 0x10, 0x63, 0xc3,
+	0xb4, 0xc6, 0x60, 0xab, 0x0c, 0xcb, 0xac, 0x35, 0x4e, 0xe0, 0x6f, 0x09, 0xc8, 0x45, 0x6d, 0x00,
+	0x8d, 0x6b, 0x57, 0x49, 0xcc, 0x74, 0xb5, 0xfd, 0x37, 0x10, 0x59, 0x17, 0x2a, 0x6f, 0xcf, 0x8d,
+	0x3b, 0x23, 0x8b, 0xe1, 0xe1, 0x70, 0x52, 0x53, 0xe9, 0xeb, 0xca, 0xe3, 0x44, 0xfa, 0x50, 0xeb,
+	0xf1, 0x48, 0xf0, 0x46, 0xe3, 0xe4, 0x12, 0xe5, 0x7a, 0x90, 0xe6, 0xd4, 0xa5, 0x46, 0x75, 0xf1,
+	0xcc, 0x90, 0x87, 0xbc, 0x72, 0x2b, 0xf2, 0x98, 0x6a, 0x93, 0xa0, 0xfd, 0xa1, 0x04, 0x56, 0x6c,
+	0x12, 0x4c, 0xd5, 0xd0, 0x5e, 0x2a, 0x6a, 0x9e, 0xdd, 0x64, 0x8d, 0xee, 0x4a, 0x6f, 0xb6, 0x72,
+	0x08, 0x97, 0xf8, 0x28, 0x74, 0x55, 0x42, 0x5d, 0xcd, 0xc5, 0x61, 0xba, 0x64, 0xb5, 0x61, 0xd2,
+	0xe2, 0x7f, 0xcf, 0x9a, 0x30, 0x3e, 0x95, 0xca, 0x1d, 0xc3, 0xf8, 0x5c, 0xaa, 0x75, 0x32, 0x40,
+	0xc3, 0x61, 0x6a, 0x66, 0x26, 0xd6, 0x5e, 0x4b, 0xcd, 0x13, 0xb3, 0x33, 0x11, 0xd2, 0x33, 0x1c,
+	0xd6, 0x1b, 0x84, 0xf4, 0xf6, 0x5a, 0x3d, 0x11, 0xf2, 0xb3, 0xb4, 0x92, 0x9d, 0xeb, 0xba, 0xe1,
+	0x30, 0x5d, 0x1f, 0x04, 0xe9, 0xfa, 0x5e, 0x4b, 0xd7, 0x45, 0xd8, 0xfe, 0x6c, 0xca, 0xb3, 0xf5,
+	0x27, 0x00, 0x00, 0xff, 0xff, 0x83, 0xa0, 0x28, 0xf8, 0x22, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CampaignSharedSetServiceClient is the client API for CampaignSharedSetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignSharedSetServiceClient interface {
+	// Returns the requested campaign shared set in full detail.
+	GetCampaignSharedSet(ctx context.Context, in *GetCampaignSharedSetRequest, opts ...grpc.CallOption) (*resources.CampaignSharedSet, error)
+	// Creates or removes campaign shared sets. Operation statuses are returned.
+	MutateCampaignSharedSets(ctx context.Context, in *MutateCampaignSharedSetsRequest, opts ...grpc.CallOption) (*MutateCampaignSharedSetsResponse, error)
+}
+
+type campaignSharedSetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCampaignSharedSetServiceClient(cc grpc.ClientConnInterface) CampaignSharedSetServiceClient {
+	return &campaignSharedSetServiceClient{cc}
+}
+
+func (c *campaignSharedSetServiceClient) GetCampaignSharedSet(ctx context.Context, in *GetCampaignSharedSetRequest, opts ...grpc.CallOption) (*resources.CampaignSharedSet, error) {
+	out := new(resources.CampaignSharedSet)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignSharedSetService/GetCampaignSharedSet", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignSharedSetServiceClient) MutateCampaignSharedSets(ctx context.Context, in *MutateCampaignSharedSetsRequest, opts ...grpc.CallOption) (*MutateCampaignSharedSetsResponse, error) {
+	out := new(MutateCampaignSharedSetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CampaignSharedSetService/MutateCampaignSharedSets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignSharedSetServiceServer is the server API for CampaignSharedSetService service.
+type CampaignSharedSetServiceServer interface {
+	// Returns the requested campaign shared set in full detail.
+	GetCampaignSharedSet(context.Context, *GetCampaignSharedSetRequest) (*resources.CampaignSharedSet, error)
+	// Creates or removes campaign shared sets. Operation statuses are returned.
+	MutateCampaignSharedSets(context.Context, *MutateCampaignSharedSetsRequest) (*MutateCampaignSharedSetsResponse, error)
+}
+
+// UnimplementedCampaignSharedSetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCampaignSharedSetServiceServer struct {
+}
+
+func (*UnimplementedCampaignSharedSetServiceServer) GetCampaignSharedSet(ctx context.Context, req *GetCampaignSharedSetRequest) (*resources.CampaignSharedSet, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCampaignSharedSet not implemented")
+}
+func (*UnimplementedCampaignSharedSetServiceServer) MutateCampaignSharedSets(ctx context.Context, req *MutateCampaignSharedSetsRequest) (*MutateCampaignSharedSetsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCampaignSharedSets not implemented")
+}
+
+func RegisterCampaignSharedSetServiceServer(s *grpc.Server, srv CampaignSharedSetServiceServer) {
+	s.RegisterService(&_CampaignSharedSetService_serviceDesc, srv)
+}
+
+func _CampaignSharedSetService_GetCampaignSharedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignSharedSetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignSharedSetServiceServer).GetCampaignSharedSet(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignSharedSetService/GetCampaignSharedSet",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignSharedSetServiceServer).GetCampaignSharedSet(ctx, req.(*GetCampaignSharedSetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignSharedSetService_MutateCampaignSharedSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignSharedSetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignSharedSetServiceServer).MutateCampaignSharedSets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CampaignSharedSetService/MutateCampaignSharedSets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignSharedSetServiceServer).MutateCampaignSharedSets(ctx, req.(*MutateCampaignSharedSetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignSharedSetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CampaignSharedSetService",
+	HandlerType: (*CampaignSharedSetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignSharedSet",
+			Handler:    _CampaignSharedSetService_GetCampaignSharedSet_Handler,
+		},
+		{
+			MethodName: "MutateCampaignSharedSets",
+			Handler:    _CampaignSharedSetService_MutateCampaignSharedSets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/campaign_shared_set_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/carrier_constant_service.pb.go b/googleapis/ads/googleads/v3/services/carrier_constant_service.pb.go
new file mode 100644
index 0000000..d8c3d57
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/carrier_constant_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/carrier_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CarrierConstantService.GetCarrierConstant][google.ads.googleads.v3.services.CarrierConstantService.GetCarrierConstant].
+type GetCarrierConstantRequest struct {
+	// Required. Resource name of the carrier constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCarrierConstantRequest) Reset()         { *m = GetCarrierConstantRequest{} }
+func (m *GetCarrierConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCarrierConstantRequest) ProtoMessage()    {}
+func (*GetCarrierConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3024993599d2a450, []int{0}
+}
+
+func (m *GetCarrierConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCarrierConstantRequest.Unmarshal(m, b)
+}
+func (m *GetCarrierConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCarrierConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCarrierConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCarrierConstantRequest.Merge(m, src)
+}
+func (m *GetCarrierConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCarrierConstantRequest.Size(m)
+}
+func (m *GetCarrierConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCarrierConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCarrierConstantRequest proto.InternalMessageInfo
+
+func (m *GetCarrierConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCarrierConstantRequest)(nil), "google.ads.googleads.v3.services.GetCarrierConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/carrier_constant_service.proto", fileDescriptor_3024993599d2a450)
+}
+
+var fileDescriptor_3024993599d2a450 = []byte{
+	// 403 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd3, 0x40,
+	0x18, 0x27, 0x29, 0x08, 0x06, 0xbd, 0xe4, 0xa0, 0x35, 0x15, 0x2c, 0xa5, 0x48, 0xf1, 0x30, 0x03,
+	0xcd, 0x45, 0xa6, 0xa8, 0x4c, 0x8b, 0xd4, 0x93, 0x94, 0x0a, 0x3d, 0x48, 0x20, 0x4c, 0x93, 0x31,
+	0x0e, 0x24, 0x33, 0x75, 0x26, 0xcd, 0x45, 0xbc, 0xf4, 0x15, 0x7c, 0x03, 0x8f, 0xbe, 0x87, 0x97,
+	0x5e, 0xbd, 0xed, 0x69, 0x0f, 0x7b, 0xda, 0x77, 0x58, 0x58, 0xd2, 0xc9, 0xa4, 0x7f, 0xb6, 0xa1,
+	0xb7, 0x1f, 0xf9, 0xfd, 0xfb, 0xbe, 0x6f, 0xe2, 0x7c, 0x48, 0x84, 0x48, 0x52, 0x0a, 0x49, 0xac,
+	0xa0, 0x86, 0x25, 0x2a, 0x7c, 0xa8, 0xa8, 0x2c, 0x58, 0x44, 0x15, 0x8c, 0x88, 0x94, 0x8c, 0xca,
+	0x30, 0x12, 0x5c, 0xe5, 0x84, 0xe7, 0x61, 0xc5, 0x80, 0x95, 0x14, 0xb9, 0x70, 0xbb, 0xda, 0x05,
+	0x48, 0xac, 0x40, 0x1d, 0x00, 0x0a, 0x1f, 0x98, 0x00, 0xef, 0x6d, 0x53, 0x85, 0xa4, 0x4a, 0xac,
+	0xe5, 0xb9, 0x0e, 0x9d, 0xed, 0xbd, 0x34, 0xce, 0x15, 0x83, 0x84, 0x73, 0x91, 0x93, 0x9c, 0x09,
+	0xae, 0x2a, 0xf6, 0xf9, 0x01, 0x1b, 0xa5, 0x8c, 0xd6, 0xb6, 0x57, 0x07, 0xc4, 0x37, 0x46, 0xd3,
+	0x38, 0x5c, 0xd2, 0xef, 0xa4, 0x60, 0x42, 0x6a, 0x41, 0xef, 0xa3, 0xf3, 0x62, 0x4a, 0xf3, 0x89,
+	0x2e, 0x9d, 0x54, 0x9d, 0x73, 0xfa, 0x63, 0x4d, 0x55, 0xee, 0x0e, 0x9c, 0xa7, 0x66, 0xb0, 0x90,
+	0x93, 0x8c, 0xb6, 0xad, 0xae, 0x35, 0x78, 0x3c, 0x6e, 0x5d, 0x63, 0x7b, 0xfe, 0xc4, 0x30, 0x9f,
+	0x49, 0x46, 0x87, 0x77, 0x96, 0xf3, 0xec, 0x24, 0xe4, 0x8b, 0x5e, 0xda, 0xfd, 0x67, 0x39, 0xee,
+	0xc3, 0x0a, 0x77, 0x04, 0x2e, 0x5d, 0x0b, 0x34, 0x0e, 0xe6, 0x0d, 0x1b, 0xcd, 0xf5, 0x21, 0xc1,
+	0x89, 0xb5, 0xf7, 0xfe, 0x0a, 0x1f, 0x6f, 0xb3, 0xf9, 0x7f, 0xf3, 0xdb, 0x1e, 0xb8, 0xaf, 0xcb,
+	0xfb, 0xff, 0x3c, 0x62, 0xde, 0x45, 0xc7, 0x5e, 0x05, 0xdf, 0xfc, 0xf2, 0x3a, 0x5b, 0xdc, 0xde,
+	0x57, 0x55, 0x68, 0xc5, 0x14, 0x88, 0x44, 0x36, 0xde, 0xd8, 0x4e, 0x3f, 0x12, 0xd9, 0xc5, 0x9d,
+	0xc6, 0x9d, 0xf3, 0x57, 0x9a, 0x95, 0x8f, 0x31, 0xb3, 0xbe, 0x7e, 0xaa, 0x02, 0x12, 0x91, 0x12,
+	0x9e, 0x00, 0x21, 0x13, 0x98, 0x50, 0xbe, 0x7b, 0x2a, 0xb8, 0xaf, 0x6c, 0xfe, 0x45, 0x47, 0x06,
+	0xfc, 0xb1, 0x5b, 0x53, 0x8c, 0xff, 0xda, 0xdd, 0xa9, 0x0e, 0xc4, 0xb1, 0x02, 0x1a, 0x96, 0x68,
+	0xe1, 0x83, 0xaa, 0x58, 0x6d, 0x8d, 0x24, 0xc0, 0xb1, 0x0a, 0x6a, 0x49, 0xb0, 0xf0, 0x03, 0x23,
+	0xb9, 0xb5, 0xfb, 0xfa, 0x3b, 0x42, 0x38, 0x56, 0x08, 0xd5, 0x22, 0x84, 0x16, 0x3e, 0x42, 0x46,
+	0xb6, 0x7c, 0xb4, 0x9b, 0xd3, 0xbf, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x69, 0x87, 0x81, 0x13, 0x49,
+	0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CarrierConstantServiceClient is the client API for CarrierConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CarrierConstantServiceClient interface {
+	// Returns the requested carrier constant in full detail.
+	GetCarrierConstant(ctx context.Context, in *GetCarrierConstantRequest, opts ...grpc.CallOption) (*resources.CarrierConstant, error)
+}
+
+type carrierConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCarrierConstantServiceClient(cc grpc.ClientConnInterface) CarrierConstantServiceClient {
+	return &carrierConstantServiceClient{cc}
+}
+
+func (c *carrierConstantServiceClient) GetCarrierConstant(ctx context.Context, in *GetCarrierConstantRequest, opts ...grpc.CallOption) (*resources.CarrierConstant, error) {
+	out := new(resources.CarrierConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CarrierConstantService/GetCarrierConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CarrierConstantServiceServer is the server API for CarrierConstantService service.
+type CarrierConstantServiceServer interface {
+	// Returns the requested carrier constant in full detail.
+	GetCarrierConstant(context.Context, *GetCarrierConstantRequest) (*resources.CarrierConstant, error)
+}
+
+// UnimplementedCarrierConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCarrierConstantServiceServer struct {
+}
+
+func (*UnimplementedCarrierConstantServiceServer) GetCarrierConstant(ctx context.Context, req *GetCarrierConstantRequest) (*resources.CarrierConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCarrierConstant not implemented")
+}
+
+func RegisterCarrierConstantServiceServer(s *grpc.Server, srv CarrierConstantServiceServer) {
+	s.RegisterService(&_CarrierConstantService_serviceDesc, srv)
+}
+
+func _CarrierConstantService_GetCarrierConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCarrierConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CarrierConstantServiceServer).GetCarrierConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CarrierConstantService/GetCarrierConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CarrierConstantServiceServer).GetCarrierConstant(ctx, req.(*GetCarrierConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CarrierConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CarrierConstantService",
+	HandlerType: (*CarrierConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCarrierConstant",
+			Handler:    _CarrierConstantService_GetCarrierConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/carrier_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/change_status_service.pb.go b/googleapis/ads/googleads/v3/services/change_status_service.pb.go
new file mode 100644
index 0000000..3de449f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/change_status_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/change_status_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for '[ChangeStatusService.GetChangeStatus][google.ads.googleads.v3.services.ChangeStatusService.GetChangeStatus]'.
+type GetChangeStatusRequest struct {
+	// Required. The resource name of the change status to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetChangeStatusRequest) Reset()         { *m = GetChangeStatusRequest{} }
+func (m *GetChangeStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*GetChangeStatusRequest) ProtoMessage()    {}
+func (*GetChangeStatusRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3052f9cea2195dd0, []int{0}
+}
+
+func (m *GetChangeStatusRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetChangeStatusRequest.Unmarshal(m, b)
+}
+func (m *GetChangeStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetChangeStatusRequest.Marshal(b, m, deterministic)
+}
+func (m *GetChangeStatusRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetChangeStatusRequest.Merge(m, src)
+}
+func (m *GetChangeStatusRequest) XXX_Size() int {
+	return xxx_messageInfo_GetChangeStatusRequest.Size(m)
+}
+func (m *GetChangeStatusRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetChangeStatusRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetChangeStatusRequest proto.InternalMessageInfo
+
+func (m *GetChangeStatusRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetChangeStatusRequest)(nil), "google.ads.googleads.v3.services.GetChangeStatusRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/change_status_service.proto", fileDescriptor_3052f9cea2195dd0)
+}
+
+var fileDescriptor_3052f9cea2195dd0 = []byte{
+	// 412 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd3, 0x40,
+	0x18, 0x27, 0x29, 0x08, 0x06, 0x45, 0x88, 0xa0, 0x25, 0x0a, 0x96, 0xd2, 0x43, 0xe9, 0x61, 0x46,
+	0x0c, 0x82, 0x8c, 0x7a, 0x98, 0x08, 0xd6, 0x93, 0x94, 0x16, 0x7a, 0x90, 0x40, 0x98, 0x26, 0x63,
+	0x1a, 0x48, 0x66, 0x6a, 0x66, 0x92, 0x8b, 0x78, 0xf1, 0x15, 0x7c, 0x03, 0x8f, 0x3e, 0x87, 0xa7,
+	0x5e, 0xf7, 0xb6, 0xa7, 0x3d, 0xec, 0x69, 0xdf, 0x60, 0x4f, 0xbb, 0x24, 0x93, 0x49, 0xd3, 0xdd,
+	0x96, 0xde, 0x7e, 0xe4, 0xf7, 0xef, 0xfb, 0xbe, 0x89, 0xf5, 0x21, 0xe6, 0x3c, 0x4e, 0x29, 0x24,
+	0x91, 0x80, 0x0a, 0x56, 0xa8, 0x74, 0xa1, 0xa0, 0x79, 0x99, 0x84, 0x54, 0xc0, 0x70, 0x4d, 0x58,
+	0x4c, 0x03, 0x21, 0x89, 0x2c, 0x44, 0xd0, 0x7c, 0x06, 0x9b, 0x9c, 0x4b, 0x6e, 0x0f, 0x94, 0x05,
+	0x90, 0x48, 0x80, 0xd6, 0x0d, 0x4a, 0x17, 0x68, 0xb7, 0xf3, 0xf6, 0x58, 0x7e, 0x4e, 0x05, 0x2f,
+	0xf2, 0x7b, 0x05, 0x2a, 0xd8, 0x79, 0xa9, 0x6d, 0x9b, 0x04, 0x12, 0xc6, 0xb8, 0x24, 0x32, 0xe1,
+	0x4c, 0xb3, 0xcf, 0x3b, 0x6c, 0x98, 0x26, 0x94, 0xc9, 0x86, 0x78, 0xd5, 0x21, 0xbe, 0x27, 0x34,
+	0x8d, 0x82, 0x15, 0x5d, 0x93, 0x32, 0xe1, 0xb9, 0x12, 0x0c, 0x3d, 0xeb, 0xd9, 0x94, 0xca, 0x4f,
+	0x75, 0xe3, 0xa2, 0x2e, 0x9c, 0xd3, 0x1f, 0x05, 0x15, 0xd2, 0x1e, 0x5b, 0x8f, 0xf5, 0x48, 0x01,
+	0x23, 0x19, 0xed, 0x1b, 0x03, 0x63, 0xfc, 0xd0, 0xeb, 0x5d, 0x60, 0x73, 0xfe, 0x48, 0x33, 0x5f,
+	0x49, 0x46, 0xdf, 0x5c, 0x1b, 0xd6, 0xd3, 0x6e, 0xc2, 0x42, 0xed, 0x6a, 0xff, 0x37, 0xac, 0x27,
+	0x77, 0xc2, 0xed, 0x77, 0xe0, 0xd4, 0x85, 0xc0, 0xe1, 0x79, 0x1c, 0x78, 0xd4, 0xd9, 0x5e, 0x0e,
+	0x74, 0x7d, 0xc3, 0xcf, 0xe7, 0x78, 0x7f, 0x83, 0xdf, 0x67, 0x97, 0x7f, 0xcc, 0xd7, 0x36, 0xa8,
+	0xae, 0xfd, 0x73, 0x8f, 0xf9, 0x18, 0x16, 0x42, 0xf2, 0x8c, 0xe6, 0x02, 0x4e, 0x9a, 0xf3, 0xab,
+	0x10, 0x38, 0xf9, 0xe5, 0xbc, 0xd8, 0xe2, 0xfe, 0xae, 0xaf, 0x41, 0x9b, 0x44, 0x80, 0x90, 0x67,
+	0xde, 0x8d, 0x61, 0x8d, 0x42, 0x9e, 0x9d, 0xdc, 0xca, 0xeb, 0x1f, 0xb8, 0xd0, 0xac, 0x7a, 0x82,
+	0x99, 0xf1, 0xed, 0x4b, 0xe3, 0x8e, 0x79, 0x4a, 0x58, 0x0c, 0x78, 0x1e, 0xc3, 0x98, 0xb2, 0xfa,
+	0x81, 0xe0, 0xae, 0xef, 0xf8, 0x2f, 0xf9, 0x5e, 0x83, 0xbf, 0x66, 0x6f, 0x8a, 0xf1, 0x3f, 0x73,
+	0x30, 0x55, 0x81, 0x38, 0x12, 0x40, 0xc1, 0x0a, 0x2d, 0x5d, 0xd0, 0x14, 0x8b, 0xad, 0x96, 0xf8,
+	0x38, 0x12, 0x7e, 0x2b, 0xf1, 0x97, 0xae, 0xaf, 0x25, 0x57, 0xe6, 0x48, 0x7d, 0x47, 0x08, 0x47,
+	0x02, 0xa1, 0x56, 0x84, 0xd0, 0xd2, 0x45, 0x48, 0xcb, 0x56, 0x0f, 0xea, 0x39, 0xdd, 0xdb, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x61, 0x3a, 0x08, 0x1b, 0x39, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ChangeStatusServiceClient is the client API for ChangeStatusService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ChangeStatusServiceClient interface {
+	// Returns the requested change status in full detail.
+	GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error)
+}
+
+type changeStatusServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewChangeStatusServiceClient(cc grpc.ClientConnInterface) ChangeStatusServiceClient {
+	return &changeStatusServiceClient{cc}
+}
+
+func (c *changeStatusServiceClient) GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error) {
+	out := new(resources.ChangeStatus)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ChangeStatusService/GetChangeStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ChangeStatusServiceServer is the server API for ChangeStatusService service.
+type ChangeStatusServiceServer interface {
+	// Returns the requested change status in full detail.
+	GetChangeStatus(context.Context, *GetChangeStatusRequest) (*resources.ChangeStatus, error)
+}
+
+// UnimplementedChangeStatusServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedChangeStatusServiceServer struct {
+}
+
+func (*UnimplementedChangeStatusServiceServer) GetChangeStatus(ctx context.Context, req *GetChangeStatusRequest) (*resources.ChangeStatus, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetChangeStatus not implemented")
+}
+
+func RegisterChangeStatusServiceServer(s *grpc.Server, srv ChangeStatusServiceServer) {
+	s.RegisterService(&_ChangeStatusService_serviceDesc, srv)
+}
+
+func _ChangeStatusService_GetChangeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetChangeStatusRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ChangeStatusService/GetChangeStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, req.(*GetChangeStatusRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ChangeStatusService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ChangeStatusService",
+	HandlerType: (*ChangeStatusServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetChangeStatus",
+			Handler:    _ChangeStatusService_GetChangeStatus_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/change_status_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/click_view_service.pb.go b/googleapis/ads/googleads/v3/services/click_view_service.pb.go
new file mode 100644
index 0000000..35cb7ac
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/click_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/click_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ClickViewService.GetClickView][google.ads.googleads.v3.services.ClickViewService.GetClickView].
+type GetClickViewRequest struct {
+	// Required. The resource name of the click view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetClickViewRequest) Reset()         { *m = GetClickViewRequest{} }
+func (m *GetClickViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetClickViewRequest) ProtoMessage()    {}
+func (*GetClickViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_894a9152e8b8f104, []int{0}
+}
+
+func (m *GetClickViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetClickViewRequest.Unmarshal(m, b)
+}
+func (m *GetClickViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetClickViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetClickViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetClickViewRequest.Merge(m, src)
+}
+func (m *GetClickViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetClickViewRequest.Size(m)
+}
+func (m *GetClickViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetClickViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetClickViewRequest proto.InternalMessageInfo
+
+func (m *GetClickViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetClickViewRequest)(nil), "google.ads.googleads.v3.services.GetClickViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/click_view_service.proto", fileDescriptor_894a9152e8b8f104)
+}
+
+var fileDescriptor_894a9152e8b8f104 = []byte{
+	// 413 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd3, 0x40,
+	0x18, 0x27, 0x29, 0x08, 0x86, 0x0a, 0x12, 0x11, 0x4b, 0x14, 0x2c, 0xa5, 0x87, 0x52, 0xca, 0x0c,
+	0x34, 0x78, 0x70, 0x44, 0x64, 0xaa, 0x50, 0x4f, 0x52, 0x2a, 0xe4, 0x20, 0x81, 0x30, 0x4d, 0x3e,
+	0xe3, 0x60, 0x92, 0xa9, 0x99, 0x34, 0x3d, 0x88, 0x17, 0x5f, 0xc1, 0x37, 0xf0, 0xe8, 0x1b, 0xf8,
+	0x0a, 0xbd, 0xee, 0x6d, 0x4f, 0x7b, 0xd8, 0xd3, 0xee, 0x2b, 0xec, 0x61, 0x49, 0x27, 0x93, 0xb6,
+	0xcb, 0x96, 0xde, 0x7e, 0xcc, 0xef, 0xcf, 0xf7, 0x7d, 0xbf, 0xc4, 0x7a, 0x1d, 0x0b, 0x11, 0x27,
+	0x80, 0x59, 0x24, 0xb1, 0x82, 0x15, 0x2a, 0x5d, 0x2c, 0x21, 0x2f, 0x79, 0x08, 0x12, 0x87, 0x09,
+	0x0f, 0xbf, 0x07, 0x25, 0x87, 0x75, 0x50, 0xbf, 0xa1, 0x65, 0x2e, 0x0a, 0x61, 0x77, 0x95, 0x1e,
+	0xb1, 0x48, 0xa2, 0xc6, 0x8a, 0x4a, 0x17, 0x69, 0xab, 0x33, 0x3e, 0x16, 0x9e, 0x83, 0x14, 0xab,
+	0xfc, 0x30, 0x5d, 0xa5, 0x3a, 0x2f, 0xb4, 0x67, 0xc9, 0x31, 0xcb, 0x32, 0x51, 0xb0, 0x82, 0x8b,
+	0x4c, 0xd6, 0xec, 0xb3, 0x3d, 0x36, 0x4c, 0x38, 0x64, 0x45, 0x4d, 0xbc, 0xdc, 0x23, 0xbe, 0x72,
+	0x48, 0xa2, 0x60, 0x01, 0xdf, 0x58, 0xc9, 0x45, 0xae, 0x04, 0xbd, 0x77, 0xd6, 0x93, 0x29, 0x14,
+	0xef, 0xab, 0x71, 0x1e, 0x87, 0xf5, 0x1c, 0x7e, 0xac, 0x40, 0x16, 0xf6, 0xc0, 0x7a, 0xa4, 0x97,
+	0x09, 0x32, 0x96, 0x42, 0xc7, 0xe8, 0x1a, 0x83, 0x87, 0x93, 0xd6, 0x05, 0x35, 0xe7, 0x6d, 0xcd,
+	0x7c, 0x62, 0x29, 0x8c, 0xaf, 0x0d, 0xeb, 0x71, 0x63, 0xff, 0xac, 0x4e, 0xb4, 0xff, 0x1b, 0x56,
+	0x7b, 0x3f, 0xd6, 0x7e, 0x85, 0x4e, 0xb5, 0x82, 0xee, 0x59, 0xc3, 0x19, 0x1d, 0xb5, 0x35, 0x55,
+	0xa1, 0xc6, 0xd4, 0xfb, 0x70, 0x4e, 0x0f, 0xb7, 0xfe, 0x7d, 0x76, 0xf9, 0xc7, 0x44, 0xf6, 0xa8,
+	0xea, 0xf6, 0xe7, 0x01, 0xf3, 0x36, 0x5c, 0xc9, 0x42, 0xa4, 0x90, 0x4b, 0x3c, 0x54, 0x65, 0x57,
+	0x09, 0x12, 0x0f, 0x7f, 0x39, 0xcf, 0x37, 0xb4, 0xb3, 0x1b, 0x55, 0xa3, 0x25, 0x97, 0x28, 0x14,
+	0xe9, 0xe4, 0xc6, 0xb0, 0xfa, 0xa1, 0x48, 0x4f, 0x5e, 0x33, 0x79, 0x7a, 0xb7, 0x93, 0x59, 0x55,
+	0xf7, 0xcc, 0xf8, 0xf2, 0xb1, 0xb6, 0xc6, 0x22, 0x61, 0x59, 0x8c, 0x44, 0x1e, 0xe3, 0x18, 0xb2,
+	0xed, 0xc7, 0xc0, 0xbb, 0x61, 0xc7, 0x7f, 0xbc, 0x37, 0x1a, 0xfc, 0x35, 0x5b, 0x53, 0x4a, 0xff,
+	0x99, 0xdd, 0xa9, 0x0a, 0xa4, 0x91, 0x44, 0x0a, 0x56, 0xc8, 0x73, 0x51, 0x3d, 0x58, 0x6e, 0xb4,
+	0xc4, 0xa7, 0x91, 0xf4, 0x1b, 0x89, 0xef, 0xb9, 0xbe, 0x96, 0x5c, 0x99, 0x7d, 0xf5, 0x4e, 0x08,
+	0x8d, 0x24, 0x21, 0x8d, 0x88, 0x10, 0xcf, 0x25, 0x44, 0xcb, 0x16, 0x0f, 0xb6, 0x7b, 0xba, 0xb7,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xc9, 0xf7, 0x89, 0x1f, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ClickViewServiceClient is the client API for ClickViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ClickViewServiceClient interface {
+	// Returns the requested click view in full detail.
+	GetClickView(ctx context.Context, in *GetClickViewRequest, opts ...grpc.CallOption) (*resources.ClickView, error)
+}
+
+type clickViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewClickViewServiceClient(cc grpc.ClientConnInterface) ClickViewServiceClient {
+	return &clickViewServiceClient{cc}
+}
+
+func (c *clickViewServiceClient) GetClickView(ctx context.Context, in *GetClickViewRequest, opts ...grpc.CallOption) (*resources.ClickView, error) {
+	out := new(resources.ClickView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ClickViewService/GetClickView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ClickViewServiceServer is the server API for ClickViewService service.
+type ClickViewServiceServer interface {
+	// Returns the requested click view in full detail.
+	GetClickView(context.Context, *GetClickViewRequest) (*resources.ClickView, error)
+}
+
+// UnimplementedClickViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedClickViewServiceServer struct {
+}
+
+func (*UnimplementedClickViewServiceServer) GetClickView(ctx context.Context, req *GetClickViewRequest) (*resources.ClickView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetClickView not implemented")
+}
+
+func RegisterClickViewServiceServer(s *grpc.Server, srv ClickViewServiceServer) {
+	s.RegisterService(&_ClickViewService_serviceDesc, srv)
+}
+
+func _ClickViewService_GetClickView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetClickViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClickViewServiceServer).GetClickView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ClickViewService/GetClickView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClickViewServiceServer).GetClickView(ctx, req.(*GetClickViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ClickViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ClickViewService",
+	HandlerType: (*ClickViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetClickView",
+			Handler:    _ClickViewService_GetClickView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/click_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/conversion_action_service.pb.go b/googleapis/ads/googleads/v3/services/conversion_action_service.pb.go
new file mode 100644
index 0000000..07b213d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/conversion_action_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/conversion_action_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ConversionActionService.GetConversionAction][google.ads.googleads.v3.services.ConversionActionService.GetConversionAction].
+type GetConversionActionRequest struct {
+	// Required. The resource name of the conversion action to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetConversionActionRequest) Reset()         { *m = GetConversionActionRequest{} }
+func (m *GetConversionActionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetConversionActionRequest) ProtoMessage()    {}
+func (*GetConversionActionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8addb9f401303dba, []int{0}
+}
+
+func (m *GetConversionActionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversionActionRequest.Unmarshal(m, b)
+}
+func (m *GetConversionActionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversionActionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetConversionActionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversionActionRequest.Merge(m, src)
+}
+func (m *GetConversionActionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetConversionActionRequest.Size(m)
+}
+func (m *GetConversionActionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversionActionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversionActionRequest proto.InternalMessageInfo
+
+func (m *GetConversionActionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [ConversionActionService.MutateConversionActions][google.ads.googleads.v3.services.ConversionActionService.MutateConversionActions].
+type MutateConversionActionsRequest struct {
+	// Required. The ID of the customer whose conversion actions are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual conversion actions.
+	Operations []*ConversionActionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateConversionActionsRequest) Reset()         { *m = MutateConversionActionsRequest{} }
+func (m *MutateConversionActionsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionsRequest) ProtoMessage()    {}
+func (*MutateConversionActionsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8addb9f401303dba, []int{1}
+}
+
+func (m *MutateConversionActionsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionsRequest.Unmarshal(m, b)
+}
+func (m *MutateConversionActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateConversionActionsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionsRequest.Merge(m, src)
+}
+func (m *MutateConversionActionsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionsRequest.Size(m)
+}
+func (m *MutateConversionActionsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionsRequest proto.InternalMessageInfo
+
+func (m *MutateConversionActionsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateConversionActionsRequest) GetOperations() []*ConversionActionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateConversionActionsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateConversionActionsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a conversion action.
+type ConversionActionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*ConversionActionOperation_Create
+	//	*ConversionActionOperation_Update
+	//	*ConversionActionOperation_Remove
+	Operation            isConversionActionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *ConversionActionOperation) Reset()         { *m = ConversionActionOperation{} }
+func (m *ConversionActionOperation) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionOperation) ProtoMessage()    {}
+func (*ConversionActionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8addb9f401303dba, []int{2}
+}
+
+func (m *ConversionActionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionOperation.Unmarshal(m, b)
+}
+func (m *ConversionActionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionOperation.Marshal(b, m, deterministic)
+}
+func (m *ConversionActionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionOperation.Merge(m, src)
+}
+func (m *ConversionActionOperation) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionOperation.Size(m)
+}
+func (m *ConversionActionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionOperation proto.InternalMessageInfo
+
+func (m *ConversionActionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isConversionActionOperation_Operation interface {
+	isConversionActionOperation_Operation()
+}
+
+type ConversionActionOperation_Create struct {
+	Create *resources.ConversionAction `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type ConversionActionOperation_Update struct {
+	Update *resources.ConversionAction `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type ConversionActionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*ConversionActionOperation_Create) isConversionActionOperation_Operation() {}
+
+func (*ConversionActionOperation_Update) isConversionActionOperation_Operation() {}
+
+func (*ConversionActionOperation_Remove) isConversionActionOperation_Operation() {}
+
+func (m *ConversionActionOperation) GetOperation() isConversionActionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetCreate() *resources.ConversionAction {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetUpdate() *resources.ConversionAction {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ConversionActionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ConversionActionOperation_Create)(nil),
+		(*ConversionActionOperation_Update)(nil),
+		(*ConversionActionOperation_Remove)(nil),
+	}
+}
+
+// Response message for [ConversionActionService.MutateConversionActions][google.ads.googleads.v3.services.ConversionActionService.MutateConversionActions].
+type MutateConversionActionsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateConversionActionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateConversionActionsResponse) Reset()         { *m = MutateConversionActionsResponse{} }
+func (m *MutateConversionActionsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionsResponse) ProtoMessage()    {}
+func (*MutateConversionActionsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8addb9f401303dba, []int{3}
+}
+
+func (m *MutateConversionActionsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionsResponse.Unmarshal(m, b)
+}
+func (m *MutateConversionActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateConversionActionsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionsResponse.Merge(m, src)
+}
+func (m *MutateConversionActionsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionsResponse.Size(m)
+}
+func (m *MutateConversionActionsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionsResponse proto.InternalMessageInfo
+
+func (m *MutateConversionActionsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateConversionActionsResponse) GetResults() []*MutateConversionActionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the conversion action mutate.
+type MutateConversionActionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateConversionActionResult) Reset()         { *m = MutateConversionActionResult{} }
+func (m *MutateConversionActionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionResult) ProtoMessage()    {}
+func (*MutateConversionActionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8addb9f401303dba, []int{4}
+}
+
+func (m *MutateConversionActionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionResult.Unmarshal(m, b)
+}
+func (m *MutateConversionActionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionResult.Marshal(b, m, deterministic)
+}
+func (m *MutateConversionActionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionResult.Merge(m, src)
+}
+func (m *MutateConversionActionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionResult.Size(m)
+}
+func (m *MutateConversionActionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionResult proto.InternalMessageInfo
+
+func (m *MutateConversionActionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetConversionActionRequest)(nil), "google.ads.googleads.v3.services.GetConversionActionRequest")
+	proto.RegisterType((*MutateConversionActionsRequest)(nil), "google.ads.googleads.v3.services.MutateConversionActionsRequest")
+	proto.RegisterType((*ConversionActionOperation)(nil), "google.ads.googleads.v3.services.ConversionActionOperation")
+	proto.RegisterType((*MutateConversionActionsResponse)(nil), "google.ads.googleads.v3.services.MutateConversionActionsResponse")
+	proto.RegisterType((*MutateConversionActionResult)(nil), "google.ads.googleads.v3.services.MutateConversionActionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/conversion_action_service.proto", fileDescriptor_8addb9f401303dba)
+}
+
+var fileDescriptor_8addb9f401303dba = []byte{
+	// 768 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x6b, 0xd4, 0x4c,
+	0x18, 0xc0, 0xdf, 0x64, 0x4b, 0xdf, 0xb7, 0xb3, 0xed, 0xfb, 0xc2, 0x94, 0xd7, 0xae, 0x6b, 0xb1,
+	0x4b, 0x2c, 0xb8, 0x2c, 0x92, 0xc0, 0x06, 0x05, 0xb3, 0x56, 0x9a, 0x2d, 0x6e, 0x2b, 0x52, 0x5b,
+	0x52, 0x28, 0x52, 0x16, 0xd6, 0x69, 0x32, 0x5d, 0x43, 0x93, 0x4c, 0x9c, 0x49, 0x16, 0x4a, 0xe9,
+	0x45, 0x8f, 0x1e, 0x3d, 0x7b, 0xf1, 0xe8, 0xd7, 0xf0, 0xd6, 0xab, 0x78, 0xe9, 0xc9, 0x83, 0x27,
+	0x3f, 0x80, 0x07, 0x4f, 0x92, 0x4c, 0x66, 0xff, 0x75, 0xe3, 0x42, 0x7b, 0xda, 0x27, 0xf3, 0x3c,
+	0xf3, 0x7b, 0xfe, 0xce, 0xb3, 0x60, 0xbd, 0x4b, 0x48, 0xd7, 0xc3, 0x1a, 0x72, 0x98, 0xc6, 0xc5,
+	0x44, 0xea, 0xe9, 0x1a, 0xc3, 0xb4, 0xe7, 0xda, 0x98, 0x69, 0x36, 0x09, 0x7a, 0x98, 0x32, 0x97,
+	0x04, 0x1d, 0x64, 0x47, 0xc9, 0x4f, 0xa6, 0x52, 0x43, 0x4a, 0x22, 0x02, 0x2b, 0xfc, 0x9a, 0x8a,
+	0x1c, 0xa6, 0xf6, 0x09, 0x6a, 0x4f, 0x57, 0x05, 0xa1, 0xfc, 0x30, 0xcf, 0x07, 0xc5, 0x8c, 0xc4,
+	0x74, 0xa2, 0x13, 0x0e, 0x2f, 0x2f, 0x8b, 0xab, 0xa1, 0xab, 0xa1, 0x20, 0x20, 0x11, 0x4a, 0x94,
+	0x2c, 0xd3, 0x2e, 0x0d, 0x69, 0x6d, 0xcf, 0xc5, 0x41, 0x94, 0x29, 0x56, 0x86, 0x14, 0x47, 0x2e,
+	0xf6, 0x9c, 0xce, 0x21, 0x7e, 0x85, 0x7a, 0x2e, 0xa1, 0x99, 0x41, 0x16, 0xb4, 0x96, 0x7e, 0x1d,
+	0xc6, 0x47, 0x99, 0x95, 0x8f, 0xd8, 0xf1, 0x18, 0x9b, 0x86, 0xb6, 0xc6, 0x22, 0x14, 0xc5, 0x99,
+	0x53, 0xa5, 0x05, 0xca, 0x9b, 0x38, 0xda, 0xe8, 0x07, 0x6c, 0xa6, 0xf1, 0x5a, 0xf8, 0x75, 0x8c,
+	0x59, 0x04, 0xab, 0x60, 0x41, 0x64, 0xd5, 0x09, 0x90, 0x8f, 0x4b, 0x52, 0x45, 0xaa, 0xce, 0x35,
+	0x0b, 0xdf, 0x4c, 0xd9, 0x9a, 0x17, 0x9a, 0xe7, 0xc8, 0xc7, 0xca, 0x4f, 0x09, 0xdc, 0xde, 0x8e,
+	0x23, 0x14, 0xe1, 0x71, 0x16, 0x13, 0xb0, 0x55, 0x50, 0xb4, 0x63, 0x16, 0x11, 0x1f, 0xd3, 0x8e,
+	0xeb, 0x0c, 0xa3, 0x80, 0x38, 0x7f, 0xea, 0xc0, 0x97, 0x00, 0x90, 0x10, 0x53, 0x5e, 0x99, 0x92,
+	0x5c, 0x29, 0x54, 0x8b, 0xf5, 0x86, 0x3a, 0xad, 0x2b, 0xea, 0xb8, 0xd7, 0x1d, 0xc1, 0xc8, 0x3c,
+	0x0c, 0x98, 0xf0, 0x2e, 0xf8, 0x2f, 0x44, 0x34, 0x72, 0x91, 0xd7, 0x39, 0x42, 0xae, 0x17, 0x53,
+	0x5c, 0x2a, 0x54, 0xa4, 0xea, 0x3f, 0xd6, 0xbf, 0xd9, 0x71, 0x8b, 0x9f, 0xc2, 0x3b, 0x60, 0xa1,
+	0x87, 0x3c, 0xd7, 0x41, 0x11, 0xee, 0x90, 0xc0, 0x3b, 0x29, 0xcd, 0xa4, 0x66, 0xf3, 0xe2, 0x70,
+	0x27, 0xf0, 0x4e, 0x94, 0x0f, 0x32, 0xb8, 0x99, 0xeb, 0x1c, 0x36, 0x40, 0x31, 0x0e, 0x53, 0x40,
+	0xd2, 0x8c, 0x14, 0x50, 0xac, 0x97, 0x45, 0x3a, 0xa2, 0x5f, 0x6a, 0x2b, 0xe9, 0xd7, 0x36, 0x62,
+	0xc7, 0x16, 0xe0, 0xe6, 0x89, 0x0c, 0xb7, 0xc1, 0xac, 0x4d, 0x31, 0x8a, 0x78, 0xd9, 0x8b, 0x75,
+	0x3d, 0xb7, 0x0c, 0xfd, 0xd1, 0xbb, 0x54, 0x87, 0xad, 0xbf, 0xac, 0x0c, 0x92, 0xe0, 0x38, 0xbc,
+	0x24, 0x5f, 0x0b, 0xc7, 0x21, 0xb0, 0x04, 0x66, 0x29, 0xf6, 0x49, 0x8f, 0x57, 0x6f, 0x2e, 0xd1,
+	0xf0, 0xef, 0x66, 0x11, 0xcc, 0xf5, 0xcb, 0xad, 0x7c, 0x96, 0xc0, 0x4a, 0xee, 0x60, 0xb0, 0x90,
+	0x04, 0x0c, 0xc3, 0x16, 0xf8, 0x7f, 0xac, 0x23, 0x1d, 0x4c, 0x29, 0xa1, 0x29, 0xb9, 0x58, 0x87,
+	0x22, 0x50, 0x1a, 0xda, 0xea, 0x5e, 0x3a, 0xbd, 0xd6, 0xe2, 0x68, 0xaf, 0x9e, 0x24, 0xe6, 0xf0,
+	0x05, 0xf8, 0x9b, 0x62, 0x16, 0x7b, 0x91, 0x18, 0x9c, 0xc7, 0xd3, 0x07, 0x67, 0x72, 0x6c, 0x56,
+	0x8a, 0xb1, 0x04, 0x4e, 0xd9, 0x00, 0xcb, 0x7f, 0x32, 0x4c, 0x46, 0x65, 0xc2, 0x43, 0x19, 0x7d,
+	0x23, 0xf5, 0x77, 0x33, 0x60, 0x69, 0xfc, 0xfe, 0x1e, 0x8f, 0x03, 0x7e, 0x95, 0xc0, 0xe2, 0x84,
+	0x87, 0x08, 0x1f, 0x4d, 0xcf, 0x20, 0xff, 0xfd, 0x96, 0xaf, 0xd2, 0x62, 0xe5, 0xd9, 0x85, 0x39,
+	0x9a, 0xcc, 0x9b, 0x2f, 0xdf, 0xdf, 0xcb, 0xf7, 0xa1, 0x9e, 0x2c, 0xb9, 0xd3, 0x11, 0xcd, 0x9a,
+	0x78, 0xb8, 0x4c, 0xab, 0x0d, 0x6d, 0xbd, 0xac, 0xbf, 0x5a, 0xed, 0x0c, 0xfe, 0x92, 0xc0, 0x52,
+	0x4e, 0xfb, 0xe1, 0xfa, 0x55, 0xbb, 0x23, 0x56, 0x4a, 0xd9, 0xbc, 0x06, 0x81, 0xcf, 0x9e, 0x72,
+	0x70, 0x61, 0xde, 0x18, 0x5a, 0x4b, 0xf7, 0x06, 0x8b, 0x22, 0x4d, 0xbb, 0xa1, 0x3c, 0x48, 0xd2,
+	0x1e, 0xe4, 0x79, 0x3a, 0x64, 0xbc, 0x56, 0x3b, 0xbb, 0x9c, 0xb5, 0xe1, 0xa7, 0x1e, 0x0d, 0xa9,
+	0x56, 0xbe, 0x75, 0x6e, 0x96, 0x06, 0x51, 0x65, 0x52, 0xe8, 0x32, 0xd5, 0x26, 0x7e, 0xf3, 0xad,
+	0x0c, 0x56, 0x6d, 0xe2, 0x4f, 0xcd, 0xa0, 0xb9, 0x9c, 0x33, 0x33, 0xbb, 0xc9, 0xf6, 0xd8, 0x95,
+	0x0e, 0xb6, 0x32, 0x42, 0x97, 0x78, 0x28, 0xe8, 0xaa, 0x84, 0x76, 0xb5, 0x2e, 0x0e, 0xd2, 0xdd,
+	0xa2, 0x0d, 0x7c, 0xe6, 0xff, 0x27, 0x36, 0x84, 0xf0, 0x51, 0x2e, 0x6c, 0x9a, 0xe6, 0x27, 0xb9,
+	0xb2, 0xc9, 0x81, 0xa6, 0xc3, 0x54, 0x2e, 0x26, 0xd2, 0xbe, 0xae, 0x66, 0x8e, 0xd9, 0xb9, 0x30,
+	0x69, 0x9b, 0x0e, 0x6b, 0xf7, 0x4d, 0xda, 0xfb, 0x7a, 0x5b, 0x98, 0xfc, 0x90, 0x57, 0xf9, 0xb9,
+	0x61, 0x98, 0x0e, 0x33, 0x8c, 0xbe, 0x91, 0x61, 0xec, 0xeb, 0x86, 0x21, 0xcc, 0x0e, 0x67, 0xd3,
+	0x38, 0xf5, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xb0, 0x5e, 0xd3, 0xba, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ConversionActionServiceClient is the client API for ConversionActionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ConversionActionServiceClient interface {
+	// Returns the requested conversion action.
+	GetConversionAction(ctx context.Context, in *GetConversionActionRequest, opts ...grpc.CallOption) (*resources.ConversionAction, error)
+	// Creates, updates or removes conversion actions. Operation statuses are
+	// returned.
+	MutateConversionActions(ctx context.Context, in *MutateConversionActionsRequest, opts ...grpc.CallOption) (*MutateConversionActionsResponse, error)
+}
+
+type conversionActionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewConversionActionServiceClient(cc grpc.ClientConnInterface) ConversionActionServiceClient {
+	return &conversionActionServiceClient{cc}
+}
+
+func (c *conversionActionServiceClient) GetConversionAction(ctx context.Context, in *GetConversionActionRequest, opts ...grpc.CallOption) (*resources.ConversionAction, error) {
+	out := new(resources.ConversionAction)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ConversionActionService/GetConversionAction", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *conversionActionServiceClient) MutateConversionActions(ctx context.Context, in *MutateConversionActionsRequest, opts ...grpc.CallOption) (*MutateConversionActionsResponse, error) {
+	out := new(MutateConversionActionsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ConversionActionService/MutateConversionActions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ConversionActionServiceServer is the server API for ConversionActionService service.
+type ConversionActionServiceServer interface {
+	// Returns the requested conversion action.
+	GetConversionAction(context.Context, *GetConversionActionRequest) (*resources.ConversionAction, error)
+	// Creates, updates or removes conversion actions. Operation statuses are
+	// returned.
+	MutateConversionActions(context.Context, *MutateConversionActionsRequest) (*MutateConversionActionsResponse, error)
+}
+
+// UnimplementedConversionActionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedConversionActionServiceServer struct {
+}
+
+func (*UnimplementedConversionActionServiceServer) GetConversionAction(ctx context.Context, req *GetConversionActionRequest) (*resources.ConversionAction, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetConversionAction not implemented")
+}
+func (*UnimplementedConversionActionServiceServer) MutateConversionActions(ctx context.Context, req *MutateConversionActionsRequest) (*MutateConversionActionsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateConversionActions not implemented")
+}
+
+func RegisterConversionActionServiceServer(s *grpc.Server, srv ConversionActionServiceServer) {
+	s.RegisterService(&_ConversionActionService_serviceDesc, srv)
+}
+
+func _ConversionActionService_GetConversionAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetConversionActionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionActionServiceServer).GetConversionAction(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ConversionActionService/GetConversionAction",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionActionServiceServer).GetConversionAction(ctx, req.(*GetConversionActionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ConversionActionService_MutateConversionActions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateConversionActionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionActionServiceServer).MutateConversionActions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ConversionActionService/MutateConversionActions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionActionServiceServer).MutateConversionActions(ctx, req.(*MutateConversionActionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ConversionActionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ConversionActionService",
+	HandlerType: (*ConversionActionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetConversionAction",
+			Handler:    _ConversionActionService_GetConversionAction_Handler,
+		},
+		{
+			MethodName: "MutateConversionActions",
+			Handler:    _ConversionActionService_MutateConversionActions_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/conversion_action_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/conversion_adjustment_upload_service.pb.go b/googleapis/ads/googleads/v3/services/conversion_adjustment_upload_service.pb.go
new file mode 100644
index 0000000..efcee84
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/conversion_adjustment_upload_service.pb.go
@@ -0,0 +1,662 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/conversion_adjustment_upload_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [ConversionAdjustmentUploadService.UploadConversionAdjustments][google.ads.googleads.v3.services.ConversionAdjustmentUploadService.UploadConversionAdjustments].
+type UploadConversionAdjustmentsRequest struct {
+	// Required. The ID of the customer performing the upload.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The conversion adjustments that are being uploaded.
+	ConversionAdjustments []*ConversionAdjustment `protobuf:"bytes,2,rep,name=conversion_adjustments,json=conversionAdjustments,proto3" json:"conversion_adjustments,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried out
+	// in one transaction if and only if they are all valid. This should always be
+	// set to true.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadConversionAdjustmentsRequest) Reset()         { *m = UploadConversionAdjustmentsRequest{} }
+func (m *UploadConversionAdjustmentsRequest) String() string { return proto.CompactTextString(m) }
+func (*UploadConversionAdjustmentsRequest) ProtoMessage()    {}
+func (*UploadConversionAdjustmentsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{0}
+}
+
+func (m *UploadConversionAdjustmentsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadConversionAdjustmentsRequest.Unmarshal(m, b)
+}
+func (m *UploadConversionAdjustmentsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadConversionAdjustmentsRequest.Marshal(b, m, deterministic)
+}
+func (m *UploadConversionAdjustmentsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadConversionAdjustmentsRequest.Merge(m, src)
+}
+func (m *UploadConversionAdjustmentsRequest) XXX_Size() int {
+	return xxx_messageInfo_UploadConversionAdjustmentsRequest.Size(m)
+}
+func (m *UploadConversionAdjustmentsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadConversionAdjustmentsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadConversionAdjustmentsRequest proto.InternalMessageInfo
+
+func (m *UploadConversionAdjustmentsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *UploadConversionAdjustmentsRequest) GetConversionAdjustments() []*ConversionAdjustment {
+	if m != nil {
+		return m.ConversionAdjustments
+	}
+	return nil
+}
+
+func (m *UploadConversionAdjustmentsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *UploadConversionAdjustmentsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Response message for
+// [ConversionAdjustmentUploadService.UploadConversionAdjustments][google.ads.googleads.v3.services.ConversionAdjustmentUploadService.UploadConversionAdjustments].
+type UploadConversionAdjustmentsResponse struct {
+	// Errors that pertain to conversion adjustment failures in the partial
+	// failure mode. Returned when all errors occur inside the adjustments. If any
+	// errors occur outside the adjustments (e.g. auth errors), we return an RPC
+	// level error.
+	PartialFailureError *status.Status `protobuf:"bytes,1,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// Returned for successfully processed conversion adjustments. Proto will be
+	// empty for rows that received an error. Results are not returned when
+	// validate_only is true.
+	Results              []*ConversionAdjustmentResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *UploadConversionAdjustmentsResponse) Reset()         { *m = UploadConversionAdjustmentsResponse{} }
+func (m *UploadConversionAdjustmentsResponse) String() string { return proto.CompactTextString(m) }
+func (*UploadConversionAdjustmentsResponse) ProtoMessage()    {}
+func (*UploadConversionAdjustmentsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{1}
+}
+
+func (m *UploadConversionAdjustmentsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadConversionAdjustmentsResponse.Unmarshal(m, b)
+}
+func (m *UploadConversionAdjustmentsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadConversionAdjustmentsResponse.Marshal(b, m, deterministic)
+}
+func (m *UploadConversionAdjustmentsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadConversionAdjustmentsResponse.Merge(m, src)
+}
+func (m *UploadConversionAdjustmentsResponse) XXX_Size() int {
+	return xxx_messageInfo_UploadConversionAdjustmentsResponse.Size(m)
+}
+func (m *UploadConversionAdjustmentsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadConversionAdjustmentsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadConversionAdjustmentsResponse proto.InternalMessageInfo
+
+func (m *UploadConversionAdjustmentsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *UploadConversionAdjustmentsResponse) GetResults() []*ConversionAdjustmentResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// A conversion adjustment.
+type ConversionAdjustment struct {
+	// Resource name of the conversion action associated with this conversion
+	// adjustment. Note: Although this resource name consists of a customer id and
+	// a conversion action id, validation will ignore the customer id and use the
+	// conversion action id as the sole identifier of the conversion action.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the adjustment occurred. Must be after the
+	// conversion_date_time. The timezone must be specified. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	AdjustmentDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=adjustment_date_time,json=adjustmentDateTime,proto3" json:"adjustment_date_time,omitempty"`
+	// The adjustment type.
+	AdjustmentType enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType `protobuf:"varint,5,opt,name=adjustment_type,json=adjustmentType,proto3,enum=google.ads.googleads.v3.enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType" json:"adjustment_type,omitempty"`
+	// Information needed to restate the conversion's value.
+	// Required for restatements. Should not be supplied for retractions. An error
+	// will be returned if provided for a retraction.
+	RestatementValue *RestatementValue `protobuf:"bytes,6,opt,name=restatement_value,json=restatementValue,proto3" json:"restatement_value,omitempty"`
+	// Identifies the conversion to be adjusted.
+	//
+	// Types that are valid to be assigned to ConversionIdentifier:
+	//	*ConversionAdjustment_GclidDateTimePair
+	//	*ConversionAdjustment_OrderId
+	ConversionIdentifier isConversionAdjustment_ConversionIdentifier `protobuf_oneof:"conversion_identifier"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ConversionAdjustment) Reset()         { *m = ConversionAdjustment{} }
+func (m *ConversionAdjustment) String() string { return proto.CompactTextString(m) }
+func (*ConversionAdjustment) ProtoMessage()    {}
+func (*ConversionAdjustment) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{2}
+}
+
+func (m *ConversionAdjustment) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAdjustment.Unmarshal(m, b)
+}
+func (m *ConversionAdjustment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAdjustment.Marshal(b, m, deterministic)
+}
+func (m *ConversionAdjustment) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAdjustment.Merge(m, src)
+}
+func (m *ConversionAdjustment) XXX_Size() int {
+	return xxx_messageInfo_ConversionAdjustment.Size(m)
+}
+func (m *ConversionAdjustment) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAdjustment.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAdjustment proto.InternalMessageInfo
+
+func (m *ConversionAdjustment) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *ConversionAdjustment) GetAdjustmentDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.AdjustmentDateTime
+	}
+	return nil
+}
+
+func (m *ConversionAdjustment) GetAdjustmentType() enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType {
+	if m != nil {
+		return m.AdjustmentType
+	}
+	return enums.ConversionAdjustmentTypeEnum_UNSPECIFIED
+}
+
+func (m *ConversionAdjustment) GetRestatementValue() *RestatementValue {
+	if m != nil {
+		return m.RestatementValue
+	}
+	return nil
+}
+
+type isConversionAdjustment_ConversionIdentifier interface {
+	isConversionAdjustment_ConversionIdentifier()
+}
+
+type ConversionAdjustment_GclidDateTimePair struct {
+	GclidDateTimePair *GclidDateTimePair `protobuf:"bytes,1,opt,name=gclid_date_time_pair,json=gclidDateTimePair,proto3,oneof"`
+}
+
+type ConversionAdjustment_OrderId struct {
+	OrderId *wrappers.StringValue `protobuf:"bytes,2,opt,name=order_id,json=orderId,proto3,oneof"`
+}
+
+func (*ConversionAdjustment_GclidDateTimePair) isConversionAdjustment_ConversionIdentifier() {}
+
+func (*ConversionAdjustment_OrderId) isConversionAdjustment_ConversionIdentifier() {}
+
+func (m *ConversionAdjustment) GetConversionIdentifier() isConversionAdjustment_ConversionIdentifier {
+	if m != nil {
+		return m.ConversionIdentifier
+	}
+	return nil
+}
+
+func (m *ConversionAdjustment) GetGclidDateTimePair() *GclidDateTimePair {
+	if x, ok := m.GetConversionIdentifier().(*ConversionAdjustment_GclidDateTimePair); ok {
+		return x.GclidDateTimePair
+	}
+	return nil
+}
+
+func (m *ConversionAdjustment) GetOrderId() *wrappers.StringValue {
+	if x, ok := m.GetConversionIdentifier().(*ConversionAdjustment_OrderId); ok {
+		return x.OrderId
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ConversionAdjustment) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ConversionAdjustment_GclidDateTimePair)(nil),
+		(*ConversionAdjustment_OrderId)(nil),
+	}
+}
+
+// Contains information needed to restate a conversion's value.
+type RestatementValue struct {
+	// The restated conversion value. This is the value of the conversion after
+	// restatement. For example, to change the value of a conversion from 100 to
+	// 70, an adjusted value of 70 should be reported.
+	AdjustedValue *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=adjusted_value,json=adjustedValue,proto3" json:"adjusted_value,omitempty"`
+	// The currency of the restated value. If not provided, then the default
+	// currency from the conversion action is used, and if that is not set then
+	// the account currency is used. This is the ISO 4217 3-character currency
+	// code e.g. USD or EUR.
+	CurrencyCode         *wrappers.StringValue `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *RestatementValue) Reset()         { *m = RestatementValue{} }
+func (m *RestatementValue) String() string { return proto.CompactTextString(m) }
+func (*RestatementValue) ProtoMessage()    {}
+func (*RestatementValue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{3}
+}
+
+func (m *RestatementValue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RestatementValue.Unmarshal(m, b)
+}
+func (m *RestatementValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RestatementValue.Marshal(b, m, deterministic)
+}
+func (m *RestatementValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RestatementValue.Merge(m, src)
+}
+func (m *RestatementValue) XXX_Size() int {
+	return xxx_messageInfo_RestatementValue.Size(m)
+}
+func (m *RestatementValue) XXX_DiscardUnknown() {
+	xxx_messageInfo_RestatementValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RestatementValue proto.InternalMessageInfo
+
+func (m *RestatementValue) GetAdjustedValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AdjustedValue
+	}
+	return nil
+}
+
+func (m *RestatementValue) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+// Uniquely identifies a conversion that was reported without an order ID
+// specified.
+type GclidDateTimePair struct {
+	// Google click ID (gclid) associated with the original conversion for this
+	// adjustment.
+	Gclid *wrappers.StringValue `protobuf:"bytes,1,opt,name=gclid,proto3" json:"gclid,omitempty"`
+	// The date time at which the original conversion for this adjustment
+	// occurred. The timezone must be specified. The format is "yyyy-mm-dd
+	// hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	ConversionDateTime   *wrappers.StringValue `protobuf:"bytes,2,opt,name=conversion_date_time,json=conversionDateTime,proto3" json:"conversion_date_time,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *GclidDateTimePair) Reset()         { *m = GclidDateTimePair{} }
+func (m *GclidDateTimePair) String() string { return proto.CompactTextString(m) }
+func (*GclidDateTimePair) ProtoMessage()    {}
+func (*GclidDateTimePair) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{4}
+}
+
+func (m *GclidDateTimePair) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GclidDateTimePair.Unmarshal(m, b)
+}
+func (m *GclidDateTimePair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GclidDateTimePair.Marshal(b, m, deterministic)
+}
+func (m *GclidDateTimePair) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GclidDateTimePair.Merge(m, src)
+}
+func (m *GclidDateTimePair) XXX_Size() int {
+	return xxx_messageInfo_GclidDateTimePair.Size(m)
+}
+func (m *GclidDateTimePair) XXX_DiscardUnknown() {
+	xxx_messageInfo_GclidDateTimePair.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GclidDateTimePair proto.InternalMessageInfo
+
+func (m *GclidDateTimePair) GetGclid() *wrappers.StringValue {
+	if m != nil {
+		return m.Gclid
+	}
+	return nil
+}
+
+func (m *GclidDateTimePair) GetConversionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionDateTime
+	}
+	return nil
+}
+
+// Information identifying a successfully processed ConversionAdjustment.
+type ConversionAdjustmentResult struct {
+	// Resource name of the conversion action associated with this conversion
+	// adjustment.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the adjustment occurred. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	AdjustmentDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=adjustment_date_time,json=adjustmentDateTime,proto3" json:"adjustment_date_time,omitempty"`
+	// The adjustment type.
+	AdjustmentType enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType `protobuf:"varint,5,opt,name=adjustment_type,json=adjustmentType,proto3,enum=google.ads.googleads.v3.enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType" json:"adjustment_type,omitempty"`
+	// Identifies the conversion that was adjusted.
+	//
+	// Types that are valid to be assigned to ConversionIdentifier:
+	//	*ConversionAdjustmentResult_GclidDateTimePair
+	//	*ConversionAdjustmentResult_OrderId
+	ConversionIdentifier isConversionAdjustmentResult_ConversionIdentifier `protobuf_oneof:"conversion_identifier"`
+	XXX_NoUnkeyedLiteral struct{}                                          `json:"-"`
+	XXX_unrecognized     []byte                                            `json:"-"`
+	XXX_sizecache        int32                                             `json:"-"`
+}
+
+func (m *ConversionAdjustmentResult) Reset()         { *m = ConversionAdjustmentResult{} }
+func (m *ConversionAdjustmentResult) String() string { return proto.CompactTextString(m) }
+func (*ConversionAdjustmentResult) ProtoMessage()    {}
+func (*ConversionAdjustmentResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0dcef73f64d51915, []int{5}
+}
+
+func (m *ConversionAdjustmentResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAdjustmentResult.Unmarshal(m, b)
+}
+func (m *ConversionAdjustmentResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAdjustmentResult.Marshal(b, m, deterministic)
+}
+func (m *ConversionAdjustmentResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAdjustmentResult.Merge(m, src)
+}
+func (m *ConversionAdjustmentResult) XXX_Size() int {
+	return xxx_messageInfo_ConversionAdjustmentResult.Size(m)
+}
+func (m *ConversionAdjustmentResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAdjustmentResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAdjustmentResult proto.InternalMessageInfo
+
+func (m *ConversionAdjustmentResult) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *ConversionAdjustmentResult) GetAdjustmentDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.AdjustmentDateTime
+	}
+	return nil
+}
+
+func (m *ConversionAdjustmentResult) GetAdjustmentType() enums.ConversionAdjustmentTypeEnum_ConversionAdjustmentType {
+	if m != nil {
+		return m.AdjustmentType
+	}
+	return enums.ConversionAdjustmentTypeEnum_UNSPECIFIED
+}
+
+type isConversionAdjustmentResult_ConversionIdentifier interface {
+	isConversionAdjustmentResult_ConversionIdentifier()
+}
+
+type ConversionAdjustmentResult_GclidDateTimePair struct {
+	GclidDateTimePair *GclidDateTimePair `protobuf:"bytes,1,opt,name=gclid_date_time_pair,json=gclidDateTimePair,proto3,oneof"`
+}
+
+type ConversionAdjustmentResult_OrderId struct {
+	OrderId *wrappers.StringValue `protobuf:"bytes,2,opt,name=order_id,json=orderId,proto3,oneof"`
+}
+
+func (*ConversionAdjustmentResult_GclidDateTimePair) isConversionAdjustmentResult_ConversionIdentifier() {
+}
+
+func (*ConversionAdjustmentResult_OrderId) isConversionAdjustmentResult_ConversionIdentifier() {}
+
+func (m *ConversionAdjustmentResult) GetConversionIdentifier() isConversionAdjustmentResult_ConversionIdentifier {
+	if m != nil {
+		return m.ConversionIdentifier
+	}
+	return nil
+}
+
+func (m *ConversionAdjustmentResult) GetGclidDateTimePair() *GclidDateTimePair {
+	if x, ok := m.GetConversionIdentifier().(*ConversionAdjustmentResult_GclidDateTimePair); ok {
+		return x.GclidDateTimePair
+	}
+	return nil
+}
+
+func (m *ConversionAdjustmentResult) GetOrderId() *wrappers.StringValue {
+	if x, ok := m.GetConversionIdentifier().(*ConversionAdjustmentResult_OrderId); ok {
+		return x.OrderId
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ConversionAdjustmentResult) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ConversionAdjustmentResult_GclidDateTimePair)(nil),
+		(*ConversionAdjustmentResult_OrderId)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*UploadConversionAdjustmentsRequest)(nil), "google.ads.googleads.v3.services.UploadConversionAdjustmentsRequest")
+	proto.RegisterType((*UploadConversionAdjustmentsResponse)(nil), "google.ads.googleads.v3.services.UploadConversionAdjustmentsResponse")
+	proto.RegisterType((*ConversionAdjustment)(nil), "google.ads.googleads.v3.services.ConversionAdjustment")
+	proto.RegisterType((*RestatementValue)(nil), "google.ads.googleads.v3.services.RestatementValue")
+	proto.RegisterType((*GclidDateTimePair)(nil), "google.ads.googleads.v3.services.GclidDateTimePair")
+	proto.RegisterType((*ConversionAdjustmentResult)(nil), "google.ads.googleads.v3.services.ConversionAdjustmentResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/conversion_adjustment_upload_service.proto", fileDescriptor_0dcef73f64d51915)
+}
+
+var fileDescriptor_0dcef73f64d51915 = []byte{
+	// 896 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0x4f, 0x8b, 0xe4, 0xc4,
+	0x1b, 0xde, 0xa4, 0xf7, 0xdf, 0xaf, 0x66, 0x67, 0x76, 0xa7, 0x7e, 0xb3, 0x6e, 0xd3, 0xbb, 0x68,
+	0x9b, 0x1d, 0x74, 0x58, 0x24, 0x81, 0x6e, 0x10, 0x36, 0xea, 0x42, 0xe6, 0xcf, 0xce, 0x0c, 0x82,
+	0x0e, 0x99, 0xb1, 0x0f, 0x32, 0x10, 0x6a, 0x52, 0xd5, 0xb1, 0x24, 0x5d, 0x15, 0xab, 0x2a, 0x2d,
+	0x8d, 0xec, 0xc5, 0xb3, 0x9e, 0x44, 0x04, 0x8f, 0x1e, 0xfd, 0x1e, 0x5e, 0x16, 0x3c, 0x79, 0x11,
+	0x4f, 0x1e, 0x3c, 0x79, 0xf4, 0x13, 0x48, 0x2a, 0xa9, 0xee, 0x6c, 0xdb, 0xd9, 0x2c, 0x7a, 0x12,
+	0xbc, 0x55, 0xde, 0x7a, 0xde, 0xf7, 0x79, 0xde, 0xa7, 0xea, 0xa5, 0x02, 0xde, 0x4d, 0x38, 0x4f,
+	0x52, 0xe2, 0x21, 0x2c, 0xbd, 0x72, 0x59, 0xac, 0xa6, 0x43, 0x4f, 0x12, 0x31, 0xa5, 0x31, 0x91,
+	0x5e, 0xcc, 0xd9, 0x94, 0x08, 0x49, 0x39, 0x8b, 0x10, 0xfe, 0x38, 0x97, 0x6a, 0x42, 0x98, 0x8a,
+	0xf2, 0x2c, 0xe5, 0x08, 0x47, 0x15, 0xca, 0xcd, 0x04, 0x57, 0x1c, 0xf6, 0xcb, 0x0a, 0x2e, 0xc2,
+	0xd2, 0x9d, 0x17, 0x73, 0xa7, 0x43, 0xd7, 0x14, 0xeb, 0x3d, 0x6a, 0xa2, 0x23, 0x2c, 0x9f, 0x34,
+	0x71, 0xa9, 0x59, 0x56, 0x31, 0xf4, 0xee, 0x99, 0xfc, 0x8c, 0x7a, 0x88, 0x31, 0xae, 0x90, 0xa2,
+	0x9c, 0xc9, 0x6a, 0xf7, 0x4e, 0x6d, 0x37, 0x4e, 0x29, 0x61, 0xaa, 0xda, 0x78, 0xa5, 0xb6, 0x31,
+	0xa6, 0x24, 0xc5, 0xd1, 0x05, 0xf9, 0x08, 0x4d, 0x29, 0x17, 0x15, 0xe0, 0xe5, 0x0a, 0xa0, 0xbf,
+	0x2e, 0xf2, 0xb1, 0xf7, 0xa9, 0x40, 0x59, 0x46, 0xc4, 0x72, 0x65, 0x91, 0xc5, 0x9e, 0x54, 0x48,
+	0xe5, 0xd5, 0x86, 0xf3, 0x85, 0x0d, 0x9c, 0x0f, 0xb4, 0x17, 0x7b, 0x73, 0xed, 0xc1, 0x5c, 0xba,
+	0x0c, 0xc9, 0x27, 0x39, 0x91, 0x0a, 0x6e, 0x83, 0xb5, 0x38, 0x97, 0x8a, 0x4f, 0x88, 0x88, 0x28,
+	0xee, 0x5a, 0x7d, 0x6b, 0xe7, 0x7f, 0xbb, 0x9d, 0x5f, 0x03, 0x3b, 0x04, 0x26, 0x7e, 0x8c, 0xa1,
+	0x00, 0x2f, 0xad, 0x74, 0x40, 0x76, 0xed, 0x7e, 0x67, 0x67, 0x6d, 0xf0, 0xa6, 0xdb, 0x66, 0xb0,
+	0xbb, 0x4a, 0x45, 0x49, 0x74, 0x3b, 0x5e, 0x25, 0x10, 0xbe, 0x0e, 0x6e, 0x66, 0x48, 0x28, 0x8a,
+	0xd2, 0x68, 0x8c, 0x68, 0x9a, 0x0b, 0xd2, 0xed, 0xf4, 0xad, 0x9d, 0xeb, 0xe1, 0x46, 0x15, 0x7e,
+	0x5c, 0x46, 0xe1, 0x7d, 0xb0, 0x3e, 0x45, 0x29, 0xc5, 0x48, 0x91, 0x88, 0xb3, 0x74, 0xd6, 0xbd,
+	0xac, 0x61, 0x37, 0x4c, 0xf0, 0x7d, 0x96, 0xce, 0x9c, 0x1f, 0x2c, 0x70, 0xff, 0xb9, 0x76, 0xc8,
+	0x8c, 0x33, 0x49, 0xe0, 0x63, 0x70, 0x7b, 0x89, 0x35, 0x22, 0x42, 0x70, 0xa1, 0x9d, 0x59, 0x1b,
+	0x40, 0xd3, 0xa8, 0xc8, 0x62, 0xf7, 0x54, 0xfb, 0x1d, 0xfe, 0xff, 0x59, 0x3d, 0x07, 0x05, 0x1c,
+	0x8e, 0xc0, 0x35, 0x41, 0x64, 0x9e, 0xce, 0x2d, 0x7a, 0xfb, 0xef, 0x59, 0x14, 0xea, 0x22, 0xa1,
+	0x29, 0xe6, 0xfc, 0x78, 0x19, 0x6c, 0xad, 0xc2, 0xc1, 0x63, 0xb0, 0x59, 0x3f, 0xa2, 0xb8, 0xb8,
+	0x7e, 0xda, 0xb0, 0xb5, 0xc1, 0x3d, 0x43, 0x6d, 0x2e, 0x91, 0x7b, 0xaa, 0x04, 0x65, 0xc9, 0x08,
+	0xa5, 0x39, 0x09, 0x6f, 0xd5, 0xec, 0xd7, 0x59, 0xf0, 0x3d, 0xb0, 0x55, 0xbb, 0xe4, 0xda, 0x57,
+	0x45, 0x27, 0x44, 0xfb, 0xda, 0x56, 0x0d, 0x2e, 0x32, 0xf7, 0x91, 0x22, 0x67, 0x74, 0x42, 0xe0,
+	0x13, 0x70, 0x73, 0x69, 0x68, 0xba, 0x57, 0xfa, 0xd6, 0xce, 0xc6, 0xe0, 0xac, 0xd1, 0x13, 0x3d,
+	0x75, 0x2b, 0x0d, 0x39, 0x9b, 0x65, 0xe4, 0x80, 0xe5, 0x93, 0xc6, 0xcd, 0x70, 0x03, 0x3d, 0xf3,
+	0x0d, 0x23, 0xb0, 0x29, 0x48, 0x31, 0x1b, 0x44, 0xf3, 0x4f, 0x0b, 0x9d, 0xdd, 0xab, 0xba, 0x97,
+	0x41, 0xfb, 0xa1, 0x84, 0x8b, 0xd4, 0xca, 0x2f, 0xb1, 0x14, 0x81, 0x63, 0xb0, 0x95, 0xc4, 0x29,
+	0xc5, 0x0b, 0xab, 0xa2, 0x0c, 0x51, 0x73, 0x65, 0x86, 0xed, 0x1c, 0x87, 0x45, 0xb6, 0xb1, 0xeb,
+	0x04, 0x51, 0x71, 0x74, 0x29, 0xdc, 0x4c, 0x96, 0x83, 0xf0, 0x21, 0xb8, 0xce, 0x05, 0x2e, 0x07,
+	0xd5, 0x6e, 0x3f, 0x8b, 0xa3, 0x4b, 0xe1, 0x35, 0x8d, 0x3f, 0xc6, 0xbb, 0x77, 0x40, 0x6d, 0xca,
+	0x22, 0x8a, 0x09, 0x53, 0x74, 0x4c, 0x89, 0x70, 0xbe, 0xb5, 0xc0, 0xad, 0xe5, 0x16, 0xe1, 0x1e,
+	0xa8, 0x3c, 0x24, 0xb8, 0xb2, 0xcb, 0x6a, 0xa0, 0xdb, 0xe7, 0xf9, 0x45, 0x4a, 0x4a, 0x63, 0xd6,
+	0x4d, 0x4e, 0x59, 0x24, 0x00, 0xeb, 0x71, 0x2e, 0x04, 0x61, 0xf1, 0x2c, 0x8a, 0x39, 0x26, 0x2f,
+	0x22, 0x39, 0xbc, 0x61, 0x52, 0xf6, 0x38, 0x26, 0xce, 0x37, 0x16, 0xd8, 0xfc, 0x8b, 0x37, 0x70,
+	0x00, 0xae, 0x68, 0x6f, 0x1a, 0x45, 0xd5, 0x0b, 0x96, 0xd0, 0xe2, 0x4a, 0xd7, 0xfa, 0x5f, 0x5c,
+	0xe9, 0x17, 0xd1, 0x04, 0x17, 0x99, 0x46, 0x87, 0xf3, 0x47, 0x07, 0xf4, 0x9a, 0xc7, 0xf5, 0xbf,
+	0x61, 0x6c, 0x1c, 0xc6, 0x7f, 0xf1, 0xac, 0x0c, 0x7e, 0xb6, 0xc1, 0xab, 0xab, 0x1a, 0x2d, 0xdf,
+	0x95, 0xd3, 0x52, 0x21, 0xfc, 0xda, 0x06, 0x77, 0x9f, 0xf3, 0xd2, 0xc0, 0xfd, 0xf6, 0x1e, 0xdb,
+	0xdf, 0xed, 0xde, 0xc1, 0x3f, 0xac, 0x52, 0x3e, 0x77, 0x0e, 0xfd, 0x25, 0x70, 0x6a, 0xef, 0xff,
+	0x1b, 0xab, 0x5f, 0xf9, 0xcf, 0x7f, 0xfa, 0xed, 0x2b, 0xfb, 0x91, 0xf3, 0xb0, 0xf8, 0x1f, 0x32,
+	0x68, 0xe9, 0x7d, 0x56, 0x4b, 0x7c, 0xe7, 0xc1, 0x13, 0x3f, 0x6f, 0xe6, 0xf3, 0xad, 0x07, 0xbd,
+	0xbb, 0x4f, 0x83, 0xee, 0x42, 0x68, 0xb5, 0xca, 0xa8, 0x74, 0x63, 0x3e, 0xd9, 0xfd, 0xd2, 0x06,
+	0xdb, 0x31, 0x9f, 0xb4, 0x36, 0xb5, 0xfb, 0x5a, 0xeb, 0x01, 0x9c, 0x14, 0xc7, 0x7b, 0x62, 0x7d,
+	0x78, 0x54, 0xd5, 0x4a, 0x78, 0x8a, 0x58, 0xe2, 0x72, 0x91, 0x78, 0x09, 0x61, 0xfa, 0xf0, 0xbd,
+	0x05, 0x7b, 0xf3, 0xff, 0xe5, 0x5b, 0x66, 0xf1, 0x9d, 0xdd, 0x39, 0x0c, 0x82, 0xef, 0xed, 0xfe,
+	0x61, 0x59, 0x30, 0xc0, 0xd2, 0x2d, 0x97, 0xc5, 0x6a, 0x34, 0x74, 0x2b, 0x62, 0xf9, 0xd4, 0x40,
+	0xce, 0x03, 0x2c, 0xcf, 0xe7, 0x90, 0xf3, 0xd1, 0xf0, 0xdc, 0x40, 0x7e, 0xb7, 0xb7, 0xcb, 0xb8,
+	0xef, 0x07, 0x58, 0xfa, 0xfe, 0x1c, 0xe4, 0xfb, 0xa3, 0xa1, 0xef, 0x1b, 0xd8, 0xc5, 0x55, 0xad,
+	0x73, 0xf8, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x8f, 0xa1, 0xb4, 0x06, 0x0b, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ConversionAdjustmentUploadServiceClient is the client API for ConversionAdjustmentUploadService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ConversionAdjustmentUploadServiceClient interface {
+	// Processes the given conversion adjustments.
+	UploadConversionAdjustments(ctx context.Context, in *UploadConversionAdjustmentsRequest, opts ...grpc.CallOption) (*UploadConversionAdjustmentsResponse, error)
+}
+
+type conversionAdjustmentUploadServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewConversionAdjustmentUploadServiceClient(cc grpc.ClientConnInterface) ConversionAdjustmentUploadServiceClient {
+	return &conversionAdjustmentUploadServiceClient{cc}
+}
+
+func (c *conversionAdjustmentUploadServiceClient) UploadConversionAdjustments(ctx context.Context, in *UploadConversionAdjustmentsRequest, opts ...grpc.CallOption) (*UploadConversionAdjustmentsResponse, error) {
+	out := new(UploadConversionAdjustmentsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ConversionAdjustmentUploadService/UploadConversionAdjustments", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ConversionAdjustmentUploadServiceServer is the server API for ConversionAdjustmentUploadService service.
+type ConversionAdjustmentUploadServiceServer interface {
+	// Processes the given conversion adjustments.
+	UploadConversionAdjustments(context.Context, *UploadConversionAdjustmentsRequest) (*UploadConversionAdjustmentsResponse, error)
+}
+
+// UnimplementedConversionAdjustmentUploadServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedConversionAdjustmentUploadServiceServer struct {
+}
+
+func (*UnimplementedConversionAdjustmentUploadServiceServer) UploadConversionAdjustments(ctx context.Context, req *UploadConversionAdjustmentsRequest) (*UploadConversionAdjustmentsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method UploadConversionAdjustments not implemented")
+}
+
+func RegisterConversionAdjustmentUploadServiceServer(s *grpc.Server, srv ConversionAdjustmentUploadServiceServer) {
+	s.RegisterService(&_ConversionAdjustmentUploadService_serviceDesc, srv)
+}
+
+func _ConversionAdjustmentUploadService_UploadConversionAdjustments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UploadConversionAdjustmentsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionAdjustmentUploadServiceServer).UploadConversionAdjustments(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ConversionAdjustmentUploadService/UploadConversionAdjustments",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionAdjustmentUploadServiceServer).UploadConversionAdjustments(ctx, req.(*UploadConversionAdjustmentsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ConversionAdjustmentUploadService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ConversionAdjustmentUploadService",
+	HandlerType: (*ConversionAdjustmentUploadServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "UploadConversionAdjustments",
+			Handler:    _ConversionAdjustmentUploadService_UploadConversionAdjustments_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/conversion_adjustment_upload_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/conversion_upload_service.pb.go b/googleapis/ads/googleads/v3/services/conversion_upload_service.pb.go
new file mode 100644
index 0000000..4e15320
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/conversion_upload_service.pb.go
@@ -0,0 +1,864 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/conversion_upload_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ConversionUploadService.UploadClickConversions][google.ads.googleads.v3.services.ConversionUploadService.UploadClickConversions].
+type UploadClickConversionsRequest struct {
+	// Required. The ID of the customer performing the upload.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The conversions that are being uploaded.
+	Conversions []*ClickConversion `protobuf:"bytes,2,rep,name=conversions,proto3" json:"conversions,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// This should always be set to true.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadClickConversionsRequest) Reset()         { *m = UploadClickConversionsRequest{} }
+func (m *UploadClickConversionsRequest) String() string { return proto.CompactTextString(m) }
+func (*UploadClickConversionsRequest) ProtoMessage()    {}
+func (*UploadClickConversionsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{0}
+}
+
+func (m *UploadClickConversionsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadClickConversionsRequest.Unmarshal(m, b)
+}
+func (m *UploadClickConversionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadClickConversionsRequest.Marshal(b, m, deterministic)
+}
+func (m *UploadClickConversionsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadClickConversionsRequest.Merge(m, src)
+}
+func (m *UploadClickConversionsRequest) XXX_Size() int {
+	return xxx_messageInfo_UploadClickConversionsRequest.Size(m)
+}
+func (m *UploadClickConversionsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadClickConversionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadClickConversionsRequest proto.InternalMessageInfo
+
+func (m *UploadClickConversionsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *UploadClickConversionsRequest) GetConversions() []*ClickConversion {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *UploadClickConversionsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *UploadClickConversionsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Response message for [ConversionUploadService.UploadClickConversions][google.ads.googleads.v3.services.ConversionUploadService.UploadClickConversions].
+type UploadClickConversionsResponse struct {
+	// Errors that pertain to conversion failures in the partial failure mode.
+	// Returned when all errors occur inside the conversions. If any errors occur
+	// outside the conversions (e.g. auth errors), we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,1,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// Returned for successfully processed conversions. Proto will be empty for
+	// rows that received an error. Results are not returned when validate_only is
+	// true.
+	Results              []*ClickConversionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *UploadClickConversionsResponse) Reset()         { *m = UploadClickConversionsResponse{} }
+func (m *UploadClickConversionsResponse) String() string { return proto.CompactTextString(m) }
+func (*UploadClickConversionsResponse) ProtoMessage()    {}
+func (*UploadClickConversionsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{1}
+}
+
+func (m *UploadClickConversionsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadClickConversionsResponse.Unmarshal(m, b)
+}
+func (m *UploadClickConversionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadClickConversionsResponse.Marshal(b, m, deterministic)
+}
+func (m *UploadClickConversionsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadClickConversionsResponse.Merge(m, src)
+}
+func (m *UploadClickConversionsResponse) XXX_Size() int {
+	return xxx_messageInfo_UploadClickConversionsResponse.Size(m)
+}
+func (m *UploadClickConversionsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadClickConversionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadClickConversionsResponse proto.InternalMessageInfo
+
+func (m *UploadClickConversionsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *UploadClickConversionsResponse) GetResults() []*ClickConversionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// Request message for [ConversionUploadService.UploadCallConversions][google.ads.googleads.v3.services.ConversionUploadService.UploadCallConversions].
+type UploadCallConversionsRequest struct {
+	// Required. The ID of the customer performing the upload.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The conversions that are being uploaded.
+	Conversions []*CallConversion `protobuf:"bytes,2,rep,name=conversions,proto3" json:"conversions,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// This should always be set to true.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadCallConversionsRequest) Reset()         { *m = UploadCallConversionsRequest{} }
+func (m *UploadCallConversionsRequest) String() string { return proto.CompactTextString(m) }
+func (*UploadCallConversionsRequest) ProtoMessage()    {}
+func (*UploadCallConversionsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{2}
+}
+
+func (m *UploadCallConversionsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadCallConversionsRequest.Unmarshal(m, b)
+}
+func (m *UploadCallConversionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadCallConversionsRequest.Marshal(b, m, deterministic)
+}
+func (m *UploadCallConversionsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadCallConversionsRequest.Merge(m, src)
+}
+func (m *UploadCallConversionsRequest) XXX_Size() int {
+	return xxx_messageInfo_UploadCallConversionsRequest.Size(m)
+}
+func (m *UploadCallConversionsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadCallConversionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadCallConversionsRequest proto.InternalMessageInfo
+
+func (m *UploadCallConversionsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *UploadCallConversionsRequest) GetConversions() []*CallConversion {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *UploadCallConversionsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *UploadCallConversionsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Response message for [ConversionUploadService.UploadCallConversions][google.ads.googleads.v3.services.ConversionUploadService.UploadCallConversions].
+type UploadCallConversionsResponse struct {
+	// Errors that pertain to conversion failures in the partial failure mode.
+	// Returned when all errors occur inside the conversions. If any errors occur
+	// outside the conversions (e.g. auth errors), we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,1,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// Returned for successfully processed conversions. Proto will be empty for
+	// rows that received an error. Results are not returned when validate_only is
+	// true.
+	Results              []*CallConversionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *UploadCallConversionsResponse) Reset()         { *m = UploadCallConversionsResponse{} }
+func (m *UploadCallConversionsResponse) String() string { return proto.CompactTextString(m) }
+func (*UploadCallConversionsResponse) ProtoMessage()    {}
+func (*UploadCallConversionsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{3}
+}
+
+func (m *UploadCallConversionsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadCallConversionsResponse.Unmarshal(m, b)
+}
+func (m *UploadCallConversionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadCallConversionsResponse.Marshal(b, m, deterministic)
+}
+func (m *UploadCallConversionsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadCallConversionsResponse.Merge(m, src)
+}
+func (m *UploadCallConversionsResponse) XXX_Size() int {
+	return xxx_messageInfo_UploadCallConversionsResponse.Size(m)
+}
+func (m *UploadCallConversionsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadCallConversionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadCallConversionsResponse proto.InternalMessageInfo
+
+func (m *UploadCallConversionsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *UploadCallConversionsResponse) GetResults() []*CallConversionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// A click conversion.
+type ClickConversion struct {
+	// The Google click ID (gclid) associated with this conversion.
+	Gclid *wrappers.StringValue `protobuf:"bytes,1,opt,name=gclid,proto3" json:"gclid,omitempty"`
+	// Resource name of the conversion action associated with this conversion.
+	// Note: Although this resource name consists of a customer id and a
+	// conversion action id, validation will ignore the customer id and use the
+	// conversion action id as the sole identifier of the conversion action.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,2,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the conversion occurred. Must be after
+	// the click time. The timezone must be specified. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. “2019-01-01 12:32:45-08:00”.
+	ConversionDateTime *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_date_time,json=conversionDateTime,proto3" json:"conversion_date_time,omitempty"`
+	// The value of the conversion for the advertiser.
+	ConversionValue *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=conversion_value,json=conversionValue,proto3" json:"conversion_value,omitempty"`
+	// Currency associated with the conversion value. This is the ISO 4217
+	// 3-character currency code. For example: USD, EUR.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// The order ID associated with the conversion. An order id can only be used
+	// for one conversion per conversion action.
+	OrderId *wrappers.StringValue `protobuf:"bytes,6,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	// Additional data about externally attributed conversions. This field
+	// is required for conversions with an externally attributed conversion
+	// action, but should not be set otherwise.
+	ExternalAttributionData *ExternalAttributionData `protobuf:"bytes,7,opt,name=external_attribution_data,json=externalAttributionData,proto3" json:"external_attribution_data,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}                 `json:"-"`
+	XXX_unrecognized        []byte                   `json:"-"`
+	XXX_sizecache           int32                    `json:"-"`
+}
+
+func (m *ClickConversion) Reset()         { *m = ClickConversion{} }
+func (m *ClickConversion) String() string { return proto.CompactTextString(m) }
+func (*ClickConversion) ProtoMessage()    {}
+func (*ClickConversion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{4}
+}
+
+func (m *ClickConversion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClickConversion.Unmarshal(m, b)
+}
+func (m *ClickConversion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClickConversion.Marshal(b, m, deterministic)
+}
+func (m *ClickConversion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClickConversion.Merge(m, src)
+}
+func (m *ClickConversion) XXX_Size() int {
+	return xxx_messageInfo_ClickConversion.Size(m)
+}
+func (m *ClickConversion) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClickConversion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClickConversion proto.InternalMessageInfo
+
+func (m *ClickConversion) GetGclid() *wrappers.StringValue {
+	if m != nil {
+		return m.Gclid
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetConversionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionDateTime
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetConversionValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionValue
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetOrderId() *wrappers.StringValue {
+	if m != nil {
+		return m.OrderId
+	}
+	return nil
+}
+
+func (m *ClickConversion) GetExternalAttributionData() *ExternalAttributionData {
+	if m != nil {
+		return m.ExternalAttributionData
+	}
+	return nil
+}
+
+// A call conversion.
+type CallConversion struct {
+	// The caller id from which this call was placed. Caller id is expected to be
+	// in E.164 format with preceding '+' sign. e.g. "+16502531234".
+	CallerId *wrappers.StringValue `protobuf:"bytes,1,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"`
+	// The date time at which the call occurred. The timezone must be specified.
+	// The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm",
+	// e.g. "2019-01-01 12:32:45-08:00".
+	CallStartDateTime *wrappers.StringValue `protobuf:"bytes,2,opt,name=call_start_date_time,json=callStartDateTime,proto3" json:"call_start_date_time,omitempty"`
+	// Resource name of the conversion action associated with this conversion.
+	// Note: Although this resource name consists of a customer id and a
+	// conversion action id, validation will ignore the customer id and use the
+	// conversion action id as the sole identifier of the conversion action.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the conversion occurred. Must be after the call
+	// time. The timezone must be specified. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	ConversionDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=conversion_date_time,json=conversionDateTime,proto3" json:"conversion_date_time,omitempty"`
+	// The value of the conversion for the advertiser.
+	ConversionValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=conversion_value,json=conversionValue,proto3" json:"conversion_value,omitempty"`
+	// Currency associated with the conversion value. This is the ISO 4217
+	// 3-character currency code. For example: USD, EUR.
+	CurrencyCode         *wrappers.StringValue `protobuf:"bytes,6,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CallConversion) Reset()         { *m = CallConversion{} }
+func (m *CallConversion) String() string { return proto.CompactTextString(m) }
+func (*CallConversion) ProtoMessage()    {}
+func (*CallConversion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{5}
+}
+
+func (m *CallConversion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallConversion.Unmarshal(m, b)
+}
+func (m *CallConversion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallConversion.Marshal(b, m, deterministic)
+}
+func (m *CallConversion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallConversion.Merge(m, src)
+}
+func (m *CallConversion) XXX_Size() int {
+	return xxx_messageInfo_CallConversion.Size(m)
+}
+func (m *CallConversion) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallConversion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallConversion proto.InternalMessageInfo
+
+func (m *CallConversion) GetCallerId() *wrappers.StringValue {
+	if m != nil {
+		return m.CallerId
+	}
+	return nil
+}
+
+func (m *CallConversion) GetCallStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CallStartDateTime
+	}
+	return nil
+}
+
+func (m *CallConversion) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *CallConversion) GetConversionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionDateTime
+	}
+	return nil
+}
+
+func (m *CallConversion) GetConversionValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionValue
+	}
+	return nil
+}
+
+func (m *CallConversion) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+// Contains additional information about externally attributed conversions.
+type ExternalAttributionData struct {
+	// Represents the fraction of the conversion that is attributed to the
+	// Google Ads click.
+	ExternalAttributionCredit *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=external_attribution_credit,json=externalAttributionCredit,proto3" json:"external_attribution_credit,omitempty"`
+	// Specifies the attribution model name.
+	ExternalAttributionModel *wrappers.StringValue `protobuf:"bytes,2,opt,name=external_attribution_model,json=externalAttributionModel,proto3" json:"external_attribution_model,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}              `json:"-"`
+	XXX_unrecognized         []byte                `json:"-"`
+	XXX_sizecache            int32                 `json:"-"`
+}
+
+func (m *ExternalAttributionData) Reset()         { *m = ExternalAttributionData{} }
+func (m *ExternalAttributionData) String() string { return proto.CompactTextString(m) }
+func (*ExternalAttributionData) ProtoMessage()    {}
+func (*ExternalAttributionData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{6}
+}
+
+func (m *ExternalAttributionData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExternalAttributionData.Unmarshal(m, b)
+}
+func (m *ExternalAttributionData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExternalAttributionData.Marshal(b, m, deterministic)
+}
+func (m *ExternalAttributionData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExternalAttributionData.Merge(m, src)
+}
+func (m *ExternalAttributionData) XXX_Size() int {
+	return xxx_messageInfo_ExternalAttributionData.Size(m)
+}
+func (m *ExternalAttributionData) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExternalAttributionData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExternalAttributionData proto.InternalMessageInfo
+
+func (m *ExternalAttributionData) GetExternalAttributionCredit() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ExternalAttributionCredit
+	}
+	return nil
+}
+
+func (m *ExternalAttributionData) GetExternalAttributionModel() *wrappers.StringValue {
+	if m != nil {
+		return m.ExternalAttributionModel
+	}
+	return nil
+}
+
+// Identifying information for a successfully processed ClickConversion.
+type ClickConversionResult struct {
+	// The Google Click ID (gclid) associated with this conversion.
+	Gclid *wrappers.StringValue `protobuf:"bytes,1,opt,name=gclid,proto3" json:"gclid,omitempty"`
+	// Resource name of the conversion action associated with this conversion.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,2,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the conversion occurred. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. “2019-01-01 12:32:45-08:00”.
+	ConversionDateTime   *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_date_time,json=conversionDateTime,proto3" json:"conversion_date_time,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ClickConversionResult) Reset()         { *m = ClickConversionResult{} }
+func (m *ClickConversionResult) String() string { return proto.CompactTextString(m) }
+func (*ClickConversionResult) ProtoMessage()    {}
+func (*ClickConversionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{7}
+}
+
+func (m *ClickConversionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClickConversionResult.Unmarshal(m, b)
+}
+func (m *ClickConversionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClickConversionResult.Marshal(b, m, deterministic)
+}
+func (m *ClickConversionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClickConversionResult.Merge(m, src)
+}
+func (m *ClickConversionResult) XXX_Size() int {
+	return xxx_messageInfo_ClickConversionResult.Size(m)
+}
+func (m *ClickConversionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClickConversionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClickConversionResult proto.InternalMessageInfo
+
+func (m *ClickConversionResult) GetGclid() *wrappers.StringValue {
+	if m != nil {
+		return m.Gclid
+	}
+	return nil
+}
+
+func (m *ClickConversionResult) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *ClickConversionResult) GetConversionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionDateTime
+	}
+	return nil
+}
+
+// Identifying information for a successfully processed CallConversionUpload.
+type CallConversionResult struct {
+	// The caller id from which this call was placed. Caller id is expected to be
+	// in E.164 format with preceding '+' sign.
+	CallerId *wrappers.StringValue `protobuf:"bytes,1,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"`
+	// The date time at which the call occurred. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	CallStartDateTime *wrappers.StringValue `protobuf:"bytes,2,opt,name=call_start_date_time,json=callStartDateTime,proto3" json:"call_start_date_time,omitempty"`
+	// Resource name of the conversion action associated with this conversion.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,3,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The date time at which the conversion occurred. The format is
+	// "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".
+	ConversionDateTime   *wrappers.StringValue `protobuf:"bytes,4,opt,name=conversion_date_time,json=conversionDateTime,proto3" json:"conversion_date_time,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CallConversionResult) Reset()         { *m = CallConversionResult{} }
+func (m *CallConversionResult) String() string { return proto.CompactTextString(m) }
+func (*CallConversionResult) ProtoMessage()    {}
+func (*CallConversionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_86ad5d8f8879bebc, []int{8}
+}
+
+func (m *CallConversionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallConversionResult.Unmarshal(m, b)
+}
+func (m *CallConversionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallConversionResult.Marshal(b, m, deterministic)
+}
+func (m *CallConversionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallConversionResult.Merge(m, src)
+}
+func (m *CallConversionResult) XXX_Size() int {
+	return xxx_messageInfo_CallConversionResult.Size(m)
+}
+func (m *CallConversionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallConversionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallConversionResult proto.InternalMessageInfo
+
+func (m *CallConversionResult) GetCallerId() *wrappers.StringValue {
+	if m != nil {
+		return m.CallerId
+	}
+	return nil
+}
+
+func (m *CallConversionResult) GetCallStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CallStartDateTime
+	}
+	return nil
+}
+
+func (m *CallConversionResult) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *CallConversionResult) GetConversionDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionDateTime
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*UploadClickConversionsRequest)(nil), "google.ads.googleads.v3.services.UploadClickConversionsRequest")
+	proto.RegisterType((*UploadClickConversionsResponse)(nil), "google.ads.googleads.v3.services.UploadClickConversionsResponse")
+	proto.RegisterType((*UploadCallConversionsRequest)(nil), "google.ads.googleads.v3.services.UploadCallConversionsRequest")
+	proto.RegisterType((*UploadCallConversionsResponse)(nil), "google.ads.googleads.v3.services.UploadCallConversionsResponse")
+	proto.RegisterType((*ClickConversion)(nil), "google.ads.googleads.v3.services.ClickConversion")
+	proto.RegisterType((*CallConversion)(nil), "google.ads.googleads.v3.services.CallConversion")
+	proto.RegisterType((*ExternalAttributionData)(nil), "google.ads.googleads.v3.services.ExternalAttributionData")
+	proto.RegisterType((*ClickConversionResult)(nil), "google.ads.googleads.v3.services.ClickConversionResult")
+	proto.RegisterType((*CallConversionResult)(nil), "google.ads.googleads.v3.services.CallConversionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/conversion_upload_service.proto", fileDescriptor_86ad5d8f8879bebc)
+}
+
+var fileDescriptor_86ad5d8f8879bebc = []byte{
+	// 977 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0xcf, 0x6f, 0xdc, 0x44,
+	0x14, 0x96, 0xbd, 0xf9, 0xd5, 0xd9, 0xb6, 0xa1, 0x43, 0xc2, 0xba, 0xdb, 0x50, 0x56, 0x26, 0x12,
+	0x51, 0x84, 0x6c, 0xd8, 0x45, 0x94, 0x18, 0x41, 0xeb, 0x24, 0x6d, 0xc8, 0xa1, 0x10, 0x36, 0x10,
+	0x4a, 0xb5, 0x92, 0x35, 0x6b, 0x4f, 0x96, 0x11, 0xb3, 0x1e, 0x33, 0x33, 0x5e, 0x88, 0x10, 0x17,
+	0xf8, 0x13, 0xb8, 0x72, 0x42, 0x9c, 0xf8, 0x0f, 0x50, 0x4f, 0x5c, 0x7b, 0xed, 0x8d, 0x13, 0x07,
+	0xc4, 0x01, 0xc4, 0x85, 0x03, 0x67, 0xe4, 0x5f, 0x6b, 0x67, 0xe5, 0x65, 0x9d, 0x28, 0x5c, 0x10,
+	0xb7, 0xc9, 0xcc, 0xfb, 0xbe, 0x79, 0xef, 0x7d, 0x9f, 0x67, 0x5f, 0xc0, 0x9d, 0x01, 0x63, 0x03,
+	0x8a, 0x4d, 0xe4, 0x09, 0x33, 0x59, 0x46, 0xab, 0x51, 0xc7, 0x14, 0x98, 0x8f, 0x88, 0x8b, 0x85,
+	0xe9, 0x32, 0x7f, 0x84, 0xb9, 0x20, 0xcc, 0x77, 0xc2, 0x80, 0x32, 0xe4, 0x39, 0xe9, 0x91, 0x11,
+	0x70, 0x26, 0x19, 0x6c, 0x25, 0x30, 0x03, 0x79, 0xc2, 0x18, 0x33, 0x18, 0xa3, 0x8e, 0x91, 0x31,
+	0x34, 0xd7, 0xb2, 0x3b, 0x02, 0x62, 0x22, 0xdf, 0x67, 0x12, 0x49, 0xc2, 0x7c, 0x91, 0xe0, 0x9b,
+	0x8d, 0xc2, 0xa9, 0x4b, 0x09, 0xf6, 0x65, 0x7a, 0xf0, 0x5c, 0xe1, 0xe0, 0x98, 0x60, 0xea, 0x39,
+	0x7d, 0xfc, 0x11, 0x1a, 0x11, 0xc6, 0xd3, 0x80, 0x9b, 0x69, 0x40, 0xfc, 0x57, 0x3f, 0x3c, 0x36,
+	0x3f, 0xe5, 0x28, 0x08, 0x30, 0x9f, 0x64, 0xe6, 0x81, 0x6b, 0x0a, 0x89, 0x64, 0x98, 0x1e, 0xe8,
+	0x7f, 0x28, 0xe0, 0xd9, 0xf7, 0xe3, 0x5a, 0x76, 0x28, 0x71, 0x3f, 0xde, 0x19, 0x57, 0x28, 0xba,
+	0xf8, 0x93, 0x10, 0x0b, 0x09, 0xd7, 0x41, 0xdd, 0x0d, 0x85, 0x64, 0x43, 0xcc, 0x1d, 0xe2, 0x69,
+	0x4a, 0x4b, 0xd9, 0xb8, 0xb4, 0x5d, 0xfb, 0xd9, 0x56, 0xbb, 0x20, 0xdb, 0xdf, 0xf7, 0xe0, 0x03,
+	0x50, 0xcf, 0xbb, 0x23, 0x34, 0xb5, 0x55, 0xdb, 0xa8, 0xb7, 0x5f, 0x36, 0x66, 0x35, 0xc4, 0x98,
+	0xb8, 0x35, 0x21, 0x2e, 0x52, 0xc1, 0x17, 0xc0, 0x72, 0x80, 0xb8, 0x24, 0x88, 0x3a, 0xc7, 0x88,
+	0xd0, 0x90, 0x63, 0xad, 0xd6, 0x52, 0x36, 0x96, 0xba, 0x57, 0xd3, 0xed, 0x7b, 0xc9, 0x2e, 0x7c,
+	0x1e, 0x5c, 0x19, 0x21, 0x4a, 0x3c, 0x24, 0xb1, 0xc3, 0x7c, 0x7a, 0xa2, 0xcd, 0xc5, 0x61, 0x97,
+	0xb3, 0xcd, 0x77, 0x7c, 0x7a, 0xa2, 0x3f, 0x52, 0xc0, 0xcd, 0x69, 0xf5, 0x8a, 0x80, 0xf9, 0x02,
+	0xc3, 0x7b, 0x60, 0x75, 0xe2, 0x42, 0x07, 0x73, 0xce, 0x78, 0x5c, 0x7a, 0xbd, 0x0d, 0xb3, 0xa2,
+	0x78, 0xe0, 0x1a, 0x87, 0x71, 0x2f, 0xbb, 0x4f, 0x9f, 0x4e, 0xe5, 0x6e, 0x14, 0x0e, 0xdf, 0x05,
+	0x8b, 0x1c, 0x8b, 0x90, 0xca, 0xac, 0x1d, 0xb7, 0xce, 0xdc, 0x8e, 0x6e, 0x8c, 0xef, 0x66, 0x3c,
+	0xfa, 0xef, 0x0a, 0x58, 0x4b, 0xb3, 0x47, 0x94, 0x9e, 0x5b, 0xac, 0x0f, 0xca, 0xc4, 0x7a, 0xa9,
+	0x42, 0x76, 0xa7, 0x2e, 0xfd, 0xd7, 0xb5, 0xfa, 0x21, 0xf7, 0xe6, 0x64, 0xb5, 0x17, 0x2c, 0xd5,
+	0xc1, 0xa4, 0x54, 0xaf, 0x9e, 0xb5, 0x19, 0x93, 0x4a, 0x7d, 0x33, 0x07, 0x96, 0x27, 0xc4, 0x84,
+	0x6d, 0x30, 0x3f, 0x70, 0x69, 0x2a, 0x4b, 0xbd, 0xbd, 0x96, 0xdd, 0x91, 0x7d, 0xb4, 0xc6, 0xa1,
+	0xe4, 0xc4, 0x1f, 0x1c, 0x21, 0x1a, 0xe2, 0x6e, 0x12, 0x0a, 0xf7, 0xc1, 0xb5, 0xc2, 0xab, 0x83,
+	0xdc, 0xe8, 0xb9, 0xd0, 0xd4, 0x0a, 0xf8, 0xa7, 0x72, 0x98, 0x1d, 0xa3, 0xe0, 0xdb, 0x60, 0xa5,
+	0x40, 0x15, 0xb7, 0x5e, 0x92, 0x61, 0xa2, 0xd0, 0x2c, 0x36, 0x98, 0x23, 0x77, 0x91, 0xc4, 0xef,
+	0x91, 0x21, 0x86, 0x7b, 0xa0, 0x70, 0x87, 0x33, 0x8a, 0xe2, 0x62, 0x19, 0xcb, 0xb8, 0x76, 0x59,
+	0xd8, 0xa7, 0x38, 0xe1, 0x5a, 0xce, 0x51, 0xf1, 0x06, 0xb4, 0xc1, 0x15, 0x37, 0xe4, 0x1c, 0xfb,
+	0xee, 0x89, 0xe3, 0x32, 0x0f, 0x6b, 0xf3, 0x15, 0x32, 0xba, 0x9c, 0x41, 0x76, 0x98, 0x87, 0xe1,
+	0x2d, 0xb0, 0xc4, 0xb8, 0x97, 0x98, 0x7e, 0xa1, 0x02, 0x7a, 0x31, 0x8e, 0xde, 0xf7, 0x60, 0x08,
+	0xae, 0xe3, 0xcf, 0x24, 0xe6, 0x3e, 0xa2, 0x0e, 0x92, 0x92, 0x93, 0x7e, 0x28, 0xd3, 0xf6, 0x20,
+	0x6d, 0x31, 0x66, 0xda, 0x9a, 0xed, 0x85, 0xbb, 0x29, 0x85, 0x9d, 0x33, 0xec, 0x22, 0x89, 0xba,
+	0x0d, 0x5c, 0x7e, 0xa0, 0xff, 0x58, 0x03, 0x57, 0x4f, 0x1b, 0x08, 0x6e, 0x81, 0x4b, 0x2e, 0xa2,
+	0x34, 0xff, 0x70, 0x67, 0xd5, 0xb0, 0x94, 0x84, 0xef, 0x7b, 0xf0, 0x3e, 0x58, 0x89, 0xd6, 0x8e,
+	0x90, 0x88, 0xcb, 0x82, 0xb2, 0x55, 0x7c, 0x72, 0x2d, 0x42, 0x1e, 0x46, 0xc0, 0xb1, 0xb0, 0xa5,
+	0x9e, 0xab, 0x5d, 0xa8, 0xe7, 0xe6, 0x2e, 0xd0, 0x73, 0xf3, 0x17, 0xe2, 0xb9, 0x85, 0xb3, 0x7a,
+	0x4e, 0x7f, 0xa2, 0x80, 0xc6, 0x14, 0xe1, 0x61, 0x0f, 0xdc, 0x28, 0xb5, 0x95, 0xcb, 0xb1, 0x47,
+	0xe4, 0x54, 0x79, 0x8b, 0x29, 0x5f, 0x2f, 0xf1, 0xce, 0x4e, 0x0c, 0x87, 0x0f, 0x41, 0xb3, 0x94,
+	0x7d, 0xc8, 0x3c, 0x4c, 0x2b, 0xa9, 0xae, 0x95, 0x90, 0xdf, 0x8f, 0xd0, 0xfa, 0xaf, 0x0a, 0x58,
+	0x2d, 0xfd, 0x15, 0xfa, 0x8f, 0x3d, 0x5f, 0xfa, 0x23, 0x15, 0xac, 0x94, 0xbd, 0xe1, 0xff, 0x7f,
+	0x88, 0x15, 0xba, 0xd7, 0xfe, 0x6e, 0x0e, 0x34, 0xf2, 0xce, 0x25, 0xbf, 0xd2, 0x87, 0xc9, 0x73,
+	0x08, 0xff, 0x52, 0xc0, 0x33, 0xe5, 0x33, 0x16, 0xbc, 0x3d, 0xfb, 0x2d, 0xfd, 0xc7, 0x69, 0xb4,
+	0x79, 0xe7, 0xfc, 0x04, 0xc9, 0xcc, 0xa0, 0x7f, 0xf8, 0x93, 0xdd, 0x28, 0xcc, 0x48, 0x2f, 0x16,
+	0xe6, 0x97, 0x2f, 0x9f, 0xfc, 0xf2, 0xb5, 0xba, 0xa5, 0xbf, 0x12, 0x0d, 0xfd, 0x59, 0x88, 0x30,
+	0x3f, 0x2f, 0x44, 0xbf, 0xb1, 0xf9, 0x85, 0x15, 0x96, 0xf2, 0x5b, 0xca, 0x26, 0xfc, 0x53, 0x01,
+	0xab, 0xa5, 0x03, 0x0b, 0x7c, 0xb3, 0x72, 0xda, 0xa5, 0x73, 0x5d, 0xf3, 0xf6, 0xb9, 0xf1, 0x69,
+	0xd5, 0x0f, 0x66, 0x54, 0xfd, 0x9a, 0xde, 0xa9, 0x54, 0xf5, 0x69, 0x7a, 0x4b, 0xd9, 0x6c, 0xde,
+	0x78, 0x6c, 0x6b, 0x79, 0x46, 0xe9, 0x2a, 0x20, 0xc2, 0x70, 0xd9, 0x70, 0xfb, 0x2b, 0x15, 0xac,
+	0xbb, 0x6c, 0x38, 0x33, 0xfb, 0xed, 0xb5, 0x29, 0x66, 0x3a, 0x88, 0x0c, 0x79, 0xa0, 0x3c, 0x7c,
+	0x2b, 0x65, 0x18, 0x30, 0x8a, 0xfc, 0x81, 0xc1, 0xf8, 0xc0, 0x1c, 0x60, 0x3f, 0xb6, 0xab, 0x99,
+	0xdf, 0x39, 0xfd, 0x7f, 0xb7, 0xd7, 0xb3, 0xc5, 0xb7, 0x6a, 0x6d, 0xcf, 0xb6, 0xbf, 0x57, 0x5b,
+	0x7b, 0x09, 0xa1, 0xed, 0x09, 0x23, 0x59, 0x46, 0xab, 0xa3, 0x8e, 0x91, 0x5e, 0x2c, 0x1e, 0x67,
+	0x21, 0x3d, 0xdb, 0x13, 0xbd, 0x71, 0x48, 0xef, 0xa8, 0xd3, 0xcb, 0x42, 0x7e, 0x53, 0xd7, 0x93,
+	0x7d, 0xcb, 0xb2, 0x3d, 0x61, 0x59, 0xe3, 0x20, 0xcb, 0x3a, 0xea, 0x58, 0x56, 0x16, 0xd6, 0x5f,
+	0x88, 0xf3, 0xec, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x96, 0x60, 0xbf, 0x4a, 0x62, 0x0e, 0x00,
+	0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ConversionUploadServiceClient is the client API for ConversionUploadService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ConversionUploadServiceClient interface {
+	// Processes the given click conversions.
+	UploadClickConversions(ctx context.Context, in *UploadClickConversionsRequest, opts ...grpc.CallOption) (*UploadClickConversionsResponse, error)
+	// Processes the given call conversions.
+	UploadCallConversions(ctx context.Context, in *UploadCallConversionsRequest, opts ...grpc.CallOption) (*UploadCallConversionsResponse, error)
+}
+
+type conversionUploadServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewConversionUploadServiceClient(cc grpc.ClientConnInterface) ConversionUploadServiceClient {
+	return &conversionUploadServiceClient{cc}
+}
+
+func (c *conversionUploadServiceClient) UploadClickConversions(ctx context.Context, in *UploadClickConversionsRequest, opts ...grpc.CallOption) (*UploadClickConversionsResponse, error) {
+	out := new(UploadClickConversionsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ConversionUploadService/UploadClickConversions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *conversionUploadServiceClient) UploadCallConversions(ctx context.Context, in *UploadCallConversionsRequest, opts ...grpc.CallOption) (*UploadCallConversionsResponse, error) {
+	out := new(UploadCallConversionsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ConversionUploadService/UploadCallConversions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ConversionUploadServiceServer is the server API for ConversionUploadService service.
+type ConversionUploadServiceServer interface {
+	// Processes the given click conversions.
+	UploadClickConversions(context.Context, *UploadClickConversionsRequest) (*UploadClickConversionsResponse, error)
+	// Processes the given call conversions.
+	UploadCallConversions(context.Context, *UploadCallConversionsRequest) (*UploadCallConversionsResponse, error)
+}
+
+// UnimplementedConversionUploadServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedConversionUploadServiceServer struct {
+}
+
+func (*UnimplementedConversionUploadServiceServer) UploadClickConversions(ctx context.Context, req *UploadClickConversionsRequest) (*UploadClickConversionsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method UploadClickConversions not implemented")
+}
+func (*UnimplementedConversionUploadServiceServer) UploadCallConversions(ctx context.Context, req *UploadCallConversionsRequest) (*UploadCallConversionsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method UploadCallConversions not implemented")
+}
+
+func RegisterConversionUploadServiceServer(s *grpc.Server, srv ConversionUploadServiceServer) {
+	s.RegisterService(&_ConversionUploadService_serviceDesc, srv)
+}
+
+func _ConversionUploadService_UploadClickConversions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UploadClickConversionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionUploadServiceServer).UploadClickConversions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ConversionUploadService/UploadClickConversions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionUploadServiceServer).UploadClickConversions(ctx, req.(*UploadClickConversionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ConversionUploadService_UploadCallConversions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UploadCallConversionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionUploadServiceServer).UploadCallConversions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ConversionUploadService/UploadCallConversions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionUploadServiceServer).UploadCallConversions(ctx, req.(*UploadCallConversionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ConversionUploadService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ConversionUploadService",
+	HandlerType: (*ConversionUploadServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "UploadClickConversions",
+			Handler:    _ConversionUploadService_UploadClickConversions_Handler,
+		},
+		{
+			MethodName: "UploadCallConversions",
+			Handler:    _ConversionUploadService_UploadCallConversions_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/conversion_upload_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/currency_constant_service.pb.go b/googleapis/ads/googleads/v3/services/currency_constant_service.pb.go
new file mode 100644
index 0000000..c51c692
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/currency_constant_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/currency_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CurrencyConstantService.GetCurrencyConstant][google.ads.googleads.v3.services.CurrencyConstantService.GetCurrencyConstant].
+type GetCurrencyConstantRequest struct {
+	// Required. Resource name of the currency constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCurrencyConstantRequest) Reset()         { *m = GetCurrencyConstantRequest{} }
+func (m *GetCurrencyConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCurrencyConstantRequest) ProtoMessage()    {}
+func (*GetCurrencyConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_823f63dbbd8d219a, []int{0}
+}
+
+func (m *GetCurrencyConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCurrencyConstantRequest.Unmarshal(m, b)
+}
+func (m *GetCurrencyConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCurrencyConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCurrencyConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCurrencyConstantRequest.Merge(m, src)
+}
+func (m *GetCurrencyConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCurrencyConstantRequest.Size(m)
+}
+func (m *GetCurrencyConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCurrencyConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCurrencyConstantRequest proto.InternalMessageInfo
+
+func (m *GetCurrencyConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCurrencyConstantRequest)(nil), "google.ads.googleads.v3.services.GetCurrencyConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/currency_constant_service.proto", fileDescriptor_823f63dbbd8d219a)
+}
+
+var fileDescriptor_823f63dbbd8d219a = []byte{
+	// 404 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd3, 0x40,
+	0x18, 0x27, 0x29, 0x08, 0x06, 0xbd, 0xc4, 0x43, 0x4b, 0x2c, 0x58, 0x4a, 0xc1, 0xea, 0x61, 0x06,
+	0xcc, 0xc9, 0x51, 0xd1, 0x69, 0xc1, 0x7a, 0x92, 0x52, 0xa1, 0x07, 0x09, 0x84, 0xe9, 0x64, 0x8c,
+	0x81, 0x64, 0xa6, 0xce, 0xa4, 0x01, 0x11, 0x2f, 0xf5, 0x11, 0x7c, 0x83, 0x3d, 0xee, 0x9b, 0x6c,
+	0xaf, 0x7b, 0xdb, 0xd3, 0x1e, 0xf6, 0xb4, 0x4f, 0xb1, 0xa4, 0x93, 0x49, 0xff, 0xd0, 0xd0, 0xdb,
+	0x8f, 0xfc, 0xfe, 0xcd, 0xf7, 0x7d, 0x71, 0x3e, 0xc5, 0x42, 0xc4, 0x29, 0x83, 0x24, 0x52, 0x50,
+	0xc3, 0x12, 0x15, 0x3e, 0x54, 0x4c, 0x16, 0x09, 0x65, 0x0a, 0xd2, 0x95, 0x94, 0x8c, 0xd3, 0xdf,
+	0x21, 0x15, 0x5c, 0xe5, 0x84, 0xe7, 0x61, 0x45, 0x81, 0xa5, 0x14, 0xb9, 0x70, 0x7b, 0xda, 0x06,
+	0x48, 0xa4, 0x40, 0x9d, 0x00, 0x0a, 0x1f, 0x98, 0x04, 0xef, 0x6d, 0x53, 0x87, 0x64, 0x4a, 0xac,
+	0xe4, 0xc9, 0x12, 0x1d, 0xee, 0x75, 0x8d, 0x75, 0x99, 0x40, 0xc2, 0xb9, 0xc8, 0x49, 0x9e, 0x08,
+	0xae, 0x2a, 0xb6, 0xbd, 0xc7, 0xd2, 0x34, 0x61, 0xb5, 0xed, 0xc5, 0x1e, 0xf1, 0x23, 0x61, 0x69,
+	0x14, 0x2e, 0xd8, 0x4f, 0x52, 0x24, 0x42, 0x6a, 0x41, 0xff, 0xb3, 0xe3, 0x4d, 0x58, 0x3e, 0xae,
+	0x5a, 0xc7, 0x55, 0xe9, 0x8c, 0xfd, 0x5a, 0x31, 0x95, 0xbb, 0x43, 0xe7, 0xa9, 0x79, 0x5a, 0xc8,
+	0x49, 0xc6, 0x3a, 0x56, 0xcf, 0x1a, 0x3e, 0x1e, 0xb5, 0x6e, 0xb1, 0x3d, 0x7b, 0x62, 0x98, 0xaf,
+	0x24, 0x63, 0x6f, 0xd6, 0xb6, 0xd3, 0x3e, 0x4e, 0xf9, 0xa6, 0xe7, 0x76, 0xaf, 0x2c, 0xe7, 0xd9,
+	0x89, 0x12, 0xf7, 0x3d, 0x38, 0xb7, 0x31, 0xd0, 0xfc, 0x36, 0xcf, 0x6f, 0x74, 0xd7, 0xdb, 0x04,
+	0xc7, 0xde, 0xfe, 0xc7, 0x1b, 0x7c, 0x38, 0xd1, 0xfa, 0xfa, 0xee, 0xbf, 0xfd, 0xca, 0x7d, 0x59,
+	0x5e, 0xe1, 0xcf, 0x01, 0xf3, 0x81, 0x1e, 0x99, 0x15, 0x7c, 0xfd, 0xd7, 0x7b, 0xbe, 0xc1, 0x9d,
+	0x5d, 0x59, 0x85, 0x96, 0x89, 0x02, 0x54, 0x64, 0xa3, 0x7f, 0xb6, 0x33, 0xa0, 0x22, 0x3b, 0x3b,
+	0xd6, 0xa8, 0xdb, 0xb0, 0xaa, 0x69, 0x79, 0x93, 0xa9, 0xf5, 0xfd, 0x4b, 0x95, 0x10, 0x8b, 0x94,
+	0xf0, 0x18, 0x08, 0x19, 0xc3, 0x98, 0xf1, 0xed, 0xc5, 0xe0, 0xae, 0xb3, 0xf9, 0x5f, 0x7d, 0x67,
+	0xc0, 0x85, 0xdd, 0x9a, 0x60, 0x7c, 0x69, 0xf7, 0x26, 0x3a, 0x10, 0x47, 0x0a, 0x68, 0x58, 0xa2,
+	0xb9, 0x0f, 0xaa, 0x62, 0xb5, 0x31, 0x92, 0x00, 0x47, 0x2a, 0xa8, 0x25, 0xc1, 0xdc, 0x0f, 0x8c,
+	0xe4, 0xde, 0x1e, 0xe8, 0xef, 0x08, 0xe1, 0x48, 0x21, 0x54, 0x8b, 0x10, 0x9a, 0xfb, 0x08, 0x19,
+	0xd9, 0xe2, 0xd1, 0xf6, 0x9d, 0xfe, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x98, 0x53, 0xcf,
+	0x52, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CurrencyConstantServiceClient is the client API for CurrencyConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CurrencyConstantServiceClient interface {
+	// Returns the requested currency constant.
+	GetCurrencyConstant(ctx context.Context, in *GetCurrencyConstantRequest, opts ...grpc.CallOption) (*resources.CurrencyConstant, error)
+}
+
+type currencyConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCurrencyConstantServiceClient(cc grpc.ClientConnInterface) CurrencyConstantServiceClient {
+	return &currencyConstantServiceClient{cc}
+}
+
+func (c *currencyConstantServiceClient) GetCurrencyConstant(ctx context.Context, in *GetCurrencyConstantRequest, opts ...grpc.CallOption) (*resources.CurrencyConstant, error) {
+	out := new(resources.CurrencyConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CurrencyConstantService/GetCurrencyConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CurrencyConstantServiceServer is the server API for CurrencyConstantService service.
+type CurrencyConstantServiceServer interface {
+	// Returns the requested currency constant.
+	GetCurrencyConstant(context.Context, *GetCurrencyConstantRequest) (*resources.CurrencyConstant, error)
+}
+
+// UnimplementedCurrencyConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCurrencyConstantServiceServer struct {
+}
+
+func (*UnimplementedCurrencyConstantServiceServer) GetCurrencyConstant(ctx context.Context, req *GetCurrencyConstantRequest) (*resources.CurrencyConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCurrencyConstant not implemented")
+}
+
+func RegisterCurrencyConstantServiceServer(s *grpc.Server, srv CurrencyConstantServiceServer) {
+	s.RegisterService(&_CurrencyConstantService_serviceDesc, srv)
+}
+
+func _CurrencyConstantService_GetCurrencyConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCurrencyConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CurrencyConstantServiceServer).GetCurrencyConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CurrencyConstantService/GetCurrencyConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CurrencyConstantServiceServer).GetCurrencyConstant(ctx, req.(*GetCurrencyConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CurrencyConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CurrencyConstantService",
+	HandlerType: (*CurrencyConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCurrencyConstant",
+			Handler:    _CurrencyConstantService_GetCurrencyConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/currency_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/custom_interest_service.pb.go b/googleapis/ads/googleads/v3/services/custom_interest_service.pb.go
new file mode 100644
index 0000000..36c8599
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/custom_interest_service.pb.go
@@ -0,0 +1,483 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/custom_interest_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomInterestService.GetCustomInterest][google.ads.googleads.v3.services.CustomInterestService.GetCustomInterest].
+type GetCustomInterestRequest struct {
+	// Required. The resource name of the custom interest to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomInterestRequest) Reset()         { *m = GetCustomInterestRequest{} }
+func (m *GetCustomInterestRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomInterestRequest) ProtoMessage()    {}
+func (*GetCustomInterestRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca8c67676123c2d0, []int{0}
+}
+
+func (m *GetCustomInterestRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomInterestRequest.Unmarshal(m, b)
+}
+func (m *GetCustomInterestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomInterestRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomInterestRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomInterestRequest.Merge(m, src)
+}
+func (m *GetCustomInterestRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomInterestRequest.Size(m)
+}
+func (m *GetCustomInterestRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomInterestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomInterestRequest proto.InternalMessageInfo
+
+func (m *GetCustomInterestRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomInterestService.MutateCustomInterests][google.ads.googleads.v3.services.CustomInterestService.MutateCustomInterests].
+type MutateCustomInterestsRequest struct {
+	// Required. The ID of the customer whose custom interests are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual custom interests.
+	Operations []*CustomInterestOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomInterestsRequest) Reset()         { *m = MutateCustomInterestsRequest{} }
+func (m *MutateCustomInterestsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomInterestsRequest) ProtoMessage()    {}
+func (*MutateCustomInterestsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca8c67676123c2d0, []int{1}
+}
+
+func (m *MutateCustomInterestsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomInterestsRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomInterestsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomInterestsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomInterestsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomInterestsRequest.Merge(m, src)
+}
+func (m *MutateCustomInterestsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomInterestsRequest.Size(m)
+}
+func (m *MutateCustomInterestsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomInterestsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomInterestsRequest proto.InternalMessageInfo
+
+func (m *MutateCustomInterestsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomInterestsRequest) GetOperations() []*CustomInterestOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCustomInterestsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update) on a custom interest.
+type CustomInterestOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomInterestOperation_Create
+	//	*CustomInterestOperation_Update
+	Operation            isCustomInterestOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *CustomInterestOperation) Reset()         { *m = CustomInterestOperation{} }
+func (m *CustomInterestOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomInterestOperation) ProtoMessage()    {}
+func (*CustomInterestOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca8c67676123c2d0, []int{2}
+}
+
+func (m *CustomInterestOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomInterestOperation.Unmarshal(m, b)
+}
+func (m *CustomInterestOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomInterestOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomInterestOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomInterestOperation.Merge(m, src)
+}
+func (m *CustomInterestOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomInterestOperation.Size(m)
+}
+func (m *CustomInterestOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomInterestOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomInterestOperation proto.InternalMessageInfo
+
+func (m *CustomInterestOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomInterestOperation_Operation interface {
+	isCustomInterestOperation_Operation()
+}
+
+type CustomInterestOperation_Create struct {
+	Create *resources.CustomInterest `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomInterestOperation_Update struct {
+	Update *resources.CustomInterest `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+func (*CustomInterestOperation_Create) isCustomInterestOperation_Operation() {}
+
+func (*CustomInterestOperation_Update) isCustomInterestOperation_Operation() {}
+
+func (m *CustomInterestOperation) GetOperation() isCustomInterestOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomInterestOperation) GetCreate() *resources.CustomInterest {
+	if x, ok := m.GetOperation().(*CustomInterestOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomInterestOperation) GetUpdate() *resources.CustomInterest {
+	if x, ok := m.GetOperation().(*CustomInterestOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomInterestOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomInterestOperation_Create)(nil),
+		(*CustomInterestOperation_Update)(nil),
+	}
+}
+
+// Response message for custom interest mutate.
+type MutateCustomInterestsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCustomInterestResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateCustomInterestsResponse) Reset()         { *m = MutateCustomInterestsResponse{} }
+func (m *MutateCustomInterestsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomInterestsResponse) ProtoMessage()    {}
+func (*MutateCustomInterestsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca8c67676123c2d0, []int{3}
+}
+
+func (m *MutateCustomInterestsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomInterestsResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomInterestsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomInterestsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomInterestsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomInterestsResponse.Merge(m, src)
+}
+func (m *MutateCustomInterestsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomInterestsResponse.Size(m)
+}
+func (m *MutateCustomInterestsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomInterestsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomInterestsResponse proto.InternalMessageInfo
+
+func (m *MutateCustomInterestsResponse) GetResults() []*MutateCustomInterestResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the custom interest mutate.
+type MutateCustomInterestResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomInterestResult) Reset()         { *m = MutateCustomInterestResult{} }
+func (m *MutateCustomInterestResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomInterestResult) ProtoMessage()    {}
+func (*MutateCustomInterestResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ca8c67676123c2d0, []int{4}
+}
+
+func (m *MutateCustomInterestResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomInterestResult.Unmarshal(m, b)
+}
+func (m *MutateCustomInterestResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomInterestResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomInterestResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomInterestResult.Merge(m, src)
+}
+func (m *MutateCustomInterestResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomInterestResult.Size(m)
+}
+func (m *MutateCustomInterestResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomInterestResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomInterestResult proto.InternalMessageInfo
+
+func (m *MutateCustomInterestResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomInterestRequest)(nil), "google.ads.googleads.v3.services.GetCustomInterestRequest")
+	proto.RegisterType((*MutateCustomInterestsRequest)(nil), "google.ads.googleads.v3.services.MutateCustomInterestsRequest")
+	proto.RegisterType((*CustomInterestOperation)(nil), "google.ads.googleads.v3.services.CustomInterestOperation")
+	proto.RegisterType((*MutateCustomInterestsResponse)(nil), "google.ads.googleads.v3.services.MutateCustomInterestsResponse")
+	proto.RegisterType((*MutateCustomInterestResult)(nil), "google.ads.googleads.v3.services.MutateCustomInterestResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/custom_interest_service.proto", fileDescriptor_ca8c67676123c2d0)
+}
+
+var fileDescriptor_ca8c67676123c2d0 = []byte{
+	// 684 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6b, 0x13, 0x4f,
+	0x18, 0xfe, 0xed, 0xe6, 0x47, 0xb5, 0x93, 0xf6, 0xe0, 0x42, 0x6d, 0x58, 0x2b, 0x86, 0xb5, 0x87,
+	0x10, 0x64, 0x96, 0x66, 0x05, 0xe9, 0xd6, 0x56, 0x36, 0x8a, 0x6d, 0x91, 0xda, 0xb2, 0x42, 0x10,
+	0x09, 0x86, 0x49, 0x76, 0x1a, 0x97, 0xee, 0xee, 0xc4, 0x9d, 0xd9, 0x48, 0x29, 0x3d, 0xe8, 0x57,
+	0xf0, 0x1b, 0x78, 0xf4, 0x9b, 0x58, 0xf0, 0xe4, 0xad, 0x27, 0x0f, 0x9e, 0x3c, 0x7a, 0xf3, 0x20,
+	0xc8, 0xee, 0xcc, 0x24, 0xd9, 0x9a, 0x25, 0x58, 0x6f, 0x6f, 0xe6, 0x7d, 0xde, 0xe7, 0x7d, 0xde,
+	0x7f, 0x1b, 0xb0, 0xd5, 0x27, 0xa4, 0x1f, 0x60, 0x13, 0x79, 0xd4, 0xe4, 0x66, 0x6a, 0x0d, 0x2d,
+	0x93, 0xe2, 0x78, 0xe8, 0xf7, 0x30, 0x35, 0x7b, 0x09, 0x65, 0x24, 0xec, 0xf8, 0x11, 0xc3, 0x31,
+	0xa6, 0xac, 0x23, 0x1c, 0x70, 0x10, 0x13, 0x46, 0xb4, 0x2a, 0x0f, 0x82, 0xc8, 0xa3, 0x70, 0x14,
+	0x0f, 0x87, 0x16, 0x94, 0xf1, 0xfa, 0xbd, 0xa2, 0x0c, 0x31, 0xa6, 0x24, 0x89, 0xa7, 0xa4, 0xe0,
+	0xd4, 0xfa, 0x8a, 0x0c, 0x1c, 0xf8, 0x26, 0x8a, 0x22, 0xc2, 0x10, 0xf3, 0x49, 0x44, 0x85, 0x77,
+	0x79, 0xc2, 0xdb, 0x0b, 0x7c, 0x1c, 0xc9, 0xb0, 0x5b, 0x13, 0x8e, 0x43, 0x1f, 0x07, 0x5e, 0xa7,
+	0x8b, 0x5f, 0xa1, 0xa1, 0x4f, 0x62, 0x01, 0x10, 0x92, 0xcd, 0xec, 0x57, 0x37, 0x39, 0x14, 0xa8,
+	0x10, 0xd1, 0x23, 0x8e, 0x30, 0x1e, 0x81, 0xca, 0x36, 0x66, 0x0f, 0x33, 0x55, 0xbb, 0x42, 0x94,
+	0x8b, 0x5f, 0x27, 0x98, 0x32, 0xad, 0x06, 0x16, 0xa5, 0xf0, 0x4e, 0x84, 0x42, 0x5c, 0x51, 0xaa,
+	0x4a, 0x6d, 0xbe, 0x59, 0xfa, 0xea, 0xa8, 0xee, 0x82, 0xf4, 0x3c, 0x45, 0x21, 0x36, 0x3e, 0x29,
+	0x60, 0x65, 0x2f, 0x61, 0x88, 0xe1, 0x3c, 0x13, 0x95, 0x54, 0xab, 0xa0, 0xcc, 0x2b, 0xc7, 0x71,
+	0xc7, 0xf7, 0x26, 0x89, 0x80, 0x7c, 0xdf, 0xf5, 0xb4, 0x97, 0x00, 0x90, 0x01, 0x8e, 0x79, 0xf1,
+	0x15, 0xb5, 0x5a, 0xaa, 0x95, 0x1b, 0xeb, 0x70, 0x56, 0xdb, 0x61, 0x3e, 0xe7, 0xbe, 0x64, 0x10,
+	0xfc, 0x63, 0x46, 0xed, 0x36, 0x58, 0x1c, 0xa2, 0xc0, 0xf7, 0x10, 0xc3, 0x1d, 0x12, 0x05, 0xc7,
+	0x95, 0xff, 0xab, 0x4a, 0xed, 0xaa, 0xbb, 0x20, 0x1f, 0xf7, 0xa3, 0xe0, 0xd8, 0xf8, 0xa5, 0x80,
+	0xe5, 0x02, 0x46, 0x6d, 0x03, 0x94, 0x93, 0x41, 0x16, 0x9e, 0xb6, 0x30, 0x0b, 0x2f, 0x37, 0x74,
+	0xa9, 0x50, 0x76, 0x19, 0x3e, 0x4e, 0xbb, 0xbc, 0x87, 0xe8, 0x91, 0x0b, 0x38, 0x3c, 0xb5, 0xb5,
+	0x27, 0x60, 0xae, 0x17, 0x63, 0xc4, 0x78, 0x1f, 0xcb, 0x8d, 0xb5, 0xc2, 0xca, 0x46, 0xeb, 0x72,
+	0xa1, 0xb4, 0x9d, 0xff, 0x5c, 0x41, 0x91, 0x92, 0x71, 0xea, 0x8a, 0xfa, 0x0f, 0x64, 0x9c, 0xa2,
+	0x59, 0x06, 0xf3, 0xa3, 0x2e, 0x19, 0x6f, 0xc0, 0xcd, 0x82, 0x51, 0xd2, 0x01, 0x89, 0x28, 0xd6,
+	0x5a, 0xe0, 0x4a, 0x8c, 0x69, 0x12, 0x30, 0x39, 0xa2, 0xfb, 0xb3, 0x47, 0x34, 0x8d, 0xd1, 0xcd,
+	0x48, 0x5c, 0x49, 0x66, 0x38, 0x40, 0x2f, 0x86, 0xa5, 0xb3, 0x9b, 0xb2, 0x8c, 0xf9, 0x3d, 0x6c,
+	0xfc, 0x2c, 0x81, 0xa5, 0x7c, 0xf4, 0x33, 0xae, 0x40, 0xfb, 0xac, 0x80, 0x6b, 0x7f, 0x2c, 0xba,
+	0x66, 0xcf, 0x56, 0x5e, 0x74, 0x1d, 0xfa, 0xdf, 0x77, 0xdc, 0xd8, 0x3d, 0x77, 0xf2, 0x45, 0xbc,
+	0xfb, 0xf2, 0xed, 0xbd, 0x6a, 0x69, 0x6b, 0xe9, 0x37, 0xe2, 0x24, 0xe7, 0xd9, 0x94, 0x67, 0x41,
+	0xcd, 0xba, 0xf8, 0x68, 0x8c, 0x26, 0x61, 0xd6, 0x4f, 0xb5, 0x1f, 0x0a, 0x58, 0x9a, 0x3a, 0x26,
+	0x6d, 0xeb, 0x72, 0xd3, 0x90, 0xa7, 0xaa, 0x3f, 0xb8, 0x74, 0x3c, 0xdf, 0x0f, 0xe3, 0xf9, 0xb9,
+	0x73, 0x7d, 0xe2, 0xd8, 0xef, 0x8c, 0x0f, 0x30, 0x2b, 0x77, 0xdd, 0xb8, 0x9b, 0x96, 0x3b, 0xae,
+	0xef, 0x64, 0x02, 0xbc, 0x59, 0x3f, 0xbd, 0x58, 0xad, 0x1d, 0x66, 0xd9, 0x6c, 0xa5, 0xae, 0xdf,
+	0x38, 0x73, 0x2a, 0x63, 0x45, 0xc2, 0x1a, 0xf8, 0x14, 0xf6, 0x48, 0xd8, 0x7c, 0xab, 0x82, 0xd5,
+	0x1e, 0x09, 0x67, 0xaa, 0x6f, 0xea, 0x53, 0x37, 0xe4, 0x20, 0x3d, 0xde, 0x03, 0xe5, 0xc5, 0x8e,
+	0x88, 0xef, 0x93, 0x00, 0x45, 0x7d, 0x48, 0xe2, 0xbe, 0xd9, 0xc7, 0x51, 0x76, 0xda, 0xe6, 0x38,
+	0x63, 0xf1, 0x9f, 0xc8, 0x86, 0x34, 0x3e, 0xa8, 0xa5, 0x6d, 0xc7, 0xf9, 0xa8, 0x56, 0xb7, 0x39,
+	0xa1, 0xe3, 0x51, 0xc8, 0xcd, 0xd4, 0x6a, 0x59, 0x50, 0x24, 0xa6, 0x67, 0x12, 0xd2, 0x76, 0x3c,
+	0xda, 0x1e, 0x41, 0xda, 0x2d, 0xab, 0x2d, 0x21, 0xdf, 0xd5, 0x55, 0xfe, 0x6e, 0xdb, 0x8e, 0x47,
+	0x6d, 0x7b, 0x04, 0xb2, 0xed, 0x96, 0x65, 0xdb, 0x12, 0xd6, 0x9d, 0xcb, 0x74, 0x5a, 0xbf, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0x63, 0xa4, 0x3d, 0xc9, 0xeb, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomInterestServiceClient is the client API for CustomInterestService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomInterestServiceClient interface {
+	// Returns the requested custom interest in full detail.
+	GetCustomInterest(ctx context.Context, in *GetCustomInterestRequest, opts ...grpc.CallOption) (*resources.CustomInterest, error)
+	// Creates or updates custom interests. Operation statuses are returned.
+	MutateCustomInterests(ctx context.Context, in *MutateCustomInterestsRequest, opts ...grpc.CallOption) (*MutateCustomInterestsResponse, error)
+}
+
+type customInterestServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomInterestServiceClient(cc grpc.ClientConnInterface) CustomInterestServiceClient {
+	return &customInterestServiceClient{cc}
+}
+
+func (c *customInterestServiceClient) GetCustomInterest(ctx context.Context, in *GetCustomInterestRequest, opts ...grpc.CallOption) (*resources.CustomInterest, error) {
+	out := new(resources.CustomInterest)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomInterestService/GetCustomInterest", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customInterestServiceClient) MutateCustomInterests(ctx context.Context, in *MutateCustomInterestsRequest, opts ...grpc.CallOption) (*MutateCustomInterestsResponse, error) {
+	out := new(MutateCustomInterestsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomInterestService/MutateCustomInterests", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomInterestServiceServer is the server API for CustomInterestService service.
+type CustomInterestServiceServer interface {
+	// Returns the requested custom interest in full detail.
+	GetCustomInterest(context.Context, *GetCustomInterestRequest) (*resources.CustomInterest, error)
+	// Creates or updates custom interests. Operation statuses are returned.
+	MutateCustomInterests(context.Context, *MutateCustomInterestsRequest) (*MutateCustomInterestsResponse, error)
+}
+
+// UnimplementedCustomInterestServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomInterestServiceServer struct {
+}
+
+func (*UnimplementedCustomInterestServiceServer) GetCustomInterest(ctx context.Context, req *GetCustomInterestRequest) (*resources.CustomInterest, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCustomInterest not implemented")
+}
+func (*UnimplementedCustomInterestServiceServer) MutateCustomInterests(ctx context.Context, req *MutateCustomInterestsRequest) (*MutateCustomInterestsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateCustomInterests not implemented")
+}
+
+func RegisterCustomInterestServiceServer(s *grpc.Server, srv CustomInterestServiceServer) {
+	s.RegisterService(&_CustomInterestService_serviceDesc, srv)
+}
+
+func _CustomInterestService_GetCustomInterest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomInterestRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomInterestServiceServer).GetCustomInterest(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomInterestService/GetCustomInterest",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomInterestServiceServer).GetCustomInterest(ctx, req.(*GetCustomInterestRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomInterestService_MutateCustomInterests_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomInterestsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomInterestServiceServer).MutateCustomInterests(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomInterestService/MutateCustomInterests",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomInterestServiceServer).MutateCustomInterests(ctx, req.(*MutateCustomInterestsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomInterestService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomInterestService",
+	HandlerType: (*CustomInterestServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomInterest",
+			Handler:    _CustomInterestService_GetCustomInterest_Handler,
+		},
+		{
+			MethodName: "MutateCustomInterests",
+			Handler:    _CustomInterestService_MutateCustomInterests_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/custom_interest_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_client_link_service.pb.go b/googleapis/ads/googleads/v3/services/customer_client_link_service.pb.go
new file mode 100644
index 0000000..505a275
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_client_link_service.pb.go
@@ -0,0 +1,471 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_client_link_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerClientLinkService.GetCustomerClientLink][google.ads.googleads.v3.services.CustomerClientLinkService.GetCustomerClientLink].
+type GetCustomerClientLinkRequest struct {
+	// Required. The resource name of the customer client link to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerClientLinkRequest) Reset()         { *m = GetCustomerClientLinkRequest{} }
+func (m *GetCustomerClientLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerClientLinkRequest) ProtoMessage()    {}
+func (*GetCustomerClientLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b6996d934213c3f, []int{0}
+}
+
+func (m *GetCustomerClientLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerClientLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerClientLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerClientLinkRequest.Merge(m, src)
+}
+func (m *GetCustomerClientLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Size(m)
+}
+func (m *GetCustomerClientLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerClientLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerClientLinkRequest proto.InternalMessageInfo
+
+func (m *GetCustomerClientLinkRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerClientLinkService.MutateCustomerClientLink][google.ads.googleads.v3.services.CustomerClientLinkService.MutateCustomerClientLink].
+type MutateCustomerClientLinkRequest struct {
+	// Required. The ID of the customer whose customer link are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The operation to perform on the individual CustomerClientLink.
+	Operation            *CustomerClientLinkOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateCustomerClientLinkRequest) Reset()         { *m = MutateCustomerClientLinkRequest{} }
+func (m *MutateCustomerClientLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerClientLinkRequest) ProtoMessage()    {}
+func (*MutateCustomerClientLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b6996d934213c3f, []int{1}
+}
+
+func (m *MutateCustomerClientLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerClientLinkRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerClientLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerClientLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerClientLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerClientLinkRequest.Merge(m, src)
+}
+func (m *MutateCustomerClientLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerClientLinkRequest.Size(m)
+}
+func (m *MutateCustomerClientLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerClientLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerClientLinkRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerClientLinkRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerClientLinkRequest) GetOperation() *CustomerClientLinkOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// A single operation (create, update) on a CustomerClientLink.
+type CustomerClientLinkOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerClientLinkOperation_Create
+	//	*CustomerClientLinkOperation_Update
+	Operation            isCustomerClientLinkOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CustomerClientLinkOperation) Reset()         { *m = CustomerClientLinkOperation{} }
+func (m *CustomerClientLinkOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerClientLinkOperation) ProtoMessage()    {}
+func (*CustomerClientLinkOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b6996d934213c3f, []int{2}
+}
+
+func (m *CustomerClientLinkOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClientLinkOperation.Unmarshal(m, b)
+}
+func (m *CustomerClientLinkOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClientLinkOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerClientLinkOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClientLinkOperation.Merge(m, src)
+}
+func (m *CustomerClientLinkOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerClientLinkOperation.Size(m)
+}
+func (m *CustomerClientLinkOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClientLinkOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClientLinkOperation proto.InternalMessageInfo
+
+func (m *CustomerClientLinkOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomerClientLinkOperation_Operation interface {
+	isCustomerClientLinkOperation_Operation()
+}
+
+type CustomerClientLinkOperation_Create struct {
+	Create *resources.CustomerClientLink `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerClientLinkOperation_Update struct {
+	Update *resources.CustomerClientLink `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+func (*CustomerClientLinkOperation_Create) isCustomerClientLinkOperation_Operation() {}
+
+func (*CustomerClientLinkOperation_Update) isCustomerClientLinkOperation_Operation() {}
+
+func (m *CustomerClientLinkOperation) GetOperation() isCustomerClientLinkOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerClientLinkOperation) GetCreate() *resources.CustomerClientLink {
+	if x, ok := m.GetOperation().(*CustomerClientLinkOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerClientLinkOperation) GetUpdate() *resources.CustomerClientLink {
+	if x, ok := m.GetOperation().(*CustomerClientLinkOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerClientLinkOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerClientLinkOperation_Create)(nil),
+		(*CustomerClientLinkOperation_Update)(nil),
+	}
+}
+
+// Response message for a CustomerClientLink mutate.
+type MutateCustomerClientLinkResponse struct {
+	// A result that identifies the resource affected by the mutate request.
+	Result               *MutateCustomerClientLinkResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateCustomerClientLinkResponse) Reset()         { *m = MutateCustomerClientLinkResponse{} }
+func (m *MutateCustomerClientLinkResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerClientLinkResponse) ProtoMessage()    {}
+func (*MutateCustomerClientLinkResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b6996d934213c3f, []int{3}
+}
+
+func (m *MutateCustomerClientLinkResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerClientLinkResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerClientLinkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerClientLinkResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerClientLinkResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerClientLinkResponse.Merge(m, src)
+}
+func (m *MutateCustomerClientLinkResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerClientLinkResponse.Size(m)
+}
+func (m *MutateCustomerClientLinkResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerClientLinkResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerClientLinkResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerClientLinkResponse) GetResult() *MutateCustomerClientLinkResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for a single customer client link mutate.
+type MutateCustomerClientLinkResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerClientLinkResult) Reset()         { *m = MutateCustomerClientLinkResult{} }
+func (m *MutateCustomerClientLinkResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerClientLinkResult) ProtoMessage()    {}
+func (*MutateCustomerClientLinkResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b6996d934213c3f, []int{4}
+}
+
+func (m *MutateCustomerClientLinkResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerClientLinkResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerClientLinkResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerClientLinkResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerClientLinkResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerClientLinkResult.Merge(m, src)
+}
+func (m *MutateCustomerClientLinkResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerClientLinkResult.Size(m)
+}
+func (m *MutateCustomerClientLinkResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerClientLinkResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerClientLinkResult proto.InternalMessageInfo
+
+func (m *MutateCustomerClientLinkResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerClientLinkRequest)(nil), "google.ads.googleads.v3.services.GetCustomerClientLinkRequest")
+	proto.RegisterType((*MutateCustomerClientLinkRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerClientLinkRequest")
+	proto.RegisterType((*CustomerClientLinkOperation)(nil), "google.ads.googleads.v3.services.CustomerClientLinkOperation")
+	proto.RegisterType((*MutateCustomerClientLinkResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerClientLinkResponse")
+	proto.RegisterType((*MutateCustomerClientLinkResult)(nil), "google.ads.googleads.v3.services.MutateCustomerClientLinkResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_client_link_service.proto", fileDescriptor_0b6996d934213c3f)
+}
+
+var fileDescriptor_0b6996d934213c3f = []byte{
+	// 655 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6b, 0xd4, 0x40,
+	0x14, 0xc7, 0x4d, 0x5a, 0x0a, 0x9d, 0xd5, 0xcb, 0x40, 0x71, 0xdd, 0x96, 0x76, 0x89, 0x3d, 0x94,
+	0x45, 0x26, 0xd0, 0xa5, 0x28, 0xa9, 0x2b, 0x66, 0x8b, 0xb6, 0x82, 0xb5, 0x65, 0x85, 0x22, 0xba,
+	0xb0, 0x4e, 0x93, 0x69, 0x0c, 0x4d, 0x32, 0x31, 0x33, 0xd9, 0x4b, 0xed, 0x45, 0xf0, 0xe0, 0xd9,
+	0x93, 0x57, 0x6f, 0xfa, 0xa7, 0xf4, 0xea, 0xad, 0x20, 0x78, 0xf0, 0xe4, 0x1f, 0x21, 0x92, 0xcc,
+	0x4c, 0x36, 0xa5, 0x9b, 0x5d, 0x68, 0x6f, 0x6f, 0xf3, 0xbe, 0xf3, 0x79, 0x3f, 0x67, 0x16, 0x6c,
+	0x79, 0x94, 0x7a, 0x01, 0x31, 0xb1, 0xcb, 0x4c, 0x61, 0x66, 0xd6, 0xb0, 0x6d, 0x32, 0x92, 0x0c,
+	0x7d, 0x87, 0x30, 0xd3, 0x49, 0x19, 0xa7, 0x21, 0x49, 0x06, 0x4e, 0xe0, 0x93, 0x88, 0x0f, 0x02,
+	0x3f, 0x3a, 0x1e, 0x48, 0x2f, 0x8a, 0x13, 0xca, 0x29, 0x6c, 0x8a, 0x93, 0x08, 0xbb, 0x0c, 0x15,
+	0x10, 0x34, 0x6c, 0x23, 0x05, 0x69, 0x3c, 0xac, 0x0a, 0x93, 0x10, 0x46, 0xd3, 0xa4, 0x2a, 0x8e,
+	0xe0, 0x37, 0x96, 0xd4, 0xe9, 0xd8, 0x37, 0x71, 0x14, 0x51, 0x8e, 0xb9, 0x4f, 0x23, 0x26, 0xbd,
+	0xb7, 0x4b, 0x5e, 0x71, 0x56, 0x3a, 0x56, 0x4a, 0x8e, 0x23, 0x9f, 0x04, 0xee, 0xe0, 0x90, 0xbc,
+	0xc3, 0x43, 0x9f, 0x26, 0x52, 0x20, 0xf3, 0x36, 0xf3, 0x5f, 0x87, 0xe9, 0x91, 0x54, 0x85, 0x98,
+	0xc9, 0xc8, 0xc6, 0x0e, 0x58, 0xda, 0x26, 0x7c, 0x4b, 0xa6, 0xb6, 0x95, 0xd3, 0x9f, 0xfb, 0xd1,
+	0x71, 0x8f, 0xbc, 0x4f, 0x09, 0xe3, 0x70, 0x0d, 0xdc, 0x52, 0x15, 0x0c, 0x22, 0x1c, 0x92, 0xba,
+	0xd6, 0xd4, 0xd6, 0xe6, 0xbb, 0x33, 0xbf, 0x6d, 0xbd, 0x77, 0x53, 0x79, 0x5e, 0xe0, 0x90, 0x18,
+	0xdf, 0x35, 0xb0, 0xb2, 0x9b, 0x72, 0xcc, 0x49, 0x35, 0x6d, 0x15, 0xd4, 0x8a, 0x2e, 0xf8, 0x6e,
+	0x99, 0x05, 0xd4, 0xf7, 0x67, 0x2e, 0x7c, 0x0b, 0xe6, 0x69, 0x4c, 0x92, 0xbc, 0x07, 0x75, 0xbd,
+	0xa9, 0xad, 0xd5, 0xd6, 0x3b, 0x68, 0xda, 0x04, 0xd0, 0xe5, 0xa8, 0x7b, 0x0a, 0x22, 0x42, 0x8c,
+	0xa0, 0xc6, 0x67, 0x1d, 0x2c, 0x4e, 0xd0, 0xc3, 0x4d, 0x50, 0x4b, 0x63, 0x17, 0x73, 0x92, 0xb7,
+	0xaa, 0x3e, 0x9b, 0xe7, 0xd0, 0x50, 0x39, 0xa8, 0x6e, 0xa2, 0xa7, 0x59, 0x37, 0x77, 0x31, 0x3b,
+	0xee, 0x01, 0x21, 0xcf, 0x6c, 0xb8, 0x07, 0xe6, 0x9c, 0x84, 0x60, 0x2e, 0x7a, 0x55, 0x5b, 0xdf,
+	0xa8, 0xcc, 0xbd, 0xd8, 0x8d, 0x31, 0xc9, 0xef, 0xdc, 0xe8, 0x49, 0x4c, 0x06, 0x14, 0x78, 0xd9,
+	0x8c, 0xab, 0x03, 0x05, 0xa6, 0x5b, 0x2b, 0x35, 0xd8, 0xf8, 0x00, 0x9a, 0xd5, 0x63, 0x63, 0x31,
+	0x8d, 0x18, 0x81, 0xaf, 0xc0, 0x5c, 0x42, 0x58, 0x1a, 0x70, 0x59, 0xd2, 0xe3, 0xe9, 0xe3, 0x98,
+	0xc0, 0x4c, 0x03, 0xde, 0x93, 0x3c, 0xe3, 0x09, 0x58, 0x9e, 0xac, 0x84, 0x77, 0xc7, 0x6e, 0xe0,
+	0xc5, 0xe5, 0x5b, 0xff, 0x3a, 0x0b, 0xee, 0x5c, 0x26, 0xbc, 0x14, 0xc9, 0xc0, 0x5f, 0x1a, 0x58,
+	0x18, 0xbb, 0xe5, 0xf0, 0xd1, 0xf4, 0x42, 0x26, 0x5d, 0x8f, 0xc6, 0xd5, 0x46, 0x61, 0xec, 0x9e,
+	0xdb, 0x17, 0x8b, 0xfa, 0xf8, 0xf3, 0xcf, 0x17, 0xfd, 0x3e, 0xdc, 0xc8, 0x5e, 0x8c, 0x93, 0x0b,
+	0x9e, 0x8e, 0xba, 0x18, 0xcc, 0x6c, 0x15, 0x4f, 0xc8, 0x08, 0xc5, 0xcc, 0xd6, 0x29, 0xfc, 0xa7,
+	0x81, 0x7a, 0x55, 0x17, 0xa1, 0x7d, 0x9d, 0x59, 0x89, 0x2a, 0xbb, 0xd7, 0x1a, 0x77, 0xbe, 0x42,
+	0xc6, 0x9b, 0x73, 0x7b, 0xa1, 0x74, 0xf7, 0xef, 0x15, 0x0b, 0x98, 0x97, 0xde, 0x31, 0x1e, 0x64,
+	0xa5, 0x8f, 0x6a, 0x3d, 0x29, 0x69, 0x3b, 0xad, 0xd3, 0x71, 0x95, 0x5b, 0x61, 0x1e, 0xd3, 0xd2,
+	0x5a, 0x8d, 0xc5, 0x33, 0xbb, 0x3e, 0xca, 0x4b, 0x5a, 0xb1, 0xcf, 0x90, 0x43, 0xc3, 0xee, 0x27,
+	0x1d, 0xac, 0x3a, 0x34, 0x9c, 0x5a, 0x43, 0x77, 0xb9, 0x72, 0x83, 0xf6, 0xb3, 0x1b, 0xbf, 0xaf,
+	0xbd, 0xde, 0x91, 0x0c, 0x8f, 0x06, 0x38, 0xf2, 0x10, 0x4d, 0x3c, 0xd3, 0x23, 0x51, 0xfe, 0x1e,
+	0x98, 0xa3, 0xa8, 0xd5, 0xff, 0x35, 0x9b, 0xca, 0xf8, 0xa6, 0xcf, 0x6c, 0xdb, 0xf6, 0x0f, 0xbd,
+	0xb9, 0x2d, 0x80, 0xb6, 0xcb, 0x90, 0x30, 0x33, 0xeb, 0xa0, 0x8d, 0x64, 0x60, 0x76, 0xa6, 0x24,
+	0x7d, 0xdb, 0x65, 0xfd, 0x42, 0xd2, 0x3f, 0x68, 0xf7, 0x95, 0xe4, 0xaf, 0xbe, 0x2a, 0xbe, 0x5b,
+	0x96, 0xed, 0x32, 0xcb, 0x2a, 0x44, 0x96, 0x75, 0xd0, 0xb6, 0x2c, 0x25, 0x3b, 0x9c, 0xcb, 0xf3,
+	0x6c, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xaf, 0x67, 0x35, 0x12, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerClientLinkServiceClient is the client API for CustomerClientLinkService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerClientLinkServiceClient interface {
+	// Returns the requested CustomerClientLink in full detail.
+	GetCustomerClientLink(ctx context.Context, in *GetCustomerClientLinkRequest, opts ...grpc.CallOption) (*resources.CustomerClientLink, error)
+	// Creates or updates a customer client link. Operation statuses are returned.
+	MutateCustomerClientLink(ctx context.Context, in *MutateCustomerClientLinkRequest, opts ...grpc.CallOption) (*MutateCustomerClientLinkResponse, error)
+}
+
+type customerClientLinkServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerClientLinkServiceClient(cc grpc.ClientConnInterface) CustomerClientLinkServiceClient {
+	return &customerClientLinkServiceClient{cc}
+}
+
+func (c *customerClientLinkServiceClient) GetCustomerClientLink(ctx context.Context, in *GetCustomerClientLinkRequest, opts ...grpc.CallOption) (*resources.CustomerClientLink, error) {
+	out := new(resources.CustomerClientLink)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerClientLinkService/GetCustomerClientLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerClientLinkServiceClient) MutateCustomerClientLink(ctx context.Context, in *MutateCustomerClientLinkRequest, opts ...grpc.CallOption) (*MutateCustomerClientLinkResponse, error) {
+	out := new(MutateCustomerClientLinkResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerClientLinkService/MutateCustomerClientLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerClientLinkServiceServer is the server API for CustomerClientLinkService service.
+type CustomerClientLinkServiceServer interface {
+	// Returns the requested CustomerClientLink in full detail.
+	GetCustomerClientLink(context.Context, *GetCustomerClientLinkRequest) (*resources.CustomerClientLink, error)
+	// Creates or updates a customer client link. Operation statuses are returned.
+	MutateCustomerClientLink(context.Context, *MutateCustomerClientLinkRequest) (*MutateCustomerClientLinkResponse, error)
+}
+
+// UnimplementedCustomerClientLinkServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerClientLinkServiceServer struct {
+}
+
+func (*UnimplementedCustomerClientLinkServiceServer) GetCustomerClientLink(ctx context.Context, req *GetCustomerClientLinkRequest) (*resources.CustomerClientLink, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCustomerClientLink not implemented")
+}
+func (*UnimplementedCustomerClientLinkServiceServer) MutateCustomerClientLink(ctx context.Context, req *MutateCustomerClientLinkRequest) (*MutateCustomerClientLinkResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateCustomerClientLink not implemented")
+}
+
+func RegisterCustomerClientLinkServiceServer(s *grpc.Server, srv CustomerClientLinkServiceServer) {
+	s.RegisterService(&_CustomerClientLinkService_serviceDesc, srv)
+}
+
+func _CustomerClientLinkService_GetCustomerClientLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerClientLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerClientLinkServiceServer).GetCustomerClientLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerClientLinkService/GetCustomerClientLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerClientLinkServiceServer).GetCustomerClientLink(ctx, req.(*GetCustomerClientLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerClientLinkService_MutateCustomerClientLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerClientLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerClientLinkServiceServer).MutateCustomerClientLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerClientLinkService/MutateCustomerClientLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerClientLinkServiceServer).MutateCustomerClientLink(ctx, req.(*MutateCustomerClientLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerClientLinkService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerClientLinkService",
+	HandlerType: (*CustomerClientLinkServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerClientLink",
+			Handler:    _CustomerClientLinkService_GetCustomerClientLink_Handler,
+		},
+		{
+			MethodName: "MutateCustomerClientLink",
+			Handler:    _CustomerClientLinkService_MutateCustomerClientLink_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_client_link_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_client_service.pb.go b/googleapis/ads/googleads/v3/services/customer_client_service.pb.go
new file mode 100644
index 0000000..acb3895
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_client_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_client_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerClientService.GetCustomerClient][google.ads.googleads.v3.services.CustomerClientService.GetCustomerClient].
+type GetCustomerClientRequest struct {
+	// Required. The resource name of the client to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerClientRequest) Reset()         { *m = GetCustomerClientRequest{} }
+func (m *GetCustomerClientRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerClientRequest) ProtoMessage()    {}
+func (*GetCustomerClientRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_275643255b459061, []int{0}
+}
+
+func (m *GetCustomerClientRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerClientRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerClientRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerClientRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerClientRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerClientRequest.Merge(m, src)
+}
+func (m *GetCustomerClientRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerClientRequest.Size(m)
+}
+func (m *GetCustomerClientRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerClientRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerClientRequest proto.InternalMessageInfo
+
+func (m *GetCustomerClientRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerClientRequest)(nil), "google.ads.googleads.v3.services.GetCustomerClientRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_client_service.proto", fileDescriptor_275643255b459061)
+}
+
+var fileDescriptor_275643255b459061 = []byte{
+	// 404 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4a, 0xeb, 0x40,
+	0x14, 0x25, 0x29, 0x3c, 0x78, 0xe1, 0xbd, 0x85, 0x01, 0xb1, 0x44, 0xc1, 0x52, 0xba, 0x28, 0x5d,
+	0xcc, 0x50, 0xb3, 0x10, 0x46, 0x14, 0xa6, 0x15, 0xaa, 0x1b, 0x29, 0x15, 0xba, 0x90, 0x40, 0x98,
+	0x26, 0x63, 0x0c, 0x24, 0x99, 0x9a, 0x49, 0xb3, 0x11, 0x17, 0x8a, 0x7f, 0xe0, 0x1f, 0xb8, 0xf4,
+	0x53, 0x0a, 0xae, 0xdc, 0xb9, 0x72, 0xe1, 0xca, 0xaf, 0x90, 0x74, 0x32, 0x69, 0x83, 0x0d, 0xdd,
+	0x1d, 0x72, 0xce, 0xb9, 0x67, 0xee, 0xb9, 0xd1, 0x4e, 0x3c, 0xc6, 0xbc, 0x80, 0x42, 0xe2, 0x72,
+	0x28, 0x60, 0x86, 0x52, 0x13, 0x72, 0x1a, 0xa7, 0xbe, 0x43, 0x39, 0x74, 0x66, 0x3c, 0x61, 0x21,
+	0x8d, 0x6d, 0x27, 0xf0, 0x69, 0x94, 0xd8, 0x39, 0x01, 0xa6, 0x31, 0x4b, 0x98, 0xde, 0x10, 0x26,
+	0x40, 0x5c, 0x0e, 0x0a, 0x3f, 0x48, 0x4d, 0x20, 0xfd, 0xc6, 0x61, 0x55, 0x42, 0x4c, 0x39, 0x9b,
+	0xc5, 0x6b, 0x22, 0xc4, 0x68, 0x63, 0x4f, 0x1a, 0xa7, 0x3e, 0x24, 0x51, 0xc4, 0x12, 0x92, 0xf8,
+	0x2c, 0xe2, 0x39, 0xbb, 0xb3, 0xc2, 0x96, 0x6c, 0xfb, 0x2b, 0xc4, 0xb5, 0x4f, 0x03, 0xd7, 0x9e,
+	0xd0, 0x1b, 0x92, 0xfa, 0x2c, 0x16, 0x82, 0xe6, 0xa9, 0x56, 0x1f, 0xd0, 0xa4, 0x9f, 0x67, 0xf6,
+	0x17, 0xde, 0x11, 0xbd, 0x9d, 0x51, 0x9e, 0xe8, 0x6d, 0xed, 0xbf, 0x7c, 0x96, 0x1d, 0x91, 0x90,
+	0xd6, 0x95, 0x86, 0xd2, 0xfe, 0xdb, 0xab, 0x7d, 0x62, 0x75, 0xf4, 0x4f, 0x32, 0x17, 0x24, 0xa4,
+	0x07, 0x4f, 0xaa, 0xb6, 0x5d, 0x9e, 0x71, 0x29, 0x36, 0xd6, 0xdf, 0x14, 0x6d, 0xeb, 0x57, 0x80,
+	0x8e, 0xc0, 0xa6, 0xa6, 0x40, 0xd5, 0xab, 0x8c, 0x6e, 0xa5, 0xb7, 0xe8, 0x10, 0x94, 0x9d, 0xcd,
+	0xf3, 0x0f, 0x5c, 0xde, 0xe4, 0xf1, 0xfd, 0xeb, 0x59, 0x35, 0xf5, 0x6e, 0xd6, 0xfc, 0x5d, 0x89,
+	0x39, 0x96, 0xf5, 0x73, 0xd8, 0x29, 0x4e, 0x21, 0xc6, 0x70, 0xd8, 0xb9, 0x37, 0x76, 0xe7, 0xb8,
+	0xbe, 0x0c, 0xcd, 0xd1, 0xd4, 0xe7, 0xc0, 0x61, 0x61, 0xef, 0x41, 0xd5, 0x5a, 0x0e, 0x0b, 0x37,
+	0x2e, 0xd7, 0x33, 0xd6, 0x96, 0x35, 0xcc, 0x2e, 0x32, 0x54, 0xae, 0xce, 0x72, 0xbf, 0xc7, 0x02,
+	0x12, 0x79, 0x80, 0xc5, 0x1e, 0xf4, 0x68, 0xb4, 0xb8, 0x17, 0x5c, 0x26, 0x56, 0xff, 0xa5, 0x47,
+	0x12, 0xbc, 0xa8, 0xb5, 0x01, 0xc6, 0xaf, 0x6a, 0x63, 0x20, 0x06, 0x62, 0x97, 0x03, 0x01, 0x33,
+	0x34, 0x36, 0x41, 0x1e, 0xcc, 0xe7, 0x52, 0x62, 0x61, 0x97, 0x5b, 0x85, 0xc4, 0x1a, 0x9b, 0x96,
+	0x94, 0x7c, 0xab, 0x2d, 0xf1, 0x1d, 0x21, 0xec, 0x72, 0x84, 0x0a, 0x11, 0x42, 0x63, 0x13, 0x21,
+	0x29, 0x9b, 0xfc, 0x59, 0xbc, 0xd3, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0x63, 0x55, 0x92, 0x93,
+	0x4c, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerClientServiceClient is the client API for CustomerClientService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerClientServiceClient interface {
+	// Returns the requested client in full detail.
+	GetCustomerClient(ctx context.Context, in *GetCustomerClientRequest, opts ...grpc.CallOption) (*resources.CustomerClient, error)
+}
+
+type customerClientServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerClientServiceClient(cc grpc.ClientConnInterface) CustomerClientServiceClient {
+	return &customerClientServiceClient{cc}
+}
+
+func (c *customerClientServiceClient) GetCustomerClient(ctx context.Context, in *GetCustomerClientRequest, opts ...grpc.CallOption) (*resources.CustomerClient, error) {
+	out := new(resources.CustomerClient)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerClientService/GetCustomerClient", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerClientServiceServer is the server API for CustomerClientService service.
+type CustomerClientServiceServer interface {
+	// Returns the requested client in full detail.
+	GetCustomerClient(context.Context, *GetCustomerClientRequest) (*resources.CustomerClient, error)
+}
+
+// UnimplementedCustomerClientServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerClientServiceServer struct {
+}
+
+func (*UnimplementedCustomerClientServiceServer) GetCustomerClient(ctx context.Context, req *GetCustomerClientRequest) (*resources.CustomerClient, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCustomerClient not implemented")
+}
+
+func RegisterCustomerClientServiceServer(s *grpc.Server, srv CustomerClientServiceServer) {
+	s.RegisterService(&_CustomerClientService_serviceDesc, srv)
+}
+
+func _CustomerClientService_GetCustomerClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerClientRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerClientServiceServer).GetCustomerClient(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerClientService/GetCustomerClient",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerClientServiceServer).GetCustomerClient(ctx, req.(*GetCustomerClientRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerClientService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerClientService",
+	HandlerType: (*CustomerClientServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerClient",
+			Handler:    _CustomerClientService_GetCustomerClient_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_client_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_extension_setting_service.pb.go b/googleapis/ads/googleads/v3/services/customer_extension_setting_service.pb.go
new file mode 100644
index 0000000..4545fcc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_extension_setting_service.pb.go
@@ -0,0 +1,539 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_extension_setting_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [CustomerExtensionSettingService.GetCustomerExtensionSetting][google.ads.googleads.v3.services.CustomerExtensionSettingService.GetCustomerExtensionSetting].
+type GetCustomerExtensionSettingRequest struct {
+	// Required. The resource name of the customer extension setting to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerExtensionSettingRequest) Reset()         { *m = GetCustomerExtensionSettingRequest{} }
+func (m *GetCustomerExtensionSettingRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerExtensionSettingRequest) ProtoMessage()    {}
+func (*GetCustomerExtensionSettingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_56ee6b2d7db0d86b, []int{0}
+}
+
+func (m *GetCustomerExtensionSettingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerExtensionSettingRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerExtensionSettingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerExtensionSettingRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerExtensionSettingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerExtensionSettingRequest.Merge(m, src)
+}
+func (m *GetCustomerExtensionSettingRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerExtensionSettingRequest.Size(m)
+}
+func (m *GetCustomerExtensionSettingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerExtensionSettingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerExtensionSettingRequest proto.InternalMessageInfo
+
+func (m *GetCustomerExtensionSettingRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [CustomerExtensionSettingService.MutateCustomerExtensionSettings][google.ads.googleads.v3.services.CustomerExtensionSettingService.MutateCustomerExtensionSettings].
+type MutateCustomerExtensionSettingsRequest struct {
+	// Required. The ID of the customer whose customer extension settings are being
+	// modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual customer extension
+	// settings.
+	Operations []*CustomerExtensionSettingOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerExtensionSettingsRequest) Reset() {
+	*m = MutateCustomerExtensionSettingsRequest{}
+}
+func (m *MutateCustomerExtensionSettingsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerExtensionSettingsRequest) ProtoMessage()    {}
+func (*MutateCustomerExtensionSettingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_56ee6b2d7db0d86b, []int{1}
+}
+
+func (m *MutateCustomerExtensionSettingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerExtensionSettingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerExtensionSettingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerExtensionSettingsRequest.Merge(m, src)
+}
+func (m *MutateCustomerExtensionSettingsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsRequest.Size(m)
+}
+func (m *MutateCustomerExtensionSettingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerExtensionSettingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerExtensionSettingsRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerExtensionSettingsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerExtensionSettingsRequest) GetOperations() []*CustomerExtensionSettingOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCustomerExtensionSettingsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCustomerExtensionSettingsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a customer extension setting.
+type CustomerExtensionSettingOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerExtensionSettingOperation_Create
+	//	*CustomerExtensionSettingOperation_Update
+	//	*CustomerExtensionSettingOperation_Remove
+	Operation            isCustomerExtensionSettingOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *CustomerExtensionSettingOperation) Reset()         { *m = CustomerExtensionSettingOperation{} }
+func (m *CustomerExtensionSettingOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerExtensionSettingOperation) ProtoMessage()    {}
+func (*CustomerExtensionSettingOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_56ee6b2d7db0d86b, []int{2}
+}
+
+func (m *CustomerExtensionSettingOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerExtensionSettingOperation.Unmarshal(m, b)
+}
+func (m *CustomerExtensionSettingOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerExtensionSettingOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerExtensionSettingOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerExtensionSettingOperation.Merge(m, src)
+}
+func (m *CustomerExtensionSettingOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerExtensionSettingOperation.Size(m)
+}
+func (m *CustomerExtensionSettingOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerExtensionSettingOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerExtensionSettingOperation proto.InternalMessageInfo
+
+func (m *CustomerExtensionSettingOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomerExtensionSettingOperation_Operation interface {
+	isCustomerExtensionSettingOperation_Operation()
+}
+
+type CustomerExtensionSettingOperation_Create struct {
+	Create *resources.CustomerExtensionSetting `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerExtensionSettingOperation_Update struct {
+	Update *resources.CustomerExtensionSetting `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CustomerExtensionSettingOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CustomerExtensionSettingOperation_Create) isCustomerExtensionSettingOperation_Operation() {}
+
+func (*CustomerExtensionSettingOperation_Update) isCustomerExtensionSettingOperation_Operation() {}
+
+func (*CustomerExtensionSettingOperation_Remove) isCustomerExtensionSettingOperation_Operation() {}
+
+func (m *CustomerExtensionSettingOperation) GetOperation() isCustomerExtensionSettingOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerExtensionSettingOperation) GetCreate() *resources.CustomerExtensionSetting {
+	if x, ok := m.GetOperation().(*CustomerExtensionSettingOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerExtensionSettingOperation) GetUpdate() *resources.CustomerExtensionSetting {
+	if x, ok := m.GetOperation().(*CustomerExtensionSettingOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CustomerExtensionSettingOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CustomerExtensionSettingOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerExtensionSettingOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerExtensionSettingOperation_Create)(nil),
+		(*CustomerExtensionSettingOperation_Update)(nil),
+		(*CustomerExtensionSettingOperation_Remove)(nil),
+	}
+}
+
+// Response message for a customer extension setting mutate.
+type MutateCustomerExtensionSettingsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCustomerExtensionSettingResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *MutateCustomerExtensionSettingsResponse) Reset() {
+	*m = MutateCustomerExtensionSettingsResponse{}
+}
+func (m *MutateCustomerExtensionSettingsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerExtensionSettingsResponse) ProtoMessage()    {}
+func (*MutateCustomerExtensionSettingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_56ee6b2d7db0d86b, []int{3}
+}
+
+func (m *MutateCustomerExtensionSettingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerExtensionSettingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerExtensionSettingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerExtensionSettingsResponse.Merge(m, src)
+}
+func (m *MutateCustomerExtensionSettingsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerExtensionSettingsResponse.Size(m)
+}
+func (m *MutateCustomerExtensionSettingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerExtensionSettingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerExtensionSettingsResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerExtensionSettingsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCustomerExtensionSettingsResponse) GetResults() []*MutateCustomerExtensionSettingResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the customer extension setting mutate.
+type MutateCustomerExtensionSettingResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerExtensionSettingResult) Reset()         { *m = MutateCustomerExtensionSettingResult{} }
+func (m *MutateCustomerExtensionSettingResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerExtensionSettingResult) ProtoMessage()    {}
+func (*MutateCustomerExtensionSettingResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_56ee6b2d7db0d86b, []int{4}
+}
+
+func (m *MutateCustomerExtensionSettingResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerExtensionSettingResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerExtensionSettingResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerExtensionSettingResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerExtensionSettingResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerExtensionSettingResult.Merge(m, src)
+}
+func (m *MutateCustomerExtensionSettingResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerExtensionSettingResult.Size(m)
+}
+func (m *MutateCustomerExtensionSettingResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerExtensionSettingResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerExtensionSettingResult proto.InternalMessageInfo
+
+func (m *MutateCustomerExtensionSettingResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerExtensionSettingRequest)(nil), "google.ads.googleads.v3.services.GetCustomerExtensionSettingRequest")
+	proto.RegisterType((*MutateCustomerExtensionSettingsRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerExtensionSettingsRequest")
+	proto.RegisterType((*CustomerExtensionSettingOperation)(nil), "google.ads.googleads.v3.services.CustomerExtensionSettingOperation")
+	proto.RegisterType((*MutateCustomerExtensionSettingsResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerExtensionSettingsResponse")
+	proto.RegisterType((*MutateCustomerExtensionSettingResult)(nil), "google.ads.googleads.v3.services.MutateCustomerExtensionSettingResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_extension_setting_service.proto", fileDescriptor_56ee6b2d7db0d86b)
+}
+
+var fileDescriptor_56ee6b2d7db0d86b = []byte{
+	// 776 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xbf, 0x6f, 0xdb, 0x46,
+	0x14, 0xae, 0x28, 0xc3, 0xad, 0x4f, 0x76, 0x0b, 0x5c, 0xd1, 0x56, 0x90, 0x0b, 0x58, 0x65, 0x85,
+	0x5a, 0x10, 0x0a, 0x12, 0x90, 0x36, 0x0a, 0x2e, 0x40, 0xb9, 0x96, 0x6d, 0x14, 0xfe, 0x01, 0x0a,
+	0xf5, 0x50, 0x08, 0x60, 0x4f, 0xe4, 0x59, 0x26, 0x4c, 0xf2, 0x98, 0xbb, 0xa3, 0x10, 0xc3, 0xf0,
+	0x92, 0x21, 0x4b, 0xc6, 0x6c, 0x19, 0x33, 0x66, 0xcf, 0x3f, 0xe1, 0xd5, 0x9b, 0xa7, 0x0c, 0x99,
+	0xb2, 0x67, 0x0f, 0xc8, 0xe3, 0xe9, 0x87, 0x13, 0x9a, 0x01, 0xec, 0xed, 0xe9, 0xde, 0xc7, 0xef,
+	0x7d, 0xf7, 0xde, 0x77, 0x4f, 0x60, 0x7f, 0x4c, 0xc8, 0xd8, 0xc7, 0x3a, 0x72, 0x99, 0x2e, 0xc2,
+	0x24, 0x9a, 0x74, 0x74, 0x86, 0xe9, 0xc4, 0x73, 0x30, 0xd3, 0x9d, 0x98, 0x71, 0x12, 0x60, 0x6a,
+	0xe3, 0xa7, 0x1c, 0x87, 0xcc, 0x23, 0xa1, 0xcd, 0x30, 0xe7, 0x5e, 0x38, 0xb6, 0x33, 0x8c, 0x16,
+	0x51, 0xc2, 0x09, 0xac, 0x8b, 0xef, 0x35, 0xe4, 0x32, 0x6d, 0x4a, 0xa5, 0x4d, 0x3a, 0x9a, 0xa4,
+	0xaa, 0xf5, 0xf2, 0x8a, 0x51, 0xcc, 0x48, 0x4c, 0xef, 0xaf, 0x26, 0xaa, 0xd4, 0x7e, 0x95, 0x1c,
+	0x91, 0xa7, 0xa3, 0x30, 0x24, 0x1c, 0x71, 0x8f, 0x84, 0x2c, 0xcb, 0xfe, 0x32, 0x97, 0x75, 0x7c,
+	0x0f, 0x87, 0x3c, 0x4b, 0x6c, 0xcc, 0x25, 0x4e, 0x3d, 0xec, 0xbb, 0xf6, 0x08, 0x9f, 0xa1, 0x89,
+	0x47, 0x68, 0x06, 0xc8, 0xd4, 0xeb, 0xe9, 0xaf, 0x51, 0x7c, 0x9a, 0xa1, 0x02, 0xc4, 0xce, 0xef,
+	0x70, 0xd3, 0xc8, 0xd1, 0x19, 0x47, 0x3c, 0xce, 0x8a, 0xaa, 0x87, 0x40, 0xdd, 0xc5, 0x7c, 0x3b,
+	0x53, 0xbe, 0x23, 0x85, 0x0f, 0x84, 0x6e, 0x0b, 0x3f, 0x89, 0x31, 0xe3, 0xb0, 0x09, 0xd6, 0xe4,
+	0x35, 0xed, 0x10, 0x05, 0xb8, 0x5a, 0xaa, 0x97, 0x9a, 0x2b, 0xbd, 0xf2, 0x3b, 0x53, 0xb1, 0x56,
+	0x65, 0xe6, 0x10, 0x05, 0x58, 0x7d, 0xae, 0x80, 0x3f, 0x0e, 0x62, 0x8e, 0x38, 0xce, 0xe3, 0x64,
+	0x92, 0xb4, 0x01, 0x2a, 0xd3, 0x8e, 0x79, 0xee, 0x3c, 0x25, 0x90, 0xe7, 0xfb, 0x2e, 0x3c, 0x03,
+	0x80, 0x44, 0x98, 0x8a, 0x4e, 0x55, 0x95, 0x7a, 0xb9, 0x59, 0x69, 0x6f, 0x6b, 0x45, 0xe3, 0xd2,
+	0xf2, 0xaa, 0x1f, 0x49, 0xae, 0xac, 0xd2, 0x8c, 0x1b, 0x6e, 0x82, 0x1f, 0x22, 0x44, 0xb9, 0x87,
+	0x7c, 0xfb, 0x14, 0x79, 0x7e, 0x4c, 0x71, 0xb5, 0x5c, 0x2f, 0x35, 0xbf, 0xb3, 0xbe, 0xcf, 0x8e,
+	0xfb, 0xe2, 0x14, 0xfe, 0x0e, 0xd6, 0x26, 0xc8, 0xf7, 0x5c, 0xc4, 0xb1, 0x4d, 0x42, 0xff, 0xa2,
+	0xba, 0x94, 0xc2, 0x56, 0xe5, 0xe1, 0x51, 0xe8, 0x5f, 0xa8, 0x6f, 0x15, 0xf0, 0x5b, 0xa1, 0x08,
+	0xd8, 0x05, 0x95, 0x38, 0x4a, 0x89, 0x92, 0x61, 0xa5, 0x44, 0x95, 0x76, 0x4d, 0x5e, 0x4f, 0xce,
+	0x53, 0xeb, 0x27, 0xf3, 0x3c, 0x40, 0xec, 0xdc, 0x02, 0x02, 0x9e, 0xc4, 0xf0, 0x5f, 0xb0, 0xec,
+	0x50, 0x8c, 0xb8, 0x18, 0x47, 0xa5, 0xdd, 0xcd, 0x6d, 0xcb, 0xd4, 0xa3, 0xb9, 0x7d, 0xd9, 0xfb,
+	0xc6, 0xca, 0xc8, 0x12, 0x5a, 0x51, 0xa4, 0xaa, 0x3c, 0x0a, 0xad, 0x20, 0x83, 0x55, 0xb0, 0x4c,
+	0x71, 0x40, 0x26, 0xa2, 0xab, 0x2b, 0x49, 0x46, 0xfc, 0xee, 0x55, 0xc0, 0xca, 0x74, 0x0c, 0xea,
+	0x4d, 0x09, 0x6c, 0x16, 0x1a, 0x88, 0x45, 0x24, 0x64, 0x18, 0xf6, 0xc1, 0x4f, 0x77, 0x26, 0x66,
+	0x63, 0x4a, 0x09, 0x4d, 0x2b, 0x54, 0xda, 0x50, 0x0a, 0xa7, 0x91, 0xa3, 0x0d, 0x52, 0xd7, 0x5b,
+	0x3f, 0x2e, 0xce, 0x72, 0x27, 0x81, 0xc3, 0xff, 0xc1, 0xb7, 0x14, 0xb3, 0xd8, 0xe7, 0xd2, 0x60,
+	0xfd, 0x62, 0x83, 0xdd, 0xaf, 0xd1, 0x4a, 0xe9, 0x2c, 0x49, 0xab, 0xfe, 0x03, 0x1a, 0x5f, 0xf3,
+	0x41, 0x62, 0xad, 0x2f, 0x3c, 0xb4, 0xc5, 0x37, 0xd6, 0xbe, 0x59, 0x02, 0x1b, 0x79, 0x3c, 0x03,
+	0xa1, 0x0f, 0x7e, 0x2c, 0x81, 0xf5, 0x7b, 0x1e, 0x36, 0xfc, 0xbb, 0xf8, 0x86, 0xc5, 0x7b, 0xa1,
+	0xf6, 0x10, 0x6b, 0xa8, 0x83, 0x5b, 0x73, 0xf1, 0xb2, 0xcf, 0x6e, 0xde, 0xbf, 0x54, 0xb6, 0x60,
+	0x37, 0xd9, 0xaa, 0x97, 0x0b, 0x99, 0x2d, 0xb9, 0x10, 0x98, 0xde, 0x9a, 0xae, 0xd9, 0xcf, 0x7c,
+	0xa1, 0xb7, 0xae, 0xe0, 0x2b, 0x05, 0x6c, 0x14, 0xd8, 0x07, 0xee, 0x3d, 0x74, 0xba, 0x72, 0x85,
+	0xd5, 0xf6, 0x1f, 0x81, 0x49, 0x78, 0x59, 0x1d, 0xdd, 0x9a, 0x3f, 0xcf, 0xad, 0xc3, 0x3f, 0x67,
+	0x8b, 0x29, 0x6d, 0xcb, 0xb6, 0xfa, 0x57, 0xd2, 0x96, 0x59, 0x1f, 0x2e, 0xe7, 0xc0, 0x5b, 0xad,
+	0xab, 0xfc, 0xae, 0x18, 0x41, 0xaa, 0xc0, 0x28, 0xb5, 0x6a, 0xeb, 0xd7, 0x66, 0x75, 0xa6, 0x32,
+	0x8b, 0x22, 0x8f, 0x69, 0x0e, 0x09, 0x7a, 0x2f, 0x14, 0xd0, 0x70, 0x48, 0x50, 0x78, 0xa3, 0x5e,
+	0xa3, 0xc0, 0x7b, 0xc7, 0xc9, 0xd6, 0x3a, 0x2e, 0xfd, 0xb7, 0x97, 0x31, 0x8d, 0x89, 0x8f, 0xc2,
+	0xb1, 0x46, 0xe8, 0x58, 0x1f, 0xe3, 0x30, 0xdd, 0x69, 0xfa, 0xac, 0x76, 0xfe, 0xbf, 0x77, 0x57,
+	0x06, 0xaf, 0x95, 0xf2, 0xae, 0x69, 0xbe, 0x51, 0xea, 0xbb, 0x82, 0xd0, 0x74, 0x99, 0x26, 0xc2,
+	0x24, 0x3a, 0xe9, 0x68, 0x59, 0x61, 0x76, 0x2d, 0x21, 0x43, 0xd3, 0x65, 0xc3, 0x29, 0x64, 0x78,
+	0xd2, 0x19, 0x4a, 0xc8, 0x07, 0xa5, 0x21, 0xce, 0x0d, 0xc3, 0x74, 0x99, 0x61, 0x4c, 0x41, 0x86,
+	0x71, 0xd2, 0x31, 0x0c, 0x09, 0x1b, 0x2d, 0xa7, 0x3a, 0x3b, 0x9f, 0x02, 0x00, 0x00, 0xff, 0xff,
+	0xd4, 0xf0, 0x94, 0xc1, 0x64, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerExtensionSettingServiceClient is the client API for CustomerExtensionSettingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerExtensionSettingServiceClient interface {
+	// Returns the requested customer extension setting in full detail.
+	GetCustomerExtensionSetting(ctx context.Context, in *GetCustomerExtensionSettingRequest, opts ...grpc.CallOption) (*resources.CustomerExtensionSetting, error)
+	// Creates, updates, or removes customer extension settings. Operation
+	// statuses are returned.
+	MutateCustomerExtensionSettings(ctx context.Context, in *MutateCustomerExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateCustomerExtensionSettingsResponse, error)
+}
+
+type customerExtensionSettingServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerExtensionSettingServiceClient(cc grpc.ClientConnInterface) CustomerExtensionSettingServiceClient {
+	return &customerExtensionSettingServiceClient{cc}
+}
+
+func (c *customerExtensionSettingServiceClient) GetCustomerExtensionSetting(ctx context.Context, in *GetCustomerExtensionSettingRequest, opts ...grpc.CallOption) (*resources.CustomerExtensionSetting, error) {
+	out := new(resources.CustomerExtensionSetting)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerExtensionSettingService/GetCustomerExtensionSetting", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerExtensionSettingServiceClient) MutateCustomerExtensionSettings(ctx context.Context, in *MutateCustomerExtensionSettingsRequest, opts ...grpc.CallOption) (*MutateCustomerExtensionSettingsResponse, error) {
+	out := new(MutateCustomerExtensionSettingsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerExtensionSettingService/MutateCustomerExtensionSettings", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerExtensionSettingServiceServer is the server API for CustomerExtensionSettingService service.
+type CustomerExtensionSettingServiceServer interface {
+	// Returns the requested customer extension setting in full detail.
+	GetCustomerExtensionSetting(context.Context, *GetCustomerExtensionSettingRequest) (*resources.CustomerExtensionSetting, error)
+	// Creates, updates, or removes customer extension settings. Operation
+	// statuses are returned.
+	MutateCustomerExtensionSettings(context.Context, *MutateCustomerExtensionSettingsRequest) (*MutateCustomerExtensionSettingsResponse, error)
+}
+
+// UnimplementedCustomerExtensionSettingServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerExtensionSettingServiceServer struct {
+}
+
+func (*UnimplementedCustomerExtensionSettingServiceServer) GetCustomerExtensionSetting(ctx context.Context, req *GetCustomerExtensionSettingRequest) (*resources.CustomerExtensionSetting, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCustomerExtensionSetting not implemented")
+}
+func (*UnimplementedCustomerExtensionSettingServiceServer) MutateCustomerExtensionSettings(ctx context.Context, req *MutateCustomerExtensionSettingsRequest) (*MutateCustomerExtensionSettingsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCustomerExtensionSettings not implemented")
+}
+
+func RegisterCustomerExtensionSettingServiceServer(s *grpc.Server, srv CustomerExtensionSettingServiceServer) {
+	s.RegisterService(&_CustomerExtensionSettingService_serviceDesc, srv)
+}
+
+func _CustomerExtensionSettingService_GetCustomerExtensionSetting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerExtensionSettingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerExtensionSettingServiceServer).GetCustomerExtensionSetting(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerExtensionSettingService/GetCustomerExtensionSetting",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerExtensionSettingServiceServer).GetCustomerExtensionSetting(ctx, req.(*GetCustomerExtensionSettingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerExtensionSettingService_MutateCustomerExtensionSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerExtensionSettingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerExtensionSettingServiceServer).MutateCustomerExtensionSettings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerExtensionSettingService/MutateCustomerExtensionSettings",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerExtensionSettingServiceServer).MutateCustomerExtensionSettings(ctx, req.(*MutateCustomerExtensionSettingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerExtensionSettingService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerExtensionSettingService",
+	HandlerType: (*CustomerExtensionSettingServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerExtensionSetting",
+			Handler:    _CustomerExtensionSettingService_GetCustomerExtensionSetting_Handler,
+		},
+		{
+			MethodName: "MutateCustomerExtensionSettings",
+			Handler:    _CustomerExtensionSettingService_MutateCustomerExtensionSettings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_extension_setting_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_feed_service.pb.go b/googleapis/ads/googleads/v3/services/customer_feed_service.pb.go
new file mode 100644
index 0000000..ab7f54b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_feed_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_feed_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerFeedService.GetCustomerFeed][google.ads.googleads.v3.services.CustomerFeedService.GetCustomerFeed].
+type GetCustomerFeedRequest struct {
+	// Required. The resource name of the customer feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerFeedRequest) Reset()         { *m = GetCustomerFeedRequest{} }
+func (m *GetCustomerFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerFeedRequest) ProtoMessage()    {}
+func (*GetCustomerFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900ccf1cb9cd0de8, []int{0}
+}
+
+func (m *GetCustomerFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerFeedRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerFeedRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerFeedRequest.Merge(m, src)
+}
+func (m *GetCustomerFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerFeedRequest.Size(m)
+}
+func (m *GetCustomerFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerFeedRequest proto.InternalMessageInfo
+
+func (m *GetCustomerFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerFeedService.MutateCustomerFeeds][google.ads.googleads.v3.services.CustomerFeedService.MutateCustomerFeeds].
+type MutateCustomerFeedsRequest struct {
+	// Required. The ID of the customer whose customer feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual customer feeds.
+	Operations []*CustomerFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerFeedsRequest) Reset()         { *m = MutateCustomerFeedsRequest{} }
+func (m *MutateCustomerFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedsRequest) ProtoMessage()    {}
+func (*MutateCustomerFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900ccf1cb9cd0de8, []int{1}
+}
+
+func (m *MutateCustomerFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedsRequest.Merge(m, src)
+}
+func (m *MutateCustomerFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Size(m)
+}
+func (m *MutateCustomerFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerFeedsRequest) GetOperations() []*CustomerFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCustomerFeedsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCustomerFeedsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a customer feed.
+type CustomerFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerFeedOperation_Create
+	//	*CustomerFeedOperation_Update
+	//	*CustomerFeedOperation_Remove
+	Operation            isCustomerFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *CustomerFeedOperation) Reset()         { *m = CustomerFeedOperation{} }
+func (m *CustomerFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeedOperation) ProtoMessage()    {}
+func (*CustomerFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900ccf1cb9cd0de8, []int{2}
+}
+
+func (m *CustomerFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeedOperation.Unmarshal(m, b)
+}
+func (m *CustomerFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeedOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeedOperation.Merge(m, src)
+}
+func (m *CustomerFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeedOperation.Size(m)
+}
+func (m *CustomerFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeedOperation proto.InternalMessageInfo
+
+func (m *CustomerFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomerFeedOperation_Operation interface {
+	isCustomerFeedOperation_Operation()
+}
+
+type CustomerFeedOperation_Create struct {
+	Create *resources.CustomerFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerFeedOperation_Update struct {
+	Update *resources.CustomerFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CustomerFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CustomerFeedOperation_Create) isCustomerFeedOperation_Operation() {}
+
+func (*CustomerFeedOperation_Update) isCustomerFeedOperation_Operation() {}
+
+func (*CustomerFeedOperation_Remove) isCustomerFeedOperation_Operation() {}
+
+func (m *CustomerFeedOperation) GetOperation() isCustomerFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetCreate() *resources.CustomerFeed {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetUpdate() *resources.CustomerFeed {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerFeedOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerFeedOperation_Create)(nil),
+		(*CustomerFeedOperation_Update)(nil),
+		(*CustomerFeedOperation_Remove)(nil),
+	}
+}
+
+// Response message for a customer feed mutate.
+type MutateCustomerFeedsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCustomerFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateCustomerFeedsResponse) Reset()         { *m = MutateCustomerFeedsResponse{} }
+func (m *MutateCustomerFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedsResponse) ProtoMessage()    {}
+func (*MutateCustomerFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900ccf1cb9cd0de8, []int{3}
+}
+
+func (m *MutateCustomerFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedsResponse.Merge(m, src)
+}
+func (m *MutateCustomerFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Size(m)
+}
+func (m *MutateCustomerFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCustomerFeedsResponse) GetResults() []*MutateCustomerFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the customer feed mutate.
+type MutateCustomerFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerFeedResult) Reset()         { *m = MutateCustomerFeedResult{} }
+func (m *MutateCustomerFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedResult) ProtoMessage()    {}
+func (*MutateCustomerFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900ccf1cb9cd0de8, []int{4}
+}
+
+func (m *MutateCustomerFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedResult.Merge(m, src)
+}
+func (m *MutateCustomerFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedResult.Size(m)
+}
+func (m *MutateCustomerFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedResult proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerFeedRequest)(nil), "google.ads.googleads.v3.services.GetCustomerFeedRequest")
+	proto.RegisterType((*MutateCustomerFeedsRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerFeedsRequest")
+	proto.RegisterType((*CustomerFeedOperation)(nil), "google.ads.googleads.v3.services.CustomerFeedOperation")
+	proto.RegisterType((*MutateCustomerFeedsResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerFeedsResponse")
+	proto.RegisterType((*MutateCustomerFeedResult)(nil), "google.ads.googleads.v3.services.MutateCustomerFeedResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_feed_service.proto", fileDescriptor_900ccf1cb9cd0de8)
+}
+
+var fileDescriptor_900ccf1cb9cd0de8 = []byte{
+	// 758 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6b, 0xdb, 0x48,
+	0x14, 0x5f, 0xc9, 0x4b, 0x76, 0x33, 0x4e, 0x36, 0x30, 0x21, 0x59, 0xe1, 0x2c, 0xac, 0xd1, 0x06,
+	0xd6, 0x98, 0x45, 0x62, 0x6d, 0x96, 0x2c, 0x4a, 0x42, 0x91, 0x4b, 0xed, 0xe4, 0x90, 0x26, 0x28,
+	0xc5, 0x87, 0x62, 0x30, 0x13, 0x69, 0xec, 0x8a, 0x48, 0x1a, 0x75, 0x66, 0x64, 0x08, 0x21, 0x97,
+	0x7e, 0x83, 0xd2, 0x6f, 0xd0, 0x63, 0xbf, 0x42, 0xcf, 0xbd, 0xe4, 0xda, 0x5b, 0x4e, 0x3d, 0x14,
+	0x0a, 0x39, 0xf4, 0x2b, 0xb4, 0x48, 0xa3, 0xb1, 0xe5, 0xc4, 0xc6, 0x34, 0xb7, 0xa7, 0x79, 0xbf,
+	0xf7, 0x7b, 0xff, 0x9f, 0xc0, 0xde, 0x90, 0x90, 0x61, 0x80, 0x4d, 0xe4, 0x31, 0x53, 0x88, 0xa9,
+	0x34, 0x6a, 0x9a, 0x0c, 0xd3, 0x91, 0xef, 0x62, 0x66, 0xba, 0x09, 0xe3, 0x24, 0xc4, 0xb4, 0x3f,
+	0xc0, 0xd8, 0xeb, 0xe7, 0xcf, 0x46, 0x4c, 0x09, 0x27, 0xb0, 0x2a, 0x4c, 0x0c, 0xe4, 0x31, 0x63,
+	0x6c, 0x6d, 0x8c, 0x9a, 0x86, 0xb4, 0xae, 0xfc, 0x37, 0x8f, 0x9f, 0x62, 0x46, 0x12, 0x7a, 0xcf,
+	0x81, 0x20, 0xae, 0xfc, 0x21, 0xcd, 0x62, 0xdf, 0x44, 0x51, 0x44, 0x38, 0xe2, 0x3e, 0x89, 0x58,
+	0xae, 0xfd, 0xbd, 0xa0, 0x75, 0x03, 0x1f, 0x47, 0x3c, 0x57, 0xfc, 0x59, 0x50, 0x0c, 0x7c, 0x1c,
+	0x78, 0xfd, 0x33, 0xfc, 0x02, 0x8d, 0x7c, 0x42, 0x73, 0x40, 0x1e, 0xb0, 0x99, 0x7d, 0x9d, 0x25,
+	0x83, 0x1c, 0x15, 0x22, 0x76, 0x7e, 0x87, 0x9b, 0xc6, 0xae, 0xc9, 0x38, 0xe2, 0x49, 0xee, 0x54,
+	0x6f, 0x81, 0xcd, 0x0e, 0xe6, 0x8f, 0xf3, 0x60, 0xdb, 0x18, 0x7b, 0x0e, 0x7e, 0x99, 0x60, 0xc6,
+	0x61, 0x0d, 0xac, 0xca, 0x6c, 0xfa, 0x11, 0x0a, 0xb1, 0xa6, 0x54, 0x95, 0xda, 0x72, 0xab, 0xf4,
+	0xc9, 0x56, 0x9d, 0x15, 0xa9, 0x79, 0x8a, 0x42, 0xac, 0x7f, 0x55, 0x40, 0xe5, 0x28, 0xe1, 0x88,
+	0xe3, 0x22, 0x0f, 0x93, 0x44, 0xdb, 0xa0, 0x3c, 0x2e, 0x86, 0xef, 0x15, 0x69, 0x80, 0x7c, 0x3f,
+	0xf4, 0x60, 0x0f, 0x00, 0x12, 0x63, 0x2a, 0x2a, 0xa2, 0xa9, 0xd5, 0x52, 0xad, 0xdc, 0xd8, 0x31,
+	0x16, 0x75, 0xc2, 0x28, 0x7a, 0x3c, 0x96, 0xf6, 0x39, 0xfb, 0x84, 0x0f, 0xfe, 0x0d, 0xd6, 0x62,
+	0x44, 0xb9, 0x8f, 0x82, 0xfe, 0x00, 0xf9, 0x41, 0x42, 0xb1, 0x56, 0xaa, 0x2a, 0xb5, 0x5f, 0x9d,
+	0xdf, 0xf2, 0xe7, 0xb6, 0x78, 0x85, 0x7f, 0x81, 0xd5, 0x11, 0x0a, 0x7c, 0x0f, 0x71, 0xdc, 0x27,
+	0x51, 0x70, 0xa1, 0xfd, 0x9c, 0xc1, 0x56, 0xe4, 0xe3, 0x71, 0x14, 0x5c, 0xe8, 0xaf, 0x55, 0xb0,
+	0x31, 0xd3, 0x31, 0xdc, 0x05, 0xe5, 0x24, 0xce, 0x8c, 0xd3, 0xe2, 0x67, 0xc6, 0xe5, 0x46, 0x45,
+	0xa6, 0x21, 0xfb, 0x63, 0xb4, 0xd3, 0xfe, 0x1c, 0x21, 0x76, 0xee, 0x00, 0x01, 0x4f, 0x65, 0x78,
+	0x08, 0x96, 0x5c, 0x8a, 0x11, 0x17, 0xa5, 0x2e, 0x37, 0xcc, 0xb9, 0xe9, 0x8f, 0xc7, 0x6c, 0x2a,
+	0xff, 0x83, 0x9f, 0x9c, 0x9c, 0x20, 0xa5, 0x12, 0xc4, 0x9a, 0xfa, 0x60, 0x2a, 0x41, 0x00, 0x35,
+	0xb0, 0x44, 0x71, 0x48, 0x46, 0xa2, 0x62, 0xcb, 0xa9, 0x46, 0x7c, 0xb7, 0xca, 0x60, 0x79, 0x5c,
+	0x62, 0xfd, 0xbd, 0x02, 0xb6, 0x66, 0x0e, 0x01, 0x8b, 0x49, 0xc4, 0x30, 0x6c, 0x83, 0x8d, 0x3b,
+	0x1d, 0xe8, 0x63, 0x4a, 0x09, 0xcd, 0x58, 0xcb, 0x0d, 0x28, 0x03, 0xa4, 0xb1, 0x6b, 0x9c, 0x66,
+	0x13, 0xea, 0xac, 0x4f, 0xf7, 0xe6, 0x49, 0x0a, 0x87, 0xcf, 0xc0, 0x2f, 0x14, 0xb3, 0x24, 0xe0,
+	0x72, 0x48, 0xac, 0xc5, 0x43, 0x72, 0x3f, 0x2e, 0x27, 0xa3, 0x70, 0x24, 0x95, 0xfe, 0x08, 0x68,
+	0xf3, 0x40, 0xe9, 0x48, 0xcc, 0x58, 0x84, 0xe9, 0x1d, 0x68, 0x7c, 0x29, 0x81, 0xf5, 0xa2, 0xed,
+	0xa9, 0xf0, 0x0d, 0x3f, 0x28, 0x60, 0xed, 0xce, 0x82, 0xc1, 0xff, 0x17, 0x47, 0x3c, 0x7b, 0x27,
+	0x2b, 0x3f, 0xda, 0x46, 0xbd, 0x73, 0x63, 0x4f, 0x07, 0xff, 0xea, 0xe3, 0xe7, 0x37, 0xea, 0xbf,
+	0xd0, 0x4c, 0x8f, 0xd5, 0xe5, 0x94, 0x66, 0x5f, 0x2e, 0x23, 0x33, 0xeb, 0xe3, 0xeb, 0x95, 0xf5,
+	0xd0, 0xac, 0x5f, 0xc1, 0x5b, 0x05, 0xac, 0xcf, 0x68, 0x2f, 0xdc, 0x7b, 0x48, 0xf5, 0xe5, 0x69,
+	0xa8, 0xec, 0x3f, 0xd0, 0x5a, 0xcc, 0x94, 0xde, 0xbd, 0xb1, 0x37, 0x0b, 0xa7, 0xe5, 0x9f, 0xc9,
+	0xc2, 0x67, 0x69, 0xee, 0xe8, 0x8d, 0x34, 0xcd, 0x49, 0x5e, 0x97, 0x05, 0xf0, 0x7e, 0xfd, 0x6a,
+	0x3a, 0x4b, 0x2b, 0xcc, 0x3c, 0x59, 0x4a, 0xbd, 0xb2, 0x75, 0x6d, 0x6b, 0x93, 0x68, 0x72, 0x29,
+	0xf6, 0x99, 0xe1, 0x92, 0xb0, 0xf5, 0x4d, 0x01, 0xdb, 0x2e, 0x09, 0x17, 0x46, 0xde, 0xd2, 0x66,
+	0xcc, 0xc3, 0x49, 0x7a, 0x01, 0x4e, 0x94, 0xe7, 0x07, 0xb9, 0xf5, 0x90, 0x04, 0x28, 0x1a, 0x1a,
+	0x84, 0x0e, 0xcd, 0x21, 0x8e, 0xb2, 0xfb, 0x60, 0x4e, 0xfc, 0xcd, 0xff, 0x7f, 0xed, 0x4a, 0xe1,
+	0xad, 0x5a, 0xea, 0xd8, 0xf6, 0x3b, 0xb5, 0xda, 0x11, 0x84, 0xb6, 0xc7, 0x0c, 0x21, 0xa6, 0x52,
+	0xb7, 0x69, 0xe4, 0x8e, 0xd9, 0xb5, 0x84, 0xf4, 0x6c, 0x8f, 0xf5, 0xc6, 0x90, 0x5e, 0xb7, 0xd9,
+	0x93, 0x90, 0x5b, 0x75, 0x5b, 0xbc, 0x5b, 0x96, 0xed, 0x31, 0xcb, 0x1a, 0x83, 0x2c, 0xab, 0xdb,
+	0xb4, 0x2c, 0x09, 0x3b, 0x5b, 0xca, 0xe2, 0x6c, 0x7e, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xcc,
+	0xb1, 0x8a, 0x66, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerFeedServiceClient is the client API for CustomerFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerFeedServiceClient interface {
+	// Returns the requested customer feed in full detail.
+	GetCustomerFeed(ctx context.Context, in *GetCustomerFeedRequest, opts ...grpc.CallOption) (*resources.CustomerFeed, error)
+	// Creates, updates, or removes customer feeds. Operation statuses are
+	// returned.
+	MutateCustomerFeeds(ctx context.Context, in *MutateCustomerFeedsRequest, opts ...grpc.CallOption) (*MutateCustomerFeedsResponse, error)
+}
+
+type customerFeedServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerFeedServiceClient(cc grpc.ClientConnInterface) CustomerFeedServiceClient {
+	return &customerFeedServiceClient{cc}
+}
+
+func (c *customerFeedServiceClient) GetCustomerFeed(ctx context.Context, in *GetCustomerFeedRequest, opts ...grpc.CallOption) (*resources.CustomerFeed, error) {
+	out := new(resources.CustomerFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerFeedService/GetCustomerFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerFeedServiceClient) MutateCustomerFeeds(ctx context.Context, in *MutateCustomerFeedsRequest, opts ...grpc.CallOption) (*MutateCustomerFeedsResponse, error) {
+	out := new(MutateCustomerFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerFeedService/MutateCustomerFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerFeedServiceServer is the server API for CustomerFeedService service.
+type CustomerFeedServiceServer interface {
+	// Returns the requested customer feed in full detail.
+	GetCustomerFeed(context.Context, *GetCustomerFeedRequest) (*resources.CustomerFeed, error)
+	// Creates, updates, or removes customer feeds. Operation statuses are
+	// returned.
+	MutateCustomerFeeds(context.Context, *MutateCustomerFeedsRequest) (*MutateCustomerFeedsResponse, error)
+}
+
+// UnimplementedCustomerFeedServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerFeedServiceServer struct {
+}
+
+func (*UnimplementedCustomerFeedServiceServer) GetCustomerFeed(ctx context.Context, req *GetCustomerFeedRequest) (*resources.CustomerFeed, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCustomerFeed not implemented")
+}
+func (*UnimplementedCustomerFeedServiceServer) MutateCustomerFeeds(ctx context.Context, req *MutateCustomerFeedsRequest) (*MutateCustomerFeedsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCustomerFeeds not implemented")
+}
+
+func RegisterCustomerFeedServiceServer(s *grpc.Server, srv CustomerFeedServiceServer) {
+	s.RegisterService(&_CustomerFeedService_serviceDesc, srv)
+}
+
+func _CustomerFeedService_GetCustomerFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerFeedServiceServer).GetCustomerFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerFeedService/GetCustomerFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerFeedServiceServer).GetCustomerFeed(ctx, req.(*GetCustomerFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerFeedService_MutateCustomerFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerFeedServiceServer).MutateCustomerFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerFeedService/MutateCustomerFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerFeedServiceServer).MutateCustomerFeeds(ctx, req.(*MutateCustomerFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerFeedService",
+	HandlerType: (*CustomerFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerFeed",
+			Handler:    _CustomerFeedService_GetCustomerFeed_Handler,
+		},
+		{
+			MethodName: "MutateCustomerFeeds",
+			Handler:    _CustomerFeedService_MutateCustomerFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_feed_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_label_service.pb.go b/googleapis/ads/googleads/v3/services/customer_label_service.pb.go
new file mode 100644
index 0000000..afdf515
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_label_service.pb.go
@@ -0,0 +1,502 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerLabelService.GetCustomerLabel][google.ads.googleads.v3.services.CustomerLabelService.GetCustomerLabel].
+type GetCustomerLabelRequest struct {
+	// Required. The resource name of the customer-label relationship to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerLabelRequest) Reset()         { *m = GetCustomerLabelRequest{} }
+func (m *GetCustomerLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerLabelRequest) ProtoMessage()    {}
+func (*GetCustomerLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f8bb3d196a781b56, []int{0}
+}
+
+func (m *GetCustomerLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerLabelRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerLabelRequest.Merge(m, src)
+}
+func (m *GetCustomerLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerLabelRequest.Size(m)
+}
+func (m *GetCustomerLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerLabelRequest proto.InternalMessageInfo
+
+func (m *GetCustomerLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerLabelService.MutateCustomerLabels][google.ads.googleads.v3.services.CustomerLabelService.MutateCustomerLabels].
+type MutateCustomerLabelsRequest struct {
+	// Required. ID of the customer whose customer-label relationships are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on customer-label relationships.
+	Operations []*CustomerLabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerLabelsRequest) Reset()         { *m = MutateCustomerLabelsRequest{} }
+func (m *MutateCustomerLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerLabelsRequest) ProtoMessage()    {}
+func (*MutateCustomerLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f8bb3d196a781b56, []int{1}
+}
+
+func (m *MutateCustomerLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerLabelsRequest.Merge(m, src)
+}
+func (m *MutateCustomerLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerLabelsRequest.Size(m)
+}
+func (m *MutateCustomerLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerLabelsRequest) GetOperations() []*CustomerLabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCustomerLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCustomerLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on a customer-label relationship.
+type CustomerLabelOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerLabelOperation_Create
+	//	*CustomerLabelOperation_Remove
+	Operation            isCustomerLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *CustomerLabelOperation) Reset()         { *m = CustomerLabelOperation{} }
+func (m *CustomerLabelOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerLabelOperation) ProtoMessage()    {}
+func (*CustomerLabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f8bb3d196a781b56, []int{2}
+}
+
+func (m *CustomerLabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerLabelOperation.Unmarshal(m, b)
+}
+func (m *CustomerLabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerLabelOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerLabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerLabelOperation.Merge(m, src)
+}
+func (m *CustomerLabelOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerLabelOperation.Size(m)
+}
+func (m *CustomerLabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerLabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerLabelOperation proto.InternalMessageInfo
+
+type isCustomerLabelOperation_Operation interface {
+	isCustomerLabelOperation_Operation()
+}
+
+type CustomerLabelOperation_Create struct {
+	Create *resources.CustomerLabel `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerLabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*CustomerLabelOperation_Create) isCustomerLabelOperation_Operation() {}
+
+func (*CustomerLabelOperation_Remove) isCustomerLabelOperation_Operation() {}
+
+func (m *CustomerLabelOperation) GetOperation() isCustomerLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerLabelOperation) GetCreate() *resources.CustomerLabel {
+	if x, ok := m.GetOperation().(*CustomerLabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerLabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CustomerLabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerLabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerLabelOperation_Create)(nil),
+		(*CustomerLabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for a customer labels mutate.
+type MutateCustomerLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCustomerLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateCustomerLabelsResponse) Reset()         { *m = MutateCustomerLabelsResponse{} }
+func (m *MutateCustomerLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerLabelsResponse) ProtoMessage()    {}
+func (*MutateCustomerLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f8bb3d196a781b56, []int{3}
+}
+
+func (m *MutateCustomerLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerLabelsResponse.Merge(m, src)
+}
+func (m *MutateCustomerLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerLabelsResponse.Size(m)
+}
+func (m *MutateCustomerLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCustomerLabelsResponse) GetResults() []*MutateCustomerLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for a customer label mutate.
+type MutateCustomerLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerLabelResult) Reset()         { *m = MutateCustomerLabelResult{} }
+func (m *MutateCustomerLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerLabelResult) ProtoMessage()    {}
+func (*MutateCustomerLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f8bb3d196a781b56, []int{4}
+}
+
+func (m *MutateCustomerLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerLabelResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerLabelResult.Merge(m, src)
+}
+func (m *MutateCustomerLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerLabelResult.Size(m)
+}
+func (m *MutateCustomerLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerLabelResult proto.InternalMessageInfo
+
+func (m *MutateCustomerLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerLabelRequest)(nil), "google.ads.googleads.v3.services.GetCustomerLabelRequest")
+	proto.RegisterType((*MutateCustomerLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerLabelsRequest")
+	proto.RegisterType((*CustomerLabelOperation)(nil), "google.ads.googleads.v3.services.CustomerLabelOperation")
+	proto.RegisterType((*MutateCustomerLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerLabelsResponse")
+	proto.RegisterType((*MutateCustomerLabelResult)(nil), "google.ads.googleads.v3.services.MutateCustomerLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_label_service.proto", fileDescriptor_f8bb3d196a781b56)
+}
+
+var fileDescriptor_f8bb3d196a781b56 = []byte{
+	// 711 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x6e, 0xd3, 0x4a,
+	0x14, 0xbe, 0x76, 0xae, 0x7a, 0x6f, 0x27, 0xed, 0xbd, 0x68, 0x28, 0x6d, 0x9a, 0x56, 0x22, 0x32,
+	0x95, 0x88, 0x22, 0x64, 0x57, 0x89, 0x84, 0x8a, 0xab, 0x20, 0x9c, 0x8a, 0xb6, 0x20, 0xa0, 0x95,
+	0x2b, 0x8a, 0x84, 0x82, 0xac, 0xa9, 0x3d, 0x0d, 0x96, 0x6c, 0x8f, 0x99, 0x19, 0x47, 0xaa, 0xaa,
+	0x4a, 0x88, 0x2d, 0x4b, 0xde, 0x80, 0x25, 0xef, 0xc0, 0x03, 0xd0, 0x2d, 0xbb, 0xae, 0x58, 0xb0,
+	0x62, 0x81, 0xfa, 0x08, 0xc8, 0x3f, 0xe3, 0xc4, 0x21, 0x51, 0x44, 0x77, 0xc7, 0xe7, 0xe7, 0x3b,
+	0xe7, 0x3b, 0x3f, 0x63, 0xd0, 0xee, 0x11, 0xd2, 0xf3, 0xb0, 0x86, 0x1c, 0xa6, 0xa5, 0x62, 0x2c,
+	0xf5, 0x5b, 0x1a, 0xc3, 0xb4, 0xef, 0xda, 0x98, 0x69, 0x76, 0xc4, 0x38, 0xf1, 0x31, 0xb5, 0x3c,
+	0x74, 0x84, 0x3d, 0x2b, 0xd3, 0xab, 0x21, 0x25, 0x9c, 0xc0, 0x5a, 0x1a, 0xa3, 0x22, 0x87, 0xa9,
+	0x79, 0xb8, 0xda, 0x6f, 0xa9, 0x22, 0xbc, 0x7a, 0x77, 0x52, 0x02, 0x8a, 0x19, 0x89, 0xe8, 0xef,
+	0x19, 0x52, 0xe4, 0xea, 0xaa, 0x88, 0x0b, 0x5d, 0x0d, 0x05, 0x01, 0xe1, 0x88, 0xbb, 0x24, 0x60,
+	0x99, 0x75, 0x69, 0xc8, 0x6a, 0x7b, 0x2e, 0x0e, 0x78, 0x66, 0xb8, 0x39, 0x64, 0x38, 0x76, 0xb1,
+	0xe7, 0x58, 0x47, 0xf8, 0x35, 0xea, 0xbb, 0x84, 0x8e, 0x44, 0xd2, 0xd0, 0xd6, 0x18, 0x47, 0x3c,
+	0xca, 0x20, 0x95, 0x2d, 0xb0, 0xb4, 0x83, 0xf9, 0x56, 0x56, 0xcb, 0x93, 0xb8, 0x14, 0x13, 0xbf,
+	0x89, 0x30, 0xe3, 0xb0, 0x0e, 0xe6, 0x45, 0xb5, 0x56, 0x80, 0x7c, 0x5c, 0x91, 0x6a, 0x52, 0x7d,
+	0xb6, 0x53, 0xfa, 0x66, 0xc8, 0xe6, 0x9c, 0xb0, 0x3c, 0x43, 0x3e, 0x56, 0x2e, 0x25, 0xb0, 0xf2,
+	0x34, 0xe2, 0x88, 0xe3, 0x02, 0x10, 0x13, 0x48, 0x6b, 0xa0, 0x9c, 0xb3, 0x75, 0x9d, 0x61, 0x1c,
+	0x20, 0xf4, 0x8f, 0x1c, 0xf8, 0x0a, 0x00, 0x12, 0x62, 0x9a, 0x32, 0xae, 0xc8, 0xb5, 0x52, 0xbd,
+	0xdc, 0xdc, 0x50, 0xa7, 0xb5, 0x5a, 0x2d, 0xa4, 0xdc, 0x13, 0x00, 0x19, 0xfc, 0x00, 0x10, 0xde,
+	0x06, 0xff, 0x87, 0x88, 0x72, 0x17, 0x79, 0xd6, 0x31, 0x72, 0xbd, 0x88, 0xe2, 0x4a, 0xa9, 0x26,
+	0xd5, 0xff, 0x35, 0xff, 0xcb, 0xd4, 0xdb, 0xa9, 0x16, 0xde, 0x02, 0xf3, 0x7d, 0xe4, 0xb9, 0x0e,
+	0xe2, 0xd8, 0x22, 0x81, 0x77, 0x52, 0xf9, 0x3b, 0x71, 0x9b, 0x13, 0xca, 0xbd, 0xc0, 0x3b, 0x51,
+	0xde, 0x4b, 0x60, 0x71, 0x7c, 0x66, 0xf8, 0x18, 0xcc, 0xd8, 0x14, 0x23, 0x9e, 0x36, 0xac, 0xdc,
+	0x5c, 0x9f, 0xc8, 0x21, 0x5f, 0x86, 0x22, 0x89, 0xdd, 0xbf, 0xcc, 0x0c, 0x01, 0x56, 0xc0, 0x0c,
+	0xc5, 0x3e, 0xe9, 0xe3, 0x8a, 0x1c, 0x37, 0x2d, 0xb6, 0xa4, 0xdf, 0x9d, 0x32, 0x98, 0xcd, 0xc9,
+	0x29, 0x9f, 0x25, 0xb0, 0x3a, 0x7e, 0x00, 0x2c, 0x24, 0x01, 0xc3, 0x70, 0x1b, 0xdc, 0x18, 0x21,
+	0x6f, 0x61, 0x4a, 0x09, 0x4d, 0x5a, 0x50, 0x6e, 0x42, 0x51, 0x22, 0x0d, 0x6d, 0xf5, 0x20, 0xd9,
+	0x0f, 0xf3, 0x7a, 0xb1, 0x2d, 0x0f, 0x63, 0x77, 0xf8, 0x1c, 0xfc, 0x43, 0x31, 0x8b, 0x3c, 0x2e,
+	0x06, 0xb4, 0x39, 0x7d, 0x40, 0x63, 0x0a, 0x33, 0x13, 0x0c, 0x53, 0x60, 0x29, 0x0f, 0xc0, 0xf2,
+	0x44, 0xaf, 0x78, 0x1e, 0x63, 0xf6, 0xb0, 0xb8, 0x82, 0xcd, 0xcb, 0x12, 0x58, 0x28, 0x04, 0x1f,
+	0xa4, 0xe9, 0xe1, 0x17, 0x09, 0x5c, 0x1b, 0xdd, 0x70, 0x78, 0x6f, 0x7a, 0xd5, 0x13, 0xae, 0xa2,
+	0xfa, 0xc7, 0xd3, 0x54, 0x76, 0x2f, 0x8c, 0x22, 0x81, 0x77, 0x5f, 0xbf, 0x7f, 0x90, 0x9b, 0x70,
+	0x3d, 0x7e, 0x0f, 0x4e, 0x0b, 0x96, 0xb6, 0x38, 0x07, 0xa6, 0x35, 0xf2, 0x07, 0x22, 0x1d, 0xa5,
+	0xd6, 0x38, 0x83, 0x3f, 0x25, 0xb0, 0x30, 0x6e, 0xcc, 0xb0, 0x7d, 0xa5, 0x29, 0x88, 0xfb, 0xac,
+	0xde, 0xbf, 0x6a, 0x78, 0xba, 0x5d, 0xca, 0x8b, 0x0b, 0x63, 0x71, 0xe8, 0xc0, 0xef, 0x0c, 0xae,
+	0x2e, 0xa1, 0xba, 0xa1, 0xb4, 0x62, 0xaa, 0x03, 0x6e, 0xa7, 0x43, 0xce, 0xed, 0xc6, 0xd9, 0x08,
+	0x53, 0xdd, 0x4f, 0x72, 0xe9, 0x52, 0xa3, 0xba, 0x72, 0x6e, 0x54, 0x06, 0xf5, 0x64, 0x52, 0xe8,
+	0x32, 0xd5, 0x26, 0x7e, 0xe7, 0xad, 0x0c, 0xd6, 0x6c, 0xe2, 0x4f, 0xad, 0xbd, 0xb3, 0x3c, 0x6e,
+	0x31, 0xf6, 0xe3, 0xe7, 0x6f, 0x5f, 0x7a, 0xb9, 0x9b, 0x85, 0xf7, 0x88, 0x87, 0x82, 0x9e, 0x4a,
+	0x68, 0x4f, 0xeb, 0xe1, 0x20, 0x79, 0x1c, 0xb5, 0x41, 0xc2, 0xc9, 0x7f, 0x8a, 0x4d, 0x21, 0x7c,
+	0x94, 0x4b, 0x3b, 0x86, 0xf1, 0x49, 0xae, 0xed, 0xa4, 0x80, 0x86, 0xc3, 0xd4, 0x54, 0x8c, 0xa5,
+	0xc3, 0x96, 0x9a, 0x25, 0x66, 0xe7, 0xc2, 0xa5, 0x6b, 0x38, 0xac, 0x9b, 0xbb, 0x74, 0x0f, 0x5b,
+	0x5d, 0xe1, 0xf2, 0x43, 0x5e, 0x4b, 0xf5, 0xba, 0x6e, 0x38, 0x4c, 0xd7, 0x73, 0x27, 0x5d, 0x3f,
+	0x6c, 0xe9, 0xba, 0x70, 0x3b, 0x9a, 0x49, 0xea, 0x6c, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x05,
+	0xe9, 0xce, 0x0d, 0xd0, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerLabelServiceClient is the client API for CustomerLabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerLabelServiceClient interface {
+	// Returns the requested customer-label relationship in full detail.
+	GetCustomerLabel(ctx context.Context, in *GetCustomerLabelRequest, opts ...grpc.CallOption) (*resources.CustomerLabel, error)
+	// Creates and removes customer-label relationships.
+	// Operation statuses are returned.
+	MutateCustomerLabels(ctx context.Context, in *MutateCustomerLabelsRequest, opts ...grpc.CallOption) (*MutateCustomerLabelsResponse, error)
+}
+
+type customerLabelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerLabelServiceClient(cc grpc.ClientConnInterface) CustomerLabelServiceClient {
+	return &customerLabelServiceClient{cc}
+}
+
+func (c *customerLabelServiceClient) GetCustomerLabel(ctx context.Context, in *GetCustomerLabelRequest, opts ...grpc.CallOption) (*resources.CustomerLabel, error) {
+	out := new(resources.CustomerLabel)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerLabelService/GetCustomerLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerLabelServiceClient) MutateCustomerLabels(ctx context.Context, in *MutateCustomerLabelsRequest, opts ...grpc.CallOption) (*MutateCustomerLabelsResponse, error) {
+	out := new(MutateCustomerLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerLabelService/MutateCustomerLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerLabelServiceServer is the server API for CustomerLabelService service.
+type CustomerLabelServiceServer interface {
+	// Returns the requested customer-label relationship in full detail.
+	GetCustomerLabel(context.Context, *GetCustomerLabelRequest) (*resources.CustomerLabel, error)
+	// Creates and removes customer-label relationships.
+	// Operation statuses are returned.
+	MutateCustomerLabels(context.Context, *MutateCustomerLabelsRequest) (*MutateCustomerLabelsResponse, error)
+}
+
+// UnimplementedCustomerLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerLabelServiceServer struct {
+}
+
+func (*UnimplementedCustomerLabelServiceServer) GetCustomerLabel(ctx context.Context, req *GetCustomerLabelRequest) (*resources.CustomerLabel, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCustomerLabel not implemented")
+}
+func (*UnimplementedCustomerLabelServiceServer) MutateCustomerLabels(ctx context.Context, req *MutateCustomerLabelsRequest) (*MutateCustomerLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCustomerLabels not implemented")
+}
+
+func RegisterCustomerLabelServiceServer(s *grpc.Server, srv CustomerLabelServiceServer) {
+	s.RegisterService(&_CustomerLabelService_serviceDesc, srv)
+}
+
+func _CustomerLabelService_GetCustomerLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerLabelServiceServer).GetCustomerLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerLabelService/GetCustomerLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerLabelServiceServer).GetCustomerLabel(ctx, req.(*GetCustomerLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerLabelService_MutateCustomerLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerLabelServiceServer).MutateCustomerLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerLabelService/MutateCustomerLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerLabelServiceServer).MutateCustomerLabels(ctx, req.(*MutateCustomerLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerLabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerLabelService",
+	HandlerType: (*CustomerLabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerLabel",
+			Handler:    _CustomerLabelService_GetCustomerLabel_Handler,
+		},
+		{
+			MethodName: "MutateCustomerLabels",
+			Handler:    _CustomerLabelService_MutateCustomerLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_manager_link_service.pb.go b/googleapis/ads/googleads/v3/services/customer_manager_link_service.pb.go
new file mode 100644
index 0000000..3c698e6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_manager_link_service.pb.go
@@ -0,0 +1,620 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_manager_link_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerManagerLinkService.GetCustomerManagerLink][google.ads.googleads.v3.services.CustomerManagerLinkService.GetCustomerManagerLink].
+type GetCustomerManagerLinkRequest struct {
+	// Required. The resource name of the CustomerManagerLink to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerManagerLinkRequest) Reset()         { *m = GetCustomerManagerLinkRequest{} }
+func (m *GetCustomerManagerLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerManagerLinkRequest) ProtoMessage()    {}
+func (*GetCustomerManagerLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{0}
+}
+
+func (m *GetCustomerManagerLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerManagerLinkRequest.Merge(m, src)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Size(m)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerManagerLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerManagerLinkRequest proto.InternalMessageInfo
+
+func (m *GetCustomerManagerLinkRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerManagerLinkService.MutateCustomerManagerLink][google.ads.googleads.v3.services.CustomerManagerLinkService.MutateCustomerManagerLink].
+type MutateCustomerManagerLinkRequest struct {
+	// Required. The ID of the customer whose customer manager links are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual customer manager links.
+	Operations           []*CustomerManagerLinkOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateCustomerManagerLinkRequest) Reset()         { *m = MutateCustomerManagerLinkRequest{} }
+func (m *MutateCustomerManagerLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerManagerLinkRequest) ProtoMessage()    {}
+func (*MutateCustomerManagerLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{1}
+}
+
+func (m *MutateCustomerManagerLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerManagerLinkRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerManagerLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerManagerLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerManagerLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerManagerLinkRequest.Merge(m, src)
+}
+func (m *MutateCustomerManagerLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerManagerLinkRequest.Size(m)
+}
+func (m *MutateCustomerManagerLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerManagerLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerManagerLinkRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerManagerLinkRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerManagerLinkRequest) GetOperations() []*CustomerManagerLinkOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// Request message for [CustomerManagerLinkService.MoveManagerLink][google.ads.googleads.v3.services.CustomerManagerLinkService.MoveManagerLink].
+type MoveManagerLinkRequest struct {
+	// Required. The ID of the client customer that is being moved.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The resource name of the previous CustomerManagerLink.
+	// The resource name has the form:
+	// `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`
+	PreviousCustomerManagerLink string `protobuf:"bytes,2,opt,name=previous_customer_manager_link,json=previousCustomerManagerLink,proto3" json:"previous_customer_manager_link,omitempty"`
+	// Required. The resource name of the new manager customer that the client wants to move
+	// to. Customer resource names have the format: "customers/{customer_id}"
+	NewManager           string   `protobuf:"bytes,3,opt,name=new_manager,json=newManager,proto3" json:"new_manager,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MoveManagerLinkRequest) Reset()         { *m = MoveManagerLinkRequest{} }
+func (m *MoveManagerLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*MoveManagerLinkRequest) ProtoMessage()    {}
+func (*MoveManagerLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{2}
+}
+
+func (m *MoveManagerLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MoveManagerLinkRequest.Unmarshal(m, b)
+}
+func (m *MoveManagerLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MoveManagerLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *MoveManagerLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MoveManagerLinkRequest.Merge(m, src)
+}
+func (m *MoveManagerLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_MoveManagerLinkRequest.Size(m)
+}
+func (m *MoveManagerLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MoveManagerLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MoveManagerLinkRequest proto.InternalMessageInfo
+
+func (m *MoveManagerLinkRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MoveManagerLinkRequest) GetPreviousCustomerManagerLink() string {
+	if m != nil {
+		return m.PreviousCustomerManagerLink
+	}
+	return ""
+}
+
+func (m *MoveManagerLinkRequest) GetNewManager() string {
+	if m != nil {
+		return m.NewManager
+	}
+	return ""
+}
+
+// Updates the status of a CustomerManagerLink.
+// The following actions are possible:
+// 1. Update operation with status ACTIVE accepts a pending invitation.
+// 2. Update operation with status REFUSED declines a pending invitation.
+// 3. Update operation with status INACTIVE terminates link to manager.
+type CustomerManagerLinkOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerManagerLinkOperation_Update
+	Operation            isCustomerManagerLinkOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *CustomerManagerLinkOperation) Reset()         { *m = CustomerManagerLinkOperation{} }
+func (m *CustomerManagerLinkOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerManagerLinkOperation) ProtoMessage()    {}
+func (*CustomerManagerLinkOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{3}
+}
+
+func (m *CustomerManagerLinkOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerManagerLinkOperation.Unmarshal(m, b)
+}
+func (m *CustomerManagerLinkOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerManagerLinkOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerManagerLinkOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerManagerLinkOperation.Merge(m, src)
+}
+func (m *CustomerManagerLinkOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerManagerLinkOperation.Size(m)
+}
+func (m *CustomerManagerLinkOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerManagerLinkOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerManagerLinkOperation proto.InternalMessageInfo
+
+func (m *CustomerManagerLinkOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomerManagerLinkOperation_Operation interface {
+	isCustomerManagerLinkOperation_Operation()
+}
+
+type CustomerManagerLinkOperation_Update struct {
+	Update *resources.CustomerManagerLink `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+func (*CustomerManagerLinkOperation_Update) isCustomerManagerLinkOperation_Operation() {}
+
+func (m *CustomerManagerLinkOperation) GetOperation() isCustomerManagerLinkOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerManagerLinkOperation) GetUpdate() *resources.CustomerManagerLink {
+	if x, ok := m.GetOperation().(*CustomerManagerLinkOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerManagerLinkOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerManagerLinkOperation_Update)(nil),
+	}
+}
+
+// Response message for a CustomerManagerLink mutate.
+type MutateCustomerManagerLinkResponse struct {
+	// A result that identifies the resource affected by the mutate request.
+	Results              []*MutateCustomerManagerLinkResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateCustomerManagerLinkResponse) Reset()         { *m = MutateCustomerManagerLinkResponse{} }
+func (m *MutateCustomerManagerLinkResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerManagerLinkResponse) ProtoMessage()    {}
+func (*MutateCustomerManagerLinkResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{4}
+}
+
+func (m *MutateCustomerManagerLinkResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerManagerLinkResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerManagerLinkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerManagerLinkResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerManagerLinkResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerManagerLinkResponse.Merge(m, src)
+}
+func (m *MutateCustomerManagerLinkResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerManagerLinkResponse.Size(m)
+}
+func (m *MutateCustomerManagerLinkResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerManagerLinkResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerManagerLinkResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerManagerLinkResponse) GetResults() []*MutateCustomerManagerLinkResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// Response message for a CustomerManagerLink moveManagerLink.
+type MoveManagerLinkResponse struct {
+	// Returned for successful operations. Represents a CustomerManagerLink
+	// resource of the newly created link between client customer and new manager
+	// customer.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MoveManagerLinkResponse) Reset()         { *m = MoveManagerLinkResponse{} }
+func (m *MoveManagerLinkResponse) String() string { return proto.CompactTextString(m) }
+func (*MoveManagerLinkResponse) ProtoMessage()    {}
+func (*MoveManagerLinkResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{5}
+}
+
+func (m *MoveManagerLinkResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MoveManagerLinkResponse.Unmarshal(m, b)
+}
+func (m *MoveManagerLinkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MoveManagerLinkResponse.Marshal(b, m, deterministic)
+}
+func (m *MoveManagerLinkResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MoveManagerLinkResponse.Merge(m, src)
+}
+func (m *MoveManagerLinkResponse) XXX_Size() int {
+	return xxx_messageInfo_MoveManagerLinkResponse.Size(m)
+}
+func (m *MoveManagerLinkResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MoveManagerLinkResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MoveManagerLinkResponse proto.InternalMessageInfo
+
+func (m *MoveManagerLinkResponse) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// The result for the customer manager link mutate.
+type MutateCustomerManagerLinkResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerManagerLinkResult) Reset()         { *m = MutateCustomerManagerLinkResult{} }
+func (m *MutateCustomerManagerLinkResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerManagerLinkResult) ProtoMessage()    {}
+func (*MutateCustomerManagerLinkResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_68d211747141de49, []int{6}
+}
+
+func (m *MutateCustomerManagerLinkResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerManagerLinkResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerManagerLinkResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerManagerLinkResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerManagerLinkResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerManagerLinkResult.Merge(m, src)
+}
+func (m *MutateCustomerManagerLinkResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerManagerLinkResult.Size(m)
+}
+func (m *MutateCustomerManagerLinkResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerManagerLinkResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerManagerLinkResult proto.InternalMessageInfo
+
+func (m *MutateCustomerManagerLinkResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerManagerLinkRequest)(nil), "google.ads.googleads.v3.services.GetCustomerManagerLinkRequest")
+	proto.RegisterType((*MutateCustomerManagerLinkRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerManagerLinkRequest")
+	proto.RegisterType((*MoveManagerLinkRequest)(nil), "google.ads.googleads.v3.services.MoveManagerLinkRequest")
+	proto.RegisterType((*CustomerManagerLinkOperation)(nil), "google.ads.googleads.v3.services.CustomerManagerLinkOperation")
+	proto.RegisterType((*MutateCustomerManagerLinkResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerManagerLinkResponse")
+	proto.RegisterType((*MoveManagerLinkResponse)(nil), "google.ads.googleads.v3.services.MoveManagerLinkResponse")
+	proto.RegisterType((*MutateCustomerManagerLinkResult)(nil), "google.ads.googleads.v3.services.MutateCustomerManagerLinkResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_manager_link_service.proto", fileDescriptor_68d211747141de49)
+}
+
+var fileDescriptor_68d211747141de49 = []byte{
+	// 762 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xc1, 0x6e, 0xd3, 0x4c,
+	0x10, 0xfe, 0xed, 0xfc, 0x2a, 0xea, 0x06, 0x84, 0xe4, 0x43, 0x1b, 0xdc, 0x42, 0x83, 0xe9, 0x21,
+	0x8a, 0x2a, 0x5b, 0x4a, 0xa4, 0xaa, 0x75, 0xd5, 0x22, 0xa7, 0xa8, 0x69, 0x25, 0x52, 0xaa, 0x20,
+	0xf5, 0x00, 0x41, 0xd1, 0x36, 0xde, 0x1a, 0xab, 0xf6, 0xae, 0xf1, 0xda, 0xe9, 0xa1, 0xaa, 0x84,
+	0x40, 0xea, 0x95, 0x03, 0x6f, 0xc0, 0x11, 0x09, 0x6e, 0x5c, 0x78, 0x84, 0x5e, 0xb9, 0xf5, 0x04,
+	0x12, 0x27, 0x9e, 0x02, 0xd9, 0xde, 0x75, 0xdc, 0xe2, 0x24, 0x55, 0x7a, 0x9b, 0x78, 0x66, 0xbe,
+	0x6f, 0xbe, 0x99, 0xd9, 0x51, 0xc0, 0x13, 0x8b, 0x10, 0xcb, 0x41, 0x1a, 0x34, 0xa9, 0x96, 0x98,
+	0x91, 0xd5, 0xaf, 0x6b, 0x14, 0xf9, 0x7d, 0xbb, 0x87, 0xa8, 0xd6, 0x0b, 0x69, 0x40, 0x5c, 0xe4,
+	0x77, 0x5d, 0x88, 0xa1, 0x85, 0xfc, 0xae, 0x63, 0xe3, 0xa3, 0x2e, 0x73, 0xab, 0x9e, 0x4f, 0x02,
+	0x22, 0x95, 0x93, 0x54, 0x15, 0x9a, 0x54, 0x4d, 0x51, 0xd4, 0x7e, 0x5d, 0xe5, 0x28, 0xf2, 0xfa,
+	0x30, 0x1e, 0x1f, 0x51, 0x12, 0xfa, 0x43, 0x89, 0x12, 0x02, 0x79, 0x9e, 0xa7, 0x7b, 0xb6, 0x06,
+	0x31, 0x26, 0x01, 0x0c, 0x6c, 0x82, 0x29, 0xf3, 0xce, 0x66, 0xbc, 0x3d, 0xc7, 0x46, 0x38, 0x60,
+	0x8e, 0x85, 0x8c, 0xe3, 0xd0, 0x46, 0x8e, 0xd9, 0x3d, 0x40, 0xaf, 0x61, 0xdf, 0x26, 0x3e, 0x0b,
+	0x60, 0x85, 0x6b, 0xf1, 0xaf, 0x83, 0xf0, 0x90, 0x45, 0xb9, 0x90, 0x32, 0x66, 0x65, 0x07, 0xdc,
+	0x6f, 0xa2, 0x60, 0x93, 0xd5, 0xd6, 0x4a, 0x4a, 0x7b, 0x6a, 0xe3, 0xa3, 0x36, 0x7a, 0x13, 0x22,
+	0x1a, 0x48, 0x15, 0x70, 0x87, 0x6b, 0xe8, 0x62, 0xe8, 0xa2, 0x92, 0x50, 0x16, 0x2a, 0xd3, 0x8d,
+	0xc2, 0x4f, 0x43, 0x6c, 0xdf, 0xe6, 0x9e, 0x5d, 0xe8, 0x22, 0xe5, 0x8b, 0x00, 0xca, 0xad, 0x30,
+	0x80, 0x01, 0x1a, 0x01, 0xb7, 0x08, 0x8a, 0x69, 0x23, 0x6c, 0x33, 0x0b, 0x06, 0xf8, 0xf7, 0x1d,
+	0x53, 0xea, 0x01, 0x40, 0x3c, 0xe4, 0x27, 0x5d, 0x28, 0x89, 0xe5, 0x42, 0xa5, 0x58, 0xdb, 0x50,
+	0xc7, 0x4d, 0x41, 0xcd, 0xe1, 0x7d, 0xc6, 0x61, 0x18, 0xc9, 0x00, 0x56, 0xf9, 0x2a, 0x80, 0x99,
+	0x16, 0xe9, 0xa3, 0x89, 0xab, 0xdc, 0x06, 0x0f, 0x3c, 0x1f, 0xf5, 0x6d, 0x12, 0xd2, 0x6e, 0xee,
+	0x74, 0x4b, 0xe2, 0x20, 0x71, 0x8e, 0x87, 0xe6, 0x14, 0x19, 0xf1, 0x61, 0x74, 0xcc, 0x73, 0x4b,
+	0x85, 0x0c, 0x1f, 0x46, 0xc7, 0x2c, 0x52, 0xf9, 0x2e, 0x80, 0xf9, 0x51, 0x12, 0xa5, 0x35, 0x50,
+	0x0c, 0x3d, 0x13, 0x06, 0x28, 0x9e, 0x70, 0xe9, 0xff, 0xb2, 0x50, 0x29, 0xd6, 0x64, 0xde, 0x37,
+	0xbe, 0x04, 0xea, 0x56, 0xb4, 0x04, 0x2d, 0x48, 0x8f, 0xda, 0x20, 0x09, 0x8f, 0x6c, 0x69, 0x0f,
+	0x4c, 0x25, 0xbf, 0xe2, 0xaa, 0x8b, 0xb5, 0xe5, 0xa1, 0xfd, 0x4e, 0x77, 0x3a, 0xaf, 0xe1, 0xdb,
+	0xff, 0xb5, 0x19, 0x4e, 0xa3, 0x08, 0xa6, 0xd3, 0x76, 0x2b, 0x6f, 0x05, 0xf0, 0x70, 0xc4, 0x76,
+	0x50, 0x8f, 0x60, 0x8a, 0xa4, 0x97, 0xe0, 0x96, 0x8f, 0x68, 0xe8, 0x04, 0xb4, 0x24, 0xc4, 0x53,
+	0x37, 0xc6, 0x4f, 0x7d, 0x14, 0x6a, 0xe8, 0x04, 0x6d, 0x8e, 0xa8, 0x6c, 0x80, 0xd9, 0x7f, 0xe6,
+	0xcd, 0x78, 0x1f, 0xe5, 0x6e, 0xf9, 0x95, 0x05, 0xdf, 0x02, 0x0b, 0x63, 0xb8, 0xae, 0x85, 0x53,
+	0xfb, 0x36, 0x05, 0xe4, 0x1c, 0x88, 0xe7, 0x89, 0x20, 0xe9, 0x97, 0x00, 0x66, 0xf2, 0xdf, 0xa4,
+	0xf4, 0x78, 0x7c, 0x37, 0x46, 0xbe, 0x66, 0x79, 0xc2, 0xa1, 0x2a, 0xbb, 0x17, 0xc6, 0x65, 0x61,
+	0xef, 0x7e, 0xfc, 0xfe, 0x28, 0xae, 0x48, 0xcb, 0xd1, 0x8d, 0x3b, 0xb9, 0xe4, 0x59, 0xe7, 0x4f,
+	0x81, 0x6a, 0xd5, 0xf4, 0xe8, 0x65, 0xb0, 0xa8, 0x56, 0x3d, 0x95, 0xde, 0x8b, 0xe0, 0xde, 0xd0,
+	0x5e, 0x4a, 0x8d, 0x1b, 0x0d, 0x3d, 0x51, 0xba, 0x79, 0xb3, 0xc5, 0x89, 0xd7, 0x42, 0x79, 0x75,
+	0x61, 0xcc, 0x64, 0x0e, 0xc1, 0xd2, 0xe0, 0x7a, 0xc4, 0xfa, 0x37, 0x94, 0xd5, 0x48, 0xff, 0x40,
+	0xf0, 0x49, 0x26, 0x78, 0xbd, 0x7a, 0x9a, 0x2b, 0x5f, 0x77, 0x63, 0x5a, 0x5d, 0xa8, 0x4a, 0x1f,
+	0x44, 0x70, 0xf7, 0xca, 0x46, 0x4a, 0x2b, 0xd7, 0xa8, 0x3b, 0xf7, 0x68, 0xc9, 0xab, 0x13, 0x64,
+	0x32, 0x9d, 0x67, 0xc2, 0x85, 0xb1, 0x9c, 0x15, 0x3a, 0xfa, 0xae, 0x2d, 0x65, 0x8e, 0x55, 0xdc,
+	0x88, 0xa6, 0xd2, 0x98, 0xa4, 0x11, 0x97, 0xab, 0xd1, 0x85, 0xaa, 0x3c, 0x77, 0x6e, 0x94, 0x06,
+	0xa5, 0x33, 0xcb, 0xb3, 0xa9, 0xda, 0x23, 0x6e, 0xe3, 0x4c, 0x04, 0x8b, 0x3d, 0xe2, 0x8e, 0x95,
+	0xd9, 0x58, 0x18, 0xfe, 0xba, 0xf6, 0xa2, 0x23, 0xb8, 0x27, 0xbc, 0xd8, 0x66, 0x20, 0x16, 0x71,
+	0x20, 0xb6, 0x54, 0xe2, 0x5b, 0x9a, 0x85, 0x70, 0x7c, 0x22, 0xb5, 0x01, 0xed, 0xf0, 0xff, 0x0d,
+	0x6b, 0xdc, 0xf8, 0x24, 0x16, 0x9a, 0x86, 0xf1, 0x59, 0x2c, 0x37, 0x13, 0x40, 0xc3, 0xa4, 0x6a,
+	0x62, 0x46, 0xd6, 0x7e, 0x5d, 0x65, 0xc4, 0xf4, 0x9c, 0x87, 0x74, 0x0c, 0x93, 0x76, 0xd2, 0x90,
+	0xce, 0x7e, 0xbd, 0xc3, 0x43, 0xfe, 0x88, 0x8b, 0xc9, 0x77, 0x5d, 0x37, 0x4c, 0xaa, 0xeb, 0x69,
+	0x90, 0xae, 0xef, 0xd7, 0x75, 0x9d, 0x87, 0x1d, 0x4c, 0xc5, 0x75, 0xd6, 0xff, 0x06, 0x00, 0x00,
+	0xff, 0xff, 0x63, 0xd6, 0xc1, 0xd0, 0xde, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerManagerLinkServiceClient is the client API for CustomerManagerLinkService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerManagerLinkServiceClient interface {
+	// Returns the requested CustomerManagerLink in full detail.
+	GetCustomerManagerLink(ctx context.Context, in *GetCustomerManagerLinkRequest, opts ...grpc.CallOption) (*resources.CustomerManagerLink, error)
+	// Creates or updates customer manager links. Operation statuses are returned.
+	MutateCustomerManagerLink(ctx context.Context, in *MutateCustomerManagerLinkRequest, opts ...grpc.CallOption) (*MutateCustomerManagerLinkResponse, error)
+	// Moves a client customer to a new manager customer.
+	// This simplifies the complex request that requires two operations to move
+	// a client customer to a new manager. i.e:
+	// 1. Update operation with Status INACTIVE (previous manager) and,
+	// 2. Update operation with Status ACTIVE (new manager).
+	MoveManagerLink(ctx context.Context, in *MoveManagerLinkRequest, opts ...grpc.CallOption) (*MoveManagerLinkResponse, error)
+}
+
+type customerManagerLinkServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerManagerLinkServiceClient(cc grpc.ClientConnInterface) CustomerManagerLinkServiceClient {
+	return &customerManagerLinkServiceClient{cc}
+}
+
+func (c *customerManagerLinkServiceClient) GetCustomerManagerLink(ctx context.Context, in *GetCustomerManagerLinkRequest, opts ...grpc.CallOption) (*resources.CustomerManagerLink, error) {
+	out := new(resources.CustomerManagerLink)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerManagerLinkService/GetCustomerManagerLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerManagerLinkServiceClient) MutateCustomerManagerLink(ctx context.Context, in *MutateCustomerManagerLinkRequest, opts ...grpc.CallOption) (*MutateCustomerManagerLinkResponse, error) {
+	out := new(MutateCustomerManagerLinkResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerManagerLinkService/MutateCustomerManagerLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerManagerLinkServiceClient) MoveManagerLink(ctx context.Context, in *MoveManagerLinkRequest, opts ...grpc.CallOption) (*MoveManagerLinkResponse, error) {
+	out := new(MoveManagerLinkResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerManagerLinkService/MoveManagerLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerManagerLinkServiceServer is the server API for CustomerManagerLinkService service.
+type CustomerManagerLinkServiceServer interface {
+	// Returns the requested CustomerManagerLink in full detail.
+	GetCustomerManagerLink(context.Context, *GetCustomerManagerLinkRequest) (*resources.CustomerManagerLink, error)
+	// Creates or updates customer manager links. Operation statuses are returned.
+	MutateCustomerManagerLink(context.Context, *MutateCustomerManagerLinkRequest) (*MutateCustomerManagerLinkResponse, error)
+	// Moves a client customer to a new manager customer.
+	// This simplifies the complex request that requires two operations to move
+	// a client customer to a new manager. i.e:
+	// 1. Update operation with Status INACTIVE (previous manager) and,
+	// 2. Update operation with Status ACTIVE (new manager).
+	MoveManagerLink(context.Context, *MoveManagerLinkRequest) (*MoveManagerLinkResponse, error)
+}
+
+// UnimplementedCustomerManagerLinkServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerManagerLinkServiceServer struct {
+}
+
+func (*UnimplementedCustomerManagerLinkServiceServer) GetCustomerManagerLink(ctx context.Context, req *GetCustomerManagerLinkRequest) (*resources.CustomerManagerLink, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCustomerManagerLink not implemented")
+}
+func (*UnimplementedCustomerManagerLinkServiceServer) MutateCustomerManagerLink(ctx context.Context, req *MutateCustomerManagerLinkRequest) (*MutateCustomerManagerLinkResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateCustomerManagerLink not implemented")
+}
+func (*UnimplementedCustomerManagerLinkServiceServer) MoveManagerLink(ctx context.Context, req *MoveManagerLinkRequest) (*MoveManagerLinkResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MoveManagerLink not implemented")
+}
+
+func RegisterCustomerManagerLinkServiceServer(s *grpc.Server, srv CustomerManagerLinkServiceServer) {
+	s.RegisterService(&_CustomerManagerLinkService_serviceDesc, srv)
+}
+
+func _CustomerManagerLinkService_GetCustomerManagerLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerManagerLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerManagerLinkServiceServer).GetCustomerManagerLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerManagerLinkService/GetCustomerManagerLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerManagerLinkServiceServer).GetCustomerManagerLink(ctx, req.(*GetCustomerManagerLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerManagerLinkService_MutateCustomerManagerLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerManagerLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerManagerLinkServiceServer).MutateCustomerManagerLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerManagerLinkService/MutateCustomerManagerLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerManagerLinkServiceServer).MutateCustomerManagerLink(ctx, req.(*MutateCustomerManagerLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerManagerLinkService_MoveManagerLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MoveManagerLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerManagerLinkServiceServer).MoveManagerLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerManagerLinkService/MoveManagerLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerManagerLinkServiceServer).MoveManagerLink(ctx, req.(*MoveManagerLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerManagerLinkService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerManagerLinkService",
+	HandlerType: (*CustomerManagerLinkServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerManagerLink",
+			Handler:    _CustomerManagerLinkService_GetCustomerManagerLink_Handler,
+		},
+		{
+			MethodName: "MutateCustomerManagerLink",
+			Handler:    _CustomerManagerLinkService_MutateCustomerManagerLink_Handler,
+		},
+		{
+			MethodName: "MoveManagerLink",
+			Handler:    _CustomerManagerLinkService_MoveManagerLink_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_manager_link_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_negative_criterion_service.pb.go b/googleapis/ads/googleads/v3/services/customer_negative_criterion_service.pb.go
new file mode 100644
index 0000000..3bdde0d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_negative_criterion_service.pb.go
@@ -0,0 +1,504 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_negative_criterion_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [CustomerNegativeCriterionService.GetCustomerNegativeCriterion][google.ads.googleads.v3.services.CustomerNegativeCriterionService.GetCustomerNegativeCriterion].
+type GetCustomerNegativeCriterionRequest struct {
+	// Required. The resource name of the criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerNegativeCriterionRequest) Reset()         { *m = GetCustomerNegativeCriterionRequest{} }
+func (m *GetCustomerNegativeCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerNegativeCriterionRequest) ProtoMessage()    {}
+func (*GetCustomerNegativeCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80c7f57f4d9bdab2, []int{0}
+}
+
+func (m *GetCustomerNegativeCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerNegativeCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerNegativeCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerNegativeCriterionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerNegativeCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerNegativeCriterionRequest.Merge(m, src)
+}
+func (m *GetCustomerNegativeCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerNegativeCriterionRequest.Size(m)
+}
+func (m *GetCustomerNegativeCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerNegativeCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerNegativeCriterionRequest proto.InternalMessageInfo
+
+func (m *GetCustomerNegativeCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [CustomerNegativeCriterionService.MutateCustomerNegativeCriteria][google.ads.googleads.v3.services.CustomerNegativeCriterionService.MutateCustomerNegativeCriteria].
+type MutateCustomerNegativeCriteriaRequest struct {
+	// Required. The ID of the customer whose criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual criteria.
+	Operations []*CustomerNegativeCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerNegativeCriteriaRequest) Reset()         { *m = MutateCustomerNegativeCriteriaRequest{} }
+func (m *MutateCustomerNegativeCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerNegativeCriteriaRequest) ProtoMessage()    {}
+func (*MutateCustomerNegativeCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80c7f57f4d9bdab2, []int{1}
+}
+
+func (m *MutateCustomerNegativeCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerNegativeCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerNegativeCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaRequest.Merge(m, src)
+}
+func (m *MutateCustomerNegativeCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaRequest.Size(m)
+}
+func (m *MutateCustomerNegativeCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerNegativeCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerNegativeCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerNegativeCriteriaRequest) GetOperations() []*CustomerNegativeCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateCustomerNegativeCriteriaRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateCustomerNegativeCriteriaRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create or remove) on a customer level negative criterion.
+type CustomerNegativeCriterionOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerNegativeCriterionOperation_Create
+	//	*CustomerNegativeCriterionOperation_Remove
+	Operation            isCustomerNegativeCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                       `json:"-"`
+	XXX_unrecognized     []byte                                         `json:"-"`
+	XXX_sizecache        int32                                          `json:"-"`
+}
+
+func (m *CustomerNegativeCriterionOperation) Reset()         { *m = CustomerNegativeCriterionOperation{} }
+func (m *CustomerNegativeCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerNegativeCriterionOperation) ProtoMessage()    {}
+func (*CustomerNegativeCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80c7f57f4d9bdab2, []int{2}
+}
+
+func (m *CustomerNegativeCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerNegativeCriterionOperation.Unmarshal(m, b)
+}
+func (m *CustomerNegativeCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerNegativeCriterionOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerNegativeCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerNegativeCriterionOperation.Merge(m, src)
+}
+func (m *CustomerNegativeCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerNegativeCriterionOperation.Size(m)
+}
+func (m *CustomerNegativeCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerNegativeCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerNegativeCriterionOperation proto.InternalMessageInfo
+
+type isCustomerNegativeCriterionOperation_Operation interface {
+	isCustomerNegativeCriterionOperation_Operation()
+}
+
+type CustomerNegativeCriterionOperation_Create struct {
+	Create *resources.CustomerNegativeCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerNegativeCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*CustomerNegativeCriterionOperation_Create) isCustomerNegativeCriterionOperation_Operation() {}
+
+func (*CustomerNegativeCriterionOperation_Remove) isCustomerNegativeCriterionOperation_Operation() {}
+
+func (m *CustomerNegativeCriterionOperation) GetOperation() isCustomerNegativeCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterionOperation) GetCreate() *resources.CustomerNegativeCriterion {
+	if x, ok := m.GetOperation().(*CustomerNegativeCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerNegativeCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CustomerNegativeCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CustomerNegativeCriterionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*CustomerNegativeCriterionOperation_Create)(nil),
+		(*CustomerNegativeCriterionOperation_Remove)(nil),
+	}
+}
+
+// Response message for customer negative criterion mutate.
+type MutateCustomerNegativeCriteriaResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateCustomerNegativeCriteriaResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *MutateCustomerNegativeCriteriaResponse) Reset() {
+	*m = MutateCustomerNegativeCriteriaResponse{}
+}
+func (m *MutateCustomerNegativeCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerNegativeCriteriaResponse) ProtoMessage()    {}
+func (*MutateCustomerNegativeCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80c7f57f4d9bdab2, []int{3}
+}
+
+func (m *MutateCustomerNegativeCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerNegativeCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerNegativeCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaResponse.Merge(m, src)
+}
+func (m *MutateCustomerNegativeCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResponse.Size(m)
+}
+func (m *MutateCustomerNegativeCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerNegativeCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerNegativeCriteriaResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateCustomerNegativeCriteriaResponse) GetResults() []*MutateCustomerNegativeCriteriaResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateCustomerNegativeCriteriaResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerNegativeCriteriaResult) Reset()         { *m = MutateCustomerNegativeCriteriaResult{} }
+func (m *MutateCustomerNegativeCriteriaResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerNegativeCriteriaResult) ProtoMessage()    {}
+func (*MutateCustomerNegativeCriteriaResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_80c7f57f4d9bdab2, []int{4}
+}
+
+func (m *MutateCustomerNegativeCriteriaResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerNegativeCriteriaResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerNegativeCriteriaResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaResult.Merge(m, src)
+}
+func (m *MutateCustomerNegativeCriteriaResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerNegativeCriteriaResult.Size(m)
+}
+func (m *MutateCustomerNegativeCriteriaResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerNegativeCriteriaResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerNegativeCriteriaResult proto.InternalMessageInfo
+
+func (m *MutateCustomerNegativeCriteriaResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerNegativeCriterionRequest)(nil), "google.ads.googleads.v3.services.GetCustomerNegativeCriterionRequest")
+	proto.RegisterType((*MutateCustomerNegativeCriteriaRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerNegativeCriteriaRequest")
+	proto.RegisterType((*CustomerNegativeCriterionOperation)(nil), "google.ads.googleads.v3.services.CustomerNegativeCriterionOperation")
+	proto.RegisterType((*MutateCustomerNegativeCriteriaResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerNegativeCriteriaResponse")
+	proto.RegisterType((*MutateCustomerNegativeCriteriaResult)(nil), "google.ads.googleads.v3.services.MutateCustomerNegativeCriteriaResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_negative_criterion_service.proto", fileDescriptor_80c7f57f4d9bdab2)
+}
+
+var fileDescriptor_80c7f57f4d9bdab2 = []byte{
+	// 720 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcf, 0x6e, 0xd3, 0x4e,
+	0x10, 0xfe, 0xd9, 0xa9, 0xfa, 0xa3, 0x9b, 0x16, 0xa4, 0x45, 0x40, 0x14, 0x2a, 0x88, 0xdc, 0x14,
+	0xa2, 0x08, 0xd9, 0x52, 0x72, 0x33, 0xed, 0xc1, 0x29, 0x6d, 0x0a, 0x88, 0xb6, 0x4a, 0xa5, 0x1c,
+	0x50, 0x24, 0xb3, 0xb5, 0xb7, 0x61, 0x25, 0xc7, 0x6b, 0x76, 0xd7, 0x91, 0xaa, 0xaa, 0x17, 0x0e,
+	0x9c, 0xb8, 0x21, 0xf1, 0x00, 0x70, 0xe3, 0x51, 0x7a, 0x2c, 0xb7, 0x9e, 0x38, 0x70, 0xe2, 0x05,
+	0xb8, 0x22, 0xff, 0x59, 0x27, 0xa9, 0x70, 0x5d, 0xa9, 0xdc, 0x26, 0x33, 0xe3, 0x6f, 0xe6, 0xfb,
+	0x66, 0x76, 0x02, 0x5e, 0x0c, 0x29, 0x1d, 0x7a, 0xd8, 0x40, 0x2e, 0x37, 0x12, 0x33, 0xb2, 0xc6,
+	0x6d, 0x83, 0x63, 0x36, 0x26, 0x0e, 0xe6, 0x86, 0x13, 0x72, 0x41, 0x47, 0x98, 0xd9, 0x3e, 0x1e,
+	0x22, 0x41, 0xc6, 0xd8, 0x76, 0x18, 0x11, 0x98, 0x11, 0xea, 0xdb, 0x69, 0x92, 0x1e, 0x30, 0x2a,
+	0x28, 0xac, 0x25, 0x00, 0x3a, 0x72, 0xb9, 0x9e, 0x61, 0xe9, 0xe3, 0xb6, 0x2e, 0xb1, 0xaa, 0x1b,
+	0x79, 0xd5, 0x18, 0xe6, 0x34, 0x64, 0x05, 0xe5, 0x92, 0x32, 0xd5, 0x65, 0x09, 0x12, 0x10, 0x03,
+	0xf9, 0x3e, 0x15, 0x48, 0x10, 0xea, 0xf3, 0x34, 0x7a, 0x6f, 0x2a, 0xea, 0x78, 0x04, 0xfb, 0x22,
+	0x0d, 0x3c, 0x9c, 0x0a, 0x1c, 0x12, 0xec, 0xb9, 0xf6, 0x01, 0x7e, 0x8b, 0xc6, 0x84, 0xb2, 0x0b,
+	0x5f, 0xb2, 0xc0, 0x31, 0xb8, 0x40, 0x22, 0x4c, 0x21, 0xb5, 0x5d, 0xb0, 0xd2, 0xc5, 0x62, 0x23,
+	0x6d, 0x6c, 0x27, 0xed, 0x6b, 0x43, 0xb6, 0xd5, 0xc3, 0xef, 0x42, 0xcc, 0x05, 0x6c, 0x80, 0x25,
+	0x49, 0xc3, 0xf6, 0xd1, 0x08, 0x57, 0x94, 0x9a, 0xd2, 0x58, 0xe8, 0x94, 0x7e, 0x58, 0x6a, 0x6f,
+	0x51, 0x46, 0x76, 0xd0, 0x08, 0x6b, 0x1f, 0x54, 0xb0, 0xfa, 0x2a, 0x14, 0x48, 0xe0, 0x1c, 0x50,
+	0x24, 0x31, 0xeb, 0xa0, 0x9c, 0x09, 0x42, 0xdc, 0x69, 0x44, 0x20, 0xfd, 0xcf, 0x5d, 0x48, 0x00,
+	0xa0, 0x01, 0x66, 0x89, 0x0e, 0x15, 0xb5, 0x56, 0x6a, 0x94, 0x5b, 0xcf, 0xf4, 0xa2, 0x69, 0xe8,
+	0xb9, 0x8c, 0x76, 0x25, 0x58, 0x5a, 0x6a, 0x02, 0x0e, 0x1f, 0x83, 0x5b, 0x01, 0x62, 0x82, 0x20,
+	0xcf, 0x3e, 0x44, 0xc4, 0x0b, 0x19, 0xae, 0x94, 0x6a, 0x4a, 0xe3, 0x46, 0xef, 0x66, 0xea, 0xde,
+	0x4a, 0xbc, 0x70, 0x05, 0x2c, 0x8d, 0x91, 0x47, 0x5c, 0x24, 0xb0, 0x4d, 0x7d, 0xef, 0xa8, 0x32,
+	0x17, 0xa7, 0x2d, 0x4a, 0xe7, 0xae, 0xef, 0x1d, 0x69, 0x5f, 0x15, 0xa0, 0x15, 0x77, 0x01, 0xfb,
+	0x60, 0xde, 0x61, 0x18, 0x89, 0x44, 0xd2, 0x72, 0x6b, 0x2d, 0x97, 0x5b, 0xb6, 0x47, 0xf9, 0xe4,
+	0xb6, 0xff, 0xeb, 0xa5, 0x68, 0xb0, 0x02, 0xe6, 0x19, 0x1e, 0xd1, 0x31, 0xae, 0xa8, 0x91, 0xb0,
+	0x51, 0x24, 0xf9, 0xdd, 0x29, 0x83, 0x85, 0x8c, 0xb4, 0x76, 0xa6, 0x80, 0x47, 0x45, 0xe3, 0xe2,
+	0x01, 0xf5, 0x39, 0x86, 0x5b, 0xe0, 0xce, 0x05, 0x79, 0x6c, 0xcc, 0x18, 0x65, 0xb1, 0x48, 0xe5,
+	0x16, 0x94, 0x8d, 0xb3, 0xc0, 0xd1, 0xf7, 0xe3, 0x1d, 0xeb, 0xdd, 0x9e, 0x15, 0x6e, 0x33, 0x4a,
+	0x87, 0x6f, 0xc0, 0xff, 0x0c, 0xf3, 0xd0, 0x13, 0x72, 0x9c, 0x5b, 0xc5, 0xe3, 0x2c, 0x6c, 0x31,
+	0xf4, 0x44, 0x4f, 0xc2, 0x6a, 0x2f, 0x41, 0xfd, 0x2a, 0x1f, 0x44, 0x73, 0xfc, 0xcb, 0x56, 0xcf,
+	0x2e, 0x74, 0xeb, 0x6c, 0x0e, 0xd4, 0x72, 0x05, 0xdf, 0x4f, 0x1a, 0x84, 0xbf, 0x15, 0xb0, 0x7c,
+	0xd9, 0x3b, 0x82, 0x9b, 0xc5, 0x1c, 0xaf, 0xf0, 0x0e, 0xab, 0xd7, 0xda, 0x0e, 0xad, 0x77, 0x6e,
+	0xcd, 0x12, 0x7e, 0xff, 0xfd, 0xe7, 0x27, 0x75, 0x0d, 0x9a, 0xd1, 0x99, 0x3a, 0x9e, 0x89, 0xac,
+	0xcb, 0x27, 0xc8, 0x8d, 0x66, 0x76, 0xb7, 0x2e, 0xca, 0x68, 0x34, 0x4f, 0xe0, 0x67, 0x15, 0x3c,
+	0xb8, 0x5c, 0x6c, 0xd8, 0xbd, 0xfe, 0x7c, 0x13, 0xf6, 0xdb, 0xff, 0x60, 0x51, 0xe2, 0x5d, 0xd6,
+	0xd0, 0xb9, 0x75, 0x77, 0xea, 0xf8, 0x3c, 0x99, 0x5c, 0x81, 0x58, 0x92, 0x8e, 0xb6, 0x1e, 0x49,
+	0x32, 0xd1, 0xe0, 0x78, 0x2a, 0x79, 0xbd, 0x79, 0x92, 0xab, 0x88, 0x39, 0x8a, 0xeb, 0x9b, 0x4a,
+	0xb3, 0x7a, 0xff, 0xd4, 0xaa, 0x4c, 0x7a, 0x4c, 0xad, 0x80, 0x70, 0xdd, 0xa1, 0xa3, 0xce, 0x47,
+	0x15, 0xd4, 0x1d, 0x3a, 0x2a, 0xe4, 0xd3, 0x59, 0x2d, 0x5a, 0xbd, 0xbd, 0xe8, 0x8c, 0xef, 0x29,
+	0xaf, 0xb7, 0x53, 0xa8, 0x21, 0xf5, 0x90, 0x3f, 0xd4, 0x29, 0x1b, 0x1a, 0x43, 0xec, 0xc7, 0x47,
+	0xde, 0x98, 0x14, 0xcf, 0xff, 0x2f, 0x7c, 0x2a, 0x8d, 0x2f, 0x6a, 0xa9, 0x6b, 0x59, 0xdf, 0xd4,
+	0x5a, 0x37, 0x01, 0xb4, 0x5c, 0xae, 0x27, 0x66, 0x64, 0xf5, 0xdb, 0x7a, 0x5a, 0x98, 0x9f, 0xca,
+	0x94, 0x81, 0xe5, 0xf2, 0x41, 0x96, 0x32, 0xe8, 0xb7, 0x07, 0x32, 0xe5, 0x97, 0x5a, 0x4f, 0xfc,
+	0xa6, 0x69, 0xb9, 0xdc, 0x34, 0xb3, 0x24, 0xd3, 0xec, 0xb7, 0x4d, 0x53, 0xa6, 0x1d, 0xcc, 0xc7,
+	0x7d, 0xb6, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x4d, 0x94, 0x2b, 0xb2, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerNegativeCriterionServiceClient is the client API for CustomerNegativeCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerNegativeCriterionServiceClient interface {
+	// Returns the requested criterion in full detail.
+	GetCustomerNegativeCriterion(ctx context.Context, in *GetCustomerNegativeCriterionRequest, opts ...grpc.CallOption) (*resources.CustomerNegativeCriterion, error)
+	// Creates or removes criteria. Operation statuses are returned.
+	MutateCustomerNegativeCriteria(ctx context.Context, in *MutateCustomerNegativeCriteriaRequest, opts ...grpc.CallOption) (*MutateCustomerNegativeCriteriaResponse, error)
+}
+
+type customerNegativeCriterionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerNegativeCriterionServiceClient(cc grpc.ClientConnInterface) CustomerNegativeCriterionServiceClient {
+	return &customerNegativeCriterionServiceClient{cc}
+}
+
+func (c *customerNegativeCriterionServiceClient) GetCustomerNegativeCriterion(ctx context.Context, in *GetCustomerNegativeCriterionRequest, opts ...grpc.CallOption) (*resources.CustomerNegativeCriterion, error) {
+	out := new(resources.CustomerNegativeCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerNegativeCriterionService/GetCustomerNegativeCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerNegativeCriterionServiceClient) MutateCustomerNegativeCriteria(ctx context.Context, in *MutateCustomerNegativeCriteriaRequest, opts ...grpc.CallOption) (*MutateCustomerNegativeCriteriaResponse, error) {
+	out := new(MutateCustomerNegativeCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerNegativeCriterionService/MutateCustomerNegativeCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerNegativeCriterionServiceServer is the server API for CustomerNegativeCriterionService service.
+type CustomerNegativeCriterionServiceServer interface {
+	// Returns the requested criterion in full detail.
+	GetCustomerNegativeCriterion(context.Context, *GetCustomerNegativeCriterionRequest) (*resources.CustomerNegativeCriterion, error)
+	// Creates or removes criteria. Operation statuses are returned.
+	MutateCustomerNegativeCriteria(context.Context, *MutateCustomerNegativeCriteriaRequest) (*MutateCustomerNegativeCriteriaResponse, error)
+}
+
+// UnimplementedCustomerNegativeCriterionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerNegativeCriterionServiceServer struct {
+}
+
+func (*UnimplementedCustomerNegativeCriterionServiceServer) GetCustomerNegativeCriterion(ctx context.Context, req *GetCustomerNegativeCriterionRequest) (*resources.CustomerNegativeCriterion, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetCustomerNegativeCriterion not implemented")
+}
+func (*UnimplementedCustomerNegativeCriterionServiceServer) MutateCustomerNegativeCriteria(ctx context.Context, req *MutateCustomerNegativeCriteriaRequest) (*MutateCustomerNegativeCriteriaResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateCustomerNegativeCriteria not implemented")
+}
+
+func RegisterCustomerNegativeCriterionServiceServer(s *grpc.Server, srv CustomerNegativeCriterionServiceServer) {
+	s.RegisterService(&_CustomerNegativeCriterionService_serviceDesc, srv)
+}
+
+func _CustomerNegativeCriterionService_GetCustomerNegativeCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerNegativeCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerNegativeCriterionServiceServer).GetCustomerNegativeCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerNegativeCriterionService/GetCustomerNegativeCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerNegativeCriterionServiceServer).GetCustomerNegativeCriterion(ctx, req.(*GetCustomerNegativeCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerNegativeCriterionService_MutateCustomerNegativeCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerNegativeCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerNegativeCriterionServiceServer).MutateCustomerNegativeCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerNegativeCriterionService/MutateCustomerNegativeCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerNegativeCriterionServiceServer).MutateCustomerNegativeCriteria(ctx, req.(*MutateCustomerNegativeCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerNegativeCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerNegativeCriterionService",
+	HandlerType: (*CustomerNegativeCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerNegativeCriterion",
+			Handler:    _CustomerNegativeCriterionService_GetCustomerNegativeCriterion_Handler,
+		},
+		{
+			MethodName: "MutateCustomerNegativeCriteria",
+			Handler:    _CustomerNegativeCriterionService_MutateCustomerNegativeCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_negative_criterion_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/customer_service.pb.go b/googleapis/ads/googleads/v3/services/customer_service.pb.go
new file mode 100644
index 0000000..0956c06
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/customer_service.pb.go
@@ -0,0 +1,725 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/customer_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [CustomerService.GetCustomer][google.ads.googleads.v3.services.CustomerService.GetCustomer].
+type GetCustomerRequest struct {
+	// Required. The resource name of the customer to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerRequest) Reset()         { *m = GetCustomerRequest{} }
+func (m *GetCustomerRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerRequest) ProtoMessage()    {}
+func (*GetCustomerRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{0}
+}
+
+func (m *GetCustomerRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerRequest.Marshal(b, m, deterministic)
+}
+func (m *GetCustomerRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerRequest.Merge(m, src)
+}
+func (m *GetCustomerRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerRequest.Size(m)
+}
+func (m *GetCustomerRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerRequest proto.InternalMessageInfo
+
+func (m *GetCustomerRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerService.MutateCustomer][google.ads.googleads.v3.services.CustomerService.MutateCustomer].
+type MutateCustomerRequest struct {
+	// Required. The ID of the customer being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The operation to perform on the customer
+	Operation *CustomerOperation `protobuf:"bytes,4,opt,name=operation,proto3" json:"operation,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,5,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerRequest) Reset()         { *m = MutateCustomerRequest{} }
+func (m *MutateCustomerRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerRequest) ProtoMessage()    {}
+func (*MutateCustomerRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{1}
+}
+
+func (m *MutateCustomerRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerRequest.Merge(m, src)
+}
+func (m *MutateCustomerRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerRequest.Size(m)
+}
+func (m *MutateCustomerRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerRequest) GetOperation() *CustomerOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MutateCustomerRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Request message for [CustomerService.CreateCustomerClient][google.ads.googleads.v3.services.CustomerService.CreateCustomerClient].
+type CreateCustomerClientRequest struct {
+	// Required. The ID of the Manager under whom client customer is being created.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The new client customer to create. The resource name on this customer
+	// will be ignored.
+	CustomerClient *resources.Customer `protobuf:"bytes,2,opt,name=customer_client,json=customerClient,proto3" json:"customer_client,omitempty"`
+	// Email address of the user who should be invited on the created client
+	// customer. Accessible to whitelisted customers only.
+	EmailAddress *wrappers.StringValue `protobuf:"bytes,3,opt,name=email_address,json=emailAddress,proto3" json:"email_address,omitempty"`
+	// The proposed role of user on the created client customer.
+	// Accessible to whitelisted customers only.
+	AccessRole           enums.AccessRoleEnum_AccessRole `protobuf:"varint,4,opt,name=access_role,json=accessRole,proto3,enum=google.ads.googleads.v3.enums.AccessRoleEnum_AccessRole" json:"access_role,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *CreateCustomerClientRequest) Reset()         { *m = CreateCustomerClientRequest{} }
+func (m *CreateCustomerClientRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateCustomerClientRequest) ProtoMessage()    {}
+func (*CreateCustomerClientRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{2}
+}
+
+func (m *CreateCustomerClientRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCustomerClientRequest.Unmarshal(m, b)
+}
+func (m *CreateCustomerClientRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCustomerClientRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateCustomerClientRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCustomerClientRequest.Merge(m, src)
+}
+func (m *CreateCustomerClientRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateCustomerClientRequest.Size(m)
+}
+func (m *CreateCustomerClientRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCustomerClientRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCustomerClientRequest proto.InternalMessageInfo
+
+func (m *CreateCustomerClientRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *CreateCustomerClientRequest) GetCustomerClient() *resources.Customer {
+	if m != nil {
+		return m.CustomerClient
+	}
+	return nil
+}
+
+func (m *CreateCustomerClientRequest) GetEmailAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.EmailAddress
+	}
+	return nil
+}
+
+func (m *CreateCustomerClientRequest) GetAccessRole() enums.AccessRoleEnum_AccessRole {
+	if m != nil {
+		return m.AccessRole
+	}
+	return enums.AccessRoleEnum_UNSPECIFIED
+}
+
+// A single update on a customer.
+type CustomerOperation struct {
+	// Mutate operation. Only updates are supported for customer.
+	Update *resources.Customer `protobuf:"bytes,1,opt,name=update,proto3" json:"update,omitempty"`
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomerOperation) Reset()         { *m = CustomerOperation{} }
+func (m *CustomerOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerOperation) ProtoMessage()    {}
+func (*CustomerOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{3}
+}
+
+func (m *CustomerOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerOperation.Unmarshal(m, b)
+}
+func (m *CustomerOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerOperation.Marshal(b, m, deterministic)
+}
+func (m *CustomerOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerOperation.Merge(m, src)
+}
+func (m *CustomerOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerOperation.Size(m)
+}
+func (m *CustomerOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerOperation proto.InternalMessageInfo
+
+func (m *CustomerOperation) GetUpdate() *resources.Customer {
+	if m != nil {
+		return m.Update
+	}
+	return nil
+}
+
+func (m *CustomerOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Response message for CreateCustomerClient mutate.
+type CreateCustomerClientResponse struct {
+	// The resource name of the newly created customer client.
+	ResourceName         string   `protobuf:"bytes,2,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateCustomerClientResponse) Reset()         { *m = CreateCustomerClientResponse{} }
+func (m *CreateCustomerClientResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateCustomerClientResponse) ProtoMessage()    {}
+func (*CreateCustomerClientResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{4}
+}
+
+func (m *CreateCustomerClientResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCustomerClientResponse.Unmarshal(m, b)
+}
+func (m *CreateCustomerClientResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCustomerClientResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateCustomerClientResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCustomerClientResponse.Merge(m, src)
+}
+func (m *CreateCustomerClientResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateCustomerClientResponse.Size(m)
+}
+func (m *CreateCustomerClientResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCustomerClientResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCustomerClientResponse proto.InternalMessageInfo
+
+func (m *CreateCustomerClientResponse) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Response message for customer mutate.
+type MutateCustomerResponse struct {
+	// Result for the mutate.
+	Result               *MutateCustomerResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateCustomerResponse) Reset()         { *m = MutateCustomerResponse{} }
+func (m *MutateCustomerResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerResponse) ProtoMessage()    {}
+func (*MutateCustomerResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{5}
+}
+
+func (m *MutateCustomerResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerResponse.Merge(m, src)
+}
+func (m *MutateCustomerResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerResponse.Size(m)
+}
+func (m *MutateCustomerResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerResponse) GetResult() *MutateCustomerResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for the customer mutate.
+type MutateCustomerResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerResult) Reset()         { *m = MutateCustomerResult{} }
+func (m *MutateCustomerResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerResult) ProtoMessage()    {}
+func (*MutateCustomerResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{6}
+}
+
+func (m *MutateCustomerResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerResult.Marshal(b, m, deterministic)
+}
+func (m *MutateCustomerResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerResult.Merge(m, src)
+}
+func (m *MutateCustomerResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerResult.Size(m)
+}
+func (m *MutateCustomerResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerResult proto.InternalMessageInfo
+
+func (m *MutateCustomerResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerService.ListAccessibleCustomers][google.ads.googleads.v3.services.CustomerService.ListAccessibleCustomers].
+type ListAccessibleCustomersRequest struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListAccessibleCustomersRequest) Reset()         { *m = ListAccessibleCustomersRequest{} }
+func (m *ListAccessibleCustomersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListAccessibleCustomersRequest) ProtoMessage()    {}
+func (*ListAccessibleCustomersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{7}
+}
+
+func (m *ListAccessibleCustomersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Unmarshal(m, b)
+}
+func (m *ListAccessibleCustomersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Marshal(b, m, deterministic)
+}
+func (m *ListAccessibleCustomersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListAccessibleCustomersRequest.Merge(m, src)
+}
+func (m *ListAccessibleCustomersRequest) XXX_Size() int {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Size(m)
+}
+func (m *ListAccessibleCustomersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListAccessibleCustomersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListAccessibleCustomersRequest proto.InternalMessageInfo
+
+// Response message for [CustomerService.ListAccessibleCustomers][google.ads.googleads.v3.services.CustomerService.ListAccessibleCustomers].
+type ListAccessibleCustomersResponse struct {
+	// Resource name of customers directly accessible by the
+	// user authenticating the call.
+	ResourceNames        []string `protobuf:"bytes,1,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListAccessibleCustomersResponse) Reset()         { *m = ListAccessibleCustomersResponse{} }
+func (m *ListAccessibleCustomersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListAccessibleCustomersResponse) ProtoMessage()    {}
+func (*ListAccessibleCustomersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62d137bd13ed426f, []int{8}
+}
+
+func (m *ListAccessibleCustomersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Unmarshal(m, b)
+}
+func (m *ListAccessibleCustomersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Marshal(b, m, deterministic)
+}
+func (m *ListAccessibleCustomersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListAccessibleCustomersResponse.Merge(m, src)
+}
+func (m *ListAccessibleCustomersResponse) XXX_Size() int {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Size(m)
+}
+func (m *ListAccessibleCustomersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListAccessibleCustomersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListAccessibleCustomersResponse proto.InternalMessageInfo
+
+func (m *ListAccessibleCustomersResponse) GetResourceNames() []string {
+	if m != nil {
+		return m.ResourceNames
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerRequest)(nil), "google.ads.googleads.v3.services.GetCustomerRequest")
+	proto.RegisterType((*MutateCustomerRequest)(nil), "google.ads.googleads.v3.services.MutateCustomerRequest")
+	proto.RegisterType((*CreateCustomerClientRequest)(nil), "google.ads.googleads.v3.services.CreateCustomerClientRequest")
+	proto.RegisterType((*CustomerOperation)(nil), "google.ads.googleads.v3.services.CustomerOperation")
+	proto.RegisterType((*CreateCustomerClientResponse)(nil), "google.ads.googleads.v3.services.CreateCustomerClientResponse")
+	proto.RegisterType((*MutateCustomerResponse)(nil), "google.ads.googleads.v3.services.MutateCustomerResponse")
+	proto.RegisterType((*MutateCustomerResult)(nil), "google.ads.googleads.v3.services.MutateCustomerResult")
+	proto.RegisterType((*ListAccessibleCustomersRequest)(nil), "google.ads.googleads.v3.services.ListAccessibleCustomersRequest")
+	proto.RegisterType((*ListAccessibleCustomersResponse)(nil), "google.ads.googleads.v3.services.ListAccessibleCustomersResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/customer_service.proto", fileDescriptor_62d137bd13ed426f)
+}
+
+var fileDescriptor_62d137bd13ed426f = []byte{
+	// 899 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x8f, 0xdb, 0x44,
+	0x14, 0xd7, 0x64, 0x61, 0x45, 0x26, 0x9b, 0x54, 0x8c, 0xb6, 0x34, 0xca, 0xae, 0xba, 0xc1, 0xa4,
+	0x22, 0x04, 0xb0, 0x51, 0x82, 0x48, 0xe5, 0xd5, 0x56, 0x78, 0x23, 0x48, 0x91, 0xe8, 0x1f, 0xb9,
+	0x52, 0xa4, 0x42, 0xa4, 0x68, 0x62, 0x4f, 0x53, 0xab, 0xb6, 0xc7, 0x78, 0xec, 0xa0, 0xaa, 0xea,
+	0x85, 0xaf, 0x80, 0xf8, 0x02, 0xdc, 0xe0, 0x23, 0x20, 0x3e, 0x41, 0x05, 0x27, 0x6e, 0x7b, 0xe2,
+	0xc0, 0x89, 0x03, 0x07, 0xae, 0x5c, 0x90, 0xc7, 0x33, 0x8e, 0xf3, 0xc7, 0x0d, 0x59, 0x6e, 0x2f,
+	0x33, 0xef, 0xf7, 0x9b, 0xdf, 0xef, 0xbd, 0xe7, 0xb7, 0x0b, 0xfb, 0x33, 0x4a, 0x67, 0x2e, 0xd1,
+	0xb0, 0xcd, 0xb4, 0x34, 0x4c, 0xa2, 0x79, 0x4f, 0x63, 0x24, 0x9c, 0x3b, 0x16, 0x61, 0x9a, 0x15,
+	0xb3, 0x88, 0x7a, 0x24, 0x9c, 0x88, 0x13, 0x35, 0x08, 0x69, 0x44, 0x51, 0x33, 0xcd, 0x56, 0xb1,
+	0xcd, 0xd4, 0x0c, 0xa8, 0xce, 0x7b, 0xaa, 0x04, 0x36, 0xb4, 0x22, 0x6a, 0xe2, 0xc7, 0x1e, 0xd3,
+	0xb0, 0x65, 0x11, 0xc6, 0x26, 0x21, 0x75, 0x05, 0x65, 0xe3, 0x83, 0x22, 0x40, 0x48, 0x18, 0x8d,
+	0xc3, 0xbc, 0x18, 0x81, 0x38, 0x96, 0x88, 0xc0, 0xd1, 0xb0, 0xef, 0xd3, 0x08, 0x47, 0x0e, 0xf5,
+	0x99, 0xb8, 0xbd, 0x96, 0xbb, 0xb5, 0x5c, 0x87, 0xf8, 0x91, 0xb8, 0x38, 0xc9, 0x5d, 0x3c, 0x72,
+	0x88, 0x6b, 0x4f, 0xa6, 0xe4, 0x31, 0x9e, 0x3b, 0x54, 0xf2, 0x0a, 0x73, 0x1a, 0xff, 0x35, 0x8d,
+	0x1f, 0x89, 0x2c, 0x0f, 0xb3, 0x27, 0x22, 0xe3, 0xfa, 0x6a, 0xc6, 0xd7, 0x21, 0x0e, 0x02, 0x12,
+	0x8a, 0xb7, 0x95, 0x5b, 0x10, 0x0d, 0x49, 0x34, 0x10, 0x72, 0x4d, 0xf2, 0x55, 0x4c, 0x58, 0x84,
+	0xda, 0xb0, 0x2a, 0xbd, 0x4c, 0x7c, 0xec, 0x91, 0x3a, 0x68, 0x82, 0x76, 0xf9, 0x7c, 0xef, 0x77,
+	0xa3, 0x64, 0x1e, 0xc8, 0x9b, 0xbb, 0xd8, 0x23, 0xca, 0x4f, 0x00, 0x5e, 0xbd, 0x13, 0x47, 0x38,
+	0x22, 0xab, 0x1c, 0x2d, 0x58, 0xc9, 0x5a, 0xe2, 0xd8, 0x79, 0x06, 0x28, 0xcf, 0x3f, 0xb3, 0xd1,
+	0x08, 0x96, 0x69, 0x40, 0x42, 0x5e, 0x8f, 0xfa, 0x2b, 0x4d, 0xd0, 0xae, 0x74, 0x7b, 0xea, 0xb6,
+	0x96, 0xa9, 0xf2, 0xad, 0x7b, 0x12, 0x9a, 0x12, 0x2f, 0xa8, 0xd0, 0x5b, 0xb0, 0x3a, 0xc7, 0xae,
+	0x63, 0xe3, 0x88, 0x4c, 0xa8, 0xef, 0x3e, 0xad, 0xbf, 0xda, 0x04, 0xed, 0xd7, 0xcc, 0x03, 0x79,
+	0x78, 0xcf, 0x77, 0x9f, 0x2a, 0x3f, 0x97, 0xe0, 0xd1, 0x20, 0x24, 0x39, 0xf1, 0x03, 0x5e, 0xfe,
+	0xdd, 0x2c, 0x3c, 0x84, 0x57, 0xb2, 0xac, 0xb4, 0x7d, 0xf5, 0x12, 0x37, 0xf2, 0x6e, 0xa1, 0x91,
+	0x6c, 0x50, 0x32, 0x27, 0x29, 0x6d, 0xcd, 0x5a, 0xd2, 0x81, 0x0c, 0x58, 0x25, 0x1e, 0x76, 0xdc,
+	0x09, 0xb6, 0xed, 0x90, 0x30, 0x56, 0xdf, 0xe3, 0xc4, 0xc7, 0x92, 0x58, 0x76, 0x55, 0x7d, 0x10,
+	0x85, 0x8e, 0x3f, 0x1b, 0x61, 0x37, 0x26, 0xe6, 0x01, 0x87, 0x18, 0x29, 0x02, 0x3d, 0x84, 0x95,
+	0xdc, 0x04, 0xf3, 0x12, 0xd7, 0xba, 0x37, 0x0b, 0x95, 0xf1, 0x99, 0x57, 0x0d, 0x8e, 0x30, 0xa9,
+	0x4b, 0x3e, 0xf1, 0x63, 0x2f, 0xf7, 0xd3, 0x84, 0x38, 0x8b, 0x95, 0xef, 0x00, 0x7c, 0x7d, 0xad,
+	0x13, 0x68, 0x00, 0xf7, 0xe3, 0x20, 0x29, 0x31, 0xaf, 0xd7, 0x6e, 0x55, 0x30, 0x05, 0x14, 0x9d,
+	0xc2, 0x4a, 0x1a, 0xf1, 0x59, 0x16, 0xf5, 0x6c, 0xac, 0xd9, 0xfe, 0x34, 0x19, 0xf7, 0x3b, 0x98,
+	0x3d, 0x31, 0x61, 0x9a, 0x9e, 0xc4, 0xca, 0x00, 0x1e, 0x6f, 0xee, 0x2a, 0x0b, 0xa8, 0xcf, 0x48,
+	0x32, 0x1b, 0xcb, 0xd3, 0x9d, 0xd0, 0x97, 0x57, 0x06, 0xfb, 0x31, 0x7c, 0x63, 0x75, 0xae, 0x05,
+	0xfc, 0x2e, 0xdc, 0x0f, 0x09, 0x8b, 0x5d, 0xd9, 0xe6, 0x8f, 0xb6, 0xcf, 0xeb, 0x1a, 0x53, 0xec,
+	0x46, 0xa6, 0x60, 0x51, 0x4e, 0xe1, 0xe1, 0xa6, 0xfb, 0x75, 0x99, 0x60, 0x83, 0xcc, 0x26, 0xbc,
+	0xfe, 0xb9, 0xc3, 0xa2, 0xb4, 0x43, 0xce, 0xd4, 0xcd, 0x48, 0x98, 0x18, 0x62, 0xe5, 0x36, 0x3c,
+	0x29, 0xcc, 0x10, 0x8e, 0x6e, 0xc0, 0xda, 0xd2, 0x4b, 0xac, 0x0e, 0x9a, 0x7b, 0xed, 0xb2, 0x59,
+	0xcd, 0x3f, 0xc5, 0xba, 0x7f, 0xed, 0xc3, 0x2b, 0x12, 0xfc, 0x20, 0xb5, 0x86, 0x7e, 0x00, 0xb0,
+	0x92, 0x5b, 0x20, 0xe8, 0xc3, 0xed, 0xc5, 0x58, 0xdf, 0x37, 0x8d, 0x5d, 0x66, 0x44, 0xe9, 0x5f,
+	0x18, 0xcb, 0x85, 0xf9, 0xe6, 0xb7, 0x3f, 0xbe, 0x2d, 0xbd, 0x89, 0x4e, 0x92, 0x15, 0xfc, 0x6c,
+	0xe9, 0xe6, 0x4c, 0x7e, 0x4f, 0x4c, 0xeb, 0x3c, 0x47, 0xbf, 0x00, 0x58, 0x5b, 0xae, 0x34, 0xea,
+	0xef, 0xde, 0xbb, 0x54, 0xf1, 0xcd, 0x4b, 0x34, 0x9d, 0x17, 0x5b, 0x19, 0x5e, 0x18, 0x57, 0x73,
+	0x5b, 0xe5, 0xbd, 0x6c, 0x67, 0x71, 0x1b, 0xef, 0x28, 0xad, 0xc4, 0xc6, 0x42, 0xf7, 0xb3, 0x5c,
+	0xee, 0x59, 0xe7, 0xb9, 0xee, 0x71, 0x56, 0x1d, 0x74, 0xd0, 0xaf, 0x00, 0x5e, 0x2b, 0xe8, 0x2c,
+	0xfa, 0x78, 0xbb, 0xbc, 0x97, 0x8f, 0x4d, 0xc3, 0xf8, 0x1f, 0x0c, 0xc2, 0xe9, 0xfb, 0xdc, 0xd1,
+	0xdb, 0xe8, 0xc6, 0x92, 0x23, 0xdd, 0x2d, 0xd0, 0xfc, 0x37, 0x80, 0x87, 0x9b, 0xbe, 0x5b, 0x74,
+	0xf6, 0x1f, 0xfe, 0x20, 0x14, 0x6f, 0xf1, 0xc6, 0xad, 0xcb, 0xc2, 0x85, 0x8d, 0x2f, 0x2f, 0x8c,
+	0xa3, 0x7c, 0xc3, 0x56, 0x96, 0x3d, 0x37, 0xd9, 0x57, 0xba, 0x2f, 0x6f, 0x9b, 0xb5, 0xe1, 0x05,
+	0x1d, 0x74, 0x1a, 0x47, 0x2f, 0x8c, 0xfa, 0x42, 0x93, 0x88, 0x02, 0x87, 0xa9, 0x16, 0xf5, 0xce,
+	0xff, 0x01, 0xb0, 0x65, 0x51, 0x6f, 0xab, 0xfe, 0xf3, 0xc3, 0x95, 0xcf, 0xf2, 0x7e, 0xb2, 0x20,
+	0xef, 0x83, 0x2f, 0x6e, 0x0b, 0xe4, 0x8c, 0xba, 0xd8, 0x9f, 0xa9, 0x34, 0x9c, 0x69, 0x33, 0xe2,
+	0xf3, 0xf5, 0xa9, 0x2d, 0xde, 0x2a, 0xfe, 0xa7, 0xea, 0x54, 0x06, 0xdf, 0x97, 0xf6, 0x86, 0x86,
+	0xf1, 0x63, 0xa9, 0x39, 0x4c, 0x09, 0x0d, 0x9b, 0xa9, 0x69, 0x98, 0x44, 0xa3, 0x9e, 0x2a, 0x1e,
+	0x66, 0x2f, 0x64, 0xca, 0xd8, 0xb0, 0xd9, 0x38, 0x4b, 0x19, 0x8f, 0x7a, 0x63, 0x99, 0xf2, 0x67,
+	0xa9, 0x95, 0x9e, 0xeb, 0xba, 0x61, 0x33, 0x5d, 0xcf, 0x92, 0x74, 0x7d, 0xd4, 0xd3, 0x75, 0x99,
+	0x36, 0xdd, 0xe7, 0x3a, 0x7b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x89, 0xb6, 0x52, 0xfb,
+	0x09, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CustomerServiceClient is the client API for CustomerService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerServiceClient interface {
+	// Returns the requested customer in full detail.
+	GetCustomer(ctx context.Context, in *GetCustomerRequest, opts ...grpc.CallOption) (*resources.Customer, error)
+	// Updates a customer. Operation statuses are returned.
+	MutateCustomer(ctx context.Context, in *MutateCustomerRequest, opts ...grpc.CallOption) (*MutateCustomerResponse, error)
+	// Returns resource names of customers directly accessible by the
+	// user authenticating the call.
+	ListAccessibleCustomers(ctx context.Context, in *ListAccessibleCustomersRequest, opts ...grpc.CallOption) (*ListAccessibleCustomersResponse, error)
+	// Creates a new client under manager. The new client customer is returned.
+	CreateCustomerClient(ctx context.Context, in *CreateCustomerClientRequest, opts ...grpc.CallOption) (*CreateCustomerClientResponse, error)
+}
+
+type customerServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCustomerServiceClient(cc grpc.ClientConnInterface) CustomerServiceClient {
+	return &customerServiceClient{cc}
+}
+
+func (c *customerServiceClient) GetCustomer(ctx context.Context, in *GetCustomerRequest, opts ...grpc.CallOption) (*resources.Customer, error) {
+	out := new(resources.Customer)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerService/GetCustomer", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) MutateCustomer(ctx context.Context, in *MutateCustomerRequest, opts ...grpc.CallOption) (*MutateCustomerResponse, error) {
+	out := new(MutateCustomerResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerService/MutateCustomer", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) ListAccessibleCustomers(ctx context.Context, in *ListAccessibleCustomersRequest, opts ...grpc.CallOption) (*ListAccessibleCustomersResponse, error) {
+	out := new(ListAccessibleCustomersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerService/ListAccessibleCustomers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) CreateCustomerClient(ctx context.Context, in *CreateCustomerClientRequest, opts ...grpc.CallOption) (*CreateCustomerClientResponse, error) {
+	out := new(CreateCustomerClientResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.CustomerService/CreateCustomerClient", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerServiceServer is the server API for CustomerService service.
+type CustomerServiceServer interface {
+	// Returns the requested customer in full detail.
+	GetCustomer(context.Context, *GetCustomerRequest) (*resources.Customer, error)
+	// Updates a customer. Operation statuses are returned.
+	MutateCustomer(context.Context, *MutateCustomerRequest) (*MutateCustomerResponse, error)
+	// Returns resource names of customers directly accessible by the
+	// user authenticating the call.
+	ListAccessibleCustomers(context.Context, *ListAccessibleCustomersRequest) (*ListAccessibleCustomersResponse, error)
+	// Creates a new client under manager. The new client customer is returned.
+	CreateCustomerClient(context.Context, *CreateCustomerClientRequest) (*CreateCustomerClientResponse, error)
+}
+
+// UnimplementedCustomerServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedCustomerServiceServer struct {
+}
+
+func (*UnimplementedCustomerServiceServer) GetCustomer(ctx context.Context, req *GetCustomerRequest) (*resources.Customer, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCustomer not implemented")
+}
+func (*UnimplementedCustomerServiceServer) MutateCustomer(ctx context.Context, req *MutateCustomerRequest) (*MutateCustomerResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateCustomer not implemented")
+}
+func (*UnimplementedCustomerServiceServer) ListAccessibleCustomers(ctx context.Context, req *ListAccessibleCustomersRequest) (*ListAccessibleCustomersResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListAccessibleCustomers not implemented")
+}
+func (*UnimplementedCustomerServiceServer) CreateCustomerClient(ctx context.Context, req *CreateCustomerClientRequest) (*CreateCustomerClientResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateCustomerClient not implemented")
+}
+
+func RegisterCustomerServiceServer(s *grpc.Server, srv CustomerServiceServer) {
+	s.RegisterService(&_CustomerService_serviceDesc, srv)
+}
+
+func _CustomerService_GetCustomer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).GetCustomer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerService/GetCustomer",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).GetCustomer(ctx, req.(*GetCustomerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_MutateCustomer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).MutateCustomer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerService/MutateCustomer",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).MutateCustomer(ctx, req.(*MutateCustomerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_ListAccessibleCustomers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListAccessibleCustomersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).ListAccessibleCustomers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerService/ListAccessibleCustomers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).ListAccessibleCustomers(ctx, req.(*ListAccessibleCustomersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_CreateCustomerClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateCustomerClientRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).CreateCustomerClient(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.CustomerService/CreateCustomerClient",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).CreateCustomerClient(ctx, req.(*CreateCustomerClientRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.CustomerService",
+	HandlerType: (*CustomerServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomer",
+			Handler:    _CustomerService_GetCustomer_Handler,
+		},
+		{
+			MethodName: "MutateCustomer",
+			Handler:    _CustomerService_MutateCustomer_Handler,
+		},
+		{
+			MethodName: "ListAccessibleCustomers",
+			Handler:    _CustomerService_ListAccessibleCustomers_Handler,
+		},
+		{
+			MethodName: "CreateCustomerClient",
+			Handler:    _CustomerService_CreateCustomerClient_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/customer_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/detail_placement_view_service.pb.go b/googleapis/ads/googleads/v3/services/detail_placement_view_service.pb.go
new file mode 100644
index 0000000..2aec8ed
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/detail_placement_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/detail_placement_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [DetailPlacementViewService.GetDetailPlacementView][google.ads.googleads.v3.services.DetailPlacementViewService.GetDetailPlacementView].
+type GetDetailPlacementViewRequest struct {
+	// Required. The resource name of the Detail Placement view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDetailPlacementViewRequest) Reset()         { *m = GetDetailPlacementViewRequest{} }
+func (m *GetDetailPlacementViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDetailPlacementViewRequest) ProtoMessage()    {}
+func (*GetDetailPlacementViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0191e49c6a7b6d2e, []int{0}
+}
+
+func (m *GetDetailPlacementViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDetailPlacementViewRequest.Unmarshal(m, b)
+}
+func (m *GetDetailPlacementViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDetailPlacementViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDetailPlacementViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDetailPlacementViewRequest.Merge(m, src)
+}
+func (m *GetDetailPlacementViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDetailPlacementViewRequest.Size(m)
+}
+func (m *GetDetailPlacementViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDetailPlacementViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDetailPlacementViewRequest proto.InternalMessageInfo
+
+func (m *GetDetailPlacementViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDetailPlacementViewRequest)(nil), "google.ads.googleads.v3.services.GetDetailPlacementViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/detail_placement_view_service.proto", fileDescriptor_0191e49c6a7b6d2e)
+}
+
+var fileDescriptor_0191e49c6a7b6d2e = []byte{
+	// 422 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xd0, 0x23, 0x2a, 0xb7, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x80, 0x81, 0x43, 0x46, 0x0e, 0x99, 0xe5, 0x60, 0xb5, 0x59, 0x96, 0x15, 0x52, 0x48, 0x20, 0xcc,
+	0x26, 0x9f, 0x71, 0x20, 0x99, 0x89, 0x99, 0xd9, 0x6c, 0x21, 0x36, 0x16, 0xfe, 0x01, 0x6b, 0x1b,
+	0x4b, 0x7f, 0xca, 0xb6, 0x76, 0x56, 0x0a, 0x56, 0xfe, 0x0a, 0xc9, 0x4e, 0x26, 0xbb, 0x0b, 0x1b,
+	0xb7, 0x7b, 0xe4, 0xbd, 0xef, 0xbd, 0x6f, 0xbe, 0x17, 0xef, 0x36, 0x97, 0x32, 0x2f, 0x00, 0xb3,
+	0x4c, 0x61, 0x03, 0x5b, 0xd4, 0x84, 0x58, 0x41, 0xdd, 0xf0, 0x14, 0x14, 0xce, 0x40, 0x33, 0x5e,
+	0x24, 0x55, 0xc1, 0x52, 0x28, 0x41, 0xe8, 0xa4, 0xe1, 0xb0, 0x4a, 0x3a, 0x1a, 0x55, 0xb5, 0xd4,
+	0xd2, 0x1f, 0x99, 0x51, 0xc4, 0x32, 0x85, 0x7a, 0x17, 0xd4, 0x84, 0xc8, 0xba, 0x04, 0x37, 0x43,
+	0x39, 0x35, 0x28, 0xb9, 0xac, 0x07, 0x83, 0x4c, 0x40, 0xf0, 0xd8, 0x8e, 0x57, 0x1c, 0x33, 0x21,
+	0xa4, 0x66, 0x9a, 0x4b, 0xa1, 0x3a, 0xf6, 0xe1, 0x0e, 0x9b, 0x16, 0x1c, 0x84, 0xee, 0x88, 0xb3,
+	0x1d, 0xe2, 0x2d, 0x87, 0x22, 0x4b, 0x16, 0xf0, 0x8e, 0x35, 0x5c, 0xd6, 0x46, 0x70, 0xfe, 0xca,
+	0x7b, 0x32, 0x01, 0x7d, 0xbb, 0x49, 0x9e, 0xd9, 0xe0, 0x88, 0xc3, 0x6a, 0x0e, 0xef, 0x97, 0xa0,
+	0xb4, 0x7f, 0xe9, 0xdd, 0xb7, 0x1b, 0x26, 0x82, 0x95, 0x70, 0xea, 0x8c, 0x9c, 0xcb, 0xbb, 0xe3,
+	0x93, 0x5f, 0xd4, 0x9d, 0xdf, 0xb3, 0xcc, 0x94, 0x95, 0xf0, 0xf4, 0xab, 0xeb, 0x05, 0x07, 0x8c,
+	0x5e, 0x9b, 0x0b, 0xf8, 0xbf, 0x1d, 0xef, 0xc1, 0xe1, 0x28, 0xff, 0x05, 0x3a, 0x76, 0x3e, 0xf4,
+	0xdf, 0x25, 0x83, 0xeb, 0x41, 0x83, 0xfe, 0xba, 0xe8, 0xc0, 0xf8, 0xf9, 0xf4, 0x27, 0xdd, 0x7f,
+	0xdd, 0xa7, 0x1f, 0x7f, 0xbe, 0xb8, 0xcf, 0xfc, 0xeb, 0xb6, 0x98, 0x0f, 0x7b, 0xcc, 0x4d, 0xba,
+	0x54, 0x5a, 0x96, 0x50, 0x2b, 0x7c, 0xd5, 0x35, 0xb5, 0xe7, 0xa5, 0xf0, 0xd5, 0xc7, 0xe0, 0xd1,
+	0x9a, 0x9e, 0x6e, 0xe3, 0x3b, 0x54, 0x71, 0x85, 0x52, 0x59, 0x8e, 0x3f, 0xbb, 0xde, 0x45, 0x2a,
+	0xcb, 0xa3, 0x6f, 0x1d, 0x9f, 0x0d, 0x5f, 0x71, 0xd6, 0x96, 0x36, 0x73, 0xde, 0xbc, 0xec, 0x4c,
+	0x72, 0x59, 0x30, 0x91, 0x23, 0x59, 0xe7, 0x38, 0x07, 0xb1, 0xa9, 0x14, 0x6f, 0x63, 0x87, 0x7f,
+	0xea, 0xe7, 0x16, 0x7c, 0x73, 0x4f, 0x26, 0x94, 0x7e, 0x77, 0x47, 0x13, 0x63, 0x48, 0x33, 0x85,
+	0x0c, 0x6c, 0x51, 0x14, 0xa2, 0x2e, 0x58, 0xad, 0xad, 0x24, 0xa6, 0x99, 0x8a, 0x7b, 0x49, 0x1c,
+	0x85, 0xb1, 0x95, 0xfc, 0x75, 0x2f, 0xcc, 0x77, 0x42, 0x68, 0xa6, 0x08, 0xe9, 0x45, 0x84, 0x44,
+	0x21, 0x21, 0x56, 0xb6, 0xb8, 0xb3, 0xd9, 0x33, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x67, 0xa6,
+	0xa3, 0x82, 0x7b, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// DetailPlacementViewServiceClient is the client API for DetailPlacementViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DetailPlacementViewServiceClient interface {
+	// Returns the requested Detail Placement view in full detail.
+	GetDetailPlacementView(ctx context.Context, in *GetDetailPlacementViewRequest, opts ...grpc.CallOption) (*resources.DetailPlacementView, error)
+}
+
+type detailPlacementViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDetailPlacementViewServiceClient(cc grpc.ClientConnInterface) DetailPlacementViewServiceClient {
+	return &detailPlacementViewServiceClient{cc}
+}
+
+func (c *detailPlacementViewServiceClient) GetDetailPlacementView(ctx context.Context, in *GetDetailPlacementViewRequest, opts ...grpc.CallOption) (*resources.DetailPlacementView, error) {
+	out := new(resources.DetailPlacementView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.DetailPlacementViewService/GetDetailPlacementView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DetailPlacementViewServiceServer is the server API for DetailPlacementViewService service.
+type DetailPlacementViewServiceServer interface {
+	// Returns the requested Detail Placement view in full detail.
+	GetDetailPlacementView(context.Context, *GetDetailPlacementViewRequest) (*resources.DetailPlacementView, error)
+}
+
+// UnimplementedDetailPlacementViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedDetailPlacementViewServiceServer struct {
+}
+
+func (*UnimplementedDetailPlacementViewServiceServer) GetDetailPlacementView(ctx context.Context, req *GetDetailPlacementViewRequest) (*resources.DetailPlacementView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDetailPlacementView not implemented")
+}
+
+func RegisterDetailPlacementViewServiceServer(s *grpc.Server, srv DetailPlacementViewServiceServer) {
+	s.RegisterService(&_DetailPlacementViewService_serviceDesc, srv)
+}
+
+func _DetailPlacementViewService_GetDetailPlacementView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDetailPlacementViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DetailPlacementViewServiceServer).GetDetailPlacementView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.DetailPlacementViewService/GetDetailPlacementView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DetailPlacementViewServiceServer).GetDetailPlacementView(ctx, req.(*GetDetailPlacementViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DetailPlacementViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.DetailPlacementViewService",
+	HandlerType: (*DetailPlacementViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDetailPlacementView",
+			Handler:    _DetailPlacementViewService_GetDetailPlacementView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/detail_placement_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/display_keyword_view_service.pb.go b/googleapis/ads/googleads/v3/services/display_keyword_view_service.pb.go
new file mode 100644
index 0000000..e82f743
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/display_keyword_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/display_keyword_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [DisplayKeywordViewService.GetDisplayKeywordView][google.ads.googleads.v3.services.DisplayKeywordViewService.GetDisplayKeywordView].
+type GetDisplayKeywordViewRequest struct {
+	// Required. The resource name of the display keyword view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDisplayKeywordViewRequest) Reset()         { *m = GetDisplayKeywordViewRequest{} }
+func (m *GetDisplayKeywordViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDisplayKeywordViewRequest) ProtoMessage()    {}
+func (*GetDisplayKeywordViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_157dba0f7495fb59, []int{0}
+}
+
+func (m *GetDisplayKeywordViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Unmarshal(m, b)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDisplayKeywordViewRequest.Merge(m, src)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Size(m)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDisplayKeywordViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDisplayKeywordViewRequest proto.InternalMessageInfo
+
+func (m *GetDisplayKeywordViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDisplayKeywordViewRequest)(nil), "google.ads.googleads.v3.services.GetDisplayKeywordViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/display_keyword_view_service.proto", fileDescriptor_157dba0f7495fb59)
+}
+
+var fileDescriptor_157dba0f7495fb59 = []byte{
+	// 425 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4d, 0x6b, 0xd5, 0x40,
+	0x14, 0xe5, 0xa5, 0x20, 0x18, 0x74, 0x13, 0x10, 0x6b, 0x2c, 0xfa, 0x28, 0x5d, 0x94, 0x2e, 0x66,
+	0xc0, 0x50, 0x84, 0xf1, 0x03, 0xe6, 0x29, 0xbc, 0x82, 0x28, 0xa5, 0x42, 0x16, 0x12, 0x08, 0xd3,
+	0xcc, 0x35, 0x0e, 0x26, 0x99, 0x38, 0x37, 0x2f, 0x8f, 0x22, 0x6e, 0x04, 0x7f, 0x81, 0x1b, 0xd7,
+	0x2e, 0xfd, 0x29, 0xdd, 0xba, 0x13, 0x04, 0x17, 0xae, 0xfc, 0x15, 0x92, 0x4e, 0x26, 0x7d, 0xa5,
+	0xc6, 0xb7, 0x3b, 0xcc, 0x39, 0xf7, 0x9c, 0xfb, 0x31, 0xfe, 0x93, 0x5c, 0xeb, 0xbc, 0x00, 0x2a,
+	0x24, 0x52, 0x0b, 0x3b, 0xd4, 0x46, 0x14, 0xc1, 0xb4, 0x2a, 0x03, 0xa4, 0x52, 0x61, 0x5d, 0x88,
+	0x93, 0xf4, 0x2d, 0x9c, 0x2c, 0xb5, 0x91, 0x69, 0xab, 0x60, 0x99, 0xf6, 0x2c, 0xa9, 0x8d, 0x6e,
+	0x74, 0x30, 0xb5, 0x95, 0x44, 0x48, 0x24, 0x83, 0x09, 0x69, 0x23, 0xe2, 0x4c, 0xc2, 0x87, 0x63,
+	0x31, 0x06, 0x50, 0x2f, 0xcc, 0x58, 0x8e, 0xf5, 0x0f, 0xb7, 0x5c, 0x75, 0xad, 0xa8, 0xa8, 0x2a,
+	0xdd, 0x88, 0x46, 0xe9, 0x0a, 0x7b, 0xf6, 0xe6, 0x0a, 0x9b, 0x15, 0x0a, 0xaa, 0xa6, 0x27, 0xee,
+	0xae, 0x10, 0xaf, 0x15, 0x14, 0x32, 0x3d, 0x86, 0x37, 0xa2, 0x55, 0xda, 0x58, 0xc1, 0xf6, 0x81,
+	0xbf, 0x35, 0x87, 0xe6, 0xa9, 0x0d, 0x7e, 0x66, 0x73, 0x63, 0x05, 0xcb, 0x23, 0x78, 0xb7, 0x00,
+	0x6c, 0x82, 0x5d, 0xff, 0xba, 0xeb, 0x2f, 0xad, 0x44, 0x09, 0x9b, 0x93, 0xe9, 0x64, 0xf7, 0xea,
+	0x6c, 0xe3, 0x17, 0xf7, 0x8e, 0xae, 0x39, 0xe6, 0x85, 0x28, 0xe1, 0xde, 0x17, 0xcf, 0xbf, 0x75,
+	0xd9, 0xe7, 0xa5, 0x1d, 0x3f, 0xf8, 0x39, 0xf1, 0x6f, 0xfc, 0x33, 0x28, 0x78, 0x4c, 0xd6, 0xad,
+	0x8e, 0xfc, 0xaf, 0xc3, 0x70, 0x7f, 0xb4, 0x7e, 0x58, 0x2c, 0xb9, 0x5c, 0xbd, 0xfd, 0xfc, 0x07,
+	0xbf, 0x38, 0xd9, 0xc7, 0xef, 0xbf, 0x3f, 0x7b, 0xf7, 0x83, 0xfd, 0xee, 0x24, 0xef, 0x2f, 0x30,
+	0x8f, 0xb2, 0x05, 0x36, 0xba, 0x04, 0x83, 0x74, 0xcf, 0xdd, 0x68, 0xc5, 0x0a, 0xe9, 0xde, 0x87,
+	0xf0, 0xf6, 0x29, 0xdf, 0x3c, 0x0f, 0xef, 0x51, 0xad, 0x90, 0x64, 0xba, 0x9c, 0x7d, 0xf2, 0xfc,
+	0x9d, 0x4c, 0x97, 0x6b, 0x07, 0x9d, 0xdd, 0x19, 0x5d, 0xe0, 0x61, 0x77, 0xad, 0xc3, 0xc9, 0xab,
+	0x83, 0xde, 0x23, 0xd7, 0x85, 0xa8, 0x72, 0xa2, 0x4d, 0x4e, 0x73, 0xa8, 0xce, 0x6e, 0x49, 0xcf,
+	0x53, 0xc7, 0xff, 0xf2, 0x03, 0x07, 0xbe, 0x7a, 0x1b, 0x73, 0xce, 0xbf, 0x79, 0xd3, 0xb9, 0x35,
+	0xe4, 0x12, 0x89, 0x85, 0x1d, 0x8a, 0x23, 0xd2, 0x07, 0xe3, 0xa9, 0x93, 0x24, 0x5c, 0x62, 0x32,
+	0x48, 0x92, 0x38, 0x4a, 0x9c, 0xe4, 0x8f, 0xb7, 0x63, 0xdf, 0x19, 0xe3, 0x12, 0x19, 0x1b, 0x44,
+	0x8c, 0xc5, 0x11, 0x63, 0x4e, 0x76, 0x7c, 0xe5, 0xac, 0xcf, 0xe8, 0x6f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xc6, 0xd3, 0x99, 0xcb, 0x72, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// DisplayKeywordViewServiceClient is the client API for DisplayKeywordViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DisplayKeywordViewServiceClient interface {
+	// Returns the requested display keyword view in full detail.
+	GetDisplayKeywordView(ctx context.Context, in *GetDisplayKeywordViewRequest, opts ...grpc.CallOption) (*resources.DisplayKeywordView, error)
+}
+
+type displayKeywordViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDisplayKeywordViewServiceClient(cc grpc.ClientConnInterface) DisplayKeywordViewServiceClient {
+	return &displayKeywordViewServiceClient{cc}
+}
+
+func (c *displayKeywordViewServiceClient) GetDisplayKeywordView(ctx context.Context, in *GetDisplayKeywordViewRequest, opts ...grpc.CallOption) (*resources.DisplayKeywordView, error) {
+	out := new(resources.DisplayKeywordView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.DisplayKeywordViewService/GetDisplayKeywordView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DisplayKeywordViewServiceServer is the server API for DisplayKeywordViewService service.
+type DisplayKeywordViewServiceServer interface {
+	// Returns the requested display keyword view in full detail.
+	GetDisplayKeywordView(context.Context, *GetDisplayKeywordViewRequest) (*resources.DisplayKeywordView, error)
+}
+
+// UnimplementedDisplayKeywordViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedDisplayKeywordViewServiceServer struct {
+}
+
+func (*UnimplementedDisplayKeywordViewServiceServer) GetDisplayKeywordView(ctx context.Context, req *GetDisplayKeywordViewRequest) (*resources.DisplayKeywordView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDisplayKeywordView not implemented")
+}
+
+func RegisterDisplayKeywordViewServiceServer(s *grpc.Server, srv DisplayKeywordViewServiceServer) {
+	s.RegisterService(&_DisplayKeywordViewService_serviceDesc, srv)
+}
+
+func _DisplayKeywordViewService_GetDisplayKeywordView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDisplayKeywordViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DisplayKeywordViewServiceServer).GetDisplayKeywordView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.DisplayKeywordViewService/GetDisplayKeywordView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DisplayKeywordViewServiceServer).GetDisplayKeywordView(ctx, req.(*GetDisplayKeywordViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DisplayKeywordViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.DisplayKeywordViewService",
+	HandlerType: (*DisplayKeywordViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDisplayKeywordView",
+			Handler:    _DisplayKeywordViewService_GetDisplayKeywordView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/display_keyword_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/distance_view_service.pb.go b/googleapis/ads/googleads/v3/services/distance_view_service.pb.go
new file mode 100644
index 0000000..4bba9c6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/distance_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/distance_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [DistanceViewService.GetDistanceView][google.ads.googleads.v3.services.DistanceViewService.GetDistanceView].
+type GetDistanceViewRequest struct {
+	// Required. The resource name of the distance view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDistanceViewRequest) Reset()         { *m = GetDistanceViewRequest{} }
+func (m *GetDistanceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDistanceViewRequest) ProtoMessage()    {}
+func (*GetDistanceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a03294264c0658c0, []int{0}
+}
+
+func (m *GetDistanceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDistanceViewRequest.Unmarshal(m, b)
+}
+func (m *GetDistanceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDistanceViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDistanceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDistanceViewRequest.Merge(m, src)
+}
+func (m *GetDistanceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDistanceViewRequest.Size(m)
+}
+func (m *GetDistanceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDistanceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDistanceViewRequest proto.InternalMessageInfo
+
+func (m *GetDistanceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDistanceViewRequest)(nil), "google.ads.googleads.v3.services.GetDistanceViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/distance_view_service.proto", fileDescriptor_a03294264c0658c0)
+}
+
+var fileDescriptor_a03294264c0658c0 = []byte{
+	// 413 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xbd, 0x8a, 0xd5, 0x40,
+	0x14, 0x26, 0x59, 0x10, 0x0c, 0x8a, 0x10, 0x41, 0x2f, 0x51, 0xf0, 0xb2, 0x6c, 0xb1, 0x6c, 0x31,
+	0x83, 0x06, 0x41, 0x46, 0x2d, 0x26, 0x08, 0xb1, 0x92, 0x65, 0x85, 0x14, 0x12, 0x08, 0xb3, 0xc9,
+	0x31, 0x0e, 0x24, 0x33, 0xd7, 0x9c, 0xb9, 0xd9, 0x42, 0x6c, 0x7c, 0x05, 0xdf, 0xc0, 0xd2, 0xf7,
+	0xb0, 0xd9, 0xd6, 0xce, 0xca, 0xc2, 0xca, 0x47, 0xb0, 0x51, 0xb2, 0x93, 0xc9, 0x66, 0xdd, 0xbd,
+	0xdc, 0xee, 0x23, 0xdf, 0xcf, 0x39, 0xe7, 0x9b, 0x04, 0xcf, 0x6a, 0xad, 0xeb, 0x06, 0xa8, 0xa8,
+	0x90, 0x5a, 0x38, 0xa0, 0x3e, 0xa6, 0x08, 0x5d, 0x2f, 0x4b, 0x40, 0x5a, 0x49, 0x34, 0x42, 0x95,
+	0x50, 0xf4, 0x12, 0x4e, 0x8a, 0xf1, 0x33, 0x59, 0x75, 0xda, 0xe8, 0x70, 0x69, 0x2d, 0x44, 0x54,
+	0x48, 0x26, 0x37, 0xe9, 0x63, 0xe2, 0xdc, 0xd1, 0xe3, 0x4d, 0xf9, 0x1d, 0xa0, 0x5e, 0x77, 0x97,
+	0x06, 0xd8, 0xe0, 0xe8, 0xbe, 0xb3, 0xad, 0x24, 0x15, 0x4a, 0x69, 0x23, 0x8c, 0xd4, 0x0a, 0x47,
+	0xf6, 0xee, 0x8c, 0x2d, 0x1b, 0x09, 0xca, 0x8c, 0xc4, 0x83, 0x19, 0xf1, 0x56, 0x42, 0x53, 0x15,
+	0xc7, 0xf0, 0x4e, 0xf4, 0x52, 0x77, 0x56, 0xb0, 0x9b, 0x04, 0x77, 0x52, 0x30, 0x2f, 0xc6, 0x89,
+	0x99, 0x84, 0x93, 0x23, 0x78, 0xbf, 0x06, 0x34, 0xe1, 0x7e, 0x70, 0xd3, 0xad, 0x54, 0x28, 0xd1,
+	0xc2, 0xc2, 0x5b, 0x7a, 0xfb, 0xd7, 0x93, 0x9d, 0x9f, 0xdc, 0x3f, 0xba, 0xe1, 0x98, 0x57, 0xa2,
+	0x85, 0x47, 0x7f, 0xbc, 0xe0, 0xf6, 0x3c, 0xe1, 0xb5, 0xbd, 0x35, 0xfc, 0xe6, 0x05, 0xb7, 0xfe,
+	0x0b, 0x0f, 0x9f, 0x90, 0x6d, 0x0d, 0x91, 0xab, 0xf7, 0x89, 0xe8, 0x46, 0xe7, 0xd4, 0x1c, 0x99,
+	0xfb, 0x76, 0xd3, 0x1f, 0xfc, 0xe2, 0x05, 0x9f, 0xbe, 0xff, 0xfa, 0xec, 0x3f, 0x0c, 0xe9, 0xd0,
+	0xf6, 0x87, 0x0b, 0xcc, 0xf3, 0x72, 0x8d, 0x46, 0xb7, 0xd0, 0x21, 0x3d, 0x98, 0xea, 0x1f, 0x42,
+	0x90, 0x1e, 0x7c, 0x8c, 0xee, 0x9d, 0xf2, 0xc5, 0xf9, 0xc0, 0x11, 0xad, 0x24, 0x92, 0x52, 0xb7,
+	0xc9, 0x5f, 0x2f, 0xd8, 0x2b, 0x75, 0xbb, 0xf5, 0xac, 0x64, 0x71, 0x45, 0x45, 0x87, 0xc3, 0x1b,
+	0x1c, 0x7a, 0x6f, 0x5e, 0x8e, 0xee, 0x5a, 0x37, 0x42, 0xd5, 0x44, 0x77, 0x35, 0xad, 0x41, 0x9d,
+	0xbd, 0x10, 0x3d, 0x9f, 0xb7, 0xf9, 0x9f, 0x7c, 0xea, 0xc0, 0x17, 0x7f, 0x27, 0xe5, 0xfc, 0xab,
+	0xbf, 0x4c, 0x6d, 0x20, 0xaf, 0x90, 0x58, 0x38, 0xa0, 0x2c, 0x26, 0xe3, 0x60, 0x3c, 0x75, 0x92,
+	0x9c, 0x57, 0x98, 0x4f, 0x92, 0x3c, 0x8b, 0x73, 0x27, 0xf9, 0xed, 0xef, 0xd9, 0xef, 0x8c, 0xf1,
+	0x0a, 0x19, 0x9b, 0x44, 0x8c, 0x65, 0x31, 0x63, 0x4e, 0x76, 0x7c, 0xed, 0x6c, 0xcf, 0xf8, 0x5f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x54, 0x9f, 0xf8, 0x3a, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// DistanceViewServiceClient is the client API for DistanceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DistanceViewServiceClient interface {
+	// Returns the attributes of the requested distance view.
+	GetDistanceView(ctx context.Context, in *GetDistanceViewRequest, opts ...grpc.CallOption) (*resources.DistanceView, error)
+}
+
+type distanceViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDistanceViewServiceClient(cc grpc.ClientConnInterface) DistanceViewServiceClient {
+	return &distanceViewServiceClient{cc}
+}
+
+func (c *distanceViewServiceClient) GetDistanceView(ctx context.Context, in *GetDistanceViewRequest, opts ...grpc.CallOption) (*resources.DistanceView, error) {
+	out := new(resources.DistanceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.DistanceViewService/GetDistanceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DistanceViewServiceServer is the server API for DistanceViewService service.
+type DistanceViewServiceServer interface {
+	// Returns the attributes of the requested distance view.
+	GetDistanceView(context.Context, *GetDistanceViewRequest) (*resources.DistanceView, error)
+}
+
+// UnimplementedDistanceViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedDistanceViewServiceServer struct {
+}
+
+func (*UnimplementedDistanceViewServiceServer) GetDistanceView(ctx context.Context, req *GetDistanceViewRequest) (*resources.DistanceView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDistanceView not implemented")
+}
+
+func RegisterDistanceViewServiceServer(s *grpc.Server, srv DistanceViewServiceServer) {
+	s.RegisterService(&_DistanceViewService_serviceDesc, srv)
+}
+
+func _DistanceViewService_GetDistanceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDistanceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DistanceViewServiceServer).GetDistanceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.DistanceViewService/GetDistanceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DistanceViewServiceServer).GetDistanceView(ctx, req.(*GetDistanceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DistanceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.DistanceViewService",
+	HandlerType: (*DistanceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDistanceView",
+			Handler:    _DistanceViewService_GetDistanceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/distance_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/domain_category_service.pb.go b/googleapis/ads/googleads/v3/services/domain_category_service.pb.go
new file mode 100644
index 0000000..15c10f7
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/domain_category_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/domain_category_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [DomainCategoryService.GetDomainCategory][google.ads.googleads.v3.services.DomainCategoryService.GetDomainCategory].
+type GetDomainCategoryRequest struct {
+	// Required. Resource name of the domain category to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDomainCategoryRequest) Reset()         { *m = GetDomainCategoryRequest{} }
+func (m *GetDomainCategoryRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDomainCategoryRequest) ProtoMessage()    {}
+func (*GetDomainCategoryRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f0e862225aa01833, []int{0}
+}
+
+func (m *GetDomainCategoryRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDomainCategoryRequest.Unmarshal(m, b)
+}
+func (m *GetDomainCategoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDomainCategoryRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDomainCategoryRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDomainCategoryRequest.Merge(m, src)
+}
+func (m *GetDomainCategoryRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDomainCategoryRequest.Size(m)
+}
+func (m *GetDomainCategoryRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDomainCategoryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDomainCategoryRequest proto.InternalMessageInfo
+
+func (m *GetDomainCategoryRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDomainCategoryRequest)(nil), "google.ads.googleads.v3.services.GetDomainCategoryRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/domain_category_service.proto", fileDescriptor_f0e862225aa01833)
+}
+
+var fileDescriptor_f0e862225aa01833 = []byte{
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x8b, 0xd4, 0x30,
+	0x1c, 0xa5, 0x5d, 0x10, 0x2c, 0x7a, 0xb0, 0x20, 0x0e, 0x55, 0x70, 0x58, 0xf6, 0xb0, 0xec, 0x21,
+	0xc1, 0xad, 0x20, 0x44, 0x14, 0x32, 0x2e, 0x8c, 0x78, 0x90, 0x65, 0x85, 0x39, 0x48, 0xa1, 0x64,
+	0xdb, 0x9f, 0x35, 0xd0, 0x26, 0x63, 0x92, 0x29, 0x88, 0x78, 0x50, 0xf0, 0x13, 0xf8, 0x0d, 0x3c,
+	0xfa, 0x51, 0xf6, 0xe0, 0xc5, 0x9b, 0x27, 0x0f, 0x9e, 0xfc, 0x14, 0xd2, 0x49, 0xd2, 0x99, 0xe2,
+	0x94, 0xb9, 0x3d, 0xf2, 0xde, 0xfb, 0xbd, 0xdf, 0x9f, 0x44, 0x4f, 0x2b, 0x29, 0xab, 0x1a, 0x30,
+	0x2b, 0x35, 0xb6, 0xb0, 0x43, 0x6d, 0x8a, 0x35, 0xa8, 0x96, 0x17, 0xa0, 0x71, 0x29, 0x1b, 0xc6,
+	0x45, 0x5e, 0x30, 0x03, 0x95, 0x54, 0xef, 0x73, 0x47, 0xa0, 0xa5, 0x92, 0x46, 0xc6, 0x53, 0x6b,
+	0x42, 0xac, 0xd4, 0xa8, 0xf7, 0xa3, 0x36, 0x45, 0xde, 0x9f, 0x3c, 0x1a, 0x4b, 0x50, 0xa0, 0xe5,
+	0x4a, 0xed, 0x88, 0xb0, 0xa5, 0x93, 0x7b, 0xde, 0xb8, 0xe4, 0x98, 0x09, 0x21, 0x0d, 0x33, 0x5c,
+	0x0a, 0xed, 0xd8, 0x3b, 0x5b, 0x6c, 0x51, 0x73, 0x10, 0xc6, 0x11, 0xf7, 0xb7, 0x88, 0x37, 0x1c,
+	0xea, 0x32, 0xbf, 0x84, 0xb7, 0xac, 0xe5, 0x52, 0x59, 0xc1, 0xe1, 0x59, 0x34, 0x99, 0x83, 0x39,
+	0x5b, 0x67, 0x3e, 0x73, 0x91, 0x17, 0xf0, 0x6e, 0x05, 0xda, 0xc4, 0xc7, 0xd1, 0x4d, 0xdf, 0x56,
+	0x2e, 0x58, 0x03, 0x93, 0x60, 0x1a, 0x1c, 0x5f, 0x9f, 0x1d, 0xfc, 0xa6, 0xe1, 0xc5, 0x0d, 0xcf,
+	0xbc, 0x64, 0x0d, 0x9c, 0x7e, 0x09, 0xa3, 0xdb, 0xc3, 0x1a, 0xaf, 0xec, 0xc4, 0xf1, 0x8f, 0x20,
+	0xba, 0xf5, 0x5f, 0x40, 0x4c, 0xd0, 0xbe, 0x4d, 0xa1, 0xb1, 0xae, 0x92, 0x07, 0xa3, 0xde, 0x7e,
+	0x87, 0x68, 0xe8, 0x3c, 0x7c, 0xf1, 0x8b, 0x0e, 0x27, 0xf9, 0xfc, 0xf3, 0xcf, 0xd7, 0xf0, 0x61,
+	0x7c, 0xda, 0x6d, 0xfe, 0xc3, 0x80, 0x79, 0x52, 0xac, 0xb4, 0x91, 0x0d, 0x28, 0x8d, 0x4f, 0xdc,
+	0x29, 0x5c, 0x19, 0x0e, 0x1a, 0x9f, 0x7c, 0x4c, 0xee, 0x5e, 0xd1, 0xc9, 0x26, 0xd5, 0xa1, 0x25,
+	0xd7, 0xa8, 0x90, 0xcd, 0xec, 0x53, 0x18, 0x1d, 0x15, 0xb2, 0xd9, 0x3b, 0xdd, 0x2c, 0xd9, 0xb9,
+	0xad, 0xf3, 0xee, 0x24, 0xe7, 0xc1, 0xeb, 0xe7, 0xce, 0x5f, 0xc9, 0x9a, 0x89, 0x0a, 0x49, 0x55,
+	0xe1, 0x0a, 0xc4, 0xfa, 0x60, 0x78, 0x93, 0x38, 0xfe, 0x4d, 0x1f, 0x7b, 0xf0, 0x2d, 0x3c, 0x98,
+	0x53, 0xfa, 0x3d, 0x9c, 0xce, 0x6d, 0x41, 0x5a, 0x6a, 0x64, 0x61, 0x87, 0x16, 0x29, 0x72, 0xc1,
+	0xfa, 0xca, 0x4b, 0x32, 0x5a, 0xea, 0xac, 0x97, 0x64, 0x8b, 0x34, 0xf3, 0x92, 0xbf, 0xe1, 0x91,
+	0x7d, 0x27, 0x84, 0x96, 0x9a, 0x90, 0x5e, 0x44, 0xc8, 0x22, 0x25, 0xc4, 0xcb, 0x2e, 0xaf, 0xad,
+	0xfb, 0x4c, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x13, 0xdc, 0xd2, 0x4d, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// DomainCategoryServiceClient is the client API for DomainCategoryService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DomainCategoryServiceClient interface {
+	// Returns the requested domain category.
+	GetDomainCategory(ctx context.Context, in *GetDomainCategoryRequest, opts ...grpc.CallOption) (*resources.DomainCategory, error)
+}
+
+type domainCategoryServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDomainCategoryServiceClient(cc grpc.ClientConnInterface) DomainCategoryServiceClient {
+	return &domainCategoryServiceClient{cc}
+}
+
+func (c *domainCategoryServiceClient) GetDomainCategory(ctx context.Context, in *GetDomainCategoryRequest, opts ...grpc.CallOption) (*resources.DomainCategory, error) {
+	out := new(resources.DomainCategory)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.DomainCategoryService/GetDomainCategory", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DomainCategoryServiceServer is the server API for DomainCategoryService service.
+type DomainCategoryServiceServer interface {
+	// Returns the requested domain category.
+	GetDomainCategory(context.Context, *GetDomainCategoryRequest) (*resources.DomainCategory, error)
+}
+
+// UnimplementedDomainCategoryServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedDomainCategoryServiceServer struct {
+}
+
+func (*UnimplementedDomainCategoryServiceServer) GetDomainCategory(ctx context.Context, req *GetDomainCategoryRequest) (*resources.DomainCategory, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDomainCategory not implemented")
+}
+
+func RegisterDomainCategoryServiceServer(s *grpc.Server, srv DomainCategoryServiceServer) {
+	s.RegisterService(&_DomainCategoryService_serviceDesc, srv)
+}
+
+func _DomainCategoryService_GetDomainCategory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDomainCategoryRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DomainCategoryServiceServer).GetDomainCategory(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.DomainCategoryService/GetDomainCategory",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DomainCategoryServiceServer).GetDomainCategory(ctx, req.(*GetDomainCategoryRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DomainCategoryService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.DomainCategoryService",
+	HandlerType: (*DomainCategoryServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDomainCategory",
+			Handler:    _DomainCategoryService_GetDomainCategory_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/domain_category_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.pb.go b/googleapis/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.pb.go
new file mode 100644
index 0000000..52a6cb2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.pb.go
@@ -0,0 +1,194 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [DynamicSearchAdsSearchTermViewService.GetDynamicSearchAdsSearchTermView][google.ads.googleads.v3.services.DynamicSearchAdsSearchTermViewService.GetDynamicSearchAdsSearchTermView].
+type GetDynamicSearchAdsSearchTermViewRequest struct {
+	// Required. The resource name of the dynamic search ads search term view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDynamicSearchAdsSearchTermViewRequest) Reset() {
+	*m = GetDynamicSearchAdsSearchTermViewRequest{}
+}
+func (m *GetDynamicSearchAdsSearchTermViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDynamicSearchAdsSearchTermViewRequest) ProtoMessage()    {}
+func (*GetDynamicSearchAdsSearchTermViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c06f8b0bac521385, []int{0}
+}
+
+func (m *GetDynamicSearchAdsSearchTermViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest.Unmarshal(m, b)
+}
+func (m *GetDynamicSearchAdsSearchTermViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDynamicSearchAdsSearchTermViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest.Merge(m, src)
+}
+func (m *GetDynamicSearchAdsSearchTermViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest.Size(m)
+}
+func (m *GetDynamicSearchAdsSearchTermViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDynamicSearchAdsSearchTermViewRequest proto.InternalMessageInfo
+
+func (m *GetDynamicSearchAdsSearchTermViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDynamicSearchAdsSearchTermViewRequest)(nil), "google.ads.googleads.v3.services.GetDynamicSearchAdsSearchTermViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.proto", fileDescriptor_c06f8b0bac521385)
+}
+
+var fileDescriptor_c06f8b0bac521385 = []byte{
+	// 437 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xb1, 0x8b, 0x13, 0x41,
+	0x14, 0xc6, 0xc9, 0x1e, 0x08, 0x2e, 0xda, 0x6c, 0xe3, 0x11, 0x05, 0xe3, 0x71, 0x42, 0x48, 0x31,
+	0x03, 0x6e, 0x37, 0x62, 0x31, 0x51, 0x88, 0x28, 0xc8, 0x91, 0x3b, 0x02, 0x4a, 0x60, 0x99, 0xdb,
+	0x79, 0xee, 0x0d, 0x64, 0x66, 0xe2, 0xbc, 0xc9, 0x1e, 0x22, 0x36, 0xf6, 0x16, 0xe2, 0x7f, 0x60,
+	0xe9, 0x9f, 0x72, 0xad, 0x56, 0x56, 0x16, 0x56, 0xfe, 0x15, 0x47, 0x32, 0x3b, 0xb9, 0xbb, 0x62,
+	0x93, 0x74, 0x1f, 0xf9, 0x3e, 0x7e, 0xef, 0xcb, 0x7b, 0xb3, 0xe9, 0xb8, 0xb2, 0xb6, 0x9a, 0x01,
+	0x15, 0x12, 0x69, 0x90, 0x4b, 0x55, 0xe7, 0x14, 0xc1, 0xd5, 0xaa, 0x04, 0xa4, 0xf2, 0xa3, 0x11,
+	0x5a, 0x95, 0x05, 0x82, 0x70, 0xe5, 0x59, 0x21, 0x24, 0x46, 0xe9, 0xc1, 0xe9, 0xa2, 0x56, 0x70,
+	0x5e, 0x34, 0x61, 0x32, 0x77, 0xd6, 0xdb, 0xac, 0x17, 0x40, 0x44, 0x48, 0x24, 0x6b, 0x26, 0xa9,
+	0x73, 0x12, 0x99, 0xdd, 0xd7, 0x6d, 0x53, 0x1d, 0xa0, 0x5d, 0xb8, 0x1d, 0xc7, 0x86, 0x71, 0xdd,
+	0x07, 0x11, 0x36, 0x57, 0x54, 0x18, 0x63, 0xbd, 0xf0, 0xca, 0x1a, 0x6c, 0xdc, 0x7b, 0xd7, 0xdc,
+	0x72, 0xa6, 0xc0, 0xf8, 0xc6, 0x78, 0x78, 0xcd, 0x78, 0xaf, 0x60, 0x26, 0x8b, 0x53, 0x38, 0x13,
+	0xb5, 0xb2, 0x2e, 0x04, 0x0e, 0x4e, 0xd2, 0xfe, 0x08, 0xfc, 0x8b, 0xd0, 0xe3, 0x78, 0x35, 0x9b,
+	0x4b, 0x0c, 0xe2, 0x04, 0x9c, 0x9e, 0x28, 0x38, 0x1f, 0xc3, 0x87, 0x05, 0xa0, 0xcf, 0xfa, 0xe9,
+	0xdd, 0x58, 0xbd, 0x30, 0x42, 0xc3, 0x7e, 0xa7, 0xd7, 0xe9, 0xdf, 0x1e, 0xee, 0xfd, 0xe5, 0xc9,
+	0xf8, 0x4e, 0x74, 0xde, 0x08, 0x0d, 0x4f, 0x7e, 0x27, 0xe9, 0xe3, 0xcd, 0xcc, 0xe3, 0xb0, 0xa5,
+	0xec, 0x6b, 0x92, 0x3e, 0xda, 0x5a, 0x20, 0x7b, 0x45, 0xb6, 0x6d, 0x9b, 0xec, 0xfa, 0x2f, 0xba,
+	0xbc, 0x95, 0xb5, 0xbe, 0x0b, 0xd9, 0x4c, 0x3a, 0x78, 0xfb, 0x87, 0xdf, 0xdc, 0xc4, 0x97, 0x5f,
+	0xff, 0xbe, 0x27, 0xcf, 0x33, 0xbe, 0xbc, 0xee, 0xa7, 0x1b, 0xce, 0xb3, 0x72, 0x81, 0xde, 0x6a,
+	0x70, 0x48, 0x07, 0xf1, 0xdc, 0x2d, 0x58, 0xa4, 0x83, 0xcf, 0xdd, 0xfb, 0x17, 0x7c, 0xff, 0xaa,
+	0x54, 0xa3, 0xe6, 0x0a, 0x49, 0x69, 0xf5, 0xf0, 0x5b, 0x92, 0x1e, 0x96, 0x56, 0x6f, 0x5d, 0xc6,
+	0x70, 0xb0, 0xd3, 0xf2, 0x8f, 0x96, 0x2f, 0xe0, 0xa8, 0xf3, 0xee, 0x65, 0xc3, 0xab, 0xec, 0x4c,
+	0x98, 0x8a, 0x58, 0x57, 0xd1, 0x0a, 0xcc, 0xea, 0x7d, 0xd0, 0xab, 0x06, 0xed, 0x5f, 0xcf, 0xd3,
+	0x28, 0x7e, 0x24, 0x7b, 0x23, 0xce, 0x7f, 0x26, 0xbd, 0x51, 0x00, 0x72, 0x89, 0x24, 0xc8, 0xa5,
+	0x9a, 0xe4, 0xa4, 0x19, 0x8c, 0x17, 0x31, 0x32, 0xe5, 0x12, 0xa7, 0xeb, 0xc8, 0x74, 0x92, 0x4f,
+	0x63, 0xe4, 0x7f, 0x72, 0x18, 0x7e, 0x67, 0x8c, 0x4b, 0x64, 0x6c, 0x1d, 0x62, 0x6c, 0x92, 0x33,
+	0x16, 0x63, 0xa7, 0xb7, 0x56, 0x3d, 0xf3, 0xcb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, 0xf2, 0x87,
+	0xef, 0xe4, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// DynamicSearchAdsSearchTermViewServiceClient is the client API for DynamicSearchAdsSearchTermViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DynamicSearchAdsSearchTermViewServiceClient interface {
+	// Returns the requested dynamic search ads search term view in full detail.
+	GetDynamicSearchAdsSearchTermView(ctx context.Context, in *GetDynamicSearchAdsSearchTermViewRequest, opts ...grpc.CallOption) (*resources.DynamicSearchAdsSearchTermView, error)
+}
+
+type dynamicSearchAdsSearchTermViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDynamicSearchAdsSearchTermViewServiceClient(cc grpc.ClientConnInterface) DynamicSearchAdsSearchTermViewServiceClient {
+	return &dynamicSearchAdsSearchTermViewServiceClient{cc}
+}
+
+func (c *dynamicSearchAdsSearchTermViewServiceClient) GetDynamicSearchAdsSearchTermView(ctx context.Context, in *GetDynamicSearchAdsSearchTermViewRequest, opts ...grpc.CallOption) (*resources.DynamicSearchAdsSearchTermView, error) {
+	out := new(resources.DynamicSearchAdsSearchTermView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.DynamicSearchAdsSearchTermViewService/GetDynamicSearchAdsSearchTermView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DynamicSearchAdsSearchTermViewServiceServer is the server API for DynamicSearchAdsSearchTermViewService service.
+type DynamicSearchAdsSearchTermViewServiceServer interface {
+	// Returns the requested dynamic search ads search term view in full detail.
+	GetDynamicSearchAdsSearchTermView(context.Context, *GetDynamicSearchAdsSearchTermViewRequest) (*resources.DynamicSearchAdsSearchTermView, error)
+}
+
+// UnimplementedDynamicSearchAdsSearchTermViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedDynamicSearchAdsSearchTermViewServiceServer struct {
+}
+
+func (*UnimplementedDynamicSearchAdsSearchTermViewServiceServer) GetDynamicSearchAdsSearchTermView(ctx context.Context, req *GetDynamicSearchAdsSearchTermViewRequest) (*resources.DynamicSearchAdsSearchTermView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDynamicSearchAdsSearchTermView not implemented")
+}
+
+func RegisterDynamicSearchAdsSearchTermViewServiceServer(s *grpc.Server, srv DynamicSearchAdsSearchTermViewServiceServer) {
+	s.RegisterService(&_DynamicSearchAdsSearchTermViewService_serviceDesc, srv)
+}
+
+func _DynamicSearchAdsSearchTermViewService_GetDynamicSearchAdsSearchTermView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDynamicSearchAdsSearchTermViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DynamicSearchAdsSearchTermViewServiceServer).GetDynamicSearchAdsSearchTermView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.DynamicSearchAdsSearchTermViewService/GetDynamicSearchAdsSearchTermView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DynamicSearchAdsSearchTermViewServiceServer).GetDynamicSearchAdsSearchTermView(ctx, req.(*GetDynamicSearchAdsSearchTermViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DynamicSearchAdsSearchTermViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.DynamicSearchAdsSearchTermViewService",
+	HandlerType: (*DynamicSearchAdsSearchTermViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDynamicSearchAdsSearchTermView",
+			Handler:    _DynamicSearchAdsSearchTermViewService_GetDynamicSearchAdsSearchTermView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/dynamic_search_ads_search_term_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/expanded_landing_page_view_service.pb.go b/googleapis/ads/googleads/v3/services/expanded_landing_page_view_service.pb.go
new file mode 100644
index 0000000..6a22917
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/expanded_landing_page_view_service.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/expanded_landing_page_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [ExpandedLandingPageViewService.GetExpandedLandingPageView][google.ads.googleads.v3.services.ExpandedLandingPageViewService.GetExpandedLandingPageView].
+type GetExpandedLandingPageViewRequest struct {
+	// Required. The resource name of the expanded landing page view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetExpandedLandingPageViewRequest) Reset()         { *m = GetExpandedLandingPageViewRequest{} }
+func (m *GetExpandedLandingPageViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetExpandedLandingPageViewRequest) ProtoMessage()    {}
+func (*GetExpandedLandingPageViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_50015c0516433256, []int{0}
+}
+
+func (m *GetExpandedLandingPageViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetExpandedLandingPageViewRequest.Unmarshal(m, b)
+}
+func (m *GetExpandedLandingPageViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetExpandedLandingPageViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetExpandedLandingPageViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetExpandedLandingPageViewRequest.Merge(m, src)
+}
+func (m *GetExpandedLandingPageViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetExpandedLandingPageViewRequest.Size(m)
+}
+func (m *GetExpandedLandingPageViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetExpandedLandingPageViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetExpandedLandingPageViewRequest proto.InternalMessageInfo
+
+func (m *GetExpandedLandingPageViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetExpandedLandingPageViewRequest)(nil), "google.ads.googleads.v3.services.GetExpandedLandingPageViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/expanded_landing_page_view_service.proto", fileDescriptor_50015c0516433256)
+}
+
+var fileDescriptor_50015c0516433256 = []byte{
+	// 429 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xb1, 0x8b, 0xd4, 0x40,
+	0x14, 0xc6, 0x49, 0x0e, 0x04, 0x83, 0x36, 0x69, 0x3c, 0xa2, 0xe8, 0x7a, 0x5e, 0x71, 0x5c, 0x31,
+	0x03, 0xa6, 0x1b, 0xb5, 0x98, 0x88, 0xac, 0x82, 0xca, 0xb2, 0x42, 0x0a, 0x09, 0x84, 0xb9, 0xcc,
+	0x73, 0x1c, 0x48, 0x66, 0x62, 0x26, 0x9b, 0x13, 0xc4, 0xc6, 0xd2, 0xd6, 0xff, 0xc0, 0xd2, 0xce,
+	0x7f, 0xe3, 0x5a, 0x3b, 0x2b, 0x0b, 0x2b, 0x3b, 0xff, 0x03, 0xc9, 0x4d, 0x26, 0xbb, 0x2b, 0x64,
+	0xb7, 0xfb, 0xd8, 0xef, 0xdb, 0xdf, 0xf7, 0xe6, 0xbd, 0x04, 0xcf, 0x84, 0xd6, 0xa2, 0x04, 0xcc,
+	0xb8, 0xc1, 0x56, 0xf6, 0xaa, 0x8b, 0xb1, 0x81, 0xa6, 0x93, 0x05, 0x18, 0x0c, 0xef, 0x6b, 0xa6,
+	0x38, 0xf0, 0xbc, 0x64, 0x8a, 0x4b, 0x25, 0xf2, 0x9a, 0x09, 0xc8, 0x3b, 0x09, 0xe7, 0xf9, 0x90,
+	0x41, 0x75, 0xa3, 0x5b, 0x1d, 0xce, 0xec, 0xff, 0x11, 0xe3, 0x06, 0x8d, 0x28, 0xd4, 0xc5, 0xc8,
+	0xa1, 0xa2, 0x64, 0xaa, 0xac, 0x01, 0xa3, 0x57, 0xcd, 0xee, 0x36, 0xdb, 0x12, 0xdd, 0x72, 0x8c,
+	0x5a, 0x62, 0xa6, 0x94, 0x6e, 0x59, 0x2b, 0xb5, 0x32, 0x83, 0x7b, 0x63, 0xc3, 0x2d, 0x4a, 0x09,
+	0xaa, 0x1d, 0x8c, 0x3b, 0x1b, 0xc6, 0x1b, 0x09, 0x25, 0xcf, 0xcf, 0xe0, 0x2d, 0xeb, 0xa4, 0x6e,
+	0x6c, 0xe0, 0xe8, 0x45, 0x70, 0x77, 0x0e, 0xed, 0x93, 0xa1, 0xfe, 0xb9, 0x6d, 0x5f, 0x30, 0x01,
+	0xa9, 0x84, 0xf3, 0x25, 0xbc, 0x5b, 0x81, 0x69, 0xc3, 0x93, 0xe0, 0xba, 0x1b, 0x35, 0x57, 0xac,
+	0x82, 0x43, 0x6f, 0xe6, 0x9d, 0x5c, 0x4d, 0x0e, 0x7e, 0x51, 0x7f, 0x79, 0xcd, 0x39, 0x2f, 0x59,
+	0x05, 0xf7, 0xbf, 0xfb, 0xc1, 0xed, 0x09, 0xd8, 0x2b, 0xbb, 0x8e, 0xf0, 0xaf, 0x17, 0x44, 0xd3,
+	0x95, 0xe1, 0x63, 0xb4, 0x6f, 0x9f, 0x68, 0xef, 0xc0, 0x11, 0x99, 0x84, 0x8c, 0x2b, 0x47, 0x13,
+	0x88, 0xa3, 0xe5, 0x4f, 0xba, 0xfd, 0xda, 0x4f, 0x3f, 0x7e, 0x7f, 0xf1, 0x1f, 0x86, 0xa4, 0xbf,
+	0xd8, 0x87, 0x2d, 0xe7, 0x51, 0xb1, 0x32, 0xad, 0xae, 0xa0, 0x31, 0xf8, 0x74, 0x3c, 0xe1, 0x7f,
+	0x3c, 0x83, 0x4f, 0x3f, 0x46, 0x37, 0x2f, 0xe8, 0xe1, 0x7a, 0x8c, 0x41, 0xd5, 0xd2, 0xa0, 0x42,
+	0x57, 0xc9, 0x67, 0x3f, 0x38, 0x2e, 0x74, 0xb5, 0xf7, 0xdd, 0xc9, 0xbd, 0xdd, 0x9b, 0x5d, 0xf4,
+	0x07, 0x5d, 0x78, 0xaf, 0x9f, 0x0e, 0x20, 0xa1, 0x4b, 0xa6, 0x04, 0xd2, 0x8d, 0xc0, 0x02, 0xd4,
+	0xe5, 0xb9, 0xf1, 0xba, 0x7a, 0xfa, 0xd3, 0x7f, 0xe0, 0xc4, 0x57, 0xff, 0x60, 0x4e, 0xe9, 0x37,
+	0x7f, 0x36, 0xb7, 0x40, 0xca, 0x0d, 0xb2, 0xb2, 0x57, 0x69, 0x8c, 0x86, 0x62, 0x73, 0xe1, 0x22,
+	0x19, 0xe5, 0x26, 0x1b, 0x23, 0x59, 0x1a, 0x67, 0x2e, 0xf2, 0xc7, 0x3f, 0xb6, 0xbf, 0x13, 0x42,
+	0xb9, 0x21, 0x64, 0x0c, 0x11, 0x92, 0xc6, 0x84, 0xb8, 0xd8, 0xd9, 0x95, 0xcb, 0x39, 0xe3, 0x7f,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0x85, 0x54, 0xcc, 0x3d, 0xa1, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ExpandedLandingPageViewServiceClient is the client API for ExpandedLandingPageViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ExpandedLandingPageViewServiceClient interface {
+	// Returns the requested expanded landing page view in full detail.
+	GetExpandedLandingPageView(ctx context.Context, in *GetExpandedLandingPageViewRequest, opts ...grpc.CallOption) (*resources.ExpandedLandingPageView, error)
+}
+
+type expandedLandingPageViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewExpandedLandingPageViewServiceClient(cc grpc.ClientConnInterface) ExpandedLandingPageViewServiceClient {
+	return &expandedLandingPageViewServiceClient{cc}
+}
+
+func (c *expandedLandingPageViewServiceClient) GetExpandedLandingPageView(ctx context.Context, in *GetExpandedLandingPageViewRequest, opts ...grpc.CallOption) (*resources.ExpandedLandingPageView, error) {
+	out := new(resources.ExpandedLandingPageView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ExpandedLandingPageViewService/GetExpandedLandingPageView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ExpandedLandingPageViewServiceServer is the server API for ExpandedLandingPageViewService service.
+type ExpandedLandingPageViewServiceServer interface {
+	// Returns the requested expanded landing page view in full detail.
+	GetExpandedLandingPageView(context.Context, *GetExpandedLandingPageViewRequest) (*resources.ExpandedLandingPageView, error)
+}
+
+// UnimplementedExpandedLandingPageViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedExpandedLandingPageViewServiceServer struct {
+}
+
+func (*UnimplementedExpandedLandingPageViewServiceServer) GetExpandedLandingPageView(ctx context.Context, req *GetExpandedLandingPageViewRequest) (*resources.ExpandedLandingPageView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetExpandedLandingPageView not implemented")
+}
+
+func RegisterExpandedLandingPageViewServiceServer(s *grpc.Server, srv ExpandedLandingPageViewServiceServer) {
+	s.RegisterService(&_ExpandedLandingPageViewService_serviceDesc, srv)
+}
+
+func _ExpandedLandingPageViewService_GetExpandedLandingPageView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetExpandedLandingPageViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ExpandedLandingPageViewServiceServer).GetExpandedLandingPageView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ExpandedLandingPageViewService/GetExpandedLandingPageView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ExpandedLandingPageViewServiceServer).GetExpandedLandingPageView(ctx, req.(*GetExpandedLandingPageViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ExpandedLandingPageViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ExpandedLandingPageViewService",
+	HandlerType: (*ExpandedLandingPageViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetExpandedLandingPageView",
+			Handler:    _ExpandedLandingPageViewService_GetExpandedLandingPageView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/expanded_landing_page_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/extension_feed_item_service.pb.go b/googleapis/ads/googleads/v3/services/extension_feed_item_service.pb.go
new file mode 100644
index 0000000..aee18fc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/extension_feed_item_service.pb.go
@@ -0,0 +1,532 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/extension_feed_item_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ExtensionFeedItemService.GetExtensionFeedItem][google.ads.googleads.v3.services.ExtensionFeedItemService.GetExtensionFeedItem].
+type GetExtensionFeedItemRequest struct {
+	// Required. The resource name of the extension feed item to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetExtensionFeedItemRequest) Reset()         { *m = GetExtensionFeedItemRequest{} }
+func (m *GetExtensionFeedItemRequest) String() string { return proto.CompactTextString(m) }
+func (*GetExtensionFeedItemRequest) ProtoMessage()    {}
+func (*GetExtensionFeedItemRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_67cac715d7a110a8, []int{0}
+}
+
+func (m *GetExtensionFeedItemRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetExtensionFeedItemRequest.Unmarshal(m, b)
+}
+func (m *GetExtensionFeedItemRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetExtensionFeedItemRequest.Marshal(b, m, deterministic)
+}
+func (m *GetExtensionFeedItemRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetExtensionFeedItemRequest.Merge(m, src)
+}
+func (m *GetExtensionFeedItemRequest) XXX_Size() int {
+	return xxx_messageInfo_GetExtensionFeedItemRequest.Size(m)
+}
+func (m *GetExtensionFeedItemRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetExtensionFeedItemRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetExtensionFeedItemRequest proto.InternalMessageInfo
+
+func (m *GetExtensionFeedItemRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [ExtensionFeedItemService.MutateExtensionFeedItems][google.ads.googleads.v3.services.ExtensionFeedItemService.MutateExtensionFeedItems].
+type MutateExtensionFeedItemsRequest struct {
+	// Required. The ID of the customer whose extension feed items are being
+	// modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual extension feed items.
+	Operations []*ExtensionFeedItemOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateExtensionFeedItemsRequest) Reset()         { *m = MutateExtensionFeedItemsRequest{} }
+func (m *MutateExtensionFeedItemsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateExtensionFeedItemsRequest) ProtoMessage()    {}
+func (*MutateExtensionFeedItemsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_67cac715d7a110a8, []int{1}
+}
+
+func (m *MutateExtensionFeedItemsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateExtensionFeedItemsRequest.Unmarshal(m, b)
+}
+func (m *MutateExtensionFeedItemsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateExtensionFeedItemsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateExtensionFeedItemsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateExtensionFeedItemsRequest.Merge(m, src)
+}
+func (m *MutateExtensionFeedItemsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateExtensionFeedItemsRequest.Size(m)
+}
+func (m *MutateExtensionFeedItemsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateExtensionFeedItemsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateExtensionFeedItemsRequest proto.InternalMessageInfo
+
+func (m *MutateExtensionFeedItemsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateExtensionFeedItemsRequest) GetOperations() []*ExtensionFeedItemOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateExtensionFeedItemsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateExtensionFeedItemsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an extension feed item.
+type ExtensionFeedItemOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*ExtensionFeedItemOperation_Create
+	//	*ExtensionFeedItemOperation_Update
+	//	*ExtensionFeedItemOperation_Remove
+	Operation            isExtensionFeedItemOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *ExtensionFeedItemOperation) Reset()         { *m = ExtensionFeedItemOperation{} }
+func (m *ExtensionFeedItemOperation) String() string { return proto.CompactTextString(m) }
+func (*ExtensionFeedItemOperation) ProtoMessage()    {}
+func (*ExtensionFeedItemOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_67cac715d7a110a8, []int{2}
+}
+
+func (m *ExtensionFeedItemOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionFeedItemOperation.Unmarshal(m, b)
+}
+func (m *ExtensionFeedItemOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionFeedItemOperation.Marshal(b, m, deterministic)
+}
+func (m *ExtensionFeedItemOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionFeedItemOperation.Merge(m, src)
+}
+func (m *ExtensionFeedItemOperation) XXX_Size() int {
+	return xxx_messageInfo_ExtensionFeedItemOperation.Size(m)
+}
+func (m *ExtensionFeedItemOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionFeedItemOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionFeedItemOperation proto.InternalMessageInfo
+
+func (m *ExtensionFeedItemOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isExtensionFeedItemOperation_Operation interface {
+	isExtensionFeedItemOperation_Operation()
+}
+
+type ExtensionFeedItemOperation_Create struct {
+	Create *resources.ExtensionFeedItem `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type ExtensionFeedItemOperation_Update struct {
+	Update *resources.ExtensionFeedItem `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type ExtensionFeedItemOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*ExtensionFeedItemOperation_Create) isExtensionFeedItemOperation_Operation() {}
+
+func (*ExtensionFeedItemOperation_Update) isExtensionFeedItemOperation_Operation() {}
+
+func (*ExtensionFeedItemOperation_Remove) isExtensionFeedItemOperation_Operation() {}
+
+func (m *ExtensionFeedItemOperation) GetOperation() isExtensionFeedItemOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItemOperation) GetCreate() *resources.ExtensionFeedItem {
+	if x, ok := m.GetOperation().(*ExtensionFeedItemOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItemOperation) GetUpdate() *resources.ExtensionFeedItem {
+	if x, ok := m.GetOperation().(*ExtensionFeedItemOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *ExtensionFeedItemOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*ExtensionFeedItemOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ExtensionFeedItemOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ExtensionFeedItemOperation_Create)(nil),
+		(*ExtensionFeedItemOperation_Update)(nil),
+		(*ExtensionFeedItemOperation_Remove)(nil),
+	}
+}
+
+// Response message for an extension feed item mutate.
+type MutateExtensionFeedItemsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateExtensionFeedItemResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateExtensionFeedItemsResponse) Reset()         { *m = MutateExtensionFeedItemsResponse{} }
+func (m *MutateExtensionFeedItemsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateExtensionFeedItemsResponse) ProtoMessage()    {}
+func (*MutateExtensionFeedItemsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_67cac715d7a110a8, []int{3}
+}
+
+func (m *MutateExtensionFeedItemsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateExtensionFeedItemsResponse.Unmarshal(m, b)
+}
+func (m *MutateExtensionFeedItemsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateExtensionFeedItemsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateExtensionFeedItemsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateExtensionFeedItemsResponse.Merge(m, src)
+}
+func (m *MutateExtensionFeedItemsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateExtensionFeedItemsResponse.Size(m)
+}
+func (m *MutateExtensionFeedItemsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateExtensionFeedItemsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateExtensionFeedItemsResponse proto.InternalMessageInfo
+
+func (m *MutateExtensionFeedItemsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateExtensionFeedItemsResponse) GetResults() []*MutateExtensionFeedItemResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the extension feed item mutate.
+type MutateExtensionFeedItemResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateExtensionFeedItemResult) Reset()         { *m = MutateExtensionFeedItemResult{} }
+func (m *MutateExtensionFeedItemResult) String() string { return proto.CompactTextString(m) }
+func (*MutateExtensionFeedItemResult) ProtoMessage()    {}
+func (*MutateExtensionFeedItemResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_67cac715d7a110a8, []int{4}
+}
+
+func (m *MutateExtensionFeedItemResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateExtensionFeedItemResult.Unmarshal(m, b)
+}
+func (m *MutateExtensionFeedItemResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateExtensionFeedItemResult.Marshal(b, m, deterministic)
+}
+func (m *MutateExtensionFeedItemResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateExtensionFeedItemResult.Merge(m, src)
+}
+func (m *MutateExtensionFeedItemResult) XXX_Size() int {
+	return xxx_messageInfo_MutateExtensionFeedItemResult.Size(m)
+}
+func (m *MutateExtensionFeedItemResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateExtensionFeedItemResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateExtensionFeedItemResult proto.InternalMessageInfo
+
+func (m *MutateExtensionFeedItemResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetExtensionFeedItemRequest)(nil), "google.ads.googleads.v3.services.GetExtensionFeedItemRequest")
+	proto.RegisterType((*MutateExtensionFeedItemsRequest)(nil), "google.ads.googleads.v3.services.MutateExtensionFeedItemsRequest")
+	proto.RegisterType((*ExtensionFeedItemOperation)(nil), "google.ads.googleads.v3.services.ExtensionFeedItemOperation")
+	proto.RegisterType((*MutateExtensionFeedItemsResponse)(nil), "google.ads.googleads.v3.services.MutateExtensionFeedItemsResponse")
+	proto.RegisterType((*MutateExtensionFeedItemResult)(nil), "google.ads.googleads.v3.services.MutateExtensionFeedItemResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/extension_feed_item_service.proto", fileDescriptor_67cac715d7a110a8)
+}
+
+var fileDescriptor_67cac715d7a110a8 = []byte{
+	// 775 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcd, 0x6a, 0xeb, 0x46,
+	0x14, 0xc7, 0x2b, 0x39, 0xa4, 0xcd, 0x38, 0x69, 0x61, 0xfa, 0x25, 0x9c, 0x86, 0x18, 0x35, 0x50,
+	0x63, 0x8a, 0x04, 0x76, 0x68, 0x41, 0x49, 0x28, 0x32, 0x8d, 0x9d, 0x40, 0xf3, 0x81, 0x02, 0x81,
+	0xb6, 0x06, 0x31, 0x91, 0xc6, 0xae, 0x88, 0xa4, 0x51, 0x67, 0x46, 0xa6, 0x21, 0x64, 0x53, 0xfa,
+	0x06, 0xed, 0x03, 0x94, 0x2e, 0xfb, 0x1e, 0xdd, 0x64, 0xdb, 0xd5, 0xcd, 0xea, 0x2e, 0xee, 0xea,
+	0x3e, 0xc1, 0x5d, 0x5d, 0x2e, 0xd2, 0x68, 0xfc, 0x11, 0x47, 0x31, 0x24, 0xbb, 0xe3, 0x39, 0x7f,
+	0xfd, 0xce, 0x39, 0x73, 0xce, 0x1c, 0x83, 0xce, 0x90, 0x90, 0x61, 0x88, 0x4d, 0xe4, 0x33, 0x53,
+	0x98, 0x99, 0x35, 0x6a, 0x9b, 0x0c, 0xd3, 0x51, 0xe0, 0x61, 0x66, 0xe2, 0xdf, 0x38, 0x8e, 0x59,
+	0x40, 0x62, 0x77, 0x80, 0xb1, 0xef, 0x06, 0x1c, 0x47, 0x6e, 0xe1, 0x34, 0x12, 0x4a, 0x38, 0x81,
+	0x75, 0xf1, 0xa1, 0x81, 0x7c, 0x66, 0x8c, 0x19, 0xc6, 0xa8, 0x6d, 0x48, 0x46, 0x6d, 0xa7, 0x2c,
+	0x0a, 0xc5, 0x8c, 0xa4, 0xb4, 0x24, 0x8c, 0xc0, 0xd7, 0xbe, 0x90, 0x1f, 0x27, 0x81, 0x89, 0xe2,
+	0x98, 0x70, 0xc4, 0x03, 0x12, 0xb3, 0xc2, 0xfb, 0xf9, 0x94, 0xd7, 0x0b, 0x03, 0x1c, 0xf3, 0xc2,
+	0xb1, 0x39, 0xe5, 0x18, 0x04, 0x38, 0xf4, 0xdd, 0x0b, 0xfc, 0x0b, 0x1a, 0x05, 0x84, 0x16, 0x82,
+	0x22, 0x6d, 0x33, 0xff, 0x75, 0x91, 0x0e, 0x0a, 0x55, 0x84, 0xd8, 0xe5, 0x3d, 0x36, 0x4d, 0x3c,
+	0x93, 0x71, 0xc4, 0xd3, 0x22, 0xa8, 0xde, 0x03, 0xeb, 0x3d, 0xcc, 0xf7, 0x65, 0xca, 0x5d, 0x8c,
+	0xfd, 0x43, 0x8e, 0x23, 0x07, 0xff, 0x9a, 0x62, 0xc6, 0x61, 0x03, 0xac, 0xc9, 0xc2, 0xdc, 0x18,
+	0x45, 0x58, 0x53, 0xea, 0x4a, 0x63, 0xa5, 0x53, 0x79, 0x69, 0xab, 0xce, 0xaa, 0xf4, 0x1c, 0xa3,
+	0x08, 0xeb, 0x6f, 0x14, 0xb0, 0x79, 0x94, 0x72, 0xc4, 0xf1, 0x1c, 0x8c, 0x49, 0xda, 0x16, 0xa8,
+	0x7a, 0x29, 0xe3, 0x24, 0xc2, 0xd4, 0x0d, 0xfc, 0x69, 0x16, 0x90, 0xe7, 0x87, 0x3e, 0x44, 0x00,
+	0x90, 0x04, 0x53, 0x71, 0x37, 0x9a, 0x5a, 0xaf, 0x34, 0xaa, 0xad, 0x5d, 0x63, 0x51, 0x67, 0x8c,
+	0xb9, 0xb0, 0x27, 0x12, 0x52, 0x84, 0x98, 0x40, 0xe1, 0x57, 0xe0, 0xa3, 0x04, 0x51, 0x1e, 0xa0,
+	0xd0, 0x1d, 0xa0, 0x20, 0x4c, 0x29, 0xd6, 0x2a, 0x75, 0xa5, 0xf1, 0x81, 0xf3, 0x61, 0x71, 0xdc,
+	0x15, 0xa7, 0xf0, 0x4b, 0xb0, 0x36, 0x42, 0x61, 0xe0, 0x23, 0x8e, 0x5d, 0x12, 0x87, 0x57, 0xda,
+	0x52, 0x2e, 0x5b, 0x95, 0x87, 0x27, 0x71, 0x78, 0xa5, 0xff, 0xad, 0x82, 0x5a, 0x79, 0x74, 0xb8,
+	0x03, 0xaa, 0x69, 0x92, 0x13, 0xb2, 0x86, 0xe4, 0x84, 0x6a, 0xab, 0x26, 0x0b, 0x92, 0x3d, 0x33,
+	0xba, 0x59, 0xcf, 0x8e, 0x10, 0xbb, 0x74, 0x80, 0x90, 0x67, 0x36, 0x3c, 0x06, 0xcb, 0x1e, 0xc5,
+	0x88, 0x8b, 0x9b, 0xaf, 0xb6, 0xb6, 0x4b, 0x2f, 0x62, 0x3c, 0x80, 0xf3, 0x37, 0x71, 0xf0, 0x9e,
+	0x53, 0x50, 0x32, 0x9e, 0xa0, 0x6b, 0xea, 0xf3, 0x78, 0x82, 0x02, 0x35, 0xb0, 0x4c, 0x71, 0x44,
+	0x46, 0xe2, 0x02, 0x57, 0x32, 0x8f, 0xf8, 0xdd, 0xa9, 0x82, 0x95, 0xf1, 0x8d, 0xeb, 0xff, 0x29,
+	0xa0, 0x5e, 0x3e, 0x1d, 0x2c, 0x21, 0x31, 0xc3, 0xb0, 0x0b, 0x3e, 0xbd, 0xd7, 0x15, 0x17, 0x53,
+	0x4a, 0x68, 0x8e, 0xae, 0xb6, 0xa0, 0x4c, 0x95, 0x26, 0x9e, 0x71, 0x96, 0x0f, 0xb1, 0xf3, 0xf1,
+	0x6c, 0xbf, 0xf6, 0x33, 0x39, 0xfc, 0x11, 0xbc, 0x4f, 0x31, 0x4b, 0x43, 0x2e, 0xa7, 0xe7, 0xbb,
+	0xc5, 0xd3, 0x53, 0x92, 0x9c, 0x93, 0x73, 0x1c, 0xc9, 0xd3, 0xbf, 0x07, 0x1b, 0x8f, 0x2a, 0xb3,
+	0x81, 0x79, 0xe0, 0xc1, 0xcc, 0xbe, 0x95, 0xd6, 0x5f, 0x4b, 0x40, 0x9b, 0x03, 0x9c, 0x89, 0x54,
+	0xe0, 0x0b, 0x05, 0x7c, 0xf2, 0xd0, 0x93, 0x84, 0x7b, 0x8b, 0xab, 0x78, 0xe4, 0x29, 0xd7, 0x9e,
+	0xd4, 0x69, 0xfd, 0x87, 0x3b, 0x7b, 0xb6, 0xa0, 0xdf, 0xff, 0x7f, 0xf5, 0xa7, 0xfa, 0x0d, 0xdc,
+	0xce, 0x76, 0xde, 0xf5, 0x8c, 0x67, 0x4f, 0xbe, 0x61, 0x66, 0x36, 0x27, 0x4b, 0x70, 0xdc, 0x66,
+	0xb3, 0x79, 0x03, 0xdf, 0x2a, 0x40, 0x2b, 0x1b, 0x03, 0x68, 0x3f, 0xb9, 0x4b, 0x72, 0xc1, 0xd4,
+	0x3a, 0xcf, 0x41, 0x88, 0x29, 0xd4, 0x7f, 0xbe, 0xb3, 0x3f, 0x9b, 0xda, 0x52, 0x5f, 0x4f, 0xd6,
+	0x46, 0x5e, 0xfa, 0xae, 0xfe, 0x6d, 0x56, 0xfa, 0xa4, 0xd6, 0xeb, 0x29, 0xf1, 0x5e, 0xf3, 0xe6,
+	0x81, 0xca, 0xad, 0x28, 0x8f, 0x69, 0x29, 0xcd, 0xda, 0xfa, 0xad, 0xad, 0x4d, 0xf2, 0x2a, 0xac,
+	0x24, 0x60, 0x86, 0x47, 0xa2, 0xce, 0x1f, 0x2a, 0xd8, 0xf2, 0x48, 0xb4, 0xb0, 0x86, 0xce, 0x46,
+	0xd9, 0xf0, 0x9c, 0x66, 0xcb, 0xe4, 0x54, 0xf9, 0xe9, 0xa0, 0x40, 0x0c, 0x49, 0x88, 0xe2, 0xa1,
+	0x41, 0xe8, 0xd0, 0x1c, 0xe2, 0x38, 0x5f, 0x35, 0xe6, 0x24, 0x68, 0xf9, 0x5f, 0xe5, 0x8e, 0x34,
+	0xfe, 0x51, 0x2b, 0x3d, 0xdb, 0xfe, 0x57, 0xad, 0xf7, 0x04, 0xd0, 0xf6, 0x99, 0x21, 0xcc, 0xcc,
+	0x3a, 0x6f, 0x1b, 0x45, 0x60, 0x76, 0x2b, 0x25, 0x7d, 0xdb, 0x67, 0xfd, 0xb1, 0xa4, 0x7f, 0xde,
+	0xee, 0x4b, 0xc9, 0x6b, 0x75, 0x4b, 0x9c, 0x5b, 0x96, 0xed, 0x33, 0xcb, 0x1a, 0x8b, 0x2c, 0xeb,
+	0xbc, 0x6d, 0x59, 0x52, 0x76, 0xb1, 0x9c, 0xe7, 0xd9, 0x7e, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb3,
+	0x40, 0x12, 0x4d, 0xd1, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ExtensionFeedItemServiceClient is the client API for ExtensionFeedItemService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ExtensionFeedItemServiceClient interface {
+	// Returns the requested extension feed item in full detail.
+	GetExtensionFeedItem(ctx context.Context, in *GetExtensionFeedItemRequest, opts ...grpc.CallOption) (*resources.ExtensionFeedItem, error)
+	// Creates, updates, or removes extension feed items. Operation
+	// statuses are returned.
+	MutateExtensionFeedItems(ctx context.Context, in *MutateExtensionFeedItemsRequest, opts ...grpc.CallOption) (*MutateExtensionFeedItemsResponse, error)
+}
+
+type extensionFeedItemServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewExtensionFeedItemServiceClient(cc grpc.ClientConnInterface) ExtensionFeedItemServiceClient {
+	return &extensionFeedItemServiceClient{cc}
+}
+
+func (c *extensionFeedItemServiceClient) GetExtensionFeedItem(ctx context.Context, in *GetExtensionFeedItemRequest, opts ...grpc.CallOption) (*resources.ExtensionFeedItem, error) {
+	out := new(resources.ExtensionFeedItem)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ExtensionFeedItemService/GetExtensionFeedItem", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *extensionFeedItemServiceClient) MutateExtensionFeedItems(ctx context.Context, in *MutateExtensionFeedItemsRequest, opts ...grpc.CallOption) (*MutateExtensionFeedItemsResponse, error) {
+	out := new(MutateExtensionFeedItemsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ExtensionFeedItemService/MutateExtensionFeedItems", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ExtensionFeedItemServiceServer is the server API for ExtensionFeedItemService service.
+type ExtensionFeedItemServiceServer interface {
+	// Returns the requested extension feed item in full detail.
+	GetExtensionFeedItem(context.Context, *GetExtensionFeedItemRequest) (*resources.ExtensionFeedItem, error)
+	// Creates, updates, or removes extension feed items. Operation
+	// statuses are returned.
+	MutateExtensionFeedItems(context.Context, *MutateExtensionFeedItemsRequest) (*MutateExtensionFeedItemsResponse, error)
+}
+
+// UnimplementedExtensionFeedItemServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedExtensionFeedItemServiceServer struct {
+}
+
+func (*UnimplementedExtensionFeedItemServiceServer) GetExtensionFeedItem(ctx context.Context, req *GetExtensionFeedItemRequest) (*resources.ExtensionFeedItem, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetExtensionFeedItem not implemented")
+}
+func (*UnimplementedExtensionFeedItemServiceServer) MutateExtensionFeedItems(ctx context.Context, req *MutateExtensionFeedItemsRequest) (*MutateExtensionFeedItemsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateExtensionFeedItems not implemented")
+}
+
+func RegisterExtensionFeedItemServiceServer(s *grpc.Server, srv ExtensionFeedItemServiceServer) {
+	s.RegisterService(&_ExtensionFeedItemService_serviceDesc, srv)
+}
+
+func _ExtensionFeedItemService_GetExtensionFeedItem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetExtensionFeedItemRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ExtensionFeedItemServiceServer).GetExtensionFeedItem(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ExtensionFeedItemService/GetExtensionFeedItem",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ExtensionFeedItemServiceServer).GetExtensionFeedItem(ctx, req.(*GetExtensionFeedItemRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ExtensionFeedItemService_MutateExtensionFeedItems_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateExtensionFeedItemsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ExtensionFeedItemServiceServer).MutateExtensionFeedItems(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ExtensionFeedItemService/MutateExtensionFeedItems",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ExtensionFeedItemServiceServer).MutateExtensionFeedItems(ctx, req.(*MutateExtensionFeedItemsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ExtensionFeedItemService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ExtensionFeedItemService",
+	HandlerType: (*ExtensionFeedItemServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetExtensionFeedItem",
+			Handler:    _ExtensionFeedItemService_GetExtensionFeedItem_Handler,
+		},
+		{
+			MethodName: "MutateExtensionFeedItems",
+			Handler:    _ExtensionFeedItemService_MutateExtensionFeedItems_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/extension_feed_item_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/feed_item_service.pb.go b/googleapis/ads/googleads/v3/services/feed_item_service.pb.go
new file mode 100644
index 0000000..99bd21a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/feed_item_service.pb.go
@@ -0,0 +1,530 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/feed_item_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [FeedItemService.GetFeedItem][google.ads.googleads.v3.services.FeedItemService.GetFeedItem].
+type GetFeedItemRequest struct {
+	// Required. The resource name of the feed item to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedItemRequest) Reset()         { *m = GetFeedItemRequest{} }
+func (m *GetFeedItemRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedItemRequest) ProtoMessage()    {}
+func (*GetFeedItemRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a2fe5829c243597, []int{0}
+}
+
+func (m *GetFeedItemRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedItemRequest.Unmarshal(m, b)
+}
+func (m *GetFeedItemRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedItemRequest.Marshal(b, m, deterministic)
+}
+func (m *GetFeedItemRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedItemRequest.Merge(m, src)
+}
+func (m *GetFeedItemRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedItemRequest.Size(m)
+}
+func (m *GetFeedItemRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedItemRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedItemRequest proto.InternalMessageInfo
+
+func (m *GetFeedItemRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedItemService.MutateFeedItems][google.ads.googleads.v3.services.FeedItemService.MutateFeedItems].
+type MutateFeedItemsRequest struct {
+	// Required. The ID of the customer whose feed items are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual feed items.
+	Operations []*FeedItemOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedItemsRequest) Reset()         { *m = MutateFeedItemsRequest{} }
+func (m *MutateFeedItemsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemsRequest) ProtoMessage()    {}
+func (*MutateFeedItemsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a2fe5829c243597, []int{1}
+}
+
+func (m *MutateFeedItemsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedItemsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemsRequest.Merge(m, src)
+}
+func (m *MutateFeedItemsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemsRequest.Size(m)
+}
+func (m *MutateFeedItemsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedItemsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedItemsRequest) GetOperations() []*FeedItemOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateFeedItemsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateFeedItemsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an feed item.
+type FeedItemOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedItemOperation_Create
+	//	*FeedItemOperation_Update
+	//	*FeedItemOperation_Remove
+	Operation            isFeedItemOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *FeedItemOperation) Reset()         { *m = FeedItemOperation{} }
+func (m *FeedItemOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedItemOperation) ProtoMessage()    {}
+func (*FeedItemOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a2fe5829c243597, []int{2}
+}
+
+func (m *FeedItemOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemOperation.Unmarshal(m, b)
+}
+func (m *FeedItemOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemOperation.Marshal(b, m, deterministic)
+}
+func (m *FeedItemOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemOperation.Merge(m, src)
+}
+func (m *FeedItemOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedItemOperation.Size(m)
+}
+func (m *FeedItemOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemOperation proto.InternalMessageInfo
+
+func (m *FeedItemOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isFeedItemOperation_Operation interface {
+	isFeedItemOperation_Operation()
+}
+
+type FeedItemOperation_Create struct {
+	Create *resources.FeedItem `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedItemOperation_Update struct {
+	Update *resources.FeedItem `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type FeedItemOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedItemOperation_Create) isFeedItemOperation_Operation() {}
+
+func (*FeedItemOperation_Update) isFeedItemOperation_Operation() {}
+
+func (*FeedItemOperation_Remove) isFeedItemOperation_Operation() {}
+
+func (m *FeedItemOperation) GetOperation() isFeedItemOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetCreate() *resources.FeedItem {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetUpdate() *resources.FeedItem {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedItemOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedItemOperation_Create)(nil),
+		(*FeedItemOperation_Update)(nil),
+		(*FeedItemOperation_Remove)(nil),
+	}
+}
+
+// Response message for an feed item mutate.
+type MutateFeedItemsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateFeedItemResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateFeedItemsResponse) Reset()         { *m = MutateFeedItemsResponse{} }
+func (m *MutateFeedItemsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemsResponse) ProtoMessage()    {}
+func (*MutateFeedItemsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a2fe5829c243597, []int{3}
+}
+
+func (m *MutateFeedItemsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedItemsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemsResponse.Merge(m, src)
+}
+func (m *MutateFeedItemsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemsResponse.Size(m)
+}
+func (m *MutateFeedItemsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedItemsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateFeedItemsResponse) GetResults() []*MutateFeedItemResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed item mutate.
+type MutateFeedItemResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedItemResult) Reset()         { *m = MutateFeedItemResult{} }
+func (m *MutateFeedItemResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemResult) ProtoMessage()    {}
+func (*MutateFeedItemResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1a2fe5829c243597, []int{4}
+}
+
+func (m *MutateFeedItemResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemResult.Unmarshal(m, b)
+}
+func (m *MutateFeedItemResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemResult.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemResult.Merge(m, src)
+}
+func (m *MutateFeedItemResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemResult.Size(m)
+}
+func (m *MutateFeedItemResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemResult proto.InternalMessageInfo
+
+func (m *MutateFeedItemResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedItemRequest)(nil), "google.ads.googleads.v3.services.GetFeedItemRequest")
+	proto.RegisterType((*MutateFeedItemsRequest)(nil), "google.ads.googleads.v3.services.MutateFeedItemsRequest")
+	proto.RegisterType((*FeedItemOperation)(nil), "google.ads.googleads.v3.services.FeedItemOperation")
+	proto.RegisterType((*MutateFeedItemsResponse)(nil), "google.ads.googleads.v3.services.MutateFeedItemsResponse")
+	proto.RegisterType((*MutateFeedItemResult)(nil), "google.ads.googleads.v3.services.MutateFeedItemResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/feed_item_service.proto", fileDescriptor_1a2fe5829c243597)
+}
+
+var fileDescriptor_1a2fe5829c243597 = []byte{
+	// 759 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6b, 0xdc, 0x46,
+	0x18, 0xae, 0xb4, 0xc5, 0xad, 0x47, 0x76, 0x4d, 0xa7, 0xae, 0xbd, 0x6c, 0x0b, 0x5d, 0x54, 0x43,
+	0x97, 0x75, 0x2b, 0xd1, 0x55, 0x29, 0x8e, 0x8c, 0x03, 0xda, 0xe0, 0xb5, 0x7d, 0x70, 0x6c, 0x64,
+	0x30, 0x21, 0x2c, 0x88, 0xb1, 0x34, 0xbb, 0x11, 0x96, 0x34, 0xca, 0xcc, 0x68, 0xc1, 0x18, 0x5f,
+	0x02, 0xf9, 0x05, 0xf9, 0x07, 0x39, 0xe6, 0x1a, 0xf2, 0x0b, 0x72, 0xf3, 0x35, 0x37, 0x9f, 0x72,
+	0x08, 0x39, 0xe4, 0x2f, 0xe4, 0x12, 0xa4, 0xd1, 0xec, 0x97, 0x6d, 0x16, 0xfb, 0xf6, 0xee, 0xbc,
+	0xcf, 0xf3, 0xbc, 0xdf, 0x5a, 0xb0, 0xd1, 0x27, 0xa4, 0x1f, 0x61, 0x13, 0x05, 0xcc, 0x14, 0x66,
+	0x6e, 0x0d, 0x2c, 0x93, 0x61, 0x3a, 0x08, 0x7d, 0xcc, 0xcc, 0x1e, 0xc6, 0x81, 0x17, 0x72, 0x1c,
+	0x7b, 0xe5, 0x93, 0x91, 0x52, 0xc2, 0x09, 0xac, 0x0b, 0xb8, 0x81, 0x02, 0x66, 0x0c, 0x99, 0xc6,
+	0xc0, 0x32, 0x24, 0xb3, 0xf6, 0xef, 0x6d, 0xda, 0x14, 0x33, 0x92, 0xd1, 0x09, 0x71, 0x21, 0x5a,
+	0xfb, 0x5d, 0x52, 0xd2, 0xd0, 0x44, 0x49, 0x42, 0x38, 0xe2, 0x21, 0x49, 0x58, 0xe9, 0x5d, 0x1d,
+	0xf3, 0xfa, 0x51, 0x88, 0x13, 0x5e, 0x3a, 0xfe, 0x18, 0x73, 0xf4, 0x42, 0x1c, 0x05, 0xde, 0x09,
+	0x7e, 0x86, 0x06, 0x21, 0xa1, 0x25, 0xa0, 0x4c, 0xd6, 0x2c, 0x7e, 0x9d, 0x64, 0xbd, 0x12, 0x15,
+	0x23, 0x76, 0x3a, 0xa5, 0x4d, 0x53, 0xdf, 0x64, 0x1c, 0xf1, 0xac, 0x0c, 0xaa, 0x3f, 0x04, 0x70,
+	0x07, 0xf3, 0x0e, 0xc6, 0xc1, 0x1e, 0xc7, 0xb1, 0x8b, 0x9f, 0x67, 0x98, 0x71, 0xd8, 0x00, 0x8b,
+	0xb2, 0x0a, 0x2f, 0x41, 0x31, 0xae, 0x2a, 0x75, 0xa5, 0x31, 0xdf, 0xae, 0x7c, 0x74, 0x54, 0x77,
+	0x41, 0x7a, 0x1e, 0xa3, 0x18, 0xeb, 0x9f, 0x15, 0xb0, 0xb2, 0x9f, 0x71, 0xc4, 0xb1, 0xd4, 0x60,
+	0x52, 0x64, 0x0d, 0x68, 0x7e, 0xc6, 0x38, 0x89, 0x31, 0xf5, 0xc2, 0x60, 0x5c, 0x02, 0xc8, 0xf7,
+	0xbd, 0x00, 0x3e, 0x01, 0x80, 0xa4, 0x98, 0x8a, 0x4e, 0x54, 0xd5, 0x7a, 0xa5, 0xa1, 0xb5, 0x2c,
+	0x63, 0x56, 0xf7, 0x0d, 0x19, 0xed, 0x40, 0x72, 0x4b, 0xe5, 0x91, 0x16, 0xfc, 0x0b, 0x2c, 0xa5,
+	0x88, 0xf2, 0x10, 0x45, 0x5e, 0x0f, 0x85, 0x51, 0x46, 0x71, 0xb5, 0x52, 0x57, 0x1a, 0x3f, 0xba,
+	0x3f, 0x95, 0xcf, 0x1d, 0xf1, 0x0a, 0xff, 0x04, 0x8b, 0x03, 0x14, 0x85, 0x01, 0xe2, 0xd8, 0x23,
+	0x49, 0x74, 0x56, 0xfd, 0xbe, 0x80, 0x2d, 0xc8, 0xc7, 0x83, 0x24, 0x3a, 0xd3, 0x5f, 0xaa, 0xe0,
+	0xe7, 0x6b, 0x41, 0xe1, 0x26, 0xd0, 0xb2, 0xb4, 0x20, 0xe6, 0xcd, 0x2e, 0x88, 0x5a, 0xab, 0x26,
+	0xd3, 0x97, 0xf3, 0x30, 0x3a, 0xf9, 0x3c, 0xf6, 0x11, 0x3b, 0x75, 0x81, 0x80, 0xe7, 0x36, 0xdc,
+	0x06, 0x73, 0x3e, 0xc5, 0x88, 0x8b, 0xf6, 0x6a, 0xad, 0xf5, 0x5b, 0xcb, 0x1e, 0xae, 0xd4, 0xb0,
+	0xee, 0xdd, 0xef, 0xdc, 0x92, 0x9c, 0xcb, 0x08, 0xd1, 0xaa, 0x7a, 0x2f, 0x19, 0x41, 0x86, 0x55,
+	0x30, 0x47, 0x71, 0x4c, 0x06, 0xa2, 0x4b, 0xf3, 0xb9, 0x47, 0xfc, 0x6e, 0x6b, 0x60, 0x7e, 0xd8,
+	0x56, 0xfd, 0xad, 0x02, 0x56, 0xaf, 0x0d, 0x9c, 0xa5, 0x24, 0x61, 0x18, 0x76, 0xc0, 0xaf, 0x53,
+	0x1d, 0xf7, 0x30, 0xa5, 0x84, 0x16, 0x8a, 0x5a, 0x0b, 0xca, 0xc4, 0x68, 0xea, 0x1b, 0x47, 0xc5,
+	0x16, 0xba, 0xbf, 0x4c, 0xce, 0x62, 0x3b, 0x87, 0xc3, 0x43, 0xf0, 0x03, 0xc5, 0x2c, 0x8b, 0xb8,
+	0x5c, 0x88, 0xff, 0x67, 0x2f, 0xc4, 0x64, 0x4e, 0x6e, 0x41, 0x77, 0xa5, 0x8c, 0xbe, 0x09, 0x96,
+	0x6f, 0x02, 0xe4, 0xa3, 0xbf, 0x61, 0xd1, 0x27, 0x77, 0xbc, 0xf5, 0xbe, 0x02, 0x96, 0x24, 0xef,
+	0x48, 0xc4, 0x83, 0xef, 0x14, 0xa0, 0x8d, 0x1d, 0x0e, 0xfc, 0x6f, 0x76, 0x86, 0xd7, 0xef, 0xac,
+	0x76, 0x97, 0x51, 0xe9, 0x8f, 0xae, 0x9c, 0xc9, 0x64, 0x5f, 0x7c, 0xf8, 0xf4, 0x4a, 0xfd, 0x07,
+	0xae, 0xe7, 0x1f, 0x9d, 0xf3, 0x09, 0xcf, 0x96, 0x3c, 0x30, 0x66, 0x36, 0x8b, 0xaf, 0x50, 0x31,
+	0x27, 0xb3, 0x79, 0x01, 0xaf, 0x14, 0xb0, 0x34, 0x35, 0x3e, 0xb8, 0x71, 0xd7, 0xee, 0xca, 0x13,
+	0xaf, 0x3d, 0xb8, 0x07, 0x53, 0xec, 0x8a, 0xee, 0x5e, 0x39, 0x2b, 0x63, 0x9f, 0x87, 0xbf, 0x47,
+	0x87, 0x5b, 0x94, 0x65, 0xe9, 0x46, 0x5e, 0xd6, 0xa8, 0x8e, 0xf3, 0x31, 0xf0, 0x56, 0xf3, 0x62,
+	0x54, 0x95, 0x1d, 0x17, 0x11, 0x6c, 0xa5, 0x59, 0xfb, 0xed, 0xd2, 0xa9, 0x8e, 0xb2, 0x28, 0xad,
+	0x34, 0x64, 0x86, 0x4f, 0xe2, 0xf6, 0x57, 0x05, 0xac, 0xf9, 0x24, 0x9e, 0x99, 0x71, 0x7b, 0x79,
+	0x6a, 0xd6, 0x87, 0xf9, 0x15, 0x1f, 0x2a, 0x4f, 0x77, 0x4b, 0x66, 0x9f, 0x44, 0x28, 0xe9, 0x1b,
+	0x84, 0xf6, 0xcd, 0x3e, 0x4e, 0x8a, 0x1b, 0x37, 0x47, 0xb1, 0x6e, 0xff, 0xaf, 0xd9, 0x94, 0xc6,
+	0x6b, 0xb5, 0xb2, 0xe3, 0x38, 0x6f, 0xd4, 0xfa, 0x8e, 0x10, 0x74, 0x02, 0x66, 0x08, 0x33, 0xb7,
+	0x8e, 0x2d, 0xa3, 0x0c, 0xcc, 0x2e, 0x25, 0xa4, 0xeb, 0x04, 0xac, 0x3b, 0x84, 0x74, 0x8f, 0xad,
+	0xae, 0x84, 0x7c, 0x51, 0xd7, 0xc4, 0xbb, 0x6d, 0x3b, 0x01, 0xb3, 0xed, 0x21, 0xc8, 0xb6, 0x8f,
+	0x2d, 0xdb, 0x96, 0xb0, 0x93, 0xb9, 0x22, 0x4f, 0xeb, 0x5b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe,
+	0x87, 0xfe, 0x4a, 0x12, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FeedItemServiceClient is the client API for FeedItemService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedItemServiceClient interface {
+	// Returns the requested feed item in full detail.
+	GetFeedItem(ctx context.Context, in *GetFeedItemRequest, opts ...grpc.CallOption) (*resources.FeedItem, error)
+	// Creates, updates, or removes feed items. Operation statuses are
+	// returned.
+	MutateFeedItems(ctx context.Context, in *MutateFeedItemsRequest, opts ...grpc.CallOption) (*MutateFeedItemsResponse, error)
+}
+
+type feedItemServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewFeedItemServiceClient(cc grpc.ClientConnInterface) FeedItemServiceClient {
+	return &feedItemServiceClient{cc}
+}
+
+func (c *feedItemServiceClient) GetFeedItem(ctx context.Context, in *GetFeedItemRequest, opts ...grpc.CallOption) (*resources.FeedItem, error) {
+	out := new(resources.FeedItem)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedItemService/GetFeedItem", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedItemServiceClient) MutateFeedItems(ctx context.Context, in *MutateFeedItemsRequest, opts ...grpc.CallOption) (*MutateFeedItemsResponse, error) {
+	out := new(MutateFeedItemsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedItemService/MutateFeedItems", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedItemServiceServer is the server API for FeedItemService service.
+type FeedItemServiceServer interface {
+	// Returns the requested feed item in full detail.
+	GetFeedItem(context.Context, *GetFeedItemRequest) (*resources.FeedItem, error)
+	// Creates, updates, or removes feed items. Operation statuses are
+	// returned.
+	MutateFeedItems(context.Context, *MutateFeedItemsRequest) (*MutateFeedItemsResponse, error)
+}
+
+// UnimplementedFeedItemServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFeedItemServiceServer struct {
+}
+
+func (*UnimplementedFeedItemServiceServer) GetFeedItem(ctx context.Context, req *GetFeedItemRequest) (*resources.FeedItem, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetFeedItem not implemented")
+}
+func (*UnimplementedFeedItemServiceServer) MutateFeedItems(ctx context.Context, req *MutateFeedItemsRequest) (*MutateFeedItemsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateFeedItems not implemented")
+}
+
+func RegisterFeedItemServiceServer(s *grpc.Server, srv FeedItemServiceServer) {
+	s.RegisterService(&_FeedItemService_serviceDesc, srv)
+}
+
+func _FeedItemService_GetFeedItem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedItemRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemServiceServer).GetFeedItem(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedItemService/GetFeedItem",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemServiceServer).GetFeedItem(ctx, req.(*GetFeedItemRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedItemService_MutateFeedItems_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedItemsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemServiceServer).MutateFeedItems(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedItemService/MutateFeedItems",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemServiceServer).MutateFeedItems(ctx, req.(*MutateFeedItemsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedItemService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.FeedItemService",
+	HandlerType: (*FeedItemServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedItem",
+			Handler:    _FeedItemService_GetFeedItem_Handler,
+		},
+		{
+			MethodName: "MutateFeedItems",
+			Handler:    _FeedItemService_MutateFeedItems_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/feed_item_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/feed_item_target_service.pb.go b/googleapis/ads/googleads/v3/services/feed_item_target_service.pb.go
new file mode 100644
index 0000000..ca3c11d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/feed_item_target_service.pb.go
@@ -0,0 +1,459 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/feed_item_target_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [FeedItemTargetService.GetFeedItemTarget][google.ads.googleads.v3.services.FeedItemTargetService.GetFeedItemTarget].
+type GetFeedItemTargetRequest struct {
+	// Required. The resource name of the feed item targets to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedItemTargetRequest) Reset()         { *m = GetFeedItemTargetRequest{} }
+func (m *GetFeedItemTargetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedItemTargetRequest) ProtoMessage()    {}
+func (*GetFeedItemTargetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aae52ecf2ca0ddf4, []int{0}
+}
+
+func (m *GetFeedItemTargetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedItemTargetRequest.Unmarshal(m, b)
+}
+func (m *GetFeedItemTargetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedItemTargetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetFeedItemTargetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedItemTargetRequest.Merge(m, src)
+}
+func (m *GetFeedItemTargetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedItemTargetRequest.Size(m)
+}
+func (m *GetFeedItemTargetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedItemTargetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedItemTargetRequest proto.InternalMessageInfo
+
+func (m *GetFeedItemTargetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedItemTargetService.MutateFeedItemTargets][google.ads.googleads.v3.services.FeedItemTargetService.MutateFeedItemTargets].
+type MutateFeedItemTargetsRequest struct {
+	// Required. The ID of the customer whose feed item targets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual feed item targets.
+	Operations           []*FeedItemTargetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateFeedItemTargetsRequest) Reset()         { *m = MutateFeedItemTargetsRequest{} }
+func (m *MutateFeedItemTargetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemTargetsRequest) ProtoMessage()    {}
+func (*MutateFeedItemTargetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aae52ecf2ca0ddf4, []int{1}
+}
+
+func (m *MutateFeedItemTargetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemTargetsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedItemTargetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemTargetsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemTargetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemTargetsRequest.Merge(m, src)
+}
+func (m *MutateFeedItemTargetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemTargetsRequest.Size(m)
+}
+func (m *MutateFeedItemTargetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemTargetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemTargetsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedItemTargetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedItemTargetsRequest) GetOperations() []*FeedItemTargetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove) on an feed item target.
+type FeedItemTargetOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedItemTargetOperation_Create
+	//	*FeedItemTargetOperation_Remove
+	Operation            isFeedItemTargetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *FeedItemTargetOperation) Reset()         { *m = FeedItemTargetOperation{} }
+func (m *FeedItemTargetOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedItemTargetOperation) ProtoMessage()    {}
+func (*FeedItemTargetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aae52ecf2ca0ddf4, []int{2}
+}
+
+func (m *FeedItemTargetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemTargetOperation.Unmarshal(m, b)
+}
+func (m *FeedItemTargetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemTargetOperation.Marshal(b, m, deterministic)
+}
+func (m *FeedItemTargetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemTargetOperation.Merge(m, src)
+}
+func (m *FeedItemTargetOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedItemTargetOperation.Size(m)
+}
+func (m *FeedItemTargetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemTargetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemTargetOperation proto.InternalMessageInfo
+
+type isFeedItemTargetOperation_Operation interface {
+	isFeedItemTargetOperation_Operation()
+}
+
+type FeedItemTargetOperation_Create struct {
+	Create *resources.FeedItemTarget `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedItemTargetOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedItemTargetOperation_Create) isFeedItemTargetOperation_Operation() {}
+
+func (*FeedItemTargetOperation_Remove) isFeedItemTargetOperation_Operation() {}
+
+func (m *FeedItemTargetOperation) GetOperation() isFeedItemTargetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedItemTargetOperation) GetCreate() *resources.FeedItemTarget {
+	if x, ok := m.GetOperation().(*FeedItemTargetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedItemTargetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedItemTargetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedItemTargetOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedItemTargetOperation_Create)(nil),
+		(*FeedItemTargetOperation_Remove)(nil),
+	}
+}
+
+// Response message for an feed item target mutate.
+type MutateFeedItemTargetsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateFeedItemTargetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateFeedItemTargetsResponse) Reset()         { *m = MutateFeedItemTargetsResponse{} }
+func (m *MutateFeedItemTargetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemTargetsResponse) ProtoMessage()    {}
+func (*MutateFeedItemTargetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aae52ecf2ca0ddf4, []int{3}
+}
+
+func (m *MutateFeedItemTargetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemTargetsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedItemTargetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemTargetsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemTargetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemTargetsResponse.Merge(m, src)
+}
+func (m *MutateFeedItemTargetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemTargetsResponse.Size(m)
+}
+func (m *MutateFeedItemTargetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemTargetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemTargetsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedItemTargetsResponse) GetResults() []*MutateFeedItemTargetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed item target mutate.
+type MutateFeedItemTargetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedItemTargetResult) Reset()         { *m = MutateFeedItemTargetResult{} }
+func (m *MutateFeedItemTargetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemTargetResult) ProtoMessage()    {}
+func (*MutateFeedItemTargetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aae52ecf2ca0ddf4, []int{4}
+}
+
+func (m *MutateFeedItemTargetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemTargetResult.Unmarshal(m, b)
+}
+func (m *MutateFeedItemTargetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemTargetResult.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedItemTargetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemTargetResult.Merge(m, src)
+}
+func (m *MutateFeedItemTargetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemTargetResult.Size(m)
+}
+func (m *MutateFeedItemTargetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemTargetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemTargetResult proto.InternalMessageInfo
+
+func (m *MutateFeedItemTargetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedItemTargetRequest)(nil), "google.ads.googleads.v3.services.GetFeedItemTargetRequest")
+	proto.RegisterType((*MutateFeedItemTargetsRequest)(nil), "google.ads.googleads.v3.services.MutateFeedItemTargetsRequest")
+	proto.RegisterType((*FeedItemTargetOperation)(nil), "google.ads.googleads.v3.services.FeedItemTargetOperation")
+	proto.RegisterType((*MutateFeedItemTargetsResponse)(nil), "google.ads.googleads.v3.services.MutateFeedItemTargetsResponse")
+	proto.RegisterType((*MutateFeedItemTargetResult)(nil), "google.ads.googleads.v3.services.MutateFeedItemTargetResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/feed_item_target_service.proto", fileDescriptor_aae52ecf2ca0ddf4)
+}
+
+var fileDescriptor_aae52ecf2ca0ddf4 = []byte{
+	// 623 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xb1, 0x6f, 0xd3, 0x4e,
+	0x14, 0xfe, 0xd9, 0x91, 0xfa, 0x53, 0x2f, 0x30, 0x70, 0x52, 0xa9, 0x65, 0x8a, 0x88, 0x4c, 0x87,
+	0x2a, 0x42, 0xb6, 0x5a, 0x33, 0x50, 0x43, 0xa9, 0x1c, 0x21, 0xda, 0x08, 0x01, 0x55, 0x40, 0x11,
+	0x42, 0x11, 0x96, 0x6b, 0xbf, 0x1a, 0x4b, 0xb1, 0x2f, 0xdc, 0x5d, 0xc2, 0x50, 0x75, 0x80, 0x9d,
+	0x89, 0xff, 0x00, 0x31, 0xf1, 0xa7, 0x54, 0x62, 0x62, 0xeb, 0xc4, 0xc0, 0xc4, 0xc8, 0xc6, 0x86,
+	0xec, 0xf3, 0x25, 0x76, 0x89, 0x15, 0xd1, 0xed, 0xd9, 0xef, 0x7b, 0xdf, 0xf7, 0xbe, 0x7b, 0xef,
+	0x0e, 0xed, 0x46, 0x84, 0x44, 0x43, 0xb0, 0xfc, 0x90, 0x59, 0x22, 0xcc, 0xa2, 0x89, 0x6d, 0x31,
+	0xa0, 0x93, 0x38, 0x00, 0x66, 0x1d, 0x01, 0x84, 0x5e, 0xcc, 0x21, 0xf1, 0xb8, 0x4f, 0x23, 0xe0,
+	0x5e, 0x91, 0x31, 0x47, 0x94, 0x70, 0x82, 0x5b, 0xa2, 0xca, 0xf4, 0x43, 0x66, 0x4e, 0x09, 0xcc,
+	0x89, 0x6d, 0x4a, 0x02, 0xfd, 0x4e, 0x9d, 0x04, 0x05, 0x46, 0xc6, 0x74, 0x9e, 0x86, 0xe0, 0xd6,
+	0xd7, 0x64, 0xe5, 0x28, 0xb6, 0xfc, 0x34, 0x25, 0xdc, 0xe7, 0x31, 0x49, 0x59, 0x91, 0x5d, 0x2d,
+	0x65, 0x83, 0x61, 0x0c, 0xa9, 0x2c, 0xbb, 0x51, 0x4a, 0x1c, 0xc5, 0x30, 0x0c, 0xbd, 0x43, 0x78,
+	0xed, 0x4f, 0x62, 0x42, 0x05, 0xc0, 0x78, 0x80, 0xb4, 0x3d, 0xe0, 0x0f, 0x01, 0xc2, 0x2e, 0x87,
+	0xe4, 0x79, 0x2e, 0xd9, 0x83, 0x37, 0x63, 0x60, 0x1c, 0x6f, 0xa0, 0xcb, 0xb2, 0x2f, 0x2f, 0xf5,
+	0x13, 0xd0, 0x94, 0x96, 0xb2, 0xb1, 0xdc, 0x69, 0x7c, 0x77, 0xd5, 0xde, 0x25, 0x99, 0x79, 0xe2,
+	0x27, 0x60, 0x7c, 0x56, 0xd0, 0xda, 0xe3, 0x31, 0xf7, 0x39, 0x54, 0x99, 0x98, 0xa4, 0x5a, 0x47,
+	0xcd, 0x60, 0xcc, 0x38, 0x49, 0x80, 0x7a, 0x71, 0x58, 0x26, 0x42, 0xf2, 0x7f, 0x37, 0xc4, 0xaf,
+	0x10, 0x22, 0x23, 0xa0, 0xc2, 0x9a, 0xa6, 0xb6, 0x1a, 0x1b, 0xcd, 0xad, 0x6d, 0x73, 0xd1, 0xa9,
+	0x9a, 0x55, 0xcd, 0xa7, 0x92, 0xa1, 0xe0, 0x9f, 0x31, 0x1a, 0x1f, 0x14, 0xb4, 0x5a, 0x03, 0xc6,
+	0x8f, 0xd0, 0x52, 0x40, 0xc1, 0xe7, 0xc2, 0x65, 0x73, 0x6b, 0xb3, 0x56, 0x77, 0x3a, 0xab, 0x73,
+	0xc2, 0xfb, 0xff, 0xf5, 0x0a, 0x0a, 0xac, 0xa1, 0x25, 0x0a, 0x09, 0x99, 0x80, 0xa6, 0x66, 0x4e,
+	0xb3, 0x8c, 0xf8, 0xee, 0x34, 0xd1, 0xf2, 0xb4, 0x21, 0xe3, 0x2d, 0xba, 0x5e, 0x73, 0x6a, 0x6c,
+	0x44, 0x52, 0x06, 0xb8, 0x8f, 0xfe, 0xa7, 0xc0, 0xc6, 0x43, 0x2e, 0x4f, 0xe3, 0xde, 0xe2, 0xd3,
+	0x98, 0xc7, 0xd8, 0xcb, 0x49, 0x7a, 0x92, 0xcc, 0x70, 0x91, 0x5e, 0x0f, 0xc3, 0x37, 0xe7, 0xce,
+	0xbd, 0x3a, 0xf2, 0xad, 0xdf, 0x0d, 0xb4, 0x52, 0xad, 0x7e, 0x26, 0x3a, 0xc0, 0x5f, 0x15, 0x74,
+	0xe5, 0xaf, 0x9d, 0xc2, 0xce, 0xe2, 0xce, 0xeb, 0x16, 0x51, 0xff, 0xf7, 0x59, 0x18, 0xdd, 0x33,
+	0xb7, 0x6a, 0xe2, 0xfd, 0xb7, 0x1f, 0x1f, 0x55, 0x1b, 0x6f, 0x66, 0xb7, 0xed, 0xb8, 0x92, 0xd9,
+	0x91, 0x1b, 0xc8, 0xac, 0x76, 0x7e, 0xfd, 0x4a, 0x93, 0xb0, 0xda, 0x27, 0xf8, 0x97, 0x82, 0x56,
+	0xe6, 0x8e, 0x09, 0xdf, 0xbf, 0xd8, 0x34, 0xe4, 0xad, 0xd0, 0x77, 0x2f, 0x5c, 0x2f, 0xf6, 0xc3,
+	0x78, 0x71, 0xe6, 0x5e, 0x2d, 0xdd, 0xab, 0x5b, 0xb3, 0x5d, 0xcf, 0xed, 0x6e, 0x1b, 0xb7, 0x33,
+	0xbb, 0x33, 0x7f, 0xc7, 0x25, 0xf0, 0x4e, 0xfb, 0xe4, 0xbc, 0x5b, 0x27, 0xc9, 0xd5, 0x1c, 0xa5,
+	0xad, 0x5f, 0x3b, 0x75, 0xb5, 0x59, 0x47, 0x45, 0x34, 0x8a, 0x99, 0x19, 0x90, 0xa4, 0xf3, 0x4e,
+	0x45, 0xeb, 0x01, 0x49, 0x16, 0x76, 0xdf, 0xd1, 0xe7, 0x6e, 0xc8, 0x41, 0xf6, 0xf2, 0x1c, 0x28,
+	0x2f, 0xf7, 0x8b, 0xfa, 0x88, 0x0c, 0xfd, 0x34, 0x32, 0x09, 0x8d, 0xac, 0x08, 0xd2, 0xfc, 0x5d,
+	0xb2, 0x66, 0x8a, 0xf5, 0xef, 0xf1, 0x5d, 0x19, 0x7c, 0x52, 0x1b, 0x7b, 0xae, 0xfb, 0x45, 0x6d,
+	0xed, 0x09, 0x42, 0x37, 0x64, 0xa6, 0x08, 0xb3, 0xa8, 0x6f, 0x9b, 0x85, 0x30, 0x3b, 0x95, 0x90,
+	0x81, 0x1b, 0xb2, 0xc1, 0x14, 0x32, 0xe8, 0xdb, 0x03, 0x09, 0xf9, 0xa9, 0xae, 0x8b, 0xff, 0x8e,
+	0xe3, 0x86, 0xcc, 0x71, 0xa6, 0x20, 0xc7, 0xe9, 0xdb, 0x8e, 0x23, 0x61, 0x87, 0x4b, 0x79, 0x9f,
+	0xf6, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x99, 0x51, 0xef, 0x36, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FeedItemTargetServiceClient is the client API for FeedItemTargetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedItemTargetServiceClient interface {
+	// Returns the requested feed item targets in full detail.
+	GetFeedItemTarget(ctx context.Context, in *GetFeedItemTargetRequest, opts ...grpc.CallOption) (*resources.FeedItemTarget, error)
+	// Creates or removes feed item targets. Operation statuses are returned.
+	MutateFeedItemTargets(ctx context.Context, in *MutateFeedItemTargetsRequest, opts ...grpc.CallOption) (*MutateFeedItemTargetsResponse, error)
+}
+
+type feedItemTargetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewFeedItemTargetServiceClient(cc grpc.ClientConnInterface) FeedItemTargetServiceClient {
+	return &feedItemTargetServiceClient{cc}
+}
+
+func (c *feedItemTargetServiceClient) GetFeedItemTarget(ctx context.Context, in *GetFeedItemTargetRequest, opts ...grpc.CallOption) (*resources.FeedItemTarget, error) {
+	out := new(resources.FeedItemTarget)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedItemTargetService/GetFeedItemTarget", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedItemTargetServiceClient) MutateFeedItemTargets(ctx context.Context, in *MutateFeedItemTargetsRequest, opts ...grpc.CallOption) (*MutateFeedItemTargetsResponse, error) {
+	out := new(MutateFeedItemTargetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedItemTargetService/MutateFeedItemTargets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedItemTargetServiceServer is the server API for FeedItemTargetService service.
+type FeedItemTargetServiceServer interface {
+	// Returns the requested feed item targets in full detail.
+	GetFeedItemTarget(context.Context, *GetFeedItemTargetRequest) (*resources.FeedItemTarget, error)
+	// Creates or removes feed item targets. Operation statuses are returned.
+	MutateFeedItemTargets(context.Context, *MutateFeedItemTargetsRequest) (*MutateFeedItemTargetsResponse, error)
+}
+
+// UnimplementedFeedItemTargetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFeedItemTargetServiceServer struct {
+}
+
+func (*UnimplementedFeedItemTargetServiceServer) GetFeedItemTarget(ctx context.Context, req *GetFeedItemTargetRequest) (*resources.FeedItemTarget, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetFeedItemTarget not implemented")
+}
+func (*UnimplementedFeedItemTargetServiceServer) MutateFeedItemTargets(ctx context.Context, req *MutateFeedItemTargetsRequest) (*MutateFeedItemTargetsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateFeedItemTargets not implemented")
+}
+
+func RegisterFeedItemTargetServiceServer(s *grpc.Server, srv FeedItemTargetServiceServer) {
+	s.RegisterService(&_FeedItemTargetService_serviceDesc, srv)
+}
+
+func _FeedItemTargetService_GetFeedItemTarget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedItemTargetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemTargetServiceServer).GetFeedItemTarget(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedItemTargetService/GetFeedItemTarget",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemTargetServiceServer).GetFeedItemTarget(ctx, req.(*GetFeedItemTargetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedItemTargetService_MutateFeedItemTargets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedItemTargetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemTargetServiceServer).MutateFeedItemTargets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedItemTargetService/MutateFeedItemTargets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemTargetServiceServer).MutateFeedItemTargets(ctx, req.(*MutateFeedItemTargetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedItemTargetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.FeedItemTargetService",
+	HandlerType: (*FeedItemTargetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedItemTarget",
+			Handler:    _FeedItemTargetService_GetFeedItemTarget_Handler,
+		},
+		{
+			MethodName: "MutateFeedItemTargets",
+			Handler:    _FeedItemTargetService_MutateFeedItemTargets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/feed_item_target_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/feed_mapping_service.pb.go b/googleapis/ads/googleads/v3/services/feed_mapping_service.pb.go
new file mode 100644
index 0000000..4203eb2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/feed_mapping_service.pb.go
@@ -0,0 +1,502 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/feed_mapping_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [FeedMappingService.GetFeedMapping][google.ads.googleads.v3.services.FeedMappingService.GetFeedMapping].
+type GetFeedMappingRequest struct {
+	// Required. The resource name of the feed mapping to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedMappingRequest) Reset()         { *m = GetFeedMappingRequest{} }
+func (m *GetFeedMappingRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedMappingRequest) ProtoMessage()    {}
+func (*GetFeedMappingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c1bab55b5a827835, []int{0}
+}
+
+func (m *GetFeedMappingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedMappingRequest.Unmarshal(m, b)
+}
+func (m *GetFeedMappingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedMappingRequest.Marshal(b, m, deterministic)
+}
+func (m *GetFeedMappingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedMappingRequest.Merge(m, src)
+}
+func (m *GetFeedMappingRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedMappingRequest.Size(m)
+}
+func (m *GetFeedMappingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedMappingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedMappingRequest proto.InternalMessageInfo
+
+func (m *GetFeedMappingRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedMappingService.MutateFeedMappings][google.ads.googleads.v3.services.FeedMappingService.MutateFeedMappings].
+type MutateFeedMappingsRequest struct {
+	// Required. The ID of the customer whose feed mappings are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual feed mappings.
+	Operations []*FeedMappingOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedMappingsRequest) Reset()         { *m = MutateFeedMappingsRequest{} }
+func (m *MutateFeedMappingsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingsRequest) ProtoMessage()    {}
+func (*MutateFeedMappingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c1bab55b5a827835, []int{1}
+}
+
+func (m *MutateFeedMappingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedMappingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingsRequest.Merge(m, src)
+}
+func (m *MutateFeedMappingsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Size(m)
+}
+func (m *MutateFeedMappingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedMappingsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedMappingsRequest) GetOperations() []*FeedMappingOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateFeedMappingsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateFeedMappingsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on a feed mapping.
+type FeedMappingOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedMappingOperation_Create
+	//	*FeedMappingOperation_Remove
+	Operation            isFeedMappingOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *FeedMappingOperation) Reset()         { *m = FeedMappingOperation{} }
+func (m *FeedMappingOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingOperation) ProtoMessage()    {}
+func (*FeedMappingOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c1bab55b5a827835, []int{2}
+}
+
+func (m *FeedMappingOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingOperation.Unmarshal(m, b)
+}
+func (m *FeedMappingOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingOperation.Marshal(b, m, deterministic)
+}
+func (m *FeedMappingOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingOperation.Merge(m, src)
+}
+func (m *FeedMappingOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingOperation.Size(m)
+}
+func (m *FeedMappingOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingOperation proto.InternalMessageInfo
+
+type isFeedMappingOperation_Operation interface {
+	isFeedMappingOperation_Operation()
+}
+
+type FeedMappingOperation_Create struct {
+	Create *resources.FeedMapping `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedMappingOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedMappingOperation_Create) isFeedMappingOperation_Operation() {}
+
+func (*FeedMappingOperation_Remove) isFeedMappingOperation_Operation() {}
+
+func (m *FeedMappingOperation) GetOperation() isFeedMappingOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedMappingOperation) GetCreate() *resources.FeedMapping {
+	if x, ok := m.GetOperation().(*FeedMappingOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedMappingOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedMappingOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedMappingOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedMappingOperation_Create)(nil),
+		(*FeedMappingOperation_Remove)(nil),
+	}
+}
+
+// Response message for a feed mapping mutate.
+type MutateFeedMappingsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateFeedMappingResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateFeedMappingsResponse) Reset()         { *m = MutateFeedMappingsResponse{} }
+func (m *MutateFeedMappingsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingsResponse) ProtoMessage()    {}
+func (*MutateFeedMappingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c1bab55b5a827835, []int{3}
+}
+
+func (m *MutateFeedMappingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedMappingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingsResponse.Merge(m, src)
+}
+func (m *MutateFeedMappingsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Size(m)
+}
+func (m *MutateFeedMappingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedMappingsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateFeedMappingsResponse) GetResults() []*MutateFeedMappingResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed mapping mutate.
+type MutateFeedMappingResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedMappingResult) Reset()         { *m = MutateFeedMappingResult{} }
+func (m *MutateFeedMappingResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingResult) ProtoMessage()    {}
+func (*MutateFeedMappingResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c1bab55b5a827835, []int{4}
+}
+
+func (m *MutateFeedMappingResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingResult.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingResult.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedMappingResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingResult.Merge(m, src)
+}
+func (m *MutateFeedMappingResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingResult.Size(m)
+}
+func (m *MutateFeedMappingResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingResult proto.InternalMessageInfo
+
+func (m *MutateFeedMappingResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedMappingRequest)(nil), "google.ads.googleads.v3.services.GetFeedMappingRequest")
+	proto.RegisterType((*MutateFeedMappingsRequest)(nil), "google.ads.googleads.v3.services.MutateFeedMappingsRequest")
+	proto.RegisterType((*FeedMappingOperation)(nil), "google.ads.googleads.v3.services.FeedMappingOperation")
+	proto.RegisterType((*MutateFeedMappingsResponse)(nil), "google.ads.googleads.v3.services.MutateFeedMappingsResponse")
+	proto.RegisterType((*MutateFeedMappingResult)(nil), "google.ads.googleads.v3.services.MutateFeedMappingResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/feed_mapping_service.proto", fileDescriptor_c1bab55b5a827835)
+}
+
+var fileDescriptor_c1bab55b5a827835 = []byte{
+	// 711 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x41, 0x6f, 0xd3, 0x4a,
+	0x10, 0x7e, 0x4e, 0x9e, 0xfa, 0x5e, 0x37, 0x6d, 0x9f, 0xb4, 0x8f, 0xd2, 0x10, 0x90, 0x88, 0x4c,
+	0x25, 0xa2, 0x08, 0xad, 0x21, 0x41, 0x45, 0xb8, 0x14, 0xc9, 0x91, 0x48, 0xcb, 0xa1, 0xb4, 0x4a,
+	0x45, 0x0f, 0x10, 0xc9, 0xda, 0xda, 0x5b, 0x63, 0xc9, 0xf6, 0x9a, 0xdd, 0x75, 0xa4, 0xaa, 0xea,
+	0x85, 0x0b, 0x3f, 0x80, 0x7f, 0xc0, 0x91, 0x7f, 0xc0, 0x91, 0x6b, 0xaf, 0xdc, 0x7a, 0x40, 0x1c,
+	0x10, 0x07, 0xc4, 0x6f, 0x40, 0xc8, 0x5e, 0x6f, 0xe2, 0xb4, 0x89, 0x22, 0x7a, 0x9b, 0xcc, 0xcc,
+	0xf7, 0xcd, 0x37, 0x3b, 0x33, 0x0e, 0x58, 0xf7, 0x28, 0xf5, 0x02, 0x62, 0x60, 0x97, 0x1b, 0xd2,
+	0x4c, 0xad, 0x41, 0xdb, 0xe0, 0x84, 0x0d, 0x7c, 0x87, 0x70, 0xe3, 0x90, 0x10, 0xd7, 0x0e, 0x71,
+	0x1c, 0xfb, 0x91, 0x67, 0xe7, 0x5e, 0x14, 0x33, 0x2a, 0x28, 0xac, 0x4b, 0x04, 0xc2, 0x2e, 0x47,
+	0x43, 0x30, 0x1a, 0xb4, 0x91, 0x02, 0xd7, 0xee, 0x4f, 0xa3, 0x67, 0x84, 0xd3, 0x84, 0x9d, 0xe7,
+	0x97, 0xbc, 0xb5, 0x1b, 0x0a, 0x15, 0xfb, 0x06, 0x8e, 0x22, 0x2a, 0xb0, 0xf0, 0x69, 0xc4, 0xf3,
+	0xe8, 0x4a, 0x21, 0xea, 0x04, 0x3e, 0x89, 0x44, 0x1e, 0xb8, 0x59, 0x08, 0x1c, 0xfa, 0x24, 0x70,
+	0xed, 0x03, 0xf2, 0x0a, 0x0f, 0x7c, 0xca, 0xce, 0x21, 0x59, 0xec, 0x18, 0x5c, 0x60, 0x91, 0xe4,
+	0x94, 0xba, 0x05, 0x96, 0x37, 0x89, 0xe8, 0x12, 0xe2, 0x6e, 0x4b, 0x21, 0x3d, 0xf2, 0x3a, 0x21,
+	0x5c, 0xc0, 0x06, 0x58, 0x54, 0x4a, 0xed, 0x08, 0x87, 0xa4, 0xaa, 0xd5, 0xb5, 0xc6, 0x7c, 0xa7,
+	0xfc, 0xd5, 0x2a, 0xf5, 0x16, 0x54, 0xe4, 0x19, 0x0e, 0x89, 0xfe, 0x53, 0x03, 0xd7, 0xb6, 0x13,
+	0x81, 0x05, 0x29, 0xd0, 0x70, 0xc5, 0xb3, 0x0a, 0x2a, 0x4e, 0xc2, 0x05, 0x0d, 0x09, 0xb3, 0x7d,
+	0xb7, 0xc8, 0x02, 0x94, 0xff, 0xa9, 0x0b, 0x5f, 0x02, 0x40, 0x63, 0xc2, 0x64, 0xb7, 0xd5, 0x52,
+	0xbd, 0xdc, 0xa8, 0xb4, 0xd6, 0xd0, 0xac, 0x47, 0x46, 0x85, 0x82, 0x3b, 0x0a, 0x9e, 0x93, 0x8f,
+	0xe8, 0xe0, 0x6d, 0xf0, 0x5f, 0x8c, 0x99, 0xf0, 0x71, 0x60, 0x1f, 0x62, 0x3f, 0x48, 0x18, 0xa9,
+	0x96, 0xeb, 0x5a, 0xe3, 0xdf, 0xde, 0x52, 0xee, 0xee, 0x4a, 0x2f, 0xbc, 0x05, 0x16, 0x07, 0x38,
+	0xf0, 0x5d, 0x2c, 0x88, 0x4d, 0xa3, 0xe0, 0xa8, 0xfa, 0x77, 0x96, 0xb6, 0xa0, 0x9c, 0x3b, 0x51,
+	0x70, 0xa4, 0xbf, 0xd5, 0xc0, 0x95, 0x49, 0x75, 0xe1, 0x16, 0x98, 0x73, 0x18, 0xc1, 0x42, 0x3e,
+	0x55, 0xa5, 0x85, 0xa6, 0xea, 0x1f, 0xae, 0x40, 0xb1, 0x81, 0xad, 0xbf, 0x7a, 0x39, 0x1e, 0x56,
+	0xc1, 0x1c, 0x23, 0x21, 0x1d, 0x48, 0x9d, 0xf3, 0x69, 0x44, 0xfe, 0xee, 0x54, 0xc0, 0xfc, 0xb0,
+	0x31, 0xfd, 0xa3, 0x06, 0x6a, 0x93, 0x1e, 0x9e, 0xc7, 0x34, 0xe2, 0x04, 0x76, 0xc1, 0xf2, 0xb9,
+	0xb6, 0x6d, 0xc2, 0x18, 0x65, 0x19, 0x69, 0xa5, 0x05, 0x95, 0x3c, 0x16, 0x3b, 0x68, 0x2f, 0xdb,
+	0x89, 0xde, 0xff, 0xe3, 0x0f, 0xf2, 0x24, 0x4d, 0x87, 0x7b, 0xe0, 0x1f, 0x46, 0x78, 0x12, 0x08,
+	0x35, 0x98, 0x87, 0xb3, 0x07, 0x73, 0x41, 0x56, 0x2f, 0x63, 0xe8, 0x29, 0x26, 0xfd, 0x31, 0x58,
+	0x99, 0x92, 0x93, 0x4e, 0x61, 0xc2, 0xe6, 0x8d, 0x2f, 0x5d, 0xeb, 0x4b, 0x19, 0xc0, 0x02, 0x74,
+	0x4f, 0x16, 0x86, 0x9f, 0x34, 0xb0, 0x34, 0xbe, 0xcf, 0xf0, 0xc1, 0x6c, 0xb5, 0x13, 0x2f, 0xa0,
+	0xf6, 0x87, 0xf3, 0xd3, 0xbb, 0x67, 0xd6, 0xb8, 0xf0, 0x37, 0x9f, 0xbf, 0xbd, 0x2b, 0xdd, 0x85,
+	0x28, 0xbd, 0xfa, 0xe3, 0xb1, 0xc8, 0x86, 0x5a, 0x7d, 0x6e, 0x34, 0xb3, 0xcf, 0x80, 0x1a, 0x9e,
+	0xd1, 0x3c, 0x81, 0xdf, 0x35, 0x00, 0x2f, 0x8e, 0x15, 0xae, 0x5f, 0xe2, 0xd5, 0xd5, 0x15, 0xd6,
+	0x1e, 0x5d, 0x0e, 0x2c, 0x37, 0x49, 0x7f, 0x7e, 0x66, 0x5d, 0x2d, 0x1c, 0xf1, 0x9d, 0xd1, 0x6d,
+	0x65, 0x2d, 0xae, 0xe9, 0xf7, 0xd2, 0x16, 0x47, 0x3d, 0x1d, 0x17, 0x92, 0x37, 0x9a, 0x27, 0x63,
+	0x1d, 0x9a, 0x61, 0x56, 0xc7, 0xd4, 0x9a, 0xb5, 0xeb, 0xa7, 0x56, 0x75, 0xa4, 0x25, 0xb7, 0x62,
+	0x9f, 0x23, 0x87, 0x86, 0x9d, 0x5f, 0x1a, 0x58, 0x75, 0x68, 0x38, 0x53, 0x77, 0x67, 0xe5, 0xe2,
+	0x1a, 0xec, 0xa6, 0x9f, 0xb6, 0x5d, 0xed, 0xc5, 0x56, 0x0e, 0xf6, 0x68, 0x80, 0x23, 0x0f, 0x51,
+	0xe6, 0x19, 0x1e, 0x89, 0xb2, 0x0f, 0x9f, 0x31, 0x2a, 0x37, 0xfd, 0x1f, 0x60, 0x5d, 0x19, 0xef,
+	0x4b, 0xe5, 0x4d, 0xcb, 0xfa, 0x50, 0xaa, 0x6f, 0x4a, 0x42, 0xcb, 0xe5, 0x48, 0x9a, 0xa9, 0xb5,
+	0xdf, 0x46, 0x79, 0x61, 0x7e, 0xaa, 0x52, 0xfa, 0x96, 0xcb, 0xfb, 0xc3, 0x94, 0xfe, 0x7e, 0xbb,
+	0xaf, 0x52, 0x7e, 0x94, 0x56, 0xa5, 0xdf, 0x34, 0x2d, 0x97, 0x9b, 0xe6, 0x30, 0xc9, 0x34, 0xf7,
+	0xdb, 0xa6, 0xa9, 0xd2, 0x0e, 0xe6, 0x32, 0x9d, 0xed, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x79,
+	0xb3, 0xe1, 0x28, 0xa8, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FeedMappingServiceClient is the client API for FeedMappingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedMappingServiceClient interface {
+	// Returns the requested feed mapping in full detail.
+	GetFeedMapping(ctx context.Context, in *GetFeedMappingRequest, opts ...grpc.CallOption) (*resources.FeedMapping, error)
+	// Creates or removes feed mappings. Operation statuses are
+	// returned.
+	MutateFeedMappings(ctx context.Context, in *MutateFeedMappingsRequest, opts ...grpc.CallOption) (*MutateFeedMappingsResponse, error)
+}
+
+type feedMappingServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewFeedMappingServiceClient(cc grpc.ClientConnInterface) FeedMappingServiceClient {
+	return &feedMappingServiceClient{cc}
+}
+
+func (c *feedMappingServiceClient) GetFeedMapping(ctx context.Context, in *GetFeedMappingRequest, opts ...grpc.CallOption) (*resources.FeedMapping, error) {
+	out := new(resources.FeedMapping)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedMappingService/GetFeedMapping", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedMappingServiceClient) MutateFeedMappings(ctx context.Context, in *MutateFeedMappingsRequest, opts ...grpc.CallOption) (*MutateFeedMappingsResponse, error) {
+	out := new(MutateFeedMappingsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedMappingService/MutateFeedMappings", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedMappingServiceServer is the server API for FeedMappingService service.
+type FeedMappingServiceServer interface {
+	// Returns the requested feed mapping in full detail.
+	GetFeedMapping(context.Context, *GetFeedMappingRequest) (*resources.FeedMapping, error)
+	// Creates or removes feed mappings. Operation statuses are
+	// returned.
+	MutateFeedMappings(context.Context, *MutateFeedMappingsRequest) (*MutateFeedMappingsResponse, error)
+}
+
+// UnimplementedFeedMappingServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFeedMappingServiceServer struct {
+}
+
+func (*UnimplementedFeedMappingServiceServer) GetFeedMapping(ctx context.Context, req *GetFeedMappingRequest) (*resources.FeedMapping, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetFeedMapping not implemented")
+}
+func (*UnimplementedFeedMappingServiceServer) MutateFeedMappings(ctx context.Context, req *MutateFeedMappingsRequest) (*MutateFeedMappingsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateFeedMappings not implemented")
+}
+
+func RegisterFeedMappingServiceServer(s *grpc.Server, srv FeedMappingServiceServer) {
+	s.RegisterService(&_FeedMappingService_serviceDesc, srv)
+}
+
+func _FeedMappingService_GetFeedMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedMappingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedMappingServiceServer).GetFeedMapping(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedMappingService/GetFeedMapping",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedMappingServiceServer).GetFeedMapping(ctx, req.(*GetFeedMappingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedMappingService_MutateFeedMappings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedMappingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedMappingServiceServer).MutateFeedMappings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedMappingService/MutateFeedMappings",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedMappingServiceServer).MutateFeedMappings(ctx, req.(*MutateFeedMappingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedMappingService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.FeedMappingService",
+	HandlerType: (*FeedMappingServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedMapping",
+			Handler:    _FeedMappingService_GetFeedMapping_Handler,
+		},
+		{
+			MethodName: "MutateFeedMappings",
+			Handler:    _FeedMappingService_MutateFeedMappings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/feed_mapping_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/feed_placeholder_view_service.pb.go b/googleapis/ads/googleads/v3/services/feed_placeholder_view_service.pb.go
new file mode 100644
index 0000000..71cd246
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/feed_placeholder_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/feed_placeholder_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [FeedPlaceholderViewService.GetFeedPlaceholderView][google.ads.googleads.v3.services.FeedPlaceholderViewService.GetFeedPlaceholderView].
+type GetFeedPlaceholderViewRequest struct {
+	// Required. The resource name of the feed placeholder view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedPlaceholderViewRequest) Reset()         { *m = GetFeedPlaceholderViewRequest{} }
+func (m *GetFeedPlaceholderViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedPlaceholderViewRequest) ProtoMessage()    {}
+func (*GetFeedPlaceholderViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3cdfc60d4e9a2d03, []int{0}
+}
+
+func (m *GetFeedPlaceholderViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedPlaceholderViewRequest.Unmarshal(m, b)
+}
+func (m *GetFeedPlaceholderViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedPlaceholderViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetFeedPlaceholderViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedPlaceholderViewRequest.Merge(m, src)
+}
+func (m *GetFeedPlaceholderViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedPlaceholderViewRequest.Size(m)
+}
+func (m *GetFeedPlaceholderViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedPlaceholderViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedPlaceholderViewRequest proto.InternalMessageInfo
+
+func (m *GetFeedPlaceholderViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedPlaceholderViewRequest)(nil), "google.ads.googleads.v3.services.GetFeedPlaceholderViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/feed_placeholder_view_service.proto", fileDescriptor_3cdfc60d4e9a2d03)
+}
+
+var fileDescriptor_3cdfc60d4e9a2d03 = []byte{
+	// 424 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xd0, 0x23, 0x2a, 0xb7, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x80, 0x81, 0x43, 0x46, 0x0e, 0x99, 0x45, 0x5c, 0x6d, 0x8e, 0xe5, 0x84, 0x14, 0x12, 0x08, 0x73,
+	0x99, 0xef, 0xb2, 0x03, 0x49, 0x26, 0xce, 0x64, 0xb3, 0x85, 0xd8, 0x58, 0xf8, 0x07, 0xac, 0x6d,
+	0x2c, 0xfd, 0x29, 0xdb, 0xda, 0x59, 0x29, 0x58, 0xf9, 0x2b, 0x24, 0x3b, 0x99, 0xec, 0xae, 0x6c,
+	0x6e, 0xbb, 0x47, 0xde, 0xfb, 0xde, 0xfb, 0xe6, 0x7b, 0xf1, 0x5e, 0x66, 0x52, 0x66, 0x39, 0x60,
+	0xc6, 0x35, 0x36, 0xb0, 0x45, 0x4d, 0x88, 0x35, 0xa8, 0x46, 0xa4, 0xa0, 0xf1, 0x0d, 0x00, 0x4f,
+	0xaa, 0x9c, 0xa5, 0x30, 0x93, 0x39, 0x07, 0x95, 0x34, 0x02, 0x16, 0x49, 0x47, 0xa3, 0x4a, 0xc9,
+	0x5a, 0xfa, 0x23, 0x33, 0x8a, 0x18, 0xd7, 0xa8, 0x77, 0x41, 0x4d, 0x88, 0xac, 0x4b, 0x70, 0x31,
+	0x94, 0xa3, 0x40, 0xcb, 0xb9, 0x1a, 0x0c, 0x32, 0x01, 0xc1, 0x63, 0x3b, 0x5e, 0x09, 0xcc, 0xca,
+	0x52, 0xd6, 0xac, 0x16, 0xb2, 0xd4, 0x1d, 0xfb, 0x70, 0x83, 0x4d, 0x73, 0x01, 0x65, 0xdd, 0x11,
+	0x47, 0x1b, 0xc4, 0x8d, 0x80, 0x9c, 0x27, 0xd7, 0x30, 0x63, 0x8d, 0x90, 0xca, 0x08, 0x8e, 0xdf,
+	0x78, 0x4f, 0x26, 0x50, 0xbf, 0x02, 0xe0, 0xd3, 0x75, 0x70, 0x24, 0x60, 0x71, 0x05, 0xef, 0xe7,
+	0xa0, 0x6b, 0xff, 0xd4, 0xbb, 0x6f, 0x37, 0x4c, 0x4a, 0x56, 0xc0, 0xa1, 0x33, 0x72, 0x4e, 0xef,
+	0x8e, 0x0f, 0x7e, 0x51, 0xf7, 0xea, 0x9e, 0x65, 0x2e, 0x59, 0x01, 0x4f, 0xbf, 0xba, 0x5e, 0xb0,
+	0xc3, 0xe8, 0xad, 0xb9, 0x80, 0xff, 0xdb, 0xf1, 0x1e, 0xec, 0x8e, 0xf2, 0x5f, 0xa0, 0x7d, 0xe7,
+	0x43, 0xb7, 0x2e, 0x19, 0x9c, 0x0f, 0x1a, 0xf4, 0xd7, 0x45, 0x3b, 0xc6, 0x8f, 0x2f, 0x7f, 0xd2,
+	0xed, 0xd7, 0x7d, 0xfa, 0xf1, 0xe7, 0x8b, 0xfb, 0xcc, 0x3f, 0x6f, 0x8b, 0xf9, 0xb0, 0xc5, 0x5c,
+	0xa4, 0x73, 0x5d, 0xcb, 0x02, 0x94, 0xc6, 0x67, 0xab, 0xa6, 0xfe, 0xf3, 0xd2, 0xf8, 0xec, 0x63,
+	0xf0, 0x68, 0x49, 0x0f, 0xd7, 0xf1, 0x1d, 0xaa, 0x84, 0x46, 0xa9, 0x2c, 0xc6, 0x9f, 0x5d, 0xef,
+	0x24, 0x95, 0xc5, 0xde, 0xb7, 0x8e, 0x8f, 0x86, 0xaf, 0x38, 0x6d, 0x4b, 0x9b, 0x3a, 0xef, 0x5e,
+	0x77, 0x26, 0x99, 0xcc, 0x59, 0x99, 0x21, 0xa9, 0x32, 0x9c, 0x41, 0xb9, 0xaa, 0x14, 0xaf, 0x63,
+	0x87, 0x7f, 0xea, 0xe7, 0x16, 0x7c, 0x73, 0x0f, 0x26, 0x94, 0x7e, 0x77, 0x47, 0x13, 0x63, 0x48,
+	0xb9, 0x46, 0x06, 0xb6, 0x28, 0x0a, 0x51, 0x17, 0xac, 0x97, 0x56, 0x12, 0x53, 0xae, 0xe3, 0x5e,
+	0x12, 0x47, 0x61, 0x6c, 0x25, 0x7f, 0xdd, 0x13, 0xf3, 0x9d, 0x10, 0xca, 0x35, 0x21, 0xbd, 0x88,
+	0x90, 0x28, 0x24, 0xc4, 0xca, 0xae, 0xef, 0xac, 0xf6, 0x0c, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x7e, 0xa7, 0x70, 0x6c, 0x7b, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FeedPlaceholderViewServiceClient is the client API for FeedPlaceholderViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedPlaceholderViewServiceClient interface {
+	// Returns the requested feed placeholder view in full detail.
+	GetFeedPlaceholderView(ctx context.Context, in *GetFeedPlaceholderViewRequest, opts ...grpc.CallOption) (*resources.FeedPlaceholderView, error)
+}
+
+type feedPlaceholderViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewFeedPlaceholderViewServiceClient(cc grpc.ClientConnInterface) FeedPlaceholderViewServiceClient {
+	return &feedPlaceholderViewServiceClient{cc}
+}
+
+func (c *feedPlaceholderViewServiceClient) GetFeedPlaceholderView(ctx context.Context, in *GetFeedPlaceholderViewRequest, opts ...grpc.CallOption) (*resources.FeedPlaceholderView, error) {
+	out := new(resources.FeedPlaceholderView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedPlaceholderViewService/GetFeedPlaceholderView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedPlaceholderViewServiceServer is the server API for FeedPlaceholderViewService service.
+type FeedPlaceholderViewServiceServer interface {
+	// Returns the requested feed placeholder view in full detail.
+	GetFeedPlaceholderView(context.Context, *GetFeedPlaceholderViewRequest) (*resources.FeedPlaceholderView, error)
+}
+
+// UnimplementedFeedPlaceholderViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFeedPlaceholderViewServiceServer struct {
+}
+
+func (*UnimplementedFeedPlaceholderViewServiceServer) GetFeedPlaceholderView(ctx context.Context, req *GetFeedPlaceholderViewRequest) (*resources.FeedPlaceholderView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetFeedPlaceholderView not implemented")
+}
+
+func RegisterFeedPlaceholderViewServiceServer(s *grpc.Server, srv FeedPlaceholderViewServiceServer) {
+	s.RegisterService(&_FeedPlaceholderViewService_serviceDesc, srv)
+}
+
+func _FeedPlaceholderViewService_GetFeedPlaceholderView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedPlaceholderViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedPlaceholderViewServiceServer).GetFeedPlaceholderView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedPlaceholderViewService/GetFeedPlaceholderView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedPlaceholderViewServiceServer).GetFeedPlaceholderView(ctx, req.(*GetFeedPlaceholderViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedPlaceholderViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.FeedPlaceholderViewService",
+	HandlerType: (*FeedPlaceholderViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedPlaceholderView",
+			Handler:    _FeedPlaceholderViewService_GetFeedPlaceholderView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/feed_placeholder_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/feed_service.pb.go b/googleapis/ads/googleads/v3/services/feed_service.pb.go
new file mode 100644
index 0000000..ff21c5e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/feed_service.pb.go
@@ -0,0 +1,529 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/feed_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [FeedService.GetFeed][google.ads.googleads.v3.services.FeedService.GetFeed].
+type GetFeedRequest struct {
+	// Required. The resource name of the feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedRequest) Reset()         { *m = GetFeedRequest{} }
+func (m *GetFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedRequest) ProtoMessage()    {}
+func (*GetFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b4d1072354ada7f, []int{0}
+}
+
+func (m *GetFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedRequest.Unmarshal(m, b)
+}
+func (m *GetFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedRequest.Marshal(b, m, deterministic)
+}
+func (m *GetFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedRequest.Merge(m, src)
+}
+func (m *GetFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedRequest.Size(m)
+}
+func (m *GetFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedRequest proto.InternalMessageInfo
+
+func (m *GetFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedService.MutateFeeds][google.ads.googleads.v3.services.FeedService.MutateFeeds].
+type MutateFeedsRequest struct {
+	// Required. The ID of the customer whose feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual feeds.
+	Operations []*FeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedsRequest) Reset()         { *m = MutateFeedsRequest{} }
+func (m *MutateFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedsRequest) ProtoMessage()    {}
+func (*MutateFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b4d1072354ada7f, []int{1}
+}
+
+func (m *MutateFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedsRequest.Merge(m, src)
+}
+func (m *MutateFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedsRequest.Size(m)
+}
+func (m *MutateFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedsRequest) GetOperations() []*FeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateFeedsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateFeedsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an feed.
+type FeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedOperation_Create
+	//	*FeedOperation_Update
+	//	*FeedOperation_Remove
+	Operation            isFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *FeedOperation) Reset()         { *m = FeedOperation{} }
+func (m *FeedOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedOperation) ProtoMessage()    {}
+func (*FeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b4d1072354ada7f, []int{2}
+}
+
+func (m *FeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedOperation.Unmarshal(m, b)
+}
+func (m *FeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedOperation.Marshal(b, m, deterministic)
+}
+func (m *FeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedOperation.Merge(m, src)
+}
+func (m *FeedOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedOperation.Size(m)
+}
+func (m *FeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedOperation proto.InternalMessageInfo
+
+func (m *FeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isFeedOperation_Operation interface {
+	isFeedOperation_Operation()
+}
+
+type FeedOperation_Create struct {
+	Create *resources.Feed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedOperation_Update struct {
+	Update *resources.Feed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type FeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedOperation_Create) isFeedOperation_Operation() {}
+
+func (*FeedOperation_Update) isFeedOperation_Operation() {}
+
+func (*FeedOperation_Remove) isFeedOperation_Operation() {}
+
+func (m *FeedOperation) GetOperation() isFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetCreate() *resources.Feed {
+	if x, ok := m.GetOperation().(*FeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetUpdate() *resources.Feed {
+	if x, ok := m.GetOperation().(*FeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*FeedOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*FeedOperation_Create)(nil),
+		(*FeedOperation_Update)(nil),
+		(*FeedOperation_Remove)(nil),
+	}
+}
+
+// Response message for an feed mutate.
+type MutateFeedsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *MutateFeedsResponse) Reset()         { *m = MutateFeedsResponse{} }
+func (m *MutateFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedsResponse) ProtoMessage()    {}
+func (*MutateFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b4d1072354ada7f, []int{3}
+}
+
+func (m *MutateFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedsResponse.Merge(m, src)
+}
+func (m *MutateFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedsResponse.Size(m)
+}
+func (m *MutateFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateFeedsResponse) GetResults() []*MutateFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed mutate.
+type MutateFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedResult) Reset()         { *m = MutateFeedResult{} }
+func (m *MutateFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedResult) ProtoMessage()    {}
+func (*MutateFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4b4d1072354ada7f, []int{4}
+}
+
+func (m *MutateFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedResult.Unmarshal(m, b)
+}
+func (m *MutateFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedResult.Marshal(b, m, deterministic)
+}
+func (m *MutateFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedResult.Merge(m, src)
+}
+func (m *MutateFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedResult.Size(m)
+}
+func (m *MutateFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedResult proto.InternalMessageInfo
+
+func (m *MutateFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedRequest)(nil), "google.ads.googleads.v3.services.GetFeedRequest")
+	proto.RegisterType((*MutateFeedsRequest)(nil), "google.ads.googleads.v3.services.MutateFeedsRequest")
+	proto.RegisterType((*FeedOperation)(nil), "google.ads.googleads.v3.services.FeedOperation")
+	proto.RegisterType((*MutateFeedsResponse)(nil), "google.ads.googleads.v3.services.MutateFeedsResponse")
+	proto.RegisterType((*MutateFeedResult)(nil), "google.ads.googleads.v3.services.MutateFeedResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/feed_service.proto", fileDescriptor_4b4d1072354ada7f)
+}
+
+var fileDescriptor_4b4d1072354ada7f = []byte{
+	// 745 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xcd, 0x6a, 0xdb, 0x4a,
+	0x14, 0xbe, 0xb2, 0x2f, 0xc9, 0xcd, 0x28, 0xc9, 0x0d, 0x13, 0xee, 0xad, 0x71, 0x0b, 0x35, 0x6a,
+	0x20, 0xae, 0x09, 0x52, 0xb1, 0x5b, 0x0a, 0x0a, 0xa1, 0xc8, 0x50, 0x27, 0x85, 0xe6, 0x07, 0xa5,
+	0x64, 0x51, 0x0c, 0x66, 0x22, 0x8d, 0x5d, 0x11, 0x49, 0xa3, 0xce, 0x8c, 0x0c, 0x21, 0x64, 0xd3,
+	0x57, 0xe8, 0x03, 0x14, 0x0a, 0xdd, 0xb4, 0x6f, 0x92, 0x6d, 0x77, 0x59, 0x94, 0x2e, 0xba, 0xea,
+	0x0b, 0x94, 0xee, 0xca, 0x68, 0x66, 0xfc, 0x13, 0x1a, 0xdc, 0xec, 0x8e, 0xe6, 0x7c, 0xdf, 0x77,
+	0xce, 0x7c, 0x67, 0x8e, 0x0d, 0x5a, 0x03, 0x42, 0x06, 0x31, 0x76, 0x50, 0xc8, 0x1c, 0x19, 0x8a,
+	0x68, 0xd8, 0x72, 0x18, 0xa6, 0xc3, 0x28, 0xc0, 0xcc, 0xe9, 0x63, 0x1c, 0xf6, 0xd4, 0x97, 0x9d,
+	0x51, 0xc2, 0x09, 0xac, 0x49, 0xa4, 0x8d, 0x42, 0x66, 0x8f, 0x48, 0xf6, 0xb0, 0x65, 0x6b, 0x52,
+	0x75, 0xe3, 0x3a, 0x59, 0x8a, 0x19, 0xc9, 0xa9, 0xd6, 0x95, 0x7a, 0xd5, 0x3b, 0x1a, 0x9d, 0x45,
+	0x0e, 0x4a, 0x53, 0xc2, 0x11, 0x8f, 0x48, 0xca, 0x54, 0xf6, 0xd6, 0x44, 0x36, 0x88, 0x23, 0x9c,
+	0x72, 0x95, 0xb8, 0x3b, 0x91, 0xe8, 0x47, 0x38, 0x0e, 0x7b, 0xc7, 0xf8, 0x15, 0x1a, 0x46, 0x84,
+	0x2a, 0x80, 0xea, 0xd3, 0x29, 0xbe, 0x8e, 0xf3, 0xbe, 0x42, 0x25, 0x88, 0x9d, 0x5c, 0xd1, 0xa6,
+	0x59, 0xe0, 0x30, 0x8e, 0x78, 0xae, 0x8a, 0x5a, 0x2e, 0x58, 0xde, 0xc6, 0xbc, 0x83, 0x71, 0xe8,
+	0xe3, 0xd7, 0x39, 0x66, 0x1c, 0xd6, 0xc1, 0x92, 0x6e, 0xbe, 0x97, 0xa2, 0x04, 0x57, 0x8c, 0x9a,
+	0x51, 0x5f, 0x68, 0x97, 0xbf, 0x7a, 0x25, 0x7f, 0x51, 0x67, 0xf6, 0x50, 0x82, 0xad, 0x2f, 0x06,
+	0x80, 0xbb, 0x39, 0x47, 0x1c, 0x0b, 0x3e, 0xd3, 0x02, 0x6b, 0xc0, 0x0c, 0x72, 0xc6, 0x49, 0x82,
+	0x69, 0x2f, 0x0a, 0x27, 0xe9, 0x40, 0x9f, 0x3f, 0x0b, 0xe1, 0x0b, 0x00, 0x48, 0x86, 0xa9, 0x74,
+	0xa0, 0x52, 0xaa, 0x95, 0xeb, 0x66, 0xd3, 0xb1, 0x67, 0x19, 0x6e, 0x8b, 0x4a, 0xfb, 0x9a, 0xa7,
+	0x54, 0xc7, 0x3a, 0x70, 0x1d, 0xfc, 0x9b, 0x21, 0xca, 0x23, 0x14, 0xf7, 0xfa, 0x28, 0x8a, 0x73,
+	0x8a, 0x2b, 0xe5, 0x9a, 0x51, 0xff, 0xc7, 0x5f, 0x56, 0xc7, 0x1d, 0x79, 0x0a, 0xef, 0x81, 0xa5,
+	0x21, 0x8a, 0xa3, 0x10, 0x71, 0xdc, 0x23, 0x69, 0x7c, 0x5a, 0xf9, 0xbb, 0x80, 0x2d, 0xea, 0xc3,
+	0xfd, 0x34, 0x3e, 0xb5, 0x7e, 0x1a, 0x60, 0x69, 0xaa, 0x20, 0xdc, 0x04, 0x66, 0x9e, 0x15, 0x24,
+	0x61, 0x6e, 0x41, 0x32, 0x9b, 0x55, 0xdd, 0xb6, 0xf6, 0xdf, 0xee, 0x08, 0xff, 0x77, 0x11, 0x3b,
+	0xf1, 0x81, 0x84, 0x8b, 0x18, 0x7a, 0x60, 0x2e, 0xa0, 0x18, 0x71, 0x69, 0xa9, 0xd9, 0x5c, 0xbf,
+	0xf6, 0xba, 0xa3, 0xd7, 0x53, 0xdc, 0x77, 0xe7, 0x2f, 0x5f, 0x11, 0x85, 0x84, 0x14, 0xac, 0x94,
+	0x6e, 0x2c, 0x21, 0x89, 0xb0, 0x02, 0xe6, 0x28, 0x4e, 0xc8, 0x50, 0x3a, 0xb3, 0x20, 0x32, 0xf2,
+	0xbb, 0x6d, 0x82, 0x85, 0x91, 0x95, 0xd6, 0x27, 0x03, 0xac, 0x4e, 0x0d, 0x97, 0x65, 0x24, 0x65,
+	0x18, 0x76, 0xc0, 0x7f, 0x57, 0x1c, 0xee, 0x61, 0x4a, 0x09, 0x2d, 0xd4, 0xcc, 0x26, 0xd4, 0x0d,
+	0xd1, 0x2c, 0xb0, 0x0f, 0x8b, 0x97, 0xe6, 0xaf, 0x4e, 0x7b, 0xff, 0x54, 0xc0, 0xe1, 0x73, 0x30,
+	0x4f, 0x31, 0xcb, 0x63, 0xae, 0x87, 0xdf, 0x9c, 0x3d, 0xfc, 0x71, 0x3f, 0x7e, 0x41, 0xf5, 0xb5,
+	0x84, 0xf5, 0x18, 0xac, 0x5c, 0x4d, 0x8a, 0x11, 0xff, 0xe6, 0x21, 0x4f, 0xbf, 0xe1, 0xe6, 0xbb,
+	0x32, 0x30, 0x05, 0xe7, 0x50, 0xd6, 0x80, 0x1f, 0x0c, 0x30, 0xaf, 0x16, 0x02, 0x3e, 0x98, 0xdd,
+	0xd1, 0xf4, 0xee, 0x54, 0xff, 0x74, 0x1c, 0xd6, 0x93, 0x4b, 0x6f, 0xba, 0xb9, 0x37, 0x9f, 0xbf,
+	0xbd, 0x2d, 0xdd, 0x87, 0xeb, 0xe2, 0xb7, 0xe3, 0x6c, 0x2a, 0xb3, 0xa5, 0x97, 0x86, 0x39, 0x8d,
+	0xe2, 0xc7, 0x84, 0x39, 0x8d, 0x73, 0x78, 0x61, 0x00, 0x73, 0x62, 0x3c, 0xf0, 0xe1, 0x4d, 0xdc,
+	0xd3, 0xab, 0x5a, 0x7d, 0x74, 0x43, 0x96, 0x7c, 0x03, 0xd6, 0xde, 0xa5, 0xf7, 0xff, 0xc4, 0x8a,
+	0x6f, 0x8c, 0x17, 0xb0, 0xb8, 0x86, 0x63, 0x35, 0xc4, 0x35, 0xc6, 0x7d, 0x9f, 0x4d, 0x80, 0xb7,
+	0x1a, 0xe7, 0xf2, 0x16, 0x6e, 0x52, 0x28, 0xbb, 0x46, 0xa3, 0x7a, 0xfb, 0xc2, 0xab, 0x8c, 0xab,
+	0xab, 0x28, 0x8b, 0x98, 0x1d, 0x90, 0xa4, 0xfd, 0xc3, 0x00, 0x6b, 0x01, 0x49, 0x66, 0x76, 0xda,
+	0x5e, 0x99, 0x98, 0xe3, 0x81, 0xd8, 0xc4, 0x03, 0xe3, 0xe5, 0x8e, 0x62, 0x0d, 0x48, 0x8c, 0xd2,
+	0x81, 0x4d, 0xe8, 0xc0, 0x19, 0xe0, 0xb4, 0xd8, 0x53, 0x67, 0x5c, 0xe7, 0xfa, 0x7f, 0x85, 0x4d,
+	0x1d, 0xbc, 0x2f, 0x95, 0xb7, 0x3d, 0xef, 0x63, 0xa9, 0xb6, 0x2d, 0x05, 0xbd, 0x90, 0xd9, 0x32,
+	0x14, 0xd1, 0x51, 0xcb, 0x56, 0x85, 0xd9, 0x85, 0x86, 0x74, 0xbd, 0x90, 0x75, 0x47, 0x90, 0xee,
+	0x51, 0xab, 0xab, 0x21, 0xdf, 0x4b, 0x6b, 0xf2, 0xdc, 0x75, 0xbd, 0x90, 0xb9, 0xee, 0x08, 0xe4,
+	0xba, 0x47, 0x2d, 0xd7, 0xd5, 0xb0, 0xe3, 0xb9, 0xa2, 0xcf, 0xd6, 0xaf, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x43, 0xb9, 0x76, 0xde, 0xbc, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FeedServiceClient is the client API for FeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedServiceClient interface {
+	// Returns the requested feed in full detail.
+	GetFeed(ctx context.Context, in *GetFeedRequest, opts ...grpc.CallOption) (*resources.Feed, error)
+	// Creates, updates, or removes feeds. Operation statuses are
+	// returned.
+	MutateFeeds(ctx context.Context, in *MutateFeedsRequest, opts ...grpc.CallOption) (*MutateFeedsResponse, error)
+}
+
+type feedServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewFeedServiceClient(cc grpc.ClientConnInterface) FeedServiceClient {
+	return &feedServiceClient{cc}
+}
+
+func (c *feedServiceClient) GetFeed(ctx context.Context, in *GetFeedRequest, opts ...grpc.CallOption) (*resources.Feed, error) {
+	out := new(resources.Feed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedService/GetFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedServiceClient) MutateFeeds(ctx context.Context, in *MutateFeedsRequest, opts ...grpc.CallOption) (*MutateFeedsResponse, error) {
+	out := new(MutateFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.FeedService/MutateFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedServiceServer is the server API for FeedService service.
+type FeedServiceServer interface {
+	// Returns the requested feed in full detail.
+	GetFeed(context.Context, *GetFeedRequest) (*resources.Feed, error)
+	// Creates, updates, or removes feeds. Operation statuses are
+	// returned.
+	MutateFeeds(context.Context, *MutateFeedsRequest) (*MutateFeedsResponse, error)
+}
+
+// UnimplementedFeedServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFeedServiceServer struct {
+}
+
+func (*UnimplementedFeedServiceServer) GetFeed(ctx context.Context, req *GetFeedRequest) (*resources.Feed, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetFeed not implemented")
+}
+func (*UnimplementedFeedServiceServer) MutateFeeds(ctx context.Context, req *MutateFeedsRequest) (*MutateFeedsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateFeeds not implemented")
+}
+
+func RegisterFeedServiceServer(s *grpc.Server, srv FeedServiceServer) {
+	s.RegisterService(&_FeedService_serviceDesc, srv)
+}
+
+func _FeedService_GetFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedServiceServer).GetFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedService/GetFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedServiceServer).GetFeed(ctx, req.(*GetFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedService_MutateFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedServiceServer).MutateFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.FeedService/MutateFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedServiceServer).MutateFeeds(ctx, req.(*MutateFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.FeedService",
+	HandlerType: (*FeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeed",
+			Handler:    _FeedService_GetFeed_Handler,
+		},
+		{
+			MethodName: "MutateFeeds",
+			Handler:    _FeedService_MutateFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/feed_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/gender_view_service.pb.go b/googleapis/ads/googleads/v3/services/gender_view_service.pb.go
new file mode 100644
index 0000000..b6e3b93
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/gender_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/gender_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GenderViewService.GetGenderView][google.ads.googleads.v3.services.GenderViewService.GetGenderView].
+type GetGenderViewRequest struct {
+	// Required. The resource name of the gender view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGenderViewRequest) Reset()         { *m = GetGenderViewRequest{} }
+func (m *GetGenderViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGenderViewRequest) ProtoMessage()    {}
+func (*GetGenderViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_75bfb9a4f4d1dcee, []int{0}
+}
+
+func (m *GetGenderViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGenderViewRequest.Unmarshal(m, b)
+}
+func (m *GetGenderViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGenderViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetGenderViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGenderViewRequest.Merge(m, src)
+}
+func (m *GetGenderViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGenderViewRequest.Size(m)
+}
+func (m *GetGenderViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGenderViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGenderViewRequest proto.InternalMessageInfo
+
+func (m *GetGenderViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetGenderViewRequest)(nil), "google.ads.googleads.v3.services.GetGenderViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/gender_view_service.proto", fileDescriptor_75bfb9a4f4d1dcee)
+}
+
+var fileDescriptor_75bfb9a4f4d1dcee = []byte{
+	// 409 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0xeb, 0xd3, 0x40,
+	0x18, 0x26, 0xf9, 0x81, 0x60, 0xb0, 0x83, 0x41, 0xb4, 0x44, 0xc1, 0x52, 0x3a, 0x94, 0x42, 0xef,
+	0xc0, 0x80, 0xc3, 0x89, 0xe0, 0x15, 0x24, 0x4e, 0x52, 0x2a, 0x64, 0x90, 0x40, 0xb8, 0x26, 0xaf,
+	0xf1, 0x20, 0xc9, 0xd5, 0xbb, 0x34, 0x1d, 0xc4, 0xc5, 0xaf, 0xe0, 0x37, 0x70, 0xf4, 0x3b, 0xf8,
+	0x05, 0xba, 0xba, 0x39, 0x39, 0x38, 0x39, 0xf9, 0x05, 0x04, 0x49, 0x2f, 0x97, 0xb4, 0xfa, 0x2b,
+	0xdd, 0x1e, 0xee, 0xf9, 0xf3, 0xbe, 0xef, 0x93, 0x38, 0x24, 0x13, 0x22, 0xcb, 0x01, 0xb3, 0x54,
+	0x61, 0x0d, 0x1b, 0x54, 0xfb, 0x58, 0x81, 0xac, 0x79, 0x02, 0x0a, 0x67, 0x50, 0xa6, 0x20, 0xe3,
+	0x9a, 0xc3, 0x2e, 0x6e, 0x1f, 0xd1, 0x46, 0x8a, 0x4a, 0xb8, 0x23, 0x6d, 0x40, 0x2c, 0x55, 0xa8,
+	0xf3, 0xa2, 0xda, 0x47, 0xc6, 0xeb, 0xf9, 0xe7, 0xd2, 0x25, 0x28, 0xb1, 0x95, 0xff, 0xc4, 0xeb,
+	0x58, 0xef, 0x81, 0x31, 0x6d, 0x38, 0x66, 0x65, 0x29, 0x2a, 0x56, 0x71, 0x51, 0xaa, 0x96, 0xbd,
+	0x77, 0xc4, 0x26, 0x39, 0x87, 0xb2, 0x6a, 0x89, 0x87, 0x47, 0xc4, 0x1b, 0x0e, 0x79, 0x1a, 0xaf,
+	0xe1, 0x2d, 0xab, 0xb9, 0x90, 0x5a, 0x30, 0x7e, 0xe6, 0xdc, 0x09, 0xa0, 0x0a, 0x0e, 0xf3, 0x42,
+	0x0e, 0xbb, 0x15, 0xbc, 0xdb, 0x82, 0xaa, 0xdc, 0xa9, 0x33, 0x30, 0xeb, 0xc4, 0x25, 0x2b, 0x60,
+	0x68, 0x8d, 0xac, 0xe9, 0xcd, 0xc5, 0xd5, 0x0f, 0x6a, 0xaf, 0x6e, 0x19, 0xe6, 0x25, 0x2b, 0xe0,
+	0xd1, 0x6f, 0xcb, 0xb9, 0xdd, 0xfb, 0x5f, 0xe9, 0x2b, 0xdd, 0xaf, 0x96, 0x33, 0x38, 0x09, 0x76,
+	0x1f, 0xa3, 0x4b, 0xcd, 0xa0, 0xeb, 0x36, 0xf1, 0xe6, 0x67, 0x7d, 0x5d, 0x5f, 0xa8, 0x77, 0x8d,
+	0x9f, 0x7f, 0xa7, 0xa7, 0x9b, 0x7f, 0xfc, 0xf6, 0xf3, 0x93, 0x8d, 0xdd, 0x79, 0xd3, 0xf0, 0xfb,
+	0x13, 0xe6, 0x69, 0xb2, 0x55, 0x95, 0x28, 0x40, 0x2a, 0x3c, 0x6b, 0x2b, 0x6f, 0x22, 0x14, 0x9e,
+	0x7d, 0xf0, 0xee, 0xef, 0xe9, 0xb0, 0x1f, 0xd6, 0xa2, 0x0d, 0x57, 0x28, 0x11, 0xc5, 0xe2, 0x8f,
+	0xe5, 0x4c, 0x12, 0x51, 0x5c, 0x3c, 0x68, 0x71, 0xf7, 0xbf, 0x62, 0x96, 0x4d, 0xeb, 0x4b, 0xeb,
+	0xf5, 0x8b, 0xd6, 0x9b, 0x89, 0x9c, 0x95, 0x19, 0x12, 0x32, 0x6b, 0x36, 0x38, 0x7c, 0x13, 0xdc,
+	0x4f, 0x3b, 0xff, 0x07, 0x3e, 0x31, 0xe0, 0xb3, 0x7d, 0x15, 0x50, 0xfa, 0xc5, 0x1e, 0x05, 0x3a,
+	0x90, 0xa6, 0x0a, 0x69, 0xd8, 0xa0, 0xd0, 0x47, 0xed, 0x60, 0xb5, 0x37, 0x92, 0x88, 0xa6, 0x2a,
+	0xea, 0x24, 0x51, 0xe8, 0x47, 0x46, 0xf2, 0xcb, 0x9e, 0xe8, 0x77, 0x42, 0x68, 0xaa, 0x08, 0xe9,
+	0x44, 0x84, 0x84, 0x3e, 0x21, 0x46, 0xb6, 0xbe, 0x71, 0xd8, 0xd3, 0xff, 0x1b, 0x00, 0x00, 0xff,
+	0xff, 0xfd, 0xf5, 0x10, 0xad, 0x28, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GenderViewServiceClient is the client API for GenderViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GenderViewServiceClient interface {
+	// Returns the requested gender view in full detail.
+	GetGenderView(ctx context.Context, in *GetGenderViewRequest, opts ...grpc.CallOption) (*resources.GenderView, error)
+}
+
+type genderViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGenderViewServiceClient(cc grpc.ClientConnInterface) GenderViewServiceClient {
+	return &genderViewServiceClient{cc}
+}
+
+func (c *genderViewServiceClient) GetGenderView(ctx context.Context, in *GetGenderViewRequest, opts ...grpc.CallOption) (*resources.GenderView, error) {
+	out := new(resources.GenderView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GenderViewService/GetGenderView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GenderViewServiceServer is the server API for GenderViewService service.
+type GenderViewServiceServer interface {
+	// Returns the requested gender view in full detail.
+	GetGenderView(context.Context, *GetGenderViewRequest) (*resources.GenderView, error)
+}
+
+// UnimplementedGenderViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGenderViewServiceServer struct {
+}
+
+func (*UnimplementedGenderViewServiceServer) GetGenderView(ctx context.Context, req *GetGenderViewRequest) (*resources.GenderView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetGenderView not implemented")
+}
+
+func RegisterGenderViewServiceServer(s *grpc.Server, srv GenderViewServiceServer) {
+	s.RegisterService(&_GenderViewService_serviceDesc, srv)
+}
+
+func _GenderViewService_GetGenderView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGenderViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GenderViewServiceServer).GetGenderView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GenderViewService/GetGenderView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GenderViewServiceServer).GetGenderView(ctx, req.(*GetGenderViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GenderViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GenderViewService",
+	HandlerType: (*GenderViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGenderView",
+			Handler:    _GenderViewService_GetGenderView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/gender_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/geo_target_constant_service.pb.go b/googleapis/ads/googleads/v3/services/geo_target_constant_service.pb.go
new file mode 100644
index 0000000..b5f5001
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/geo_target_constant_service.pb.go
@@ -0,0 +1,572 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/geo_target_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GeoTargetConstantService.GetGeoTargetConstant][google.ads.googleads.v3.services.GeoTargetConstantService.GetGeoTargetConstant].
+type GetGeoTargetConstantRequest struct {
+	// Required. The resource name of the geo target constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGeoTargetConstantRequest) Reset()         { *m = GetGeoTargetConstantRequest{} }
+func (m *GetGeoTargetConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGeoTargetConstantRequest) ProtoMessage()    {}
+func (*GetGeoTargetConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{0}
+}
+
+func (m *GetGeoTargetConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Unmarshal(m, b)
+}
+func (m *GetGeoTargetConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetGeoTargetConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGeoTargetConstantRequest.Merge(m, src)
+}
+func (m *GetGeoTargetConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Size(m)
+}
+func (m *GetGeoTargetConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGeoTargetConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGeoTargetConstantRequest proto.InternalMessageInfo
+
+func (m *GetGeoTargetConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [GeoTargetConstantService.SuggestGeoTargetConstantsRequest][].
+type SuggestGeoTargetConstantsRequest struct {
+	// If possible, returned geo targets are translated using this locale. If not,
+	// en is used by default. This is also used as a hint for returned geo
+	// targets.
+	Locale *wrappers.StringValue `protobuf:"bytes,3,opt,name=locale,proto3" json:"locale,omitempty"`
+	// Returned geo targets are restricted to this country code.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Required. A selector of geo target constants.
+	//
+	// Types that are valid to be assigned to Query:
+	//	*SuggestGeoTargetConstantsRequest_LocationNames_
+	//	*SuggestGeoTargetConstantsRequest_GeoTargets_
+	Query                isSuggestGeoTargetConstantsRequest_Query `protobuf_oneof:"query"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest) Reset()         { *m = SuggestGeoTargetConstantsRequest{} }
+func (m *SuggestGeoTargetConstantsRequest) String() string { return proto.CompactTextString(m) }
+func (*SuggestGeoTargetConstantsRequest) ProtoMessage()    {}
+func (*SuggestGeoTargetConstantsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{1}
+}
+
+func (m *SuggestGeoTargetConstantsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Marshal(b, m, deterministic)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest.Merge(m, src)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest) GetLocale() *wrappers.StringValue {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+type isSuggestGeoTargetConstantsRequest_Query interface {
+	isSuggestGeoTargetConstantsRequest_Query()
+}
+
+type SuggestGeoTargetConstantsRequest_LocationNames_ struct {
+	LocationNames *SuggestGeoTargetConstantsRequest_LocationNames `protobuf:"bytes,1,opt,name=location_names,json=locationNames,proto3,oneof"`
+}
+
+type SuggestGeoTargetConstantsRequest_GeoTargets_ struct {
+	GeoTargets *SuggestGeoTargetConstantsRequest_GeoTargets `protobuf:"bytes,2,opt,name=geo_targets,json=geoTargets,proto3,oneof"`
+}
+
+func (*SuggestGeoTargetConstantsRequest_LocationNames_) isSuggestGeoTargetConstantsRequest_Query() {}
+
+func (*SuggestGeoTargetConstantsRequest_GeoTargets_) isSuggestGeoTargetConstantsRequest_Query() {}
+
+func (m *SuggestGeoTargetConstantsRequest) GetQuery() isSuggestGeoTargetConstantsRequest_Query {
+	if m != nil {
+		return m.Query
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetLocationNames() *SuggestGeoTargetConstantsRequest_LocationNames {
+	if x, ok := m.GetQuery().(*SuggestGeoTargetConstantsRequest_LocationNames_); ok {
+		return x.LocationNames
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetGeoTargets() *SuggestGeoTargetConstantsRequest_GeoTargets {
+	if x, ok := m.GetQuery().(*SuggestGeoTargetConstantsRequest_GeoTargets_); ok {
+		return x.GeoTargets
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SuggestGeoTargetConstantsRequest) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*SuggestGeoTargetConstantsRequest_LocationNames_)(nil),
+		(*SuggestGeoTargetConstantsRequest_GeoTargets_)(nil),
+	}
+}
+
+// A list of location names.
+type SuggestGeoTargetConstantsRequest_LocationNames struct {
+	// A list of location names.
+	Names                []*wrappers.StringValue `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) Reset() {
+	*m = SuggestGeoTargetConstantsRequest_LocationNames{}
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) String() string {
+	return proto.CompactTextString(m)
+}
+func (*SuggestGeoTargetConstantsRequest_LocationNames) ProtoMessage() {}
+func (*SuggestGeoTargetConstantsRequest_LocationNames) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{1, 0}
+}
+
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Marshal(b, m, deterministic)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Merge(m, src)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) GetNames() []*wrappers.StringValue {
+	if m != nil {
+		return m.Names
+	}
+	return nil
+}
+
+// A list of geo target constant resource names.
+type SuggestGeoTargetConstantsRequest_GeoTargets struct {
+	// A list of geo target constant resource names.
+	GeoTargetConstants   []*wrappers.StringValue `protobuf:"bytes,1,rep,name=geo_target_constants,json=geoTargetConstants,proto3" json:"geo_target_constants,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) Reset() {
+	*m = SuggestGeoTargetConstantsRequest_GeoTargets{}
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) String() string {
+	return proto.CompactTextString(m)
+}
+func (*SuggestGeoTargetConstantsRequest_GeoTargets) ProtoMessage() {}
+func (*SuggestGeoTargetConstantsRequest_GeoTargets) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{1, 1}
+}
+
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Marshal(b, m, deterministic)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Merge(m, src)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) GetGeoTargetConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstants
+	}
+	return nil
+}
+
+// Response message for [GeoTargetConstantService.SuggestGeoTargetConstants][google.ads.googleads.v3.services.GeoTargetConstantService.SuggestGeoTargetConstants]
+type SuggestGeoTargetConstantsResponse struct {
+	// Geo target constant suggestions.
+	GeoTargetConstantSuggestions []*GeoTargetConstantSuggestion `protobuf:"bytes,1,rep,name=geo_target_constant_suggestions,json=geoTargetConstantSuggestions,proto3" json:"geo_target_constant_suggestions,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}                       `json:"-"`
+	XXX_unrecognized             []byte                         `json:"-"`
+	XXX_sizecache                int32                          `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsResponse) Reset()         { *m = SuggestGeoTargetConstantsResponse{} }
+func (m *SuggestGeoTargetConstantsResponse) String() string { return proto.CompactTextString(m) }
+func (*SuggestGeoTargetConstantsResponse) ProtoMessage()    {}
+func (*SuggestGeoTargetConstantsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{2}
+}
+
+func (m *SuggestGeoTargetConstantsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Marshal(b, m, deterministic)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsResponse.Merge(m, src)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Size(m)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsResponse proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsResponse) GetGeoTargetConstantSuggestions() []*GeoTargetConstantSuggestion {
+	if m != nil {
+		return m.GeoTargetConstantSuggestions
+	}
+	return nil
+}
+
+// A geo target constant suggestion.
+type GeoTargetConstantSuggestion struct {
+	// The language this GeoTargetConstantSuggestion is currently translated to.
+	// It affects the name of geo target fields. For example, if locale=en, then
+	// name=Spain. If locale=es, then name=España. The default locale will be
+	// returned if no translation exists for the locale in the request.
+	Locale *wrappers.StringValue `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
+	// Approximate user population that will be targeted, rounded to the
+	// nearest 100.
+	Reach *wrappers.Int64Value `protobuf:"bytes,2,opt,name=reach,proto3" json:"reach,omitempty"`
+	// If the request searched by location name, this is the location name that
+	// matched the geo target.
+	SearchTerm *wrappers.StringValue `protobuf:"bytes,3,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	// The GeoTargetConstant result.
+	GeoTargetConstant *resources.GeoTargetConstant `protobuf:"bytes,4,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	// The list of parents of the geo target constant.
+	GeoTargetConstantParents []*resources.GeoTargetConstant `protobuf:"bytes,5,rep,name=geo_target_constant_parents,json=geoTargetConstantParents,proto3" json:"geo_target_constant_parents,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                       `json:"-"`
+	XXX_unrecognized         []byte                         `json:"-"`
+	XXX_sizecache            int32                          `json:"-"`
+}
+
+func (m *GeoTargetConstantSuggestion) Reset()         { *m = GeoTargetConstantSuggestion{} }
+func (m *GeoTargetConstantSuggestion) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantSuggestion) ProtoMessage()    {}
+func (*GeoTargetConstantSuggestion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f7e25d1f3e9af1ca, []int{3}
+}
+
+func (m *GeoTargetConstantSuggestion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantSuggestion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Marshal(b, m, deterministic)
+}
+func (m *GeoTargetConstantSuggestion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantSuggestion.Merge(m, src)
+}
+func (m *GeoTargetConstantSuggestion) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Size(m)
+}
+func (m *GeoTargetConstantSuggestion) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantSuggestion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantSuggestion proto.InternalMessageInfo
+
+func (m *GeoTargetConstantSuggestion) GetLocale() *wrappers.StringValue {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetReach() *wrappers.Int64Value {
+	if m != nil {
+		return m.Reach
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetGeoTargetConstant() *resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetGeoTargetConstantParents() []*resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstantParents
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetGeoTargetConstantRequest)(nil), "google.ads.googleads.v3.services.GetGeoTargetConstantRequest")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest)(nil), "google.ads.googleads.v3.services.SuggestGeoTargetConstantsRequest")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest_LocationNames)(nil), "google.ads.googleads.v3.services.SuggestGeoTargetConstantsRequest.LocationNames")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest_GeoTargets)(nil), "google.ads.googleads.v3.services.SuggestGeoTargetConstantsRequest.GeoTargets")
+	proto.RegisterType((*SuggestGeoTargetConstantsResponse)(nil), "google.ads.googleads.v3.services.SuggestGeoTargetConstantsResponse")
+	proto.RegisterType((*GeoTargetConstantSuggestion)(nil), "google.ads.googleads.v3.services.GeoTargetConstantSuggestion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/geo_target_constant_service.proto", fileDescriptor_f7e25d1f3e9af1ca)
+}
+
+var fileDescriptor_f7e25d1f3e9af1ca = []byte{
+	// 762 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x4f, 0x6f, 0xd3, 0x48,
+	0x14, 0x5f, 0x27, 0x4d, 0x57, 0x3b, 0x69, 0x57, 0xda, 0xd9, 0x4a, 0xeb, 0x4d, 0x4a, 0x1b, 0x42,
+	0x0f, 0xa1, 0x07, 0x5b, 0x24, 0x15, 0x07, 0x57, 0x15, 0x38, 0x39, 0xa4, 0x48, 0x50, 0x45, 0x69,
+	0x95, 0x03, 0x8a, 0x14, 0x4d, 0xed, 0x57, 0xd7, 0x92, 0xe3, 0x71, 0x67, 0x9c, 0xa0, 0x0a, 0x71,
+	0x41, 0xfd, 0x06, 0x7c, 0x01, 0xc4, 0xb1, 0x47, 0x3e, 0x46, 0x25, 0xc4, 0x81, 0x13, 0x9c, 0x38,
+	0x70, 0xe2, 0x53, 0x20, 0xdb, 0x63, 0x27, 0x95, 0x63, 0x12, 0x5a, 0x6e, 0x2f, 0x7e, 0xbf, 0xf7,
+	0xfb, 0xbd, 0xbf, 0xd3, 0xa2, 0xa6, 0x45, 0xa9, 0xe5, 0x80, 0x4a, 0x4c, 0xae, 0x46, 0x66, 0x60,
+	0x8d, 0x1b, 0x2a, 0x07, 0x36, 0xb6, 0x0d, 0xe0, 0xaa, 0x05, 0x74, 0xe0, 0x13, 0x66, 0x81, 0x3f,
+	0x30, 0xa8, 0xcb, 0x7d, 0xe2, 0xfa, 0x03, 0xe1, 0x54, 0x3c, 0x46, 0x7d, 0x8a, 0x2b, 0x51, 0xa0,
+	0x42, 0x4c, 0xae, 0x24, 0x1c, 0xca, 0xb8, 0xa1, 0xc4, 0x1c, 0xa5, 0xdd, 0x2c, 0x15, 0x06, 0x9c,
+	0x8e, 0x58, 0x86, 0x4c, 0x44, 0x5f, 0x5a, 0x8f, 0x83, 0x3d, 0x5b, 0x25, 0xae, 0x4b, 0x7d, 0xe2,
+	0xdb, 0xd4, 0xe5, 0xc2, 0xfb, 0xdf, 0x94, 0xd7, 0x70, 0x6c, 0x48, 0xc2, 0x36, 0xa7, 0x1c, 0x27,
+	0x36, 0x38, 0xe6, 0xe0, 0x18, 0x4e, 0xc9, 0xd8, 0xa6, 0x4c, 0x00, 0x36, 0x04, 0x20, 0xfc, 0x75,
+	0x3c, 0x3a, 0x51, 0x5f, 0x30, 0xe2, 0x79, 0xc0, 0x04, 0x73, 0xb5, 0x8d, 0xca, 0x6d, 0xf0, 0xdb,
+	0x40, 0x8f, 0xc2, 0xb4, 0x5a, 0x22, 0xab, 0x2e, 0x9c, 0x8d, 0x80, 0xfb, 0xb8, 0x86, 0x56, 0xe3,
+	0xec, 0x07, 0x2e, 0x19, 0x82, 0x2c, 0x55, 0xa4, 0xda, 0x5f, 0xcd, 0xfc, 0x57, 0x3d, 0xd7, 0x5d,
+	0x89, 0x3d, 0x07, 0x64, 0x08, 0xd5, 0xf7, 0x4b, 0xa8, 0x72, 0x38, 0xb2, 0x2c, 0xe0, 0x69, 0x36,
+	0x1e, 0xd3, 0xed, 0xa0, 0x65, 0x87, 0x1a, 0xc4, 0x01, 0x39, 0x5f, 0x91, 0x6a, 0xc5, 0xfa, 0xba,
+	0x68, 0xa5, 0x12, 0xa7, 0xa7, 0x1c, 0xfa, 0xcc, 0x76, 0xad, 0x1e, 0x71, 0x46, 0xd0, 0x15, 0x58,
+	0xfc, 0x08, 0xad, 0x18, 0x74, 0xe4, 0xfa, 0xec, 0x7c, 0x60, 0x50, 0x13, 0xe4, 0xc2, 0x02, 0xb1,
+	0x45, 0x11, 0xd1, 0xa2, 0x26, 0xe0, 0x73, 0xf4, 0x77, 0x40, 0x15, 0x74, 0x34, 0xac, 0x82, 0x87,
+	0x65, 0x14, 0xeb, 0x1d, 0x65, 0xde, 0x50, 0x95, 0x79, 0x25, 0x29, 0x4f, 0x05, 0x71, 0xd0, 0x04,
+	0xbe, 0xff, 0x47, 0x77, 0xd5, 0x99, 0xfe, 0x80, 0x3d, 0x54, 0x9c, 0x0c, 0x9d, 0xcb, 0xb9, 0x50,
+	0xf7, 0xd9, 0x6f, 0xd0, 0x4d, 0x3c, 0x81, 0x28, 0xb2, 0x92, 0x5f, 0xa5, 0x16, 0x5a, 0xbd, 0x96,
+	0x13, 0xae, 0xa3, 0x42, 0x5c, 0x74, 0x7e, 0x6e, 0xdf, 0x22, 0x68, 0xa9, 0x8f, 0xd0, 0x44, 0x00,
+	0x1f, 0xa0, 0xb5, 0x19, 0x9b, 0xbb, 0x18, 0x21, 0xb6, 0x52, 0x25, 0x34, 0xff, 0x44, 0x85, 0xb3,
+	0x11, 0xb0, 0xf3, 0xea, 0xa5, 0x84, 0xee, 0xfe, 0xa4, 0x52, 0xee, 0x51, 0x97, 0x03, 0xbe, 0x90,
+	0xd0, 0xe6, 0xcc, 0x03, 0x8d, 0x22, 0x83, 0x3b, 0x11, 0xa9, 0xec, 0xcd, 0x6f, 0x6c, 0x4a, 0xe7,
+	0x30, 0x61, 0xe9, 0xae, 0x5b, 0xd9, 0x4e, 0x5e, 0x7d, 0x9b, 0x0f, 0x6e, 0x25, 0x13, 0x30, 0xb5,
+	0xdc, 0xd2, 0x2f, 0x2c, 0xf7, 0x03, 0x54, 0x60, 0x40, 0x8c, 0x53, 0xb1, 0x1a, 0xe5, 0x54, 0xd0,
+	0x13, 0xd7, 0x7f, 0xb8, 0x23, 0x86, 0x13, 0x22, 0xf1, 0x1e, 0x2a, 0x72, 0x20, 0xcc, 0x38, 0x1d,
+	0xf8, 0xc0, 0x86, 0x0b, 0x9d, 0x12, 0x8a, 0x02, 0x8e, 0x80, 0x0d, 0xb1, 0x89, 0xfe, 0x9d, 0xd1,
+	0x4d, 0x79, 0x29, 0xa4, 0xd9, 0xc9, 0xec, 0x60, 0xf2, 0x8a, 0xa5, 0x5b, 0xd8, 0xfd, 0x27, 0xd5,
+	0x38, 0xcc, 0x51, 0x79, 0xd6, 0xcc, 0x3c, 0xc2, 0x20, 0x58, 0x9d, 0x42, 0x38, 0xaf, 0x9b, 0xa9,
+	0xc9, 0x29, 0xb5, 0x4e, 0xc4, 0x5a, 0xff, 0x9c, 0x47, 0x72, 0x7a, 0x44, 0xd1, 0xe8, 0xf1, 0x07,
+	0x09, 0xad, 0xcd, 0x7a, 0xeb, 0xf0, 0x42, 0x5b, 0x93, 0xf9, 0x46, 0x96, 0x6e, 0x54, 0x44, 0xf5,
+	0xf1, 0x17, 0xfd, 0xfa, 0xd3, 0xfa, 0xfa, 0xd3, 0xb7, 0x37, 0xb9, 0x6d, 0x5c, 0x0b, 0xfe, 0x62,
+	0xbc, 0xbc, 0xe6, 0xd9, 0x4b, 0x9f, 0x90, 0xba, 0xfd, 0x0a, 0x7f, 0x94, 0xd0, 0xff, 0x99, 0xc7,
+	0x83, 0x9b, 0xb7, 0x7f, 0x63, 0x4a, 0xad, 0x5b, 0x71, 0x44, 0xd7, 0x5b, 0xbd, 0x1f, 0x16, 0x76,
+	0xaf, 0xba, 0x11, 0x14, 0x96, 0xae, 0x44, 0x13, 0x57, 0xac, 0x49, 0xdb, 0xa5, 0xf2, 0x95, 0x2e,
+	0x4f, 0x64, 0x84, 0xe5, 0xd9, 0x5c, 0x31, 0xe8, 0xb0, 0x79, 0x91, 0x43, 0x5b, 0x06, 0x1d, 0xce,
+	0x4d, 0xa9, 0x79, 0x27, 0x6b, 0x03, 0x3a, 0xc1, 0x65, 0x74, 0xa4, 0xe7, 0xfb, 0x82, 0xc2, 0xa2,
+	0x0e, 0x71, 0x2d, 0x85, 0x32, 0x4b, 0xb5, 0xc0, 0x0d, 0xef, 0x46, 0x9d, 0x88, 0x66, 0xff, 0xb7,
+	0xb0, 0x1b, 0x1b, 0xef, 0x72, 0xf9, 0xb6, 0xae, 0x5f, 0xe6, 0x2a, 0xed, 0x88, 0x50, 0x37, 0xb9,
+	0x12, 0x99, 0x81, 0xd5, 0x6b, 0x28, 0x42, 0x98, 0x5f, 0xc5, 0x90, 0xbe, 0x6e, 0xf2, 0x7e, 0x02,
+	0xe9, 0xf7, 0x1a, 0xfd, 0x18, 0xf2, 0x3d, 0xb7, 0x15, 0x7d, 0xd7, 0x34, 0xdd, 0xe4, 0x9a, 0x96,
+	0x80, 0x34, 0xad, 0xd7, 0xd0, 0xb4, 0x18, 0x76, 0xbc, 0x1c, 0xe6, 0xd9, 0xf8, 0x11, 0x00, 0x00,
+	0xff, 0xff, 0x84, 0x49, 0xb7, 0x69, 0xd4, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GeoTargetConstantServiceClient is the client API for GeoTargetConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GeoTargetConstantServiceClient interface {
+	// Returns the requested geo target constant in full detail.
+	GetGeoTargetConstant(ctx context.Context, in *GetGeoTargetConstantRequest, opts ...grpc.CallOption) (*resources.GeoTargetConstant, error)
+	// Returns GeoTargetConstant suggestions by location name or by resource name.
+	SuggestGeoTargetConstants(ctx context.Context, in *SuggestGeoTargetConstantsRequest, opts ...grpc.CallOption) (*SuggestGeoTargetConstantsResponse, error)
+}
+
+type geoTargetConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGeoTargetConstantServiceClient(cc grpc.ClientConnInterface) GeoTargetConstantServiceClient {
+	return &geoTargetConstantServiceClient{cc}
+}
+
+func (c *geoTargetConstantServiceClient) GetGeoTargetConstant(ctx context.Context, in *GetGeoTargetConstantRequest, opts ...grpc.CallOption) (*resources.GeoTargetConstant, error) {
+	out := new(resources.GeoTargetConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GeoTargetConstantService/GetGeoTargetConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *geoTargetConstantServiceClient) SuggestGeoTargetConstants(ctx context.Context, in *SuggestGeoTargetConstantsRequest, opts ...grpc.CallOption) (*SuggestGeoTargetConstantsResponse, error) {
+	out := new(SuggestGeoTargetConstantsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GeoTargetConstantService/SuggestGeoTargetConstants", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GeoTargetConstantServiceServer is the server API for GeoTargetConstantService service.
+type GeoTargetConstantServiceServer interface {
+	// Returns the requested geo target constant in full detail.
+	GetGeoTargetConstant(context.Context, *GetGeoTargetConstantRequest) (*resources.GeoTargetConstant, error)
+	// Returns GeoTargetConstant suggestions by location name or by resource name.
+	SuggestGeoTargetConstants(context.Context, *SuggestGeoTargetConstantsRequest) (*SuggestGeoTargetConstantsResponse, error)
+}
+
+// UnimplementedGeoTargetConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGeoTargetConstantServiceServer struct {
+}
+
+func (*UnimplementedGeoTargetConstantServiceServer) GetGeoTargetConstant(ctx context.Context, req *GetGeoTargetConstantRequest) (*resources.GeoTargetConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetGeoTargetConstant not implemented")
+}
+func (*UnimplementedGeoTargetConstantServiceServer) SuggestGeoTargetConstants(ctx context.Context, req *SuggestGeoTargetConstantsRequest) (*SuggestGeoTargetConstantsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SuggestGeoTargetConstants not implemented")
+}
+
+func RegisterGeoTargetConstantServiceServer(s *grpc.Server, srv GeoTargetConstantServiceServer) {
+	s.RegisterService(&_GeoTargetConstantService_serviceDesc, srv)
+}
+
+func _GeoTargetConstantService_GetGeoTargetConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGeoTargetConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GeoTargetConstantServiceServer).GetGeoTargetConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GeoTargetConstantService/GetGeoTargetConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GeoTargetConstantServiceServer).GetGeoTargetConstant(ctx, req.(*GetGeoTargetConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GeoTargetConstantService_SuggestGeoTargetConstants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SuggestGeoTargetConstantsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GeoTargetConstantServiceServer).SuggestGeoTargetConstants(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GeoTargetConstantService/SuggestGeoTargetConstants",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GeoTargetConstantServiceServer).SuggestGeoTargetConstants(ctx, req.(*SuggestGeoTargetConstantsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GeoTargetConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GeoTargetConstantService",
+	HandlerType: (*GeoTargetConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGeoTargetConstant",
+			Handler:    _GeoTargetConstantService_GetGeoTargetConstant_Handler,
+		},
+		{
+			MethodName: "SuggestGeoTargetConstants",
+			Handler:    _GeoTargetConstantService_SuggestGeoTargetConstants_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/geo_target_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/geographic_view_service.pb.go b/googleapis/ads/googleads/v3/services/geographic_view_service.pb.go
new file mode 100644
index 0000000..90de7c1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/geographic_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/geographic_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GeographicViewService.GetGeographicView][google.ads.googleads.v3.services.GeographicViewService.GetGeographicView].
+type GetGeographicViewRequest struct {
+	// Required. The resource name of the geographic view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGeographicViewRequest) Reset()         { *m = GetGeographicViewRequest{} }
+func (m *GetGeographicViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGeographicViewRequest) ProtoMessage()    {}
+func (*GetGeographicViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a7b00c6e68aa0240, []int{0}
+}
+
+func (m *GetGeographicViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGeographicViewRequest.Unmarshal(m, b)
+}
+func (m *GetGeographicViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGeographicViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetGeographicViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGeographicViewRequest.Merge(m, src)
+}
+func (m *GetGeographicViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGeographicViewRequest.Size(m)
+}
+func (m *GetGeographicViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGeographicViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGeographicViewRequest proto.InternalMessageInfo
+
+func (m *GetGeographicViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetGeographicViewRequest)(nil), "google.ads.googleads.v3.services.GetGeographicViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/geographic_view_service.proto", fileDescriptor_a7b00c6e68aa0240)
+}
+
+var fileDescriptor_a7b00c6e68aa0240 = []byte{
+	// 414 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x1c, 0x25, 0x39, 0x10, 0x0c, 0x5a, 0x18, 0x10, 0x97, 0x28, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x70, 0xa6, 0x10, 0x46, 0x14, 0x66, 0x11, 0xa2, 0x8d, 0x1c, 0x27, 0xa4, 0x90, 0x40, 0x98, 0x4b,
+	0x7e, 0xce, 0x0d, 0x24, 0x99, 0x38, 0x93, 0xcd, 0x16, 0x62, 0xa1, 0xf8, 0x0d, 0xfc, 0x06, 0x96,
+	0x7e, 0x94, 0x05, 0x2b, 0x3b, 0x2b, 0x0b, 0x2b, 0x3f, 0x85, 0x64, 0x27, 0x93, 0xdd, 0x70, 0x1b,
+	0xb6, 0x7b, 0xcc, 0x7b, 0xef, 0xf7, 0x7e, 0x7f, 0xc6, 0x7b, 0xc1, 0xa5, 0xe4, 0x05, 0x60, 0x96,
+	0x6b, 0x6c, 0x60, 0x87, 0xda, 0x10, 0x6b, 0x50, 0xad, 0xc8, 0x40, 0x63, 0x0e, 0x92, 0x2b, 0x56,
+	0x5f, 0x8b, 0x2c, 0x6d, 0x05, 0xac, 0xd2, 0x9e, 0x40, 0xb5, 0x92, 0x8d, 0xf4, 0xe7, 0xc6, 0x84,
+	0x58, 0xae, 0xd1, 0xe0, 0x47, 0x6d, 0x88, 0xac, 0x3f, 0x78, 0x3a, 0x95, 0xa0, 0x40, 0xcb, 0xa5,
+	0xda, 0x13, 0x61, 0x4a, 0x07, 0x8f, 0xac, 0xb1, 0x16, 0x98, 0x55, 0x95, 0x6c, 0x58, 0x23, 0x64,
+	0xa5, 0x7b, 0xf6, 0xc1, 0x0e, 0x9b, 0x15, 0x02, 0xaa, 0xa6, 0x27, 0x1e, 0xef, 0x10, 0xef, 0x05,
+	0x14, 0x79, 0x7a, 0x05, 0xd7, 0xac, 0x15, 0x52, 0x19, 0xc1, 0xf1, 0x4b, 0x6f, 0x16, 0x41, 0x13,
+	0x0d, 0x99, 0xb1, 0x80, 0xd5, 0x25, 0x7c, 0x58, 0x82, 0x6e, 0xfc, 0x53, 0xef, 0xae, 0x6d, 0x2b,
+	0xad, 0x58, 0x09, 0x33, 0x67, 0xee, 0x9c, 0xde, 0x5e, 0x1c, 0xfd, 0xa1, 0xee, 0xe5, 0x1d, 0xcb,
+	0xbc, 0x61, 0x25, 0x3c, 0xf9, 0xea, 0x7a, 0xf7, 0xc7, 0x35, 0xde, 0x9a, 0x89, 0xfd, 0x9f, 0x8e,
+	0x77, 0xef, 0x46, 0x80, 0x4f, 0xd0, 0xa1, 0x4d, 0xa1, 0xa9, 0xae, 0x82, 0xf3, 0x49, 0xef, 0xb0,
+	0x43, 0x34, 0x76, 0x1e, 0xbf, 0xfe, 0x4d, 0xc7, 0x93, 0x7c, 0xf9, 0xf5, 0xf7, 0x9b, 0x1b, 0xfa,
+	0xe7, 0xdd, 0xe6, 0x3f, 0x8e, 0x98, 0xe7, 0xd9, 0x52, 0x37, 0xb2, 0x04, 0xa5, 0xf1, 0xd9, 0xce,
+	0x29, 0xba, 0x32, 0x1a, 0x9f, 0x7d, 0x0a, 0x1e, 0xae, 0xe9, 0x6c, 0x1b, 0xda, 0xa3, 0x5a, 0x68,
+	0x94, 0xc9, 0x72, 0xf1, 0xd9, 0xf5, 0x4e, 0x32, 0x59, 0x1e, 0x1c, 0x6e, 0x11, 0xec, 0x5d, 0xd6,
+	0x45, 0x77, 0x91, 0x0b, 0xe7, 0xdd, 0xab, 0xde, 0xcf, 0x65, 0xc1, 0x2a, 0x8e, 0xa4, 0xe2, 0x98,
+	0x43, 0xb5, 0xb9, 0x17, 0xde, 0x26, 0x4e, 0xff, 0xd2, 0x67, 0x16, 0x7c, 0x77, 0x8f, 0x22, 0x4a,
+	0x7f, 0xb8, 0xf3, 0xc8, 0x14, 0xa4, 0xb9, 0x46, 0x06, 0x76, 0x28, 0x0e, 0x51, 0x1f, 0xac, 0xd7,
+	0x56, 0x92, 0xd0, 0x5c, 0x27, 0x83, 0x24, 0x89, 0xc3, 0xc4, 0x4a, 0xfe, 0xb9, 0x27, 0xe6, 0x9d,
+	0x10, 0x9a, 0x6b, 0x42, 0x06, 0x11, 0x21, 0x71, 0x48, 0x88, 0x95, 0x5d, 0xdd, 0xda, 0xf4, 0x19,
+	0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x84, 0x40, 0xf7, 0xae, 0x4c, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GeographicViewServiceClient is the client API for GeographicViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GeographicViewServiceClient interface {
+	// Returns the requested geographic view in full detail.
+	GetGeographicView(ctx context.Context, in *GetGeographicViewRequest, opts ...grpc.CallOption) (*resources.GeographicView, error)
+}
+
+type geographicViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGeographicViewServiceClient(cc grpc.ClientConnInterface) GeographicViewServiceClient {
+	return &geographicViewServiceClient{cc}
+}
+
+func (c *geographicViewServiceClient) GetGeographicView(ctx context.Context, in *GetGeographicViewRequest, opts ...grpc.CallOption) (*resources.GeographicView, error) {
+	out := new(resources.GeographicView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GeographicViewService/GetGeographicView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GeographicViewServiceServer is the server API for GeographicViewService service.
+type GeographicViewServiceServer interface {
+	// Returns the requested geographic view in full detail.
+	GetGeographicView(context.Context, *GetGeographicViewRequest) (*resources.GeographicView, error)
+}
+
+// UnimplementedGeographicViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGeographicViewServiceServer struct {
+}
+
+func (*UnimplementedGeographicViewServiceServer) GetGeographicView(ctx context.Context, req *GetGeographicViewRequest) (*resources.GeographicView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetGeographicView not implemented")
+}
+
+func RegisterGeographicViewServiceServer(s *grpc.Server, srv GeographicViewServiceServer) {
+	s.RegisterService(&_GeographicViewService_serviceDesc, srv)
+}
+
+func _GeographicViewService_GetGeographicView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGeographicViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GeographicViewServiceServer).GetGeographicView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GeographicViewService/GetGeographicView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GeographicViewServiceServer).GetGeographicView(ctx, req.(*GetGeographicViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GeographicViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GeographicViewService",
+	HandlerType: (*GeographicViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGeographicView",
+			Handler:    _GeographicViewService_GetGeographicView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/geographic_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/google_ads_field_service.pb.go b/googleapis/ads/googleads/v3/services/google_ads_field_service.pb.go
new file mode 100644
index 0000000..7ac6ef2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/google_ads_field_service.pb.go
@@ -0,0 +1,364 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/google_ads_field_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GoogleAdsFieldService.GetGoogleAdsField][google.ads.googleads.v3.services.GoogleAdsFieldService.GetGoogleAdsField].
+type GetGoogleAdsFieldRequest struct {
+	// Required. The resource name of the field to get.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGoogleAdsFieldRequest) Reset()         { *m = GetGoogleAdsFieldRequest{} }
+func (m *GetGoogleAdsFieldRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGoogleAdsFieldRequest) ProtoMessage()    {}
+func (*GetGoogleAdsFieldRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b52f3131d596f8fb, []int{0}
+}
+
+func (m *GetGoogleAdsFieldRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Unmarshal(m, b)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Marshal(b, m, deterministic)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGoogleAdsFieldRequest.Merge(m, src)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Size(m)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGoogleAdsFieldRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGoogleAdsFieldRequest proto.InternalMessageInfo
+
+func (m *GetGoogleAdsFieldRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v3.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+type SearchGoogleAdsFieldsRequest struct {
+	// Required. The query string.
+	Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"`
+	// Token of the page to retrieve. If not specified, the first page of
+	// results will be returned. Use the value obtained from `next_page_token`
+	// in the previous response in order to request the next page of results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When too large a page is requested, the server may decide to further
+	// limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchGoogleAdsFieldsRequest) Reset()         { *m = SearchGoogleAdsFieldsRequest{} }
+func (m *SearchGoogleAdsFieldsRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsFieldsRequest) ProtoMessage()    {}
+func (*SearchGoogleAdsFieldsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b52f3131d596f8fb, []int{1}
+}
+
+func (m *SearchGoogleAdsFieldsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsFieldsRequest.Merge(m, src)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Size(m)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsFieldsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsFieldsRequest proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsFieldsRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v3.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+type SearchGoogleAdsFieldsResponse struct {
+	// The list of fields that matched the query.
+	Results []*resources.GoogleAdsField `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Pagination token used to retrieve the next page of results. Pass the
+	// content of this string as the `page_token` attribute of the next request.
+	// `next_page_token` is not returned for the last page.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Total number of results that match the query ignoring the LIMIT clause.
+	TotalResultsCount    int64    `protobuf:"varint,3,opt,name=total_results_count,json=totalResultsCount,proto3" json:"total_results_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchGoogleAdsFieldsResponse) Reset()         { *m = SearchGoogleAdsFieldsResponse{} }
+func (m *SearchGoogleAdsFieldsResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsFieldsResponse) ProtoMessage()    {}
+func (*SearchGoogleAdsFieldsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b52f3131d596f8fb, []int{2}
+}
+
+func (m *SearchGoogleAdsFieldsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsFieldsResponse.Merge(m, src)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Size(m)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsFieldsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsFieldsResponse proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsFieldsResponse) GetResults() []*resources.GoogleAdsField {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsFieldsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsResponse) GetTotalResultsCount() int64 {
+	if m != nil {
+		return m.TotalResultsCount
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*GetGoogleAdsFieldRequest)(nil), "google.ads.googleads.v3.services.GetGoogleAdsFieldRequest")
+	proto.RegisterType((*SearchGoogleAdsFieldsRequest)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsFieldsRequest")
+	proto.RegisterType((*SearchGoogleAdsFieldsResponse)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsFieldsResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/google_ads_field_service.proto", fileDescriptor_b52f3131d596f8fb)
+}
+
+var fileDescriptor_b52f3131d596f8fb = []byte{
+	// 584 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0x26, 0x09, 0x55, 0x3b, 0x5a, 0xa4, 0x91, 0x62, 0x4c, 0x5b, 0xba, 0x84, 0xaa, 0x4b, 0xc1,
+	0x09, 0x36, 0x17, 0x89, 0xd4, 0x92, 0x2a, 0xae, 0x20, 0xc8, 0x92, 0x95, 0x3d, 0xc8, 0x42, 0x98,
+	0x26, 0xcf, 0x34, 0x98, 0xcd, 0x6c, 0x33, 0x93, 0x45, 0x2b, 0x1e, 0xf4, 0x2f, 0xf8, 0x0f, 0x3c,
+	0xfa, 0x2f, 0x14, 0x41, 0xe8, 0xd5, 0x5b, 0x4f, 0x1e, 0x3c, 0xf9, 0x2b, 0x24, 0x99, 0xcc, 0x76,
+	0xb7, 0xdd, 0x75, 0xd1, 0xdb, 0xec, 0xfb, 0xbe, 0xf9, 0xbe, 0xf7, 0xf6, 0x7b, 0x13, 0xb4, 0x1b,
+	0x53, 0x1a, 0xa7, 0x60, 0x93, 0x88, 0xd9, 0xe2, 0x58, 0x9e, 0x86, 0x8e, 0xcd, 0x20, 0x1f, 0x26,
+	0x21, 0xc8, 0x6a, 0x40, 0x22, 0x16, 0xbc, 0x4c, 0x20, 0x8d, 0x82, 0x1a, 0xc1, 0x83, 0x9c, 0x72,
+	0xaa, 0x37, 0x04, 0x8e, 0x49, 0xc4, 0xf0, 0x48, 0x00, 0x0f, 0x1d, 0x2c, 0x05, 0xcc, 0x7b, 0xb3,
+	0x2c, 0x72, 0x60, 0xb4, 0xc8, 0xa7, 0x79, 0x08, 0x6d, 0x73, 0x4d, 0xde, 0x1c, 0x24, 0x36, 0xc9,
+	0x32, 0xca, 0x09, 0x4f, 0x68, 0xc6, 0x6a, 0xf4, 0xfa, 0x18, 0x1a, 0xa6, 0x09, 0x64, 0xbc, 0x06,
+	0x36, 0xc6, 0x00, 0xd1, 0xf2, 0x3e, 0x1c, 0x90, 0x61, 0x42, 0x73, 0x41, 0xb0, 0x1e, 0x21, 0xa3,
+	0x05, 0xbc, 0x55, 0xb1, 0xbc, 0x88, 0x3d, 0x2e, 0x39, 0x3e, 0x1c, 0x16, 0xc0, 0xb8, 0xde, 0x44,
+	0x4b, 0xb2, 0xaf, 0x20, 0x23, 0x7d, 0x30, 0x94, 0x86, 0xd2, 0x5c, 0xdc, 0xd3, 0x7e, 0x7a, 0xaa,
+	0x7f, 0x45, 0x22, 0xcf, 0x48, 0x1f, 0xac, 0x02, 0xad, 0x75, 0x80, 0xe4, 0xe1, 0xc1, 0xa4, 0x10,
+	0x93, 0x4a, 0x37, 0xd0, 0xc2, 0x61, 0x01, 0xf9, 0x9b, 0x71, 0x05, 0x51, 0xd1, 0xd7, 0x11, 0x1a,
+	0x90, 0x18, 0x02, 0x4e, 0x5f, 0x41, 0x66, 0xa8, 0x25, 0xee, 0x2f, 0x96, 0x95, 0xe7, 0x65, 0x41,
+	0x5f, 0x45, 0xd5, 0x8f, 0x80, 0x25, 0x47, 0x60, 0x68, 0x0d, 0xa5, 0xb9, 0xe0, 0x5f, 0x2a, 0x0b,
+	0x9d, 0xe4, 0x08, 0xac, 0x6f, 0x0a, 0x5a, 0x9f, 0xe1, 0xcb, 0x06, 0x34, 0x63, 0xa0, 0x3f, 0x45,
+	0x17, 0x73, 0x60, 0x45, 0xca, 0x99, 0xa1, 0x34, 0xb4, 0xe6, 0xe5, 0xed, 0xbb, 0x78, 0x56, 0x48,
+	0xa3, 0x08, 0xf0, 0x99, 0x7f, 0x43, 0x2a, 0xe8, 0xb7, 0xd0, 0xd5, 0x0c, 0x5e, 0xf3, 0xe0, 0x5c,
+	0xbf, 0x4b, 0x65, 0xb9, 0x3d, 0xea, 0x19, 0xa3, 0x6b, 0x9c, 0x72, 0x92, 0x06, 0xf5, 0xc5, 0x20,
+	0xa4, 0x45, 0xc6, 0xab, 0xee, 0x35, 0x7f, 0xb9, 0x82, 0x7c, 0x81, 0x3c, 0x2c, 0x81, 0xed, 0xaf,
+	0x1a, 0x5a, 0x99, 0xf4, 0xec, 0x88, 0x85, 0xd1, 0xbf, 0x28, 0x68, 0xf9, 0x5c, 0x3c, 0xba, 0x8b,
+	0xe7, 0x2d, 0x1a, 0x9e, 0x95, 0xa9, 0xf9, 0xef, 0xf3, 0x5b, 0x3b, 0x27, 0xde, 0xe4, 0x1e, 0x7c,
+	0xf8, 0xf1, 0xeb, 0xa3, 0x7a, 0x5b, 0xbf, 0x59, 0x2e, 0xee, 0xdb, 0x09, 0x64, 0x27, 0x9e, 0xcc,
+	0xc1, 0xde, 0x7a, 0xa7, 0x7f, 0x57, 0xd0, 0xca, 0xd4, 0x90, 0xf4, 0x07, 0xf3, 0xe7, 0xf8, 0xdb,
+	0x56, 0x99, 0xbb, 0xff, 0x7d, 0x5f, 0x6c, 0x87, 0x75, 0xe7, 0xc4, 0x13, 0x5b, 0x58, 0x4d, 0xb4,
+	0x61, 0x99, 0xe5, 0x44, 0x67, 0x46, 0x70, 0x59, 0x25, 0xe1, 0x2a, 0x5b, 0xe6, 0xea, 0xb1, 0x67,
+	0x9c, 0xda, 0xd4, 0xa7, 0x41, 0xc2, 0x70, 0x48, 0xfb, 0x7b, 0xef, 0x55, 0xb4, 0x19, 0xd2, 0xfe,
+	0xdc, 0x96, 0xf6, 0xcc, 0xa9, 0x51, 0xb7, 0xcb, 0xd7, 0xd8, 0x56, 0x5e, 0x3c, 0xa9, 0xef, 0xc7,
+	0x34, 0x25, 0x59, 0x8c, 0x69, 0x1e, 0xdb, 0x31, 0x64, 0xd5, 0x5b, 0xb5, 0x4f, 0x1d, 0x67, 0x7f,
+	0xa3, 0xee, 0xcb, 0xc3, 0x27, 0x55, 0x6b, 0x79, 0xde, 0x67, 0xb5, 0x21, 0xec, 0xb0, 0x17, 0x8d,
+	0x05, 0x8b, 0xbb, 0x0e, 0xae, 0x8d, 0xd9, 0xb1, 0xa4, 0xf4, 0xbc, 0x88, 0xf5, 0x46, 0x94, 0x5e,
+	0xd7, 0xe9, 0x49, 0xca, 0x6f, 0x75, 0x53, 0xd4, 0x5d, 0xd7, 0x8b, 0x98, 0xeb, 0x8e, 0x48, 0xae,
+	0xdb, 0x75, 0x5c, 0x57, 0xd2, 0xf6, 0x2f, 0x54, 0x7d, 0x3a, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff,
+	0x92, 0xff, 0xc6, 0x84, 0x4a, 0x05, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GoogleAdsFieldServiceClient is the client API for GoogleAdsFieldService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GoogleAdsFieldServiceClient interface {
+	// Returns just the requested field.
+	GetGoogleAdsField(ctx context.Context, in *GetGoogleAdsFieldRequest, opts ...grpc.CallOption) (*resources.GoogleAdsField, error)
+	// Returns all fields that match the search query.
+	SearchGoogleAdsFields(ctx context.Context, in *SearchGoogleAdsFieldsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsFieldsResponse, error)
+}
+
+type googleAdsFieldServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGoogleAdsFieldServiceClient(cc grpc.ClientConnInterface) GoogleAdsFieldServiceClient {
+	return &googleAdsFieldServiceClient{cc}
+}
+
+func (c *googleAdsFieldServiceClient) GetGoogleAdsField(ctx context.Context, in *GetGoogleAdsFieldRequest, opts ...grpc.CallOption) (*resources.GoogleAdsField, error) {
+	out := new(resources.GoogleAdsField)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GoogleAdsFieldService/GetGoogleAdsField", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *googleAdsFieldServiceClient) SearchGoogleAdsFields(ctx context.Context, in *SearchGoogleAdsFieldsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsFieldsResponse, error) {
+	out := new(SearchGoogleAdsFieldsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GoogleAdsFieldService/SearchGoogleAdsFields", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GoogleAdsFieldServiceServer is the server API for GoogleAdsFieldService service.
+type GoogleAdsFieldServiceServer interface {
+	// Returns just the requested field.
+	GetGoogleAdsField(context.Context, *GetGoogleAdsFieldRequest) (*resources.GoogleAdsField, error)
+	// Returns all fields that match the search query.
+	SearchGoogleAdsFields(context.Context, *SearchGoogleAdsFieldsRequest) (*SearchGoogleAdsFieldsResponse, error)
+}
+
+// UnimplementedGoogleAdsFieldServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGoogleAdsFieldServiceServer struct {
+}
+
+func (*UnimplementedGoogleAdsFieldServiceServer) GetGoogleAdsField(ctx context.Context, req *GetGoogleAdsFieldRequest) (*resources.GoogleAdsField, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetGoogleAdsField not implemented")
+}
+func (*UnimplementedGoogleAdsFieldServiceServer) SearchGoogleAdsFields(ctx context.Context, req *SearchGoogleAdsFieldsRequest) (*SearchGoogleAdsFieldsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SearchGoogleAdsFields not implemented")
+}
+
+func RegisterGoogleAdsFieldServiceServer(s *grpc.Server, srv GoogleAdsFieldServiceServer) {
+	s.RegisterService(&_GoogleAdsFieldService_serviceDesc, srv)
+}
+
+func _GoogleAdsFieldService_GetGoogleAdsField_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGoogleAdsFieldRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsFieldServiceServer).GetGoogleAdsField(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GoogleAdsFieldService/GetGoogleAdsField",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsFieldServiceServer).GetGoogleAdsField(ctx, req.(*GetGoogleAdsFieldRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GoogleAdsFieldService_SearchGoogleAdsFields_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchGoogleAdsFieldsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsFieldServiceServer).SearchGoogleAdsFields(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GoogleAdsFieldService/SearchGoogleAdsFields",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsFieldServiceServer).SearchGoogleAdsFields(ctx, req.(*SearchGoogleAdsFieldsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GoogleAdsFieldService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GoogleAdsFieldService",
+	HandlerType: (*GoogleAdsFieldServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGoogleAdsField",
+			Handler:    _GoogleAdsFieldService_GetGoogleAdsField_Handler,
+		},
+		{
+			MethodName: "SearchGoogleAdsFields",
+			Handler:    _GoogleAdsFieldService_SearchGoogleAdsFields_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/google_ads_field_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/google_ads_service.pb.go b/googleapis/ads/googleads/v3/services/google_ads_service.pb.go
new file mode 100644
index 0000000..cb800e3
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/google_ads_service.pb.go
@@ -0,0 +1,3323 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/google_ads_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GoogleAdsService.Search][google.ads.googleads.v3.services.GoogleAdsService.Search].
+type SearchGoogleAdsRequest struct {
+	// Required. The ID of the customer being queried.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The query string.
+	Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
+	// Token of the page to retrieve. If not specified, the first
+	// page of results will be returned. Use the value obtained from
+	// `next_page_token` in the previous response in order to request
+	// the next page of results.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When too large a page is requested, the server may decide to
+	// further limit the number of returned resources.
+	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// If true, the request is validated but not executed.
+	ValidateOnly bool `protobuf:"varint,5,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	// If true, the total number of results that match the query ignoring the
+	// LIMIT clause will be included in the response.
+	// Default is false.
+	ReturnTotalResultsCount bool `protobuf:"varint,7,opt,name=return_total_results_count,json=returnTotalResultsCount,proto3" json:"return_total_results_count,omitempty"`
+	// Determines whether a summary row will be returned. By default, summary row
+	// is not returned. If requested, the summary row will be sent in a response
+	// by itself after all other query results are returned.
+	SummaryRowSetting    enums.SummaryRowSettingEnum_SummaryRowSetting `protobuf:"varint,8,opt,name=summary_row_setting,json=summaryRowSetting,proto3,enum=google.ads.googleads.v3.enums.SummaryRowSettingEnum_SummaryRowSetting" json:"summary_row_setting,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *SearchGoogleAdsRequest) Reset()         { *m = SearchGoogleAdsRequest{} }
+func (m *SearchGoogleAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsRequest) ProtoMessage()    {}
+func (*SearchGoogleAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{0}
+}
+
+func (m *SearchGoogleAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsRequest.Merge(m, src)
+}
+func (m *SearchGoogleAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Size(m)
+}
+func (m *SearchGoogleAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsRequest proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *SearchGoogleAdsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+func (m *SearchGoogleAdsRequest) GetReturnTotalResultsCount() bool {
+	if m != nil {
+		return m.ReturnTotalResultsCount
+	}
+	return false
+}
+
+func (m *SearchGoogleAdsRequest) GetSummaryRowSetting() enums.SummaryRowSettingEnum_SummaryRowSetting {
+	if m != nil {
+		return m.SummaryRowSetting
+	}
+	return enums.SummaryRowSettingEnum_UNSPECIFIED
+}
+
+// Response message for [GoogleAdsService.Search][google.ads.googleads.v3.services.GoogleAdsService.Search].
+type SearchGoogleAdsResponse struct {
+	// The list of rows that matched the query.
+	Results []*GoogleAdsRow `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Pagination token used to retrieve the next page of results.
+	// Pass the content of this string as the `page_token` attribute of
+	// the next request. `next_page_token` is not returned for the last
+	// page.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Total number of results that match the query ignoring the LIMIT
+	// clause.
+	TotalResultsCount int64 `protobuf:"varint,3,opt,name=total_results_count,json=totalResultsCount,proto3" json:"total_results_count,omitempty"`
+	// FieldMask that represents what fields were requested by the user.
+	FieldMask *field_mask.FieldMask `protobuf:"bytes,5,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
+	// Summary row that contains summary of metrics in results.
+	// Summary of metrics means aggregation of metrics across all results,
+	// here aggregation could be sum, average, rate, etc.
+	SummaryRow           *GoogleAdsRow `protobuf:"bytes,6,opt,name=summary_row,json=summaryRow,proto3" json:"summary_row,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *SearchGoogleAdsResponse) Reset()         { *m = SearchGoogleAdsResponse{} }
+func (m *SearchGoogleAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsResponse) ProtoMessage()    {}
+func (*SearchGoogleAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{1}
+}
+
+func (m *SearchGoogleAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsResponse.Merge(m, src)
+}
+func (m *SearchGoogleAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Size(m)
+}
+func (m *SearchGoogleAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsResponse proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsResponse) GetResults() []*GoogleAdsRow {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsResponse) GetTotalResultsCount() int64 {
+	if m != nil {
+		return m.TotalResultsCount
+	}
+	return 0
+}
+
+func (m *SearchGoogleAdsResponse) GetFieldMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.FieldMask
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsResponse) GetSummaryRow() *GoogleAdsRow {
+	if m != nil {
+		return m.SummaryRow
+	}
+	return nil
+}
+
+// Request message for [GoogleAdsService.SearchStream][google.ads.googleads.v3.services.GoogleAdsService.SearchStream].
+// Next tag: 5
+type SearchGoogleAdsStreamRequest struct {
+	// Required. The ID of the customer being queried.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The query string.
+	Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
+	// Determines whether a summary row will be returned. By default, summary row
+	// is not returned. If requested, the summary row will be sent in a response
+	// by itself after all other query results are returned.
+	SummaryRowSetting    enums.SummaryRowSettingEnum_SummaryRowSetting `protobuf:"varint,3,opt,name=summary_row_setting,json=summaryRowSetting,proto3,enum=google.ads.googleads.v3.enums.SummaryRowSettingEnum_SummaryRowSetting" json:"summary_row_setting,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *SearchGoogleAdsStreamRequest) Reset()         { *m = SearchGoogleAdsStreamRequest{} }
+func (m *SearchGoogleAdsStreamRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsStreamRequest) ProtoMessage()    {}
+func (*SearchGoogleAdsStreamRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{2}
+}
+
+func (m *SearchGoogleAdsStreamRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsStreamRequest.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsStreamRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsStreamRequest.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsStreamRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsStreamRequest.Merge(m, src)
+}
+func (m *SearchGoogleAdsStreamRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsStreamRequest.Size(m)
+}
+func (m *SearchGoogleAdsStreamRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsStreamRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsStreamRequest proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsStreamRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsStreamRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsStreamRequest) GetSummaryRowSetting() enums.SummaryRowSettingEnum_SummaryRowSetting {
+	if m != nil {
+		return m.SummaryRowSetting
+	}
+	return enums.SummaryRowSettingEnum_UNSPECIFIED
+}
+
+// Response message for [GoogleAdsService.SearchStream][google.ads.googleads.v3.services.GoogleAdsService.SearchStream].
+type SearchGoogleAdsStreamResponse struct {
+	// The list of rows that matched the query.
+	Results []*GoogleAdsRow `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// FieldMask that represents what fields were requested by the user.
+	FieldMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
+	// Summary row that contains summary of metrics in results.
+	// Summary of metrics means aggregation of metrics across all results,
+	// here aggregation could be sum, average, rate, etc.
+	SummaryRow           *GoogleAdsRow `protobuf:"bytes,3,opt,name=summary_row,json=summaryRow,proto3" json:"summary_row,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *SearchGoogleAdsStreamResponse) Reset()         { *m = SearchGoogleAdsStreamResponse{} }
+func (m *SearchGoogleAdsStreamResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsStreamResponse) ProtoMessage()    {}
+func (*SearchGoogleAdsStreamResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{3}
+}
+
+func (m *SearchGoogleAdsStreamResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsStreamResponse.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsStreamResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsStreamResponse.Marshal(b, m, deterministic)
+}
+func (m *SearchGoogleAdsStreamResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsStreamResponse.Merge(m, src)
+}
+func (m *SearchGoogleAdsStreamResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsStreamResponse.Size(m)
+}
+func (m *SearchGoogleAdsStreamResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsStreamResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsStreamResponse proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsStreamResponse) GetResults() []*GoogleAdsRow {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsStreamResponse) GetFieldMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.FieldMask
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsStreamResponse) GetSummaryRow() *GoogleAdsRow {
+	if m != nil {
+		return m.SummaryRow
+	}
+	return nil
+}
+
+// A returned row from the query.
+type GoogleAdsRow struct {
+	// The account budget in the query.
+	AccountBudget *resources.AccountBudget `protobuf:"bytes,42,opt,name=account_budget,json=accountBudget,proto3" json:"account_budget,omitempty"`
+	// The account budget proposal referenced in the query.
+	AccountBudgetProposal *resources.AccountBudgetProposal `protobuf:"bytes,43,opt,name=account_budget_proposal,json=accountBudgetProposal,proto3" json:"account_budget_proposal,omitempty"`
+	// The ad group referenced in the query.
+	AdGroup *resources.AdGroup `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ad referenced in the query.
+	AdGroupAd *resources.AdGroupAd `protobuf:"bytes,16,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The ad group ad asset view in the query.
+	AdGroupAdAssetView *resources.AdGroupAdAssetView `protobuf:"bytes,131,opt,name=ad_group_ad_asset_view,json=adGroupAdAssetView,proto3" json:"ad_group_ad_asset_view,omitempty"`
+	// The ad group ad label referenced in the query.
+	AdGroupAdLabel *resources.AdGroupAdLabel `protobuf:"bytes,120,opt,name=ad_group_ad_label,json=adGroupAdLabel,proto3" json:"ad_group_ad_label,omitempty"`
+	// The ad group audience view referenced in the query.
+	AdGroupAudienceView *resources.AdGroupAudienceView `protobuf:"bytes,57,opt,name=ad_group_audience_view,json=adGroupAudienceView,proto3" json:"ad_group_audience_view,omitempty"`
+	// The bid modifier referenced in the query.
+	AdGroupBidModifier *resources.AdGroupBidModifier `protobuf:"bytes,24,opt,name=ad_group_bid_modifier,json=adGroupBidModifier,proto3" json:"ad_group_bid_modifier,omitempty"`
+	// The criterion referenced in the query.
+	AdGroupCriterion *resources.AdGroupCriterion `protobuf:"bytes,17,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The ad group criterion label referenced in the query.
+	AdGroupCriterionLabel *resources.AdGroupCriterionLabel `protobuf:"bytes,121,opt,name=ad_group_criterion_label,json=adGroupCriterionLabel,proto3" json:"ad_group_criterion_label,omitempty"`
+	// The ad group criterion simulation referenced in the query.
+	AdGroupCriterionSimulation *resources.AdGroupCriterionSimulation `protobuf:"bytes,110,opt,name=ad_group_criterion_simulation,json=adGroupCriterionSimulation,proto3" json:"ad_group_criterion_simulation,omitempty"`
+	// The ad group extension setting referenced in the query.
+	AdGroupExtensionSetting *resources.AdGroupExtensionSetting `protobuf:"bytes,112,opt,name=ad_group_extension_setting,json=adGroupExtensionSetting,proto3" json:"ad_group_extension_setting,omitempty"`
+	// The ad group feed referenced in the query.
+	AdGroupFeed *resources.AdGroupFeed `protobuf:"bytes,67,opt,name=ad_group_feed,json=adGroupFeed,proto3" json:"ad_group_feed,omitempty"`
+	// The ad group label referenced in the query.
+	AdGroupLabel *resources.AdGroupLabel `protobuf:"bytes,115,opt,name=ad_group_label,json=adGroupLabel,proto3" json:"ad_group_label,omitempty"`
+	// The ad group simulation referenced in the query.
+	AdGroupSimulation *resources.AdGroupSimulation `protobuf:"bytes,107,opt,name=ad_group_simulation,json=adGroupSimulation,proto3" json:"ad_group_simulation,omitempty"`
+	// The ad parameter referenced in the query.
+	AdParameter *resources.AdParameter `protobuf:"bytes,130,opt,name=ad_parameter,json=adParameter,proto3" json:"ad_parameter,omitempty"`
+	// The age range view referenced in the query.
+	AgeRangeView *resources.AgeRangeView `protobuf:"bytes,48,opt,name=age_range_view,json=ageRangeView,proto3" json:"age_range_view,omitempty"`
+	// The ad schedule view referenced in the query.
+	AdScheduleView *resources.AdScheduleView `protobuf:"bytes,89,opt,name=ad_schedule_view,json=adScheduleView,proto3" json:"ad_schedule_view,omitempty"`
+	// The domain category referenced in the query.
+	DomainCategory *resources.DomainCategory `protobuf:"bytes,91,opt,name=domain_category,json=domainCategory,proto3" json:"domain_category,omitempty"`
+	// The asset referenced in the query.
+	Asset *resources.Asset `protobuf:"bytes,105,opt,name=asset,proto3" json:"asset,omitempty"`
+	// The bidding strategy referenced in the query.
+	BiddingStrategy *resources.BiddingStrategy `protobuf:"bytes,18,opt,name=bidding_strategy,json=biddingStrategy,proto3" json:"bidding_strategy,omitempty"`
+	// The billing setup referenced in the query.
+	BillingSetup *resources.BillingSetup `protobuf:"bytes,41,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The campaign budget referenced in the query.
+	CampaignBudget *resources.CampaignBudget `protobuf:"bytes,19,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The campaign referenced in the query.
+	Campaign *resources.Campaign `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The campaign audience view referenced in the query.
+	CampaignAudienceView *resources.CampaignAudienceView `protobuf:"bytes,69,opt,name=campaign_audience_view,json=campaignAudienceView,proto3" json:"campaign_audience_view,omitempty"`
+	// The campaign bid modifier referenced in the query.
+	CampaignBidModifier *resources.CampaignBidModifier `protobuf:"bytes,26,opt,name=campaign_bid_modifier,json=campaignBidModifier,proto3" json:"campaign_bid_modifier,omitempty"`
+	// The campaign criterion referenced in the query.
+	CampaignCriterion *resources.CampaignCriterion `protobuf:"bytes,20,opt,name=campaign_criterion,json=campaignCriterion,proto3" json:"campaign_criterion,omitempty"`
+	// The campaign criterion simulation referenced in the query.
+	CampaignCriterionSimulation *resources.CampaignCriterionSimulation `protobuf:"bytes,111,opt,name=campaign_criterion_simulation,json=campaignCriterionSimulation,proto3" json:"campaign_criterion_simulation,omitempty"`
+	// The campaign draft referenced in the query.
+	CampaignDraft *resources.CampaignDraft `protobuf:"bytes,49,opt,name=campaign_draft,json=campaignDraft,proto3" json:"campaign_draft,omitempty"`
+	// The campaign experiment referenced in the query.
+	CampaignExperiment *resources.CampaignExperiment `protobuf:"bytes,84,opt,name=campaign_experiment,json=campaignExperiment,proto3" json:"campaign_experiment,omitempty"`
+	// The campaign extension setting referenced in the query.
+	CampaignExtensionSetting *resources.CampaignExtensionSetting `protobuf:"bytes,113,opt,name=campaign_extension_setting,json=campaignExtensionSetting,proto3" json:"campaign_extension_setting,omitempty"`
+	// The campaign feed referenced in the query.
+	CampaignFeed *resources.CampaignFeed `protobuf:"bytes,63,opt,name=campaign_feed,json=campaignFeed,proto3" json:"campaign_feed,omitempty"`
+	// The campaign label referenced in the query.
+	CampaignLabel *resources.CampaignLabel `protobuf:"bytes,108,opt,name=campaign_label,json=campaignLabel,proto3" json:"campaign_label,omitempty"`
+	// Campaign Shared Set referenced in AWQL query.
+	CampaignSharedSet *resources.CampaignSharedSet `protobuf:"bytes,30,opt,name=campaign_shared_set,json=campaignSharedSet,proto3" json:"campaign_shared_set,omitempty"`
+	// The carrier constant referenced in the query.
+	CarrierConstant *resources.CarrierConstant `protobuf:"bytes,66,opt,name=carrier_constant,json=carrierConstant,proto3" json:"carrier_constant,omitempty"`
+	// The ChangeStatus referenced in the query.
+	ChangeStatus *resources.ChangeStatus `protobuf:"bytes,37,opt,name=change_status,json=changeStatus,proto3" json:"change_status,omitempty"`
+	// The conversion action referenced in the query.
+	ConversionAction *resources.ConversionAction `protobuf:"bytes,103,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The ClickView referenced in the query.
+	ClickView *resources.ClickView `protobuf:"bytes,122,opt,name=click_view,json=clickView,proto3" json:"click_view,omitempty"`
+	// The currency constant referenced in the query.
+	CurrencyConstant *resources.CurrencyConstant `protobuf:"bytes,134,opt,name=currency_constant,json=currencyConstant,proto3" json:"currency_constant,omitempty"`
+	// The CustomInterest referenced in the query.
+	CustomInterest *resources.CustomInterest `protobuf:"bytes,104,opt,name=custom_interest,json=customInterest,proto3" json:"custom_interest,omitempty"`
+	// The customer referenced in the query.
+	Customer *resources.Customer `protobuf:"bytes,1,opt,name=customer,proto3" json:"customer,omitempty"`
+	// The CustomerManagerLink referenced in the query.
+	CustomerManagerLink *resources.CustomerManagerLink `protobuf:"bytes,61,opt,name=customer_manager_link,json=customerManagerLink,proto3" json:"customer_manager_link,omitempty"`
+	// The CustomerClientLink referenced in the query.
+	CustomerClientLink *resources.CustomerClientLink `protobuf:"bytes,62,opt,name=customer_client_link,json=customerClientLink,proto3" json:"customer_client_link,omitempty"`
+	// The CustomerClient referenced in the query.
+	CustomerClient *resources.CustomerClient `protobuf:"bytes,70,opt,name=customer_client,json=customerClient,proto3" json:"customer_client,omitempty"`
+	// The customer extension setting referenced in the query.
+	CustomerExtensionSetting *resources.CustomerExtensionSetting `protobuf:"bytes,114,opt,name=customer_extension_setting,json=customerExtensionSetting,proto3" json:"customer_extension_setting,omitempty"`
+	// The customer feed referenced in the query.
+	CustomerFeed *resources.CustomerFeed `protobuf:"bytes,64,opt,name=customer_feed,json=customerFeed,proto3" json:"customer_feed,omitempty"`
+	// The customer label referenced in the query.
+	CustomerLabel *resources.CustomerLabel `protobuf:"bytes,124,opt,name=customer_label,json=customerLabel,proto3" json:"customer_label,omitempty"`
+	// The customer negative criterion referenced in the query.
+	CustomerNegativeCriterion *resources.CustomerNegativeCriterion `protobuf:"bytes,88,opt,name=customer_negative_criterion,json=customerNegativeCriterion,proto3" json:"customer_negative_criterion,omitempty"`
+	// The detail placement view referenced in the query.
+	DetailPlacementView *resources.DetailPlacementView `protobuf:"bytes,118,opt,name=detail_placement_view,json=detailPlacementView,proto3" json:"detail_placement_view,omitempty"`
+	// The display keyword view referenced in the query.
+	DisplayKeywordView *resources.DisplayKeywordView `protobuf:"bytes,47,opt,name=display_keyword_view,json=displayKeywordView,proto3" json:"display_keyword_view,omitempty"`
+	// The distance view referenced in the query.
+	DistanceView *resources.DistanceView `protobuf:"bytes,132,opt,name=distance_view,json=distanceView,proto3" json:"distance_view,omitempty"`
+	// The dynamic search ads search term view referenced in the query.
+	DynamicSearchAdsSearchTermView *resources.DynamicSearchAdsSearchTermView `protobuf:"bytes,106,opt,name=dynamic_search_ads_search_term_view,json=dynamicSearchAdsSearchTermView,proto3" json:"dynamic_search_ads_search_term_view,omitempty"`
+	// The expanded landing page view referenced in the query.
+	ExpandedLandingPageView *resources.ExpandedLandingPageView `protobuf:"bytes,128,opt,name=expanded_landing_page_view,json=expandedLandingPageView,proto3" json:"expanded_landing_page_view,omitempty"`
+	// The extension feed item referenced in the query.
+	ExtensionFeedItem *resources.ExtensionFeedItem `protobuf:"bytes,85,opt,name=extension_feed_item,json=extensionFeedItem,proto3" json:"extension_feed_item,omitempty"`
+	// The feed referenced in the query.
+	Feed *resources.Feed `protobuf:"bytes,46,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The feed item referenced in the query.
+	FeedItem *resources.FeedItem `protobuf:"bytes,50,opt,name=feed_item,json=feedItem,proto3" json:"feed_item,omitempty"`
+	// The feed item target referenced in the query.
+	FeedItemTarget *resources.FeedItemTarget `protobuf:"bytes,116,opt,name=feed_item_target,json=feedItemTarget,proto3" json:"feed_item_target,omitempty"`
+	// The feed mapping referenced in the query.
+	FeedMapping *resources.FeedMapping `protobuf:"bytes,58,opt,name=feed_mapping,json=feedMapping,proto3" json:"feed_mapping,omitempty"`
+	// The feed placeholder view referenced in the query.
+	FeedPlaceholderView *resources.FeedPlaceholderView `protobuf:"bytes,97,opt,name=feed_placeholder_view,json=feedPlaceholderView,proto3" json:"feed_placeholder_view,omitempty"`
+	// The gender view referenced in the query.
+	GenderView *resources.GenderView `protobuf:"bytes,40,opt,name=gender_view,json=genderView,proto3" json:"gender_view,omitempty"`
+	// The geo target constant referenced in the query.
+	GeoTargetConstant *resources.GeoTargetConstant `protobuf:"bytes,23,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	// The geographic view referenced in the query.
+	GeographicView *resources.GeographicView `protobuf:"bytes,125,opt,name=geographic_view,json=geographicView,proto3" json:"geographic_view,omitempty"`
+	// The group placement view referenced in the query.
+	GroupPlacementView *resources.GroupPlacementView `protobuf:"bytes,119,opt,name=group_placement_view,json=groupPlacementView,proto3" json:"group_placement_view,omitempty"`
+	// The hotel group view referenced in the query.
+	HotelGroupView *resources.HotelGroupView `protobuf:"bytes,51,opt,name=hotel_group_view,json=hotelGroupView,proto3" json:"hotel_group_view,omitempty"`
+	// The hotel performance view referenced in the query.
+	HotelPerformanceView *resources.HotelPerformanceView `protobuf:"bytes,71,opt,name=hotel_performance_view,json=hotelPerformanceView,proto3" json:"hotel_performance_view,omitempty"`
+	// The keyword view referenced in the query.
+	KeywordView *resources.KeywordView `protobuf:"bytes,21,opt,name=keyword_view,json=keywordView,proto3" json:"keyword_view,omitempty"`
+	// The keyword plan referenced in the query.
+	KeywordPlan *resources.KeywordPlan `protobuf:"bytes,32,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	// The keyword plan campaign referenced in the query.
+	KeywordPlanCampaign *resources.KeywordPlanCampaign `protobuf:"bytes,33,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The keyword plan negative keyword referenced in the query.
+	KeywordPlanNegativeKeyword *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,34,opt,name=keyword_plan_negative_keyword,json=keywordPlanNegativeKeyword,proto3" json:"keyword_plan_negative_keyword,omitempty"`
+	// The keyword plan ad group referenced in the query.
+	KeywordPlanAdGroup *resources.KeywordPlanAdGroup `protobuf:"bytes,35,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The keyword plan keyword referenced in the query.
+	KeywordPlanKeyword *resources.KeywordPlanKeyword `protobuf:"bytes,36,opt,name=keyword_plan_keyword,json=keywordPlanKeyword,proto3" json:"keyword_plan_keyword,omitempty"`
+	// The label referenced in the query.
+	Label *resources.Label `protobuf:"bytes,52,opt,name=label,proto3" json:"label,omitempty"`
+	// The landing page view referenced in the query.
+	LandingPageView *resources.LandingPageView `protobuf:"bytes,126,opt,name=landing_page_view,json=landingPageView,proto3" json:"landing_page_view,omitempty"`
+	// The language constant referenced in the query.
+	LanguageConstant *resources.LanguageConstant `protobuf:"bytes,55,opt,name=language_constant,json=languageConstant,proto3" json:"language_constant,omitempty"`
+	// The location view referenced in the query.
+	LocationView *resources.LocationView `protobuf:"bytes,123,opt,name=location_view,json=locationView,proto3" json:"location_view,omitempty"`
+	// The managed placement view referenced in the query.
+	ManagedPlacementView *resources.ManagedPlacementView `protobuf:"bytes,53,opt,name=managed_placement_view,json=managedPlacementView,proto3" json:"managed_placement_view,omitempty"`
+	// The media file referenced in the query.
+	MediaFile *resources.MediaFile `protobuf:"bytes,90,opt,name=media_file,json=mediaFile,proto3" json:"media_file,omitempty"`
+	// The mobile app category constant referenced in the query.
+	MobileAppCategoryConstant *resources.MobileAppCategoryConstant `protobuf:"bytes,87,opt,name=mobile_app_category_constant,json=mobileAppCategoryConstant,proto3" json:"mobile_app_category_constant,omitempty"`
+	// The mobile device constant referenced in the query.
+	MobileDeviceConstant *resources.MobileDeviceConstant `protobuf:"bytes,98,opt,name=mobile_device_constant,json=mobileDeviceConstant,proto3" json:"mobile_device_constant,omitempty"`
+	// The mutate job referenced in the query.
+	MutateJob *resources.MutateJob `protobuf:"bytes,127,opt,name=mutate_job,json=mutateJob,proto3" json:"mutate_job,omitempty"`
+	// The operating system version constant referenced in the query.
+	OperatingSystemVersionConstant *resources.OperatingSystemVersionConstant `protobuf:"bytes,86,opt,name=operating_system_version_constant,json=operatingSystemVersionConstant,proto3" json:"operating_system_version_constant,omitempty"`
+	// The paid organic search term view referenced in the query.
+	PaidOrganicSearchTermView *resources.PaidOrganicSearchTermView `protobuf:"bytes,129,opt,name=paid_organic_search_term_view,json=paidOrganicSearchTermView,proto3" json:"paid_organic_search_term_view,omitempty"`
+	// The parental status view referenced in the query.
+	ParentalStatusView *resources.ParentalStatusView `protobuf:"bytes,45,opt,name=parental_status_view,json=parentalStatusView,proto3" json:"parental_status_view,omitempty"`
+	// The Product Bidding Category referenced in the query.
+	ProductBiddingCategoryConstant *resources.ProductBiddingCategoryConstant `protobuf:"bytes,109,opt,name=product_bidding_category_constant,json=productBiddingCategoryConstant,proto3" json:"product_bidding_category_constant,omitempty"`
+	// The product group view referenced in the query.
+	ProductGroupView *resources.ProductGroupView `protobuf:"bytes,54,opt,name=product_group_view,json=productGroupView,proto3" json:"product_group_view,omitempty"`
+	// The recommendation referenced in the query.
+	Recommendation *resources.Recommendation `protobuf:"bytes,22,opt,name=recommendation,proto3" json:"recommendation,omitempty"`
+	// The search term view referenced in the query.
+	SearchTermView *resources.SearchTermView `protobuf:"bytes,68,opt,name=search_term_view,json=searchTermView,proto3" json:"search_term_view,omitempty"`
+	// The shared set referenced in the query.
+	SharedCriterion *resources.SharedCriterion `protobuf:"bytes,29,opt,name=shared_criterion,json=sharedCriterion,proto3" json:"shared_criterion,omitempty"`
+	// The shared set referenced in the query.
+	SharedSet *resources.SharedSet `protobuf:"bytes,27,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The shopping performance view referenced in the query.
+	ShoppingPerformanceView *resources.ShoppingPerformanceView `protobuf:"bytes,117,opt,name=shopping_performance_view,json=shoppingPerformanceView,proto3" json:"shopping_performance_view,omitempty"`
+	// The topic view referenced in the query.
+	TopicView *resources.TopicView `protobuf:"bytes,44,opt,name=topic_view,json=topicView,proto3" json:"topic_view,omitempty"`
+	// The user interest referenced in the query.
+	UserInterest *resources.UserInterest `protobuf:"bytes,59,opt,name=user_interest,json=userInterest,proto3" json:"user_interest,omitempty"`
+	// The user list referenced in the query.
+	UserList *resources.UserList `protobuf:"bytes,38,opt,name=user_list,json=userList,proto3" json:"user_list,omitempty"`
+	// The user location view referenced in the query.
+	UserLocationView *resources.UserLocationView `protobuf:"bytes,135,opt,name=user_location_view,json=userLocationView,proto3" json:"user_location_view,omitempty"`
+	// The remarketing action referenced in the query.
+	RemarketingAction *resources.RemarketingAction `protobuf:"bytes,60,opt,name=remarketing_action,json=remarketingAction,proto3" json:"remarketing_action,omitempty"`
+	// The topic constant referenced in the query.
+	TopicConstant *resources.TopicConstant `protobuf:"bytes,31,opt,name=topic_constant,json=topicConstant,proto3" json:"topic_constant,omitempty"`
+	// The video referenced in the query.
+	Video *resources.Video `protobuf:"bytes,39,opt,name=video,proto3" json:"video,omitempty"`
+	// The metrics.
+	Metrics *common.Metrics `protobuf:"bytes,4,opt,name=metrics,proto3" json:"metrics,omitempty"`
+	// The segments.
+	Segments             *common.Segments `protobuf:"bytes,102,opt,name=segments,proto3" json:"segments,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *GoogleAdsRow) Reset()         { *m = GoogleAdsRow{} }
+func (m *GoogleAdsRow) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsRow) ProtoMessage()    {}
+func (*GoogleAdsRow) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{4}
+}
+
+func (m *GoogleAdsRow) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsRow.Unmarshal(m, b)
+}
+func (m *GoogleAdsRow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsRow.Marshal(b, m, deterministic)
+}
+func (m *GoogleAdsRow) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsRow.Merge(m, src)
+}
+func (m *GoogleAdsRow) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsRow.Size(m)
+}
+func (m *GoogleAdsRow) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsRow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsRow proto.InternalMessageInfo
+
+func (m *GoogleAdsRow) GetAccountBudget() *resources.AccountBudget {
+	if m != nil {
+		return m.AccountBudget
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAccountBudgetProposal() *resources.AccountBudgetProposal {
+	if m != nil {
+		return m.AccountBudgetProposal
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroup() *resources.AdGroup {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAd() *resources.AdGroupAd {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAdAssetView() *resources.AdGroupAdAssetView {
+	if m != nil {
+		return m.AdGroupAdAssetView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAdLabel() *resources.AdGroupAdLabel {
+	if m != nil {
+		return m.AdGroupAdLabel
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAudienceView() *resources.AdGroupAudienceView {
+	if m != nil {
+		return m.AdGroupAudienceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupBidModifier() *resources.AdGroupBidModifier {
+	if m != nil {
+		return m.AdGroupBidModifier
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupCriterion() *resources.AdGroupCriterion {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupCriterionLabel() *resources.AdGroupCriterionLabel {
+	if m != nil {
+		return m.AdGroupCriterionLabel
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupCriterionSimulation() *resources.AdGroupCriterionSimulation {
+	if m != nil {
+		return m.AdGroupCriterionSimulation
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupExtensionSetting() *resources.AdGroupExtensionSetting {
+	if m != nil {
+		return m.AdGroupExtensionSetting
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupFeed() *resources.AdGroupFeed {
+	if m != nil {
+		return m.AdGroupFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupLabel() *resources.AdGroupLabel {
+	if m != nil {
+		return m.AdGroupLabel
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupSimulation() *resources.AdGroupSimulation {
+	if m != nil {
+		return m.AdGroupSimulation
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdParameter() *resources.AdParameter {
+	if m != nil {
+		return m.AdParameter
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAgeRangeView() *resources.AgeRangeView {
+	if m != nil {
+		return m.AgeRangeView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdScheduleView() *resources.AdScheduleView {
+	if m != nil {
+		return m.AdScheduleView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDomainCategory() *resources.DomainCategory {
+	if m != nil {
+		return m.DomainCategory
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAsset() *resources.Asset {
+	if m != nil {
+		return m.Asset
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetBiddingStrategy() *resources.BiddingStrategy {
+	if m != nil {
+		return m.BiddingStrategy
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetBillingSetup() *resources.BillingSetup {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignBudget() *resources.CampaignBudget {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaign() *resources.Campaign {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignAudienceView() *resources.CampaignAudienceView {
+	if m != nil {
+		return m.CampaignAudienceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignBidModifier() *resources.CampaignBidModifier {
+	if m != nil {
+		return m.CampaignBidModifier
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignCriterion() *resources.CampaignCriterion {
+	if m != nil {
+		return m.CampaignCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignCriterionSimulation() *resources.CampaignCriterionSimulation {
+	if m != nil {
+		return m.CampaignCriterionSimulation
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignDraft() *resources.CampaignDraft {
+	if m != nil {
+		return m.CampaignDraft
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignExperiment() *resources.CampaignExperiment {
+	if m != nil {
+		return m.CampaignExperiment
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignExtensionSetting() *resources.CampaignExtensionSetting {
+	if m != nil {
+		return m.CampaignExtensionSetting
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignFeed() *resources.CampaignFeed {
+	if m != nil {
+		return m.CampaignFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignLabel() *resources.CampaignLabel {
+	if m != nil {
+		return m.CampaignLabel
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignSharedSet() *resources.CampaignSharedSet {
+	if m != nil {
+		return m.CampaignSharedSet
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCarrierConstant() *resources.CarrierConstant {
+	if m != nil {
+		return m.CarrierConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetChangeStatus() *resources.ChangeStatus {
+	if m != nil {
+		return m.ChangeStatus
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetConversionAction() *resources.ConversionAction {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetClickView() *resources.ClickView {
+	if m != nil {
+		return m.ClickView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCurrencyConstant() *resources.CurrencyConstant {
+	if m != nil {
+		return m.CurrencyConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomInterest() *resources.CustomInterest {
+	if m != nil {
+		return m.CustomInterest
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomer() *resources.Customer {
+	if m != nil {
+		return m.Customer
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerManagerLink() *resources.CustomerManagerLink {
+	if m != nil {
+		return m.CustomerManagerLink
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerClientLink() *resources.CustomerClientLink {
+	if m != nil {
+		return m.CustomerClientLink
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerClient() *resources.CustomerClient {
+	if m != nil {
+		return m.CustomerClient
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerExtensionSetting() *resources.CustomerExtensionSetting {
+	if m != nil {
+		return m.CustomerExtensionSetting
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerFeed() *resources.CustomerFeed {
+	if m != nil {
+		return m.CustomerFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerLabel() *resources.CustomerLabel {
+	if m != nil {
+		return m.CustomerLabel
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerNegativeCriterion() *resources.CustomerNegativeCriterion {
+	if m != nil {
+		return m.CustomerNegativeCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDetailPlacementView() *resources.DetailPlacementView {
+	if m != nil {
+		return m.DetailPlacementView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDisplayKeywordView() *resources.DisplayKeywordView {
+	if m != nil {
+		return m.DisplayKeywordView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDistanceView() *resources.DistanceView {
+	if m != nil {
+		return m.DistanceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDynamicSearchAdsSearchTermView() *resources.DynamicSearchAdsSearchTermView {
+	if m != nil {
+		return m.DynamicSearchAdsSearchTermView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetExpandedLandingPageView() *resources.ExpandedLandingPageView {
+	if m != nil {
+		return m.ExpandedLandingPageView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetExtensionFeedItem() *resources.ExtensionFeedItem {
+	if m != nil {
+		return m.ExtensionFeedItem
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeed() *resources.Feed {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedItem() *resources.FeedItem {
+	if m != nil {
+		return m.FeedItem
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedItemTarget() *resources.FeedItemTarget {
+	if m != nil {
+		return m.FeedItemTarget
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedMapping() *resources.FeedMapping {
+	if m != nil {
+		return m.FeedMapping
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedPlaceholderView() *resources.FeedPlaceholderView {
+	if m != nil {
+		return m.FeedPlaceholderView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGenderView() *resources.GenderView {
+	if m != nil {
+		return m.GenderView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGeoTargetConstant() *resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGeographicView() *resources.GeographicView {
+	if m != nil {
+		return m.GeographicView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGroupPlacementView() *resources.GroupPlacementView {
+	if m != nil {
+		return m.GroupPlacementView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelGroupView() *resources.HotelGroupView {
+	if m != nil {
+		return m.HotelGroupView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelPerformanceView() *resources.HotelPerformanceView {
+	if m != nil {
+		return m.HotelPerformanceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordView() *resources.KeywordView {
+	if m != nil {
+		return m.KeywordView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlan() *resources.KeywordPlan {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanCampaign() *resources.KeywordPlanCampaign {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanNegativeKeyword() *resources.KeywordPlanNegativeKeyword {
+	if m != nil {
+		return m.KeywordPlanNegativeKeyword
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanAdGroup() *resources.KeywordPlanAdGroup {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanKeyword() *resources.KeywordPlanKeyword {
+	if m != nil {
+		return m.KeywordPlanKeyword
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetLabel() *resources.Label {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetLandingPageView() *resources.LandingPageView {
+	if m != nil {
+		return m.LandingPageView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetLanguageConstant() *resources.LanguageConstant {
+	if m != nil {
+		return m.LanguageConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetLocationView() *resources.LocationView {
+	if m != nil {
+		return m.LocationView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetManagedPlacementView() *resources.ManagedPlacementView {
+	if m != nil {
+		return m.ManagedPlacementView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMediaFile() *resources.MediaFile {
+	if m != nil {
+		return m.MediaFile
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMobileAppCategoryConstant() *resources.MobileAppCategoryConstant {
+	if m != nil {
+		return m.MobileAppCategoryConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMobileDeviceConstant() *resources.MobileDeviceConstant {
+	if m != nil {
+		return m.MobileDeviceConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMutateJob() *resources.MutateJob {
+	if m != nil {
+		return m.MutateJob
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetOperatingSystemVersionConstant() *resources.OperatingSystemVersionConstant {
+	if m != nil {
+		return m.OperatingSystemVersionConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetPaidOrganicSearchTermView() *resources.PaidOrganicSearchTermView {
+	if m != nil {
+		return m.PaidOrganicSearchTermView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetParentalStatusView() *resources.ParentalStatusView {
+	if m != nil {
+		return m.ParentalStatusView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetProductBiddingCategoryConstant() *resources.ProductBiddingCategoryConstant {
+	if m != nil {
+		return m.ProductBiddingCategoryConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetProductGroupView() *resources.ProductGroupView {
+	if m != nil {
+		return m.ProductGroupView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetRecommendation() *resources.Recommendation {
+	if m != nil {
+		return m.Recommendation
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSearchTermView() *resources.SearchTermView {
+	if m != nil {
+		return m.SearchTermView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSharedCriterion() *resources.SharedCriterion {
+	if m != nil {
+		return m.SharedCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSharedSet() *resources.SharedSet {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetShoppingPerformanceView() *resources.ShoppingPerformanceView {
+	if m != nil {
+		return m.ShoppingPerformanceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetTopicView() *resources.TopicView {
+	if m != nil {
+		return m.TopicView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetUserInterest() *resources.UserInterest {
+	if m != nil {
+		return m.UserInterest
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetUserList() *resources.UserList {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetUserLocationView() *resources.UserLocationView {
+	if m != nil {
+		return m.UserLocationView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetRemarketingAction() *resources.RemarketingAction {
+	if m != nil {
+		return m.RemarketingAction
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetTopicConstant() *resources.TopicConstant {
+	if m != nil {
+		return m.TopicConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetVideo() *resources.Video {
+	if m != nil {
+		return m.Video
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMetrics() *common.Metrics {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSegments() *common.Segments {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+// Request message for [GoogleAdsService.Mutate][google.ads.googleads.v3.services.GoogleAdsService.Mutate].
+type MutateGoogleAdsRequest struct {
+	// Required. The ID of the customer whose resources are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual resources.
+	MutateOperations []*MutateOperation `protobuf:"bytes,2,rep,name=mutate_operations,json=mutateOperations,proto3" json:"mutate_operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateGoogleAdsRequest) Reset()         { *m = MutateGoogleAdsRequest{} }
+func (m *MutateGoogleAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateGoogleAdsRequest) ProtoMessage()    {}
+func (*MutateGoogleAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{5}
+}
+
+func (m *MutateGoogleAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Unmarshal(m, b)
+}
+func (m *MutateGoogleAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateGoogleAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateGoogleAdsRequest.Merge(m, src)
+}
+func (m *MutateGoogleAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Size(m)
+}
+func (m *MutateGoogleAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateGoogleAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateGoogleAdsRequest proto.InternalMessageInfo
+
+func (m *MutateGoogleAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateGoogleAdsRequest) GetMutateOperations() []*MutateOperation {
+	if m != nil {
+		return m.MutateOperations
+	}
+	return nil
+}
+
+func (m *MutateGoogleAdsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateGoogleAdsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// Response message for [GoogleAdsService.Mutate][google.ads.googleads.v3.services.GoogleAdsService.Mutate].
+type MutateGoogleAdsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g., auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All responses for the mutate.
+	MutateOperationResponses []*MutateOperationResponse `protobuf:"bytes,1,rep,name=mutate_operation_responses,json=mutateOperationResponses,proto3" json:"mutate_operation_responses,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                   `json:"-"`
+	XXX_unrecognized         []byte                     `json:"-"`
+	XXX_sizecache            int32                      `json:"-"`
+}
+
+func (m *MutateGoogleAdsResponse) Reset()         { *m = MutateGoogleAdsResponse{} }
+func (m *MutateGoogleAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateGoogleAdsResponse) ProtoMessage()    {}
+func (*MutateGoogleAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{6}
+}
+
+func (m *MutateGoogleAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Unmarshal(m, b)
+}
+func (m *MutateGoogleAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateGoogleAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateGoogleAdsResponse.Merge(m, src)
+}
+func (m *MutateGoogleAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Size(m)
+}
+func (m *MutateGoogleAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateGoogleAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateGoogleAdsResponse proto.InternalMessageInfo
+
+func (m *MutateGoogleAdsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateGoogleAdsResponse) GetMutateOperationResponses() []*MutateOperationResponse {
+	if m != nil {
+		return m.MutateOperationResponses
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a resource.
+type MutateOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*MutateOperation_AdGroupAdLabelOperation
+	//	*MutateOperation_AdGroupAdOperation
+	//	*MutateOperation_AdGroupBidModifierOperation
+	//	*MutateOperation_AdGroupCriterionLabelOperation
+	//	*MutateOperation_AdGroupCriterionOperation
+	//	*MutateOperation_AdGroupExtensionSettingOperation
+	//	*MutateOperation_AdGroupFeedOperation
+	//	*MutateOperation_AdGroupLabelOperation
+	//	*MutateOperation_AdGroupOperation
+	//	*MutateOperation_AdParameterOperation
+	//	*MutateOperation_AssetOperation
+	//	*MutateOperation_BiddingStrategyOperation
+	//	*MutateOperation_CampaignBidModifierOperation
+	//	*MutateOperation_CampaignBudgetOperation
+	//	*MutateOperation_CampaignCriterionOperation
+	//	*MutateOperation_CampaignDraftOperation
+	//	*MutateOperation_CampaignExperimentOperation
+	//	*MutateOperation_CampaignExtensionSettingOperation
+	//	*MutateOperation_CampaignFeedOperation
+	//	*MutateOperation_CampaignLabelOperation
+	//	*MutateOperation_CampaignOperation
+	//	*MutateOperation_CampaignSharedSetOperation
+	//	*MutateOperation_ConversionActionOperation
+	//	*MutateOperation_CustomerExtensionSettingOperation
+	//	*MutateOperation_CustomerFeedOperation
+	//	*MutateOperation_CustomerLabelOperation
+	//	*MutateOperation_CustomerNegativeCriterionOperation
+	//	*MutateOperation_CustomerOperation
+	//	*MutateOperation_ExtensionFeedItemOperation
+	//	*MutateOperation_FeedItemOperation
+	//	*MutateOperation_FeedItemTargetOperation
+	//	*MutateOperation_FeedMappingOperation
+	//	*MutateOperation_FeedOperation
+	//	*MutateOperation_LabelOperation
+	//	*MutateOperation_MediaFileOperation
+	//	*MutateOperation_RemarketingActionOperation
+	//	*MutateOperation_SharedCriterionOperation
+	//	*MutateOperation_SharedSetOperation
+	//	*MutateOperation_UserListOperation
+	Operation            isMutateOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateOperation) Reset()         { *m = MutateOperation{} }
+func (m *MutateOperation) String() string { return proto.CompactTextString(m) }
+func (*MutateOperation) ProtoMessage()    {}
+func (*MutateOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{7}
+}
+
+func (m *MutateOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateOperation.Unmarshal(m, b)
+}
+func (m *MutateOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateOperation.Marshal(b, m, deterministic)
+}
+func (m *MutateOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateOperation.Merge(m, src)
+}
+func (m *MutateOperation) XXX_Size() int {
+	return xxx_messageInfo_MutateOperation.Size(m)
+}
+func (m *MutateOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateOperation proto.InternalMessageInfo
+
+type isMutateOperation_Operation interface {
+	isMutateOperation_Operation()
+}
+
+type MutateOperation_AdGroupAdLabelOperation struct {
+	AdGroupAdLabelOperation *AdGroupAdLabelOperation `protobuf:"bytes,17,opt,name=ad_group_ad_label_operation,json=adGroupAdLabelOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupAdOperation struct {
+	AdGroupAdOperation *AdGroupAdOperation `protobuf:"bytes,1,opt,name=ad_group_ad_operation,json=adGroupAdOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupBidModifierOperation struct {
+	AdGroupBidModifierOperation *AdGroupBidModifierOperation `protobuf:"bytes,2,opt,name=ad_group_bid_modifier_operation,json=adGroupBidModifierOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupCriterionLabelOperation struct {
+	AdGroupCriterionLabelOperation *AdGroupCriterionLabelOperation `protobuf:"bytes,18,opt,name=ad_group_criterion_label_operation,json=adGroupCriterionLabelOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupCriterionOperation struct {
+	AdGroupCriterionOperation *AdGroupCriterionOperation `protobuf:"bytes,3,opt,name=ad_group_criterion_operation,json=adGroupCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupExtensionSettingOperation struct {
+	AdGroupExtensionSettingOperation *AdGroupExtensionSettingOperation `protobuf:"bytes,19,opt,name=ad_group_extension_setting_operation,json=adGroupExtensionSettingOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupFeedOperation struct {
+	AdGroupFeedOperation *AdGroupFeedOperation `protobuf:"bytes,20,opt,name=ad_group_feed_operation,json=adGroupFeedOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupLabelOperation struct {
+	AdGroupLabelOperation *AdGroupLabelOperation `protobuf:"bytes,21,opt,name=ad_group_label_operation,json=adGroupLabelOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupOperation struct {
+	AdGroupOperation *AdGroupOperation `protobuf:"bytes,5,opt,name=ad_group_operation,json=adGroupOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdParameterOperation struct {
+	AdParameterOperation *AdParameterOperation `protobuf:"bytes,22,opt,name=ad_parameter_operation,json=adParameterOperation,proto3,oneof"`
+}
+
+type MutateOperation_AssetOperation struct {
+	AssetOperation *AssetOperation `protobuf:"bytes,23,opt,name=asset_operation,json=assetOperation,proto3,oneof"`
+}
+
+type MutateOperation_BiddingStrategyOperation struct {
+	BiddingStrategyOperation *BiddingStrategyOperation `protobuf:"bytes,6,opt,name=bidding_strategy_operation,json=biddingStrategyOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignBidModifierOperation struct {
+	CampaignBidModifierOperation *CampaignBidModifierOperation `protobuf:"bytes,7,opt,name=campaign_bid_modifier_operation,json=campaignBidModifierOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignBudgetOperation struct {
+	CampaignBudgetOperation *CampaignBudgetOperation `protobuf:"bytes,8,opt,name=campaign_budget_operation,json=campaignBudgetOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignCriterionOperation struct {
+	CampaignCriterionOperation *CampaignCriterionOperation `protobuf:"bytes,13,opt,name=campaign_criterion_operation,json=campaignCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignDraftOperation struct {
+	CampaignDraftOperation *CampaignDraftOperation `protobuf:"bytes,24,opt,name=campaign_draft_operation,json=campaignDraftOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignExperimentOperation struct {
+	CampaignExperimentOperation *CampaignExperimentOperation `protobuf:"bytes,25,opt,name=campaign_experiment_operation,json=campaignExperimentOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignExtensionSettingOperation struct {
+	CampaignExtensionSettingOperation *CampaignExtensionSettingOperation `protobuf:"bytes,26,opt,name=campaign_extension_setting_operation,json=campaignExtensionSettingOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignFeedOperation struct {
+	CampaignFeedOperation *CampaignFeedOperation `protobuf:"bytes,27,opt,name=campaign_feed_operation,json=campaignFeedOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignLabelOperation struct {
+	CampaignLabelOperation *CampaignLabelOperation `protobuf:"bytes,28,opt,name=campaign_label_operation,json=campaignLabelOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignOperation struct {
+	CampaignOperation *CampaignOperation `protobuf:"bytes,10,opt,name=campaign_operation,json=campaignOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignSharedSetOperation struct {
+	CampaignSharedSetOperation *CampaignSharedSetOperation `protobuf:"bytes,11,opt,name=campaign_shared_set_operation,json=campaignSharedSetOperation,proto3,oneof"`
+}
+
+type MutateOperation_ConversionActionOperation struct {
+	ConversionActionOperation *ConversionActionOperation `protobuf:"bytes,12,opt,name=conversion_action_operation,json=conversionActionOperation,proto3,oneof"`
+}
+
+type MutateOperation_CustomerExtensionSettingOperation struct {
+	CustomerExtensionSettingOperation *CustomerExtensionSettingOperation `protobuf:"bytes,30,opt,name=customer_extension_setting_operation,json=customerExtensionSettingOperation,proto3,oneof"`
+}
+
+type MutateOperation_CustomerFeedOperation struct {
+	CustomerFeedOperation *CustomerFeedOperation `protobuf:"bytes,31,opt,name=customer_feed_operation,json=customerFeedOperation,proto3,oneof"`
+}
+
+type MutateOperation_CustomerLabelOperation struct {
+	CustomerLabelOperation *CustomerLabelOperation `protobuf:"bytes,32,opt,name=customer_label_operation,json=customerLabelOperation,proto3,oneof"`
+}
+
+type MutateOperation_CustomerNegativeCriterionOperation struct {
+	CustomerNegativeCriterionOperation *CustomerNegativeCriterionOperation `protobuf:"bytes,34,opt,name=customer_negative_criterion_operation,json=customerNegativeCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_CustomerOperation struct {
+	CustomerOperation *CustomerOperation `protobuf:"bytes,35,opt,name=customer_operation,json=customerOperation,proto3,oneof"`
+}
+
+type MutateOperation_ExtensionFeedItemOperation struct {
+	ExtensionFeedItemOperation *ExtensionFeedItemOperation `protobuf:"bytes,36,opt,name=extension_feed_item_operation,json=extensionFeedItemOperation,proto3,oneof"`
+}
+
+type MutateOperation_FeedItemOperation struct {
+	FeedItemOperation *FeedItemOperation `protobuf:"bytes,37,opt,name=feed_item_operation,json=feedItemOperation,proto3,oneof"`
+}
+
+type MutateOperation_FeedItemTargetOperation struct {
+	FeedItemTargetOperation *FeedItemTargetOperation `protobuf:"bytes,38,opt,name=feed_item_target_operation,json=feedItemTargetOperation,proto3,oneof"`
+}
+
+type MutateOperation_FeedMappingOperation struct {
+	FeedMappingOperation *FeedMappingOperation `protobuf:"bytes,39,opt,name=feed_mapping_operation,json=feedMappingOperation,proto3,oneof"`
+}
+
+type MutateOperation_FeedOperation struct {
+	FeedOperation *FeedOperation `protobuf:"bytes,40,opt,name=feed_operation,json=feedOperation,proto3,oneof"`
+}
+
+type MutateOperation_LabelOperation struct {
+	LabelOperation *LabelOperation `protobuf:"bytes,41,opt,name=label_operation,json=labelOperation,proto3,oneof"`
+}
+
+type MutateOperation_MediaFileOperation struct {
+	MediaFileOperation *MediaFileOperation `protobuf:"bytes,42,opt,name=media_file_operation,json=mediaFileOperation,proto3,oneof"`
+}
+
+type MutateOperation_RemarketingActionOperation struct {
+	RemarketingActionOperation *RemarketingActionOperation `protobuf:"bytes,43,opt,name=remarketing_action_operation,json=remarketingActionOperation,proto3,oneof"`
+}
+
+type MutateOperation_SharedCriterionOperation struct {
+	SharedCriterionOperation *SharedCriterionOperation `protobuf:"bytes,14,opt,name=shared_criterion_operation,json=sharedCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_SharedSetOperation struct {
+	SharedSetOperation *SharedSetOperation `protobuf:"bytes,15,opt,name=shared_set_operation,json=sharedSetOperation,proto3,oneof"`
+}
+
+type MutateOperation_UserListOperation struct {
+	UserListOperation *UserListOperation `protobuf:"bytes,16,opt,name=user_list_operation,json=userListOperation,proto3,oneof"`
+}
+
+func (*MutateOperation_AdGroupAdLabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupAdOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupBidModifierOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupCriterionLabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupExtensionSettingOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupFeedOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupLabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdParameterOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AssetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_BiddingStrategyOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignBidModifierOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignBudgetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignDraftOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignExperimentOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignExtensionSettingOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignFeedOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignLabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignSharedSetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_ConversionActionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CustomerExtensionSettingOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CustomerFeedOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CustomerLabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CustomerNegativeCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CustomerOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_ExtensionFeedItemOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_FeedItemOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_FeedItemTargetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_FeedMappingOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_FeedOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_LabelOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_MediaFileOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_RemarketingActionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_SharedCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_SharedSetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_UserListOperation) isMutateOperation_Operation() {}
+
+func (m *MutateOperation) GetOperation() isMutateOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupAdLabelOperation() *AdGroupAdLabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupAdLabelOperation); ok {
+		return x.AdGroupAdLabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupAdOperation() *AdGroupAdOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupAdOperation); ok {
+		return x.AdGroupAdOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupBidModifierOperation() *AdGroupBidModifierOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupBidModifierOperation); ok {
+		return x.AdGroupBidModifierOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupCriterionLabelOperation() *AdGroupCriterionLabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupCriterionLabelOperation); ok {
+		return x.AdGroupCriterionLabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupCriterionOperation() *AdGroupCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupCriterionOperation); ok {
+		return x.AdGroupCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupExtensionSettingOperation() *AdGroupExtensionSettingOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupExtensionSettingOperation); ok {
+		return x.AdGroupExtensionSettingOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupFeedOperation() *AdGroupFeedOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupFeedOperation); ok {
+		return x.AdGroupFeedOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupLabelOperation() *AdGroupLabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupLabelOperation); ok {
+		return x.AdGroupLabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupOperation() *AdGroupOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupOperation); ok {
+		return x.AdGroupOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdParameterOperation() *AdParameterOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdParameterOperation); ok {
+		return x.AdParameterOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAssetOperation() *AssetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AssetOperation); ok {
+		return x.AssetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetBiddingStrategyOperation() *BiddingStrategyOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_BiddingStrategyOperation); ok {
+		return x.BiddingStrategyOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignBidModifierOperation() *CampaignBidModifierOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignBidModifierOperation); ok {
+		return x.CampaignBidModifierOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignBudgetOperation() *CampaignBudgetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignBudgetOperation); ok {
+		return x.CampaignBudgetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignCriterionOperation() *CampaignCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignCriterionOperation); ok {
+		return x.CampaignCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignDraftOperation() *CampaignDraftOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignDraftOperation); ok {
+		return x.CampaignDraftOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignExperimentOperation() *CampaignExperimentOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignExperimentOperation); ok {
+		return x.CampaignExperimentOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignExtensionSettingOperation() *CampaignExtensionSettingOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignExtensionSettingOperation); ok {
+		return x.CampaignExtensionSettingOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignFeedOperation() *CampaignFeedOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignFeedOperation); ok {
+		return x.CampaignFeedOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignLabelOperation() *CampaignLabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignLabelOperation); ok {
+		return x.CampaignLabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignOperation() *CampaignOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignOperation); ok {
+		return x.CampaignOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignSharedSetOperation() *CampaignSharedSetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignSharedSetOperation); ok {
+		return x.CampaignSharedSetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetConversionActionOperation() *ConversionActionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_ConversionActionOperation); ok {
+		return x.ConversionActionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCustomerExtensionSettingOperation() *CustomerExtensionSettingOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CustomerExtensionSettingOperation); ok {
+		return x.CustomerExtensionSettingOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCustomerFeedOperation() *CustomerFeedOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CustomerFeedOperation); ok {
+		return x.CustomerFeedOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCustomerLabelOperation() *CustomerLabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CustomerLabelOperation); ok {
+		return x.CustomerLabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCustomerNegativeCriterionOperation() *CustomerNegativeCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CustomerNegativeCriterionOperation); ok {
+		return x.CustomerNegativeCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCustomerOperation() *CustomerOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CustomerOperation); ok {
+		return x.CustomerOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetExtensionFeedItemOperation() *ExtensionFeedItemOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_ExtensionFeedItemOperation); ok {
+		return x.ExtensionFeedItemOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetFeedItemOperation() *FeedItemOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_FeedItemOperation); ok {
+		return x.FeedItemOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetFeedItemTargetOperation() *FeedItemTargetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_FeedItemTargetOperation); ok {
+		return x.FeedItemTargetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetFeedMappingOperation() *FeedMappingOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_FeedMappingOperation); ok {
+		return x.FeedMappingOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetFeedOperation() *FeedOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_FeedOperation); ok {
+		return x.FeedOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetLabelOperation() *LabelOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_LabelOperation); ok {
+		return x.LabelOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetMediaFileOperation() *MediaFileOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_MediaFileOperation); ok {
+		return x.MediaFileOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetRemarketingActionOperation() *RemarketingActionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_RemarketingActionOperation); ok {
+		return x.RemarketingActionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetSharedCriterionOperation() *SharedCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_SharedCriterionOperation); ok {
+		return x.SharedCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetSharedSetOperation() *SharedSetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_SharedSetOperation); ok {
+		return x.SharedSetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetUserListOperation() *UserListOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_UserListOperation); ok {
+		return x.UserListOperation
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*MutateOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*MutateOperation_AdGroupAdLabelOperation)(nil),
+		(*MutateOperation_AdGroupAdOperation)(nil),
+		(*MutateOperation_AdGroupBidModifierOperation)(nil),
+		(*MutateOperation_AdGroupCriterionLabelOperation)(nil),
+		(*MutateOperation_AdGroupCriterionOperation)(nil),
+		(*MutateOperation_AdGroupExtensionSettingOperation)(nil),
+		(*MutateOperation_AdGroupFeedOperation)(nil),
+		(*MutateOperation_AdGroupLabelOperation)(nil),
+		(*MutateOperation_AdGroupOperation)(nil),
+		(*MutateOperation_AdParameterOperation)(nil),
+		(*MutateOperation_AssetOperation)(nil),
+		(*MutateOperation_BiddingStrategyOperation)(nil),
+		(*MutateOperation_CampaignBidModifierOperation)(nil),
+		(*MutateOperation_CampaignBudgetOperation)(nil),
+		(*MutateOperation_CampaignCriterionOperation)(nil),
+		(*MutateOperation_CampaignDraftOperation)(nil),
+		(*MutateOperation_CampaignExperimentOperation)(nil),
+		(*MutateOperation_CampaignExtensionSettingOperation)(nil),
+		(*MutateOperation_CampaignFeedOperation)(nil),
+		(*MutateOperation_CampaignLabelOperation)(nil),
+		(*MutateOperation_CampaignOperation)(nil),
+		(*MutateOperation_CampaignSharedSetOperation)(nil),
+		(*MutateOperation_ConversionActionOperation)(nil),
+		(*MutateOperation_CustomerExtensionSettingOperation)(nil),
+		(*MutateOperation_CustomerFeedOperation)(nil),
+		(*MutateOperation_CustomerLabelOperation)(nil),
+		(*MutateOperation_CustomerNegativeCriterionOperation)(nil),
+		(*MutateOperation_CustomerOperation)(nil),
+		(*MutateOperation_ExtensionFeedItemOperation)(nil),
+		(*MutateOperation_FeedItemOperation)(nil),
+		(*MutateOperation_FeedItemTargetOperation)(nil),
+		(*MutateOperation_FeedMappingOperation)(nil),
+		(*MutateOperation_FeedOperation)(nil),
+		(*MutateOperation_LabelOperation)(nil),
+		(*MutateOperation_MediaFileOperation)(nil),
+		(*MutateOperation_RemarketingActionOperation)(nil),
+		(*MutateOperation_SharedCriterionOperation)(nil),
+		(*MutateOperation_SharedSetOperation)(nil),
+		(*MutateOperation_UserListOperation)(nil),
+	}
+}
+
+// Response message for the resource mutate.
+type MutateOperationResponse struct {
+	// The mutate response.
+	//
+	// Types that are valid to be assigned to Response:
+	//	*MutateOperationResponse_AdGroupAdLabelResult
+	//	*MutateOperationResponse_AdGroupAdResult
+	//	*MutateOperationResponse_AdGroupBidModifierResult
+	//	*MutateOperationResponse_AdGroupCriterionLabelResult
+	//	*MutateOperationResponse_AdGroupCriterionResult
+	//	*MutateOperationResponse_AdGroupExtensionSettingResult
+	//	*MutateOperationResponse_AdGroupFeedResult
+	//	*MutateOperationResponse_AdGroupLabelResult
+	//	*MutateOperationResponse_AdGroupResult
+	//	*MutateOperationResponse_AdParameterResult
+	//	*MutateOperationResponse_AssetResult
+	//	*MutateOperationResponse_BiddingStrategyResult
+	//	*MutateOperationResponse_CampaignBidModifierResult
+	//	*MutateOperationResponse_CampaignBudgetResult
+	//	*MutateOperationResponse_CampaignCriterionResult
+	//	*MutateOperationResponse_CampaignDraftResult
+	//	*MutateOperationResponse_CampaignExperimentResult
+	//	*MutateOperationResponse_CampaignExtensionSettingResult
+	//	*MutateOperationResponse_CampaignFeedResult
+	//	*MutateOperationResponse_CampaignLabelResult
+	//	*MutateOperationResponse_CampaignResult
+	//	*MutateOperationResponse_CampaignSharedSetResult
+	//	*MutateOperationResponse_ConversionActionResult
+	//	*MutateOperationResponse_CustomerExtensionSettingResult
+	//	*MutateOperationResponse_CustomerFeedResult
+	//	*MutateOperationResponse_CustomerLabelResult
+	//	*MutateOperationResponse_CustomerNegativeCriterionResult
+	//	*MutateOperationResponse_CustomerResult
+	//	*MutateOperationResponse_ExtensionFeedItemResult
+	//	*MutateOperationResponse_FeedItemResult
+	//	*MutateOperationResponse_FeedItemTargetResult
+	//	*MutateOperationResponse_FeedMappingResult
+	//	*MutateOperationResponse_FeedResult
+	//	*MutateOperationResponse_LabelResult
+	//	*MutateOperationResponse_MediaFileResult
+	//	*MutateOperationResponse_RemarketingActionResult
+	//	*MutateOperationResponse_SharedCriterionResult
+	//	*MutateOperationResponse_SharedSetResult
+	//	*MutateOperationResponse_UserListResult
+	Response             isMutateOperationResponse_Response `protobuf_oneof:"response"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateOperationResponse) Reset()         { *m = MutateOperationResponse{} }
+func (m *MutateOperationResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateOperationResponse) ProtoMessage()    {}
+func (*MutateOperationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_da24cac89ef496be, []int{8}
+}
+
+func (m *MutateOperationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateOperationResponse.Unmarshal(m, b)
+}
+func (m *MutateOperationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateOperationResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateOperationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateOperationResponse.Merge(m, src)
+}
+func (m *MutateOperationResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateOperationResponse.Size(m)
+}
+func (m *MutateOperationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateOperationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateOperationResponse proto.InternalMessageInfo
+
+type isMutateOperationResponse_Response interface {
+	isMutateOperationResponse_Response()
+}
+
+type MutateOperationResponse_AdGroupAdLabelResult struct {
+	AdGroupAdLabelResult *MutateAdGroupAdLabelResult `protobuf:"bytes,17,opt,name=ad_group_ad_label_result,json=adGroupAdLabelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupAdResult struct {
+	AdGroupAdResult *MutateAdGroupAdResult `protobuf:"bytes,1,opt,name=ad_group_ad_result,json=adGroupAdResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupBidModifierResult struct {
+	AdGroupBidModifierResult *MutateAdGroupBidModifierResult `protobuf:"bytes,2,opt,name=ad_group_bid_modifier_result,json=adGroupBidModifierResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupCriterionLabelResult struct {
+	AdGroupCriterionLabelResult *MutateAdGroupCriterionLabelResult `protobuf:"bytes,18,opt,name=ad_group_criterion_label_result,json=adGroupCriterionLabelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupCriterionResult struct {
+	AdGroupCriterionResult *MutateAdGroupCriterionResult `protobuf:"bytes,3,opt,name=ad_group_criterion_result,json=adGroupCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupExtensionSettingResult struct {
+	AdGroupExtensionSettingResult *MutateAdGroupExtensionSettingResult `protobuf:"bytes,19,opt,name=ad_group_extension_setting_result,json=adGroupExtensionSettingResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupFeedResult struct {
+	AdGroupFeedResult *MutateAdGroupFeedResult `protobuf:"bytes,20,opt,name=ad_group_feed_result,json=adGroupFeedResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupLabelResult struct {
+	AdGroupLabelResult *MutateAdGroupLabelResult `protobuf:"bytes,21,opt,name=ad_group_label_result,json=adGroupLabelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupResult struct {
+	AdGroupResult *MutateAdGroupResult `protobuf:"bytes,5,opt,name=ad_group_result,json=adGroupResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdParameterResult struct {
+	AdParameterResult *MutateAdParameterResult `protobuf:"bytes,22,opt,name=ad_parameter_result,json=adParameterResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AssetResult struct {
+	AssetResult *MutateAssetResult `protobuf:"bytes,23,opt,name=asset_result,json=assetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_BiddingStrategyResult struct {
+	BiddingStrategyResult *MutateBiddingStrategyResult `protobuf:"bytes,6,opt,name=bidding_strategy_result,json=biddingStrategyResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignBidModifierResult struct {
+	CampaignBidModifierResult *MutateCampaignBidModifierResult `protobuf:"bytes,7,opt,name=campaign_bid_modifier_result,json=campaignBidModifierResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignBudgetResult struct {
+	CampaignBudgetResult *MutateCampaignBudgetResult `protobuf:"bytes,8,opt,name=campaign_budget_result,json=campaignBudgetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignCriterionResult struct {
+	CampaignCriterionResult *MutateCampaignCriterionResult `protobuf:"bytes,13,opt,name=campaign_criterion_result,json=campaignCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignDraftResult struct {
+	CampaignDraftResult *MutateCampaignDraftResult `protobuf:"bytes,24,opt,name=campaign_draft_result,json=campaignDraftResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignExperimentResult struct {
+	CampaignExperimentResult *MutateCampaignExperimentResult `protobuf:"bytes,25,opt,name=campaign_experiment_result,json=campaignExperimentResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignExtensionSettingResult struct {
+	CampaignExtensionSettingResult *MutateCampaignExtensionSettingResult `protobuf:"bytes,26,opt,name=campaign_extension_setting_result,json=campaignExtensionSettingResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignFeedResult struct {
+	CampaignFeedResult *MutateCampaignFeedResult `protobuf:"bytes,27,opt,name=campaign_feed_result,json=campaignFeedResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignLabelResult struct {
+	CampaignLabelResult *MutateCampaignLabelResult `protobuf:"bytes,28,opt,name=campaign_label_result,json=campaignLabelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignResult struct {
+	CampaignResult *MutateCampaignResult `protobuf:"bytes,10,opt,name=campaign_result,json=campaignResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignSharedSetResult struct {
+	CampaignSharedSetResult *MutateCampaignSharedSetResult `protobuf:"bytes,11,opt,name=campaign_shared_set_result,json=campaignSharedSetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_ConversionActionResult struct {
+	ConversionActionResult *MutateConversionActionResult `protobuf:"bytes,12,opt,name=conversion_action_result,json=conversionActionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CustomerExtensionSettingResult struct {
+	CustomerExtensionSettingResult *MutateCustomerExtensionSettingResult `protobuf:"bytes,30,opt,name=customer_extension_setting_result,json=customerExtensionSettingResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CustomerFeedResult struct {
+	CustomerFeedResult *MutateCustomerFeedResult `protobuf:"bytes,31,opt,name=customer_feed_result,json=customerFeedResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CustomerLabelResult struct {
+	CustomerLabelResult *MutateCustomerLabelResult `protobuf:"bytes,32,opt,name=customer_label_result,json=customerLabelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CustomerNegativeCriterionResult struct {
+	CustomerNegativeCriterionResult *MutateCustomerNegativeCriteriaResult `protobuf:"bytes,34,opt,name=customer_negative_criterion_result,json=customerNegativeCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CustomerResult struct {
+	CustomerResult *MutateCustomerResult `protobuf:"bytes,35,opt,name=customer_result,json=customerResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_ExtensionFeedItemResult struct {
+	ExtensionFeedItemResult *MutateExtensionFeedItemResult `protobuf:"bytes,36,opt,name=extension_feed_item_result,json=extensionFeedItemResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_FeedItemResult struct {
+	FeedItemResult *MutateFeedItemResult `protobuf:"bytes,37,opt,name=feed_item_result,json=feedItemResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_FeedItemTargetResult struct {
+	FeedItemTargetResult *MutateFeedItemTargetResult `protobuf:"bytes,38,opt,name=feed_item_target_result,json=feedItemTargetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_FeedMappingResult struct {
+	FeedMappingResult *MutateFeedMappingResult `protobuf:"bytes,39,opt,name=feed_mapping_result,json=feedMappingResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_FeedResult struct {
+	FeedResult *MutateFeedResult `protobuf:"bytes,40,opt,name=feed_result,json=feedResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_LabelResult struct {
+	LabelResult *MutateLabelResult `protobuf:"bytes,41,opt,name=label_result,json=labelResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_MediaFileResult struct {
+	MediaFileResult *MutateMediaFileResult `protobuf:"bytes,42,opt,name=media_file_result,json=mediaFileResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_RemarketingActionResult struct {
+	RemarketingActionResult *MutateRemarketingActionResult `protobuf:"bytes,43,opt,name=remarketing_action_result,json=remarketingActionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_SharedCriterionResult struct {
+	SharedCriterionResult *MutateSharedCriterionResult `protobuf:"bytes,14,opt,name=shared_criterion_result,json=sharedCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_SharedSetResult struct {
+	SharedSetResult *MutateSharedSetResult `protobuf:"bytes,15,opt,name=shared_set_result,json=sharedSetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_UserListResult struct {
+	UserListResult *MutateUserListResult `protobuf:"bytes,16,opt,name=user_list_result,json=userListResult,proto3,oneof"`
+}
+
+func (*MutateOperationResponse_AdGroupAdLabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupAdResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupBidModifierResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupCriterionLabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupExtensionSettingResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupFeedResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupLabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdParameterResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AssetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_BiddingStrategyResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignBidModifierResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignBudgetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignDraftResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignExperimentResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignExtensionSettingResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignFeedResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignLabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignSharedSetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_ConversionActionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CustomerExtensionSettingResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CustomerFeedResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CustomerLabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CustomerNegativeCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CustomerResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_ExtensionFeedItemResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_FeedItemResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_FeedItemTargetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_FeedMappingResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_FeedResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_LabelResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_MediaFileResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_RemarketingActionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_SharedCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_SharedSetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_UserListResult) isMutateOperationResponse_Response() {}
+
+func (m *MutateOperationResponse) GetResponse() isMutateOperationResponse_Response {
+	if m != nil {
+		return m.Response
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupAdLabelResult() *MutateAdGroupAdLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupAdLabelResult); ok {
+		return x.AdGroupAdLabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupAdResult() *MutateAdGroupAdResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupAdResult); ok {
+		return x.AdGroupAdResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupBidModifierResult() *MutateAdGroupBidModifierResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupBidModifierResult); ok {
+		return x.AdGroupBidModifierResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupCriterionLabelResult() *MutateAdGroupCriterionLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupCriterionLabelResult); ok {
+		return x.AdGroupCriterionLabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupCriterionResult() *MutateAdGroupCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupCriterionResult); ok {
+		return x.AdGroupCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupExtensionSettingResult() *MutateAdGroupExtensionSettingResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupExtensionSettingResult); ok {
+		return x.AdGroupExtensionSettingResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupFeedResult() *MutateAdGroupFeedResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupFeedResult); ok {
+		return x.AdGroupFeedResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupLabelResult() *MutateAdGroupLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupLabelResult); ok {
+		return x.AdGroupLabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupResult() *MutateAdGroupResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupResult); ok {
+		return x.AdGroupResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdParameterResult() *MutateAdParameterResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdParameterResult); ok {
+		return x.AdParameterResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAssetResult() *MutateAssetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AssetResult); ok {
+		return x.AssetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetBiddingStrategyResult() *MutateBiddingStrategyResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_BiddingStrategyResult); ok {
+		return x.BiddingStrategyResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignBidModifierResult() *MutateCampaignBidModifierResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignBidModifierResult); ok {
+		return x.CampaignBidModifierResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignBudgetResult() *MutateCampaignBudgetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignBudgetResult); ok {
+		return x.CampaignBudgetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignCriterionResult() *MutateCampaignCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignCriterionResult); ok {
+		return x.CampaignCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignDraftResult() *MutateCampaignDraftResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignDraftResult); ok {
+		return x.CampaignDraftResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignExperimentResult() *MutateCampaignExperimentResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignExperimentResult); ok {
+		return x.CampaignExperimentResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignExtensionSettingResult() *MutateCampaignExtensionSettingResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignExtensionSettingResult); ok {
+		return x.CampaignExtensionSettingResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignFeedResult() *MutateCampaignFeedResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignFeedResult); ok {
+		return x.CampaignFeedResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignLabelResult() *MutateCampaignLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignLabelResult); ok {
+		return x.CampaignLabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignResult() *MutateCampaignResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignResult); ok {
+		return x.CampaignResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignSharedSetResult() *MutateCampaignSharedSetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignSharedSetResult); ok {
+		return x.CampaignSharedSetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetConversionActionResult() *MutateConversionActionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_ConversionActionResult); ok {
+		return x.ConversionActionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCustomerExtensionSettingResult() *MutateCustomerExtensionSettingResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CustomerExtensionSettingResult); ok {
+		return x.CustomerExtensionSettingResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCustomerFeedResult() *MutateCustomerFeedResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CustomerFeedResult); ok {
+		return x.CustomerFeedResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCustomerLabelResult() *MutateCustomerLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CustomerLabelResult); ok {
+		return x.CustomerLabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCustomerNegativeCriterionResult() *MutateCustomerNegativeCriteriaResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CustomerNegativeCriterionResult); ok {
+		return x.CustomerNegativeCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCustomerResult() *MutateCustomerResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CustomerResult); ok {
+		return x.CustomerResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetExtensionFeedItemResult() *MutateExtensionFeedItemResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_ExtensionFeedItemResult); ok {
+		return x.ExtensionFeedItemResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetFeedItemResult() *MutateFeedItemResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_FeedItemResult); ok {
+		return x.FeedItemResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetFeedItemTargetResult() *MutateFeedItemTargetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_FeedItemTargetResult); ok {
+		return x.FeedItemTargetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetFeedMappingResult() *MutateFeedMappingResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_FeedMappingResult); ok {
+		return x.FeedMappingResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetFeedResult() *MutateFeedResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_FeedResult); ok {
+		return x.FeedResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetLabelResult() *MutateLabelResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_LabelResult); ok {
+		return x.LabelResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetMediaFileResult() *MutateMediaFileResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_MediaFileResult); ok {
+		return x.MediaFileResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetRemarketingActionResult() *MutateRemarketingActionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_RemarketingActionResult); ok {
+		return x.RemarketingActionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetSharedCriterionResult() *MutateSharedCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_SharedCriterionResult); ok {
+		return x.SharedCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetSharedSetResult() *MutateSharedSetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_SharedSetResult); ok {
+		return x.SharedSetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetUserListResult() *MutateUserListResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_UserListResult); ok {
+		return x.UserListResult
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*MutateOperationResponse) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*MutateOperationResponse_AdGroupAdLabelResult)(nil),
+		(*MutateOperationResponse_AdGroupAdResult)(nil),
+		(*MutateOperationResponse_AdGroupBidModifierResult)(nil),
+		(*MutateOperationResponse_AdGroupCriterionLabelResult)(nil),
+		(*MutateOperationResponse_AdGroupCriterionResult)(nil),
+		(*MutateOperationResponse_AdGroupExtensionSettingResult)(nil),
+		(*MutateOperationResponse_AdGroupFeedResult)(nil),
+		(*MutateOperationResponse_AdGroupLabelResult)(nil),
+		(*MutateOperationResponse_AdGroupResult)(nil),
+		(*MutateOperationResponse_AdParameterResult)(nil),
+		(*MutateOperationResponse_AssetResult)(nil),
+		(*MutateOperationResponse_BiddingStrategyResult)(nil),
+		(*MutateOperationResponse_CampaignBidModifierResult)(nil),
+		(*MutateOperationResponse_CampaignBudgetResult)(nil),
+		(*MutateOperationResponse_CampaignCriterionResult)(nil),
+		(*MutateOperationResponse_CampaignDraftResult)(nil),
+		(*MutateOperationResponse_CampaignExperimentResult)(nil),
+		(*MutateOperationResponse_CampaignExtensionSettingResult)(nil),
+		(*MutateOperationResponse_CampaignFeedResult)(nil),
+		(*MutateOperationResponse_CampaignLabelResult)(nil),
+		(*MutateOperationResponse_CampaignResult)(nil),
+		(*MutateOperationResponse_CampaignSharedSetResult)(nil),
+		(*MutateOperationResponse_ConversionActionResult)(nil),
+		(*MutateOperationResponse_CustomerExtensionSettingResult)(nil),
+		(*MutateOperationResponse_CustomerFeedResult)(nil),
+		(*MutateOperationResponse_CustomerLabelResult)(nil),
+		(*MutateOperationResponse_CustomerNegativeCriterionResult)(nil),
+		(*MutateOperationResponse_CustomerResult)(nil),
+		(*MutateOperationResponse_ExtensionFeedItemResult)(nil),
+		(*MutateOperationResponse_FeedItemResult)(nil),
+		(*MutateOperationResponse_FeedItemTargetResult)(nil),
+		(*MutateOperationResponse_FeedMappingResult)(nil),
+		(*MutateOperationResponse_FeedResult)(nil),
+		(*MutateOperationResponse_LabelResult)(nil),
+		(*MutateOperationResponse_MediaFileResult)(nil),
+		(*MutateOperationResponse_RemarketingActionResult)(nil),
+		(*MutateOperationResponse_SharedCriterionResult)(nil),
+		(*MutateOperationResponse_SharedSetResult)(nil),
+		(*MutateOperationResponse_UserListResult)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*SearchGoogleAdsRequest)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsRequest")
+	proto.RegisterType((*SearchGoogleAdsResponse)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsResponse")
+	proto.RegisterType((*SearchGoogleAdsStreamRequest)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsStreamRequest")
+	proto.RegisterType((*SearchGoogleAdsStreamResponse)(nil), "google.ads.googleads.v3.services.SearchGoogleAdsStreamResponse")
+	proto.RegisterType((*GoogleAdsRow)(nil), "google.ads.googleads.v3.services.GoogleAdsRow")
+	proto.RegisterType((*MutateGoogleAdsRequest)(nil), "google.ads.googleads.v3.services.MutateGoogleAdsRequest")
+	proto.RegisterType((*MutateGoogleAdsResponse)(nil), "google.ads.googleads.v3.services.MutateGoogleAdsResponse")
+	proto.RegisterType((*MutateOperation)(nil), "google.ads.googleads.v3.services.MutateOperation")
+	proto.RegisterType((*MutateOperationResponse)(nil), "google.ads.googleads.v3.services.MutateOperationResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/google_ads_service.proto", fileDescriptor_da24cac89ef496be)
+}
+
+var fileDescriptor_da24cac89ef496be = []byte{
+	// 5611 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x7d, 0xcb, 0x73, 0x1c, 0x47,
+	0x72, 0xf7, 0x37, 0xa0, 0x48, 0x82, 0x05, 0x10, 0x8f, 0x02, 0x49, 0x14, 0xc1, 0xa7, 0x20, 0x4a,
+	0xa2, 0x28, 0x69, 0x20, 0x91, 0xd4, 0x83, 0xe0, 0x4b, 0x00, 0xf8, 0x90, 0x56, 0xe4, 0x0a, 0x5f,
+	0x83, 0xa2, 0x9e, 0xeb, 0xd9, 0x42, 0x77, 0xcd, 0xa0, 0x85, 0x99, 0xee, 0x61, 0x77, 0x0f, 0x40,
+	0x48, 0x2b, 0xad, 0x56, 0xbb, 0xf6, 0x46, 0xd8, 0x8e, 0x8d, 0x70, 0xac, 0xed, 0x08, 0x5f, 0x7d,
+	0x72, 0xf8, 0xcf, 0xf0, 0xc5, 0x11, 0x1b, 0xbe, 0xf9, 0x60, 0x87, 0x4e, 0x3e, 0x38, 0x7c, 0xf0,
+	0xc5, 0xe1, 0x83, 0x6f, 0x76, 0x84, 0xa3, 0xab, 0xab, 0xbb, 0xab, 0xaa, 0xab, 0x31, 0x59, 0xa3,
+	0xf5, 0x6d, 0x3a, 0xab, 0x7f, 0x99, 0x59, 0x55, 0x99, 0x55, 0x59, 0xd9, 0x59, 0x00, 0xba, 0xd6,
+	0x09, 0xc3, 0x4e, 0x97, 0x2d, 0x51, 0x2f, 0x5e, 0xca, 0x7e, 0xa6, 0xbf, 0x76, 0xae, 0x2c, 0xc5,
+	0x2c, 0xda, 0xf1, 0x5d, 0x96, 0x53, 0x5b, 0xd4, 0x8b, 0x5b, 0x82, 0xd6, 0xec, 0x47, 0x61, 0x12,
+	0xe2, 0xf3, 0x59, 0x4b, 0x93, 0x7a, 0x71, 0xb3, 0x80, 0x36, 0x77, 0xae, 0x34, 0x73, 0xe8, 0xc2,
+	0x2b, 0x75, 0xcc, 0xdd, 0xb0, 0xd7, 0x0b, 0x83, 0xa5, 0x1e, 0x4b, 0x22, 0xdf, 0x8d, 0x33, 0x7e,
+	0x0b, 0xaf, 0x0e, 0x79, 0x3b, 0x66, 0x9d, 0x1e, 0x0b, 0x92, 0xfc, 0xf5, 0xb7, 0xea, 0x5e, 0x67,
+	0xc1, 0xa0, 0x17, 0x2f, 0xc5, 0x83, 0x5e, 0x8f, 0x46, 0x7b, 0xad, 0x28, 0xdc, 0x6d, 0xc5, 0x2c,
+	0x49, 0xfc, 0xa0, 0x23, 0x80, 0x6f, 0xd6, 0x01, 0x23, 0x16, 0x87, 0x83, 0x28, 0xed, 0x33, 0x75,
+	0xdd, 0x70, 0x10, 0x24, 0xad, 0xcd, 0x81, 0xd7, 0x61, 0x89, 0xc0, 0xdd, 0xb6, 0xc5, 0xb5, 0xfa,
+	0x51, 0xd8, 0x0f, 0x63, 0xda, 0x15, 0x0c, 0x5e, 0x03, 0x30, 0xf0, 0x5a, 0x9d, 0x28, 0x1c, 0xf4,
+	0x05, 0xe2, 0x0a, 0x1c, 0xd1, 0xa2, 0x9e, 0x00, 0xdd, 0xb2, 0x02, 0xb5, 0x68, 0x1c, 0xb3, 0xa4,
+	0xb5, 0xe3, 0xb3, 0x5d, 0x81, 0xbf, 0x66, 0x87, 0xef, 0xd2, 0x4d, 0xd6, 0x1d, 0x45, 0xf4, 0xc0,
+	0xf3, 0x59, 0xe0, 0x32, 0x59, 0xf4, 0x4d, 0x0b, 0xfc, 0xa6, 0xef, 0xb5, 0x7a, 0xa1, 0xe7, 0xb7,
+	0x7d, 0x16, 0x09, 0xf8, 0xb2, 0x05, 0xdc, 0x8d, 0xfc, 0x84, 0x45, 0x7e, 0x18, 0x08, 0xec, 0x3b,
+	0xa3, 0x60, 0x95, 0xce, 0xdf, 0x1d, 0x89, 0x43, 0xec, 0xf7, 0x06, 0x5d, 0x9a, 0x94, 0x8a, 0xac,
+	0x5a, 0xb0, 0x61, 0x4f, 0x13, 0x16, 0xc4, 0x9c, 0x8d, 0x62, 0xe2, 0x6f, 0x58, 0xf0, 0x68, 0x33,
+	0xe6, 0x59, 0x78, 0x46, 0x0e, 0x93, 0x7b, 0x7e, 0xdd, 0x02, 0x57, 0xe9, 0xef, 0x55, 0x10, 0xb8,
+	0x4f, 0x23, 0xda, 0x63, 0x49, 0x31, 0xd5, 0x6f, 0x83, 0x50, 0xb1, 0xbb, 0xc5, 0xbc, 0x41, 0x57,
+	0xb1, 0x31, 0x48, 0x27, 0x3b, 0xac, 0x15, 0xd1, 0xa0, 0xa3, 0xe0, 0x5e, 0x05, 0xe0, 0x52, 0x57,
+	0x82, 0x2b, 0xb8, 0xe9, 0x7b, 0x9e, 0x1f, 0x74, 0x5a, 0x71, 0x12, 0xd1, 0x84, 0x75, 0xf6, 0xe0,
+	0x93, 0xb7, 0xe9, 0x77, 0xbb, 0x1c, 0xc9, 0x92, 0x62, 0xad, 0x00, 0xac, 0x2e, 0x2e, 0xed, 0xf5,
+	0xa9, 0xdf, 0x09, 0xe0, 0xde, 0x9a, 0x23, 0x46, 0xf5, 0xd6, 0x02, 0x6f, 0xf0, 0xd6, 0xb7, 0x6c,
+	0xe0, 0xf2, 0x42, 0xbc, 0x6c, 0x01, 0xd4, 0xdd, 0xfc, 0xee, 0x28, 0xd8, 0xaa, 0xd1, 0xbe, 0x69,
+	0xc1, 0xc6, 0x8b, 0x68, 0x3b, 0x81, 0x7b, 0x4a, 0x81, 0x63, 0x4f, 0xfb, 0x2c, 0xf2, 0xd3, 0x2d,
+	0x0f, 0xbe, 0x32, 0x48, 0xe0, 0x91, 0x57, 0x86, 0x82, 0x87, 0xdd, 0xca, 0x50, 0xc0, 0x2c, 0x57,
+	0x86, 0x02, 0x17, 0x6f, 0xd1, 0x88, 0x79, 0x2d, 0x2b, 0x17, 0x72, 0x69, 0x14, 0xf9, 0x2c, 0x6a,
+	0xb9, 0x61, 0x10, 0x27, 0xb4, 0x18, 0x29, 0x48, 0x2f, 0xb7, 0xb8, 0x83, 0xc7, 0x09, 0x4d, 0x06,
+	0x79, 0x48, 0x71, 0x19, 0x00, 0xeb, 0xfa, 0xee, 0xb6, 0xe5, 0x6e, 0xe9, 0x86, 0xc1, 0x0e, 0x8b,
+	0xf8, 0x64, 0x50, 0x57, 0x32, 0x22, 0x08, 0x74, 0x10, 0x45, 0x2c, 0x70, 0xf7, 0xf4, 0x0e, 0x42,
+	0x7c, 0x67, 0x10, 0x27, 0x61, 0xaf, 0xe5, 0x07, 0x09, 0x8b, 0x58, 0x9c, 0x58, 0xac, 0x12, 0x1c,
+	0x68, 0xe5, 0xa6, 0x02, 0xd1, 0x72, 0xbb, 0x7e, 0x69, 0xae, 0x37, 0xac, 0x81, 0xad, 0xae, 0x1f,
+	0x6c, 0x5b, 0x18, 0x7b, 0x8e, 0xfe, 0x21, 0xc6, 0x9e, 0xf3, 0xb0, 0x34, 0xf6, 0x1c, 0x26, 0x1b,
+	0xfb, 0x4d, 0x0b, 0x5c, 0x8f, 0x06, 0xb4, 0x93, 0xe2, 0xcb, 0x1e, 0xaf, 0x59, 0xc0, 0x03, 0xd6,
+	0xa1, 0x89, 0xbf, 0xc3, 0x2a, 0xeb, 0x1b, 0x40, 0x07, 0x8f, 0x25, 0xd4, 0xef, 0xb6, 0xfa, 0x5d,
+	0xea, 0xb2, 0x74, 0x75, 0x91, 0xad, 0x19, 0x30, 0x67, 0x9e, 0x1f, 0xf7, 0xbb, 0x74, 0xaf, 0xb5,
+	0xcd, 0xf6, 0x76, 0xc3, 0xc8, 0x93, 0xd1, 0x6f, 0x80, 0xd0, 0x09, 0xd5, 0xf6, 0x11, 0x80, 0x85,
+	0x79, 0x61, 0x8f, 0xfa, 0x41, 0xcb, 0x4d, 0xf7, 0xc9, 0x30, 0xca, 0x77, 0xca, 0xf7, 0x01, 0xc0,
+	0xbd, 0x80, 0xf6, 0x7c, 0xb7, 0x15, 0x33, 0x1a, 0xb9, 0x5b, 0xe2, 0x14, 0xc3, 0x7f, 0x26, 0x2c,
+	0xea, 0xc9, 0x5a, 0x00, 0x0c, 0x8e, 0x3d, 0xed, 0xd3, 0xc0, 0x63, 0x69, 0xcc, 0x1b, 0xf0, 0x9d,
+	0xbb, 0x4f, 0xd5, 0x18, 0xe1, 0x3a, 0x84, 0x47, 0x6e, 0xab, 0xa9, 0xc5, 0xb5, 0xfc, 0x84, 0xf5,
+	0x04, 0xf8, 0x95, 0xe1, 0x60, 0xc9, 0x48, 0x5f, 0x87, 0xbd, 0x2d, 0x0b, 0x78, 0xdb, 0x02, 0xd2,
+	0x4a, 0x68, 0x54, 0xee, 0xb8, 0x57, 0x81, 0xc8, 0x1e, 0xed, 0xf7, 0x4b, 0xf7, 0xbb, 0x09, 0x44,
+	0x71, 0x4b, 0xdc, 0x0a, 0xbb, 0x1e, 0x8b, 0xe4, 0xc1, 0x04, 0x1c, 0x7e, 0x3a, 0x2c, 0xd0, 0x40,
+	0xd7, 0x21, 0xa0, 0x50, 0xf4, 0x6e, 0x84, 0x55, 0xb5, 0xc3, 0xc2, 0x4e, 0x44, 0xfb, 0x5b, 0xbe,
+	0x6b, 0xe9, 0x36, 0x59, 0xf4, 0x6b, 0x74, 0x3a, 0xc0, 0xbc, 0x6c, 0x85, 0x09, 0xeb, 0x8a, 0x08,
+	0x5a, 0x42, 0xde, 0x82, 0x22, 0xfb, 0x2c, 0x6a, 0x87, 0x51, 0x4f, 0xf7, 0x3c, 0xc0, 0xbc, 0xe6,
+	0x6e, 0xde, 0xef, 0x52, 0x8b, 0x35, 0x46, 0x46, 0xb5, 0xb4, 0x43, 0xad, 0x2d, 0x5c, 0x8b, 0x5a,
+	0x6f, 0x58, 0xc2, 0xc5, 0x03, 0x3c, 0xfe, 0x53, 0xd0, 0xc5, 0x42, 0xab, 0xb2, 0xb1, 0x18, 0x38,
+	0xbb, 0x23, 0x84, 0xbc, 0x9f, 0x5c, 0x83, 0xbc, 0x6e, 0x5e, 0x88, 0x60, 0xd0, 0xce, 0x20, 0x85,
+	0xd9, 0xc7, 0x4e, 0xdd, 0xd0, 0xe5, 0xc1, 0xb0, 0xa5, 0x29, 0x66, 0x7b, 0x9e, 0x67, 0x76, 0x02,
+	0x40, 0xec, 0xd5, 0x63, 0x9e, 0x4f, 0x5b, 0x6d, 0xbf, 0x2b, 0x32, 0x50, 0x0b, 0x77, 0x00, 0x98,
+	0x70, 0xd3, 0xef, 0xb2, 0x16, 0xed, 0xf7, 0x8b, 0xcd, 0x43, 0xef, 0xf0, 0x2d, 0x30, 0x17, 0x8f,
+	0xed, 0xf8, 0x6e, 0x65, 0xc0, 0x20, 0x9a, 0x0f, 0x12, 0x9a, 0xb0, 0xd6, 0x17, 0xe1, 0xa6, 0xc0,
+	0xbc, 0x37, 0x1c, 0x13, 0xf6, 0x59, 0x44, 0x13, 0x7e, 0xca, 0xdb, 0x8b, 0xd3, 0x15, 0x39, 0x8f,
+	0x21, 0x35, 0xf1, 0x00, 0x8b, 0xee, 0x53, 0xdf, 0x6b, 0x85, 0x51, 0x87, 0x06, 0xe5, 0x4e, 0xa8,
+	0x6f, 0x7f, 0x37, 0x20, 0x6c, 0x22, 0x16, 0x24, 0xb4, 0x2b, 0x82, 0x66, 0x19, 0x0d, 0xe8, 0x4f,
+	0x3f, 0x0a, 0xbd, 0x81, 0x9b, 0xb4, 0xf2, 0x53, 0x6f, 0xdd, 0x74, 0x2c, 0xc3, 0x59, 0x55, 0xd6,
+	0x43, 0x40, 0xe4, 0x16, 0x31, 0x37, 0xec, 0xf5, 0x58, 0xe0, 0xc9, 0xc7, 0xb9, 0x65, 0x08, 0xae,
+	0x47, 0xa3, 0x6d, 0xc6, 0x27, 0x44, 0x89, 0xe2, 0x01, 0xab, 0x77, 0xcd, 0x90, 0x43, 0x90, 0xd9,
+	0x99, 0x48, 0x8f, 0xf2, 0x2e, 0x83, 0x91, 0xe5, 0x69, 0x6a, 0x05, 0x82, 0x09, 0xf9, 0xfe, 0x5d,
+	0xb7, 0x5d, 0x00, 0x86, 0x37, 0x09, 0xfb, 0xbe, 0x3b, 0x82, 0x87, 0x64, 0x38, 0xbb, 0x58, 0x72,
+	0x10, 0xb3, 0x48, 0x3f, 0xdf, 0xbc, 0x0e, 0x84, 0x75, 0xfd, 0xd8, 0xc2, 0xe0, 0x32, 0x88, 0x61,
+	0xd5, 0x03, 0xac, 0xe8, 0x3b, 0xbe, 0xc7, 0xc2, 0x61, 0x49, 0xc6, 0x22, 0xdb, 0x5e, 0xc9, 0xac,
+	0xaa, 0x49, 0xf7, 0x7a, 0x65, 0x8d, 0x1c, 0x54, 0xec, 0x1d, 0x38, 0x56, 0x4e, 0xd7, 0x68, 0x5c,
+	0xee, 0xc3, 0xb9, 0x68, 0x79, 0x52, 0x8d, 0xd1, 0xca, 0x28, 0x8c, 0x54, 0x16, 0xef, 0xc1, 0x59,
+	0x54, 0xce, 0x88, 0x1a, 0xab, 0x1b, 0x70, 0x56, 0x3c, 0x68, 0x55, 0xd1, 0x37, 0xe1, 0x68, 0xd3,
+	0x50, 0xbc, 0x05, 0x87, 0xab, 0xc0, 0xeb, 0x10, 0x60, 0x91, 0x3b, 0xd5, 0xc0, 0x57, 0x87, 0x83,
+	0xf9, 0xb7, 0x01, 0x15, 0x75, 0x7b, 0x28, 0x4a, 0xcf, 0x6b, 0x5a, 0x9b, 0xa1, 0x31, 0x6b, 0xa8,
+	0x71, 0xb9, 0x65, 0xc1, 0x25, 0xfb, 0x1a, 0x63, 0x6b, 0x7d, 0xa6, 0x3c, 0xa0, 0xe5, 0xa4, 0xab,
+	0x39, 0x40, 0x0d, 0xbe, 0x0a, 0x87, 0x97, 0xa9, 0x40, 0x6b, 0x07, 0xa8, 0xcf, 0x08, 0x5a, 0x3b,
+	0x80, 0x92, 0x18, 0x1c, 0x7d, 0x2c, 0x46, 0x73, 0x80, 0x32, 0x4d, 0x38, 0xea, 0x20, 0x96, 0x3b,
+	0xa2, 0xc6, 0x63, 0xf8, 0xaa, 0x5c, 0xc9, 0xe0, 0xd9, 0x4f, 0x43, 0x6d, 0xae, 0xca, 0x7e, 0x1a,
+	0xe4, 0x94, 0x95, 0xfd, 0x34, 0x28, 0x99, 0x2b, 0x0d, 0xfe, 0x23, 0x38, 0xbc, 0x9a, 0x81, 0xb2,
+	0x9f, 0xd2, 0x9c, 0x97, 0xed, 0x94, 0x1a, 0x72, 0x28, 0x1a, 0x8f, 0xb7, 0x87, 0xf2, 0xa8, 0x43,
+	0xde, 0xb6, 0x40, 0x8a, 0x2c, 0x82, 0xed, 0x92, 0x2c, 0xa7, 0x4a, 0x34, 0xf0, 0x15, 0x18, 0xd8,
+	0x76, 0x1d, 0x37, 0xcd, 0xf5, 0xf0, 0x2f, 0xff, 0xe5, 0x79, 0xcb, 0x7a, 0xed, 0xac, 0x46, 0xcb,
+	0xd6, 0xc3, 0xac, 0x87, 0xbe, 0xd6, 0xea, 0xd7, 0xfa, 0xfb, 0x70, 0xe3, 0x28, 0x42, 0x44, 0x0d,
+	0x79, 0x3a, 0x47, 0xf6, 0xfd, 0x25, 0x1a, 0x04, 0x61, 0xc2, 0x03, 0xc2, 0xfc, 0xf3, 0xc1, 0xbc,
+	0xd4, 0xaa, 0x64, 0xc2, 0xcf, 0x49, 0x0d, 0x6d, 0x9f, 0x75, 0xbd, 0xd6, 0x26, 0xdb, 0xa2, 0x3b,
+	0x7e, 0x98, 0xe7, 0xd8, 0x45, 0x29, 0xc5, 0x12, 0x7f, 0xda, 0x1c, 0xb4, 0xc5, 0x5b, 0x3d, 0x1a,
+	0x6f, 0x6b, 0xbc, 0xa3, 0xbe, 0xbb, 0x24, 0x7f, 0xb3, 0x58, 0xfc, 0x8f, 0x31, 0x74, 0x62, 0x83,
+	0x9f, 0x2f, 0xee, 0xf3, 0x37, 0x56, 0xbc, 0xd8, 0x61, 0x4f, 0x06, 0x2c, 0x4e, 0xf0, 0x05, 0x34,
+	0x51, 0xb8, 0x98, 0xef, 0x91, 0xc6, 0xf9, 0xc6, 0xc5, 0x23, 0xab, 0x07, 0xfe, 0x65, 0x65, 0xcc,
+	0x41, 0x39, 0xfd, 0x3d, 0x0f, 0x9f, 0x44, 0x07, 0x9f, 0x0c, 0x58, 0xb4, 0x47, 0xc6, 0xca, 0xf6,
+	0x8c, 0x82, 0xcf, 0x20, 0xc4, 0x13, 0x0b, 0x49, 0xb8, 0xcd, 0x02, 0x72, 0x20, 0x6d, 0x77, 0x8e,
+	0xa4, 0x94, 0x47, 0x29, 0x01, 0x9f, 0x42, 0xfc, 0xa1, 0x15, 0xfb, 0x5f, 0x32, 0xf2, 0xcc, 0xf9,
+	0xc6, 0xc5, 0x83, 0xce, 0x78, 0x4a, 0xd8, 0xf0, 0xbf, 0x64, 0xf8, 0x39, 0x74, 0x74, 0x87, 0x76,
+	0x7d, 0x2f, 0x3d, 0xf7, 0x86, 0x41, 0x77, 0x8f, 0x1c, 0x3c, 0xdf, 0xb8, 0x38, 0xee, 0x4c, 0xe6,
+	0xc4, 0x0f, 0x82, 0xee, 0x1e, 0xbe, 0x8e, 0x16, 0x22, 0x96, 0x0c, 0xa2, 0xa0, 0x95, 0x84, 0xe9,
+	0xc1, 0x32, 0x62, 0xf1, 0xa0, 0x9b, 0xc4, 0x2d, 0x5e, 0x45, 0x41, 0x0e, 0x73, 0xc4, 0x7c, 0xf6,
+	0xc6, 0xa3, 0xf4, 0x05, 0x27, 0x6b, 0x5f, 0x4b, 0x9b, 0xf1, 0x0e, 0x9a, 0x33, 0x14, 0x79, 0x90,
+	0xf1, 0xf3, 0x8d, 0x8b, 0x53, 0x97, 0xef, 0x35, 0xeb, 0xaa, 0x53, 0x78, 0x79, 0x48, 0x73, 0x23,
+	0x43, 0x3a, 0xe1, 0xee, 0x46, 0x86, 0xbb, 0x1b, 0x0c, 0x7a, 0x55, 0xaa, 0x33, 0x1b, 0xeb, 0xa4,
+	0xc5, 0xbf, 0x1f, 0x43, 0xf3, 0x95, 0x11, 0x8f, 0xfb, 0x61, 0x10, 0x33, 0xfc, 0x2e, 0x3a, 0x2c,
+	0xfa, 0x40, 0x1a, 0xe7, 0x0f, 0x5c, 0x9c, 0xb8, 0xdc, 0x6c, 0x0e, 0xab, 0x92, 0x69, 0x96, 0x5c,
+	0xc2, 0x5d, 0x27, 0x87, 0xe3, 0x17, 0xd0, 0x74, 0xc0, 0x9e, 0x26, 0x2d, 0x69, 0x02, 0xf8, 0x04,
+	0x39, 0x47, 0x53, 0xf2, 0x7a, 0x31, 0x09, 0x4d, 0x34, 0x67, 0x1a, 0xbb, 0x74, 0xb2, 0x0e, 0x38,
+	0xb3, 0x49, 0x65, 0xd4, 0xae, 0x21, 0x54, 0x1a, 0x17, 0x9f, 0x94, 0x89, 0xcb, 0x0b, 0xb9, 0x92,
+	0xb9, 0xfd, 0x35, 0xef, 0xa5, 0xaf, 0x3c, 0xa4, 0xf1, 0xb6, 0x73, 0xa4, 0x9d, 0xff, 0xc4, 0x1f,
+	0xa0, 0x09, 0x69, 0xc0, 0xc9, 0x21, 0x8e, 0xb5, 0xed, 0x20, 0x2a, 0x07, 0x74, 0xf1, 0x9f, 0x1a,
+	0xe8, 0xb4, 0x36, 0x92, 0x1b, 0x49, 0xc4, 0x68, 0xef, 0xf7, 0x66, 0xc1, 0x35, 0x36, 0x72, 0xe0,
+	0xff, 0xda, 0x46, 0xfe, 0xab, 0x81, 0xce, 0xd4, 0xf4, 0xec, 0xf7, 0x6e, 0x29, 0xea, 0x8c, 0x8e,
+	0xfd, 0x80, 0x19, 0x3d, 0xf0, 0x83, 0x67, 0xf4, 0x6f, 0xde, 0x47, 0x93, 0x72, 0x23, 0xfe, 0x08,
+	0x4d, 0xa9, 0x45, 0x51, 0xe4, 0x12, 0x17, 0xf2, 0x5a, 0xad, 0x90, 0xe2, 0xe4, 0xdc, 0x5c, 0xc9,
+	0x80, 0xab, 0x1c, 0xe7, 0x1c, 0xa5, 0xf2, 0x23, 0xee, 0xa3, 0xf9, 0x9a, 0x6a, 0x2b, 0xf2, 0x32,
+	0x97, 0xf0, 0xb6, 0xad, 0x84, 0x75, 0x81, 0x77, 0x8e, 0x53, 0x13, 0x19, 0xdf, 0x45, 0xe3, 0xf9,
+	0x29, 0x4c, 0x8c, 0xd4, 0x25, 0x88, 0x08, 0xef, 0x7e, 0x8a, 0x70, 0x0e, 0xd3, 0xec, 0x07, 0x7e,
+	0x80, 0x26, 0xa4, 0x23, 0x3a, 0x99, 0xe1, 0x9c, 0x5e, 0x81, 0x73, 0x5a, 0xf1, 0x9c, 0x23, 0x34,
+	0xff, 0x89, 0xbf, 0x40, 0x27, 0xcc, 0xc5, 0x5c, 0xe4, 0x97, 0x0d, 0xce, 0xf9, 0x0d, 0x1b, 0xce,
+	0x2b, 0x29, 0xfc, 0xb1, 0xcf, 0x76, 0x1d, 0x4c, 0x2b, 0x34, 0xfc, 0x39, 0x9a, 0xad, 0xa4, 0x27,
+	0xc8, 0x53, 0x2e, 0xe5, 0x75, 0x1b, 0x29, 0x0f, 0x52, 0xa0, 0x33, 0x45, 0x95, 0x67, 0xbc, 0x2d,
+	0xf7, 0x44, 0xae, 0x36, 0x21, 0xd7, 0xb8, 0x88, 0x37, 0x2d, 0x44, 0x08, 0x38, 0xef, 0xc9, 0x1c,
+	0xad, 0x12, 0xf1, 0x16, 0x3a, 0x6e, 0xcc, 0x75, 0x10, 0x62, 0x3b, 0x68, 0xab, 0xbe, 0xf7, 0x50,
+	0x80, 0x8b, 0x41, 0x93, 0x68, 0x98, 0x22, 0x5c, 0x4d, 0x63, 0x90, 0x59, 0x2e, 0xe6, 0x0a, 0x5c,
+	0xcc, 0x5a, 0x0e, 0x75, 0x66, 0xa8, 0x46, 0xc1, 0x4f, 0x10, 0xa9, 0x4b, 0xb9, 0x90, 0x3d, 0xb8,
+	0x2f, 0x68, 0x6c, 0xb3, 0x59, 0x3a, 0x4e, 0x4d, 0x64, 0xfc, 0x6d, 0x03, 0x9d, 0xd9, 0xb7, 0x98,
+	0x8d, 0x04, 0x5c, 0xf0, 0xcd, 0x11, 0x04, 0x6f, 0x14, 0x4c, 0x9c, 0x05, 0x5a, 0xdb, 0x86, 0x77,
+	0xd1, 0x42, 0x7d, 0x72, 0x87, 0xf4, 0xb9, 0xf8, 0x65, 0xb8, 0xf8, 0xbb, 0x39, 0x8b, 0x7c, 0x55,
+	0x9f, 0xa7, 0xe6, 0x06, 0xec, 0xa0, 0xa3, 0x4a, 0x2a, 0x88, 0xac, 0x0d, 0x59, 0x36, 0x2b, 0xb2,
+	0xee, 0x31, 0xe6, 0x39, 0x13, 0xb4, 0x7c, 0xc0, 0x1f, 0xa2, 0x29, 0x35, 0x41, 0x44, 0x62, 0xce,
+	0x74, 0x09, 0xce, 0x34, 0x9b, 0xaf, 0x49, 0x2a, 0x3d, 0x61, 0x0f, 0xcd, 0x19, 0x0a, 0xef, 0xc8,
+	0x36, 0xe7, 0x7d, 0x15, 0xce, 0x5b, 0x9a, 0x92, 0x59, 0xaa, 0x93, 0xb0, 0x83, 0x26, 0xe5, 0x2c,
+	0x13, 0xf9, 0xae, 0x61, 0x31, 0x20, 0xeb, 0x39, 0x2c, 0x1d, 0x90, 0xe2, 0x81, 0x0f, 0x88, 0x52,
+	0x85, 0x47, 0x5e, 0x83, 0x0f, 0x48, 0x87, 0x39, 0x29, 0x8e, 0xbb, 0xff, 0x24, 0x95, 0x9e, 0xf0,
+	0x67, 0x68, 0x46, 0x2f, 0x0b, 0x24, 0x9f, 0x58, 0xac, 0x60, 0x1b, 0x02, 0xc9, 0x59, 0x4f, 0x51,
+	0xe5, 0x19, 0x7f, 0x8a, 0xa6, 0xb5, 0x3a, 0x05, 0xf2, 0x19, 0x98, 0xf7, 0x1d, 0x8e, 0x5c, 0x13,
+	0x40, 0x67, 0xca, 0x53, 0x9e, 0xf1, 0x2d, 0x74, 0x90, 0xaf, 0xed, 0xc4, 0xe7, 0x1c, 0x2f, 0x42,
+	0xb4, 0x4d, 0xdf, 0x77, 0x32, 0x18, 0xfe, 0x09, 0x9a, 0xd1, 0xd3, 0x72, 0x04, 0x73, 0x56, 0x97,
+	0x01, 0xac, 0x56, 0x33, 0xe8, 0x86, 0x40, 0x3a, 0xd3, 0x9b, 0x2a, 0x01, 0x3f, 0x42, 0x47, 0x95,
+	0x9a, 0x44, 0xf2, 0x12, 0x78, 0xb6, 0x56, 0x33, 0xdc, 0x46, 0x0a, 0x73, 0x26, 0x37, 0xa5, 0xa7,
+	0x74, 0x40, 0xb5, 0x24, 0x1e, 0x99, 0x03, 0x0f, 0xe8, 0x9a, 0x40, 0x8a, 0xf0, 0x61, 0xca, 0x55,
+	0x9e, 0xf1, 0x7d, 0x34, 0x9e, 0x53, 0x44, 0xcc, 0xf4, 0xb2, 0x05, 0x53, 0xa7, 0x00, 0xe3, 0x1e,
+	0x3a, 0x61, 0xae, 0x92, 0x24, 0x77, 0x39, 0xdb, 0xb7, 0x2c, 0xd8, 0x2a, 0x1b, 0xd7, 0x31, 0xd7,
+	0x40, 0xc5, 0x5f, 0xa0, 0xe3, 0xc6, 0xf4, 0x28, 0x59, 0x00, 0xef, 0x92, 0xc5, 0xc8, 0x48, 0x5b,
+	0xd7, 0x9c, 0x5b, 0x25, 0x62, 0x17, 0xe1, 0x6a, 0x12, 0x94, 0x1c, 0x03, 0xaf, 0x1e, 0xb9, 0xa0,
+	0x72, 0xf3, 0x9a, 0x75, 0x75, 0x12, 0xfe, 0xae, 0x81, 0xce, 0xec, 0x5b, 0x72, 0x49, 0x42, 0x2e,
+	0xf0, 0xd6, 0x28, 0x02, 0xa5, 0x85, 0xeb, 0x94, 0x5b, 0xdf, 0x98, 0x86, 0xa9, 0x6a, 0xae, 0x96,
+	0xbc, 0x0e, 0x0e, 0x53, 0x73, 0xa1, 0x77, 0x52, 0x9c, 0x73, 0xd4, 0x95, 0x1f, 0x71, 0x1b, 0xcd,
+	0x19, 0xb2, 0xb8, 0xe4, 0x11, 0x38, 0xcc, 0xc8, 0xb9, 0xdf, 0x2d, 0xc0, 0x4e, 0x31, 0x29, 0x25,
+	0x0d, 0xef, 0xa1, 0x85, 0xfa, 0x4c, 0x2f, 0x79, 0xc2, 0xc5, 0x5d, 0xb7, 0x12, 0xa7, 0x6d, 0x87,
+	0xc4, 0xad, 0x69, 0x49, 0x7d, 0x5f, 0xc9, 0x0c, 0x93, 0xdb, 0x60, 0xdf, 0xcf, 0xa5, 0xf1, 0x0d,
+	0x71, 0xd2, 0x95, 0x9e, 0x94, 0x19, 0xc9, 0x76, 0xc4, 0xae, 0xf5, 0x8c, 0x64, 0x5b, 0x62, 0xa1,
+	0x5d, 0xb1, 0x27, 0x1a, 0x52, 0xc2, 0xe4, 0xac, 0xb5, 0x55, 0x6f, 0x70, 0xf0, 0x06, 0x4b, 0x4a,
+	0xab, 0x2e, 0x48, 0xe9, 0x7a, 0xab, 0xd7, 0xa6, 0x92, 0x55, 0xf0, 0x7a, 0xbb, 0x96, 0x41, 0xd7,
+	0x04, 0xd2, 0x99, 0x76, 0x55, 0x02, 0x1f, 0x73, 0xb9, 0x80, 0x95, 0x3c, 0x0f, 0x1f, 0x73, 0x8e,
+	0xdb, 0xe0, 0x30, 0x67, 0xd2, 0x95, 0x9e, 0xf0, 0x4f, 0xd1, 0x6c, 0x25, 0xd3, 0x4d, 0x3a, 0xe0,
+	0x50, 0x75, 0xad, 0xc0, 0xae, 0x70, 0xa8, 0x33, 0xe3, 0x6a, 0x14, 0xfc, 0x3e, 0x42, 0x65, 0x05,
+	0x2d, 0xf9, 0x12, 0x7c, 0xf6, 0x59, 0x4b, 0x41, 0x7c, 0x55, 0x3c, 0xe2, 0xe6, 0x3f, 0x31, 0x45,
+	0xb3, 0x95, 0xfa, 0x58, 0xf2, 0x47, 0x0d, 0xb8, 0xbe, 0x02, 0x5c, 0x0c, 0xf3, 0x8c, 0xab, 0x51,
+	0xf8, 0x0e, 0xa4, 0xd6, 0xd1, 0x92, 0x2d, 0xf8, 0x0e, 0xc4, 0x91, 0xef, 0x09, 0xa0, 0x33, 0xe5,
+	0x2a, 0xcf, 0x7c, 0x07, 0x12, 0x49, 0x0c, 0xd2, 0x80, 0xef, 0x40, 0x02, 0xe2, 0x14, 0x60, 0xbe,
+	0x25, 0x98, 0xea, 0x4a, 0xc9, 0x4d, 0xf8, 0x96, 0x20, 0xf0, 0x0f, 0x33, 0xf8, 0x03, 0x3f, 0xd8,
+	0x76, 0xe6, 0xdc, 0x2a, 0x11, 0x77, 0xd0, 0x31, 0x53, 0xd1, 0x2e, 0xb9, 0x05, 0x5f, 0xd0, 0x04,
+	0x7c, 0x8d, 0xa3, 0xb9, 0x24, 0xec, 0x56, 0x68, 0xe5, 0xc8, 0x17, 0x82, 0xc8, 0x3d, 0xcb, 0x91,
+	0xcf, 0xf9, 0xe5, 0x23, 0x9f, 0x3f, 0xf3, 0xc5, 0xb2, 0xf6, 0x7b, 0x0c, 0x89, 0xe0, 0x8b, 0xa5,
+	0x60, 0x62, 0x58, 0x2c, 0x6b, 0x5a, 0xb8, 0xe3, 0xca, 0xdf, 0x6f, 0xc8, 0x3b, 0x70, 0xc7, 0x15,
+	0x38, 0xb1, 0x58, 0x4a, 0x4f, 0x7c, 0xb1, 0x54, 0xbe, 0xeb, 0x90, 0x9f, 0xc1, 0x17, 0x4b, 0x01,
+	0xcc, 0x17, 0x4b, 0xf9, 0x11, 0xff, 0x0c, 0x9d, 0xda, 0xe7, 0x8b, 0x0f, 0xf9, 0x98, 0x4b, 0xb9,
+	0x61, 0x21, 0xe5, 0xc7, 0x82, 0x49, 0x19, 0x12, 0x9c, 0x74, 0xeb, 0x9a, 0x52, 0xc3, 0x36, 0x16,
+	0x2b, 0x93, 0x1d, 0xb0, 0x61, 0xdf, 0xe1, 0xf8, 0xf5, 0x1c, 0x9e, 0x65, 0x04, 0xbc, 0x2a, 0x31,
+	0x35, 0x6c, 0x53, 0x65, 0x33, 0x59, 0x02, 0x1b, 0xf6, 0x9d, 0x0c, 0xfe, 0x7e, 0x86, 0xce, 0xb2,
+	0x28, 0x5e, 0x85, 0x86, 0x3f, 0x44, 0x47, 0x95, 0x22, 0x68, 0xf2, 0xab, 0x06, 0xd8, 0x04, 0xee,
+	0x08, 0x60, 0x76, 0xb2, 0xf1, 0xa4, 0x27, 0xfc, 0x9b, 0x06, 0x7a, 0x0e, 0x50, 0xec, 0x4c, 0xbe,
+	0xe0, 0xc2, 0x56, 0x20, 0xc2, 0x32, 0x6e, 0x59, 0x1a, 0x73, 0xc5, 0x8b, 0xb3, 0x1f, 0x8f, 0x58,
+	0xd4, 0xe3, 0xe2, 0xcf, 0x7a, 0xfb, 0xb6, 0xe3, 0xa7, 0x68, 0xa1, 0xbe, 0x5e, 0x9a, 0x7c, 0xdb,
+	0x00, 0x1f, 0xd0, 0xef, 0x0a, 0x2e, 0x0f, 0x32, 0x26, 0xeb, 0x54, 0x9c, 0xec, 0xe6, 0x99, 0xb9,
+	0x21, 0xdd, 0xe1, 0x0d, 0x5f, 0x08, 0xc9, 0x87, 0xe0, 0x1d, 0xbe, 0xf0, 0xda, 0xd4, 0xb9, 0xde,
+	0x4b, 0x58, 0xcf, 0x99, 0x65, 0x3a, 0x09, 0x5f, 0x47, 0xcf, 0x70, 0x07, 0x6e, 0x72, 0xb6, 0x2f,
+	0x02, 0xd8, 0x72, 0xc7, 0xe5, 0x20, 0xfc, 0x2e, 0x3a, 0x52, 0x2a, 0x76, 0x19, 0xbc, 0xf8, 0x17,
+	0xfa, 0x8c, 0xb7, 0x73, 0x35, 0x3e, 0x43, 0x33, 0xfa, 0x07, 0x49, 0x92, 0x80, 0x17, 0xca, 0x9c,
+	0xe1, 0x23, 0x0e, 0x74, 0xa6, 0xda, 0xca, 0x33, 0xfe, 0xff, 0x68, 0x52, 0xfe, 0x58, 0x49, 0x96,
+	0xc1, 0x07, 0xfb, 0x94, 0xf1, 0xc3, 0x0c, 0xe5, 0x4c, 0xb4, 0xcb, 0x87, 0xd4, 0xa7, 0x8d, 0x45,
+	0xdf, 0x84, 0x82, 0x7d, 0x3a, 0xe5, 0xbd, 0x5e, 0xc2, 0x33, 0x9f, 0x6e, 0x57, 0x89, 0xf8, 0xc7,
+	0x68, 0x42, 0xaa, 0x10, 0x27, 0x17, 0xb9, 0x84, 0x57, 0x01, 0x12, 0xee, 0x73, 0x14, 0x67, 0x8c,
+	0x3a, 0xc5, 0xef, 0xd4, 0xb0, 0x0c, 0xc5, 0xe3, 0x64, 0x1e, 0x6c, 0x58, 0xf7, 0x59, 0x98, 0x8d,
+	0x6c, 0x11, 0x72, 0xcc, 0x76, 0x74, 0x52, 0xba, 0xf3, 0x69, 0x55, 0xe6, 0xe4, 0x6b, 0xf0, 0x84,
+	0xde, 0x2f, 0x90, 0x59, 0x8a, 0xa2, 0xa3, 0x3c, 0xa7, 0xab, 0x9c, 0xa9, 0x10, 0x9d, 0xec, 0x82,
+	0x57, 0x39, 0x9e, 0xfc, 0x51, 0xd7, 0x53, 0xdc, 0xa9, 0xd0, 0x52, 0xb3, 0xd4, 0x6b, 0xd6, 0xc9,
+	0x15, 0x70, 0x2f, 0xde, 0x4d, 0xa1, 0x5c, 0x52, 0xd6, 0x8b, 0x2d, 0xe5, 0x39, 0x3d, 0x72, 0x9b,
+	0xcb, 0xda, 0xc9, 0x7d, 0xf0, 0x91, 0x9b, 0x8b, 0x58, 0x2f, 0xf1, 0xd9, 0x91, 0x7b, 0xcb, 0x40,
+	0x4d, 0xbd, 0x40, 0xd9, 0x12, 0x8e, 0x83, 0xbd, 0x40, 0xde, 0x0b, 0x26, 0xb6, 0xa5, 0x4d, 0x40,
+	0x62, 0xd9, 0xef, 0xd2, 0x80, 0x9c, 0xb7, 0x65, 0xb9, 0xde, 0xa5, 0x41, 0xc1, 0x32, 0x7d, 0x48,
+	0x1d, 0xcb, 0x58, 0x36, 0x4f, 0x9e, 0x05, 0x3b, 0x96, 0xc4, 0xbb, 0x48, 0x74, 0xcc, 0x6d, 0x57,
+	0x89, 0x3c, 0xfd, 0xbb, 0x6f, 0x99, 0x3c, 0x59, 0x04, 0xa7, 0x7f, 0x25, 0xa1, 0x79, 0x04, 0x20,
+	0x48, 0xce, 0xc2, 0x76, 0x6d, 0x1b, 0xde, 0xd2, 0xba, 0x5b, 0x7c, 0x9a, 0x79, 0x0e, 0x6c, 0xca,
+	0x92, 0xe4, 0xfc, 0x2b, 0x0d, 0xde, 0xae, 0xd0, 0x52, 0x9f, 0x31, 0x5d, 0x28, 0x20, 0x17, 0x46,
+	0x11, 0x94, 0x77, 0x4d, 0x16, 0x94, 0x77, 0xe9, 0x16, 0x3a, 0x98, 0x05, 0x6f, 0x57, 0xc1, 0x39,
+	0xbe, 0x2c, 0x68, 0xcb, 0x60, 0xf8, 0x0f, 0xd0, 0x6c, 0x75, 0xa3, 0xfd, 0x06, 0x7c, 0xe8, 0xd4,
+	0xf7, 0xd7, 0xe9, 0xae, 0xb6, 0xaf, 0xfe, 0x94, 0xf3, 0x57, 0x2f, 0x0d, 0x90, 0xb7, 0xc0, 0xc7,
+	0xad, 0x07, 0x02, 0x5b, 0x1e, 0xb7, 0xba, 0x1a, 0x25, 0x8d, 0x8e, 0x95, 0x2a, 0x5b, 0xf2, 0x15,
+	0x38, 0x34, 0x7a, 0x20, 0x70, 0x59, 0x68, 0xd4, 0x95, 0x9e, 0xd2, 0xe5, 0xc2, 0x7c, 0xf5, 0x80,
+	0xbc, 0x01, 0x5e, 0x2e, 0xb2, 0x33, 0x90, 0xa7, 0x2e, 0x7c, 0xc7, 0x7a, 0x06, 0x6a, 0x7a, 0xc6,
+	0x2d, 0x2b, 0x67, 0xc8, 0xa7, 0xe0, 0x33, 0xee, 0xc3, 0x14, 0x74, 0xcf, 0xef, 0x32, 0xe7, 0x48,
+	0x2f, 0xff, 0x89, 0xbf, 0x46, 0xa7, 0xf7, 0xbb, 0xc2, 0x40, 0x3e, 0x02, 0x47, 0xe0, 0x0f, 0x39,
+	0x9b, 0x95, 0x7e, 0x3f, 0xcf, 0x29, 0x17, 0xf3, 0x70, 0xb2, 0x57, 0xd7, 0xc4, 0x87, 0xce, 0x78,
+	0xf7, 0x81, 0x6c, 0xc2, 0x87, 0x8e, 0x33, 0xb8, 0xc3, 0xf1, 0x85, 0xcc, 0x63, 0x3d, 0x03, 0x95,
+	0x0f, 0x5d, 0x71, 0x55, 0x82, 0xfc, 0x1c, 0x3e, 0x74, 0x1c, 0xf4, 0xa3, 0x70, 0xd3, 0x39, 0xd2,
+	0xcb, 0x7f, 0xe2, 0x3f, 0x6d, 0xa0, 0x67, 0x87, 0x5e, 0xa2, 0x20, 0x8f, 0xc1, 0xf1, 0xf0, 0x07,
+	0x39, 0xaf, 0x0d, 0xce, 0xea, 0x71, 0xc6, 0xa9, 0xe8, 0xd1, 0xd9, 0x70, 0xdf, 0x76, 0xfc, 0x73,
+	0x74, 0x66, 0xdf, 0x7b, 0x18, 0xe4, 0x17, 0x0d, 0xf0, 0x5c, 0xae, 0x53, 0xdf, 0xfb, 0x20, 0xe3,
+	0xa3, 0x45, 0xe5, 0x27, 0xfb, 0x75, 0x4d, 0xe9, 0x3a, 0x66, 0xba, 0xc1, 0x41, 0x5e, 0x05, 0xaf,
+	0x63, 0xeb, 0x02, 0x9e, 0xa5, 0x8b, 0xb2, 0xbd, 0xbf, 0x5f, 0xa1, 0xf1, 0x81, 0x1f, 0x7a, 0xdb,
+	0x83, 0xf4, 0xc0, 0x03, 0xbf, 0x9e, 0xf1, 0x12, 0x1f, 0x21, 0x2a, 0xe6, 0x7b, 0xb6, 0xbf, 0x6f,
+	0x3b, 0xa6, 0x08, 0x57, 0x2f, 0x8c, 0x90, 0x37, 0xc1, 0xeb, 0x96, 0x10, 0x5f, 0x86, 0x23, 0x33,
+	0x7d, 0x8d, 0x82, 0x3f, 0x41, 0x53, 0xea, 0xbd, 0x12, 0x72, 0x02, 0x1c, 0xeb, 0x38, 0x0a, 0xd0,
+	0xd1, 0x18, 0xa5, 0x81, 0x54, 0xc5, 0x52, 0xee, 0x80, 0x99, 0x6b, 0xd6, 0x31, 0x15, 0xab, 0x26,
+	0xf1, 0x13, 0x34, 0xa3, 0x97, 0xd9, 0x91, 0x33, 0xe0, 0x0d, 0x23, 0xcb, 0x76, 0x96, 0x27, 0xf9,
+	0xe9, 0x58, 0x25, 0xa4, 0xee, 0x2c, 0x65, 0x58, 0x4f, 0x81, 0xdd, 0xb9, 0xcc, 0xac, 0x1e, 0x89,
+	0x8b, 0x8c, 0xea, 0x0e, 0x3a, 0x59, 0x7b, 0x3f, 0x85, 0x0c, 0xc0, 0xa7, 0xc9, 0x0d, 0xc1, 0x43,
+	0x0f, 0xfd, 0xe6, 0x63, 0x73, 0x43, 0xda, 0x89, 0xf2, 0x72, 0x0a, 0x79, 0x05, 0xdc, 0x89, 0x47,
+	0x29, 0x28, 0x4b, 0x59, 0x26, 0xf9, 0xcf, 0x74, 0x83, 0x53, 0x6e, 0xad, 0x90, 0xeb, 0xe0, 0x0d,
+	0xee, 0xc3, 0x98, 0x45, 0x45, 0x2e, 0x71, 0x72, 0x20, 0x3d, 0xa5, 0xa7, 0xc9, 0xa2, 0x62, 0x91,
+	0xbc, 0x00, 0x3e, 0x4d, 0xa6, 0x1c, 0x1f, 0xf8, 0x71, 0xe2, 0x8c, 0x0f, 0xc4, 0x2f, 0xbc, 0x89,
+	0x70, 0xf5, 0xae, 0x0b, 0xf9, 0x35, 0x3c, 0xa7, 0xca, 0x79, 0xca, 0x5b, 0xf1, 0xcc, 0x40, 0xa3,
+	0x60, 0x17, 0xe1, 0x6a, 0x79, 0x28, 0xb9, 0x01, 0x3e, 0x44, 0x39, 0x25, 0x58, 0xe4, 0x99, 0x67,
+	0x23, 0x9d, 0x84, 0x3f, 0x42, 0x53, 0xea, 0x55, 0x24, 0x72, 0x0e, 0x9c, 0x11, 0xe3, 0x33, 0x57,
+	0x2c, 0x2f, 0x47, 0x13, 0xf9, 0x31, 0x0d, 0xd2, 0xf8, 0x8d, 0x1e, 0xf2, 0x22, 0x38, 0x48, 0x7b,
+	0x9c, 0xbe, 0xef, 0x64, 0x30, 0xbc, 0x82, 0x0e, 0x8b, 0x3f, 0x7b, 0xc5, 0x4b, 0x26, 0xf7, 0xcb,
+	0x1c, 0x64, 0x7f, 0xf7, 0xaa, 0xf9, 0x30, 0x7b, 0xdd, 0xc9, 0x71, 0xf8, 0x0e, 0x1a, 0xcf, 0xff,
+	0x16, 0x16, 0x69, 0x0f, 0xd1, 0x42, 0xf0, 0xd8, 0x10, 0xef, 0x3b, 0x05, 0x72, 0xf1, 0x3f, 0x1b,
+	0xe8, 0x44, 0xb6, 0x6f, 0x8e, 0x58, 0x38, 0xea, 0xa2, 0x59, 0xb1, 0x59, 0x8b, 0x9d, 0x2f, 0x0c,
+	0x62, 0x32, 0xc6, 0x6b, 0xd9, 0x5e, 0x1f, 0x5e, 0x42, 0x96, 0x89, 0xfe, 0x20, 0x47, 0x66, 0xec,
+	0x67, 0x7a, 0x2a, 0x35, 0xc6, 0x2f, 0xa2, 0xe9, 0x3e, 0x8d, 0x12, 0x9f, 0x76, 0x5b, 0x6d, 0xea,
+	0x77, 0x07, 0x11, 0xe3, 0xb5, 0x57, 0xe3, 0xce, 0x94, 0x20, 0xdf, 0xcb, 0xa8, 0xd5, 0x7a, 0xd3,
+	0x67, 0xaa, 0xf5, 0xa6, 0x8b, 0xdf, 0x37, 0xd0, 0x7c, 0xa5, 0xcf, 0xa2, 0x20, 0xef, 0x1e, 0x3a,
+	0xae, 0x49, 0x6a, 0xb1, 0x28, 0x0a, 0x23, 0x51, 0xeb, 0x85, 0xf3, 0x2e, 0x45, 0x7d, 0xb7, 0x29,
+	0xbe, 0x9e, 0xcc, 0xa9, 0x3a, 0xdc, 0x4d, 0x5f, 0xc7, 0xbb, 0x68, 0x41, 0x1f, 0x96, 0x56, 0x24,
+	0x84, 0xe4, 0xb5, 0x7e, 0xd7, 0xac, 0xc7, 0x27, 0x57, 0xd3, 0x21, 0x3d, 0x73, 0x43, 0xbc, 0xf8,
+	0x3f, 0x17, 0xd0, 0xb4, 0x86, 0xc2, 0x7b, 0xe8, 0x54, 0xf5, 0x46, 0x59, 0xa1, 0x97, 0x28, 0x43,
+	0x02, 0x68, 0xa3, 0xd6, 0x6e, 0x15, 0xfc, 0xdf, 0xfd, 0x7f, 0x45, 0x99, 0x8c, 0xde, 0x84, 0x7d,
+	0xa9, 0xc4, 0x8a, 0x7a, 0x92, 0xd0, 0xc6, 0x10, 0x4f, 0xaf, 0x0a, 0x95, 0xe5, 0x95, 0x85, 0x69,
+	0xa5, 0xa8, 0x3f, 0x6c, 0xa0, 0x73, 0xe6, 0xab, 0x6b, 0xa5, 0xd4, 0xb1, 0x21, 0x07, 0x52, 0x5d,
+	0xaa, 0xf4, 0x1d, 0x5c, 0x16, 0x7f, 0x8a, 0xd6, 0x37, 0xe3, 0xdf, 0x34, 0xd0, 0x62, 0xed, 0xe5,
+	0xb7, 0x52, 0x95, 0xac, 0xee, 0xe2, 0x1d, 0xb0, 0x2a, 0x6a, 0xed, 0x95, 0xac, 0xcd, 0x59, 0xba,
+	0xef, 0x1b, 0xf8, 0x1b, 0x74, 0xda, 0xa0, 0x4f, 0xa9, 0xc9, 0x81, 0x21, 0x9f, 0x3a, 0x6a, 0x35,
+	0x91, 0x95, 0x38, 0x49, 0xeb, 0x1a, 0xf1, 0x9f, 0x37, 0xd0, 0x85, 0x7d, 0x6e, 0xe0, 0x95, 0x8a,
+	0x64, 0x65, 0x1d, 0xab, 0x60, 0x45, 0xf4, 0xef, 0x2a, 0xb2, 0x3e, 0xe7, 0xe9, 0x90, 0x77, 0x70,
+	0x88, 0xe6, 0xd5, 0xcb, 0x7c, 0xa5, 0x22, 0xc7, 0x86, 0x24, 0x4b, 0x74, 0x45, 0xee, 0x31, 0xa6,
+	0x98, 0xe7, 0x31, 0x6a, 0xa0, 0xe3, 0x48, 0xaa, 0xd0, 0xd3, 0xad, 0xe1, 0xf8, 0x90, 0x83, 0x94,
+	0x2e, 0xb1, 0x62, 0x04, 0xc7, 0xa9, 0xa9, 0x21, 0xdd, 0xca, 0x0b, 0x99, 0xa5, 0xb4, 0x83, 0x43,
+	0xa2, 0x3b, 0x5d, 0x9a, 0x2c, 0x28, 0xaf, 0x3c, 0x2c, 0x65, 0x04, 0xbc, 0x66, 0xb3, 0xbc, 0x5f,
+	0x58, 0xca, 0x39, 0x01, 0x1f, 0xc7, 0xa2, 0xe8, 0x4b, 0x1b, 0xc7, 0x2a, 0x1d, 0x7f, 0x86, 0xa6,
+	0xb3, 0x0a, 0xd7, 0x52, 0xd0, 0xfc, 0x90, 0x6d, 0xbd, 0x14, 0x94, 0x02, 0x65, 0x11, 0x53, 0x54,
+	0xa1, 0xe0, 0x2f, 0xd1, 0x42, 0xe5, 0xe6, 0x62, 0x29, 0xe7, 0xd0, 0x90, 0x08, 0xb3, 0x90, 0xa3,
+	0xd5, 0x4a, 0xc9, 0x12, 0xc9, 0x66, 0x4d, 0x1b, 0xfe, 0x75, 0x03, 0x9d, 0x33, 0xdf, 0x7a, 0x2c,
+	0x35, 0x38, 0x3c, 0xa4, 0x0c, 0xa6, 0xd0, 0xc0, 0x50, 0xdf, 0x23, 0x6b, 0x71, 0xda, 0xdd, 0xa7,
+	0x1d, 0xef, 0xa2, 0x93, 0xfa, 0xc5, 0xc9, 0x52, 0x85, 0x71, 0xe8, 0x7e, 0xa1, 0x16, 0x5f, 0x29,
+	0xfb, 0x85, 0x6b, 0x6e, 0xc2, 0xdf, 0x36, 0xd0, 0x69, 0x43, 0x1d, 0x50, 0x29, 0xfc, 0xe8, 0x90,
+	0xe3, 0x71, 0x45, 0xb8, 0x71, 0xb5, 0x5a, 0x70, 0x6b, 0x5b, 0x71, 0x82, 0x88, 0x76, 0x63, 0xb3,
+	0x94, 0x4e, 0x86, 0x14, 0xd2, 0x56, 0xa4, 0xf3, 0xfa, 0x1f, 0x59, 0xf2, 0x09, 0xd7, 0xd8, 0x82,
+	0x7f, 0x29, 0x17, 0x40, 0x49, 0x37, 0x3d, 0x4b, 0xd9, 0x27, 0xa1, 0x7b, 0x57, 0xb5, 0x58, 0x48,
+	0xd9, 0xbb, 0xdc, 0xfa, 0x66, 0xfc, 0x97, 0x0d, 0x74, 0x61, 0x9f, 0xbb, 0xa2, 0xa5, 0x32, 0x59,
+	0x9d, 0xd9, 0x9a, 0x8d, 0x32, 0xf5, 0x6b, 0xf5, 0xb3, 0xee, 0xb0, 0x97, 0xf0, 0x13, 0x34, 0xaf,
+	0x5e, 0x3c, 0x2d, 0x55, 0x39, 0x05, 0x5d, 0x3a, 0xe5, 0x3a, 0x23, 0x65, 0xe9, 0x74, 0x4d, 0x0d,
+	0x8a, 0x1d, 0xe8, 0xcb, 0xf5, 0x69, 0x5b, 0x3b, 0xa8, 0xac, 0xd7, 0x27, 0x5c, 0x63, 0x0b, 0xf6,
+	0xa4, 0x6a, 0xbb, 0x52, 0x1e, 0x1a, 0x72, 0xf4, 0xaa, 0xc8, 0x93, 0x45, 0x15, 0x85, 0x49, 0xa5,
+	0x94, 0x5f, 0xc8, 0xd6, 0x26, 0x5d, 0x91, 0x2b, 0x25, 0x4e, 0xd8, 0xfa, 0x59, 0x71, 0x5c, 0x37,
+	0xfa, 0x59, 0xb5, 0x15, 0x7f, 0x8d, 0x4e, 0x55, 0x6f, 0xd4, 0x96, 0x0a, 0x4c, 0x42, 0xa3, 0x12,
+	0xbd, 0xe0, 0x48, 0x89, 0x4a, 0xdc, 0xba, 0xc6, 0xcc, 0xd4, 0xeb, 0xef, 0xe3, 0x96, 0x8a, 0x9c,
+	0x05, 0x9b, 0x7a, 0x4d, 0xb9, 0x87, 0x6a, 0xea, 0xc3, 0x5e, 0xe2, 0xa6, 0xae, 0x5c, 0xee, 0x2d,
+	0x55, 0x39, 0x07, 0x36, 0x75, 0xa9, 0x2e, 0x44, 0x35, 0x75, 0x53, 0x03, 0x37, 0x75, 0xf5, 0x46,
+	0x70, 0x29, 0xf3, 0x3c, 0xd8, 0xd4, 0xe5, 0x9a, 0x11, 0xd5, 0xd4, 0x8d, 0x2d, 0xf8, 0xaf, 0x1a,
+	0xe8, 0xf9, 0xfd, 0x6e, 0x12, 0x97, 0x3a, 0x64, 0xdf, 0x91, 0xee, 0xc0, 0x75, 0xa8, 0x54, 0x91,
+	0xc8, 0xfa, 0x2c, 0xba, 0x43, 0xdf, 0xe2, 0x6e, 0x98, 0xab, 0x56, 0xea, 0xf1, 0x1c, 0xd8, 0x0d,
+	0x05, 0x56, 0x75, 0x43, 0x9d, 0xc8, 0xdd, 0xd0, 0x74, 0x8d, 0xb9, 0x94, 0x78, 0x01, 0xea, 0x86,
+	0x95, 0x6a, 0x05, 0xc5, 0x0d, 0x59, 0x6d, 0x2b, 0x66, 0x68, 0xce, 0x24, 0xf8, 0x79, 0x68, 0x57,
+	0x4d, 0xf2, 0x66, 0xdb, 0x15, 0x31, 0x4f, 0xd1, 0x42, 0xe5, 0xca, 0x74, 0x29, 0xed, 0x05, 0x68,
+	0x48, 0xa1, 0x96, 0x2a, 0x28, 0x21, 0x45, 0xdb, 0xdc, 0x94, 0x86, 0xa7, 0xca, 0x5d, 0xeb, 0x52,
+	0xea, 0x8b, 0xd0, 0xf0, 0x54, 0xaa, 0x63, 0x50, 0xc2, 0xd3, 0xb6, 0x81, 0x8e, 0x3f, 0x46, 0x53,
+	0x9a, 0xdb, 0x5e, 0x1c, 0x92, 0xde, 0x53, 0xe4, 0xc8, 0x02, 0x8e, 0xb6, 0x15, 0x37, 0xfd, 0x0c,
+	0x4d, 0xeb, 0xde, 0xf9, 0x12, 0x34, 0xf0, 0xad, 0x78, 0xe5, 0x54, 0x57, 0xf5, 0xc6, 0x2d, 0x74,
+	0x4c, 0xba, 0xea, 0x5d, 0x4a, 0xb8, 0x04, 0x3d, 0xa8, 0x17, 0x5f, 0xae, 0x94, 0x83, 0x7a, 0xaf,
+	0x42, 0xe5, 0x31, 0x9e, 0xe1, 0x6a, 0x78, 0x29, 0xf2, 0x65, 0xa8, 0xd1, 0x57, 0x92, 0x80, 0x8a,
+	0xd1, 0x47, 0xb5, 0xad, 0x69, 0x94, 0x5f, 0xb9, 0x59, 0x5e, 0xca, 0x9f, 0x82, 0x46, 0xf9, 0x5a,
+	0xee, 0x5b, 0x89, 0xf2, 0xe3, 0x9a, 0xb6, 0x74, 0xa0, 0x8d, 0x3b, 0xee, 0x34, 0x74, 0xa0, 0x8d,
+	0x3b, 0x2d, 0x8e, 0xab, 0x3b, 0x2c, 0x43, 0x73, 0xe5, 0x1d, 0xf6, 0x52, 0xd0, 0x0c, 0xd4, 0xb5,
+	0xf3, 0xd4, 0xb0, 0xe2, 0xda, 0x03, 0x9d, 0xb8, 0x3a, 0x81, 0x8e, 0x14, 0xcc, 0x17, 0xff, 0xf8,
+	0x42, 0x9e, 0x5c, 0xab, 0x24, 0xa7, 0xf0, 0x8e, 0x74, 0x00, 0x2e, 0xf2, 0x50, 0xd9, 0x05, 0x56,
+	0x91, 0x84, 0xba, 0x01, 0x4d, 0x89, 0x69, 0xd7, 0x08, 0x39, 0x0f, 0xe9, 0xe0, 0xad, 0xd0, 0x71,
+	0x5b, 0x3a, 0x04, 0x53, 0x2f, 0x97, 0xd8, 0x80, 0x6e, 0xa6, 0x9a, 0xc4, 0x42, 0xd8, 0x34, 0x55,
+	0x49, 0xf8, 0xbb, 0x86, 0x94, 0x69, 0x51, 0xce, 0x6f, 0x42, 0xe4, 0x18, 0x34, 0xe7, 0xa3, 0x88,
+	0x94, 0x6f, 0x68, 0xe4, 0xb2, 0x09, 0xad, 0x69, 0xc3, 0x7f, 0x22, 0xa7, 0xc1, 0xf4, 0xf4, 0x93,
+	0xd0, 0x03, 0x43, 0x43, 0x1a, 0x45, 0x0f, 0xed, 0x52, 0x60, 0xae, 0xca, 0x29, 0x5a, 0xdf, 0x8c,
+	0xbf, 0x42, 0x27, 0x0d, 0xca, 0x08, 0x35, 0x0e, 0x40, 0xcf, 0xb2, 0x66, 0x35, 0x0a, 0x0d, 0x4e,
+	0x50, 0x63, 0x0b, 0xfe, 0xb3, 0x06, 0x7a, 0x76, 0x9f, 0xc4, 0x93, 0xd0, 0x22, 0xcb, 0x3a, 0xdd,
+	0xb5, 0xd4, 0xa2, 0x52, 0xed, 0x9b, 0x2b, 0x73, 0x86, 0xee, 0xf7, 0x02, 0xee, 0xa2, 0x63, 0x6a,
+	0xd6, 0x49, 0x68, 0x71, 0x0c, 0xba, 0x03, 0x2a, 0x5a, 0xf0, 0x62, 0xc2, 0x5c, 0xf2, 0x2c, 0xd5,
+	0x89, 0x38, 0x94, 0xd2, 0xaf, 0x8a, 0x05, 0x1c, 0x87, 0x2e, 0x71, 0x8a, 0x38, 0x75, 0xe2, 0x31,
+	0xad, 0x50, 0x71, 0x0b, 0x4d, 0x17, 0x02, 0x85, 0xa8, 0x83, 0x43, 0xbe, 0x2c, 0x9b, 0x45, 0x15,
+	0x52, 0x8e, 0x52, 0x99, 0x80, 0xb7, 0xf9, 0x65, 0xc6, 0x32, 0xd9, 0x24, 0x84, 0x9c, 0xb0, 0x1d,
+	0xbe, 0xf2, 0xc6, 0xa1, 0x34, 0x7c, 0x1a, 0x11, 0x7f, 0x8c, 0x26, 0xb3, 0x4c, 0x93, 0x90, 0x32,
+	0x0f, 0x5d, 0x39, 0x85, 0x14, 0x7e, 0xf7, 0x2e, 0xe7, 0x3f, 0x41, 0xcb, 0x47, 0xbc, 0x8b, 0xe6,
+	0x2b, 0x69, 0x26, 0x21, 0xe4, 0x10, 0xf4, 0x9c, 0x9f, 0x09, 0xd1, 0x6f, 0xe5, 0xe5, 0xe2, 0x8e,
+	0x6f, 0x9a, 0x1a, 0xf0, 0xaf, 0xe4, 0x04, 0x8b, 0x69, 0x8d, 0x3a, 0x3c, 0xe4, 0x8b, 0xbc, 0x26,
+	0xde, 0x74, 0x8d, 0x2c, 0x57, 0xe1, 0xa4, 0x5b, 0xd7, 0x88, 0x13, 0xe9, 0xbe, 0x9c, 0x48, 0x30,
+	0x09, 0xf9, 0xe3, 0x76, 0x1b, 0x81, 0x76, 0xc1, 0xaf, 0xd8, 0x08, 0x5c, 0x03, 0x1d, 0x7f, 0x2d,
+	0xa5, 0xb5, 0x2a, 0xab, 0x51, 0x96, 0x59, 0xba, 0x6d, 0x2b, 0xb8, 0xba, 0x1c, 0xcd, 0xbb, 0xe6,
+	0x26, 0xfc, 0x44, 0xba, 0xb5, 0x97, 0x65, 0x96, 0x84, 0x68, 0x02, 0x3d, 0xeb, 0xaa, 0xa2, 0xb3,
+	0xbb, 0x66, 0xb9, 0xd8, 0x39, 0xb7, 0x4a, 0x4e, 0x63, 0xad, 0x05, 0x53, 0x5a, 0x49, 0x08, 0x3e,
+	0x69, 0xb7, 0x21, 0x19, 0xae, 0xa1, 0x15, 0x1b, 0x92, 0x5b, 0xd3, 0x86, 0x7f, 0xdb, 0x40, 0xcf,
+	0xee, 0x93, 0x53, 0x12, 0x9a, 0x64, 0x09, 0xa5, 0x7b, 0xf6, 0x9a, 0xd4, 0x2c, 0xc3, 0x67, 0xdd,
+	0x7d, 0xdf, 0xc0, 0x01, 0x3a, 0xa6, 0x26, 0x94, 0x84, 0x1e, 0xa7, 0xec, 0x16, 0x46, 0xe5, 0xee,
+	0x5a, 0xb1, 0x30, 0xba, 0x15, 0xaa, 0x32, 0xf7, 0xca, 0x4a, 0x7c, 0x7a, 0xb4, 0xb9, 0x57, 0x97,
+	0xe2, 0x39, 0xb7, 0x4a, 0xc6, 0x54, 0xba, 0x38, 0x2b, 0x84, 0x21, 0xe8, 0x89, 0x47, 0x15, 0x56,
+	0xc8, 0x29, 0x6e, 0xe3, 0x09, 0x11, 0xdf, 0x48, 0xd6, 0x25, 0x05, 0xb5, 0x42, 0xda, 0xc4, 0x68,
+	0x1e, 0x55, 0x16, 0x7e, 0x54, 0x3c, 0x4a, 0x6b, 0xc2, 0x5f, 0x22, 0x52, 0xcd, 0x21, 0x09, 0xe9,
+	0x93, 0x76, 0xd1, 0x45, 0xe5, 0xde, 0x5a, 0x11, 0x5d, 0xb8, 0xc6, 0x96, 0xcc, 0xae, 0xeb, 0x13,
+	0x48, 0x42, 0x8b, 0xb3, 0x96, 0x76, 0x5d, 0x77, 0x99, 0xa8, 0xb4, 0xeb, 0x7d, 0xdf, 0xe0, 0x76,
+	0xad, 0x64, 0x8f, 0x84, 0x1e, 0xe7, 0x2c, 0xed, 0x5a, 0xbe, 0x66, 0x54, 0xda, 0x75, 0x85, 0xca,
+	0xed, 0x5a, 0x4d, 0x1d, 0x09, 0x81, 0xe7, 0x2d, 0xed, 0x5a, 0xb9, 0x80, 0x54, 0xda, 0x75, 0x95,
+	0x8c, 0xff, 0xa2, 0x81, 0x16, 0xf7, 0xcb, 0x1b, 0x09, 0x05, 0x16, 0x47, 0x1b, 0x79, 0x2d, 0x29,
+	0x44, 0x0b, 0x5d, 0xce, 0xd5, 0xa6, 0x8d, 0x24, 0x7f, 0xcb, 0xd5, 0x12, 0x3a, 0x3c, 0x67, 0xe9,
+	0x6f, 0xf9, 0xb5, 0xbe, 0xd2, 0xdf, 0x14, 0x4a, 0xea, 0x6f, 0xa6, 0x7c, 0x91, 0x90, 0x76, 0xc1,
+	0xce, 0xdf, 0xaa, 0x17, 0x5c, 0x0a, 0x7f, 0x63, 0xe6, 0x26, 0xbc, 0x29, 0xdf, 0x33, 0x11, 0x52,
+	0x9f, 0xb7, 0xeb, 0x63, 0x45, 0x58, 0x71, 0xdd, 0x44, 0xc8, 0x18, 0xa0, 0xf9, 0x4a, 0xa6, 0x48,
+	0x88, 0x7a, 0xc1, 0x2e, 0x36, 0xd0, 0xee, 0xb5, 0x14, 0xb1, 0x41, 0xdb, 0x40, 0x4f, 0x03, 0x4b,
+	0x25, 0x4d, 0x24, 0x44, 0xbe, 0x68, 0x17, 0x58, 0xca, 0x37, 0x5e, 0x8a, 0xc0, 0xb2, 0xad, 0x13,
+	0xf1, 0x87, 0x68, 0x42, 0x76, 0xce, 0x8b, 0xd0, 0xef, 0xb1, 0xa5, 0x90, 0x82, 0x3b, 0x6a, 0x97,
+	0xce, 0xf8, 0x31, 0x9a, 0x54, 0x7c, 0xf0, 0x25, 0xbb, 0x78, 0x55, 0xf5, 0xbd, 0x89, 0xae, 0xe4,
+	0x73, 0x0c, 0xcd, 0x4a, 0xd9, 0x21, 0xc1, 0xfe, 0x92, 0xdd, 0x09, 0xba, 0x2c, 0x6d, 0x2e, 0x4e,
+	0xd0, 0x3d, 0x95, 0x94, 0x06, 0x68, 0x86, 0xcc, 0x90, 0x10, 0xf7, 0xb2, 0x9d, 0x79, 0x57, 0x2b,
+	0xc4, 0x0a, 0xf3, 0x8e, 0xcc, 0x4d, 0x69, 0x54, 0x5e, 0x49, 0x0b, 0x09, 0xe1, 0x53, 0x76, 0x51,
+	0xb9, 0x5e, 0x15, 0x59, 0x44, 0xe5, 0xb1, 0xa9, 0x21, 0x1d, 0xde, 0xea, 0xf6, 0x39, 0x6d, 0x37,
+	0xbc, 0xd5, 0x6d, 0x73, 0x3a, 0xd6, 0xb6, 0xcb, 0x4d, 0x34, 0x53, 0x26, 0x84, 0x84, 0x94, 0x19,
+	0x3b, 0xf7, 0x2d, 0xca, 0x05, 0x0b, 0xf7, 0x1d, 0x28, 0x94, 0x55, 0x84, 0xc6, 0xf3, 0x42, 0xa7,
+	0xcb, 0x7f, 0x77, 0x10, 0xcd, 0x94, 0x7f, 0xfa, 0x2c, 0x63, 0x84, 0xff, 0xa1, 0x81, 0x0e, 0x65,
+	0x15, 0xa9, 0x18, 0xf0, 0x55, 0xc1, 0xfc, 0x57, 0x0d, 0x17, 0xae, 0x8d, 0x80, 0xcc, 0x94, 0x5a,
+	0x7c, 0xf8, 0xfd, 0xca, 0xac, 0x54, 0xd8, 0xf6, 0x0a, 0xff, 0x1b, 0x71, 0xdf, 0xfd, 0xe3, 0xbf,
+	0xfe, 0x76, 0xec, 0xca, 0x62, 0x93, 0xff, 0xa7, 0x49, 0xd1, 0x18, 0x2f, 0x7d, 0x25, 0xbd, 0x77,
+	0xf3, 0xd2, 0xd7, 0xe2, 0xef, 0x44, 0xae, 0x78, 0xf1, 0x72, 0x56, 0x42, 0xbb, 0xdc, 0xb8, 0x84,
+	0xff, 0xad, 0x81, 0x26, 0x33, 0x51, 0xd9, 0xdf, 0x76, 0xc3, 0xb7, 0xac, 0x55, 0x53, 0xfe, 0xdc,
+	0xdd, 0xc2, 0xed, 0x91, 0xf1, 0xa2, 0x83, 0x1b, 0xb5, 0x1d, 0xbc, 0xb6, 0x78, 0xd5, 0xae, 0x83,
+	0x19, 0xe7, 0xe5, 0xc6, 0xa5, 0xd7, 0x1a, 0xf8, 0x9f, 0x1b, 0xe8, 0x50, 0x66, 0x03, 0x90, 0x79,
+	0x33, 0x17, 0x15, 0x2e, 0x5c, 0x1b, 0x01, 0x29, 0xba, 0xf5, 0xc9, 0xf7, 0x2b, 0x67, 0xe4, 0x6e,
+	0x55, 0xca, 0x0e, 0x6d, 0xe7, 0x30, 0x63, 0xb0, 0xdc, 0xb8, 0xb4, 0x70, 0xea, 0x77, 0x2b, 0xa4,
+	0x54, 0x46, 0xfc, 0xea, 0xfb, 0x71, 0xd3, 0x0d, 0x7b, 0xab, 0xff, 0xdd, 0x40, 0x17, 0xdc, 0xb0,
+	0x37, 0x54, 0xf1, 0xd5, 0xe3, 0xba, 0xa9, 0xaf, 0x47, 0x61, 0x12, 0xae, 0x37, 0x3e, 0x7d, 0x57,
+	0x40, 0x3b, 0x61, 0x97, 0x06, 0x9d, 0x66, 0x18, 0x75, 0x96, 0x3a, 0x2c, 0xe0, 0x7f, 0x94, 0x6f,
+	0xa9, 0x14, 0x56, 0xff, 0x97, 0x48, 0xaf, 0xe7, 0x3f, 0xfe, 0x7a, 0xec, 0xc0, 0xfd, 0x95, 0x95,
+	0xbf, 0x1d, 0x3b, 0x9f, 0x49, 0x6a, 0xae, 0x78, 0xd2, 0x5f, 0xe1, 0x6b, 0x3e, 0xbe, 0xd2, 0x14,
+	0x82, 0xe3, 0xdf, 0xe5, 0xaf, 0x7c, 0xbe, 0xe2, 0xc5, 0x9f, 0x17, 0xaf, 0x7c, 0xfe, 0xf8, 0xca,
+	0xe7, 0xf9, 0x2b, 0xff, 0x3e, 0x76, 0x21, 0xa3, 0x2f, 0x2f, 0xa7, 0x83, 0xb1, 0x5c, 0xbc, 0xb4,
+	0xbc, 0xfc, 0xf8, 0xca, 0xf2, 0x72, 0xfe, 0xda, 0xe6, 0x21, 0xae, 0xe7, 0x95, 0xff, 0x0d, 0x00,
+	0x00, 0xff, 0xff, 0x1f, 0x5e, 0x07, 0x62, 0x24, 0x76, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GoogleAdsServiceClient is the client API for GoogleAdsService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GoogleAdsServiceClient interface {
+	// Returns all rows that match the search query.
+	Search(ctx context.Context, in *SearchGoogleAdsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsResponse, error)
+	// Returns all rows that match the search stream query.
+	SearchStream(ctx context.Context, in *SearchGoogleAdsStreamRequest, opts ...grpc.CallOption) (GoogleAdsService_SearchStreamClient, error)
+	// Creates, updates, or removes resources. This method supports atomic
+	// transactions with multiple types of resources. For example, you can
+	// atomically create a campaign and a campaign budget, or perform up to
+	// thousands of mutates atomically.
+	//
+	// This method is essentially a wrapper around a series of mutate methods. The
+	// only features it offers over calling those methods directly are:
+	//
+	// - Atomic transactions
+	// - Temp resource names (described below)
+	// - Somewhat reduced latency over making a series of mutate calls
+	//
+	// Note: Only resources that support atomic transactions are included, so this
+	// method can't replace all calls to individual services.
+	//
+	// ## Atomic Transaction Benefits
+	//
+	// Atomicity makes error handling much easier. If you're making a series of
+	// changes and one fails, it can leave your account in an inconsistent state.
+	// With atomicity, you either reach the desired state directly, or the request
+	// fails and you can retry.
+	//
+	// ## Temp Resource Names
+	//
+	// Temp resource names are a special type of resource name used to create a
+	// resource and reference that resource in the same request. For example, if a
+	// campaign budget is created with `resource_name` equal to
+	// `customers/123/campaignBudgets/-1`, that resource name can be reused in
+	// the `Campaign.budget` field in the same request. That way, the two
+	// resources are created and linked atomically.
+	//
+	// To create a temp resource name, put a negative number in the part of the
+	// name that the server would normally allocate.
+	//
+	// Note:
+	//
+	// - Resources must be created with a temp name before the name can be reused.
+	//   For example, the previous CampaignBudget+Campaign example would fail if
+	//   the mutate order was reversed.
+	// - Temp names are not remembered across requests.
+	// - There's no limit to the number of temp names in a request.
+	// - Each temp name must use a unique negative number, even if the resource
+	//   types differ.
+	//
+	// ## Latency
+	//
+	// It's important to group mutates by resource type or the request may time
+	// out and fail. Latency is roughly equal to a series of calls to individual
+	// mutate methods, where each change in resource type is a new call. For
+	// example, mutating 10 campaigns then 10 ad groups is like 2 calls, while
+	// mutating 1 campaign, 1 ad group, 1 campaign, 1 ad group is like 4 calls.
+	Mutate(ctx context.Context, in *MutateGoogleAdsRequest, opts ...grpc.CallOption) (*MutateGoogleAdsResponse, error)
+}
+
+type googleAdsServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGoogleAdsServiceClient(cc grpc.ClientConnInterface) GoogleAdsServiceClient {
+	return &googleAdsServiceClient{cc}
+}
+
+func (c *googleAdsServiceClient) Search(ctx context.Context, in *SearchGoogleAdsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsResponse, error) {
+	out := new(SearchGoogleAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GoogleAdsService/Search", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *googleAdsServiceClient) SearchStream(ctx context.Context, in *SearchGoogleAdsStreamRequest, opts ...grpc.CallOption) (GoogleAdsService_SearchStreamClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_GoogleAdsService_serviceDesc.Streams[0], "/google.ads.googleads.v3.services.GoogleAdsService/SearchStream", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &googleAdsServiceSearchStreamClient{stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type GoogleAdsService_SearchStreamClient interface {
+	Recv() (*SearchGoogleAdsStreamResponse, error)
+	grpc.ClientStream
+}
+
+type googleAdsServiceSearchStreamClient struct {
+	grpc.ClientStream
+}
+
+func (x *googleAdsServiceSearchStreamClient) Recv() (*SearchGoogleAdsStreamResponse, error) {
+	m := new(SearchGoogleAdsStreamResponse)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *googleAdsServiceClient) Mutate(ctx context.Context, in *MutateGoogleAdsRequest, opts ...grpc.CallOption) (*MutateGoogleAdsResponse, error) {
+	out := new(MutateGoogleAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GoogleAdsService/Mutate", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GoogleAdsServiceServer is the server API for GoogleAdsService service.
+type GoogleAdsServiceServer interface {
+	// Returns all rows that match the search query.
+	Search(context.Context, *SearchGoogleAdsRequest) (*SearchGoogleAdsResponse, error)
+	// Returns all rows that match the search stream query.
+	SearchStream(*SearchGoogleAdsStreamRequest, GoogleAdsService_SearchStreamServer) error
+	// Creates, updates, or removes resources. This method supports atomic
+	// transactions with multiple types of resources. For example, you can
+	// atomically create a campaign and a campaign budget, or perform up to
+	// thousands of mutates atomically.
+	//
+	// This method is essentially a wrapper around a series of mutate methods. The
+	// only features it offers over calling those methods directly are:
+	//
+	// - Atomic transactions
+	// - Temp resource names (described below)
+	// - Somewhat reduced latency over making a series of mutate calls
+	//
+	// Note: Only resources that support atomic transactions are included, so this
+	// method can't replace all calls to individual services.
+	//
+	// ## Atomic Transaction Benefits
+	//
+	// Atomicity makes error handling much easier. If you're making a series of
+	// changes and one fails, it can leave your account in an inconsistent state.
+	// With atomicity, you either reach the desired state directly, or the request
+	// fails and you can retry.
+	//
+	// ## Temp Resource Names
+	//
+	// Temp resource names are a special type of resource name used to create a
+	// resource and reference that resource in the same request. For example, if a
+	// campaign budget is created with `resource_name` equal to
+	// `customers/123/campaignBudgets/-1`, that resource name can be reused in
+	// the `Campaign.budget` field in the same request. That way, the two
+	// resources are created and linked atomically.
+	//
+	// To create a temp resource name, put a negative number in the part of the
+	// name that the server would normally allocate.
+	//
+	// Note:
+	//
+	// - Resources must be created with a temp name before the name can be reused.
+	//   For example, the previous CampaignBudget+Campaign example would fail if
+	//   the mutate order was reversed.
+	// - Temp names are not remembered across requests.
+	// - There's no limit to the number of temp names in a request.
+	// - Each temp name must use a unique negative number, even if the resource
+	//   types differ.
+	//
+	// ## Latency
+	//
+	// It's important to group mutates by resource type or the request may time
+	// out and fail. Latency is roughly equal to a series of calls to individual
+	// mutate methods, where each change in resource type is a new call. For
+	// example, mutating 10 campaigns then 10 ad groups is like 2 calls, while
+	// mutating 1 campaign, 1 ad group, 1 campaign, 1 ad group is like 4 calls.
+	Mutate(context.Context, *MutateGoogleAdsRequest) (*MutateGoogleAdsResponse, error)
+}
+
+// UnimplementedGoogleAdsServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGoogleAdsServiceServer struct {
+}
+
+func (*UnimplementedGoogleAdsServiceServer) Search(ctx context.Context, req *SearchGoogleAdsRequest) (*SearchGoogleAdsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method Search not implemented")
+}
+func (*UnimplementedGoogleAdsServiceServer) SearchStream(req *SearchGoogleAdsStreamRequest, srv GoogleAdsService_SearchStreamServer) error {
+	return status1.Errorf(codes.Unimplemented, "method SearchStream not implemented")
+}
+func (*UnimplementedGoogleAdsServiceServer) Mutate(ctx context.Context, req *MutateGoogleAdsRequest) (*MutateGoogleAdsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method Mutate not implemented")
+}
+
+func RegisterGoogleAdsServiceServer(s *grpc.Server, srv GoogleAdsServiceServer) {
+	s.RegisterService(&_GoogleAdsService_serviceDesc, srv)
+}
+
+func _GoogleAdsService_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchGoogleAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsServiceServer).Search(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GoogleAdsService/Search",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsServiceServer).Search(ctx, req.(*SearchGoogleAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GoogleAdsService_SearchStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(SearchGoogleAdsStreamRequest)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(GoogleAdsServiceServer).SearchStream(m, &googleAdsServiceSearchStreamServer{stream})
+}
+
+type GoogleAdsService_SearchStreamServer interface {
+	Send(*SearchGoogleAdsStreamResponse) error
+	grpc.ServerStream
+}
+
+type googleAdsServiceSearchStreamServer struct {
+	grpc.ServerStream
+}
+
+func (x *googleAdsServiceSearchStreamServer) Send(m *SearchGoogleAdsStreamResponse) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _GoogleAdsService_Mutate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateGoogleAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsServiceServer).Mutate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GoogleAdsService/Mutate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsServiceServer).Mutate(ctx, req.(*MutateGoogleAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GoogleAdsService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GoogleAdsService",
+	HandlerType: (*GoogleAdsServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Search",
+			Handler:    _GoogleAdsService_Search_Handler,
+		},
+		{
+			MethodName: "Mutate",
+			Handler:    _GoogleAdsService_Mutate_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "SearchStream",
+			Handler:       _GoogleAdsService_SearchStream_Handler,
+			ServerStreams: true,
+		},
+	},
+	Metadata: "google/ads/googleads/v3/services/google_ads_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/group_placement_view_service.pb.go b/googleapis/ads/googleads/v3/services/group_placement_view_service.pb.go
new file mode 100644
index 0000000..917a9b5
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/group_placement_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/group_placement_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [GroupPlacementViewService.GetGroupPlacementView][google.ads.googleads.v3.services.GroupPlacementViewService.GetGroupPlacementView].
+type GetGroupPlacementViewRequest struct {
+	// Required. The resource name of the Group Placement view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGroupPlacementViewRequest) Reset()         { *m = GetGroupPlacementViewRequest{} }
+func (m *GetGroupPlacementViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGroupPlacementViewRequest) ProtoMessage()    {}
+func (*GetGroupPlacementViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_366e0655413e5b2b, []int{0}
+}
+
+func (m *GetGroupPlacementViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGroupPlacementViewRequest.Unmarshal(m, b)
+}
+func (m *GetGroupPlacementViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGroupPlacementViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetGroupPlacementViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGroupPlacementViewRequest.Merge(m, src)
+}
+func (m *GetGroupPlacementViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGroupPlacementViewRequest.Size(m)
+}
+func (m *GetGroupPlacementViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGroupPlacementViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGroupPlacementViewRequest proto.InternalMessageInfo
+
+func (m *GetGroupPlacementViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetGroupPlacementViewRequest)(nil), "google.ads.googleads.v3.services.GetGroupPlacementViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/group_placement_view_service.proto", fileDescriptor_366e0655413e5b2b)
+}
+
+var fileDescriptor_366e0655413e5b2b = []byte{
+	// 422 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x6a, 0xd5, 0x40,
+	0x18, 0x25, 0x29, 0x08, 0x06, 0xdd, 0x04, 0xc4, 0x1a, 0x8b, 0x5e, 0x4a, 0x17, 0xa5, 0x8b, 0x19,
+	0x30, 0x14, 0x61, 0xfc, 0x81, 0xb9, 0x2e, 0xd2, 0x8d, 0x72, 0xa9, 0x90, 0x85, 0x04, 0xc2, 0x34,
+	0xf9, 0x8c, 0x03, 0xc9, 0x4c, 0x9c, 0x99, 0xa4, 0x0b, 0x71, 0x23, 0xf8, 0x04, 0x6e, 0x5c, 0xbb,
+	0xf4, 0x51, 0xba, 0x75, 0x27, 0x08, 0x2e, 0x5c, 0xf9, 0x14, 0x92, 0x4e, 0x26, 0xed, 0xa5, 0xa6,
+	0x77, 0x77, 0x98, 0x73, 0xbe, 0x73, 0xbe, 0x9f, 0x09, 0x5e, 0x54, 0x52, 0x56, 0x35, 0x60, 0x56,
+	0x6a, 0x6c, 0xe1, 0x80, 0xfa, 0x18, 0x6b, 0x50, 0x3d, 0x2f, 0x40, 0xe3, 0x4a, 0xc9, 0xae, 0xcd,
+	0xdb, 0x9a, 0x15, 0xd0, 0x80, 0x30, 0x79, 0xcf, 0xe1, 0x34, 0x1f, 0x59, 0xd4, 0x2a, 0x69, 0x64,
+	0xb8, 0xb0, 0x95, 0x88, 0x95, 0x1a, 0x4d, 0x26, 0xa8, 0x8f, 0x91, 0x33, 0x89, 0x9e, 0xce, 0xc5,
+	0x28, 0xd0, 0xb2, 0x53, 0x73, 0x39, 0xd6, 0x3f, 0xda, 0x71, 0xd5, 0x2d, 0xc7, 0x4c, 0x08, 0x69,
+	0x98, 0xe1, 0x52, 0xe8, 0x91, 0xbd, 0x7b, 0x89, 0x2d, 0x6a, 0x0e, 0xc2, 0x8c, 0xc4, 0xc3, 0x4b,
+	0xc4, 0x5b, 0x0e, 0x75, 0x99, 0x9f, 0xc0, 0x3b, 0xd6, 0x73, 0xa9, 0xac, 0x60, 0xf7, 0x28, 0xd8,
+	0x49, 0xc0, 0x24, 0x43, 0xf0, 0xca, 0xe5, 0xa6, 0x1c, 0x4e, 0x8f, 0xe1, 0x7d, 0x07, 0xda, 0x84,
+	0xfb, 0xc1, 0x6d, 0xd7, 0x5f, 0x2e, 0x58, 0x03, 0xdb, 0xde, 0xc2, 0xdb, 0xbf, 0xb9, 0xdc, 0xfa,
+	0x4d, 0xfd, 0xe3, 0x5b, 0x8e, 0x79, 0xc5, 0x1a, 0x78, 0xf4, 0xd5, 0x0f, 0xee, 0x5d, 0xf5, 0x79,
+	0x6d, 0xc7, 0x0f, 0x7f, 0x79, 0xc1, 0x9d, 0xff, 0x06, 0x85, 0xcf, 0xd1, 0xa6, 0xd5, 0xa1, 0xeb,
+	0x3a, 0x8c, 0x0e, 0x67, 0xeb, 0xa7, 0xc5, 0xa2, 0xab, 0xd5, 0xbb, 0x2f, 0x7f, 0xd2, 0xf5, 0xc9,
+	0x3e, 0xfd, 0xf8, 0xf3, 0xc5, 0x7f, 0x1c, 0x1e, 0x0e, 0x27, 0xf9, 0xb0, 0xc6, 0x3c, 0x2b, 0x3a,
+	0x6d, 0x64, 0x03, 0x4a, 0xe3, 0x03, 0x7b, 0xa3, 0x35, 0x2b, 0x8d, 0x0f, 0x3e, 0x46, 0xf7, 0xcf,
+	0xe8, 0xf6, 0x45, 0xf8, 0x88, 0x5a, 0xae, 0x51, 0x21, 0x9b, 0xe5, 0x67, 0x3f, 0xd8, 0x2b, 0x64,
+	0xb3, 0x71, 0xd0, 0xe5, 0x83, 0xd9, 0x05, 0xae, 0x86, 0x6b, 0xad, 0xbc, 0x37, 0x47, 0xa3, 0x47,
+	0x25, 0x6b, 0x26, 0x2a, 0x24, 0x55, 0x85, 0x2b, 0x10, 0xe7, 0xb7, 0xc4, 0x17, 0xa9, 0xf3, 0x7f,
+	0xf9, 0x89, 0x03, 0xdf, 0xfc, 0xad, 0x84, 0xd2, 0xef, 0xfe, 0x22, 0xb1, 0x86, 0xb4, 0xd4, 0xc8,
+	0xc2, 0x01, 0xa5, 0x31, 0x1a, 0x83, 0xf5, 0x99, 0x93, 0x64, 0xb4, 0xd4, 0xd9, 0x24, 0xc9, 0xd2,
+	0x38, 0x73, 0x92, 0xbf, 0xfe, 0x9e, 0x7d, 0x27, 0x84, 0x96, 0x9a, 0x90, 0x49, 0x44, 0x48, 0x1a,
+	0x13, 0xe2, 0x64, 0x27, 0x37, 0xce, 0xfb, 0x8c, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x57, 0x82,
+	0x4b, 0x5c, 0x72, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GroupPlacementViewServiceClient is the client API for GroupPlacementViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GroupPlacementViewServiceClient interface {
+	// Returns the requested Group Placement view in full detail.
+	GetGroupPlacementView(ctx context.Context, in *GetGroupPlacementViewRequest, opts ...grpc.CallOption) (*resources.GroupPlacementView, error)
+}
+
+type groupPlacementViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGroupPlacementViewServiceClient(cc grpc.ClientConnInterface) GroupPlacementViewServiceClient {
+	return &groupPlacementViewServiceClient{cc}
+}
+
+func (c *groupPlacementViewServiceClient) GetGroupPlacementView(ctx context.Context, in *GetGroupPlacementViewRequest, opts ...grpc.CallOption) (*resources.GroupPlacementView, error) {
+	out := new(resources.GroupPlacementView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.GroupPlacementViewService/GetGroupPlacementView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GroupPlacementViewServiceServer is the server API for GroupPlacementViewService service.
+type GroupPlacementViewServiceServer interface {
+	// Returns the requested Group Placement view in full detail.
+	GetGroupPlacementView(context.Context, *GetGroupPlacementViewRequest) (*resources.GroupPlacementView, error)
+}
+
+// UnimplementedGroupPlacementViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedGroupPlacementViewServiceServer struct {
+}
+
+func (*UnimplementedGroupPlacementViewServiceServer) GetGroupPlacementView(ctx context.Context, req *GetGroupPlacementViewRequest) (*resources.GroupPlacementView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetGroupPlacementView not implemented")
+}
+
+func RegisterGroupPlacementViewServiceServer(s *grpc.Server, srv GroupPlacementViewServiceServer) {
+	s.RegisterService(&_GroupPlacementViewService_serviceDesc, srv)
+}
+
+func _GroupPlacementViewService_GetGroupPlacementView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGroupPlacementViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GroupPlacementViewServiceServer).GetGroupPlacementView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.GroupPlacementViewService/GetGroupPlacementView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GroupPlacementViewServiceServer).GetGroupPlacementView(ctx, req.(*GetGroupPlacementViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GroupPlacementViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.GroupPlacementViewService",
+	HandlerType: (*GroupPlacementViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGroupPlacementView",
+			Handler:    _GroupPlacementViewService_GetGroupPlacementView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/group_placement_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/hotel_group_view_service.pb.go b/googleapis/ads/googleads/v3/services/hotel_group_view_service.pb.go
new file mode 100644
index 0000000..2426806
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/hotel_group_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/hotel_group_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [HotelGroupViewService.GetHotelGroupView][google.ads.googleads.v3.services.HotelGroupViewService.GetHotelGroupView].
+type GetHotelGroupViewRequest struct {
+	// Required. Resource name of the Hotel Group View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetHotelGroupViewRequest) Reset()         { *m = GetHotelGroupViewRequest{} }
+func (m *GetHotelGroupViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetHotelGroupViewRequest) ProtoMessage()    {}
+func (*GetHotelGroupViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8e9ace710ca955f4, []int{0}
+}
+
+func (m *GetHotelGroupViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Unmarshal(m, b)
+}
+func (m *GetHotelGroupViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetHotelGroupViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetHotelGroupViewRequest.Merge(m, src)
+}
+func (m *GetHotelGroupViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Size(m)
+}
+func (m *GetHotelGroupViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetHotelGroupViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHotelGroupViewRequest proto.InternalMessageInfo
+
+func (m *GetHotelGroupViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetHotelGroupViewRequest)(nil), "google.ads.googleads.v3.services.GetHotelGroupViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/hotel_group_view_service.proto", fileDescriptor_8e9ace710ca955f4)
+}
+
+var fileDescriptor_8e9ace710ca955f4 = []byte{
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xbf, 0x8a, 0xd4, 0x40,
+	0x18, 0x27, 0x39, 0x10, 0x0c, 0x5a, 0x18, 0x10, 0x97, 0x28, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0x70, 0xa6, 0x91, 0x11, 0x91, 0x59, 0x84, 0x9c, 0x8d, 0x1c, 0x27, 0xa4, 0x90, 0x40, 0x98, 0x4b,
+	0x3e, 0x73, 0x03, 0x49, 0x26, 0xce, 0x4c, 0x72, 0x85, 0x58, 0x28, 0xbe, 0x81, 0x6f, 0x60, 0xe9,
+	0xa3, 0x1c, 0x58, 0xd9, 0x59, 0x59, 0x58, 0xf9, 0x14, 0x92, 0x9d, 0x4c, 0x76, 0x83, 0x1b, 0xb6,
+	0xfb, 0x91, 0xdf, 0xbf, 0xf9, 0xbe, 0x2f, 0xde, 0x8b, 0x42, 0x88, 0xa2, 0x04, 0xcc, 0x72, 0x85,
+	0x0d, 0xec, 0x51, 0x17, 0x62, 0x05, 0xb2, 0xe3, 0x19, 0x28, 0x7c, 0x25, 0x34, 0x94, 0x69, 0x21,
+	0x45, 0xdb, 0xa4, 0x1d, 0x87, 0xeb, 0x74, 0x60, 0x50, 0x23, 0x85, 0x16, 0xfe, 0xd2, 0xb8, 0x10,
+	0xcb, 0x15, 0x1a, 0x03, 0x50, 0x17, 0x22, 0x1b, 0x10, 0x3c, 0x9d, 0xab, 0x90, 0xa0, 0x44, 0x2b,
+	0x77, 0x75, 0x98, 0xec, 0xe0, 0x91, 0x75, 0x36, 0x1c, 0xb3, 0xba, 0x16, 0x9a, 0x69, 0x2e, 0x6a,
+	0x35, 0xb0, 0x0f, 0xb6, 0xd8, 0xac, 0xe4, 0x50, 0xeb, 0x81, 0x78, 0xbc, 0x45, 0xbc, 0xe3, 0x50,
+	0xe6, 0xe9, 0x25, 0x5c, 0xb1, 0x8e, 0x0b, 0x69, 0x04, 0x87, 0x2f, 0xbd, 0x45, 0x04, 0xfa, 0xac,
+	0x2f, 0x8d, 0xfa, 0xce, 0x98, 0xc3, 0xf5, 0x05, 0xbc, 0x6f, 0x41, 0x69, 0xff, 0xd8, 0xbb, 0x6b,
+	0xdf, 0x95, 0xd6, 0xac, 0x82, 0x85, 0xb3, 0x74, 0x8e, 0x6f, 0xaf, 0x0e, 0x7e, 0x53, 0xf7, 0xe2,
+	0x8e, 0x65, 0x5e, 0xb3, 0x0a, 0x9e, 0x7c, 0x71, 0xbd, 0xfb, 0xd3, 0x8c, 0x37, 0x66, 0x64, 0xff,
+	0x87, 0xe3, 0xdd, 0xfb, 0xaf, 0xc0, 0x27, 0x68, 0xdf, 0xaa, 0xd0, 0xdc, 0xab, 0x82, 0xd3, 0x59,
+	0xef, 0xb8, 0x44, 0x34, 0x75, 0x1e, 0xbe, 0xfa, 0x45, 0xa7, 0x93, 0x7c, 0xfe, 0xf9, 0xe7, 0xab,
+	0x1b, 0xfa, 0xa7, 0xfd, 0xea, 0x3f, 0x4c, 0x98, 0xe7, 0x59, 0xab, 0xb4, 0xa8, 0x40, 0x2a, 0x7c,
+	0x62, 0x6e, 0x31, 0xc6, 0x28, 0x7c, 0xf2, 0x31, 0x78, 0x78, 0x43, 0x17, 0x9b, 0xd2, 0x01, 0x35,
+	0x5c, 0xa1, 0x4c, 0x54, 0xab, 0x4f, 0xae, 0x77, 0x94, 0x89, 0x6a, 0xef, 0x70, 0xab, 0x60, 0xe7,
+	0xb2, 0xce, 0xfb, 0x8b, 0x9c, 0x3b, 0x6f, 0xcf, 0x06, 0x7f, 0x21, 0x4a, 0x56, 0x17, 0x48, 0xc8,
+	0x02, 0x17, 0x50, 0xaf, 0xef, 0x85, 0x37, 0x8d, 0xf3, 0xff, 0xe9, 0x33, 0x0b, 0xbe, 0xb9, 0x07,
+	0x11, 0xa5, 0xdf, 0xdd, 0x65, 0x64, 0x02, 0x69, 0xae, 0x90, 0x81, 0x3d, 0x8a, 0x43, 0x34, 0x14,
+	0xab, 0x1b, 0x2b, 0x49, 0x68, 0xae, 0x92, 0x51, 0x92, 0xc4, 0x61, 0x62, 0x25, 0x7f, 0xdd, 0x23,
+	0xf3, 0x9d, 0x10, 0x9a, 0x2b, 0x42, 0x46, 0x11, 0x21, 0x71, 0x48, 0x88, 0x95, 0x5d, 0xde, 0x5a,
+	0xbf, 0x33, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x90, 0x5b, 0x0c, 0x86, 0x4e, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// HotelGroupViewServiceClient is the client API for HotelGroupViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type HotelGroupViewServiceClient interface {
+	// Returns the requested Hotel Group View in full detail.
+	GetHotelGroupView(ctx context.Context, in *GetHotelGroupViewRequest, opts ...grpc.CallOption) (*resources.HotelGroupView, error)
+}
+
+type hotelGroupViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewHotelGroupViewServiceClient(cc grpc.ClientConnInterface) HotelGroupViewServiceClient {
+	return &hotelGroupViewServiceClient{cc}
+}
+
+func (c *hotelGroupViewServiceClient) GetHotelGroupView(ctx context.Context, in *GetHotelGroupViewRequest, opts ...grpc.CallOption) (*resources.HotelGroupView, error) {
+	out := new(resources.HotelGroupView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.HotelGroupViewService/GetHotelGroupView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HotelGroupViewServiceServer is the server API for HotelGroupViewService service.
+type HotelGroupViewServiceServer interface {
+	// Returns the requested Hotel Group View in full detail.
+	GetHotelGroupView(context.Context, *GetHotelGroupViewRequest) (*resources.HotelGroupView, error)
+}
+
+// UnimplementedHotelGroupViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedHotelGroupViewServiceServer struct {
+}
+
+func (*UnimplementedHotelGroupViewServiceServer) GetHotelGroupView(ctx context.Context, req *GetHotelGroupViewRequest) (*resources.HotelGroupView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetHotelGroupView not implemented")
+}
+
+func RegisterHotelGroupViewServiceServer(s *grpc.Server, srv HotelGroupViewServiceServer) {
+	s.RegisterService(&_HotelGroupViewService_serviceDesc, srv)
+}
+
+func _HotelGroupViewService_GetHotelGroupView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetHotelGroupViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HotelGroupViewServiceServer).GetHotelGroupView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.HotelGroupViewService/GetHotelGroupView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HotelGroupViewServiceServer).GetHotelGroupView(ctx, req.(*GetHotelGroupViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _HotelGroupViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.HotelGroupViewService",
+	HandlerType: (*HotelGroupViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetHotelGroupView",
+			Handler:    _HotelGroupViewService_GetHotelGroupView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/hotel_group_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/hotel_performance_view_service.pb.go b/googleapis/ads/googleads/v3/services/hotel_performance_view_service.pb.go
new file mode 100644
index 0000000..0ac0412
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/hotel_performance_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/hotel_performance_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [HotelPerformanceViewService.GetHotelPerformanceView][google.ads.googleads.v3.services.HotelPerformanceViewService.GetHotelPerformanceView].
+type GetHotelPerformanceViewRequest struct {
+	// Required. Resource name of the Hotel Performance View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetHotelPerformanceViewRequest) Reset()         { *m = GetHotelPerformanceViewRequest{} }
+func (m *GetHotelPerformanceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetHotelPerformanceViewRequest) ProtoMessage()    {}
+func (*GetHotelPerformanceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c592119b3f671921, []int{0}
+}
+
+func (m *GetHotelPerformanceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Unmarshal(m, b)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetHotelPerformanceViewRequest.Merge(m, src)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Size(m)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetHotelPerformanceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHotelPerformanceViewRequest proto.InternalMessageInfo
+
+func (m *GetHotelPerformanceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetHotelPerformanceViewRequest)(nil), "google.ads.googleads.v3.services.GetHotelPerformanceViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/hotel_performance_view_service.proto", fileDescriptor_c592119b3f671921)
+}
+
+var fileDescriptor_c592119b3f671921 = []byte{
+	// 423 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x6a, 0xd5, 0x40,
+	0x14, 0x25, 0x29, 0x08, 0x06, 0xdd, 0x64, 0xd3, 0x92, 0x8a, 0x86, 0xd2, 0x45, 0x71, 0x31, 0x03,
+	0x46, 0x14, 0x46, 0x14, 0xe7, 0x81, 0xbc, 0x22, 0x22, 0x8f, 0x0a, 0x59, 0x48, 0x20, 0x4c, 0x93,
+	0xdb, 0x74, 0x20, 0x99, 0x89, 0x33, 0xf3, 0xd2, 0x85, 0xb8, 0x71, 0xe3, 0x07, 0xf8, 0x01, 0x82,
+	0x4b, 0x3f, 0xa5, 0x5b, 0x77, 0xae, 0x44, 0x5c, 0xf9, 0x15, 0x92, 0x4e, 0x26, 0xaf, 0x2d, 0xcd,
+	0x7b, 0xbb, 0x43, 0xce, 0xb9, 0xe7, 0xdc, 0xb9, 0x27, 0xc1, 0xab, 0x4a, 0xca, 0xaa, 0x06, 0xcc,
+	0x4a, 0x8d, 0x2d, 0xec, 0x51, 0x97, 0x60, 0x0d, 0xaa, 0xe3, 0x05, 0x68, 0x7c, 0x2a, 0x0d, 0xd4,
+	0x79, 0x0b, 0xea, 0x44, 0xaa, 0x86, 0x89, 0x02, 0xf2, 0x8e, 0xc3, 0x59, 0x3e, 0xf0, 0xa8, 0x55,
+	0xd2, 0xc8, 0x30, 0xb6, 0xb3, 0x88, 0x95, 0x1a, 0x8d, 0x36, 0xa8, 0x4b, 0x90, 0xb3, 0x89, 0x5e,
+	0x4c, 0x05, 0x29, 0xd0, 0x72, 0xa9, 0xa6, 0x93, 0x6c, 0x42, 0x74, 0xcf, 0xcd, 0xb7, 0x1c, 0x33,
+	0x21, 0xa4, 0x61, 0x86, 0x4b, 0xa1, 0x07, 0x76, 0xfb, 0x12, 0x5b, 0xd4, 0x1c, 0x84, 0x19, 0x88,
+	0x07, 0x97, 0x88, 0x13, 0x0e, 0x75, 0x99, 0x1f, 0xc3, 0x29, 0xeb, 0xb8, 0x54, 0x56, 0xb0, 0xf7,
+	0x3a, 0xb8, 0x3f, 0x07, 0x73, 0xd8, 0x47, 0x2f, 0x56, 0xc9, 0x29, 0x87, 0xb3, 0x23, 0xf8, 0xb0,
+	0x04, 0x6d, 0xc2, 0x83, 0xe0, 0xae, 0xdb, 0x31, 0x17, 0xac, 0x81, 0x1d, 0x2f, 0xf6, 0x0e, 0x6e,
+	0xcf, 0xb6, 0x7e, 0x53, 0xff, 0xe8, 0x8e, 0x63, 0xde, 0xb2, 0x06, 0x1e, 0x7d, 0xf3, 0x83, 0xdd,
+	0x9b, 0x9c, 0xde, 0xd9, 0x23, 0x84, 0x7f, 0xbc, 0x60, 0x7b, 0x22, 0x2c, 0x7c, 0x89, 0x36, 0x9d,
+	0x10, 0xad, 0xdf, 0x33, 0x7a, 0x3a, 0xe9, 0x30, 0x9e, 0x18, 0xdd, 0x34, 0xbf, 0xf7, 0xe6, 0x17,
+	0xbd, 0xfa, 0xc2, 0xcf, 0x3f, 0xff, 0x7e, 0xf5, 0x9f, 0x84, 0x8f, 0xfb, 0x7a, 0x3e, 0x5e, 0x61,
+	0x9e, 0x17, 0x4b, 0x6d, 0x64, 0x03, 0x4a, 0xe3, 0x87, 0xb6, 0xaf, 0x6b, 0x66, 0x9f, 0xa2, 0xdd,
+	0x73, 0xba, 0xb3, 0x4a, 0x1f, 0x50, 0xcb, 0x35, 0x2a, 0x64, 0x33, 0xfb, 0xe2, 0x07, 0xfb, 0x85,
+	0x6c, 0x36, 0xbe, 0x75, 0x16, 0xaf, 0xb9, 0xe3, 0xa2, 0x2f, 0x6e, 0xe1, 0xbd, 0x3f, 0x1c, 0x5c,
+	0x2a, 0x59, 0x33, 0x51, 0x21, 0xa9, 0x2a, 0x5c, 0x81, 0xb8, 0xa8, 0x15, 0xaf, 0x72, 0xa7, 0x7f,
+	0xed, 0x67, 0x0e, 0x7c, 0xf7, 0xb7, 0xe6, 0x94, 0xfe, 0xf0, 0xe3, 0xb9, 0x35, 0xa4, 0xa5, 0x46,
+	0x16, 0xf6, 0x28, 0x4d, 0xd0, 0x10, 0xac, 0xcf, 0x9d, 0x24, 0xa3, 0xa5, 0xce, 0x46, 0x49, 0x96,
+	0x26, 0x99, 0x93, 0xfc, 0xf3, 0xf7, 0xed, 0x77, 0x42, 0x68, 0xa9, 0x09, 0x19, 0x45, 0x84, 0xa4,
+	0x09, 0x21, 0x4e, 0x76, 0x7c, 0xeb, 0x62, 0xcf, 0xe4, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60,
+	0x24, 0x6c, 0x45, 0x81, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// HotelPerformanceViewServiceClient is the client API for HotelPerformanceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type HotelPerformanceViewServiceClient interface {
+	// Returns the requested Hotel Performance View in full detail.
+	GetHotelPerformanceView(ctx context.Context, in *GetHotelPerformanceViewRequest, opts ...grpc.CallOption) (*resources.HotelPerformanceView, error)
+}
+
+type hotelPerformanceViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewHotelPerformanceViewServiceClient(cc grpc.ClientConnInterface) HotelPerformanceViewServiceClient {
+	return &hotelPerformanceViewServiceClient{cc}
+}
+
+func (c *hotelPerformanceViewServiceClient) GetHotelPerformanceView(ctx context.Context, in *GetHotelPerformanceViewRequest, opts ...grpc.CallOption) (*resources.HotelPerformanceView, error) {
+	out := new(resources.HotelPerformanceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.HotelPerformanceViewService/GetHotelPerformanceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HotelPerformanceViewServiceServer is the server API for HotelPerformanceViewService service.
+type HotelPerformanceViewServiceServer interface {
+	// Returns the requested Hotel Performance View in full detail.
+	GetHotelPerformanceView(context.Context, *GetHotelPerformanceViewRequest) (*resources.HotelPerformanceView, error)
+}
+
+// UnimplementedHotelPerformanceViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedHotelPerformanceViewServiceServer struct {
+}
+
+func (*UnimplementedHotelPerformanceViewServiceServer) GetHotelPerformanceView(ctx context.Context, req *GetHotelPerformanceViewRequest) (*resources.HotelPerformanceView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetHotelPerformanceView not implemented")
+}
+
+func RegisterHotelPerformanceViewServiceServer(s *grpc.Server, srv HotelPerformanceViewServiceServer) {
+	s.RegisterService(&_HotelPerformanceViewService_serviceDesc, srv)
+}
+
+func _HotelPerformanceViewService_GetHotelPerformanceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetHotelPerformanceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HotelPerformanceViewServiceServer).GetHotelPerformanceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.HotelPerformanceViewService/GetHotelPerformanceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HotelPerformanceViewServiceServer).GetHotelPerformanceView(ctx, req.(*GetHotelPerformanceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _HotelPerformanceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.HotelPerformanceViewService",
+	HandlerType: (*HotelPerformanceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetHotelPerformanceView",
+			Handler:    _HotelPerformanceViewService_GetHotelPerformanceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/hotel_performance_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/invoice_service.pb.go b/googleapis/ads/googleads/v3/services/invoice_service.pb.go
new file mode 100644
index 0000000..8640e1b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/invoice_service.pb.go
@@ -0,0 +1,271 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/invoice_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for fetching the invoices of a given billing setup that were
+// issued during a given month.
+type ListInvoicesRequest struct {
+	// Required. The ID of the customer to fetch invoices for.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The billing setup resource name of the requested invoices.
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	BillingSetup string `protobuf:"bytes,2,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// Required. The issue year to retrieve invoices, in yyyy format. Only
+	// invoices issued in 2019 or later can be retrieved.
+	IssueYear string `protobuf:"bytes,3,opt,name=issue_year,json=issueYear,proto3" json:"issue_year,omitempty"`
+	// Required. The issue month to retrieve invoices.
+	IssueMonth           enums.MonthOfYearEnum_MonthOfYear `protobuf:"varint,4,opt,name=issue_month,json=issueMonth,proto3,enum=google.ads.googleads.v3.enums.MonthOfYearEnum_MonthOfYear" json:"issue_month,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *ListInvoicesRequest) Reset()         { *m = ListInvoicesRequest{} }
+func (m *ListInvoicesRequest) String() string { return proto.CompactTextString(m) }
+func (*ListInvoicesRequest) ProtoMessage()    {}
+func (*ListInvoicesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1dd40029722f2c33, []int{0}
+}
+
+func (m *ListInvoicesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListInvoicesRequest.Unmarshal(m, b)
+}
+func (m *ListInvoicesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListInvoicesRequest.Marshal(b, m, deterministic)
+}
+func (m *ListInvoicesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListInvoicesRequest.Merge(m, src)
+}
+func (m *ListInvoicesRequest) XXX_Size() int {
+	return xxx_messageInfo_ListInvoicesRequest.Size(m)
+}
+func (m *ListInvoicesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListInvoicesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListInvoicesRequest proto.InternalMessageInfo
+
+func (m *ListInvoicesRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *ListInvoicesRequest) GetBillingSetup() string {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return ""
+}
+
+func (m *ListInvoicesRequest) GetIssueYear() string {
+	if m != nil {
+		return m.IssueYear
+	}
+	return ""
+}
+
+func (m *ListInvoicesRequest) GetIssueMonth() enums.MonthOfYearEnum_MonthOfYear {
+	if m != nil {
+		return m.IssueMonth
+	}
+	return enums.MonthOfYearEnum_UNSPECIFIED
+}
+
+// Response message for [InvoiceService.ListInvoices][google.ads.googleads.v3.services.InvoiceService.ListInvoices].
+type ListInvoicesResponse struct {
+	// The list of invoices that match the billing setup and time period.
+	Invoices             []*resources.Invoice `protobuf:"bytes,1,rep,name=invoices,proto3" json:"invoices,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ListInvoicesResponse) Reset()         { *m = ListInvoicesResponse{} }
+func (m *ListInvoicesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListInvoicesResponse) ProtoMessage()    {}
+func (*ListInvoicesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1dd40029722f2c33, []int{1}
+}
+
+func (m *ListInvoicesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListInvoicesResponse.Unmarshal(m, b)
+}
+func (m *ListInvoicesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListInvoicesResponse.Marshal(b, m, deterministic)
+}
+func (m *ListInvoicesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListInvoicesResponse.Merge(m, src)
+}
+func (m *ListInvoicesResponse) XXX_Size() int {
+	return xxx_messageInfo_ListInvoicesResponse.Size(m)
+}
+func (m *ListInvoicesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListInvoicesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListInvoicesResponse proto.InternalMessageInfo
+
+func (m *ListInvoicesResponse) GetInvoices() []*resources.Invoice {
+	if m != nil {
+		return m.Invoices
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ListInvoicesRequest)(nil), "google.ads.googleads.v3.services.ListInvoicesRequest")
+	proto.RegisterType((*ListInvoicesResponse)(nil), "google.ads.googleads.v3.services.ListInvoicesResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/invoice_service.proto", fileDescriptor_1dd40029722f2c33)
+}
+
+var fileDescriptor_1dd40029722f2c33 = []byte{
+	// 542 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x4f, 0x8b, 0xd3, 0x40,
+	0x14, 0x27, 0xa9, 0x88, 0x3b, 0x5d, 0xf7, 0x90, 0x15, 0x0c, 0x55, 0xb0, 0x94, 0x22, 0x65, 0x29,
+	0x33, 0xda, 0xe0, 0x1e, 0x22, 0x1e, 0x52, 0xd0, 0x75, 0x41, 0x71, 0xe9, 0x42, 0x41, 0x29, 0xc6,
+	0x34, 0x99, 0x66, 0x07, 0x92, 0x99, 0x9a, 0x97, 0x14, 0x44, 0xbc, 0xf8, 0x09, 0x04, 0xbf, 0x81,
+	0x47, 0x3f, 0xca, 0x5e, 0xbd, 0x79, 0xda, 0x83, 0x27, 0xfd, 0x06, 0x9e, 0x24, 0x99, 0xc9, 0x9f,
+	0x82, 0x61, 0xd9, 0xdb, 0xcb, 0x7b, 0xbf, 0xdf, 0xef, 0xbd, 0xf9, 0xbd, 0x17, 0x74, 0x18, 0x0a,
+	0x11, 0x46, 0x94, 0x78, 0x01, 0x10, 0x19, 0xe6, 0xd1, 0xc6, 0x22, 0x40, 0x93, 0x0d, 0xf3, 0x29,
+	0x10, 0xc6, 0x37, 0x82, 0xf9, 0xd4, 0x55, 0x09, 0xbc, 0x4e, 0x44, 0x2a, 0x8c, 0xbe, 0x04, 0x63,
+	0x2f, 0x00, 0x5c, 0xf1, 0xf0, 0xc6, 0xc2, 0x25, 0xaf, 0xf7, 0xb0, 0x4d, 0x99, 0xf2, 0x2c, 0x06,
+	0x12, 0x0b, 0x9e, 0x9e, 0xb9, 0x62, 0xe5, 0x7e, 0xa0, 0x5e, 0x22, 0x45, 0x7b, 0xa4, 0x8d, 0x92,
+	0x50, 0x10, 0x59, 0xd2, 0x98, 0x46, 0x11, 0xee, 0x96, 0x84, 0x35, 0x23, 0x1e, 0xe7, 0x22, 0xf5,
+	0x52, 0x26, 0x38, 0xa8, 0xea, 0xed, 0x46, 0xd5, 0x8f, 0x18, 0xe5, 0xa9, 0x2a, 0xdc, 0x6b, 0x14,
+	0x56, 0x8c, 0x46, 0x81, 0xbb, 0xa4, 0x67, 0xde, 0x86, 0x09, 0x35, 0xc8, 0xe0, 0x8f, 0x86, 0xf6,
+	0x5f, 0x30, 0x48, 0x8f, 0x65, 0x37, 0x98, 0xd1, 0xf7, 0x19, 0x85, 0xd4, 0x18, 0xa2, 0xae, 0x9f,
+	0x41, 0x2a, 0x62, 0x9a, 0xb8, 0x2c, 0x30, 0xb5, 0xbe, 0x36, 0xda, 0x99, 0x76, 0x2e, 0x1c, 0x7d,
+	0x86, 0xca, 0xfc, 0x71, 0x60, 0x8c, 0xd0, 0xcd, 0x25, 0x8b, 0x22, 0xc6, 0x43, 0x17, 0x68, 0x9a,
+	0xad, 0x4d, 0xbd, 0xc6, 0xed, 0xaa, 0xca, 0x69, 0x5e, 0x30, 0x06, 0x08, 0x31, 0x80, 0x8c, 0x16,
+	0x26, 0x98, 0x9d, 0x1a, 0xb6, 0x53, 0xa4, 0x5f, 0x53, 0x2f, 0x31, 0xde, 0xa1, 0xae, 0xc4, 0x14,
+	0x8e, 0x99, 0xd7, 0xfa, 0xda, 0x68, 0x6f, 0x62, 0xe3, 0x36, 0xff, 0x0b, 0x77, 0xf1, 0xcb, 0x1c,
+	0xfb, 0x6a, 0x95, 0x0b, 0x3c, 0xe5, 0x59, 0xdc, 0xfc, 0x56, 0xf3, 0x16, 0x9a, 0x45, 0x7a, 0xf0,
+	0x16, 0xdd, 0xda, 0x7e, 0x2c, 0xac, 0x05, 0x07, 0x6a, 0x3c, 0x43, 0x37, 0x94, 0xdd, 0x60, 0x6a,
+	0xfd, 0xce, 0xa8, 0x3b, 0x39, 0x68, 0x6d, 0x5b, 0x6d, 0x08, 0x2b, 0x99, 0x59, 0xc5, 0x9d, 0x7c,
+	0xd1, 0xd1, 0x9e, 0xca, 0x9e, 0xca, 0xeb, 0x30, 0x2e, 0x34, 0xb4, 0xdb, 0xec, 0x69, 0x3c, 0xc2,
+	0x97, 0x1d, 0x14, 0xfe, 0xcf, 0x42, 0x7a, 0x87, 0x57, 0xa5, 0xc9, 0xa7, 0x0d, 0xbc, 0x9f, 0xce,
+	0x83, 0xc6, 0x26, 0xc7, 0x5b, 0xfb, 0x1a, 0xd7, 0x3b, 0x19, 0x37, 0xac, 0xff, 0xfc, 0xe3, 0xd7,
+	0x57, 0x7d, 0x64, 0xdc, 0xcf, 0x0f, 0xb2, 0xe4, 0x02, 0xf9, 0xd8, 0x90, 0x79, 0x72, 0xf0, 0xa9,
+	0x3c, 0x50, 0xe8, 0xdd, 0x39, 0x77, 0xcc, 0x7a, 0x22, 0x15, 0xad, 0x19, 0x60, 0x5f, 0xc4, 0xd3,
+	0xbf, 0x1a, 0x1a, 0xfa, 0x22, 0xbe, 0x74, 0xfa, 0xe9, 0xfe, 0xb6, 0x71, 0x27, 0xf9, 0x79, 0x9e,
+	0x68, 0x6f, 0x9e, 0x2b, 0x62, 0x28, 0x22, 0x8f, 0x87, 0x58, 0x24, 0x21, 0x09, 0x29, 0x2f, 0x8e,
+	0x97, 0xd4, 0xad, 0xda, 0xff, 0xea, 0xc7, 0x65, 0xf0, 0x4d, 0xef, 0x1c, 0x39, 0xce, 0x77, 0xbd,
+	0x7f, 0x24, 0x05, 0x9d, 0x00, 0xb0, 0x0c, 0xf3, 0x68, 0x6e, 0x61, 0xd5, 0x18, 0xce, 0x4b, 0xc8,
+	0xc2, 0x09, 0x60, 0x51, 0x41, 0x16, 0x73, 0x6b, 0x51, 0x42, 0x7e, 0xeb, 0x43, 0x99, 0xb7, 0x6d,
+	0x27, 0x00, 0xdb, 0xae, 0x40, 0xb6, 0x3d, 0xb7, 0x6c, 0xbb, 0x84, 0x2d, 0xaf, 0x17, 0x73, 0x5a,
+	0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x08, 0xd8, 0xe2, 0x58, 0x7c, 0x04, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// InvoiceServiceClient is the client API for InvoiceService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type InvoiceServiceClient interface {
+	// Returns all invoices associated with a billing setup, for a given month.
+	ListInvoices(ctx context.Context, in *ListInvoicesRequest, opts ...grpc.CallOption) (*ListInvoicesResponse, error)
+}
+
+type invoiceServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewInvoiceServiceClient(cc grpc.ClientConnInterface) InvoiceServiceClient {
+	return &invoiceServiceClient{cc}
+}
+
+func (c *invoiceServiceClient) ListInvoices(ctx context.Context, in *ListInvoicesRequest, opts ...grpc.CallOption) (*ListInvoicesResponse, error) {
+	out := new(ListInvoicesResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.InvoiceService/ListInvoices", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// InvoiceServiceServer is the server API for InvoiceService service.
+type InvoiceServiceServer interface {
+	// Returns all invoices associated with a billing setup, for a given month.
+	ListInvoices(context.Context, *ListInvoicesRequest) (*ListInvoicesResponse, error)
+}
+
+// UnimplementedInvoiceServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedInvoiceServiceServer struct {
+}
+
+func (*UnimplementedInvoiceServiceServer) ListInvoices(ctx context.Context, req *ListInvoicesRequest) (*ListInvoicesResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListInvoices not implemented")
+}
+
+func RegisterInvoiceServiceServer(s *grpc.Server, srv InvoiceServiceServer) {
+	s.RegisterService(&_InvoiceService_serviceDesc, srv)
+}
+
+func _InvoiceService_ListInvoices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListInvoicesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(InvoiceServiceServer).ListInvoices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.InvoiceService/ListInvoices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(InvoiceServiceServer).ListInvoices(ctx, req.(*ListInvoicesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _InvoiceService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.InvoiceService",
+	HandlerType: (*InvoiceServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListInvoices",
+			Handler:    _InvoiceService_ListInvoices_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/invoice_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_ad_group_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_ad_group_service.pb.go
new file mode 100644
index 0000000..5fd8b1a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_ad_group_service.pb.go
@@ -0,0 +1,532 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_ad_group_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordPlanAdGroupService.GetKeywordPlanAdGroup][google.ads.googleads.v3.services.KeywordPlanAdGroupService.GetKeywordPlanAdGroup].
+type GetKeywordPlanAdGroupRequest struct {
+	// Required. The resource name of the Keyword Plan ad group to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanAdGroupRequest) Reset()         { *m = GetKeywordPlanAdGroupRequest{} }
+func (m *GetKeywordPlanAdGroupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanAdGroupRequest) ProtoMessage()    {}
+func (*GetKeywordPlanAdGroupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276f25299ec71286, []int{0}
+}
+
+func (m *GetKeywordPlanAdGroupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanAdGroupRequest.Merge(m, src)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Size(m)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanAdGroupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanAdGroupRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanAdGroupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanAdGroupService.MutateKeywordPlanAdGroups][google.ads.googleads.v3.services.KeywordPlanAdGroupService.MutateKeywordPlanAdGroups].
+type MutateKeywordPlanAdGroupsRequest struct {
+	// Required. The ID of the customer whose Keyword Plan ad groups are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual Keyword Plan ad groups.
+	Operations []*KeywordPlanAdGroupOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) Reset()         { *m = MutateKeywordPlanAdGroupsRequest{} }
+func (m *MutateKeywordPlanAdGroupsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276f25299ec71286, []int{1}
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Merge(m, src)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetOperations() []*KeywordPlanAdGroupOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a Keyword Plan ad group.
+type KeywordPlanAdGroupOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanAdGroupOperation_Create
+	//	*KeywordPlanAdGroupOperation_Update
+	//	*KeywordPlanAdGroupOperation_Remove
+	Operation            isKeywordPlanAdGroupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupOperation) Reset()         { *m = KeywordPlanAdGroupOperation{} }
+func (m *KeywordPlanAdGroupOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupOperation) ProtoMessage()    {}
+func (*KeywordPlanAdGroupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276f25299ec71286, []int{2}
+}
+
+func (m *KeywordPlanAdGroupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupOperation.Merge(m, src)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Size(m)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroupOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanAdGroupOperation_Operation interface {
+	isKeywordPlanAdGroupOperation_Operation()
+}
+
+type KeywordPlanAdGroupOperation_Create struct {
+	Create *resources.KeywordPlanAdGroup `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanAdGroupOperation_Update struct {
+	Update *resources.KeywordPlanAdGroup `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanAdGroupOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanAdGroupOperation_Create) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (*KeywordPlanAdGroupOperation_Update) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (*KeywordPlanAdGroupOperation_Remove) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (m *KeywordPlanAdGroupOperation) GetOperation() isKeywordPlanAdGroupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetCreate() *resources.KeywordPlanAdGroup {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetUpdate() *resources.KeywordPlanAdGroup {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanAdGroupOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanAdGroupOperation_Create)(nil),
+		(*KeywordPlanAdGroupOperation_Update)(nil),
+		(*KeywordPlanAdGroupOperation_Remove)(nil),
+	}
+}
+
+// Response message for a Keyword Plan ad group mutate.
+type MutateKeywordPlanAdGroupsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanAdGroupResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupsResponse) Reset()         { *m = MutateKeywordPlanAdGroupsResponse{} }
+func (m *MutateKeywordPlanAdGroupsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276f25299ec71286, []int{3}
+}
+
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Merge(m, src)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanAdGroupsResponse) GetResults() []*MutateKeywordPlanAdGroupResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan ad group mutate.
+type MutateKeywordPlanAdGroupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupResult) Reset()         { *m = MutateKeywordPlanAdGroupResult{} }
+func (m *MutateKeywordPlanAdGroupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupResult) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_276f25299ec71286, []int{4}
+}
+
+func (m *MutateKeywordPlanAdGroupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupResult.Merge(m, src)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanAdGroupRequest)(nil), "google.ads.googleads.v3.services.GetKeywordPlanAdGroupRequest")
+	proto.RegisterType((*MutateKeywordPlanAdGroupsRequest)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanAdGroupsRequest")
+	proto.RegisterType((*KeywordPlanAdGroupOperation)(nil), "google.ads.googleads.v3.services.KeywordPlanAdGroupOperation")
+	proto.RegisterType((*MutateKeywordPlanAdGroupsResponse)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanAdGroupsResponse")
+	proto.RegisterType((*MutateKeywordPlanAdGroupResult)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanAdGroupResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_ad_group_service.proto", fileDescriptor_276f25299ec71286)
+}
+
+var fileDescriptor_276f25299ec71286 = []byte{
+	// 780 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6b, 0xdb, 0x4a,
+	0x10, 0xc7, 0x9f, 0xe4, 0x90, 0xf7, 0xb2, 0x4e, 0xde, 0x83, 0x7d, 0xa4, 0x75, 0x9c, 0x90, 0xba,
+	0x6a, 0xa0, 0xc6, 0x14, 0x09, 0x6c, 0x42, 0x8b, 0x82, 0x4b, 0xe5, 0x36, 0x71, 0x4a, 0x49, 0x13,
+	0x14, 0xc8, 0x21, 0x18, 0xc4, 0x5a, 0xda, 0xb8, 0x22, 0x92, 0x56, 0xdd, 0x95, 0x5c, 0x42, 0xc8,
+	0x25, 0xd0, 0xbf, 0xa0, 0xe7, 0x5e, 0xda, 0x5b, 0xff, 0x91, 0x42, 0xae, 0xbd, 0x05, 0x0a, 0x3d,
+	0xf4, 0xd4, 0x3f, 0xa1, 0xa7, 0x22, 0xad, 0xd6, 0x3f, 0x12, 0xff, 0x80, 0xe4, 0x36, 0xde, 0xf9,
+	0xea, 0x33, 0x33, 0x3b, 0xb3, 0x63, 0xf0, 0xa2, 0x43, 0x48, 0xc7, 0xc3, 0x1a, 0x72, 0x98, 0xc6,
+	0xcd, 0xc4, 0xea, 0xd6, 0x34, 0x86, 0x69, 0xd7, 0xb5, 0x31, 0xd3, 0x8e, 0xf1, 0xc9, 0x3b, 0x42,
+	0x1d, 0x2b, 0xf4, 0x50, 0x60, 0x21, 0xc7, 0xea, 0x50, 0x12, 0x87, 0x56, 0xe6, 0x56, 0x43, 0x4a,
+	0x22, 0x02, 0x4b, 0xfc, 0x53, 0x15, 0x39, 0x4c, 0xed, 0x51, 0xd4, 0x6e, 0x4d, 0x15, 0x94, 0x62,
+	0x7d, 0x5c, 0x1c, 0x8a, 0x19, 0x89, 0xe9, 0xd8, 0x40, 0x3c, 0x40, 0x71, 0x45, 0x7c, 0x1e, 0xba,
+	0x1a, 0x0a, 0x02, 0x12, 0xa1, 0xc8, 0x25, 0x01, 0xcb, 0xbc, 0x77, 0x07, 0xbc, 0xb6, 0xe7, 0xe2,
+	0x20, 0xca, 0x1c, 0xf7, 0x06, 0x1c, 0x47, 0x2e, 0xf6, 0x1c, 0xab, 0x8d, 0xdf, 0xa0, 0xae, 0x4b,
+	0x68, 0x26, 0xc8, 0x12, 0xd7, 0xd2, 0x5f, 0xed, 0xf8, 0x28, 0x53, 0xf9, 0x88, 0x1d, 0x5f, 0x61,
+	0xd3, 0xd0, 0xd6, 0x58, 0x84, 0xa2, 0x38, 0x0b, 0xaa, 0x6c, 0x83, 0x95, 0x26, 0x8e, 0x5e, 0xf1,
+	0xa4, 0xf7, 0x3c, 0x14, 0x18, 0x4e, 0x33, 0xc9, 0xd8, 0xc4, 0x6f, 0x63, 0xcc, 0x22, 0x58, 0x06,
+	0x0b, 0xa2, 0x36, 0x2b, 0x40, 0x3e, 0x2e, 0x48, 0x25, 0xa9, 0x3c, 0xd7, 0xc8, 0xfd, 0x30, 0x64,
+	0x73, 0x5e, 0x78, 0x5e, 0x23, 0x1f, 0x2b, 0xbf, 0x25, 0x50, 0xda, 0x89, 0x23, 0x14, 0xe1, 0xeb,
+	0x34, 0x26, 0x70, 0x6b, 0x20, 0x6f, 0xc7, 0x2c, 0x22, 0x3e, 0xa6, 0x96, 0xeb, 0x0c, 0xc2, 0x80,
+	0x38, 0x7f, 0xe9, 0xc0, 0x36, 0x00, 0x24, 0xc4, 0x94, 0xdf, 0x4e, 0x41, 0x2e, 0xe5, 0xca, 0xf9,
+	0x6a, 0x5d, 0x9d, 0xd6, 0x1d, 0xf5, 0x7a, 0xdc, 0x5d, 0x41, 0xc9, 0x62, 0xf4, 0xa9, 0xf0, 0x21,
+	0xf8, 0x2f, 0x44, 0x34, 0x72, 0x91, 0x67, 0x1d, 0x21, 0xd7, 0x8b, 0x29, 0x2e, 0xe4, 0x4a, 0x52,
+	0xf9, 0x1f, 0xf3, 0xdf, 0xec, 0x78, 0x8b, 0x9f, 0xc2, 0x07, 0x60, 0xa1, 0x8b, 0x3c, 0xd7, 0x41,
+	0x11, 0xb6, 0x48, 0xe0, 0x9d, 0x14, 0x66, 0x52, 0xd9, 0xbc, 0x38, 0xdc, 0x0d, 0xbc, 0x13, 0xe5,
+	0xb3, 0x0c, 0x96, 0x27, 0x84, 0x87, 0x1b, 0x20, 0x1f, 0x87, 0x29, 0x22, 0x69, 0x4a, 0x8a, 0xc8,
+	0x57, 0x8b, 0xa2, 0x24, 0xd1, 0x37, 0x75, 0x2b, 0xe9, 0xdb, 0x0e, 0x62, 0xc7, 0x26, 0xe0, 0xf2,
+	0xc4, 0x86, 0xbb, 0x60, 0xd6, 0xa6, 0x18, 0x45, 0xfc, 0xf2, 0xf3, 0xd5, 0xf5, 0xb1, 0x57, 0xd1,
+	0x1b, 0xc3, 0x11, 0x77, 0xb1, 0xfd, 0x97, 0x99, 0x61, 0x12, 0x20, 0xc7, 0x17, 0xe4, 0x5b, 0x02,
+	0x39, 0x06, 0x16, 0xc0, 0x2c, 0xc5, 0x3e, 0xe9, 0xf2, 0x3b, 0x9c, 0x4b, 0x3c, 0xfc, 0x77, 0x23,
+	0x0f, 0xe6, 0x7a, 0x97, 0xae, 0x7c, 0x95, 0xc0, 0xfd, 0x09, 0x23, 0xc2, 0x42, 0x12, 0x30, 0x0c,
+	0xb7, 0xc0, 0xe2, 0x95, 0xce, 0x58, 0x98, 0x52, 0x42, 0x53, 0x76, 0xbe, 0x0a, 0x45, 0xb2, 0x34,
+	0xb4, 0xd5, 0xfd, 0x74, 0x96, 0xcd, 0xff, 0x87, 0x7b, 0xb6, 0x99, 0xc8, 0xe1, 0x21, 0xf8, 0x9b,
+	0x62, 0x16, 0x7b, 0x91, 0x18, 0xa1, 0x67, 0xd3, 0x47, 0x68, 0x5c, 0x76, 0x66, 0x0a, 0x32, 0x05,
+	0x50, 0xd9, 0x04, 0xab, 0x93, 0xa5, 0xc9, 0xd8, 0x8c, 0x78, 0x38, 0xc3, 0x6f, 0xa6, 0xfa, 0x71,
+	0x06, 0x2c, 0x5d, 0x27, 0xec, 0xf3, 0x6c, 0xe0, 0x77, 0x09, 0x2c, 0x8e, 0x7c, 0x9c, 0xf0, 0xe9,
+	0xf4, 0x4a, 0x26, 0xbd, 0xea, 0xe2, 0xcd, 0x1a, 0xae, 0xec, 0x5c, 0x1a, 0xc3, 0x45, 0x9d, 0x7f,
+	0xfb, 0xf9, 0x41, 0x7e, 0x0c, 0xd7, 0x93, 0x15, 0x78, 0x3a, 0xe4, 0xa9, 0x8b, 0xe7, 0xcc, 0xb4,
+	0x8a, 0xd8, 0x89, 0x83, 0xdd, 0xd6, 0x2a, 0x67, 0xf0, 0x5c, 0x06, 0x4b, 0x63, 0xc7, 0x01, 0x36,
+	0x6e, 0xde, 0x2d, 0xb1, 0x6e, 0x8a, 0xcf, 0x6f, 0xc5, 0xe0, 0xf3, 0xa8, 0xb4, 0x2e, 0x8d, 0x3b,
+	0x03, 0x4b, 0xeb, 0x51, 0x7f, 0x89, 0xa4, 0xe5, 0xd7, 0x95, 0x27, 0x49, 0xf9, 0xfd, 0x7a, 0x4f,
+	0x07, 0xc4, 0xf5, 0xca, 0xd9, 0xa8, 0xea, 0x75, 0x3f, 0x8d, 0xaa, 0x4b, 0x95, 0xe2, 0xf2, 0x85,
+	0x51, 0xe8, 0x67, 0x96, 0x59, 0xa1, 0xcb, 0x54, 0x9b, 0xf8, 0x8d, 0xf7, 0x32, 0x58, 0xb3, 0x89,
+	0x3f, 0xb5, 0x8a, 0xc6, 0xea, 0xd8, 0x29, 0xda, 0x4b, 0x76, 0xcb, 0x9e, 0x74, 0xb8, 0x9d, 0x31,
+	0x3a, 0xc4, 0x43, 0x41, 0x47, 0x25, 0xb4, 0xa3, 0x75, 0x70, 0x90, 0x6e, 0x1e, 0xad, 0x1f, 0x75,
+	0xfc, 0x3f, 0xe8, 0x86, 0x30, 0x3e, 0xc9, 0xb9, 0xa6, 0x61, 0x7c, 0x91, 0x4b, 0x4d, 0x0e, 0x34,
+	0x1c, 0xa6, 0x72, 0x33, 0xb1, 0x0e, 0x6a, 0x6a, 0x16, 0x98, 0x5d, 0x08, 0x49, 0xcb, 0x70, 0x58,
+	0xab, 0x27, 0x69, 0x1d, 0xd4, 0x5a, 0x42, 0xf2, 0x4b, 0x5e, 0xe3, 0xe7, 0xba, 0x6e, 0x38, 0x4c,
+	0xd7, 0x7b, 0x22, 0x5d, 0x3f, 0xa8, 0xe9, 0xba, 0x90, 0xb5, 0x67, 0xd3, 0x3c, 0x6b, 0x7f, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0x5b, 0x3f, 0x8a, 0xca, 0xe8, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanAdGroupServiceClient is the client API for KeywordPlanAdGroupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanAdGroupServiceClient interface {
+	// Returns the requested Keyword Plan ad group in full detail.
+	GetKeywordPlanAdGroup(ctx context.Context, in *GetKeywordPlanAdGroupRequest, opts ...grpc.CallOption) (*resources.KeywordPlanAdGroup, error)
+	// Creates, updates, or removes Keyword Plan ad groups. Operation statuses are
+	// returned.
+	MutateKeywordPlanAdGroups(ctx context.Context, in *MutateKeywordPlanAdGroupsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanAdGroupsResponse, error)
+}
+
+type keywordPlanAdGroupServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanAdGroupServiceClient(cc grpc.ClientConnInterface) KeywordPlanAdGroupServiceClient {
+	return &keywordPlanAdGroupServiceClient{cc}
+}
+
+func (c *keywordPlanAdGroupServiceClient) GetKeywordPlanAdGroup(ctx context.Context, in *GetKeywordPlanAdGroupRequest, opts ...grpc.CallOption) (*resources.KeywordPlanAdGroup, error) {
+	out := new(resources.KeywordPlanAdGroup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanAdGroupService/GetKeywordPlanAdGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanAdGroupServiceClient) MutateKeywordPlanAdGroups(ctx context.Context, in *MutateKeywordPlanAdGroupsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanAdGroupsResponse, error) {
+	out := new(MutateKeywordPlanAdGroupsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanAdGroupService/MutateKeywordPlanAdGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanAdGroupServiceServer is the server API for KeywordPlanAdGroupService service.
+type KeywordPlanAdGroupServiceServer interface {
+	// Returns the requested Keyword Plan ad group in full detail.
+	GetKeywordPlanAdGroup(context.Context, *GetKeywordPlanAdGroupRequest) (*resources.KeywordPlanAdGroup, error)
+	// Creates, updates, or removes Keyword Plan ad groups. Operation statuses are
+	// returned.
+	MutateKeywordPlanAdGroups(context.Context, *MutateKeywordPlanAdGroupsRequest) (*MutateKeywordPlanAdGroupsResponse, error)
+}
+
+// UnimplementedKeywordPlanAdGroupServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanAdGroupServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanAdGroupServiceServer) GetKeywordPlanAdGroup(ctx context.Context, req *GetKeywordPlanAdGroupRequest) (*resources.KeywordPlanAdGroup, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetKeywordPlanAdGroup not implemented")
+}
+func (*UnimplementedKeywordPlanAdGroupServiceServer) MutateKeywordPlanAdGroups(ctx context.Context, req *MutateKeywordPlanAdGroupsRequest) (*MutateKeywordPlanAdGroupsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateKeywordPlanAdGroups not implemented")
+}
+
+func RegisterKeywordPlanAdGroupServiceServer(s *grpc.Server, srv KeywordPlanAdGroupServiceServer) {
+	s.RegisterService(&_KeywordPlanAdGroupService_serviceDesc, srv)
+}
+
+func _KeywordPlanAdGroupService_GetKeywordPlanAdGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanAdGroupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanAdGroupServiceServer).GetKeywordPlanAdGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanAdGroupService/GetKeywordPlanAdGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanAdGroupServiceServer).GetKeywordPlanAdGroup(ctx, req.(*GetKeywordPlanAdGroupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanAdGroupService_MutateKeywordPlanAdGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanAdGroupsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanAdGroupServiceServer).MutateKeywordPlanAdGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanAdGroupService/MutateKeywordPlanAdGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanAdGroupServiceServer).MutateKeywordPlanAdGroups(ctx, req.(*MutateKeywordPlanAdGroupsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanAdGroupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanAdGroupService",
+	HandlerType: (*KeywordPlanAdGroupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanAdGroup",
+			Handler:    _KeywordPlanAdGroupService_GetKeywordPlanAdGroup_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanAdGroups",
+			Handler:    _KeywordPlanAdGroupService_MutateKeywordPlanAdGroups_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_ad_group_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_campaign_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_campaign_service.pb.go
new file mode 100644
index 0000000..f6bb507
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_campaign_service.pb.go
@@ -0,0 +1,533 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_campaign_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordPlanCampaignService.GetKeywordPlanCampaign][google.ads.googleads.v3.services.KeywordPlanCampaignService.GetKeywordPlanCampaign].
+type GetKeywordPlanCampaignRequest struct {
+	// Required. The resource name of the Keyword Plan campaign to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanCampaignRequest) Reset()         { *m = GetKeywordPlanCampaignRequest{} }
+func (m *GetKeywordPlanCampaignRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanCampaignRequest) ProtoMessage()    {}
+func (*GetKeywordPlanCampaignRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f01e9912da6d3c86, []int{0}
+}
+
+func (m *GetKeywordPlanCampaignRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanCampaignRequest.Merge(m, src)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Size(m)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanCampaignRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanCampaignRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanCampaignRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [KeywordPlanCampaignService.MutateKeywordPlanCampaigns][google.ads.googleads.v3.services.KeywordPlanCampaignService.MutateKeywordPlanCampaigns].
+type MutateKeywordPlanCampaignsRequest struct {
+	// Required. The ID of the customer whose Keyword Plan campaigns are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual Keyword Plan campaigns.
+	Operations []*KeywordPlanCampaignOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) Reset()         { *m = MutateKeywordPlanCampaignsRequest{} }
+func (m *MutateKeywordPlanCampaignsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f01e9912da6d3c86, []int{1}
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Merge(m, src)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Size(m)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) GetOperations() []*KeywordPlanCampaignOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a Keyword Plan campaign.
+type KeywordPlanCampaignOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanCampaignOperation_Create
+	//	*KeywordPlanCampaignOperation_Update
+	//	*KeywordPlanCampaignOperation_Remove
+	Operation            isKeywordPlanCampaignOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *KeywordPlanCampaignOperation) Reset()         { *m = KeywordPlanCampaignOperation{} }
+func (m *KeywordPlanCampaignOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignOperation) ProtoMessage()    {}
+func (*KeywordPlanCampaignOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f01e9912da6d3c86, []int{2}
+}
+
+func (m *KeywordPlanCampaignOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanCampaignOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignOperation.Merge(m, src)
+}
+func (m *KeywordPlanCampaignOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Size(m)
+}
+func (m *KeywordPlanCampaignOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaignOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanCampaignOperation_Operation interface {
+	isKeywordPlanCampaignOperation_Operation()
+}
+
+type KeywordPlanCampaignOperation_Create struct {
+	Create *resources.KeywordPlanCampaign `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanCampaignOperation_Update struct {
+	Update *resources.KeywordPlanCampaign `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanCampaignOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanCampaignOperation_Create) isKeywordPlanCampaignOperation_Operation() {}
+
+func (*KeywordPlanCampaignOperation_Update) isKeywordPlanCampaignOperation_Operation() {}
+
+func (*KeywordPlanCampaignOperation_Remove) isKeywordPlanCampaignOperation_Operation() {}
+
+func (m *KeywordPlanCampaignOperation) GetOperation() isKeywordPlanCampaignOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetCreate() *resources.KeywordPlanCampaign {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetUpdate() *resources.KeywordPlanCampaign {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanCampaignOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanCampaignOperation_Create)(nil),
+		(*KeywordPlanCampaignOperation_Update)(nil),
+		(*KeywordPlanCampaignOperation_Remove)(nil),
+	}
+}
+
+// Response message for a Keyword Plan campaign mutate.
+type MutateKeywordPlanCampaignsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanCampaignResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignsResponse) Reset()         { *m = MutateKeywordPlanCampaignsResponse{} }
+func (m *MutateKeywordPlanCampaignsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f01e9912da6d3c86, []int{3}
+}
+
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Merge(m, src)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Size(m)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanCampaignsResponse) GetResults() []*MutateKeywordPlanCampaignResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan campaign mutate.
+type MutateKeywordPlanCampaignResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignResult) Reset()         { *m = MutateKeywordPlanCampaignResult{} }
+func (m *MutateKeywordPlanCampaignResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignResult) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f01e9912da6d3c86, []int{4}
+}
+
+func (m *MutateKeywordPlanCampaignResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignResult.Merge(m, src)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Size(m)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanCampaignRequest)(nil), "google.ads.googleads.v3.services.GetKeywordPlanCampaignRequest")
+	proto.RegisterType((*MutateKeywordPlanCampaignsRequest)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanCampaignsRequest")
+	proto.RegisterType((*KeywordPlanCampaignOperation)(nil), "google.ads.googleads.v3.services.KeywordPlanCampaignOperation")
+	proto.RegisterType((*MutateKeywordPlanCampaignsResponse)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanCampaignsResponse")
+	proto.RegisterType((*MutateKeywordPlanCampaignResult)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanCampaignResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_campaign_service.proto", fileDescriptor_f01e9912da6d3c86)
+}
+
+var fileDescriptor_f01e9912da6d3c86 = []byte{
+	// 777 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4d, 0x4f, 0xdb, 0x4c,
+	0x10, 0xc7, 0x1f, 0x3b, 0x88, 0xe7, 0x61, 0x03, 0x4f, 0xa5, 0xad, 0x4a, 0x23, 0x97, 0x8a, 0xd4,
+	0x45, 0x6a, 0x14, 0x55, 0xb6, 0x94, 0x48, 0xa8, 0x35, 0x82, 0xca, 0x81, 0x06, 0x50, 0x05, 0x44,
+	0x46, 0xe2, 0xd0, 0xa6, 0xb2, 0x16, 0x7b, 0x49, 0x2d, 0x6c, 0xaf, 0xbb, 0x6b, 0xa7, 0x42, 0x88,
+	0x4b, 0x0f, 0x7c, 0x81, 0x7e, 0x83, 0x1e, 0x38, 0xf4, 0x9b, 0x94, 0x6b, 0x6f, 0x9c, 0x5a, 0xa9,
+	0xa7, 0x7e, 0x86, 0x1e, 0x2a, 0x7b, 0xbd, 0x79, 0x41, 0x09, 0x91, 0xca, 0x6d, 0xb2, 0xf3, 0xf7,
+	0x6f, 0x66, 0x67, 0x66, 0x27, 0x60, 0xa3, 0x43, 0x48, 0xc7, 0xc7, 0x3a, 0x72, 0x99, 0xce, 0xcd,
+	0xd4, 0xea, 0xd6, 0x75, 0x86, 0x69, 0xd7, 0x73, 0x30, 0xd3, 0x8f, 0xf1, 0xc9, 0x07, 0x42, 0x5d,
+	0x3b, 0xf2, 0x51, 0x68, 0x3b, 0x28, 0x88, 0x90, 0xd7, 0x09, 0xed, 0xdc, 0xad, 0x45, 0x94, 0xc4,
+	0x04, 0x96, 0xf9, 0xa7, 0x1a, 0x72, 0x99, 0xd6, 0xa3, 0x68, 0xdd, 0xba, 0x26, 0x28, 0xca, 0xea,
+	0xb8, 0x38, 0x14, 0x33, 0x92, 0xd0, 0xb1, 0x81, 0x78, 0x00, 0x65, 0x41, 0x7c, 0x1e, 0x79, 0x3a,
+	0x0a, 0x43, 0x12, 0xa3, 0xd8, 0x23, 0x21, 0xcb, 0xbd, 0xf7, 0x07, 0xbc, 0x8e, 0xef, 0xe1, 0x30,
+	0xce, 0x1d, 0x8b, 0x03, 0x8e, 0x23, 0x0f, 0xfb, 0xae, 0x7d, 0x88, 0xdf, 0xa1, 0xae, 0x47, 0x68,
+	0x2e, 0xc8, 0x13, 0xd7, 0xb3, 0x5f, 0x87, 0xc9, 0x51, 0xae, 0x0a, 0x10, 0x3b, 0xbe, 0xc6, 0xa6,
+	0x91, 0xa3, 0xb3, 0x18, 0xc5, 0x49, 0x1e, 0x54, 0xdd, 0x06, 0x0f, 0x37, 0x71, 0xfc, 0x8a, 0x27,
+	0xdd, 0xf2, 0x51, 0xb8, 0x9e, 0xa7, 0x6c, 0xe1, 0xf7, 0x09, 0x66, 0x31, 0xac, 0x80, 0x39, 0x71,
+	0x39, 0x3b, 0x44, 0x01, 0x2e, 0x49, 0x65, 0xa9, 0x32, 0xd3, 0x28, 0x7c, 0x37, 0x65, 0x6b, 0x56,
+	0x78, 0x76, 0x51, 0x80, 0xd5, 0xdf, 0x12, 0x78, 0xb4, 0x93, 0xc4, 0x28, 0xc6, 0x23, 0x70, 0x4c,
+	0xf0, 0x96, 0x40, 0xd1, 0x49, 0x58, 0x4c, 0x02, 0x4c, 0x6d, 0xcf, 0x1d, 0xa4, 0x01, 0x71, 0xbe,
+	0xed, 0x42, 0x07, 0x00, 0x12, 0x61, 0xca, 0xeb, 0x53, 0x92, 0xcb, 0x85, 0x4a, 0xb1, 0xb6, 0xa6,
+	0x4d, 0xea, 0x8f, 0x36, 0x22, 0xf0, 0x9e, 0xc0, 0xe4, 0x41, 0xfa, 0x58, 0xf8, 0x04, 0xdc, 0x89,
+	0x10, 0x8d, 0x3d, 0xe4, 0xdb, 0x47, 0xc8, 0xf3, 0x13, 0x8a, 0x4b, 0x85, 0xb2, 0x54, 0xf9, 0xcf,
+	0xfa, 0x3f, 0x3f, 0x6e, 0xf2, 0x53, 0xf8, 0x18, 0xcc, 0x75, 0x91, 0xef, 0xb9, 0x28, 0xc6, 0x36,
+	0x09, 0xfd, 0x93, 0xd2, 0x54, 0x26, 0x9b, 0x15, 0x87, 0x7b, 0xa1, 0x7f, 0xa2, 0x5e, 0xc8, 0x60,
+	0xe1, 0xa6, 0xf8, 0x70, 0x05, 0x14, 0x93, 0x28, 0x63, 0xa4, 0x8d, 0xc9, 0x18, 0xc5, 0x9a, 0x22,
+	0x2e, 0x25, 0x7a, 0xa7, 0x35, 0xd3, 0xde, 0xed, 0x20, 0x76, 0x6c, 0x01, 0x2e, 0x4f, 0x6d, 0xd8,
+	0x02, 0xd3, 0x0e, 0xc5, 0x28, 0xe6, 0xf5, 0x2f, 0xd6, 0x96, 0xc7, 0x16, 0xa3, 0x37, 0x8a, 0xa3,
+	0xaa, 0xb1, 0xf5, 0x8f, 0x95, 0x73, 0x52, 0x22, 0xe7, 0x97, 0xe4, 0xdb, 0x12, 0x39, 0x07, 0x96,
+	0xc0, 0x34, 0xc5, 0x01, 0xe9, 0xf2, 0x32, 0xce, 0xa4, 0x1e, 0xfe, 0xbb, 0x51, 0x04, 0x33, 0xbd,
+	0xba, 0xab, 0x5f, 0x25, 0xa0, 0xde, 0x34, 0x27, 0x2c, 0x22, 0x21, 0xc3, 0xb0, 0x09, 0xee, 0x5d,
+	0xeb, 0x8e, 0x8d, 0x29, 0x25, 0x34, 0x83, 0x17, 0x6b, 0x50, 0xa4, 0x4b, 0x23, 0x47, 0xdb, 0xcf,
+	0x46, 0xda, 0xba, 0x3b, 0xdc, 0xb7, 0x97, 0xa9, 0x1c, 0xbe, 0x01, 0xff, 0x52, 0xcc, 0x12, 0x3f,
+	0x16, 0x73, 0x64, 0x4e, 0x9e, 0xa3, 0xb1, 0xe9, 0x59, 0x19, 0xc9, 0x12, 0x44, 0xb5, 0x09, 0x16,
+	0x27, 0x68, 0xd3, 0xe1, 0x19, 0xf1, 0x80, 0x86, 0xdf, 0x4e, 0xed, 0x62, 0x0a, 0x28, 0x23, 0x10,
+	0xfb, 0x3c, 0x21, 0xf8, 0x43, 0x02, 0xf3, 0xa3, 0x9f, 0x29, 0x7c, 0x31, 0xf9, 0x36, 0x37, 0x3e,
+	0x70, 0xe5, 0x2f, 0xfb, 0xae, 0xee, 0x5e, 0x99, 0xc3, 0x17, 0xfb, 0xf8, 0xed, 0xe7, 0x27, 0xf9,
+	0x19, 0x5c, 0x4e, 0xf7, 0xe1, 0xe9, 0x90, 0x67, 0x55, 0xbc, 0x6c, 0xa6, 0x57, 0xc5, 0x82, 0x1c,
+	0x6a, 0xba, 0x5e, 0x3d, 0x83, 0xe7, 0x32, 0x50, 0xc6, 0x8f, 0x05, 0x5c, 0xbf, 0x45, 0xd7, 0xc4,
+	0xf2, 0x51, 0x36, 0x6e, 0x07, 0xe1, 0x93, 0xa9, 0xbe, 0xbd, 0x32, 0xe7, 0x07, 0x76, 0xd8, 0xd3,
+	0xfe, 0x4a, 0xc9, 0x4a, 0xb0, 0xa6, 0x3e, 0x4f, 0x4b, 0xd0, 0xbf, 0xf3, 0xe9, 0x80, 0x78, 0xb5,
+	0x7a, 0x36, 0xb2, 0x02, 0x46, 0x90, 0xc5, 0x35, 0xa4, 0xaa, 0xf2, 0xe0, 0xd2, 0x2c, 0xf5, 0x73,
+	0xcb, 0xad, 0xc8, 0x63, 0x9a, 0x43, 0x82, 0xc6, 0xb9, 0x0c, 0x96, 0x1c, 0x12, 0x4c, 0xbc, 0x47,
+	0x63, 0x71, 0xfc, 0x38, 0xb5, 0xd2, 0x55, 0xd3, 0x92, 0x5e, 0x6f, 0xe5, 0x90, 0x0e, 0xf1, 0x51,
+	0xd8, 0xd1, 0x08, 0xed, 0xe8, 0x1d, 0x1c, 0x66, 0x8b, 0x48, 0xef, 0x87, 0x1d, 0xff, 0xa7, 0xba,
+	0x22, 0x8c, 0xcf, 0x72, 0x61, 0xd3, 0x34, 0xbf, 0xc8, 0xe5, 0x4d, 0x0e, 0x34, 0x5d, 0xa6, 0x71,
+	0x33, 0xb5, 0x0e, 0xea, 0x5a, 0x1e, 0x98, 0x5d, 0x0a, 0x49, 0xdb, 0x74, 0x59, 0xbb, 0x27, 0x69,
+	0x1f, 0xd4, 0xdb, 0x42, 0xf2, 0x4b, 0x5e, 0xe2, 0xe7, 0x86, 0x61, 0xba, 0xcc, 0x30, 0x7a, 0x22,
+	0xc3, 0x38, 0xa8, 0x1b, 0x86, 0x90, 0x1d, 0x4e, 0x67, 0x79, 0xd6, 0xff, 0x04, 0x00, 0x00, 0xff,
+	0xff, 0xa9, 0xd4, 0x40, 0xb3, 0xfb, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanCampaignServiceClient is the client API for KeywordPlanCampaignService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanCampaignServiceClient interface {
+	// Returns the requested Keyword Plan campaign in full detail.
+	GetKeywordPlanCampaign(ctx context.Context, in *GetKeywordPlanCampaignRequest, opts ...grpc.CallOption) (*resources.KeywordPlanCampaign, error)
+	// Creates, updates, or removes Keyword Plan campaigns. Operation statuses are
+	// returned.
+	MutateKeywordPlanCampaigns(ctx context.Context, in *MutateKeywordPlanCampaignsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanCampaignsResponse, error)
+}
+
+type keywordPlanCampaignServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanCampaignServiceClient(cc grpc.ClientConnInterface) KeywordPlanCampaignServiceClient {
+	return &keywordPlanCampaignServiceClient{cc}
+}
+
+func (c *keywordPlanCampaignServiceClient) GetKeywordPlanCampaign(ctx context.Context, in *GetKeywordPlanCampaignRequest, opts ...grpc.CallOption) (*resources.KeywordPlanCampaign, error) {
+	out := new(resources.KeywordPlanCampaign)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanCampaignService/GetKeywordPlanCampaign", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanCampaignServiceClient) MutateKeywordPlanCampaigns(ctx context.Context, in *MutateKeywordPlanCampaignsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanCampaignsResponse, error) {
+	out := new(MutateKeywordPlanCampaignsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanCampaignService/MutateKeywordPlanCampaigns", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanCampaignServiceServer is the server API for KeywordPlanCampaignService service.
+type KeywordPlanCampaignServiceServer interface {
+	// Returns the requested Keyword Plan campaign in full detail.
+	GetKeywordPlanCampaign(context.Context, *GetKeywordPlanCampaignRequest) (*resources.KeywordPlanCampaign, error)
+	// Creates, updates, or removes Keyword Plan campaigns. Operation statuses are
+	// returned.
+	MutateKeywordPlanCampaigns(context.Context, *MutateKeywordPlanCampaignsRequest) (*MutateKeywordPlanCampaignsResponse, error)
+}
+
+// UnimplementedKeywordPlanCampaignServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanCampaignServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanCampaignServiceServer) GetKeywordPlanCampaign(ctx context.Context, req *GetKeywordPlanCampaignRequest) (*resources.KeywordPlanCampaign, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetKeywordPlanCampaign not implemented")
+}
+func (*UnimplementedKeywordPlanCampaignServiceServer) MutateKeywordPlanCampaigns(ctx context.Context, req *MutateKeywordPlanCampaignsRequest) (*MutateKeywordPlanCampaignsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateKeywordPlanCampaigns not implemented")
+}
+
+func RegisterKeywordPlanCampaignServiceServer(s *grpc.Server, srv KeywordPlanCampaignServiceServer) {
+	s.RegisterService(&_KeywordPlanCampaignService_serviceDesc, srv)
+}
+
+func _KeywordPlanCampaignService_GetKeywordPlanCampaign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanCampaignRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanCampaignServiceServer).GetKeywordPlanCampaign(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanCampaignService/GetKeywordPlanCampaign",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanCampaignServiceServer).GetKeywordPlanCampaign(ctx, req.(*GetKeywordPlanCampaignRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanCampaignService_MutateKeywordPlanCampaigns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanCampaignsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanCampaignServiceServer).MutateKeywordPlanCampaigns(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanCampaignService/MutateKeywordPlanCampaigns",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanCampaignServiceServer).MutateKeywordPlanCampaigns(ctx, req.(*MutateKeywordPlanCampaignsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanCampaignService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanCampaignService",
+	HandlerType: (*KeywordPlanCampaignServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanCampaign",
+			Handler:    _KeywordPlanCampaignService_GetKeywordPlanCampaign_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanCampaigns",
+			Handler:    _KeywordPlanCampaignService_MutateKeywordPlanCampaigns_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_campaign_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_idea_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_idea_service.pb.go
new file mode 100644
index 0000000..d90b88a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_idea_service.pb.go
@@ -0,0 +1,538 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_idea_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordIdeaService.GenerateKeywordIdeas][].
+type GenerateKeywordIdeasRequest struct {
+	// The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The resource name of the language to target.
+	// Required
+	Language *wrappers.StringValue `protobuf:"bytes,7,opt,name=language,proto3" json:"language,omitempty"`
+	// The resource names of the location to target.
+	// Max 10
+	GeoTargetConstants []*wrappers.StringValue `protobuf:"bytes,8,rep,name=geo_target_constants,json=geoTargetConstants,proto3" json:"geo_target_constants,omitempty"`
+	// Targeting network.
+	KeywordPlanNetwork enums.KeywordPlanNetworkEnum_KeywordPlanNetwork `protobuf:"varint,9,opt,name=keyword_plan_network,json=keywordPlanNetwork,proto3,enum=google.ads.googleads.v3.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork" json:"keyword_plan_network,omitempty"`
+	// The type of seed to generate keyword ideas.
+	//
+	// Types that are valid to be assigned to Seed:
+	//	*GenerateKeywordIdeasRequest_KeywordAndUrlSeed
+	//	*GenerateKeywordIdeasRequest_KeywordSeed
+	//	*GenerateKeywordIdeasRequest_UrlSeed
+	Seed                 isGenerateKeywordIdeasRequest_Seed `protobuf_oneof:"seed"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *GenerateKeywordIdeasRequest) Reset()         { *m = GenerateKeywordIdeasRequest{} }
+func (m *GenerateKeywordIdeasRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeasRequest) ProtoMessage()    {}
+func (*GenerateKeywordIdeasRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{0}
+}
+
+func (m *GenerateKeywordIdeasRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Marshal(b, m, deterministic)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeasRequest.Merge(m, src)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Size(m)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeasRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeasRequest proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeasRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *GenerateKeywordIdeasRequest) GetLanguage() *wrappers.StringValue {
+	if m != nil {
+		return m.Language
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetGeoTargetConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstants
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordPlanNetwork() enums.KeywordPlanNetworkEnum_KeywordPlanNetwork {
+	if m != nil {
+		return m.KeywordPlanNetwork
+	}
+	return enums.KeywordPlanNetworkEnum_UNSPECIFIED
+}
+
+type isGenerateKeywordIdeasRequest_Seed interface {
+	isGenerateKeywordIdeasRequest_Seed()
+}
+
+type GenerateKeywordIdeasRequest_KeywordAndUrlSeed struct {
+	KeywordAndUrlSeed *KeywordAndUrlSeed `protobuf:"bytes,2,opt,name=keyword_and_url_seed,json=keywordAndUrlSeed,proto3,oneof"`
+}
+
+type GenerateKeywordIdeasRequest_KeywordSeed struct {
+	KeywordSeed *KeywordSeed `protobuf:"bytes,3,opt,name=keyword_seed,json=keywordSeed,proto3,oneof"`
+}
+
+type GenerateKeywordIdeasRequest_UrlSeed struct {
+	UrlSeed *UrlSeed `protobuf:"bytes,5,opt,name=url_seed,json=urlSeed,proto3,oneof"`
+}
+
+func (*GenerateKeywordIdeasRequest_KeywordAndUrlSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (*GenerateKeywordIdeasRequest_KeywordSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (*GenerateKeywordIdeasRequest_UrlSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (m *GenerateKeywordIdeasRequest) GetSeed() isGenerateKeywordIdeasRequest_Seed {
+	if m != nil {
+		return m.Seed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordAndUrlSeed() *KeywordAndUrlSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_KeywordAndUrlSeed); ok {
+		return x.KeywordAndUrlSeed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordSeed() *KeywordSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_KeywordSeed); ok {
+		return x.KeywordSeed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetUrlSeed() *UrlSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_UrlSeed); ok {
+		return x.UrlSeed
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GenerateKeywordIdeasRequest) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*GenerateKeywordIdeasRequest_KeywordAndUrlSeed)(nil),
+		(*GenerateKeywordIdeasRequest_KeywordSeed)(nil),
+		(*GenerateKeywordIdeasRequest_UrlSeed)(nil),
+	}
+}
+
+// Keyword And Url Seed
+type KeywordAndUrlSeed struct {
+	// The URL to crawl in order to generate keyword ideas.
+	Url *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	// Requires at least one keyword.
+	Keywords             []*wrappers.StringValue `protobuf:"bytes,2,rep,name=keywords,proto3" json:"keywords,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordAndUrlSeed) Reset()         { *m = KeywordAndUrlSeed{} }
+func (m *KeywordAndUrlSeed) String() string { return proto.CompactTextString(m) }
+func (*KeywordAndUrlSeed) ProtoMessage()    {}
+func (*KeywordAndUrlSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{1}
+}
+
+func (m *KeywordAndUrlSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordAndUrlSeed.Unmarshal(m, b)
+}
+func (m *KeywordAndUrlSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordAndUrlSeed.Marshal(b, m, deterministic)
+}
+func (m *KeywordAndUrlSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordAndUrlSeed.Merge(m, src)
+}
+func (m *KeywordAndUrlSeed) XXX_Size() int {
+	return xxx_messageInfo_KeywordAndUrlSeed.Size(m)
+}
+func (m *KeywordAndUrlSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordAndUrlSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordAndUrlSeed proto.InternalMessageInfo
+
+func (m *KeywordAndUrlSeed) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+func (m *KeywordAndUrlSeed) GetKeywords() []*wrappers.StringValue {
+	if m != nil {
+		return m.Keywords
+	}
+	return nil
+}
+
+// Keyword Seed
+type KeywordSeed struct {
+	// Requires at least one keyword.
+	Keywords             []*wrappers.StringValue `protobuf:"bytes,1,rep,name=keywords,proto3" json:"keywords,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordSeed) Reset()         { *m = KeywordSeed{} }
+func (m *KeywordSeed) String() string { return proto.CompactTextString(m) }
+func (*KeywordSeed) ProtoMessage()    {}
+func (*KeywordSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{2}
+}
+
+func (m *KeywordSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordSeed.Unmarshal(m, b)
+}
+func (m *KeywordSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordSeed.Marshal(b, m, deterministic)
+}
+func (m *KeywordSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordSeed.Merge(m, src)
+}
+func (m *KeywordSeed) XXX_Size() int {
+	return xxx_messageInfo_KeywordSeed.Size(m)
+}
+func (m *KeywordSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordSeed proto.InternalMessageInfo
+
+func (m *KeywordSeed) GetKeywords() []*wrappers.StringValue {
+	if m != nil {
+		return m.Keywords
+	}
+	return nil
+}
+
+// Url Seed
+type UrlSeed struct {
+	// The URL to crawl in order to generate keyword ideas.
+	Url                  *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UrlSeed) Reset()         { *m = UrlSeed{} }
+func (m *UrlSeed) String() string { return proto.CompactTextString(m) }
+func (*UrlSeed) ProtoMessage()    {}
+func (*UrlSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{3}
+}
+
+func (m *UrlSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UrlSeed.Unmarshal(m, b)
+}
+func (m *UrlSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UrlSeed.Marshal(b, m, deterministic)
+}
+func (m *UrlSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UrlSeed.Merge(m, src)
+}
+func (m *UrlSeed) XXX_Size() int {
+	return xxx_messageInfo_UrlSeed.Size(m)
+}
+func (m *UrlSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_UrlSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UrlSeed proto.InternalMessageInfo
+
+func (m *UrlSeed) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+// Response message for [KeywordIdeaService.GenerateKeywordIdeas][].
+type GenerateKeywordIdeaResponse struct {
+	// Results of generating keyword ideas.
+	Results              []*GenerateKeywordIdeaResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *GenerateKeywordIdeaResponse) Reset()         { *m = GenerateKeywordIdeaResponse{} }
+func (m *GenerateKeywordIdeaResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeaResponse) ProtoMessage()    {}
+func (*GenerateKeywordIdeaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{4}
+}
+
+func (m *GenerateKeywordIdeaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Marshal(b, m, deterministic)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeaResponse.Merge(m, src)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Size(m)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeaResponse proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeaResponse) GetResults() []*GenerateKeywordIdeaResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result of generating keyword ideas.
+type GenerateKeywordIdeaResult struct {
+	// Text of the keyword idea.
+	// As in Keyword Plan historical metrics, this text may not be an actual
+	// keyword, but the canonical form of multiple keywords.
+	// See KeywordPlanKeywordHistoricalMetrics message in KeywordPlanService.
+	Text *wrappers.StringValue `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
+	// The historical metrics for the keyword
+	KeywordIdeaMetrics   *common.KeywordPlanHistoricalMetrics `protobuf:"bytes,3,opt,name=keyword_idea_metrics,json=keywordIdeaMetrics,proto3" json:"keyword_idea_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *GenerateKeywordIdeaResult) Reset()         { *m = GenerateKeywordIdeaResult{} }
+func (m *GenerateKeywordIdeaResult) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeaResult) ProtoMessage()    {}
+func (*GenerateKeywordIdeaResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_26269aab04477620, []int{5}
+}
+
+func (m *GenerateKeywordIdeaResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeaResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Marshal(b, m, deterministic)
+}
+func (m *GenerateKeywordIdeaResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeaResult.Merge(m, src)
+}
+func (m *GenerateKeywordIdeaResult) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Size(m)
+}
+func (m *GenerateKeywordIdeaResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeaResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeaResult proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeaResult) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeaResult) GetKeywordIdeaMetrics() *common.KeywordPlanHistoricalMetrics {
+	if m != nil {
+		return m.KeywordIdeaMetrics
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GenerateKeywordIdeasRequest)(nil), "google.ads.googleads.v3.services.GenerateKeywordIdeasRequest")
+	proto.RegisterType((*KeywordAndUrlSeed)(nil), "google.ads.googleads.v3.services.KeywordAndUrlSeed")
+	proto.RegisterType((*KeywordSeed)(nil), "google.ads.googleads.v3.services.KeywordSeed")
+	proto.RegisterType((*UrlSeed)(nil), "google.ads.googleads.v3.services.UrlSeed")
+	proto.RegisterType((*GenerateKeywordIdeaResponse)(nil), "google.ads.googleads.v3.services.GenerateKeywordIdeaResponse")
+	proto.RegisterType((*GenerateKeywordIdeaResult)(nil), "google.ads.googleads.v3.services.GenerateKeywordIdeaResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_idea_service.proto", fileDescriptor_26269aab04477620)
+}
+
+var fileDescriptor_26269aab04477620 = []byte{
+	// 748 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x4f, 0xdb, 0x48,
+	0x14, 0x5f, 0x3b, 0x2c, 0x81, 0xc9, 0x6a, 0x25, 0x46, 0x68, 0x37, 0x0b, 0x68, 0x37, 0x8a, 0x38,
+	0xb0, 0x48, 0xb5, 0xab, 0xe4, 0x50, 0x6a, 0x1a, 0xa9, 0xa1, 0x6a, 0x13, 0x54, 0x15, 0x21, 0x53,
+	0x72, 0xa8, 0x22, 0x59, 0x83, 0xfd, 0xb0, 0xac, 0x38, 0x33, 0xe9, 0xcc, 0x18, 0xfa, 0x47, 0x5c,
+	0xb8, 0xf6, 0xd8, 0x6f, 0xd0, 0x63, 0xbf, 0x43, 0xbf, 0x00, 0xa7, 0x4a, 0x7c, 0x85, 0x9e, 0xfa,
+	0x29, 0x2a, 0xdb, 0x33, 0x49, 0x80, 0xa4, 0xa1, 0xdc, 0x9e, 0xdf, 0xfb, 0xbd, 0xdf, 0xfb, 0xcd,
+	0x9b, 0x37, 0xcf, 0xe8, 0x71, 0xc8, 0x58, 0x18, 0x83, 0x4d, 0x02, 0x61, 0xe7, 0x66, 0x6a, 0x9d,
+	0xd4, 0x6d, 0x01, 0xfc, 0x24, 0xf2, 0x41, 0xd8, 0x3d, 0x78, 0x7b, 0xca, 0x78, 0xe0, 0x0d, 0x62,
+	0x42, 0xbd, 0x28, 0x00, 0xe2, 0xa9, 0x90, 0x35, 0xe0, 0x4c, 0x32, 0x5c, 0xc9, 0xd3, 0x2c, 0x12,
+	0x08, 0x6b, 0xc8, 0x60, 0x9d, 0xd4, 0x2d, 0xcd, 0xb0, 0xb2, 0x35, 0xad, 0x86, 0xcf, 0xfa, 0x7d,
+	0x46, 0xaf, 0x56, 0xc8, 0x7d, 0x39, 0xf7, 0xf4, 0x4c, 0xa0, 0x49, 0xff, 0x9a, 0x34, 0x0a, 0xf2,
+	0x94, 0xf1, 0x9e, 0xca, 0x5c, 0xd3, 0x99, 0x83, 0xc8, 0x26, 0x94, 0x32, 0x49, 0x64, 0xc4, 0xa8,
+	0x50, 0xd1, 0x7f, 0x55, 0x34, 0xfb, 0x3a, 0x4a, 0x8e, 0xed, 0x53, 0x4e, 0x06, 0x03, 0xe0, 0x3a,
+	0xfe, 0xf7, 0x58, 0xb6, 0x1f, 0x47, 0x40, 0x65, 0x1e, 0xa8, 0x7e, 0x9d, 0x43, 0xab, 0x2d, 0xa0,
+	0xc0, 0x89, 0x84, 0xe7, 0x79, 0xf5, 0xdd, 0x00, 0x88, 0x70, 0xe1, 0x75, 0x02, 0x42, 0xe2, 0xff,
+	0x50, 0xc9, 0x4f, 0x84, 0x64, 0x7d, 0xe0, 0x5e, 0x14, 0x94, 0x8d, 0x8a, 0xb1, 0xb1, 0xe8, 0x22,
+	0xed, 0xda, 0x0d, 0xf0, 0x16, 0x5a, 0x88, 0x09, 0x0d, 0x13, 0x12, 0x42, 0xb9, 0x58, 0x31, 0x36,
+	0x4a, 0xb5, 0x35, 0xd5, 0x35, 0x4b, 0x8b, 0xb1, 0x0e, 0x24, 0x8f, 0x68, 0xd8, 0x21, 0x71, 0x02,
+	0xee, 0x10, 0x8d, 0xf7, 0xd0, 0x72, 0x08, 0xcc, 0x93, 0x84, 0x87, 0x20, 0x3d, 0x9f, 0x51, 0x21,
+	0x09, 0x95, 0xa2, 0xbc, 0x50, 0x29, 0xcc, 0x64, 0xc1, 0x21, 0xb0, 0x97, 0x59, 0xe2, 0x13, 0x9d,
+	0x87, 0xdf, 0xa1, 0xe5, 0x49, 0xfd, 0x2b, 0x2f, 0x56, 0x8c, 0x8d, 0x3f, 0x6b, 0x6d, 0x6b, 0xda,
+	0xb5, 0x66, 0xad, 0xb7, 0xd4, 0xe1, 0xf7, 0x63, 0x42, 0xf7, 0xf2, 0xc4, 0xa7, 0x34, 0xe9, 0x4f,
+	0x70, 0xbb, 0xb8, 0x77, 0xc3, 0x87, 0x8f, 0x47, 0xb5, 0x09, 0x0d, 0xbc, 0x84, 0xc7, 0x9e, 0x00,
+	0x08, 0xca, 0x66, 0xd6, 0x91, 0xba, 0x35, 0x6b, 0xa4, 0x74, 0x9d, 0x26, 0x0d, 0x0e, 0x79, 0x7c,
+	0x00, 0x10, 0xb4, 0x7f, 0x73, 0x97, 0x7a, 0xd7, 0x9d, 0xd8, 0x45, 0x7f, 0xe8, 0x3a, 0x19, 0x7f,
+	0x21, 0xe3, 0xbf, 0x77, 0x6b, 0x7e, 0xc5, 0x5c, 0xea, 0x8d, 0x3e, 0xf1, 0x33, 0xb4, 0x30, 0xd4,
+	0xfb, 0x7b, 0xc6, 0xf7, 0xff, 0x6c, 0xbe, 0x91, 0xca, 0x62, 0x92, 0x9b, 0x3b, 0xf3, 0x68, 0x2e,
+	0xe5, 0xa8, 0x9e, 0xa1, 0xa5, 0x1b, 0xa7, 0xc1, 0x16, 0x2a, 0x24, 0x3c, 0xce, 0xe6, 0x67, 0xd6,
+	0xdd, 0xa6, 0xc0, 0x74, 0xac, 0x94, 0x46, 0x51, 0x36, 0x6f, 0x31, 0x10, 0x43, 0x74, 0xb5, 0x85,
+	0x4a, 0x63, 0x87, 0xbd, 0x42, 0x64, 0xfc, 0x12, 0xd1, 0x43, 0x54, 0xbc, 0xa3, 0xfa, 0xaa, 0x9c,
+	0xf8, 0xa8, 0x5c, 0x10, 0x03, 0x46, 0x05, 0xe0, 0x43, 0x54, 0xe4, 0x20, 0x92, 0x58, 0x6a, 0x49,
+	0xdb, 0xb3, 0x1b, 0x3e, 0x99, 0x2f, 0x89, 0xa5, 0xab, 0xb9, 0xaa, 0x5f, 0x0c, 0xf4, 0xcf, 0x54,
+	0x18, 0xbe, 0x8f, 0xe6, 0x24, 0xbc, 0x91, 0x6a, 0x24, 0x7f, 0x7e, 0x88, 0x0c, 0x89, 0xe9, 0x68,
+	0xa8, 0xb3, 0x35, 0xd9, 0x07, 0xc9, 0x23, 0x5f, 0xa8, 0xa1, 0x7b, 0x34, 0x55, 0xb3, 0xda, 0x78,
+	0x63, 0x4f, 0xa7, 0x1d, 0x09, 0xc9, 0x78, 0xe4, 0x93, 0xf8, 0x45, 0xce, 0x31, 0x7c, 0x44, 0xa9,
+	0x40, 0xe5, 0xab, 0x7d, 0x30, 0xd1, 0x5f, 0x63, 0x49, 0x69, 0xe8, 0x20, 0x3f, 0x3e, 0xbe, 0x34,
+	0xd0, 0xf2, 0xa4, 0x35, 0x85, 0x1b, 0x77, 0xea, 0x9c, 0x5e, 0x6f, 0x2b, 0x8d, 0xbb, 0x36, 0x3e,
+	0xbb, 0xc8, 0x6a, 0xe3, 0xfc, 0xf2, 0xdb, 0x47, 0xf3, 0x41, 0xb5, 0x96, 0x2d, 0x7f, 0xb5, 0x14,
+	0x85, 0xfd, 0x7e, 0x6c, 0x65, 0x36, 0x36, 0xcf, 0x9c, 0x70, 0x82, 0x02, 0xc7, 0xd8, 0x5c, 0x59,
+	0xbd, 0x68, 0x96, 0x47, 0x45, 0x95, 0x35, 0x88, 0x44, 0xda, 0xc1, 0x9d, 0x73, 0x13, 0xad, 0xfb,
+	0xac, 0x3f, 0x53, 0xe0, 0xce, 0xea, 0xe4, 0x9e, 0xed, 0xa7, 0x17, 0xbb, 0x6f, 0xbc, 0x6a, 0x2b,
+	0x82, 0x90, 0xa5, 0x9b, 0xd7, 0x62, 0x3c, 0xb4, 0x43, 0xa0, 0xd9, 0xb5, 0xdb, 0xa3, 0x92, 0xd3,
+	0xff, 0x97, 0xdb, 0xda, 0xf8, 0x64, 0x16, 0x5a, 0xcd, 0xe6, 0x67, 0xb3, 0xd2, 0xca, 0x09, 0x9b,
+	0x81, 0xb0, 0x72, 0x33, 0xb5, 0x3a, 0x75, 0x4b, 0x15, 0x16, 0x17, 0x1a, 0xd2, 0x6d, 0x06, 0xa2,
+	0x3b, 0x84, 0x74, 0x3b, 0xf5, 0xae, 0x86, 0x7c, 0x37, 0xd7, 0x73, 0xbf, 0xe3, 0x34, 0x03, 0xe1,
+	0x38, 0x43, 0x90, 0xe3, 0x74, 0xea, 0x8e, 0xa3, 0x61, 0x47, 0xf3, 0x99, 0xce, 0xfa, 0x8f, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0x97, 0x74, 0x32, 0x68, 0xd6, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanIdeaServiceClient is the client API for KeywordPlanIdeaService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanIdeaServiceClient interface {
+	// Returns a list of keyword ideas.
+	GenerateKeywordIdeas(ctx context.Context, in *GenerateKeywordIdeasRequest, opts ...grpc.CallOption) (*GenerateKeywordIdeaResponse, error)
+}
+
+type keywordPlanIdeaServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanIdeaServiceClient(cc grpc.ClientConnInterface) KeywordPlanIdeaServiceClient {
+	return &keywordPlanIdeaServiceClient{cc}
+}
+
+func (c *keywordPlanIdeaServiceClient) GenerateKeywordIdeas(ctx context.Context, in *GenerateKeywordIdeasRequest, opts ...grpc.CallOption) (*GenerateKeywordIdeaResponse, error) {
+	out := new(GenerateKeywordIdeaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanIdeaService/GenerateKeywordIdeas", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanIdeaServiceServer is the server API for KeywordPlanIdeaService service.
+type KeywordPlanIdeaServiceServer interface {
+	// Returns a list of keyword ideas.
+	GenerateKeywordIdeas(context.Context, *GenerateKeywordIdeasRequest) (*GenerateKeywordIdeaResponse, error)
+}
+
+// UnimplementedKeywordPlanIdeaServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanIdeaServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanIdeaServiceServer) GenerateKeywordIdeas(ctx context.Context, req *GenerateKeywordIdeasRequest) (*GenerateKeywordIdeaResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GenerateKeywordIdeas not implemented")
+}
+
+func RegisterKeywordPlanIdeaServiceServer(s *grpc.Server, srv KeywordPlanIdeaServiceServer) {
+	s.RegisterService(&_KeywordPlanIdeaService_serviceDesc, srv)
+}
+
+func _KeywordPlanIdeaService_GenerateKeywordIdeas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateKeywordIdeasRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanIdeaServiceServer).GenerateKeywordIdeas(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanIdeaService/GenerateKeywordIdeas",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanIdeaServiceServer).GenerateKeywordIdeas(ctx, req.(*GenerateKeywordIdeasRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanIdeaService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanIdeaService",
+	HandlerType: (*KeywordPlanIdeaServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GenerateKeywordIdeas",
+			Handler:    _KeywordPlanIdeaService_GenerateKeywordIdeas_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_idea_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_keyword_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_keyword_service.pb.go
new file mode 100644
index 0000000..ef76080
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_keyword_service.pb.go
@@ -0,0 +1,532 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_keyword_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordPlanKeywordService.GetKeywordPlanKeyword][google.ads.googleads.v3.services.KeywordPlanKeywordService.GetKeywordPlanKeyword].
+type GetKeywordPlanKeywordRequest struct {
+	// Required. The resource name of the ad group keyword to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanKeywordRequest) Reset()         { *m = GetKeywordPlanKeywordRequest{} }
+func (m *GetKeywordPlanKeywordRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanKeywordRequest) ProtoMessage()    {}
+func (*GetKeywordPlanKeywordRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0d3bbba4938b674a, []int{0}
+}
+
+func (m *GetKeywordPlanKeywordRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanKeywordRequest.Merge(m, src)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Size(m)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanKeywordRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanKeywordRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanKeywordRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanKeywordService.MutateKeywordPlanKeywords][google.ads.googleads.v3.services.KeywordPlanKeywordService.MutateKeywordPlanKeywords].
+type MutateKeywordPlanKeywordsRequest struct {
+	// Required. The ID of the customer whose Keyword Plan keywords are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual Keyword Plan keywords.
+	Operations []*KeywordPlanKeywordOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) Reset()         { *m = MutateKeywordPlanKeywordsRequest{} }
+func (m *MutateKeywordPlanKeywordsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0d3bbba4938b674a, []int{1}
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Merge(m, src)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Size(m)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) GetOperations() []*KeywordPlanKeywordOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a Keyword Plan keyword.
+type KeywordPlanKeywordOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanKeywordOperation_Create
+	//	*KeywordPlanKeywordOperation_Update
+	//	*KeywordPlanKeywordOperation_Remove
+	Operation            isKeywordPlanKeywordOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *KeywordPlanKeywordOperation) Reset()         { *m = KeywordPlanKeywordOperation{} }
+func (m *KeywordPlanKeywordOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordOperation) ProtoMessage()    {}
+func (*KeywordPlanKeywordOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0d3bbba4938b674a, []int{2}
+}
+
+func (m *KeywordPlanKeywordOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanKeywordOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordOperation.Merge(m, src)
+}
+func (m *KeywordPlanKeywordOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Size(m)
+}
+func (m *KeywordPlanKeywordOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanKeywordOperation_Operation interface {
+	isKeywordPlanKeywordOperation_Operation()
+}
+
+type KeywordPlanKeywordOperation_Create struct {
+	Create *resources.KeywordPlanKeyword `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanKeywordOperation_Update struct {
+	Update *resources.KeywordPlanKeyword `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanKeywordOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanKeywordOperation_Create) isKeywordPlanKeywordOperation_Operation() {}
+
+func (*KeywordPlanKeywordOperation_Update) isKeywordPlanKeywordOperation_Operation() {}
+
+func (*KeywordPlanKeywordOperation_Remove) isKeywordPlanKeywordOperation_Operation() {}
+
+func (m *KeywordPlanKeywordOperation) GetOperation() isKeywordPlanKeywordOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetCreate() *resources.KeywordPlanKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetUpdate() *resources.KeywordPlanKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanKeywordOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanKeywordOperation_Create)(nil),
+		(*KeywordPlanKeywordOperation_Update)(nil),
+		(*KeywordPlanKeywordOperation_Remove)(nil),
+	}
+}
+
+// Response message for a Keyword Plan keyword mutate.
+type MutateKeywordPlanKeywordsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanKeywordResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordsResponse) Reset()         { *m = MutateKeywordPlanKeywordsResponse{} }
+func (m *MutateKeywordPlanKeywordsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0d3bbba4938b674a, []int{3}
+}
+
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Merge(m, src)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Size(m)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanKeywordsResponse) GetResults() []*MutateKeywordPlanKeywordResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan keyword mutate.
+type MutateKeywordPlanKeywordResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordResult) Reset()         { *m = MutateKeywordPlanKeywordResult{} }
+func (m *MutateKeywordPlanKeywordResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordResult) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0d3bbba4938b674a, []int{4}
+}
+
+func (m *MutateKeywordPlanKeywordResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordResult.Merge(m, src)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Size(m)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanKeywordRequest)(nil), "google.ads.googleads.v3.services.GetKeywordPlanKeywordRequest")
+	proto.RegisterType((*MutateKeywordPlanKeywordsRequest)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanKeywordsRequest")
+	proto.RegisterType((*KeywordPlanKeywordOperation)(nil), "google.ads.googleads.v3.services.KeywordPlanKeywordOperation")
+	proto.RegisterType((*MutateKeywordPlanKeywordsResponse)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanKeywordsResponse")
+	proto.RegisterType((*MutateKeywordPlanKeywordResult)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanKeywordResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_keyword_service.proto", fileDescriptor_0d3bbba4938b674a)
+}
+
+var fileDescriptor_0d3bbba4938b674a = []byte{
+	// 771 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4d, 0x6b, 0xdb, 0x4c,
+	0x10, 0xc7, 0x1f, 0xc9, 0x21, 0xcf, 0x93, 0x75, 0xf2, 0x14, 0xb6, 0xa4, 0x75, 0x9c, 0x90, 0xba,
+	0x6a, 0xa0, 0xc6, 0x14, 0x09, 0x6c, 0x42, 0x8b, 0x52, 0x97, 0xca, 0x21, 0x2f, 0xa5, 0xa4, 0x09,
+	0x0a, 0xe4, 0x10, 0x0c, 0x62, 0x2d, 0x6d, 0x5c, 0x11, 0x49, 0xab, 0xee, 0x4a, 0x2e, 0x21, 0xe4,
+	0x12, 0xe8, 0x27, 0xe8, 0xb9, 0x97, 0xf6, 0xd6, 0x2f, 0x52, 0xc8, 0xb5, 0xb7, 0x40, 0xa1, 0x87,
+	0x9e, 0xfa, 0x11, 0x7a, 0x2a, 0xd2, 0x6a, 0xfd, 0x92, 0xf8, 0x05, 0x92, 0xdb, 0x68, 0xe7, 0xef,
+	0xdf, 0xcc, 0xec, 0xcc, 0x8e, 0xc1, 0x7a, 0x9b, 0x90, 0xb6, 0x87, 0x35, 0xe4, 0x30, 0x8d, 0x9b,
+	0x89, 0xd5, 0xa9, 0x69, 0x0c, 0xd3, 0x8e, 0x6b, 0x63, 0xa6, 0x1d, 0xe3, 0x93, 0xf7, 0x84, 0x3a,
+	0x56, 0xe8, 0xa1, 0xc0, 0x12, 0x1f, 0x99, 0x57, 0x0d, 0x29, 0x89, 0x08, 0x2c, 0xf1, 0x5f, 0xaa,
+	0xc8, 0x61, 0x6a, 0x17, 0xa2, 0x76, 0x6a, 0xaa, 0x80, 0x14, 0x9f, 0x8f, 0x0a, 0x43, 0x31, 0x23,
+	0x31, 0x1d, 0x15, 0x87, 0xf3, 0x8b, 0x4b, 0xe2, 0xd7, 0xa1, 0xab, 0xa1, 0x20, 0x20, 0x11, 0x8a,
+	0x5c, 0x12, 0xb0, 0xcc, 0x7b, 0xbf, 0xcf, 0x6b, 0x7b, 0x2e, 0x0e, 0xa2, 0xcc, 0xf1, 0xa0, 0xcf,
+	0x71, 0xe4, 0x62, 0xcf, 0xb1, 0x5a, 0xf8, 0x2d, 0xea, 0xb8, 0x84, 0x66, 0x82, 0x2c, 0x6f, 0x2d,
+	0xfd, 0x6a, 0xc5, 0x47, 0x99, 0xca, 0x47, 0xec, 0xf8, 0x0a, 0x9b, 0x86, 0xb6, 0xc6, 0x22, 0x14,
+	0xc5, 0x59, 0x50, 0x65, 0x1b, 0x2c, 0x6d, 0xe1, 0xe8, 0x35, 0x4f, 0x73, 0xcf, 0x43, 0x41, 0x66,
+	0x9a, 0xf8, 0x5d, 0x8c, 0x59, 0x04, 0xcb, 0x60, 0x4e, 0x94, 0x66, 0x05, 0xc8, 0xc7, 0x05, 0xa9,
+	0x24, 0x95, 0x67, 0x1a, 0xb9, 0x9f, 0x86, 0x6c, 0xce, 0x0a, 0xcf, 0x1b, 0xe4, 0x63, 0xe5, 0x8f,
+	0x04, 0x4a, 0x3b, 0x71, 0x84, 0x22, 0x7c, 0x9d, 0xc6, 0x04, 0x6e, 0x05, 0xe4, 0xed, 0x98, 0x45,
+	0xc4, 0xc7, 0xd4, 0x72, 0x9d, 0x7e, 0x18, 0x10, 0xe7, 0xaf, 0x1c, 0xd8, 0x02, 0x80, 0x84, 0x98,
+	0xf2, 0xdb, 0x29, 0xc8, 0xa5, 0x5c, 0x39, 0x5f, 0xad, 0xab, 0x93, 0x9a, 0xa3, 0x5e, 0x8f, 0xbb,
+	0x2b, 0x28, 0x59, 0x8c, 0x1e, 0x15, 0x3e, 0x06, 0x77, 0x42, 0x44, 0x23, 0x17, 0x79, 0xd6, 0x11,
+	0x72, 0xbd, 0x98, 0xe2, 0x42, 0xae, 0x24, 0x95, 0xff, 0x33, 0xff, 0xcf, 0x8e, 0x37, 0xf9, 0x29,
+	0x7c, 0x04, 0xe6, 0x3a, 0xc8, 0x73, 0x1d, 0x14, 0x61, 0x8b, 0x04, 0xde, 0x49, 0x61, 0x2a, 0x95,
+	0xcd, 0x8a, 0xc3, 0xdd, 0xc0, 0x3b, 0x51, 0xbe, 0xc8, 0x60, 0x71, 0x4c, 0x78, 0xb8, 0x06, 0xf2,
+	0x71, 0x98, 0x22, 0x92, 0xa6, 0xa4, 0x88, 0x7c, 0xb5, 0x28, 0x4a, 0x12, 0x7d, 0x53, 0x37, 0x93,
+	0xbe, 0xed, 0x20, 0x76, 0x6c, 0x02, 0x2e, 0x4f, 0x6c, 0xb8, 0x0b, 0xa6, 0x6d, 0x8a, 0x51, 0xc4,
+	0x2f, 0x3f, 0x5f, 0x5d, 0x1d, 0x79, 0x15, 0xdd, 0x29, 0x1c, 0x72, 0x17, 0xdb, 0xff, 0x98, 0x19,
+	0x26, 0x01, 0x72, 0x7c, 0x41, 0xbe, 0x25, 0x90, 0x63, 0x60, 0x01, 0x4c, 0x53, 0xec, 0x93, 0x0e,
+	0xbf, 0xc3, 0x99, 0xc4, 0xc3, 0xbf, 0x1b, 0x79, 0x30, 0xd3, 0xbd, 0x74, 0xe5, 0x9b, 0x04, 0x1e,
+	0x8e, 0x19, 0x11, 0x16, 0x92, 0x80, 0x61, 0xb8, 0x09, 0xe6, 0xaf, 0x74, 0xc6, 0xc2, 0x94, 0x12,
+	0x9a, 0xb2, 0xf3, 0x55, 0x28, 0x92, 0xa5, 0xa1, 0xad, 0xee, 0xa7, 0xb3, 0x6c, 0xde, 0x1d, 0xec,
+	0xd9, 0x46, 0x22, 0x87, 0x87, 0xe0, 0x5f, 0x8a, 0x59, 0xec, 0x45, 0x62, 0x84, 0x5e, 0x4e, 0x1e,
+	0xa1, 0x51, 0xd9, 0x99, 0x29, 0xc8, 0x14, 0x40, 0x65, 0x03, 0x2c, 0x8f, 0x97, 0x26, 0x63, 0x33,
+	0xe4, 0xe1, 0x0c, 0xbe, 0x99, 0xea, 0xa7, 0x29, 0xb0, 0x70, 0x9d, 0xb0, 0xcf, 0xb3, 0x81, 0x3f,
+	0x24, 0x30, 0x3f, 0xf4, 0x71, 0xc2, 0x17, 0x93, 0x2b, 0x19, 0xf7, 0xaa, 0x8b, 0x37, 0x6b, 0xb8,
+	0xb2, 0x73, 0x69, 0x0c, 0x16, 0x75, 0xfe, 0xfd, 0xd7, 0x47, 0xf9, 0x29, 0x5c, 0x4d, 0x36, 0xe0,
+	0xe9, 0x80, 0xa7, 0x2e, 0x9e, 0x33, 0xd3, 0x2a, 0x62, 0x25, 0xf6, 0x77, 0x5b, 0xab, 0x9c, 0xc1,
+	0x73, 0x19, 0x2c, 0x8c, 0x1c, 0x07, 0xd8, 0xb8, 0x79, 0xb7, 0xc4, 0xba, 0x29, 0xae, 0xdf, 0x8a,
+	0xc1, 0xe7, 0x51, 0x69, 0x5e, 0x1a, 0xf7, 0xfa, 0x96, 0xd6, 0x93, 0xde, 0x12, 0x49, 0xcb, 0xaf,
+	0x2b, 0xcf, 0x92, 0xf2, 0x7b, 0xf5, 0x9e, 0xf6, 0x89, 0xeb, 0x95, 0xb3, 0x61, 0xd5, 0xeb, 0x7e,
+	0x1a, 0x55, 0x97, 0x2a, 0xc5, 0xc5, 0x0b, 0xa3, 0xd0, 0xcb, 0x2c, 0xb3, 0x42, 0x97, 0xa9, 0x36,
+	0xf1, 0x1b, 0x1f, 0x64, 0xb0, 0x62, 0x13, 0x7f, 0x62, 0x15, 0x8d, 0xe5, 0x91, 0x53, 0xb4, 0x97,
+	0xec, 0x96, 0x3d, 0xe9, 0x70, 0x3b, 0x63, 0xb4, 0x89, 0x87, 0x82, 0xb6, 0x4a, 0x68, 0x5b, 0x6b,
+	0xe3, 0x20, 0xdd, 0x3c, 0x5a, 0x2f, 0xea, 0xe8, 0xff, 0xcf, 0x35, 0x61, 0x7c, 0x96, 0x73, 0x5b,
+	0x86, 0xf1, 0x55, 0x2e, 0x6d, 0x71, 0xa0, 0xe1, 0x30, 0x95, 0x9b, 0x89, 0x75, 0x50, 0x53, 0xb3,
+	0xc0, 0xec, 0x42, 0x48, 0x9a, 0x86, 0xc3, 0x9a, 0x5d, 0x49, 0xf3, 0xa0, 0xd6, 0x14, 0x92, 0xdf,
+	0xf2, 0x0a, 0x3f, 0xd7, 0x75, 0xc3, 0x61, 0xba, 0xde, 0x15, 0xe9, 0xfa, 0x41, 0x4d, 0xd7, 0x85,
+	0xac, 0x35, 0x9d, 0xe6, 0x59, 0xfb, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xb6, 0x18, 0x97, 0xe6,
+	0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanKeywordServiceClient is the client API for KeywordPlanKeywordService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanKeywordServiceClient interface {
+	// Returns the requested Keyword Plan keyword in full detail.
+	GetKeywordPlanKeyword(ctx context.Context, in *GetKeywordPlanKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanKeyword, error)
+	// Creates, updates, or removes Keyword Plan keywords. Operation statuses are
+	// returned.
+	MutateKeywordPlanKeywords(ctx context.Context, in *MutateKeywordPlanKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanKeywordsResponse, error)
+}
+
+type keywordPlanKeywordServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanKeywordServiceClient(cc grpc.ClientConnInterface) KeywordPlanKeywordServiceClient {
+	return &keywordPlanKeywordServiceClient{cc}
+}
+
+func (c *keywordPlanKeywordServiceClient) GetKeywordPlanKeyword(ctx context.Context, in *GetKeywordPlanKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanKeyword, error) {
+	out := new(resources.KeywordPlanKeyword)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanKeywordService/GetKeywordPlanKeyword", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanKeywordServiceClient) MutateKeywordPlanKeywords(ctx context.Context, in *MutateKeywordPlanKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanKeywordsResponse, error) {
+	out := new(MutateKeywordPlanKeywordsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanKeywordService/MutateKeywordPlanKeywords", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanKeywordServiceServer is the server API for KeywordPlanKeywordService service.
+type KeywordPlanKeywordServiceServer interface {
+	// Returns the requested Keyword Plan keyword in full detail.
+	GetKeywordPlanKeyword(context.Context, *GetKeywordPlanKeywordRequest) (*resources.KeywordPlanKeyword, error)
+	// Creates, updates, or removes Keyword Plan keywords. Operation statuses are
+	// returned.
+	MutateKeywordPlanKeywords(context.Context, *MutateKeywordPlanKeywordsRequest) (*MutateKeywordPlanKeywordsResponse, error)
+}
+
+// UnimplementedKeywordPlanKeywordServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanKeywordServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanKeywordServiceServer) GetKeywordPlanKeyword(ctx context.Context, req *GetKeywordPlanKeywordRequest) (*resources.KeywordPlanKeyword, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetKeywordPlanKeyword not implemented")
+}
+func (*UnimplementedKeywordPlanKeywordServiceServer) MutateKeywordPlanKeywords(ctx context.Context, req *MutateKeywordPlanKeywordsRequest) (*MutateKeywordPlanKeywordsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateKeywordPlanKeywords not implemented")
+}
+
+func RegisterKeywordPlanKeywordServiceServer(s *grpc.Server, srv KeywordPlanKeywordServiceServer) {
+	s.RegisterService(&_KeywordPlanKeywordService_serviceDesc, srv)
+}
+
+func _KeywordPlanKeywordService_GetKeywordPlanKeyword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanKeywordRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanKeywordServiceServer).GetKeywordPlanKeyword(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanKeywordService/GetKeywordPlanKeyword",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanKeywordServiceServer).GetKeywordPlanKeyword(ctx, req.(*GetKeywordPlanKeywordRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanKeywordService_MutateKeywordPlanKeywords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanKeywordsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanKeywordServiceServer).MutateKeywordPlanKeywords(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanKeywordService/MutateKeywordPlanKeywords",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanKeywordServiceServer).MutateKeywordPlanKeywords(ctx, req.(*MutateKeywordPlanKeywordsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanKeywordService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanKeywordService",
+	HandlerType: (*KeywordPlanKeywordServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanKeyword",
+			Handler:    _KeywordPlanKeywordService_GetKeywordPlanKeyword_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanKeywords",
+			Handler:    _KeywordPlanKeywordService_MutateKeywordPlanKeywords_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_keyword_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_negative_keyword_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_negative_keyword_service.pb.go
new file mode 100644
index 0000000..b021bae
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_negative_keyword_service.pb.go
@@ -0,0 +1,542 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_negative_keyword_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [KeywordPlanNegativeKeywordService.GetKeywordPlanNegativeKeyword][google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService.GetKeywordPlanNegativeKeyword].
+type GetKeywordPlanNegativeKeywordRequest struct {
+	// Required. The resource name of the plan to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanNegativeKeywordRequest) Reset()         { *m = GetKeywordPlanNegativeKeywordRequest{} }
+func (m *GetKeywordPlanNegativeKeywordRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanNegativeKeywordRequest) ProtoMessage()    {}
+func (*GetKeywordPlanNegativeKeywordRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6976b9c3cb471824, []int{0}
+}
+
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Merge(m, src)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Size(m)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanNegativeKeywordRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [KeywordPlanNegativeKeywordService.MutateKeywordPlanNegativeKeywords][google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService.MutateKeywordPlanNegativeKeywords].
+type MutateKeywordPlanNegativeKeywordsRequest struct {
+	// Required. The ID of the customer whose negative keywords are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual Keyword Plan negative
+	// keywords.
+	Operations []*KeywordPlanNegativeKeywordOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordsRequest{}
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6976b9c3cb471824, []int{1}
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Merge(m, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetOperations() []*KeywordPlanNegativeKeywordOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a Keyword Plan negative
+// keyword.
+type KeywordPlanNegativeKeywordOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanNegativeKeywordOperation_Create
+	//	*KeywordPlanNegativeKeywordOperation_Update
+	//	*KeywordPlanNegativeKeywordOperation_Remove
+	Operation            isKeywordPlanNegativeKeywordOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) Reset()         { *m = KeywordPlanNegativeKeywordOperation{} }
+func (m *KeywordPlanNegativeKeywordOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeywordOperation) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeywordOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6976b9c3cb471824, []int{2}
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Merge(m, src)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Size(m)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeywordOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeywordOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanNegativeKeywordOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanNegativeKeywordOperation_Operation interface {
+	isKeywordPlanNegativeKeywordOperation_Operation()
+}
+
+type KeywordPlanNegativeKeywordOperation_Create struct {
+	Create *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanNegativeKeywordOperation_Update struct {
+	Update *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanNegativeKeywordOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanNegativeKeywordOperation_Create) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (*KeywordPlanNegativeKeywordOperation_Update) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (*KeywordPlanNegativeKeywordOperation_Remove) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetOperation() isKeywordPlanNegativeKeywordOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetCreate() *resources.KeywordPlanNegativeKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetUpdate() *resources.KeywordPlanNegativeKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanNegativeKeywordOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanNegativeKeywordOperation_Create)(nil),
+		(*KeywordPlanNegativeKeywordOperation_Update)(nil),
+		(*KeywordPlanNegativeKeywordOperation_Remove)(nil),
+	}
+}
+
+// Response message for a Keyword Plan negative keyword mutate.
+type MutateKeywordPlanNegativeKeywordsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanNegativeKeywordResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordsResponse{}
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6976b9c3cb471824, []int{3}
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Merge(m, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) GetResults() []*MutateKeywordPlanNegativeKeywordResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan negative keyword mutate.
+type MutateKeywordPlanNegativeKeywordResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordResult) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordResult{}
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordResult) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_6976b9c3cb471824, []int{4}
+}
+
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Merge(m, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanNegativeKeywordRequest)(nil), "google.ads.googleads.v3.services.GetKeywordPlanNegativeKeywordRequest")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordsRequest)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanNegativeKeywordsRequest")
+	proto.RegisterType((*KeywordPlanNegativeKeywordOperation)(nil), "google.ads.googleads.v3.services.KeywordPlanNegativeKeywordOperation")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordsResponse)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanNegativeKeywordsResponse")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordResult)(nil), "google.ads.googleads.v3.services.MutateKeywordPlanNegativeKeywordResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_negative_keyword_service.proto", fileDescriptor_6976b9c3cb471824)
+}
+
+var fileDescriptor_6976b9c3cb471824 = []byte{
+	// 784 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6b, 0xe3, 0x46,
+	0x14, 0xc0, 0x6b, 0x39, 0xa4, 0xcd, 0x38, 0x69, 0x61, 0x4a, 0x5b, 0xe3, 0xb6, 0xd4, 0x51, 0x4c,
+	0xea, 0x9a, 0x22, 0x81, 0x7d, 0x53, 0x30, 0xad, 0x0c, 0x76, 0xd2, 0xa6, 0x49, 0x8c, 0x42, 0x53,
+	0x28, 0x06, 0x31, 0x96, 0x26, 0xae, 0x1a, 0x49, 0xa3, 0xce, 0x8c, 0x5c, 0x42, 0xc8, 0x65, 0x8f,
+	0x0b, 0x7b, 0xda, 0x6f, 0x90, 0xe3, 0x7e, 0x85, 0xfd, 0x06, 0xb9, 0xee, 0x61, 0x21, 0xa7, 0x3d,
+	0xec, 0x5e, 0xf6, 0x3b, 0x2c, 0x2c, 0xd2, 0x68, 0xfc, 0x27, 0xc4, 0x91, 0x21, 0xb9, 0x3d, 0xbd,
+	0xf7, 0xfc, 0x7b, 0x7f, 0xe7, 0x19, 0xfc, 0x31, 0x22, 0x64, 0xe4, 0x63, 0x1d, 0xb9, 0x4c, 0x17,
+	0x62, 0x22, 0x8d, 0x5b, 0x3a, 0xc3, 0x74, 0xec, 0x39, 0x98, 0xe9, 0x67, 0xf8, 0xfc, 0x7f, 0x42,
+	0x5d, 0x3b, 0xf2, 0x51, 0x68, 0x87, 0x78, 0x84, 0xb8, 0x37, 0xc6, 0xb6, 0xd4, 0x66, 0x6e, 0x5a,
+	0x44, 0x09, 0x27, 0xb0, 0x2a, 0x10, 0x1a, 0x72, 0x99, 0x36, 0xa1, 0x69, 0xe3, 0x96, 0x26, 0x69,
+	0x95, 0xee, 0xa2, 0x78, 0x14, 0x33, 0x12, 0xd3, 0xdc, 0x80, 0x22, 0x50, 0xe5, 0x3b, 0x89, 0x89,
+	0x3c, 0x1d, 0x85, 0x21, 0xe1, 0x88, 0x7b, 0x24, 0x64, 0x99, 0xf5, 0x9b, 0x19, 0xab, 0xe3, 0x7b,
+	0x38, 0xe4, 0x99, 0xe1, 0x87, 0x19, 0xc3, 0xa9, 0x87, 0x7d, 0xd7, 0x1e, 0xe2, 0x7f, 0xd0, 0xd8,
+	0x23, 0x34, 0x73, 0xc8, 0x0a, 0xd0, 0xd3, 0xaf, 0x61, 0x7c, 0x9a, 0x79, 0x05, 0x88, 0x9d, 0xdd,
+	0x62, 0xd3, 0xc8, 0xd1, 0x19, 0x47, 0x3c, 0xce, 0x82, 0xaa, 0x7d, 0x50, 0xdb, 0xc5, 0x7c, 0x5f,
+	0xa4, 0xd9, 0xf7, 0x51, 0x78, 0x98, 0xa5, 0x9e, 0xa9, 0x2c, 0xfc, 0x5f, 0x8c, 0x19, 0x87, 0x75,
+	0xb0, 0x21, 0x6b, 0xb5, 0x43, 0x14, 0xe0, 0x72, 0xa1, 0x5a, 0xa8, 0xaf, 0x75, 0x8a, 0x6f, 0x4c,
+	0xc5, 0x5a, 0x97, 0x96, 0x43, 0x14, 0x60, 0xf5, 0xa9, 0x02, 0xea, 0x07, 0x31, 0x47, 0x1c, 0x2f,
+	0xa6, 0x32, 0x89, 0xad, 0x81, 0x92, 0x13, 0x33, 0x4e, 0x02, 0x4c, 0x6d, 0xcf, 0x9d, 0x85, 0x02,
+	0xa9, 0xff, 0xcd, 0x85, 0xff, 0x02, 0x40, 0x22, 0x4c, 0x45, 0xb7, 0xca, 0x4a, 0xb5, 0x58, 0x2f,
+	0x35, 0xbb, 0x5a, 0xde, 0xd4, 0xb4, 0xc5, 0xf1, 0x8f, 0x24, 0x2d, 0x8b, 0x35, 0xa5, 0xc3, 0x1f,
+	0xc1, 0x17, 0x11, 0xa2, 0xdc, 0x43, 0xbe, 0x7d, 0x8a, 0x3c, 0x3f, 0xa6, 0xb8, 0x5c, 0xac, 0x16,
+	0xea, 0x9f, 0x59, 0x9f, 0x67, 0xea, 0x9e, 0xd0, 0xc2, 0x2d, 0xb0, 0x31, 0x46, 0xbe, 0xe7, 0x22,
+	0x8e, 0x6d, 0x12, 0xfa, 0xe7, 0xe5, 0x95, 0xd4, 0x6d, 0x5d, 0x2a, 0x8f, 0x42, 0xff, 0x5c, 0x7d,
+	0xa9, 0x80, 0xad, 0x25, 0xd2, 0x80, 0x3b, 0xa0, 0x14, 0x47, 0x29, 0x2a, 0x19, 0x5a, 0x8a, 0x2a,
+	0x35, 0x2b, 0xb2, 0x44, 0x39, 0x57, 0xad, 0x97, 0xcc, 0xf5, 0x00, 0xb1, 0x33, 0x0b, 0x08, 0xf7,
+	0x44, 0x86, 0x7f, 0x81, 0x55, 0x87, 0x62, 0xc4, 0xc5, 0x50, 0x4a, 0xcd, 0xf6, 0xc2, 0xd6, 0x4c,
+	0xd6, 0xf5, 0x9e, 0xde, 0xec, 0x7d, 0x62, 0x65, 0xb8, 0x04, 0x2c, 0xc2, 0x94, 0x95, 0x47, 0x02,
+	0x0b, 0x1c, 0x2c, 0x83, 0x55, 0x8a, 0x03, 0x32, 0x16, 0xbd, 0x5d, 0x4b, 0x2c, 0xe2, 0xbb, 0x53,
+	0x02, 0x6b, 0x93, 0x61, 0xa8, 0xaf, 0x0b, 0xe0, 0xa7, 0x25, 0x56, 0x89, 0x45, 0x24, 0x64, 0x18,
+	0xf6, 0xc0, 0x57, 0xb7, 0x26, 0x67, 0x63, 0x4a, 0x09, 0x4d, 0x63, 0x94, 0x9a, 0x50, 0x26, 0x4f,
+	0x23, 0x47, 0x3b, 0x4e, 0xdf, 0x80, 0xf5, 0xe5, 0xfc, 0x4c, 0xbb, 0x89, 0x3b, 0x1c, 0x82, 0x4f,
+	0x29, 0x66, 0xb1, 0xcf, 0xe5, 0xaa, 0xed, 0xe5, 0xaf, 0x5a, 0x5e, 0x96, 0x56, 0x0a, 0xb4, 0x24,
+	0x58, 0x3d, 0x00, 0xdb, 0xcb, 0xfd, 0x24, 0x59, 0xb3, 0x3b, 0x1e, 0xde, 0xfc, 0x9b, 0x6b, 0xbe,
+	0x5b, 0x01, 0x9b, 0x8b, 0x49, 0xc7, 0x22, 0x4b, 0xf8, 0xa1, 0x00, 0xbe, 0xbf, 0xf7, 0xb1, 0xc3,
+	0x5e, 0x7e, 0xa5, 0xcb, 0x5c, 0x8b, 0xca, 0xc3, 0x16, 0x45, 0xfd, 0xf3, 0xc6, 0x9c, 0x2f, 0xfa,
+	0xc9, 0xab, 0xb7, 0xcf, 0x95, 0x5f, 0x60, 0x3b, 0x39, 0xb9, 0x17, 0x73, 0x96, 0xb6, 0x3c, 0x13,
+	0x4c, 0x6f, 0xc8, 0x1b, 0x7c, 0xd7, 0x96, 0xe8, 0x8d, 0x4b, 0x78, 0xa5, 0x80, 0xcd, 0xdc, 0x75,
+	0x82, 0xbf, 0x3f, 0x7c, 0xda, 0xf2, 0xbc, 0x55, 0xf6, 0x1f, 0x85, 0x25, 0xf6, 0x5b, 0x75, 0x6f,
+	0xcc, 0xaf, 0x67, 0x8e, 0xe5, 0xcf, 0xd3, 0xa3, 0x95, 0xb6, 0xa7, 0xab, 0xfe, 0x9a, 0xb4, 0x67,
+	0xda, 0x8f, 0x8b, 0x19, 0xe7, 0x76, 0xe3, 0xf2, 0xbe, 0xee, 0x18, 0x41, 0x9a, 0x85, 0x51, 0x68,
+	0x54, 0xbe, 0xbd, 0x36, 0xcb, 0xd3, 0x4c, 0x33, 0x29, 0xf2, 0x98, 0xe6, 0x90, 0xa0, 0xf3, 0x4c,
+	0x01, 0x35, 0x87, 0x04, 0xb9, 0x55, 0x75, 0xb6, 0x73, 0xb7, 0xb1, 0x9f, 0xdc, 0xb4, 0x7e, 0xe1,
+	0xef, 0xbd, 0x8c, 0x35, 0x22, 0x3e, 0x0a, 0x47, 0x1a, 0xa1, 0x23, 0x7d, 0x84, 0xc3, 0xf4, 0xe2,
+	0xe9, 0xd3, 0xe8, 0x8b, 0xff, 0xe9, 0x77, 0xa4, 0x70, 0xa5, 0x14, 0x77, 0x4d, 0xf3, 0x85, 0x52,
+	0xdd, 0x15, 0x40, 0xd3, 0x65, 0x9a, 0x10, 0x13, 0xe9, 0xa4, 0xa5, 0x65, 0x81, 0xd9, 0xb5, 0x74,
+	0x19, 0x98, 0x2e, 0x1b, 0x4c, 0x5c, 0x06, 0x27, 0xad, 0x81, 0x74, 0x79, 0xaf, 0xd4, 0x84, 0xde,
+	0x30, 0x4c, 0x97, 0x19, 0xc6, 0xc4, 0xc9, 0x30, 0x4e, 0x5a, 0x86, 0x21, 0xdd, 0x86, 0xab, 0x69,
+	0x9e, 0xad, 0x8f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x32, 0xf9, 0xc4, 0x90, 0x08, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanNegativeKeywordServiceClient is the client API for KeywordPlanNegativeKeywordService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanNegativeKeywordServiceClient interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlanNegativeKeyword(ctx context.Context, in *GetKeywordPlanNegativeKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanNegativeKeyword, error)
+	// Creates, updates, or removes Keyword Plan negative keywords. Operation
+	// statuses are returned.
+	MutateKeywordPlanNegativeKeywords(ctx context.Context, in *MutateKeywordPlanNegativeKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanNegativeKeywordsResponse, error)
+}
+
+type keywordPlanNegativeKeywordServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanNegativeKeywordServiceClient(cc grpc.ClientConnInterface) KeywordPlanNegativeKeywordServiceClient {
+	return &keywordPlanNegativeKeywordServiceClient{cc}
+}
+
+func (c *keywordPlanNegativeKeywordServiceClient) GetKeywordPlanNegativeKeyword(ctx context.Context, in *GetKeywordPlanNegativeKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanNegativeKeyword, error) {
+	out := new(resources.KeywordPlanNegativeKeyword)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService/GetKeywordPlanNegativeKeyword", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanNegativeKeywordServiceClient) MutateKeywordPlanNegativeKeywords(ctx context.Context, in *MutateKeywordPlanNegativeKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanNegativeKeywordsResponse, error) {
+	out := new(MutateKeywordPlanNegativeKeywordsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService/MutateKeywordPlanNegativeKeywords", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanNegativeKeywordServiceServer is the server API for KeywordPlanNegativeKeywordService service.
+type KeywordPlanNegativeKeywordServiceServer interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlanNegativeKeyword(context.Context, *GetKeywordPlanNegativeKeywordRequest) (*resources.KeywordPlanNegativeKeyword, error)
+	// Creates, updates, or removes Keyword Plan negative keywords. Operation
+	// statuses are returned.
+	MutateKeywordPlanNegativeKeywords(context.Context, *MutateKeywordPlanNegativeKeywordsRequest) (*MutateKeywordPlanNegativeKeywordsResponse, error)
+}
+
+// UnimplementedKeywordPlanNegativeKeywordServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanNegativeKeywordServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanNegativeKeywordServiceServer) GetKeywordPlanNegativeKeyword(ctx context.Context, req *GetKeywordPlanNegativeKeywordRequest) (*resources.KeywordPlanNegativeKeyword, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetKeywordPlanNegativeKeyword not implemented")
+}
+func (*UnimplementedKeywordPlanNegativeKeywordServiceServer) MutateKeywordPlanNegativeKeywords(ctx context.Context, req *MutateKeywordPlanNegativeKeywordsRequest) (*MutateKeywordPlanNegativeKeywordsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateKeywordPlanNegativeKeywords not implemented")
+}
+
+func RegisterKeywordPlanNegativeKeywordServiceServer(s *grpc.Server, srv KeywordPlanNegativeKeywordServiceServer) {
+	s.RegisterService(&_KeywordPlanNegativeKeywordService_serviceDesc, srv)
+}
+
+func _KeywordPlanNegativeKeywordService_GetKeywordPlanNegativeKeyword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanNegativeKeywordRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).GetKeywordPlanNegativeKeyword(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService/GetKeywordPlanNegativeKeyword",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).GetKeywordPlanNegativeKeyword(ctx, req.(*GetKeywordPlanNegativeKeywordRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanNegativeKeywordService_MutateKeywordPlanNegativeKeywords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanNegativeKeywordsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).MutateKeywordPlanNegativeKeywords(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService/MutateKeywordPlanNegativeKeywords",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).MutateKeywordPlanNegativeKeywords(ctx, req.(*MutateKeywordPlanNegativeKeywordsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanNegativeKeywordService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanNegativeKeywordService",
+	HandlerType: (*KeywordPlanNegativeKeywordServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanNegativeKeyword",
+			Handler:    _KeywordPlanNegativeKeywordService_GetKeywordPlanNegativeKeyword_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanNegativeKeywords",
+			Handler:    _KeywordPlanNegativeKeywordService_MutateKeywordPlanNegativeKeywords_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_negative_keyword_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_plan_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_plan_service.pb.go
new file mode 100644
index 0000000..54fbe9e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_plan_service.pb.go
@@ -0,0 +1,1126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_plan_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordPlanService.GetKeywordPlan][google.ads.googleads.v3.services.KeywordPlanService.GetKeywordPlan].
+type GetKeywordPlanRequest struct {
+	// Required. The resource name of the plan to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanRequest) Reset()         { *m = GetKeywordPlanRequest{} }
+func (m *GetKeywordPlanRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanRequest) ProtoMessage()    {}
+func (*GetKeywordPlanRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{0}
+}
+
+func (m *GetKeywordPlanRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordPlanRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanRequest.Merge(m, src)
+}
+func (m *GetKeywordPlanRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanRequest.Size(m)
+}
+func (m *GetKeywordPlanRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanService.MutateKeywordPlans][google.ads.googleads.v3.services.KeywordPlanService.MutateKeywordPlans].
+type MutateKeywordPlansRequest struct {
+	// Required. The ID of the customer whose keyword plans are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual keyword plans.
+	Operations []*KeywordPlanOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlansRequest) Reset()         { *m = MutateKeywordPlansRequest{} }
+func (m *MutateKeywordPlansRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansRequest) ProtoMessage()    {}
+func (*MutateKeywordPlansRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{1}
+}
+
+func (m *MutateKeywordPlansRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlansRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansRequest.Merge(m, src)
+}
+func (m *MutateKeywordPlansRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Size(m)
+}
+func (m *MutateKeywordPlansRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlansRequest) GetOperations() []*KeywordPlanOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlansRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateKeywordPlansRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on a keyword plan.
+type KeywordPlanOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanOperation_Create
+	//	*KeywordPlanOperation_Update
+	//	*KeywordPlanOperation_Remove
+	Operation            isKeywordPlanOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *KeywordPlanOperation) Reset()         { *m = KeywordPlanOperation{} }
+func (m *KeywordPlanOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanOperation) ProtoMessage()    {}
+func (*KeywordPlanOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{2}
+}
+
+func (m *KeywordPlanOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanOperation.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanOperation.Merge(m, src)
+}
+func (m *KeywordPlanOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanOperation.Size(m)
+}
+func (m *KeywordPlanOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanOperation_Operation interface {
+	isKeywordPlanOperation_Operation()
+}
+
+type KeywordPlanOperation_Create struct {
+	Create *resources.KeywordPlan `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanOperation_Update struct {
+	Update *resources.KeywordPlan `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanOperation_Create) isKeywordPlanOperation_Operation() {}
+
+func (*KeywordPlanOperation_Update) isKeywordPlanOperation_Operation() {}
+
+func (*KeywordPlanOperation_Remove) isKeywordPlanOperation_Operation() {}
+
+func (m *KeywordPlanOperation) GetOperation() isKeywordPlanOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetCreate() *resources.KeywordPlan {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetUpdate() *resources.KeywordPlan {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*KeywordPlanOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*KeywordPlanOperation_Create)(nil),
+		(*KeywordPlanOperation_Update)(nil),
+		(*KeywordPlanOperation_Remove)(nil),
+	}
+}
+
+// Response message for a keyword plan mutate.
+type MutateKeywordPlansResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateKeywordPlansResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateKeywordPlansResponse) Reset()         { *m = MutateKeywordPlansResponse{} }
+func (m *MutateKeywordPlansResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansResponse) ProtoMessage()    {}
+func (*MutateKeywordPlansResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{3}
+}
+
+func (m *MutateKeywordPlansResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlansResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansResponse.Merge(m, src)
+}
+func (m *MutateKeywordPlansResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Size(m)
+}
+func (m *MutateKeywordPlansResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateKeywordPlansResponse) GetResults() []*MutateKeywordPlansResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the keyword plan mutate.
+type MutateKeywordPlansResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlansResult) Reset()         { *m = MutateKeywordPlansResult{} }
+func (m *MutateKeywordPlansResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansResult) ProtoMessage()    {}
+func (*MutateKeywordPlansResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{4}
+}
+
+func (m *MutateKeywordPlansResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansResult.Marshal(b, m, deterministic)
+}
+func (m *MutateKeywordPlansResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansResult.Merge(m, src)
+}
+func (m *MutateKeywordPlansResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansResult.Size(m)
+}
+func (m *MutateKeywordPlansResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanService.GenerateForecastMetrics][google.ads.googleads.v3.services.KeywordPlanService.GenerateForecastMetrics].
+type GenerateForecastMetricsRequest struct {
+	// Required. The resource name of the keyword plan to be forecasted.
+	KeywordPlan          string   `protobuf:"bytes,1,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenerateForecastMetricsRequest) Reset()         { *m = GenerateForecastMetricsRequest{} }
+func (m *GenerateForecastMetricsRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateForecastMetricsRequest) ProtoMessage()    {}
+func (*GenerateForecastMetricsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{5}
+}
+
+func (m *GenerateForecastMetricsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Unmarshal(m, b)
+}
+func (m *GenerateForecastMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Marshal(b, m, deterministic)
+}
+func (m *GenerateForecastMetricsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateForecastMetricsRequest.Merge(m, src)
+}
+func (m *GenerateForecastMetricsRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Size(m)
+}
+func (m *GenerateForecastMetricsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateForecastMetricsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateForecastMetricsRequest proto.InternalMessageInfo
+
+func (m *GenerateForecastMetricsRequest) GetKeywordPlan() string {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return ""
+}
+
+// Response message for [KeywordPlanService.GenerateForecastMetrics][google.ads.googleads.v3.services.KeywordPlanService.GenerateForecastMetrics].
+type GenerateForecastMetricsResponse struct {
+	// List of campaign forecasts.
+	// One maximum.
+	CampaignForecasts []*KeywordPlanCampaignForecast `protobuf:"bytes,1,rep,name=campaign_forecasts,json=campaignForecasts,proto3" json:"campaign_forecasts,omitempty"`
+	// List of ad group forecasts.
+	AdGroupForecasts []*KeywordPlanAdGroupForecast `protobuf:"bytes,2,rep,name=ad_group_forecasts,json=adGroupForecasts,proto3" json:"ad_group_forecasts,omitempty"`
+	// List of keyword forecasts.
+	KeywordForecasts     []*KeywordPlanKeywordForecast `protobuf:"bytes,3,rep,name=keyword_forecasts,json=keywordForecasts,proto3" json:"keyword_forecasts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *GenerateForecastMetricsResponse) Reset()         { *m = GenerateForecastMetricsResponse{} }
+func (m *GenerateForecastMetricsResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateForecastMetricsResponse) ProtoMessage()    {}
+func (*GenerateForecastMetricsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{6}
+}
+
+func (m *GenerateForecastMetricsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Unmarshal(m, b)
+}
+func (m *GenerateForecastMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Marshal(b, m, deterministic)
+}
+func (m *GenerateForecastMetricsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateForecastMetricsResponse.Merge(m, src)
+}
+func (m *GenerateForecastMetricsResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Size(m)
+}
+func (m *GenerateForecastMetricsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateForecastMetricsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateForecastMetricsResponse proto.InternalMessageInfo
+
+func (m *GenerateForecastMetricsResponse) GetCampaignForecasts() []*KeywordPlanCampaignForecast {
+	if m != nil {
+		return m.CampaignForecasts
+	}
+	return nil
+}
+
+func (m *GenerateForecastMetricsResponse) GetAdGroupForecasts() []*KeywordPlanAdGroupForecast {
+	if m != nil {
+		return m.AdGroupForecasts
+	}
+	return nil
+}
+
+func (m *GenerateForecastMetricsResponse) GetKeywordForecasts() []*KeywordPlanKeywordForecast {
+	if m != nil {
+		return m.KeywordForecasts
+	}
+	return nil
+}
+
+// A campaign forecast.
+type KeywordPlanCampaignForecast struct {
+	// The resource name of the Keyword Plan campaign related to the forecast.
+	//
+	// `customers/{customer_id}/keywordPlanCampaigns/{keyword+plan_campaign_id}`
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The forecast for the Keyword Plan campaign.
+	CampaignForecast     *ForecastMetrics `protobuf:"bytes,2,opt,name=campaign_forecast,json=campaignForecast,proto3" json:"campaign_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanCampaignForecast) Reset()         { *m = KeywordPlanCampaignForecast{} }
+func (m *KeywordPlanCampaignForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignForecast) ProtoMessage()    {}
+func (*KeywordPlanCampaignForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{7}
+}
+
+func (m *KeywordPlanCampaignForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanCampaignForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignForecast.Merge(m, src)
+}
+func (m *KeywordPlanCampaignForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Size(m)
+}
+func (m *KeywordPlanCampaignForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaignForecast) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignForecast) GetCampaignForecast() *ForecastMetrics {
+	if m != nil {
+		return m.CampaignForecast
+	}
+	return nil
+}
+
+// An ad group forecast.
+type KeywordPlanAdGroupForecast struct {
+	// The resource name of the Keyword Plan ad group related to the forecast.
+	//
+	// `customers/{customer_id}/keywordPlanAdGroups/{keyword_plan_ad_group_id}`
+	KeywordPlanAdGroup *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The forecast for the Keyword Plan ad group.
+	AdGroupForecast      *ForecastMetrics `protobuf:"bytes,2,opt,name=ad_group_forecast,json=adGroupForecast,proto3" json:"ad_group_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupForecast) Reset()         { *m = KeywordPlanAdGroupForecast{} }
+func (m *KeywordPlanAdGroupForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupForecast) ProtoMessage()    {}
+func (*KeywordPlanAdGroupForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{8}
+}
+
+func (m *KeywordPlanAdGroupForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupForecast.Merge(m, src)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Size(m)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroupForecast) GetKeywordPlanAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupForecast) GetAdGroupForecast() *ForecastMetrics {
+	if m != nil {
+		return m.AdGroupForecast
+	}
+	return nil
+}
+
+// A keyword forecast.
+type KeywordPlanKeywordForecast struct {
+	// The resource name of the Keyword Plan keyword related to the forecast.
+	//
+	// `customers/{customer_id}/keywordPlanAdGroupKeywords/{keyword_plan_ad_group_keyword_id}`
+	KeywordPlanAdGroupKeyword *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_ad_group_keyword,json=keywordPlanAdGroupKeyword,proto3" json:"keyword_plan_ad_group_keyword,omitempty"`
+	// The forecast for the Keyword Plan keyword.
+	KeywordForecast      *ForecastMetrics `protobuf:"bytes,2,opt,name=keyword_forecast,json=keywordForecast,proto3" json:"keyword_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanKeywordForecast) Reset()         { *m = KeywordPlanKeywordForecast{} }
+func (m *KeywordPlanKeywordForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordForecast) ProtoMessage()    {}
+func (*KeywordPlanKeywordForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{9}
+}
+
+func (m *KeywordPlanKeywordForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanKeywordForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordForecast.Merge(m, src)
+}
+func (m *KeywordPlanKeywordForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Size(m)
+}
+func (m *KeywordPlanKeywordForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordForecast) GetKeywordPlanAdGroupKeyword() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroupKeyword
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordForecast) GetKeywordForecast() *ForecastMetrics {
+	if m != nil {
+		return m.KeywordForecast
+	}
+	return nil
+}
+
+// Forecast metrics.
+type ForecastMetrics struct {
+	// Impressions
+	Impressions *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Ctr
+	Ctr *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=ctr,proto3" json:"ctr,omitempty"`
+	// AVG cpc
+	AverageCpc *wrappers.Int64Value `protobuf:"bytes,3,opt,name=average_cpc,json=averageCpc,proto3" json:"average_cpc,omitempty"`
+	// Clicks
+	Clicks *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Cost
+	CostMicros           *wrappers.Int64Value `protobuf:"bytes,6,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ForecastMetrics) Reset()         { *m = ForecastMetrics{} }
+func (m *ForecastMetrics) String() string { return proto.CompactTextString(m) }
+func (*ForecastMetrics) ProtoMessage()    {}
+func (*ForecastMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{10}
+}
+
+func (m *ForecastMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ForecastMetrics.Unmarshal(m, b)
+}
+func (m *ForecastMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ForecastMetrics.Marshal(b, m, deterministic)
+}
+func (m *ForecastMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ForecastMetrics.Merge(m, src)
+}
+func (m *ForecastMetrics) XXX_Size() int {
+	return xxx_messageInfo_ForecastMetrics.Size(m)
+}
+func (m *ForecastMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_ForecastMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ForecastMetrics proto.InternalMessageInfo
+
+func (m *ForecastMetrics) GetImpressions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Ctr
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetAverageCpc() *wrappers.Int64Value {
+	if m != nil {
+		return m.AverageCpc
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetClicks() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+// Request message for [KeywordPlanService.GenerateHistoricalMetrics][google.ads.googleads.v3.services.KeywordPlanService.GenerateHistoricalMetrics].
+type GenerateHistoricalMetricsRequest struct {
+	// Required. The resource name of the keyword plan of which historical metrics are
+	// requested.
+	KeywordPlan          string   `protobuf:"bytes,1,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenerateHistoricalMetricsRequest) Reset()         { *m = GenerateHistoricalMetricsRequest{} }
+func (m *GenerateHistoricalMetricsRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateHistoricalMetricsRequest) ProtoMessage()    {}
+func (*GenerateHistoricalMetricsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{11}
+}
+
+func (m *GenerateHistoricalMetricsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Unmarshal(m, b)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Marshal(b, m, deterministic)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateHistoricalMetricsRequest.Merge(m, src)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Size(m)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateHistoricalMetricsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateHistoricalMetricsRequest proto.InternalMessageInfo
+
+func (m *GenerateHistoricalMetricsRequest) GetKeywordPlan() string {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return ""
+}
+
+// Response message for [KeywordPlanService.GenerateHistoricalMetrics][google.ads.googleads.v3.services.KeywordPlanService.GenerateHistoricalMetrics].
+type GenerateHistoricalMetricsResponse struct {
+	// List of keyword historical metrics.
+	Metrics              []*KeywordPlanKeywordHistoricalMetrics `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *GenerateHistoricalMetricsResponse) Reset()         { *m = GenerateHistoricalMetricsResponse{} }
+func (m *GenerateHistoricalMetricsResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateHistoricalMetricsResponse) ProtoMessage()    {}
+func (*GenerateHistoricalMetricsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{12}
+}
+
+func (m *GenerateHistoricalMetricsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Unmarshal(m, b)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Marshal(b, m, deterministic)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateHistoricalMetricsResponse.Merge(m, src)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Size(m)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateHistoricalMetricsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateHistoricalMetricsResponse proto.InternalMessageInfo
+
+func (m *GenerateHistoricalMetricsResponse) GetMetrics() []*KeywordPlanKeywordHistoricalMetrics {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+// A keyword historical metrics.
+type KeywordPlanKeywordHistoricalMetrics struct {
+	// The text of the query associated with one or more ad_group_keywords in the
+	// plan.
+	//
+	// Note that we de-dupe your keywords list, eliminating close variants before
+	// returning the plan's keywords as text. For example, if your plan originally
+	// contained the keywords 'car' and 'cars', the returned search query will
+	// only contain 'car'.
+	SearchQuery *wrappers.StringValue `protobuf:"bytes,1,opt,name=search_query,json=searchQuery,proto3" json:"search_query,omitempty"`
+	// The historical metrics for the query associated with one or more
+	// ad_group_keywords in the plan.
+	KeywordMetrics       *common.KeywordPlanHistoricalMetrics `protobuf:"bytes,2,opt,name=keyword_metrics,json=keywordMetrics,proto3" json:"keyword_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *KeywordPlanKeywordHistoricalMetrics) Reset()         { *m = KeywordPlanKeywordHistoricalMetrics{} }
+func (m *KeywordPlanKeywordHistoricalMetrics) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordHistoricalMetrics) ProtoMessage()    {}
+func (*KeywordPlanKeywordHistoricalMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_512873c5d5249363, []int{13}
+}
+
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Marshal(b, m, deterministic)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Merge(m, src)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Size(m)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordHistoricalMetrics) GetSearchQuery() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchQuery
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordHistoricalMetrics) GetKeywordMetrics() *common.KeywordPlanHistoricalMetrics {
+	if m != nil {
+		return m.KeywordMetrics
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanRequest)(nil), "google.ads.googleads.v3.services.GetKeywordPlanRequest")
+	proto.RegisterType((*MutateKeywordPlansRequest)(nil), "google.ads.googleads.v3.services.MutateKeywordPlansRequest")
+	proto.RegisterType((*KeywordPlanOperation)(nil), "google.ads.googleads.v3.services.KeywordPlanOperation")
+	proto.RegisterType((*MutateKeywordPlansResponse)(nil), "google.ads.googleads.v3.services.MutateKeywordPlansResponse")
+	proto.RegisterType((*MutateKeywordPlansResult)(nil), "google.ads.googleads.v3.services.MutateKeywordPlansResult")
+	proto.RegisterType((*GenerateForecastMetricsRequest)(nil), "google.ads.googleads.v3.services.GenerateForecastMetricsRequest")
+	proto.RegisterType((*GenerateForecastMetricsResponse)(nil), "google.ads.googleads.v3.services.GenerateForecastMetricsResponse")
+	proto.RegisterType((*KeywordPlanCampaignForecast)(nil), "google.ads.googleads.v3.services.KeywordPlanCampaignForecast")
+	proto.RegisterType((*KeywordPlanAdGroupForecast)(nil), "google.ads.googleads.v3.services.KeywordPlanAdGroupForecast")
+	proto.RegisterType((*KeywordPlanKeywordForecast)(nil), "google.ads.googleads.v3.services.KeywordPlanKeywordForecast")
+	proto.RegisterType((*ForecastMetrics)(nil), "google.ads.googleads.v3.services.ForecastMetrics")
+	proto.RegisterType((*GenerateHistoricalMetricsRequest)(nil), "google.ads.googleads.v3.services.GenerateHistoricalMetricsRequest")
+	proto.RegisterType((*GenerateHistoricalMetricsResponse)(nil), "google.ads.googleads.v3.services.GenerateHistoricalMetricsResponse")
+	proto.RegisterType((*KeywordPlanKeywordHistoricalMetrics)(nil), "google.ads.googleads.v3.services.KeywordPlanKeywordHistoricalMetrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_plan_service.proto", fileDescriptor_512873c5d5249363)
+}
+
+var fileDescriptor_512873c5d5249363 = []byte{
+	// 1299 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcf, 0x73, 0xdb, 0xc4,
+	0x17, 0xff, 0xca, 0xf9, 0x92, 0xd2, 0xe7, 0xf4, 0x47, 0xb6, 0x94, 0xba, 0x6e, 0x69, 0x83, 0xda,
+	0x81, 0x4c, 0x86, 0x91, 0x69, 0xd2, 0x29, 0x8c, 0xd2, 0x52, 0x94, 0xd2, 0x38, 0x2d, 0x84, 0x06,
+	0x17, 0x72, 0x80, 0x50, 0xcd, 0x46, 0xde, 0xb8, 0xc2, 0x92, 0x56, 0xdd, 0x95, 0xdc, 0xc9, 0x74,
+	0x7a, 0x61, 0x98, 0xe1, 0xc6, 0x85, 0xff, 0x80, 0x23, 0x57, 0x6e, 0xdc, 0xb8, 0x76, 0x60, 0x38,
+	0x70, 0xcb, 0x89, 0x03, 0xd3, 0x43, 0x87, 0xbf, 0x01, 0x18, 0x69, 0x77, 0x6d, 0x59, 0xb2, 0x12,
+	0xd7, 0xbd, 0xad, 0x77, 0x3f, 0xef, 0xf3, 0xf6, 0xf3, 0xde, 0xdb, 0xa7, 0x97, 0xc0, 0x72, 0x87,
+	0xd2, 0x8e, 0x47, 0x1a, 0xb8, 0xcd, 0x1b, 0x62, 0x99, 0xac, 0x7a, 0x4b, 0x0d, 0x4e, 0x58, 0xcf,
+	0x75, 0x08, 0x6f, 0x74, 0xc9, 0xee, 0x43, 0xca, 0xda, 0x76, 0xe8, 0xe1, 0xc0, 0x96, 0xbb, 0x46,
+	0xc8, 0x68, 0x44, 0xd1, 0x9c, 0xb0, 0x30, 0x70, 0x9b, 0x1b, 0x7d, 0x63, 0xa3, 0xb7, 0x64, 0x28,
+	0xe3, 0xfa, 0xbb, 0x65, 0xf4, 0x0e, 0xf5, 0x7d, 0x1a, 0x0c, 0x93, 0x8b, 0x3d, 0xc1, 0x5d, 0xbf,
+	0x5c, 0x66, 0xc9, 0x08, 0xa7, 0x31, 0xcb, 0xdf, 0x4c, 0x5a, 0x9d, 0x55, 0x56, 0xa1, 0xdb, 0xc0,
+	0x41, 0x40, 0x23, 0x1c, 0xb9, 0x34, 0xe0, 0xf2, 0xf4, 0x54, 0xe6, 0xd4, 0xf1, 0x5c, 0x12, 0x44,
+	0xf2, 0xe0, 0x7c, 0xe6, 0x60, 0xc7, 0x25, 0x5e, 0xdb, 0xde, 0x26, 0xf7, 0x71, 0xcf, 0xa5, 0x4c,
+	0x02, 0xa4, 0xd2, 0x46, 0xfa, 0x6b, 0x3b, 0xde, 0x91, 0x28, 0x1f, 0xf3, 0xae, 0x44, 0x9c, 0xcb,
+	0x23, 0x1e, 0x32, 0x1c, 0x86, 0x84, 0xe5, 0x7d, 0xb3, 0xd0, 0x69, 0xf0, 0x08, 0x47, 0xb1, 0x3c,
+	0xd0, 0x2d, 0x38, 0xd9, 0x24, 0xd1, 0x87, 0x42, 0xcb, 0x86, 0x87, 0x83, 0x16, 0x79, 0x10, 0x13,
+	0x1e, 0xa1, 0x79, 0x38, 0xa2, 0xb4, 0xda, 0x01, 0xf6, 0x49, 0x4d, 0x9b, 0xd3, 0xe6, 0x0f, 0xaf,
+	0x4c, 0xfd, 0x69, 0x55, 0x5a, 0x33, 0xea, 0xe4, 0x63, 0xec, 0x13, 0xfd, 0x6f, 0x0d, 0x4e, 0xaf,
+	0xc7, 0x11, 0x8e, 0x48, 0x86, 0x86, 0x2b, 0x9e, 0x8b, 0x50, 0x75, 0x62, 0x1e, 0x51, 0x9f, 0x30,
+	0xdb, 0x6d, 0x67, 0x59, 0x40, 0xed, 0xdf, 0x6a, 0xa3, 0x2f, 0x00, 0x68, 0x48, 0x98, 0x88, 0x57,
+	0xad, 0x32, 0x37, 0x35, 0x5f, 0x5d, 0xbc, 0x62, 0x1c, 0x94, 0x60, 0x23, 0xe3, 0xf0, 0x8e, 0x32,
+	0x97, 0xe4, 0x03, 0x3a, 0xf4, 0x26, 0x1c, 0x0b, 0x31, 0x8b, 0x5c, 0xec, 0xd9, 0x3b, 0xd8, 0xf5,
+	0x62, 0x46, 0x6a, 0x53, 0x73, 0xda, 0xfc, 0xcb, 0xad, 0xa3, 0x72, 0x7b, 0x55, 0xec, 0xa2, 0x0b,
+	0x70, 0xa4, 0x87, 0x3d, 0xb7, 0x8d, 0x23, 0x62, 0xd3, 0xc0, 0xdb, 0xad, 0xfd, 0x3f, 0x85, 0xcd,
+	0xa8, 0xcd, 0x3b, 0x81, 0xb7, 0xab, 0x7f, 0x57, 0x81, 0x57, 0x46, 0xf9, 0x45, 0xcb, 0x50, 0x8d,
+	0xc3, 0xd4, 0x36, 0x49, 0x4c, 0x6a, 0x5b, 0x5d, 0xac, 0x2b, 0x11, 0x2a, 0x33, 0xc6, 0x6a, 0x92,
+	0xbb, 0x75, 0xcc, 0xbb, 0x2d, 0x10, 0xf0, 0x64, 0x8d, 0xd6, 0x60, 0xda, 0x61, 0x04, 0x47, 0x22,
+	0xce, 0xd5, 0x45, 0xa3, 0x54, 0x7c, 0xbf, 0x02, 0xb3, 0xea, 0xd7, 0xfe, 0xd7, 0x92, 0xf6, 0x09,
+	0x93, 0xe0, 0xad, 0x55, 0x26, 0x65, 0x12, 0xf6, 0xa8, 0x06, 0xd3, 0x8c, 0xf8, 0xb4, 0x27, 0xc2,
+	0x75, 0x38, 0x39, 0x11, 0xbf, 0x57, 0xaa, 0x70, 0xb8, 0x1f, 0x5f, 0xfd, 0x67, 0x0d, 0xea, 0xa3,
+	0xf2, 0xcf, 0x43, 0x1a, 0x70, 0x82, 0x56, 0xe1, 0x64, 0x2e, 0xfa, 0x36, 0x61, 0x8c, 0xb2, 0x94,
+	0xb4, 0xba, 0x88, 0xd4, 0xf5, 0x58, 0xe8, 0x18, 0x77, 0xd3, 0xd2, 0x6c, 0x9d, 0x18, 0xce, 0xcb,
+	0xcd, 0x04, 0x8e, 0x3e, 0x85, 0x43, 0x8c, 0xf0, 0xd8, 0x8b, 0x54, 0x7d, 0x98, 0x07, 0xd7, 0xc7,
+	0xc8, 0x6b, 0xc5, 0x5e, 0xd4, 0x52, 0x54, 0xfa, 0x75, 0xa8, 0x95, 0x81, 0x92, 0x72, 0x18, 0xf1,
+	0x04, 0x72, 0xd5, 0xbf, 0x06, 0xe7, 0x9a, 0x24, 0x48, 0x62, 0x41, 0x56, 0x29, 0x23, 0x0e, 0xe6,
+	0xd1, 0x3a, 0x89, 0x98, 0xeb, 0xf4, 0x5f, 0xc0, 0x1b, 0x30, 0x93, 0xed, 0x15, 0xd9, 0x27, 0x50,
+	0xed, 0x0e, 0xbc, 0xea, 0x4f, 0x2b, 0x70, 0xbe, 0x94, 0x4a, 0x06, 0xd3, 0x03, 0xe4, 0x60, 0x3f,
+	0xc4, 0x6e, 0x27, 0xb0, 0x77, 0x24, 0x86, 0xd7, 0xb4, 0x34, 0x1e, 0xd7, 0x9e, 0xeb, 0xbd, 0xdc,
+	0x90, 0x34, 0xca, 0x53, 0x6b, 0xd6, 0xc9, 0xed, 0x70, 0xf4, 0x15, 0x20, 0xdc, 0xb6, 0x3b, 0x8c,
+	0xc6, 0x61, 0xc6, 0x9b, 0x88, 0xfe, 0xd5, 0xe7, 0xf2, 0x66, 0xb5, 0x9b, 0x09, 0x4b, 0xdf, 0xd9,
+	0x71, 0x3c, 0xbc, 0xc1, 0x91, 0x0b, 0xb3, 0x2a, 0x4a, 0x03, 0x57, 0x53, 0x13, 0xb8, 0x92, 0xcb,
+	0x81, 0xab, 0xee, 0xf0, 0x06, 0xd7, 0x7f, 0xd7, 0xe0, 0xcc, 0x3e, 0x91, 0x40, 0x1b, 0x70, 0x72,
+	0xf8, 0xcb, 0x20, 0x01, 0xf2, 0x69, 0x9e, 0x2d, 0x3c, 0xe9, 0xbb, 0x11, 0x73, 0x83, 0xce, 0x26,
+	0xf6, 0x62, 0xd2, 0x3a, 0xd1, 0x2d, 0x32, 0xa3, 0x7b, 0x30, 0x5b, 0x48, 0x9b, 0x7c, 0x9e, 0x97,
+	0x0e, 0x16, 0x97, 0x2f, 0x86, 0xe3, 0xf9, 0x4c, 0xe9, 0xbf, 0x6a, 0x50, 0x2f, 0x8f, 0x36, 0xba,
+	0x93, 0x13, 0xa4, 0x92, 0x3a, 0x96, 0x20, 0xd4, 0x2d, 0x10, 0xa3, 0x2f, 0x61, 0xb6, 0x50, 0x18,
+	0x93, 0xeb, 0x39, 0x96, 0x2b, 0x06, 0x7d, 0x6f, 0x58, 0x4e, 0x2e, 0xa3, 0xe8, 0x1e, 0xbc, 0x36,
+	0x52, 0x8e, 0x2d, 0x77, 0xc7, 0x92, 0x75, 0xba, 0x28, 0x4b, 0xfa, 0x41, 0x5b, 0x70, 0x3c, 0x5f,
+	0x8a, 0x2f, 0x20, 0x2e, 0x57, 0x7e, 0xfa, 0x4f, 0x15, 0x38, 0x96, 0x03, 0xa1, 0xf7, 0xa0, 0xea,
+	0xfa, 0x21, 0x23, 0x9c, 0xa7, 0xdf, 0xbf, 0xb2, 0xfb, 0x7f, 0x40, 0xe3, 0x6d, 0x8f, 0x88, 0xfb,
+	0x67, 0x0d, 0x90, 0x01, 0x53, 0x4e, 0xc4, 0xe4, 0x25, 0xf7, 0xb7, 0x4b, 0x80, 0xe8, 0x2a, 0x54,
+	0x71, 0x8f, 0x30, 0xdc, 0x21, 0xb6, 0x13, 0x3a, 0xb2, 0x13, 0x9f, 0x29, 0xd8, 0xdd, 0x0a, 0xa2,
+	0x2b, 0x97, 0x85, 0x19, 0x48, 0xfc, 0x8d, 0xd0, 0x41, 0x97, 0x61, 0xda, 0xf1, 0x5c, 0xa7, 0xcb,
+	0x6b, 0x2f, 0x8d, 0xe1, 0x50, 0x62, 0x13, 0x9f, 0x0e, 0xe5, 0x91, 0xed, 0xbb, 0x0e, 0xa3, 0xbc,
+	0x36, 0x3d, 0x86, 0xcf, 0x04, 0xbf, 0x9e, 0xc2, 0xf5, 0xdb, 0x30, 0xa7, 0x7a, 0xe3, 0x9a, 0xcb,
+	0x23, 0xca, 0x5c, 0x07, 0x7b, 0x13, 0x36, 0xda, 0x6f, 0x34, 0x78, 0x7d, 0x1f, 0x32, 0xd9, 0x6a,
+	0x6d, 0x38, 0xe4, 0x8b, 0x2d, 0xd9, 0x5f, 0x6f, 0x4e, 0xd2, 0x86, 0x8a, 0xfc, 0x8a, 0x55, 0xff,
+	0x4d, 0x83, 0x0b, 0x63, 0x18, 0xa0, 0xeb, 0x30, 0xc3, 0x09, 0x66, 0xce, 0x7d, 0xfb, 0x41, 0x4c,
+	0xd8, 0xee, 0x58, 0xd5, 0x5d, 0x15, 0x16, 0x9f, 0x24, 0x06, 0x88, 0x80, 0x2a, 0x42, 0x5b, 0x29,
+	0x12, 0x95, 0x52, 0xde, 0x58, 0xe5, 0x30, 0x9c, 0x9d, 0x0b, 0x0a, 0x42, 0x8e, 0x4a, 0x52, 0xf9,
+	0x7b, 0xf1, 0xd9, 0x21, 0x40, 0x19, 0x83, 0xbb, 0x22, 0x28, 0xe8, 0x17, 0x0d, 0x8e, 0x0e, 0x8f,
+	0x98, 0xe8, 0x9d, 0x83, 0x23, 0x39, 0x72, 0x28, 0xad, 0x3f, 0xe7, 0x2c, 0xa3, 0xaf, 0xee, 0x59,
+	0xc3, 0x9f, 0xf0, 0xaf, 0xff, 0xf8, 0xeb, 0xfb, 0xca, 0xdb, 0xc8, 0x48, 0x46, 0xf9, 0x47, 0x43,
+	0x27, 0xd7, 0xd4, 0x34, 0xca, 0x1b, 0x0b, 0x8d, 0x4c, 0xb5, 0xf0, 0xc6, 0xc2, 0x63, 0xf4, 0x54,
+	0x03, 0x54, 0x1c, 0x13, 0xd0, 0xf2, 0x64, 0x13, 0x88, 0xd0, 0x72, 0x75, 0xc2, 0xf1, 0x25, 0xad,
+	0x4e, 0xfd, 0xb3, 0x3d, 0xeb, 0xd5, 0xcc, 0x5c, 0xfd, 0xd6, 0x60, 0xdc, 0x4d, 0x25, 0x5e, 0xd1,
+	0x2f, 0xa5, 0x7f, 0xe7, 0xf4, 0x35, 0x3d, 0xca, 0x80, 0xaf, 0x2d, 0x3c, 0x1e, 0x52, 0x68, 0xfa,
+	0xa9, 0x1f, 0x53, 0x5b, 0x40, 0xff, 0x6a, 0x70, 0xaa, 0x64, 0x06, 0x41, 0xef, 0x8f, 0x93, 0xb5,
+	0xfd, 0x26, 0xa1, 0xba, 0xf5, 0x02, 0x0c, 0x52, 0xb7, 0xbd, 0x67, 0x0d, 0x3d, 0xf2, 0x54, 0xed,
+	0x6d, 0xfd, 0x66, 0x9a, 0xd0, 0xec, 0xc1, 0x7e, 0xf9, 0x34, 0x3b, 0xa3, 0xbd, 0x24, 0x11, 0xf8,
+	0xb6, 0x02, 0xa7, 0x4b, 0x9b, 0x03, 0x5a, 0x19, 0x5f, 0x41, 0x59, 0x9b, 0xaa, 0xdf, 0x78, 0x21,
+	0x0e, 0x19, 0x07, 0x3c, 0x2a, 0x0e, 0x1f, 0xe9, 0xcd, 0xc9, 0xe2, 0x50, 0xf0, 0x63, 0x6a, 0x0b,
+	0xf5, 0x33, 0x4f, 0xac, 0xda, 0xe0, 0x7a, 0x72, 0x15, 0xba, 0x3c, 0x69, 0x0e, 0x2b, 0xff, 0x68,
+	0x70, 0xd1, 0xa1, 0xfe, 0x81, 0x52, 0x56, 0x4e, 0x15, 0x5b, 0xc2, 0x46, 0xd2, 0xb1, 0x36, 0xb4,
+	0xcf, 0xd7, 0xa4, 0x71, 0x87, 0x7a, 0x38, 0xe8, 0x18, 0x94, 0x75, 0x1a, 0x1d, 0x12, 0xa4, 0xfd,
+	0xac, 0x31, 0x70, 0x57, 0xfe, 0xcf, 0x81, 0x65, 0xb5, 0xf8, 0xa1, 0x32, 0xd5, 0xb4, 0xac, 0x1f,
+	0x2b, 0x73, 0x4d, 0x41, 0x68, 0xb5, 0xb9, 0x21, 0x96, 0xc9, 0x6a, 0x73, 0xc9, 0x90, 0x8e, 0xf9,
+	0x13, 0x05, 0xd9, 0xb2, 0xda, 0x7c, 0xab, 0x0f, 0xd9, 0xda, 0x5c, 0xda, 0x52, 0x90, 0x67, 0x95,
+	0x8b, 0x62, 0xdf, 0x34, 0xad, 0x36, 0x37, 0xcd, 0x3e, 0xc8, 0x34, 0x37, 0x97, 0x4c, 0x53, 0xc1,
+	0xb6, 0xa7, 0xd3, 0x7b, 0x2e, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x6a, 0x7c, 0x44, 0xc3,
+	0x10, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordPlanServiceClient is the client API for KeywordPlanService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanServiceClient interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlan(ctx context.Context, in *GetKeywordPlanRequest, opts ...grpc.CallOption) (*resources.KeywordPlan, error)
+	// Creates, updates, or removes keyword plans. Operation statuses are
+	// returned.
+	MutateKeywordPlans(ctx context.Context, in *MutateKeywordPlansRequest, opts ...grpc.CallOption) (*MutateKeywordPlansResponse, error)
+	// Returns the requested Keyword Plan forecasts.
+	GenerateForecastMetrics(ctx context.Context, in *GenerateForecastMetricsRequest, opts ...grpc.CallOption) (*GenerateForecastMetricsResponse, error)
+	// Returns the requested Keyword Plan historical metrics.
+	GenerateHistoricalMetrics(ctx context.Context, in *GenerateHistoricalMetricsRequest, opts ...grpc.CallOption) (*GenerateHistoricalMetricsResponse, error)
+}
+
+type keywordPlanServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordPlanServiceClient(cc grpc.ClientConnInterface) KeywordPlanServiceClient {
+	return &keywordPlanServiceClient{cc}
+}
+
+func (c *keywordPlanServiceClient) GetKeywordPlan(ctx context.Context, in *GetKeywordPlanRequest, opts ...grpc.CallOption) (*resources.KeywordPlan, error) {
+	out := new(resources.KeywordPlan)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanService/GetKeywordPlan", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) MutateKeywordPlans(ctx context.Context, in *MutateKeywordPlansRequest, opts ...grpc.CallOption) (*MutateKeywordPlansResponse, error) {
+	out := new(MutateKeywordPlansResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanService/MutateKeywordPlans", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) GenerateForecastMetrics(ctx context.Context, in *GenerateForecastMetricsRequest, opts ...grpc.CallOption) (*GenerateForecastMetricsResponse, error) {
+	out := new(GenerateForecastMetricsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanService/GenerateForecastMetrics", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) GenerateHistoricalMetrics(ctx context.Context, in *GenerateHistoricalMetricsRequest, opts ...grpc.CallOption) (*GenerateHistoricalMetricsResponse, error) {
+	out := new(GenerateHistoricalMetricsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordPlanService/GenerateHistoricalMetrics", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanServiceServer is the server API for KeywordPlanService service.
+type KeywordPlanServiceServer interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlan(context.Context, *GetKeywordPlanRequest) (*resources.KeywordPlan, error)
+	// Creates, updates, or removes keyword plans. Operation statuses are
+	// returned.
+	MutateKeywordPlans(context.Context, *MutateKeywordPlansRequest) (*MutateKeywordPlansResponse, error)
+	// Returns the requested Keyword Plan forecasts.
+	GenerateForecastMetrics(context.Context, *GenerateForecastMetricsRequest) (*GenerateForecastMetricsResponse, error)
+	// Returns the requested Keyword Plan historical metrics.
+	GenerateHistoricalMetrics(context.Context, *GenerateHistoricalMetricsRequest) (*GenerateHistoricalMetricsResponse, error)
+}
+
+// UnimplementedKeywordPlanServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordPlanServiceServer struct {
+}
+
+func (*UnimplementedKeywordPlanServiceServer) GetKeywordPlan(ctx context.Context, req *GetKeywordPlanRequest) (*resources.KeywordPlan, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetKeywordPlan not implemented")
+}
+func (*UnimplementedKeywordPlanServiceServer) MutateKeywordPlans(ctx context.Context, req *MutateKeywordPlansRequest) (*MutateKeywordPlansResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateKeywordPlans not implemented")
+}
+func (*UnimplementedKeywordPlanServiceServer) GenerateForecastMetrics(ctx context.Context, req *GenerateForecastMetricsRequest) (*GenerateForecastMetricsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GenerateForecastMetrics not implemented")
+}
+func (*UnimplementedKeywordPlanServiceServer) GenerateHistoricalMetrics(ctx context.Context, req *GenerateHistoricalMetricsRequest) (*GenerateHistoricalMetricsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GenerateHistoricalMetrics not implemented")
+}
+
+func RegisterKeywordPlanServiceServer(s *grpc.Server, srv KeywordPlanServiceServer) {
+	s.RegisterService(&_KeywordPlanService_serviceDesc, srv)
+}
+
+func _KeywordPlanService_GetKeywordPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GetKeywordPlan(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanService/GetKeywordPlan",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GetKeywordPlan(ctx, req.(*GetKeywordPlanRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_MutateKeywordPlans_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlansRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).MutateKeywordPlans(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanService/MutateKeywordPlans",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).MutateKeywordPlans(ctx, req.(*MutateKeywordPlansRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_GenerateForecastMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateForecastMetricsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GenerateForecastMetrics(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanService/GenerateForecastMetrics",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GenerateForecastMetrics(ctx, req.(*GenerateForecastMetricsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_GenerateHistoricalMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateHistoricalMetricsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GenerateHistoricalMetrics(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordPlanService/GenerateHistoricalMetrics",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GenerateHistoricalMetrics(ctx, req.(*GenerateHistoricalMetricsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordPlanService",
+	HandlerType: (*KeywordPlanServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlan",
+			Handler:    _KeywordPlanService_GetKeywordPlan_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlans",
+			Handler:    _KeywordPlanService_MutateKeywordPlans_Handler,
+		},
+		{
+			MethodName: "GenerateForecastMetrics",
+			Handler:    _KeywordPlanService_GenerateForecastMetrics_Handler,
+		},
+		{
+			MethodName: "GenerateHistoricalMetrics",
+			Handler:    _KeywordPlanService_GenerateHistoricalMetrics_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_plan_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/keyword_view_service.pb.go b/googleapis/ads/googleads/v3/services/keyword_view_service.pb.go
new file mode 100644
index 0000000..43dba1b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/keyword_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/keyword_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [KeywordViewService.GetKeywordView][google.ads.googleads.v3.services.KeywordViewService.GetKeywordView].
+type GetKeywordViewRequest struct {
+	// Required. The resource name of the keyword view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordViewRequest) Reset()         { *m = GetKeywordViewRequest{} }
+func (m *GetKeywordViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordViewRequest) ProtoMessage()    {}
+func (*GetKeywordViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_38e9ec08eaed78b3, []int{0}
+}
+
+func (m *GetKeywordViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordViewRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetKeywordViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordViewRequest.Merge(m, src)
+}
+func (m *GetKeywordViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordViewRequest.Size(m)
+}
+func (m *GetKeywordViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordViewRequest proto.InternalMessageInfo
+
+func (m *GetKeywordViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordViewRequest)(nil), "google.ads.googleads.v3.services.GetKeywordViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/keyword_view_service.proto", fileDescriptor_38e9ec08eaed78b3)
+}
+
+var fileDescriptor_38e9ec08eaed78b3 = []byte{
+	// 410 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0xeb, 0xd3, 0x40,
+	0x18, 0x26, 0x29, 0x08, 0x06, 0x75, 0x08, 0x48, 0x4b, 0x14, 0x2c, 0xa5, 0x43, 0xe9, 0x70, 0x27,
+	0x46, 0x10, 0xae, 0x38, 0x5c, 0x07, 0x2b, 0x08, 0x52, 0x2a, 0x64, 0x90, 0x40, 0xb8, 0x26, 0xaf,
+	0xf1, 0x30, 0xc9, 0xd5, 0xbb, 0x34, 0x45, 0xc4, 0xc5, 0xaf, 0xe0, 0x37, 0x70, 0xf4, 0x5b, 0xb8,
+	0x76, 0x75, 0x73, 0x72, 0x70, 0x72, 0x77, 0x15, 0x49, 0x2f, 0x97, 0xa6, 0xfa, 0x2b, 0xdd, 0x1e,
+	0xee, 0xf9, 0xf3, 0xbe, 0xef, 0x93, 0x38, 0xb3, 0x54, 0x88, 0x34, 0x03, 0xcc, 0x12, 0x85, 0x35,
+	0xac, 0x51, 0xe5, 0x63, 0x05, 0xb2, 0xe2, 0x31, 0x28, 0xfc, 0x06, 0xde, 0xed, 0x84, 0x4c, 0xa2,
+	0x8a, 0xc3, 0x2e, 0x6a, 0x5e, 0xd1, 0x46, 0x8a, 0x52, 0xb8, 0x43, 0xed, 0x40, 0x2c, 0x51, 0xa8,
+	0x35, 0xa3, 0xca, 0x47, 0xc6, 0xec, 0x3d, 0x3c, 0x17, 0x2f, 0x41, 0x89, 0xad, 0xfc, 0x37, 0x5f,
+	0xe7, 0x7a, 0x77, 0x8d, 0x6b, 0xc3, 0x31, 0x2b, 0x0a, 0x51, 0xb2, 0x92, 0x8b, 0x42, 0x35, 0x6c,
+	0xbf, 0xc3, 0xc6, 0x19, 0x87, 0xa2, 0x6c, 0x88, 0x7b, 0x1d, 0xe2, 0x15, 0x87, 0x2c, 0x89, 0xd6,
+	0xf0, 0x9a, 0x55, 0x5c, 0x48, 0x2d, 0x18, 0x51, 0xe7, 0xf6, 0x02, 0xca, 0x67, 0x7a, 0x60, 0xc0,
+	0x61, 0xb7, 0x82, 0xb7, 0x5b, 0x50, 0xa5, 0x3b, 0x71, 0x6e, 0x9a, 0x85, 0xa2, 0x82, 0xe5, 0x30,
+	0xb0, 0x86, 0xd6, 0xe4, 0xfa, 0xbc, 0xf7, 0x83, 0xda, 0xab, 0x1b, 0x86, 0x79, 0xce, 0x72, 0x78,
+	0xf0, 0xdb, 0x72, 0xdc, 0x4e, 0xc0, 0x0b, 0x7d, 0xa8, 0xfb, 0xd5, 0x72, 0x6e, 0x9d, 0x46, 0xbb,
+	0x8f, 0xd0, 0xa5, 0x76, 0xd0, 0x95, 0xcb, 0x78, 0xe8, 0xac, 0xb1, 0x2d, 0x0d, 0x75, 0x6c, 0xa3,
+	0x27, 0xdf, 0xe9, 0xe9, 0xf6, 0x1f, 0xbf, 0xfd, 0xfc, 0x64, 0xdf, 0x77, 0x51, 0xdd, 0xf3, 0xfb,
+	0x13, 0xe6, 0x71, 0xbc, 0x55, 0xa5, 0xc8, 0x41, 0x2a, 0x3c, 0x35, 0xc5, 0xd7, 0x19, 0x0a, 0x4f,
+	0x3f, 0x78, 0x77, 0xf6, 0x74, 0x70, 0x1c, 0xd7, 0xa0, 0x0d, 0x57, 0x28, 0x16, 0xf9, 0xfc, 0x8f,
+	0xe5, 0x8c, 0x63, 0x91, 0x5f, 0xbc, 0x69, 0xde, 0xff, 0xbf, 0x9d, 0x65, 0x5d, 0xfe, 0xd2, 0x7a,
+	0xf9, 0xb4, 0x31, 0xa7, 0x22, 0x63, 0x45, 0x8a, 0x84, 0x4c, 0x71, 0x0a, 0xc5, 0xe1, 0xd3, 0xe0,
+	0xe3, 0xb8, 0xf3, 0xbf, 0xe2, 0xcc, 0x80, 0xcf, 0x76, 0x6f, 0x41, 0xe9, 0x17, 0x7b, 0xb8, 0xd0,
+	0x81, 0x34, 0x51, 0x48, 0xc3, 0x1a, 0x05, 0x3e, 0x6a, 0x06, 0xab, 0xbd, 0x91, 0x84, 0x34, 0x51,
+	0x61, 0x2b, 0x09, 0x03, 0x3f, 0x34, 0x92, 0x5f, 0xf6, 0x58, 0xbf, 0x13, 0x42, 0x13, 0x45, 0x48,
+	0x2b, 0x22, 0x24, 0xf0, 0x09, 0x31, 0xb2, 0xf5, 0xb5, 0xc3, 0x9e, 0xfe, 0xdf, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x0e, 0xbe, 0x83, 0xd8, 0x31, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// KeywordViewServiceClient is the client API for KeywordViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordViewServiceClient interface {
+	// Returns the requested keyword view in full detail.
+	GetKeywordView(ctx context.Context, in *GetKeywordViewRequest, opts ...grpc.CallOption) (*resources.KeywordView, error)
+}
+
+type keywordViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewKeywordViewServiceClient(cc grpc.ClientConnInterface) KeywordViewServiceClient {
+	return &keywordViewServiceClient{cc}
+}
+
+func (c *keywordViewServiceClient) GetKeywordView(ctx context.Context, in *GetKeywordViewRequest, opts ...grpc.CallOption) (*resources.KeywordView, error) {
+	out := new(resources.KeywordView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.KeywordViewService/GetKeywordView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordViewServiceServer is the server API for KeywordViewService service.
+type KeywordViewServiceServer interface {
+	// Returns the requested keyword view in full detail.
+	GetKeywordView(context.Context, *GetKeywordViewRequest) (*resources.KeywordView, error)
+}
+
+// UnimplementedKeywordViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedKeywordViewServiceServer struct {
+}
+
+func (*UnimplementedKeywordViewServiceServer) GetKeywordView(ctx context.Context, req *GetKeywordViewRequest) (*resources.KeywordView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetKeywordView not implemented")
+}
+
+func RegisterKeywordViewServiceServer(s *grpc.Server, srv KeywordViewServiceServer) {
+	s.RegisterService(&_KeywordViewService_serviceDesc, srv)
+}
+
+func _KeywordViewService_GetKeywordView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordViewServiceServer).GetKeywordView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.KeywordViewService/GetKeywordView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordViewServiceServer).GetKeywordView(ctx, req.(*GetKeywordViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.KeywordViewService",
+	HandlerType: (*KeywordViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordView",
+			Handler:    _KeywordViewService_GetKeywordView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/keyword_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/label_service.pb.go b/googleapis/ads/googleads/v3/services/label_service.pb.go
new file mode 100644
index 0000000..ef90bd1
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/label_service.pb.go
@@ -0,0 +1,527 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/label_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [LabelService.GetLabel][google.ads.googleads.v3.services.LabelService.GetLabel].
+type GetLabelRequest struct {
+	// Required. The resource name of the label to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLabelRequest) Reset()         { *m = GetLabelRequest{} }
+func (m *GetLabelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLabelRequest) ProtoMessage()    {}
+func (*GetLabelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a44839ef2e1ad921, []int{0}
+}
+
+func (m *GetLabelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLabelRequest.Unmarshal(m, b)
+}
+func (m *GetLabelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLabelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLabelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLabelRequest.Merge(m, src)
+}
+func (m *GetLabelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLabelRequest.Size(m)
+}
+func (m *GetLabelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLabelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLabelRequest proto.InternalMessageInfo
+
+func (m *GetLabelRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [LabelService.MutateLabels][google.ads.googleads.v3.services.LabelService.MutateLabels].
+type MutateLabelsRequest struct {
+	// Required. ID of the customer whose labels are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on labels.
+	Operations []*LabelOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateLabelsRequest) Reset()         { *m = MutateLabelsRequest{} }
+func (m *MutateLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateLabelsRequest) ProtoMessage()    {}
+func (*MutateLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a44839ef2e1ad921, []int{1}
+}
+
+func (m *MutateLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateLabelsRequest.Unmarshal(m, b)
+}
+func (m *MutateLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateLabelsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateLabelsRequest.Merge(m, src)
+}
+func (m *MutateLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateLabelsRequest.Size(m)
+}
+func (m *MutateLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateLabelsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateLabelsRequest proto.InternalMessageInfo
+
+func (m *MutateLabelsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateLabelsRequest) GetOperations() []*LabelOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateLabelsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateLabelsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove, update) on a label.
+type LabelOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*LabelOperation_Create
+	//	*LabelOperation_Update
+	//	*LabelOperation_Remove
+	Operation            isLabelOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *LabelOperation) Reset()         { *m = LabelOperation{} }
+func (m *LabelOperation) String() string { return proto.CompactTextString(m) }
+func (*LabelOperation) ProtoMessage()    {}
+func (*LabelOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a44839ef2e1ad921, []int{2}
+}
+
+func (m *LabelOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LabelOperation.Unmarshal(m, b)
+}
+func (m *LabelOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LabelOperation.Marshal(b, m, deterministic)
+}
+func (m *LabelOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LabelOperation.Merge(m, src)
+}
+func (m *LabelOperation) XXX_Size() int {
+	return xxx_messageInfo_LabelOperation.Size(m)
+}
+func (m *LabelOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_LabelOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabelOperation proto.InternalMessageInfo
+
+func (m *LabelOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isLabelOperation_Operation interface {
+	isLabelOperation_Operation()
+}
+
+type LabelOperation_Create struct {
+	Create *resources.Label `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type LabelOperation_Update struct {
+	Update *resources.Label `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type LabelOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*LabelOperation_Create) isLabelOperation_Operation() {}
+
+func (*LabelOperation_Update) isLabelOperation_Operation() {}
+
+func (*LabelOperation_Remove) isLabelOperation_Operation() {}
+
+func (m *LabelOperation) GetOperation() isLabelOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *LabelOperation) GetCreate() *resources.Label {
+	if x, ok := m.GetOperation().(*LabelOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *LabelOperation) GetUpdate() *resources.Label {
+	if x, ok := m.GetOperation().(*LabelOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *LabelOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*LabelOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*LabelOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*LabelOperation_Create)(nil),
+		(*LabelOperation_Update)(nil),
+		(*LabelOperation_Remove)(nil),
+	}
+}
+
+// Response message for a labels mutate.
+type MutateLabelsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateLabelResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MutateLabelsResponse) Reset()         { *m = MutateLabelsResponse{} }
+func (m *MutateLabelsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateLabelsResponse) ProtoMessage()    {}
+func (*MutateLabelsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a44839ef2e1ad921, []int{3}
+}
+
+func (m *MutateLabelsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateLabelsResponse.Unmarshal(m, b)
+}
+func (m *MutateLabelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateLabelsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateLabelsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateLabelsResponse.Merge(m, src)
+}
+func (m *MutateLabelsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateLabelsResponse.Size(m)
+}
+func (m *MutateLabelsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateLabelsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateLabelsResponse proto.InternalMessageInfo
+
+func (m *MutateLabelsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateLabelsResponse) GetResults() []*MutateLabelResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for a label mutate.
+type MutateLabelResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateLabelResult) Reset()         { *m = MutateLabelResult{} }
+func (m *MutateLabelResult) String() string { return proto.CompactTextString(m) }
+func (*MutateLabelResult) ProtoMessage()    {}
+func (*MutateLabelResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a44839ef2e1ad921, []int{4}
+}
+
+func (m *MutateLabelResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateLabelResult.Unmarshal(m, b)
+}
+func (m *MutateLabelResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateLabelResult.Marshal(b, m, deterministic)
+}
+func (m *MutateLabelResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateLabelResult.Merge(m, src)
+}
+func (m *MutateLabelResult) XXX_Size() int {
+	return xxx_messageInfo_MutateLabelResult.Size(m)
+}
+func (m *MutateLabelResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateLabelResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateLabelResult proto.InternalMessageInfo
+
+func (m *MutateLabelResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetLabelRequest)(nil), "google.ads.googleads.v3.services.GetLabelRequest")
+	proto.RegisterType((*MutateLabelsRequest)(nil), "google.ads.googleads.v3.services.MutateLabelsRequest")
+	proto.RegisterType((*LabelOperation)(nil), "google.ads.googleads.v3.services.LabelOperation")
+	proto.RegisterType((*MutateLabelsResponse)(nil), "google.ads.googleads.v3.services.MutateLabelsResponse")
+	proto.RegisterType((*MutateLabelResult)(nil), "google.ads.googleads.v3.services.MutateLabelResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/label_service.proto", fileDescriptor_a44839ef2e1ad921)
+}
+
+var fileDescriptor_a44839ef2e1ad921 = []byte{
+	// 747 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4f, 0x6f, 0xd3, 0x30,
+	0x14, 0x27, 0x2d, 0x1a, 0x9b, 0xdb, 0x6d, 0x9a, 0xc7, 0x9f, 0xaa, 0x20, 0x51, 0x85, 0x49, 0x54,
+	0x05, 0x92, 0xd1, 0x02, 0x42, 0x99, 0x26, 0x91, 0x4a, 0x6c, 0x43, 0x62, 0x6c, 0xca, 0xc4, 0x0e,
+	0xa8, 0x52, 0xe5, 0x26, 0x5e, 0x89, 0x96, 0xc4, 0xc1, 0x76, 0x2a, 0x4d, 0xd3, 0x2e, 0x7c, 0x05,
+	0xbe, 0x01, 0x27, 0x40, 0xe2, 0x8b, 0xec, 0xc0, 0x85, 0xdb, 0x4e, 0x3b, 0x70, 0xe2, 0x13, 0x70,
+	0xe0, 0x80, 0x12, 0xdb, 0x6d, 0x3a, 0x98, 0xca, 0x6e, 0xcf, 0x7e, 0xbf, 0xdf, 0xef, 0x3d, 0xbf,
+	0x3f, 0x09, 0x78, 0xd4, 0x27, 0xa4, 0x1f, 0x60, 0x13, 0x79, 0xcc, 0x14, 0x66, 0x6a, 0x0d, 0x5a,
+	0x26, 0xc3, 0x74, 0xe0, 0xbb, 0x98, 0x99, 0x01, 0xea, 0xe1, 0xa0, 0x2b, 0x8f, 0x46, 0x4c, 0x09,
+	0x27, 0xb0, 0x26, 0xa0, 0x06, 0xf2, 0x98, 0x31, 0x64, 0x19, 0x83, 0x96, 0xa1, 0x58, 0xd5, 0x07,
+	0xe7, 0xe9, 0x52, 0xcc, 0x48, 0x42, 0x87, 0xc2, 0x42, 0xb0, 0x7a, 0x4b, 0xc1, 0x63, 0xdf, 0x44,
+	0x51, 0x44, 0x38, 0xe2, 0x3e, 0x89, 0x98, 0xf4, 0xde, 0xc8, 0x79, 0xdd, 0xc0, 0xc7, 0x11, 0x97,
+	0x8e, 0xdb, 0x39, 0xc7, 0x9e, 0x8f, 0x03, 0xaf, 0xdb, 0xc3, 0x6f, 0xd1, 0xc0, 0x27, 0x54, 0x02,
+	0x64, 0xa2, 0x66, 0x76, 0xea, 0x25, 0x7b, 0x12, 0x15, 0x22, 0xb6, 0x7f, 0x46, 0x9b, 0xc6, 0xae,
+	0xc9, 0x38, 0xe2, 0x89, 0x0c, 0xaa, 0xaf, 0x80, 0xf9, 0x75, 0xcc, 0x5f, 0xa6, 0x49, 0x3a, 0xf8,
+	0x5d, 0x82, 0x19, 0x87, 0x75, 0x30, 0xab, 0xd2, 0xef, 0x46, 0x28, 0xc4, 0x15, 0xad, 0xa6, 0xd5,
+	0x67, 0xda, 0xc5, 0x53, 0xbb, 0xe0, 0x94, 0x95, 0xe7, 0x15, 0x0a, 0xb1, 0x7e, 0xaa, 0x81, 0xc5,
+	0xcd, 0x84, 0x23, 0x8e, 0x33, 0x01, 0xa6, 0x14, 0x96, 0x40, 0xc9, 0x4d, 0x18, 0x27, 0x21, 0xa6,
+	0x5d, 0xdf, 0xcb, 0xf3, 0x81, 0xba, 0x7f, 0xe1, 0xc1, 0xd7, 0x00, 0x90, 0x18, 0x53, 0x51, 0x83,
+	0x4a, 0xa1, 0x56, 0xac, 0x97, 0x9a, 0xcb, 0xc6, 0xa4, 0x9a, 0x1b, 0x59, 0xa8, 0x2d, 0x45, 0x94,
+	0xb2, 0x23, 0x21, 0x78, 0x17, 0xcc, 0xc7, 0x88, 0x72, 0x1f, 0x05, 0xdd, 0x3d, 0xe4, 0x07, 0x09,
+	0xc5, 0x95, 0x62, 0x4d, 0xab, 0x4f, 0x3b, 0x73, 0xf2, 0x7a, 0x4d, 0xdc, 0xc2, 0x3b, 0x60, 0x76,
+	0x80, 0x02, 0xdf, 0x43, 0x1c, 0x77, 0x49, 0x14, 0x1c, 0x54, 0x2e, 0x67, 0xb0, 0xb2, 0xba, 0xdc,
+	0x8a, 0x82, 0x03, 0xfd, 0xb7, 0x06, 0xe6, 0xc6, 0x23, 0xc2, 0x15, 0x50, 0x4a, 0xe2, 0x8c, 0x95,
+	0x16, 0x38, 0x63, 0x95, 0x9a, 0x55, 0x95, 0xb8, 0xea, 0x81, 0xb1, 0x96, 0xf6, 0x60, 0x13, 0xb1,
+	0x7d, 0x07, 0x08, 0x78, 0x6a, 0xc3, 0x36, 0x98, 0x72, 0x29, 0x46, 0x5c, 0x54, 0xb5, 0xd4, 0xac,
+	0x9f, 0xfb, 0xe0, 0xe1, 0x08, 0x89, 0x17, 0x6f, 0x5c, 0x72, 0x24, 0x33, 0xd5, 0x10, 0x8a, 0x95,
+	0xc2, 0xc5, 0x35, 0x04, 0x13, 0x56, 0xc0, 0x14, 0xc5, 0x21, 0x19, 0x88, 0xe2, 0xcc, 0xa4, 0x1e,
+	0x71, 0x6e, 0x97, 0xc0, 0xcc, 0xb0, 0x9a, 0xfa, 0x57, 0x0d, 0x5c, 0x1d, 0xef, 0x30, 0x8b, 0x49,
+	0xc4, 0x30, 0x5c, 0x03, 0xd7, 0xce, 0x54, 0xb9, 0x8b, 0x29, 0x25, 0x34, 0x93, 0x2b, 0x35, 0xa1,
+	0x4a, 0x89, 0xc6, 0xae, 0xb1, 0x93, 0x0d, 0x9c, 0xb3, 0x38, 0x5e, 0xff, 0xe7, 0x29, 0x1c, 0x6e,
+	0x82, 0x2b, 0x14, 0xb3, 0x24, 0xe0, 0x6a, 0x02, 0x5a, 0x93, 0x27, 0x20, 0x97, 0x90, 0x93, 0x71,
+	0x1d, 0xa5, 0xa1, 0x3f, 0x05, 0x0b, 0x7f, 0x79, 0xd3, 0x46, 0xff, 0x63, 0xa0, 0xc7, 0x67, 0xb9,
+	0xf9, 0xa9, 0x08, 0xca, 0x19, 0x69, 0x47, 0x84, 0x81, 0x9f, 0x35, 0x30, 0xad, 0x56, 0x03, 0x3e,
+	0x9c, 0x9c, 0xd5, 0x99, 0x35, 0xaa, 0xfe, 0x77, 0x57, 0xf4, 0x67, 0x27, 0xf6, 0x78, 0x82, 0xef,
+	0xbf, 0xff, 0xf8, 0x50, 0x68, 0xc0, 0x7a, 0xfa, 0x25, 0x39, 0x1c, 0xf3, 0xac, 0xaa, 0xfd, 0x61,
+	0x66, 0x43, 0x7c, 0x5a, 0x98, 0xd9, 0x38, 0x82, 0xdf, 0x34, 0x50, 0xce, 0xb7, 0x09, 0x3e, 0xbe,
+	0x50, 0x15, 0xd5, 0xe2, 0x56, 0x9f, 0x5c, 0x94, 0x26, 0xa6, 0x41, 0xdf, 0x3a, 0xb1, 0xaf, 0xe7,
+	0x36, 0xfe, 0xfe, 0x68, 0x1d, 0xb3, 0xa7, 0x2c, 0xeb, 0xf7, 0xd2, 0xa7, 0x8c, 0x72, 0x3f, 0xcc,
+	0x81, 0x57, 0x1b, 0x47, 0xf2, 0x25, 0x56, 0x98, 0x69, 0x5b, 0x5a, 0xa3, 0x7a, 0xf3, 0xd8, 0xae,
+	0x8c, 0xe2, 0x4b, 0x2b, 0xf6, 0x99, 0xe1, 0x92, 0xb0, 0xfd, 0x4b, 0x03, 0x4b, 0x2e, 0x09, 0x27,
+	0xe6, 0xda, 0x5e, 0xc8, 0x37, 0x74, 0x3b, 0x5d, 0xcc, 0x6d, 0xed, 0xcd, 0x86, 0xa4, 0xf5, 0x49,
+	0x80, 0xa2, 0xbe, 0x41, 0x68, 0xdf, 0xec, 0xe3, 0x28, 0x5b, 0x5b, 0x73, 0x14, 0xe8, 0xfc, 0x5f,
+	0xc5, 0x8a, 0x32, 0x3e, 0x16, 0x8a, 0xeb, 0xb6, 0xfd, 0xa5, 0x50, 0x5b, 0x17, 0x82, 0xb6, 0xc7,
+	0x0c, 0x61, 0xa6, 0xd6, 0x6e, 0xcb, 0x90, 0x81, 0xd9, 0xb1, 0x82, 0x74, 0x6c, 0x8f, 0x75, 0x86,
+	0x90, 0xce, 0x6e, 0xab, 0xa3, 0x20, 0x3f, 0x0b, 0x4b, 0xe2, 0xde, 0xb2, 0x6c, 0x8f, 0x59, 0xd6,
+	0x10, 0x64, 0x59, 0xbb, 0x2d, 0xcb, 0x52, 0xb0, 0xde, 0x54, 0x96, 0x67, 0xeb, 0x4f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x0a, 0x59, 0x01, 0xe0, 0xd1, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LabelServiceClient is the client API for LabelService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LabelServiceClient interface {
+	// Returns the requested label in full detail.
+	GetLabel(ctx context.Context, in *GetLabelRequest, opts ...grpc.CallOption) (*resources.Label, error)
+	// Creates, updates, or removes labels. Operation statuses are returned.
+	MutateLabels(ctx context.Context, in *MutateLabelsRequest, opts ...grpc.CallOption) (*MutateLabelsResponse, error)
+}
+
+type labelServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewLabelServiceClient(cc grpc.ClientConnInterface) LabelServiceClient {
+	return &labelServiceClient{cc}
+}
+
+func (c *labelServiceClient) GetLabel(ctx context.Context, in *GetLabelRequest, opts ...grpc.CallOption) (*resources.Label, error) {
+	out := new(resources.Label)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.LabelService/GetLabel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *labelServiceClient) MutateLabels(ctx context.Context, in *MutateLabelsRequest, opts ...grpc.CallOption) (*MutateLabelsResponse, error) {
+	out := new(MutateLabelsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.LabelService/MutateLabels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LabelServiceServer is the server API for LabelService service.
+type LabelServiceServer interface {
+	// Returns the requested label in full detail.
+	GetLabel(context.Context, *GetLabelRequest) (*resources.Label, error)
+	// Creates, updates, or removes labels. Operation statuses are returned.
+	MutateLabels(context.Context, *MutateLabelsRequest) (*MutateLabelsResponse, error)
+}
+
+// UnimplementedLabelServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLabelServiceServer struct {
+}
+
+func (*UnimplementedLabelServiceServer) GetLabel(ctx context.Context, req *GetLabelRequest) (*resources.Label, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetLabel not implemented")
+}
+func (*UnimplementedLabelServiceServer) MutateLabels(ctx context.Context, req *MutateLabelsRequest) (*MutateLabelsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateLabels not implemented")
+}
+
+func RegisterLabelServiceServer(s *grpc.Server, srv LabelServiceServer) {
+	s.RegisterService(&_LabelService_serviceDesc, srv)
+}
+
+func _LabelService_GetLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLabelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LabelServiceServer).GetLabel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.LabelService/GetLabel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LabelServiceServer).GetLabel(ctx, req.(*GetLabelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _LabelService_MutateLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateLabelsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LabelServiceServer).MutateLabels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.LabelService/MutateLabels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LabelServiceServer).MutateLabels(ctx, req.(*MutateLabelsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LabelService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.LabelService",
+	HandlerType: (*LabelServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetLabel",
+			Handler:    _LabelService_GetLabel_Handler,
+		},
+		{
+			MethodName: "MutateLabels",
+			Handler:    _LabelService_MutateLabels_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/label_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/landing_page_view_service.pb.go b/googleapis/ads/googleads/v3/services/landing_page_view_service.pb.go
new file mode 100644
index 0000000..18ad360
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/landing_page_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/landing_page_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [LandingPageViewService.GetLandingPageView][google.ads.googleads.v3.services.LandingPageViewService.GetLandingPageView].
+type GetLandingPageViewRequest struct {
+	// Required. The resource name of the landing page view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLandingPageViewRequest) Reset()         { *m = GetLandingPageViewRequest{} }
+func (m *GetLandingPageViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLandingPageViewRequest) ProtoMessage()    {}
+func (*GetLandingPageViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0c3c342ff39fd41d, []int{0}
+}
+
+func (m *GetLandingPageViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLandingPageViewRequest.Unmarshal(m, b)
+}
+func (m *GetLandingPageViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLandingPageViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLandingPageViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLandingPageViewRequest.Merge(m, src)
+}
+func (m *GetLandingPageViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLandingPageViewRequest.Size(m)
+}
+func (m *GetLandingPageViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLandingPageViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLandingPageViewRequest proto.InternalMessageInfo
+
+func (m *GetLandingPageViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetLandingPageViewRequest)(nil), "google.ads.googleads.v3.services.GetLandingPageViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/landing_page_view_service.proto", fileDescriptor_0c3c342ff39fd41d)
+}
+
+var fileDescriptor_0c3c342ff39fd41d = []byte{
+	// 418 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x1c, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xd0, 0x33, 0x27, 0xb8, 0x1c, 0x57, 0x1c, 0x57, 0xcc,
+	0xc0, 0xc6, 0xc6, 0x39, 0x04, 0x67, 0x41, 0x56, 0x44, 0x64, 0x39, 0x21, 0x85, 0x04, 0xc2, 0x5c,
+	0xf2, 0x73, 0x1c, 0x48, 0x66, 0x62, 0x26, 0x9b, 0x2b, 0xc4, 0x66, 0x3b, 0x6b, 0xbf, 0x81, 0xa5,
+	0x1f, 0x65, 0x3b, 0xb1, 0xb3, 0xb2, 0xb0, 0xf2, 0x53, 0x48, 0x76, 0x32, 0xd9, 0x3f, 0xb7, 0x61,
+	0xbb, 0xc7, 0xbc, 0xf7, 0x7b, 0xef, 0xf7, 0x67, 0xbc, 0x17, 0x5c, 0x29, 0x9e, 0x03, 0x66, 0x99,
+	0xc6, 0x06, 0xb6, 0xa8, 0x09, 0xb1, 0x86, 0xaa, 0x11, 0x29, 0x68, 0x9c, 0x33, 0x99, 0x09, 0xc9,
+	0x93, 0x92, 0x71, 0x48, 0x1a, 0x01, 0x37, 0x49, 0x47, 0xa1, 0xb2, 0x52, 0xb5, 0xf2, 0x47, 0xa6,
+	0x0c, 0xb1, 0x4c, 0xa3, 0xde, 0x01, 0x35, 0x21, 0xb2, 0x0e, 0xc1, 0xb3, 0xa1, 0x8c, 0x0a, 0xb4,
+	0x9a, 0x57, 0x7b, 0x43, 0x8c, 0x79, 0xf0, 0xd8, 0x96, 0x96, 0x02, 0x33, 0x29, 0x55, 0xcd, 0x6a,
+	0xa1, 0xa4, 0xee, 0xd8, 0x87, 0x1b, 0x6c, 0x9a, 0x0b, 0x90, 0x75, 0x47, 0x3c, 0xd9, 0x20, 0x3e,
+	0x08, 0xc8, 0xb3, 0xe4, 0x1a, 0x3e, 0xb2, 0x46, 0xa8, 0xca, 0x08, 0x4e, 0x5f, 0x7a, 0x8f, 0xa6,
+	0x50, 0xbf, 0x31, 0xa9, 0x33, 0xc6, 0x21, 0x12, 0x70, 0x73, 0x05, 0x9f, 0xe6, 0xa0, 0x6b, 0xff,
+	0xdc, 0xbb, 0x6f, 0x3b, 0x4b, 0x24, 0x2b, 0xe0, 0xd8, 0x19, 0x39, 0xe7, 0x77, 0x27, 0x47, 0x7f,
+	0xa8, 0x7b, 0x75, 0xcf, 0x32, 0x6f, 0x59, 0x01, 0xe3, 0xaf, 0xae, 0xf7, 0x60, 0xc7, 0xe4, 0x9d,
+	0x99, 0xda, 0xff, 0xe9, 0x78, 0xfe, 0xed, 0x08, 0xff, 0x12, 0x1d, 0x5a, 0x17, 0x1a, 0x6c, 0x2c,
+	0x18, 0x0f, 0x16, 0xf7, 0x9b, 0x44, 0x3b, 0xa5, 0xa7, 0xaf, 0x7f, 0xd3, 0xed, 0x69, 0x16, 0xbf,
+	0xfe, 0x7e, 0x73, 0x9f, 0xfa, 0xe3, 0xf6, 0x00, 0x9f, 0xb7, 0x98, 0xe7, 0xe9, 0x5c, 0xd7, 0xaa,
+	0x80, 0x4a, 0xe3, 0x0b, 0x7b, 0x11, 0xeb, 0xa3, 0xf1, 0xc5, 0x97, 0xe0, 0x64, 0x49, 0x8f, 0xd7,
+	0xb1, 0x1d, 0x2a, 0x85, 0x46, 0xa9, 0x2a, 0x26, 0x0b, 0xd7, 0x3b, 0x4b, 0x55, 0x71, 0x70, 0xbe,
+	0xc9, 0xc9, 0xfe, 0x8d, 0xcd, 0xda, 0xc3, 0xcc, 0x9c, 0xf7, 0xaf, 0x3a, 0x03, 0xae, 0x72, 0x26,
+	0x39, 0x52, 0x15, 0xc7, 0x1c, 0xe4, 0xea, 0x6c, 0x78, 0x1d, 0x39, 0xfc, 0x61, 0x2f, 0x2d, 0xf8,
+	0xee, 0x1e, 0x4d, 0x29, 0xfd, 0xe1, 0x8e, 0xa6, 0xc6, 0x90, 0x66, 0x1a, 0x19, 0xd8, 0xa2, 0x28,
+	0x44, 0x5d, 0xb0, 0x5e, 0x5a, 0x49, 0x4c, 0x33, 0x1d, 0xf7, 0x92, 0x38, 0x0a, 0x63, 0x2b, 0xf9,
+	0xe7, 0x9e, 0x99, 0x77, 0x42, 0x68, 0xa6, 0x09, 0xe9, 0x45, 0x84, 0x44, 0x21, 0x21, 0x56, 0x76,
+	0x7d, 0x67, 0xd5, 0x67, 0xf8, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x97, 0xd2, 0x08, 0x57, 0x03,
+	0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LandingPageViewServiceClient is the client API for LandingPageViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LandingPageViewServiceClient interface {
+	// Returns the requested landing page view in full detail.
+	GetLandingPageView(ctx context.Context, in *GetLandingPageViewRequest, opts ...grpc.CallOption) (*resources.LandingPageView, error)
+}
+
+type landingPageViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewLandingPageViewServiceClient(cc grpc.ClientConnInterface) LandingPageViewServiceClient {
+	return &landingPageViewServiceClient{cc}
+}
+
+func (c *landingPageViewServiceClient) GetLandingPageView(ctx context.Context, in *GetLandingPageViewRequest, opts ...grpc.CallOption) (*resources.LandingPageView, error) {
+	out := new(resources.LandingPageView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.LandingPageViewService/GetLandingPageView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LandingPageViewServiceServer is the server API for LandingPageViewService service.
+type LandingPageViewServiceServer interface {
+	// Returns the requested landing page view in full detail.
+	GetLandingPageView(context.Context, *GetLandingPageViewRequest) (*resources.LandingPageView, error)
+}
+
+// UnimplementedLandingPageViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLandingPageViewServiceServer struct {
+}
+
+func (*UnimplementedLandingPageViewServiceServer) GetLandingPageView(ctx context.Context, req *GetLandingPageViewRequest) (*resources.LandingPageView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLandingPageView not implemented")
+}
+
+func RegisterLandingPageViewServiceServer(s *grpc.Server, srv LandingPageViewServiceServer) {
+	s.RegisterService(&_LandingPageViewService_serviceDesc, srv)
+}
+
+func _LandingPageViewService_GetLandingPageView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLandingPageViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LandingPageViewServiceServer).GetLandingPageView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.LandingPageViewService/GetLandingPageView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LandingPageViewServiceServer).GetLandingPageView(ctx, req.(*GetLandingPageViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LandingPageViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.LandingPageViewService",
+	HandlerType: (*LandingPageViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetLandingPageView",
+			Handler:    _LandingPageViewService_GetLandingPageView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/landing_page_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/language_constant_service.pb.go b/googleapis/ads/googleads/v3/services/language_constant_service.pb.go
new file mode 100644
index 0000000..8b41a88
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/language_constant_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/language_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [LanguageConstantService.GetLanguageConstant][google.ads.googleads.v3.services.LanguageConstantService.GetLanguageConstant].
+type GetLanguageConstantRequest struct {
+	// Required. Resource name of the language constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLanguageConstantRequest) Reset()         { *m = GetLanguageConstantRequest{} }
+func (m *GetLanguageConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLanguageConstantRequest) ProtoMessage()    {}
+func (*GetLanguageConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_450309200542a061, []int{0}
+}
+
+func (m *GetLanguageConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLanguageConstantRequest.Unmarshal(m, b)
+}
+func (m *GetLanguageConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLanguageConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLanguageConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLanguageConstantRequest.Merge(m, src)
+}
+func (m *GetLanguageConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLanguageConstantRequest.Size(m)
+}
+func (m *GetLanguageConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLanguageConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLanguageConstantRequest proto.InternalMessageInfo
+
+func (m *GetLanguageConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetLanguageConstantRequest)(nil), "google.ads.googleads.v3.services.GetLanguageConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/language_constant_service.proto", fileDescriptor_450309200542a061)
+}
+
+var fileDescriptor_450309200542a061 = []byte{
+	// 403 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x4a, 0xe3, 0x40,
+	0x18, 0x27, 0x29, 0x2c, 0x6c, 0xd8, 0xbd, 0x64, 0x0f, 0x2d, 0xd9, 0xc2, 0x96, 0x52, 0xd8, 0xee,
+	0x1e, 0x66, 0x60, 0x73, 0xda, 0x51, 0xd1, 0xa9, 0x60, 0x3d, 0x88, 0x94, 0x0a, 0x3d, 0x48, 0x20,
+	0x4c, 0x93, 0x31, 0x06, 0x92, 0x99, 0x9a, 0x49, 0x73, 0x11, 0x2f, 0xf5, 0x11, 0x7c, 0x03, 0x8f,
+	0xbe, 0x89, 0xbd, 0x7a, 0xf3, 0xe4, 0xc1, 0x93, 0x4f, 0x21, 0xe9, 0x64, 0xd2, 0x3f, 0x34, 0xf4,
+	0xf6, 0x23, 0xbf, 0x7f, 0xdf, 0x7c, 0x5f, 0x8c, 0xa3, 0x80, 0xf3, 0x20, 0xa2, 0x90, 0xf8, 0x02,
+	0x4a, 0x98, 0xa3, 0xcc, 0x86, 0x82, 0x26, 0x59, 0xe8, 0x51, 0x01, 0x23, 0xc2, 0x82, 0x29, 0x09,
+	0xa8, 0xeb, 0x71, 0x26, 0x52, 0xc2, 0x52, 0xb7, 0xa0, 0xc0, 0x24, 0xe1, 0x29, 0x37, 0x5b, 0xd2,
+	0x06, 0x88, 0x2f, 0x40, 0x99, 0x00, 0x32, 0x1b, 0xa8, 0x04, 0xeb, 0x7f, 0x55, 0x47, 0x42, 0x05,
+	0x9f, 0x26, 0x5b, 0x4b, 0x64, 0xb8, 0xd5, 0x54, 0xd6, 0x49, 0x08, 0x09, 0x63, 0x3c, 0x25, 0x69,
+	0xc8, 0x99, 0x28, 0xd8, 0xfa, 0x0a, 0xeb, 0x45, 0x21, 0x2d, 0x6d, 0xbf, 0x56, 0x88, 0xab, 0x90,
+	0x46, 0xbe, 0x3b, 0xa6, 0xd7, 0x24, 0x0b, 0x79, 0x22, 0x05, 0xed, 0x13, 0xc3, 0xea, 0xd3, 0xf4,
+	0xac, 0x68, 0x3d, 0x2e, 0x4a, 0x87, 0xf4, 0x66, 0x4a, 0x45, 0x6a, 0x76, 0x8d, 0xef, 0x6a, 0x34,
+	0x97, 0x91, 0x98, 0x36, 0xb4, 0x96, 0xd6, 0xfd, 0xda, 0xab, 0xbd, 0x61, 0x7d, 0xf8, 0x4d, 0x31,
+	0xe7, 0x24, 0xa6, 0xff, 0x66, 0xba, 0x51, 0xdf, 0x4c, 0xb9, 0x90, 0xef, 0x36, 0x9f, 0x35, 0xe3,
+	0xc7, 0x96, 0x12, 0x73, 0x1f, 0xec, 0xda, 0x18, 0xa8, 0x9e, 0xcd, 0xb2, 0x2b, 0xdd, 0xe5, 0x36,
+	0xc1, 0xa6, 0xb7, 0x7d, 0xf8, 0x8a, 0xd7, 0x5f, 0x34, 0x7b, 0x79, 0x7f, 0xd0, 0xff, 0x98, 0xbf,
+	0xf3, 0x2b, 0xdc, 0xae, 0x31, 0x07, 0xd1, 0x86, 0x59, 0xc0, 0xbf, 0x77, 0xd6, 0xcf, 0x39, 0x6e,
+	0x2c, 0xcb, 0x0a, 0x34, 0x09, 0x05, 0xf0, 0x78, 0xdc, 0xbb, 0xd7, 0x8d, 0x8e, 0xc7, 0xe3, 0x9d,
+	0xcf, 0xea, 0x35, 0x2b, 0x56, 0x35, 0xc8, 0x6f, 0x32, 0xd0, 0x2e, 0x4f, 0x8b, 0x84, 0x80, 0xe7,
+	0x43, 0x00, 0x9e, 0x04, 0x30, 0xa0, 0x6c, 0x71, 0x31, 0xb8, 0xec, 0xac, 0xfe, 0x57, 0xf7, 0x14,
+	0x78, 0xd4, 0x6b, 0x7d, 0x8c, 0x9f, 0xf4, 0x56, 0x5f, 0x06, 0x62, 0x5f, 0x00, 0x09, 0x73, 0x34,
+	0xb2, 0x41, 0x51, 0x2c, 0xe6, 0x4a, 0xe2, 0x60, 0x5f, 0x38, 0xa5, 0xc4, 0x19, 0xd9, 0x8e, 0x92,
+	0x7c, 0xe8, 0x1d, 0xf9, 0x1d, 0x21, 0xec, 0x0b, 0x84, 0x4a, 0x11, 0x42, 0x23, 0x1b, 0x21, 0x25,
+	0x1b, 0x7f, 0x59, 0xcc, 0x69, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x71, 0x1d, 0x0c, 0x73, 0x52,
+	0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LanguageConstantServiceClient is the client API for LanguageConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LanguageConstantServiceClient interface {
+	// Returns the requested language constant.
+	GetLanguageConstant(ctx context.Context, in *GetLanguageConstantRequest, opts ...grpc.CallOption) (*resources.LanguageConstant, error)
+}
+
+type languageConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewLanguageConstantServiceClient(cc grpc.ClientConnInterface) LanguageConstantServiceClient {
+	return &languageConstantServiceClient{cc}
+}
+
+func (c *languageConstantServiceClient) GetLanguageConstant(ctx context.Context, in *GetLanguageConstantRequest, opts ...grpc.CallOption) (*resources.LanguageConstant, error) {
+	out := new(resources.LanguageConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.LanguageConstantService/GetLanguageConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LanguageConstantServiceServer is the server API for LanguageConstantService service.
+type LanguageConstantServiceServer interface {
+	// Returns the requested language constant.
+	GetLanguageConstant(context.Context, *GetLanguageConstantRequest) (*resources.LanguageConstant, error)
+}
+
+// UnimplementedLanguageConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLanguageConstantServiceServer struct {
+}
+
+func (*UnimplementedLanguageConstantServiceServer) GetLanguageConstant(ctx context.Context, req *GetLanguageConstantRequest) (*resources.LanguageConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLanguageConstant not implemented")
+}
+
+func RegisterLanguageConstantServiceServer(s *grpc.Server, srv LanguageConstantServiceServer) {
+	s.RegisterService(&_LanguageConstantService_serviceDesc, srv)
+}
+
+func _LanguageConstantService_GetLanguageConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLanguageConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LanguageConstantServiceServer).GetLanguageConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.LanguageConstantService/GetLanguageConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LanguageConstantServiceServer).GetLanguageConstant(ctx, req.(*GetLanguageConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LanguageConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.LanguageConstantService",
+	HandlerType: (*LanguageConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetLanguageConstant",
+			Handler:    _LanguageConstantService_GetLanguageConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/language_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/location_view_service.pb.go b/googleapis/ads/googleads/v3/services/location_view_service.pb.go
new file mode 100644
index 0000000..33e0038
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/location_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/location_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [LocationViewService.GetLocationView][google.ads.googleads.v3.services.LocationViewService.GetLocationView].
+type GetLocationViewRequest struct {
+	// Required. The resource name of the location view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLocationViewRequest) Reset()         { *m = GetLocationViewRequest{} }
+func (m *GetLocationViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLocationViewRequest) ProtoMessage()    {}
+func (*GetLocationViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd56f84abb1064dc, []int{0}
+}
+
+func (m *GetLocationViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLocationViewRequest.Unmarshal(m, b)
+}
+func (m *GetLocationViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLocationViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLocationViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLocationViewRequest.Merge(m, src)
+}
+func (m *GetLocationViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLocationViewRequest.Size(m)
+}
+func (m *GetLocationViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLocationViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLocationViewRequest proto.InternalMessageInfo
+
+func (m *GetLocationViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetLocationViewRequest)(nil), "google.ads.googleads.v3.services.GetLocationViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/location_view_service.proto", fileDescriptor_dd56f84abb1064dc)
+}
+
+var fileDescriptor_dd56f84abb1064dc = []byte{
+	// 411 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0xcb, 0xd3, 0x40,
+	0x18, 0x27, 0x29, 0x08, 0x06, 0x45, 0x88, 0xa0, 0x25, 0x0a, 0x96, 0xd2, 0xa1, 0x74, 0xb8, 0x43,
+	0x83, 0x20, 0xa7, 0x0e, 0x97, 0x25, 0x0e, 0x22, 0xa5, 0x42, 0x06, 0x09, 0x84, 0x6b, 0xf2, 0x18,
+	0x0f, 0x92, 0x5c, 0xcd, 0xa5, 0xe9, 0x20, 0x2e, 0x7e, 0x05, 0xbf, 0x81, 0xa3, 0xdf, 0xc3, 0xa5,
+	0xab, 0x9b, 0x93, 0x83, 0x93, 0x1f, 0xe1, 0x5d, 0xde, 0x97, 0xf4, 0x72, 0x69, 0xfa, 0xbe, 0x2d,
+	0xdd, 0x7e, 0xe4, 0xf7, 0xe7, 0x79, 0x9e, 0xdf, 0xc5, 0x7a, 0x95, 0x0a, 0x91, 0x66, 0x80, 0x59,
+	0x22, 0xb1, 0x82, 0x0d, 0xaa, 0x5d, 0x2c, 0xa1, 0xac, 0x79, 0x0c, 0x12, 0x67, 0x22, 0x66, 0x15,
+	0x17, 0x45, 0x54, 0x73, 0xd8, 0x44, 0xed, 0x67, 0xb4, 0x2a, 0x45, 0x25, 0xec, 0x91, 0xb2, 0x20,
+	0x96, 0x48, 0xd4, 0xb9, 0x51, 0xed, 0x22, 0xed, 0x76, 0x9e, 0x9f, 0xca, 0x2f, 0x41, 0x8a, 0x75,
+	0x79, 0x63, 0x80, 0x0a, 0x76, 0x1e, 0x6b, 0xdb, 0x8a, 0x63, 0x56, 0x14, 0xa2, 0xda, 0x29, 0x64,
+	0xcb, 0x3e, 0xec, 0xb1, 0x71, 0xc6, 0xa1, 0xa8, 0x5a, 0xe2, 0x49, 0x8f, 0xf8, 0xc8, 0x21, 0x4b,
+	0xa2, 0x25, 0x7c, 0x62, 0x35, 0x17, 0xa5, 0x12, 0x8c, 0x3d, 0xeb, 0x81, 0x0f, 0xd5, 0xdb, 0x76,
+	0x62, 0xc0, 0x61, 0xb3, 0x80, 0xcf, 0x6b, 0x90, 0x95, 0x3d, 0xb5, 0xee, 0xea, 0x95, 0xa2, 0x82,
+	0xe5, 0x30, 0x34, 0x46, 0xc6, 0xf4, 0xb6, 0x37, 0xf8, 0x4b, 0xcd, 0xc5, 0x1d, 0xcd, 0xbc, 0x63,
+	0x39, 0x3c, 0xbb, 0x30, 0xac, 0xfb, 0xfd, 0x84, 0xf7, 0xea, 0x56, 0xfb, 0x97, 0x61, 0xdd, 0xbb,
+	0x16, 0x6e, 0xbf, 0x40, 0xe7, 0x1a, 0x42, 0xc7, 0xf7, 0x71, 0xf0, 0x49, 0x67, 0xd7, 0x1c, 0xea,
+	0xfb, 0xc6, 0xfe, 0x1f, 0x7a, 0x78, 0xc1, 0xb7, 0xdf, 0xff, 0xbe, 0x9b, 0x4f, 0x6d, 0xdc, 0xb4,
+	0xfd, 0xe5, 0x80, 0x79, 0x1d, 0xaf, 0x65, 0x25, 0x72, 0x28, 0x25, 0x9e, 0x75, 0xf5, 0x37, 0x21,
+	0x12, 0xcf, 0xbe, 0x3a, 0x8f, 0xb6, 0x74, 0xb8, 0x1f, 0xd8, 0xa2, 0x15, 0x97, 0x28, 0x16, 0xb9,
+	0x77, 0x69, 0x58, 0x93, 0x58, 0xe4, 0x67, 0xcf, 0xf2, 0x86, 0x47, 0x2a, 0x9a, 0x37, 0x6f, 0x30,
+	0x37, 0x3e, 0xbc, 0x69, 0xdd, 0xa9, 0xc8, 0x58, 0x91, 0x22, 0x51, 0xa6, 0x38, 0x85, 0x62, 0xf7,
+	0x42, 0x78, 0x3f, 0xef, 0xf4, 0x3f, 0xf9, 0x52, 0x83, 0x1f, 0xe6, 0xc0, 0xa7, 0xf4, 0xa7, 0x39,
+	0xf2, 0x55, 0x20, 0x4d, 0x24, 0x52, 0xb0, 0x41, 0x81, 0x8b, 0xda, 0xc1, 0x72, 0xab, 0x25, 0x21,
+	0x4d, 0x64, 0xd8, 0x49, 0xc2, 0xc0, 0x0d, 0xb5, 0xe4, 0xbf, 0x39, 0x51, 0xdf, 0x09, 0xa1, 0x89,
+	0x24, 0xa4, 0x13, 0x11, 0x12, 0xb8, 0x84, 0x68, 0xd9, 0xf2, 0xd6, 0x6e, 0x4f, 0xf7, 0x2a, 0x00,
+	0x00, 0xff, 0xff, 0xfa, 0xae, 0xea, 0x6c, 0x3a, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LocationViewServiceClient is the client API for LocationViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LocationViewServiceClient interface {
+	// Returns the requested location view in full detail.
+	GetLocationView(ctx context.Context, in *GetLocationViewRequest, opts ...grpc.CallOption) (*resources.LocationView, error)
+}
+
+type locationViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewLocationViewServiceClient(cc grpc.ClientConnInterface) LocationViewServiceClient {
+	return &locationViewServiceClient{cc}
+}
+
+func (c *locationViewServiceClient) GetLocationView(ctx context.Context, in *GetLocationViewRequest, opts ...grpc.CallOption) (*resources.LocationView, error) {
+	out := new(resources.LocationView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.LocationViewService/GetLocationView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LocationViewServiceServer is the server API for LocationViewService service.
+type LocationViewServiceServer interface {
+	// Returns the requested location view in full detail.
+	GetLocationView(context.Context, *GetLocationViewRequest) (*resources.LocationView, error)
+}
+
+// UnimplementedLocationViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLocationViewServiceServer struct {
+}
+
+func (*UnimplementedLocationViewServiceServer) GetLocationView(ctx context.Context, req *GetLocationViewRequest) (*resources.LocationView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLocationView not implemented")
+}
+
+func RegisterLocationViewServiceServer(s *grpc.Server, srv LocationViewServiceServer) {
+	s.RegisterService(&_LocationViewService_serviceDesc, srv)
+}
+
+func _LocationViewService_GetLocationView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLocationViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LocationViewServiceServer).GetLocationView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.LocationViewService/GetLocationView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LocationViewServiceServer).GetLocationView(ctx, req.(*GetLocationViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LocationViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.LocationViewService",
+	HandlerType: (*LocationViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetLocationView",
+			Handler:    _LocationViewService_GetLocationView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/location_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/managed_placement_view_service.pb.go b/googleapis/ads/googleads/v3/services/managed_placement_view_service.pb.go
new file mode 100644
index 0000000..82cce69
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/managed_placement_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/managed_placement_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ManagedPlacementViewService.GetManagedPlacementView][google.ads.googleads.v3.services.ManagedPlacementViewService.GetManagedPlacementView].
+type GetManagedPlacementViewRequest struct {
+	// Required. The resource name of the Managed Placement View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetManagedPlacementViewRequest) Reset()         { *m = GetManagedPlacementViewRequest{} }
+func (m *GetManagedPlacementViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetManagedPlacementViewRequest) ProtoMessage()    {}
+func (*GetManagedPlacementViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d6ee6f7f223a331f, []int{0}
+}
+
+func (m *GetManagedPlacementViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Unmarshal(m, b)
+}
+func (m *GetManagedPlacementViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetManagedPlacementViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetManagedPlacementViewRequest.Merge(m, src)
+}
+func (m *GetManagedPlacementViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Size(m)
+}
+func (m *GetManagedPlacementViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetManagedPlacementViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetManagedPlacementViewRequest proto.InternalMessageInfo
+
+func (m *GetManagedPlacementViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetManagedPlacementViewRequest)(nil), "google.ads.googleads.v3.services.GetManagedPlacementViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/managed_placement_view_service.proto", fileDescriptor_d6ee6f7f223a331f)
+}
+
+var fileDescriptor_d6ee6f7f223a331f = []byte{
+	// 424 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x31, 0x8b, 0xd4, 0x40,
+	0x18, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xa4, 0xb9, 0x23, 0x27, 0x1a, 0x8e, 0x2b, 0x8e, 0x2b, 0x66,
+	0xc0, 0x14, 0x87, 0x23, 0x8a, 0xb3, 0x20, 0x2b, 0x82, 0xba, 0x9c, 0x90, 0x42, 0x02, 0x61, 0x2e,
+	0xf9, 0x8c, 0x03, 0xc9, 0x4c, 0xcc, 0xcc, 0xe6, 0x0a, 0xb1, 0xb1, 0xf1, 0x07, 0xf8, 0x0f, 0xae,
+	0xf4, 0xa7, 0x6c, 0x6b, 0x67, 0x65, 0xa1, 0x8d, 0xbf, 0xe2, 0xc8, 0x4e, 0x26, 0xbb, 0x0b, 0x9b,
+	0xdd, 0xee, 0x91, 0xf7, 0xbe, 0xf7, 0xbe, 0xf9, 0x5e, 0xbc, 0x97, 0x85, 0x94, 0x45, 0x09, 0x98,
+	0xe5, 0x0a, 0x1b, 0xd8, 0xa1, 0x36, 0xc2, 0x0a, 0x9a, 0x96, 0x67, 0xa0, 0x70, 0xc5, 0x04, 0x2b,
+	0x20, 0x4f, 0xeb, 0x92, 0x65, 0x50, 0x81, 0xd0, 0x69, 0xcb, 0xe1, 0x3a, 0xed, 0x79, 0x54, 0x37,
+	0x52, 0x4b, 0x3f, 0x34, 0xb3, 0x88, 0xe5, 0x0a, 0x0d, 0x36, 0xa8, 0x8d, 0x90, 0xb5, 0x09, 0x9e,
+	0x8f, 0x05, 0x35, 0xa0, 0xe4, 0xbc, 0x19, 0x4f, 0x32, 0x09, 0xc1, 0x03, 0x3b, 0x5f, 0x73, 0xcc,
+	0x84, 0x90, 0x9a, 0x69, 0x2e, 0x85, 0xea, 0xd9, 0xc3, 0x35, 0x36, 0x2b, 0x39, 0x08, 0xdd, 0x13,
+	0x8f, 0xd6, 0x88, 0x8f, 0x1c, 0xca, 0x3c, 0xbd, 0x82, 0x4f, 0xac, 0xe5, 0xb2, 0x31, 0x82, 0x93,
+	0xd7, 0xde, 0xc3, 0x29, 0xe8, 0x37, 0x26, 0x7a, 0x66, 0x93, 0x63, 0x0e, 0xd7, 0x97, 0xf0, 0x79,
+	0x0e, 0x4a, 0xfb, 0x67, 0xde, 0x7d, 0xbb, 0x63, 0x2a, 0x58, 0x05, 0x47, 0x4e, 0xe8, 0x9c, 0xdd,
+	0x9d, 0x1c, 0xfc, 0xa1, 0xee, 0xe5, 0x3d, 0xcb, 0xbc, 0x65, 0x15, 0x3c, 0xbe, 0x71, 0xbd, 0xe3,
+	0x6d, 0x4e, 0xef, 0xcd, 0x11, 0xfc, 0x7f, 0x8e, 0x77, 0x38, 0x12, 0xe6, 0xbf, 0x40, 0xfb, 0x4e,
+	0x88, 0x76, 0xef, 0x19, 0x5c, 0x8c, 0x3a, 0x0c, 0x27, 0x46, 0xdb, 0xe6, 0x4f, 0xde, 0xfd, 0xa6,
+	0x9b, 0x2f, 0xfc, 0xf6, 0xeb, 0xef, 0x0f, 0xf7, 0x89, 0x7f, 0xd1, 0xd5, 0xf3, 0x65, 0x83, 0x79,
+	0x96, 0xcd, 0x95, 0x96, 0x15, 0x34, 0x0a, 0x9f, 0xdb, 0xbe, 0x36, 0xcc, 0x14, 0x3e, 0xff, 0x1a,
+	0x1c, 0x2f, 0xe8, 0xd1, 0x6a, 0x81, 0x1e, 0xd5, 0x5c, 0xa1, 0x4c, 0x56, 0x93, 0xef, 0xae, 0x77,
+	0x9a, 0xc9, 0x6a, 0xef, 0x73, 0x27, 0xe1, 0x8e, 0x53, 0xce, 0xba, 0xee, 0x66, 0xce, 0x87, 0x57,
+	0xbd, 0x4b, 0x21, 0x4b, 0x26, 0x0a, 0x24, 0x9b, 0x02, 0x17, 0x20, 0x96, 0xcd, 0xe2, 0x55, 0xee,
+	0xf8, 0xdf, 0xfd, 0xd4, 0x82, 0x1b, 0xf7, 0x60, 0x4a, 0xe9, 0x4f, 0x37, 0x9c, 0x1a, 0x43, 0x9a,
+	0x2b, 0x64, 0x60, 0x87, 0xe2, 0x08, 0xf5, 0xc1, 0x6a, 0x61, 0x25, 0x09, 0xcd, 0x55, 0x32, 0x48,
+	0x92, 0x38, 0x4a, 0xac, 0xe4, 0xbf, 0x7b, 0x6a, 0xbe, 0x13, 0x42, 0x73, 0x45, 0xc8, 0x20, 0x22,
+	0x24, 0x8e, 0x08, 0xb1, 0xb2, 0xab, 0x3b, 0xcb, 0x3d, 0xa3, 0xdb, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0xc2, 0xdd, 0xdf, 0xe2, 0x84, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ManagedPlacementViewServiceClient is the client API for ManagedPlacementViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ManagedPlacementViewServiceClient interface {
+	// Returns the requested Managed Placement view in full detail.
+	GetManagedPlacementView(ctx context.Context, in *GetManagedPlacementViewRequest, opts ...grpc.CallOption) (*resources.ManagedPlacementView, error)
+}
+
+type managedPlacementViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewManagedPlacementViewServiceClient(cc grpc.ClientConnInterface) ManagedPlacementViewServiceClient {
+	return &managedPlacementViewServiceClient{cc}
+}
+
+func (c *managedPlacementViewServiceClient) GetManagedPlacementView(ctx context.Context, in *GetManagedPlacementViewRequest, opts ...grpc.CallOption) (*resources.ManagedPlacementView, error) {
+	out := new(resources.ManagedPlacementView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ManagedPlacementViewService/GetManagedPlacementView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ManagedPlacementViewServiceServer is the server API for ManagedPlacementViewService service.
+type ManagedPlacementViewServiceServer interface {
+	// Returns the requested Managed Placement view in full detail.
+	GetManagedPlacementView(context.Context, *GetManagedPlacementViewRequest) (*resources.ManagedPlacementView, error)
+}
+
+// UnimplementedManagedPlacementViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedManagedPlacementViewServiceServer struct {
+}
+
+func (*UnimplementedManagedPlacementViewServiceServer) GetManagedPlacementView(ctx context.Context, req *GetManagedPlacementViewRequest) (*resources.ManagedPlacementView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetManagedPlacementView not implemented")
+}
+
+func RegisterManagedPlacementViewServiceServer(s *grpc.Server, srv ManagedPlacementViewServiceServer) {
+	s.RegisterService(&_ManagedPlacementViewService_serviceDesc, srv)
+}
+
+func _ManagedPlacementViewService_GetManagedPlacementView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetManagedPlacementViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagedPlacementViewServiceServer).GetManagedPlacementView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ManagedPlacementViewService/GetManagedPlacementView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagedPlacementViewServiceServer).GetManagedPlacementView(ctx, req.(*GetManagedPlacementViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ManagedPlacementViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ManagedPlacementViewService",
+	HandlerType: (*ManagedPlacementViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetManagedPlacementView",
+			Handler:    _ManagedPlacementViewService_GetManagedPlacementView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/managed_placement_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/media_file_service.pb.go b/googleapis/ads/googleads/v3/services/media_file_service.pb.go
new file mode 100644
index 0000000..f8d8177
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/media_file_service.pb.go
@@ -0,0 +1,484 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/media_file_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [MediaFileService.GetMediaFile][google.ads.googleads.v3.services.MediaFileService.GetMediaFile]
+type GetMediaFileRequest struct {
+	// Required. The resource name of the media file to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMediaFileRequest) Reset()         { *m = GetMediaFileRequest{} }
+func (m *GetMediaFileRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMediaFileRequest) ProtoMessage()    {}
+func (*GetMediaFileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3d91a63d8171090, []int{0}
+}
+
+func (m *GetMediaFileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMediaFileRequest.Unmarshal(m, b)
+}
+func (m *GetMediaFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMediaFileRequest.Marshal(b, m, deterministic)
+}
+func (m *GetMediaFileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMediaFileRequest.Merge(m, src)
+}
+func (m *GetMediaFileRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMediaFileRequest.Size(m)
+}
+func (m *GetMediaFileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMediaFileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMediaFileRequest proto.InternalMessageInfo
+
+func (m *GetMediaFileRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MediaFileService.MutateMediaFiles][google.ads.googleads.v3.services.MediaFileService.MutateMediaFiles]
+type MutateMediaFilesRequest struct {
+	// Required. The ID of the customer whose media files are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual media file.
+	Operations []*MediaFileOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateMediaFilesRequest) Reset()         { *m = MutateMediaFilesRequest{} }
+func (m *MutateMediaFilesRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFilesRequest) ProtoMessage()    {}
+func (*MutateMediaFilesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3d91a63d8171090, []int{1}
+}
+
+func (m *MutateMediaFilesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFilesRequest.Unmarshal(m, b)
+}
+func (m *MutateMediaFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFilesRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateMediaFilesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFilesRequest.Merge(m, src)
+}
+func (m *MutateMediaFilesRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFilesRequest.Size(m)
+}
+func (m *MutateMediaFilesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFilesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFilesRequest proto.InternalMessageInfo
+
+func (m *MutateMediaFilesRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateMediaFilesRequest) GetOperations() []*MediaFileOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateMediaFilesRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateMediaFilesRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation to create media file.
+type MediaFileOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*MediaFileOperation_Create
+	Operation            isMediaFileOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MediaFileOperation) Reset()         { *m = MediaFileOperation{} }
+func (m *MediaFileOperation) String() string { return proto.CompactTextString(m) }
+func (*MediaFileOperation) ProtoMessage()    {}
+func (*MediaFileOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3d91a63d8171090, []int{2}
+}
+
+func (m *MediaFileOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFileOperation.Unmarshal(m, b)
+}
+func (m *MediaFileOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFileOperation.Marshal(b, m, deterministic)
+}
+func (m *MediaFileOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFileOperation.Merge(m, src)
+}
+func (m *MediaFileOperation) XXX_Size() int {
+	return xxx_messageInfo_MediaFileOperation.Size(m)
+}
+func (m *MediaFileOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFileOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFileOperation proto.InternalMessageInfo
+
+type isMediaFileOperation_Operation interface {
+	isMediaFileOperation_Operation()
+}
+
+type MediaFileOperation_Create struct {
+	Create *resources.MediaFile `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+func (*MediaFileOperation_Create) isMediaFileOperation_Operation() {}
+
+func (m *MediaFileOperation) GetOperation() isMediaFileOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MediaFileOperation) GetCreate() *resources.MediaFile {
+	if x, ok := m.GetOperation().(*MediaFileOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*MediaFileOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*MediaFileOperation_Create)(nil),
+	}
+}
+
+// Response message for a media file mutate.
+type MutateMediaFilesResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateMediaFileResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateMediaFilesResponse) Reset()         { *m = MutateMediaFilesResponse{} }
+func (m *MutateMediaFilesResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFilesResponse) ProtoMessage()    {}
+func (*MutateMediaFilesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3d91a63d8171090, []int{3}
+}
+
+func (m *MutateMediaFilesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFilesResponse.Unmarshal(m, b)
+}
+func (m *MutateMediaFilesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFilesResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateMediaFilesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFilesResponse.Merge(m, src)
+}
+func (m *MutateMediaFilesResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFilesResponse.Size(m)
+}
+func (m *MutateMediaFilesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFilesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFilesResponse proto.InternalMessageInfo
+
+func (m *MutateMediaFilesResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateMediaFilesResponse) GetResults() []*MutateMediaFileResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the media file mutate.
+type MutateMediaFileResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateMediaFileResult) Reset()         { *m = MutateMediaFileResult{} }
+func (m *MutateMediaFileResult) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFileResult) ProtoMessage()    {}
+func (*MutateMediaFileResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d3d91a63d8171090, []int{4}
+}
+
+func (m *MutateMediaFileResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFileResult.Unmarshal(m, b)
+}
+func (m *MutateMediaFileResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFileResult.Marshal(b, m, deterministic)
+}
+func (m *MutateMediaFileResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFileResult.Merge(m, src)
+}
+func (m *MutateMediaFileResult) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFileResult.Size(m)
+}
+func (m *MutateMediaFileResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFileResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFileResult proto.InternalMessageInfo
+
+func (m *MutateMediaFileResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetMediaFileRequest)(nil), "google.ads.googleads.v3.services.GetMediaFileRequest")
+	proto.RegisterType((*MutateMediaFilesRequest)(nil), "google.ads.googleads.v3.services.MutateMediaFilesRequest")
+	proto.RegisterType((*MediaFileOperation)(nil), "google.ads.googleads.v3.services.MediaFileOperation")
+	proto.RegisterType((*MutateMediaFilesResponse)(nil), "google.ads.googleads.v3.services.MutateMediaFilesResponse")
+	proto.RegisterType((*MutateMediaFileResult)(nil), "google.ads.googleads.v3.services.MutateMediaFileResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/media_file_service.proto", fileDescriptor_d3d91a63d8171090)
+}
+
+var fileDescriptor_d3d91a63d8171090 = []byte{
+	// 692 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xcd, 0x6a, 0x14, 0x4b,
+	0x14, 0xbe, 0x3d, 0x73, 0xc9, 0xbd, 0xa9, 0x49, 0xee, 0x0d, 0x15, 0x62, 0x86, 0x51, 0x70, 0x68,
+	0x03, 0x0e, 0x43, 0xa8, 0x86, 0x99, 0x88, 0xa4, 0x35, 0x48, 0x0f, 0x3a, 0x89, 0x8b, 0x98, 0xd8,
+	0x81, 0x80, 0x32, 0xd0, 0x54, 0xba, 0x2b, 0x63, 0x41, 0x77, 0x57, 0x5b, 0x55, 0x3d, 0x10, 0x42,
+	0x36, 0xbe, 0x82, 0x6f, 0xe0, 0xd2, 0xbd, 0x0b, 0x5f, 0x21, 0xb8, 0x73, 0x97, 0x85, 0xb8, 0x70,
+	0x21, 0x3e, 0x83, 0x0b, 0xe9, 0x9f, 0xea, 0xe9, 0x99, 0x24, 0xc4, 0xb8, 0x3b, 0x9c, 0x73, 0xbe,
+	0xef, 0x7c, 0xe7, 0xa7, 0x0a, 0xac, 0x0f, 0x19, 0x1b, 0xfa, 0xc4, 0xc0, 0x9e, 0x30, 0x32, 0x33,
+	0xb1, 0x46, 0x5d, 0x43, 0x10, 0x3e, 0xa2, 0x2e, 0x11, 0x46, 0x40, 0x3c, 0x8a, 0x9d, 0x43, 0xea,
+	0x13, 0x27, 0xf7, 0xa1, 0x88, 0x33, 0xc9, 0x60, 0x33, 0xcb, 0x47, 0xd8, 0x13, 0xa8, 0x80, 0xa2,
+	0x51, 0x17, 0x29, 0x68, 0xa3, 0x73, 0x19, 0x39, 0x27, 0x82, 0xc5, 0x7c, 0x92, 0x3d, 0x63, 0x6d,
+	0xdc, 0x52, 0x98, 0x88, 0x1a, 0x38, 0x0c, 0x99, 0xc4, 0x92, 0xb2, 0x50, 0xe4, 0xd1, 0xe5, 0x52,
+	0xd4, 0xf5, 0x29, 0x09, 0x65, 0x1e, 0xb8, 0x5d, 0x0a, 0x1c, 0x52, 0xe2, 0x7b, 0xce, 0x01, 0x79,
+	0x85, 0x47, 0x94, 0xf1, 0x29, 0x24, 0x8f, 0x5c, 0x43, 0x48, 0x2c, 0xe3, 0x9c, 0x52, 0x7f, 0x04,
+	0x16, 0x37, 0x89, 0xdc, 0x4e, 0x74, 0xf4, 0xa9, 0x4f, 0x6c, 0xf2, 0x3a, 0x26, 0x42, 0xc2, 0x16,
+	0x98, 0x57, 0x2a, 0x9d, 0x10, 0x07, 0xa4, 0xae, 0x35, 0xb5, 0xd6, 0x6c, 0xaf, 0xfa, 0xd5, 0xaa,
+	0xd8, 0x73, 0x2a, 0xf2, 0x0c, 0x07, 0x44, 0xff, 0xae, 0x81, 0xe5, 0xed, 0x58, 0x62, 0x49, 0x0a,
+	0x12, 0xa1, 0x58, 0x56, 0x40, 0xcd, 0x8d, 0x85, 0x64, 0x01, 0xe1, 0x0e, 0xf5, 0xca, 0x1c, 0x40,
+	0xf9, 0x9f, 0x7a, 0xf0, 0x05, 0x00, 0x2c, 0x22, 0x3c, 0xeb, 0xb4, 0x5e, 0x69, 0x56, 0x5b, 0xb5,
+	0xce, 0x1a, 0xba, 0x6a, 0xbc, 0xa8, 0x28, 0xb7, 0xa3, 0xc0, 0x39, 0xf5, 0x98, 0x0c, 0xde, 0x05,
+	0xff, 0x47, 0x98, 0x4b, 0x8a, 0x7d, 0xe7, 0x10, 0x53, 0x3f, 0xe6, 0xa4, 0x5e, 0x6d, 0x6a, 0xad,
+	0x7f, 0xed, 0xff, 0x72, 0x77, 0x3f, 0xf3, 0xc2, 0x3b, 0x60, 0x7e, 0x84, 0x7d, 0xea, 0x61, 0x49,
+	0x1c, 0x16, 0xfa, 0x47, 0xf5, 0xbf, 0xd3, 0xb4, 0x39, 0xe5, 0xdc, 0x09, 0xfd, 0x23, 0x9d, 0x02,
+	0x78, 0xbe, 0x28, 0xec, 0x83, 0x19, 0x97, 0x13, 0x2c, 0xb3, 0x19, 0xd5, 0x3a, 0xab, 0x97, 0x4a,
+	0x2f, 0xf6, 0x3e, 0xd6, 0xbe, 0xf5, 0x97, 0x9d, 0xa3, 0x7b, 0x35, 0x30, 0x5b, 0x28, 0xd7, 0x3f,
+	0x68, 0xa0, 0x7e, 0x7e, 0xaa, 0x22, 0x62, 0xa1, 0x20, 0xb0, 0x0f, 0x96, 0xa6, 0xba, 0x72, 0x08,
+	0xe7, 0x8c, 0xa7, 0xbd, 0xd5, 0x3a, 0x50, 0x09, 0xe0, 0x91, 0x8b, 0xf6, 0xd2, 0x65, 0xdb, 0x8b,
+	0x93, 0xfd, 0x3e, 0x49, 0xd2, 0xe1, 0x73, 0xf0, 0x0f, 0x27, 0x22, 0xf6, 0xa5, 0x9a, 0xfa, 0xfd,
+	0xdf, 0x98, 0xfa, 0xa4, 0x28, 0x3b, 0xc5, 0xdb, 0x8a, 0x47, 0x7f, 0x08, 0x96, 0x2e, 0xcc, 0x48,
+	0x06, 0x7c, 0xc1, 0x41, 0x4d, 0xde, 0x52, 0xe7, 0x53, 0x15, 0x2c, 0x14, 0xc0, 0xbd, 0xac, 0x24,
+	0xfc, 0xa8, 0x81, 0xb9, 0xf2, 0x89, 0xc2, 0x7b, 0x57, 0xab, 0xbc, 0xe0, 0xa4, 0x1b, 0xd7, 0xda,
+	0x8b, 0xfe, 0xf8, 0xcc, 0x9a, 0x14, 0xfc, 0xe6, 0xf3, 0xb7, 0xb7, 0x15, 0x04, 0x57, 0x93, 0x07,
+	0x7c, 0x3c, 0x11, 0xd9, 0x50, 0xb7, 0x2c, 0x8c, 0x76, 0xf6, 0xa2, 0xd3, 0x75, 0x19, 0xed, 0x13,
+	0xf8, 0x45, 0x03, 0x0b, 0xd3, 0x6b, 0x84, 0xeb, 0xd7, 0x9e, 0xb2, 0x7a, 0x50, 0x0d, 0xf3, 0x4f,
+	0xa0, 0xd9, 0xd5, 0xe8, 0x7b, 0x67, 0xd6, 0x8d, 0xd2, 0x6b, 0x5c, 0x1d, 0x3f, 0x93, 0xb4, 0xb5,
+	0x35, 0xdd, 0x48, 0x5a, 0x1b, 0xf7, 0x72, 0x5c, 0x4a, 0xde, 0x68, 0x9f, 0x94, 0x3a, 0x33, 0x83,
+	0xb4, 0x86, 0xa9, 0xb5, 0x1b, 0x37, 0x4f, 0xad, 0xfa, 0x58, 0x47, 0x6e, 0x45, 0x54, 0x20, 0x97,
+	0x05, 0xbd, 0x9f, 0x1a, 0x58, 0x71, 0x59, 0x70, 0xa5, 0xe6, 0xde, 0xd2, 0xf4, 0xd2, 0x77, 0x93,
+	0xbf, 0x69, 0x57, 0x7b, 0xb9, 0x95, 0x43, 0x87, 0xcc, 0xc7, 0xe1, 0x10, 0x31, 0x3e, 0x34, 0x86,
+	0x24, 0x4c, 0x7f, 0x2e, 0x63, 0x5c, 0xec, 0xf2, 0xef, 0xfb, 0x81, 0x32, 0xde, 0x55, 0xaa, 0x9b,
+	0x96, 0xf5, 0xbe, 0xd2, 0xdc, 0xcc, 0x08, 0x2d, 0x4f, 0xa0, 0xcc, 0x4c, 0xac, 0xfd, 0x2e, 0xca,
+	0x0b, 0x8b, 0x53, 0x95, 0x32, 0xb0, 0x3c, 0x31, 0x28, 0x52, 0x06, 0xfb, 0xdd, 0x81, 0x4a, 0xf9,
+	0x51, 0x59, 0xc9, 0xfc, 0xa6, 0x69, 0x79, 0xc2, 0x34, 0x8b, 0x24, 0xd3, 0xdc, 0xef, 0x9a, 0xa6,
+	0x4a, 0x3b, 0x98, 0x49, 0x75, 0x76, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x75, 0x0d, 0x1f,
+	0x65, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// MediaFileServiceClient is the client API for MediaFileService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MediaFileServiceClient interface {
+	// Returns the requested media file in full detail.
+	GetMediaFile(ctx context.Context, in *GetMediaFileRequest, opts ...grpc.CallOption) (*resources.MediaFile, error)
+	// Creates media files. Operation statuses are returned.
+	MutateMediaFiles(ctx context.Context, in *MutateMediaFilesRequest, opts ...grpc.CallOption) (*MutateMediaFilesResponse, error)
+}
+
+type mediaFileServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMediaFileServiceClient(cc grpc.ClientConnInterface) MediaFileServiceClient {
+	return &mediaFileServiceClient{cc}
+}
+
+func (c *mediaFileServiceClient) GetMediaFile(ctx context.Context, in *GetMediaFileRequest, opts ...grpc.CallOption) (*resources.MediaFile, error) {
+	out := new(resources.MediaFile)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MediaFileService/GetMediaFile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mediaFileServiceClient) MutateMediaFiles(ctx context.Context, in *MutateMediaFilesRequest, opts ...grpc.CallOption) (*MutateMediaFilesResponse, error) {
+	out := new(MutateMediaFilesResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MediaFileService/MutateMediaFiles", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MediaFileServiceServer is the server API for MediaFileService service.
+type MediaFileServiceServer interface {
+	// Returns the requested media file in full detail.
+	GetMediaFile(context.Context, *GetMediaFileRequest) (*resources.MediaFile, error)
+	// Creates media files. Operation statuses are returned.
+	MutateMediaFiles(context.Context, *MutateMediaFilesRequest) (*MutateMediaFilesResponse, error)
+}
+
+// UnimplementedMediaFileServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedMediaFileServiceServer struct {
+}
+
+func (*UnimplementedMediaFileServiceServer) GetMediaFile(ctx context.Context, req *GetMediaFileRequest) (*resources.MediaFile, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetMediaFile not implemented")
+}
+func (*UnimplementedMediaFileServiceServer) MutateMediaFiles(ctx context.Context, req *MutateMediaFilesRequest) (*MutateMediaFilesResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateMediaFiles not implemented")
+}
+
+func RegisterMediaFileServiceServer(s *grpc.Server, srv MediaFileServiceServer) {
+	s.RegisterService(&_MediaFileService_serviceDesc, srv)
+}
+
+func _MediaFileService_GetMediaFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMediaFileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MediaFileServiceServer).GetMediaFile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MediaFileService/GetMediaFile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MediaFileServiceServer).GetMediaFile(ctx, req.(*GetMediaFileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MediaFileService_MutateMediaFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateMediaFilesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MediaFileServiceServer).MutateMediaFiles(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MediaFileService/MutateMediaFiles",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MediaFileServiceServer).MutateMediaFiles(ctx, req.(*MutateMediaFilesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MediaFileService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.MediaFileService",
+	HandlerType: (*MediaFileServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetMediaFile",
+			Handler:    _MediaFileService_GetMediaFile_Handler,
+		},
+		{
+			MethodName: "MutateMediaFiles",
+			Handler:    _MediaFileService_MutateMediaFiles_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/media_file_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/merchant_center_link_service.pb.go b/googleapis/ads/googleads/v3/services/merchant_center_link_service.pb.go
new file mode 100644
index 0000000..50b2a66
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/merchant_center_link_service.pb.go
@@ -0,0 +1,600 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/merchant_center_link_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [MerchantCenterLinkService.ListMerchantCenterLinks][google.ads.googleads.v3.services.MerchantCenterLinkService.ListMerchantCenterLinks].
+type ListMerchantCenterLinksRequest struct {
+	// Required. The ID of the customer onto which to apply the Merchant Center link list
+	// operation.
+	CustomerId           string   `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListMerchantCenterLinksRequest) Reset()         { *m = ListMerchantCenterLinksRequest{} }
+func (m *ListMerchantCenterLinksRequest) String() string { return proto.CompactTextString(m) }
+func (*ListMerchantCenterLinksRequest) ProtoMessage()    {}
+func (*ListMerchantCenterLinksRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{0}
+}
+
+func (m *ListMerchantCenterLinksRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListMerchantCenterLinksRequest.Unmarshal(m, b)
+}
+func (m *ListMerchantCenterLinksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListMerchantCenterLinksRequest.Marshal(b, m, deterministic)
+}
+func (m *ListMerchantCenterLinksRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListMerchantCenterLinksRequest.Merge(m, src)
+}
+func (m *ListMerchantCenterLinksRequest) XXX_Size() int {
+	return xxx_messageInfo_ListMerchantCenterLinksRequest.Size(m)
+}
+func (m *ListMerchantCenterLinksRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListMerchantCenterLinksRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListMerchantCenterLinksRequest proto.InternalMessageInfo
+
+func (m *ListMerchantCenterLinksRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+// Response message for [MerchantCenterLinkService.ListMerchantCenterLinks][google.ads.googleads.v3.services.MerchantCenterLinkService.ListMerchantCenterLinks].
+type ListMerchantCenterLinksResponse struct {
+	// Merchant Center links available for the requested customer
+	MerchantCenterLinks  []*resources.MerchantCenterLink `protobuf:"bytes,1,rep,name=merchant_center_links,json=merchantCenterLinks,proto3" json:"merchant_center_links,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ListMerchantCenterLinksResponse) Reset()         { *m = ListMerchantCenterLinksResponse{} }
+func (m *ListMerchantCenterLinksResponse) String() string { return proto.CompactTextString(m) }
+func (*ListMerchantCenterLinksResponse) ProtoMessage()    {}
+func (*ListMerchantCenterLinksResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{1}
+}
+
+func (m *ListMerchantCenterLinksResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListMerchantCenterLinksResponse.Unmarshal(m, b)
+}
+func (m *ListMerchantCenterLinksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListMerchantCenterLinksResponse.Marshal(b, m, deterministic)
+}
+func (m *ListMerchantCenterLinksResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListMerchantCenterLinksResponse.Merge(m, src)
+}
+func (m *ListMerchantCenterLinksResponse) XXX_Size() int {
+	return xxx_messageInfo_ListMerchantCenterLinksResponse.Size(m)
+}
+func (m *ListMerchantCenterLinksResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListMerchantCenterLinksResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListMerchantCenterLinksResponse proto.InternalMessageInfo
+
+func (m *ListMerchantCenterLinksResponse) GetMerchantCenterLinks() []*resources.MerchantCenterLink {
+	if m != nil {
+		return m.MerchantCenterLinks
+	}
+	return nil
+}
+
+// Request message for [MerchantCenterLinkService.GetMerchantCenterLink][google.ads.googleads.v3.services.MerchantCenterLinkService.GetMerchantCenterLink].
+type GetMerchantCenterLinkRequest struct {
+	// Required. Resource name of the Merchant Center link.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMerchantCenterLinkRequest) Reset()         { *m = GetMerchantCenterLinkRequest{} }
+func (m *GetMerchantCenterLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMerchantCenterLinkRequest) ProtoMessage()    {}
+func (*GetMerchantCenterLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{2}
+}
+
+func (m *GetMerchantCenterLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMerchantCenterLinkRequest.Unmarshal(m, b)
+}
+func (m *GetMerchantCenterLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMerchantCenterLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *GetMerchantCenterLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMerchantCenterLinkRequest.Merge(m, src)
+}
+func (m *GetMerchantCenterLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMerchantCenterLinkRequest.Size(m)
+}
+func (m *GetMerchantCenterLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMerchantCenterLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMerchantCenterLinkRequest proto.InternalMessageInfo
+
+func (m *GetMerchantCenterLinkRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MerchantCenterLinkService.MutateMerchantCenterLink][google.ads.googleads.v3.services.MerchantCenterLinkService.MutateMerchantCenterLink].
+type MutateMerchantCenterLinkRequest struct {
+	// Required. The ID of the customer being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The operation to perform on the link
+	Operation            *MerchantCenterLinkOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateMerchantCenterLinkRequest) Reset()         { *m = MutateMerchantCenterLinkRequest{} }
+func (m *MutateMerchantCenterLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateMerchantCenterLinkRequest) ProtoMessage()    {}
+func (*MutateMerchantCenterLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{3}
+}
+
+func (m *MutateMerchantCenterLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMerchantCenterLinkRequest.Unmarshal(m, b)
+}
+func (m *MutateMerchantCenterLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMerchantCenterLinkRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateMerchantCenterLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMerchantCenterLinkRequest.Merge(m, src)
+}
+func (m *MutateMerchantCenterLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateMerchantCenterLinkRequest.Size(m)
+}
+func (m *MutateMerchantCenterLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMerchantCenterLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMerchantCenterLinkRequest proto.InternalMessageInfo
+
+func (m *MutateMerchantCenterLinkRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateMerchantCenterLinkRequest) GetOperation() *MerchantCenterLinkOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// A single update on a Merchant Center link.
+type MerchantCenterLinkOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The operation to perform
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*MerchantCenterLinkOperation_Update
+	//	*MerchantCenterLinkOperation_Remove
+	Operation            isMerchantCenterLinkOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *MerchantCenterLinkOperation) Reset()         { *m = MerchantCenterLinkOperation{} }
+func (m *MerchantCenterLinkOperation) String() string { return proto.CompactTextString(m) }
+func (*MerchantCenterLinkOperation) ProtoMessage()    {}
+func (*MerchantCenterLinkOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{4}
+}
+
+func (m *MerchantCenterLinkOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MerchantCenterLinkOperation.Unmarshal(m, b)
+}
+func (m *MerchantCenterLinkOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MerchantCenterLinkOperation.Marshal(b, m, deterministic)
+}
+func (m *MerchantCenterLinkOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MerchantCenterLinkOperation.Merge(m, src)
+}
+func (m *MerchantCenterLinkOperation) XXX_Size() int {
+	return xxx_messageInfo_MerchantCenterLinkOperation.Size(m)
+}
+func (m *MerchantCenterLinkOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MerchantCenterLinkOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MerchantCenterLinkOperation proto.InternalMessageInfo
+
+func (m *MerchantCenterLinkOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isMerchantCenterLinkOperation_Operation interface {
+	isMerchantCenterLinkOperation_Operation()
+}
+
+type MerchantCenterLinkOperation_Update struct {
+	Update *resources.MerchantCenterLink `protobuf:"bytes,1,opt,name=update,proto3,oneof"`
+}
+
+type MerchantCenterLinkOperation_Remove struct {
+	Remove string `protobuf:"bytes,2,opt,name=remove,proto3,oneof"`
+}
+
+func (*MerchantCenterLinkOperation_Update) isMerchantCenterLinkOperation_Operation() {}
+
+func (*MerchantCenterLinkOperation_Remove) isMerchantCenterLinkOperation_Operation() {}
+
+func (m *MerchantCenterLinkOperation) GetOperation() isMerchantCenterLinkOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MerchantCenterLinkOperation) GetUpdate() *resources.MerchantCenterLink {
+	if x, ok := m.GetOperation().(*MerchantCenterLinkOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *MerchantCenterLinkOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*MerchantCenterLinkOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*MerchantCenterLinkOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*MerchantCenterLinkOperation_Update)(nil),
+		(*MerchantCenterLinkOperation_Remove)(nil),
+	}
+}
+
+// Response message for Merchant Center link mutate.
+type MutateMerchantCenterLinkResponse struct {
+	// Result for the mutate.
+	Result               *MutateMerchantCenterLinkResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateMerchantCenterLinkResponse) Reset()         { *m = MutateMerchantCenterLinkResponse{} }
+func (m *MutateMerchantCenterLinkResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateMerchantCenterLinkResponse) ProtoMessage()    {}
+func (*MutateMerchantCenterLinkResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{5}
+}
+
+func (m *MutateMerchantCenterLinkResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMerchantCenterLinkResponse.Unmarshal(m, b)
+}
+func (m *MutateMerchantCenterLinkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMerchantCenterLinkResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateMerchantCenterLinkResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMerchantCenterLinkResponse.Merge(m, src)
+}
+func (m *MutateMerchantCenterLinkResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateMerchantCenterLinkResponse.Size(m)
+}
+func (m *MutateMerchantCenterLinkResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMerchantCenterLinkResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMerchantCenterLinkResponse proto.InternalMessageInfo
+
+func (m *MutateMerchantCenterLinkResponse) GetResult() *MutateMerchantCenterLinkResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for the Merchant Center link mutate.
+type MutateMerchantCenterLinkResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateMerchantCenterLinkResult) Reset()         { *m = MutateMerchantCenterLinkResult{} }
+func (m *MutateMerchantCenterLinkResult) String() string { return proto.CompactTextString(m) }
+func (*MutateMerchantCenterLinkResult) ProtoMessage()    {}
+func (*MutateMerchantCenterLinkResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_70858648997893d9, []int{6}
+}
+
+func (m *MutateMerchantCenterLinkResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMerchantCenterLinkResult.Unmarshal(m, b)
+}
+func (m *MutateMerchantCenterLinkResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMerchantCenterLinkResult.Marshal(b, m, deterministic)
+}
+func (m *MutateMerchantCenterLinkResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMerchantCenterLinkResult.Merge(m, src)
+}
+func (m *MutateMerchantCenterLinkResult) XXX_Size() int {
+	return xxx_messageInfo_MutateMerchantCenterLinkResult.Size(m)
+}
+func (m *MutateMerchantCenterLinkResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMerchantCenterLinkResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMerchantCenterLinkResult proto.InternalMessageInfo
+
+func (m *MutateMerchantCenterLinkResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ListMerchantCenterLinksRequest)(nil), "google.ads.googleads.v3.services.ListMerchantCenterLinksRequest")
+	proto.RegisterType((*ListMerchantCenterLinksResponse)(nil), "google.ads.googleads.v3.services.ListMerchantCenterLinksResponse")
+	proto.RegisterType((*GetMerchantCenterLinkRequest)(nil), "google.ads.googleads.v3.services.GetMerchantCenterLinkRequest")
+	proto.RegisterType((*MutateMerchantCenterLinkRequest)(nil), "google.ads.googleads.v3.services.MutateMerchantCenterLinkRequest")
+	proto.RegisterType((*MerchantCenterLinkOperation)(nil), "google.ads.googleads.v3.services.MerchantCenterLinkOperation")
+	proto.RegisterType((*MutateMerchantCenterLinkResponse)(nil), "google.ads.googleads.v3.services.MutateMerchantCenterLinkResponse")
+	proto.RegisterType((*MutateMerchantCenterLinkResult)(nil), "google.ads.googleads.v3.services.MutateMerchantCenterLinkResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/merchant_center_link_service.proto", fileDescriptor_70858648997893d9)
+}
+
+var fileDescriptor_70858648997893d9 = []byte{
+	// 738 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x41, 0x6b, 0xd4, 0x4e,
+	0x14, 0xff, 0x27, 0x0b, 0x0b, 0x9d, 0xfd, 0x7b, 0x19, 0x29, 0x8d, 0xdb, 0xd2, 0x2e, 0xb1, 0x87,
+	0x65, 0x91, 0x04, 0x1b, 0x8a, 0x92, 0xba, 0x62, 0xb6, 0xd8, 0xad, 0xd0, 0xb5, 0x65, 0x85, 0x22,
+	0xba, 0xb0, 0xa6, 0xc9, 0x74, 0x1b, 0x9a, 0x64, 0xd6, 0xcc, 0x64, 0x2f, 0xb5, 0x17, 0xc5, 0x9b,
+	0x37, 0xbf, 0x81, 0x37, 0xfd, 0x28, 0x3d, 0xea, 0xad, 0x20, 0x78, 0x10, 0x04, 0x3f, 0x84, 0x48,
+	0x32, 0x33, 0xbb, 0x29, 0x4d, 0xb6, 0xb5, 0xbd, 0xbd, 0x99, 0xf7, 0xf2, 0x7b, 0xef, 0xf7, 0xde,
+	0xef, 0x4d, 0xc0, 0xfa, 0x00, 0xe3, 0x81, 0x8f, 0x74, 0xdb, 0x25, 0x3a, 0x33, 0x13, 0x6b, 0x64,
+	0xe8, 0x04, 0x45, 0x23, 0xcf, 0x41, 0x44, 0x0f, 0x50, 0xe4, 0x1c, 0xd8, 0x21, 0xed, 0x3b, 0x28,
+	0xa4, 0x28, 0xea, 0xfb, 0x5e, 0x78, 0xd8, 0xe7, 0x5e, 0x6d, 0x18, 0x61, 0x8a, 0x61, 0x8d, 0x7d,
+	0xa9, 0xd9, 0x2e, 0xd1, 0xc6, 0x20, 0xda, 0xc8, 0xd0, 0x04, 0x48, 0xf5, 0x41, 0x51, 0x9a, 0x08,
+	0x11, 0x1c, 0x47, 0x45, 0x79, 0x18, 0x7e, 0x75, 0x41, 0x7c, 0x3d, 0xf4, 0x74, 0x3b, 0x0c, 0x31,
+	0xb5, 0xa9, 0x87, 0x43, 0xc2, 0xbd, 0x73, 0x19, 0xaf, 0xe3, 0x7b, 0x28, 0xa4, 0xdc, 0xb1, 0x94,
+	0x71, 0xec, 0x7b, 0xc8, 0x77, 0xfb, 0x7b, 0xe8, 0xc0, 0x1e, 0x79, 0x38, 0xe2, 0x01, 0xbc, 0x6e,
+	0x3d, 0x3d, 0xed, 0xc5, 0xfb, 0x3c, 0x2a, 0xb0, 0x09, 0xcf, 0xac, 0x6e, 0x80, 0xc5, 0x2d, 0x8f,
+	0xd0, 0x0e, 0xaf, 0x6d, 0x3d, 0x2d, 0x6d, 0xcb, 0x0b, 0x0f, 0x49, 0x17, 0xbd, 0x8e, 0x11, 0xa1,
+	0x70, 0x19, 0x54, 0x9c, 0x98, 0x50, 0x1c, 0xa0, 0xa8, 0xef, 0xb9, 0x8a, 0x54, 0x93, 0xea, 0x33,
+	0xad, 0xd2, 0x0f, 0x4b, 0xee, 0x02, 0x71, 0xff, 0xc4, 0x55, 0x3f, 0x48, 0x60, 0xa9, 0x10, 0x88,
+	0x0c, 0x71, 0x48, 0x10, 0xf4, 0xc0, 0x6c, 0x5e, 0x0f, 0x88, 0x22, 0xd5, 0x4a, 0xf5, 0xca, 0xca,
+	0xaa, 0x56, 0xd4, 0xe5, 0x71, 0x0f, 0xb5, 0xf3, 0xf0, 0xdd, 0x9b, 0xc1, 0xf9, 0x94, 0xea, 0x26,
+	0x58, 0x68, 0xa3, 0x9c, 0x62, 0x04, 0xa9, 0x3a, 0xb8, 0x21, 0x40, 0xfb, 0xa1, 0x1d, 0xa0, 0x2c,
+	0xad, 0xff, 0x85, 0xe7, 0xa9, 0x1d, 0x20, 0xf5, 0xb3, 0x04, 0x96, 0x3a, 0x31, 0xb5, 0x29, 0x2a,
+	0x46, 0xbb, 0x54, 0x8b, 0xe0, 0x2b, 0x30, 0x83, 0x87, 0x28, 0x4a, 0x47, 0xab, 0xc8, 0x35, 0xa9,
+	0x5e, 0x59, 0x69, 0x6a, 0x17, 0x09, 0x2b, 0x87, 0xf1, 0xb6, 0x00, 0x61, 0x29, 0x26, 0xa0, 0xea,
+	0x57, 0x09, 0xcc, 0x4f, 0x89, 0x87, 0x6b, 0xa0, 0x12, 0x0f, 0x5d, 0x9b, 0xa2, 0x54, 0x01, 0x4a,
+	0x29, 0xad, 0xa1, 0x2a, 0x6a, 0x10, 0x22, 0xd1, 0x36, 0x12, 0x91, 0x74, 0x6c, 0x72, 0xd8, 0x05,
+	0x2c, 0x3c, 0xb1, 0xe1, 0x36, 0x28, 0xb3, 0x53, 0xca, 0xef, 0xaa, 0xe3, 0xda, 0xfc, 0xaf, 0xcb,
+	0x61, 0xa0, 0x02, 0xca, 0x11, 0x0a, 0xf0, 0x08, 0xa5, 0xcd, 0x98, 0x49, 0x3c, 0xec, 0xdc, 0xaa,
+	0x64, 0x3a, 0xa5, 0xbe, 0x01, 0xb5, 0xe2, 0xfe, 0x73, 0x65, 0x3d, 0x4f, 0xa0, 0x48, 0xec, 0x53,
+	0xde, 0xd7, 0x47, 0x97, 0xe8, 0x6b, 0x31, 0x66, 0xec, 0xd3, 0x2e, 0xc7, 0x53, 0x1f, 0x83, 0xc5,
+	0xe9, 0x91, 0xf0, 0x76, 0xae, 0x94, 0xce, 0xaa, 0x68, 0xe5, 0x5d, 0x19, 0xdc, 0x3a, 0x8f, 0xf0,
+	0x8c, 0x15, 0x03, 0x7f, 0x49, 0x60, 0xae, 0x60, 0x79, 0xe0, 0x25, 0xa8, 0x4c, 0x5f, 0xe0, 0xaa,
+	0x75, 0x0d, 0x04, 0xd6, 0x5f, 0xb5, 0x7d, 0x6a, 0x65, 0x15, 0xfe, 0xf6, 0xdb, 0xcf, 0x8f, 0xb2,
+	0x01, 0xef, 0x26, 0xef, 0x9b, 0xb8, 0x26, 0xfa, 0x51, 0x26, 0xa2, 0xd9, 0x38, 0xd6, 0x73, 0xf6,
+	0x12, 0x7e, 0x97, 0xc0, 0x6c, 0xee, 0x62, 0xc2, 0x87, 0x17, 0x57, 0x39, 0x6d, 0xa3, 0xab, 0x57,
+	0x93, 0xa3, 0xda, 0x39, 0xb5, 0xce, 0x8e, 0x2f, 0xe5, 0x76, 0x0f, 0xae, 0x26, 0xdc, 0x8e, 0xce,
+	0x78, 0x9a, 0x13, 0xaa, 0x8d, 0x3c, 0x72, 0x7a, 0xe3, 0x18, 0xfe, 0x91, 0x80, 0x52, 0xa4, 0x17,
+	0x68, 0x5d, 0x47, 0x95, 0x8c, 0x65, 0xeb, 0x5a, 0xc2, 0x66, 0xc3, 0x7c, 0x79, 0x6a, 0xcd, 0x66,
+	0x46, 0x75, 0x67, 0xbc, 0x6a, 0x29, 0xf5, 0xa6, 0x7a, 0xff, 0x9f, 0xc7, 0x6a, 0x06, 0x69, 0x4e,
+	0x53, 0x6a, 0x54, 0xe7, 0x4f, 0x2c, 0x65, 0x52, 0x17, 0xb7, 0x86, 0x1e, 0xd1, 0x1c, 0x1c, 0xb4,
+	0xde, 0xcb, 0x60, 0xd9, 0xc1, 0xc1, 0x85, 0x1c, 0x5a, 0x8b, 0x85, 0xbb, 0xb2, 0x93, 0x3c, 0x52,
+	0x3b, 0xd2, 0x8b, 0x4d, 0x8e, 0x31, 0xc0, 0xbe, 0x1d, 0x0e, 0x34, 0x1c, 0x0d, 0xf4, 0x01, 0x0a,
+	0xd3, 0x27, 0x4c, 0x9f, 0x64, 0x2d, 0xfe, 0xeb, 0xaf, 0x09, 0xe3, 0x93, 0x5c, 0x6a, 0x5b, 0xd6,
+	0x17, 0xb9, 0xd6, 0x66, 0x80, 0x96, 0x4b, 0x34, 0x66, 0x26, 0xd6, 0xae, 0xa1, 0xf1, 0xc4, 0xe4,
+	0x44, 0x84, 0xf4, 0x2c, 0x97, 0xf4, 0xc6, 0x21, 0xbd, 0x5d, 0xa3, 0x27, 0x42, 0x7e, 0xcb, 0xcb,
+	0xec, 0xde, 0x34, 0x2d, 0x97, 0x98, 0xe6, 0x38, 0xc8, 0x34, 0x77, 0x0d, 0xd3, 0x14, 0x61, 0x7b,
+	0xe5, 0xb4, 0x4e, 0xe3, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xe6, 0x7c, 0xb3, 0x9c, 0x08,
+	0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// MerchantCenterLinkServiceClient is the client API for MerchantCenterLinkService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MerchantCenterLinkServiceClient interface {
+	// Returns Merchant Center links available for this customer.
+	ListMerchantCenterLinks(ctx context.Context, in *ListMerchantCenterLinksRequest, opts ...grpc.CallOption) (*ListMerchantCenterLinksResponse, error)
+	// Returns the Merchant Center link in full detail.
+	GetMerchantCenterLink(ctx context.Context, in *GetMerchantCenterLinkRequest, opts ...grpc.CallOption) (*resources.MerchantCenterLink, error)
+	// Updates status or removes a Merchant Center link.
+	MutateMerchantCenterLink(ctx context.Context, in *MutateMerchantCenterLinkRequest, opts ...grpc.CallOption) (*MutateMerchantCenterLinkResponse, error)
+}
+
+type merchantCenterLinkServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMerchantCenterLinkServiceClient(cc grpc.ClientConnInterface) MerchantCenterLinkServiceClient {
+	return &merchantCenterLinkServiceClient{cc}
+}
+
+func (c *merchantCenterLinkServiceClient) ListMerchantCenterLinks(ctx context.Context, in *ListMerchantCenterLinksRequest, opts ...grpc.CallOption) (*ListMerchantCenterLinksResponse, error) {
+	out := new(ListMerchantCenterLinksResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MerchantCenterLinkService/ListMerchantCenterLinks", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *merchantCenterLinkServiceClient) GetMerchantCenterLink(ctx context.Context, in *GetMerchantCenterLinkRequest, opts ...grpc.CallOption) (*resources.MerchantCenterLink, error) {
+	out := new(resources.MerchantCenterLink)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MerchantCenterLinkService/GetMerchantCenterLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *merchantCenterLinkServiceClient) MutateMerchantCenterLink(ctx context.Context, in *MutateMerchantCenterLinkRequest, opts ...grpc.CallOption) (*MutateMerchantCenterLinkResponse, error) {
+	out := new(MutateMerchantCenterLinkResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MerchantCenterLinkService/MutateMerchantCenterLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MerchantCenterLinkServiceServer is the server API for MerchantCenterLinkService service.
+type MerchantCenterLinkServiceServer interface {
+	// Returns Merchant Center links available for this customer.
+	ListMerchantCenterLinks(context.Context, *ListMerchantCenterLinksRequest) (*ListMerchantCenterLinksResponse, error)
+	// Returns the Merchant Center link in full detail.
+	GetMerchantCenterLink(context.Context, *GetMerchantCenterLinkRequest) (*resources.MerchantCenterLink, error)
+	// Updates status or removes a Merchant Center link.
+	MutateMerchantCenterLink(context.Context, *MutateMerchantCenterLinkRequest) (*MutateMerchantCenterLinkResponse, error)
+}
+
+// UnimplementedMerchantCenterLinkServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedMerchantCenterLinkServiceServer struct {
+}
+
+func (*UnimplementedMerchantCenterLinkServiceServer) ListMerchantCenterLinks(ctx context.Context, req *ListMerchantCenterLinksRequest) (*ListMerchantCenterLinksResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListMerchantCenterLinks not implemented")
+}
+func (*UnimplementedMerchantCenterLinkServiceServer) GetMerchantCenterLink(ctx context.Context, req *GetMerchantCenterLinkRequest) (*resources.MerchantCenterLink, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMerchantCenterLink not implemented")
+}
+func (*UnimplementedMerchantCenterLinkServiceServer) MutateMerchantCenterLink(ctx context.Context, req *MutateMerchantCenterLinkRequest) (*MutateMerchantCenterLinkResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MutateMerchantCenterLink not implemented")
+}
+
+func RegisterMerchantCenterLinkServiceServer(s *grpc.Server, srv MerchantCenterLinkServiceServer) {
+	s.RegisterService(&_MerchantCenterLinkService_serviceDesc, srv)
+}
+
+func _MerchantCenterLinkService_ListMerchantCenterLinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListMerchantCenterLinksRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MerchantCenterLinkServiceServer).ListMerchantCenterLinks(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MerchantCenterLinkService/ListMerchantCenterLinks",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MerchantCenterLinkServiceServer).ListMerchantCenterLinks(ctx, req.(*ListMerchantCenterLinksRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MerchantCenterLinkService_GetMerchantCenterLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMerchantCenterLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MerchantCenterLinkServiceServer).GetMerchantCenterLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MerchantCenterLinkService/GetMerchantCenterLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MerchantCenterLinkServiceServer).GetMerchantCenterLink(ctx, req.(*GetMerchantCenterLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MerchantCenterLinkService_MutateMerchantCenterLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateMerchantCenterLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MerchantCenterLinkServiceServer).MutateMerchantCenterLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MerchantCenterLinkService/MutateMerchantCenterLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MerchantCenterLinkServiceServer).MutateMerchantCenterLink(ctx, req.(*MutateMerchantCenterLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MerchantCenterLinkService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.MerchantCenterLinkService",
+	HandlerType: (*MerchantCenterLinkServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListMerchantCenterLinks",
+			Handler:    _MerchantCenterLinkService_ListMerchantCenterLinks_Handler,
+		},
+		{
+			MethodName: "GetMerchantCenterLink",
+			Handler:    _MerchantCenterLinkService_GetMerchantCenterLink_Handler,
+		},
+		{
+			MethodName: "MutateMerchantCenterLink",
+			Handler:    _MerchantCenterLinkService_MutateMerchantCenterLink_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/merchant_center_link_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/mobile_app_category_constant_service.pb.go b/googleapis/ads/googleads/v3/services/mobile_app_category_constant_service.pb.go
new file mode 100644
index 0000000..9835354
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/mobile_app_category_constant_service.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/mobile_app_category_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [MobileAppCategoryConstantService.GetMobileAppCategoryConstant][google.ads.googleads.v3.services.MobileAppCategoryConstantService.GetMobileAppCategoryConstant].
+type GetMobileAppCategoryConstantRequest struct {
+	// Required. Resource name of the mobile app category constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMobileAppCategoryConstantRequest) Reset()         { *m = GetMobileAppCategoryConstantRequest{} }
+func (m *GetMobileAppCategoryConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMobileAppCategoryConstantRequest) ProtoMessage()    {}
+func (*GetMobileAppCategoryConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1ec6a53799fd6176, []int{0}
+}
+
+func (m *GetMobileAppCategoryConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMobileAppCategoryConstantRequest.Unmarshal(m, b)
+}
+func (m *GetMobileAppCategoryConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMobileAppCategoryConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetMobileAppCategoryConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMobileAppCategoryConstantRequest.Merge(m, src)
+}
+func (m *GetMobileAppCategoryConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMobileAppCategoryConstantRequest.Size(m)
+}
+func (m *GetMobileAppCategoryConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMobileAppCategoryConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMobileAppCategoryConstantRequest proto.InternalMessageInfo
+
+func (m *GetMobileAppCategoryConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetMobileAppCategoryConstantRequest)(nil), "google.ads.googleads.v3.services.GetMobileAppCategoryConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/mobile_app_category_constant_service.proto", fileDescriptor_1ec6a53799fd6176)
+}
+
+var fileDescriptor_1ec6a53799fd6176 = []byte{
+	// 419 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x31, 0xeb, 0xd3, 0x40,
+	0x18, 0xc6, 0x49, 0x0a, 0x82, 0x41, 0x97, 0x2c, 0x96, 0x58, 0x30, 0xd4, 0x0a, 0xc5, 0xe1, 0x4e,
+	0x9a, 0xed, 0xd4, 0xe1, 0x5a, 0xa5, 0x05, 0x51, 0x4b, 0x85, 0x0e, 0x12, 0x08, 0xd7, 0xe4, 0x8c,
+	0x07, 0xc9, 0x5d, 0xcc, 0x5d, 0x03, 0x22, 0x2e, 0xce, 0x6e, 0x7e, 0x03, 0x47, 0x17, 0xbf, 0x47,
+	0x57, 0x37, 0x27, 0x07, 0x27, 0xc1, 0xef, 0x20, 0xe9, 0xe5, 0xd2, 0x76, 0x88, 0xf9, 0x6f, 0x0f,
+	0x7d, 0x9e, 0xfe, 0x9e, 0xf7, 0xde, 0x97, 0x38, 0xcf, 0x52, 0x21, 0xd2, 0x8c, 0x42, 0x92, 0x48,
+	0xa8, 0x65, 0xad, 0xaa, 0x00, 0x4a, 0x5a, 0x56, 0x2c, 0xa6, 0x12, 0xe6, 0x62, 0xc7, 0x32, 0x1a,
+	0x91, 0xa2, 0x88, 0x62, 0xa2, 0x68, 0x2a, 0xca, 0xf7, 0x51, 0x2c, 0xb8, 0x54, 0x84, 0xab, 0xa8,
+	0x49, 0x81, 0xa2, 0x14, 0x4a, 0xb8, 0xbe, 0x26, 0x00, 0x92, 0x48, 0xd0, 0xc2, 0x40, 0x15, 0x00,
+	0x03, 0xf3, 0x9e, 0x74, 0xd5, 0x95, 0x54, 0x8a, 0x7d, 0xd9, 0xd7, 0xa7, 0x7b, 0xbc, 0x91, 0xa1,
+	0x14, 0x0c, 0x12, 0xce, 0x85, 0x22, 0x8a, 0x09, 0x2e, 0x1b, 0xf7, 0xd6, 0x99, 0x1b, 0x67, 0x8c,
+	0xb6, 0x7f, 0xbb, 0x73, 0x66, 0xbc, 0x61, 0x34, 0x4b, 0xa2, 0x1d, 0x7d, 0x4b, 0x2a, 0x26, 0x4a,
+	0x1d, 0x18, 0xbf, 0x74, 0xee, 0x2e, 0xa9, 0x7a, 0x7e, 0x1c, 0x00, 0x17, 0xc5, 0xa2, 0xa9, 0x5f,
+	0x34, 0xed, 0x1b, 0xfa, 0x6e, 0x4f, 0xa5, 0x72, 0xa7, 0xce, 0x4d, 0x33, 0x6e, 0xc4, 0x49, 0x4e,
+	0x87, 0x96, 0x6f, 0x4d, 0xaf, 0xcf, 0x07, 0xbf, 0xb0, 0xbd, 0xb9, 0x61, 0x9c, 0x17, 0x24, 0xa7,
+	0xb3, 0xef, 0xb6, 0xe3, 0x77, 0xe2, 0x5e, 0xe9, 0xa5, 0xb8, 0x7f, 0x2d, 0x67, 0xf4, 0xbf, 0x5a,
+	0xf7, 0x29, 0xe8, 0xdb, 0x2b, 0xb8, 0xc2, 0xd8, 0xde, 0xa3, 0x4e, 0x4c, 0xbb, 0x7c, 0xd0, 0x09,
+	0x19, 0xaf, 0x7e, 0xe2, 0xcb, 0x57, 0x7f, 0xfa, 0xf1, 0xfb, 0x8b, 0x3d, 0x73, 0x1f, 0xd4, 0xd7,
+	0xfb, 0x70, 0xe1, 0x3c, 0xce, 0xbb, 0x28, 0x12, 0xde, 0xff, 0xe8, 0xdd, 0x3e, 0xe0, 0xe1, 0xa9,
+	0xbe, 0x51, 0x05, 0x93, 0x20, 0x16, 0xf9, 0xfc, 0xb3, 0xed, 0x4c, 0x62, 0x91, 0xf7, 0xbe, 0x78,
+	0x7e, 0xaf, 0x6f, 0xaf, 0xeb, 0xfa, 0xa4, 0x6b, 0xeb, 0xf5, 0xaa, 0x41, 0xa5, 0x22, 0x23, 0x3c,
+	0x05, 0xa2, 0x4c, 0x61, 0x4a, 0xf9, 0xf1, 0xe0, 0xf0, 0x54, 0xde, 0xfd, 0x01, 0x3c, 0x34, 0xe2,
+	0xab, 0x3d, 0x58, 0x62, 0xfc, 0xcd, 0xf6, 0x97, 0x1a, 0x88, 0x13, 0x09, 0xb4, 0xac, 0xd5, 0x36,
+	0x00, 0x4d, 0xb1, 0x3c, 0x98, 0x48, 0x88, 0x13, 0x19, 0xb6, 0x91, 0x70, 0x1b, 0x84, 0x26, 0xf2,
+	0xc7, 0x9e, 0xe8, 0xdf, 0x11, 0xc2, 0x89, 0x44, 0xa8, 0x0d, 0x21, 0xb4, 0x0d, 0x10, 0x32, 0xb1,
+	0xdd, 0xb5, 0xe3, 0x9c, 0xc1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x48, 0x6a, 0x14, 0xe6, 0xa7,
+	0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// MobileAppCategoryConstantServiceClient is the client API for MobileAppCategoryConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MobileAppCategoryConstantServiceClient interface {
+	// Returns the requested mobile app category constant.
+	GetMobileAppCategoryConstant(ctx context.Context, in *GetMobileAppCategoryConstantRequest, opts ...grpc.CallOption) (*resources.MobileAppCategoryConstant, error)
+}
+
+type mobileAppCategoryConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMobileAppCategoryConstantServiceClient(cc grpc.ClientConnInterface) MobileAppCategoryConstantServiceClient {
+	return &mobileAppCategoryConstantServiceClient{cc}
+}
+
+func (c *mobileAppCategoryConstantServiceClient) GetMobileAppCategoryConstant(ctx context.Context, in *GetMobileAppCategoryConstantRequest, opts ...grpc.CallOption) (*resources.MobileAppCategoryConstant, error) {
+	out := new(resources.MobileAppCategoryConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MobileAppCategoryConstantService/GetMobileAppCategoryConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MobileAppCategoryConstantServiceServer is the server API for MobileAppCategoryConstantService service.
+type MobileAppCategoryConstantServiceServer interface {
+	// Returns the requested mobile app category constant.
+	GetMobileAppCategoryConstant(context.Context, *GetMobileAppCategoryConstantRequest) (*resources.MobileAppCategoryConstant, error)
+}
+
+// UnimplementedMobileAppCategoryConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedMobileAppCategoryConstantServiceServer struct {
+}
+
+func (*UnimplementedMobileAppCategoryConstantServiceServer) GetMobileAppCategoryConstant(ctx context.Context, req *GetMobileAppCategoryConstantRequest) (*resources.MobileAppCategoryConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMobileAppCategoryConstant not implemented")
+}
+
+func RegisterMobileAppCategoryConstantServiceServer(s *grpc.Server, srv MobileAppCategoryConstantServiceServer) {
+	s.RegisterService(&_MobileAppCategoryConstantService_serviceDesc, srv)
+}
+
+func _MobileAppCategoryConstantService_GetMobileAppCategoryConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMobileAppCategoryConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MobileAppCategoryConstantServiceServer).GetMobileAppCategoryConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MobileAppCategoryConstantService/GetMobileAppCategoryConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MobileAppCategoryConstantServiceServer).GetMobileAppCategoryConstant(ctx, req.(*GetMobileAppCategoryConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MobileAppCategoryConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.MobileAppCategoryConstantService",
+	HandlerType: (*MobileAppCategoryConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetMobileAppCategoryConstant",
+			Handler:    _MobileAppCategoryConstantService_GetMobileAppCategoryConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/mobile_app_category_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/mobile_device_constant_service.pb.go b/googleapis/ads/googleads/v3/services/mobile_device_constant_service.pb.go
new file mode 100644
index 0000000..b2a2a95
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/mobile_device_constant_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/mobile_device_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [MobileDeviceConstantService.GetMobileDeviceConstant][google.ads.googleads.v3.services.MobileDeviceConstantService.GetMobileDeviceConstant].
+type GetMobileDeviceConstantRequest struct {
+	// Required. Resource name of the mobile device to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMobileDeviceConstantRequest) Reset()         { *m = GetMobileDeviceConstantRequest{} }
+func (m *GetMobileDeviceConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMobileDeviceConstantRequest) ProtoMessage()    {}
+func (*GetMobileDeviceConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3657ef6f30658246, []int{0}
+}
+
+func (m *GetMobileDeviceConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMobileDeviceConstantRequest.Unmarshal(m, b)
+}
+func (m *GetMobileDeviceConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMobileDeviceConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetMobileDeviceConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMobileDeviceConstantRequest.Merge(m, src)
+}
+func (m *GetMobileDeviceConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMobileDeviceConstantRequest.Size(m)
+}
+func (m *GetMobileDeviceConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMobileDeviceConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMobileDeviceConstantRequest proto.InternalMessageInfo
+
+func (m *GetMobileDeviceConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetMobileDeviceConstantRequest)(nil), "google.ads.googleads.v3.services.GetMobileDeviceConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/mobile_device_constant_service.proto", fileDescriptor_3657ef6f30658246)
+}
+
+var fileDescriptor_3657ef6f30658246 = []byte{
+	// 414 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x8b, 0xd3, 0x40,
+	0x1c, 0x25, 0x29, 0x08, 0x06, 0xbd, 0xe4, 0xd2, 0x92, 0x8a, 0x86, 0xd2, 0x43, 0x51, 0x9c, 0x01,
+	0x73, 0x10, 0x46, 0x14, 0xa7, 0x55, 0x2a, 0x82, 0x52, 0x2a, 0xf4, 0x20, 0x81, 0x30, 0x4d, 0xc6,
+	0x38, 0x90, 0xcc, 0xd4, 0x4c, 0x9a, 0x8b, 0x78, 0xf1, 0xe2, 0x07, 0x10, 0xf6, 0x03, 0xec, 0x71,
+	0x3f, 0x4a, 0xaf, 0x7b, 0xda, 0x3d, 0xed, 0x61, 0x4f, 0xfb, 0x29, 0x96, 0x64, 0x32, 0x69, 0x0b,
+	0x4d, 0x7b, 0x7b, 0xc9, 0x7b, 0xbf, 0xf7, 0x7e, 0x7f, 0xc6, 0xfa, 0x18, 0x0b, 0x11, 0x27, 0x14,
+	0x92, 0x48, 0x42, 0x05, 0x4b, 0x54, 0x78, 0x50, 0xd2, 0xac, 0x60, 0x21, 0x95, 0x30, 0x15, 0x4b,
+	0x96, 0xd0, 0x20, 0xa2, 0xe5, 0x67, 0x10, 0x0a, 0x2e, 0x73, 0xc2, 0xf3, 0xa0, 0xe6, 0xc1, 0x2a,
+	0x13, 0xb9, 0xb0, 0x5d, 0x55, 0x0b, 0x48, 0x24, 0x41, 0x63, 0x03, 0x0a, 0x0f, 0x68, 0x1b, 0xe7,
+	0x5d, 0x5b, 0x50, 0x46, 0xa5, 0x58, 0x67, 0xed, 0x49, 0x2a, 0xc1, 0x79, 0xa2, 0xeb, 0x57, 0x0c,
+	0x12, 0xce, 0x45, 0x4e, 0x72, 0x26, 0xb8, 0xac, 0xd9, 0xee, 0x0e, 0x1b, 0x26, 0x8c, 0x36, 0x65,
+	0xcf, 0x76, 0x88, 0x1f, 0x8c, 0x26, 0x51, 0xb0, 0xa4, 0x3f, 0x49, 0xc1, 0x44, 0xa6, 0x04, 0x83,
+	0xcf, 0xd6, 0xd3, 0x29, 0xcd, 0xbf, 0x54, 0xd1, 0x1f, 0xaa, 0xe4, 0x49, 0x1d, 0x3c, 0xa7, 0xbf,
+	0xd6, 0x54, 0xe6, 0xf6, 0xc8, 0x7a, 0xac, 0x7b, 0x0c, 0x38, 0x49, 0x69, 0xcf, 0x70, 0x8d, 0xd1,
+	0xc3, 0x71, 0xe7, 0x06, 0x9b, 0xf3, 0x47, 0x9a, 0xf9, 0x4a, 0x52, 0xfa, 0xea, 0xcc, 0xb4, 0xfa,
+	0x87, 0x9c, 0xbe, 0xa9, 0x25, 0xd8, 0x57, 0x86, 0xd5, 0x6d, 0x09, 0xb3, 0xdf, 0x83, 0x53, 0x2b,
+	0x04, 0xc7, 0xfb, 0x74, 0x5e, 0xb7, 0x3a, 0x34, 0x2b, 0x06, 0x87, 0xea, 0x07, 0x93, 0x6b, 0xbc,
+	0x3f, 0xe1, 0xdf, 0xcb, 0xdb, 0xff, 0xe6, 0x4b, 0xfb, 0x45, 0x79, 0x9e, 0xdf, 0x7b, 0xcc, 0xdb,
+	0xf4, 0x80, 0x81, 0x84, 0xcf, 0xff, 0x38, 0xfd, 0x0d, 0xee, 0x6d, 0x43, 0x6b, 0xb4, 0x62, 0x12,
+	0x84, 0x22, 0x1d, 0xff, 0x33, 0xad, 0x61, 0x28, 0xd2, 0x93, 0x23, 0x8e, 0xdd, 0x23, 0xeb, 0x9b,
+	0x95, 0xf7, 0x9a, 0x19, 0xdf, 0x3f, 0xd5, 0x2e, 0xb1, 0x48, 0x08, 0x8f, 0x81, 0xc8, 0x62, 0x18,
+	0x53, 0x5e, 0x5d, 0x13, 0x6e, 0x73, 0xdb, 0x5f, 0xf4, 0x1b, 0x0d, 0xce, 0xcd, 0xce, 0x14, 0xe3,
+	0x0b, 0xd3, 0x9d, 0x2a, 0x43, 0x1c, 0x49, 0xa0, 0x60, 0x89, 0x16, 0x1e, 0xa8, 0x83, 0xe5, 0x46,
+	0x4b, 0x7c, 0x1c, 0x49, 0xbf, 0x91, 0xf8, 0x0b, 0xcf, 0xd7, 0x92, 0x3b, 0x73, 0xa8, 0xfe, 0x23,
+	0x84, 0x23, 0x89, 0x50, 0x23, 0x42, 0x68, 0xe1, 0x21, 0xa4, 0x65, 0xcb, 0x07, 0x55, 0x9f, 0xde,
+	0x7d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x70, 0x2b, 0x8c, 0x78, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// MobileDeviceConstantServiceClient is the client API for MobileDeviceConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MobileDeviceConstantServiceClient interface {
+	// Returns the requested mobile device constant in full detail.
+	GetMobileDeviceConstant(ctx context.Context, in *GetMobileDeviceConstantRequest, opts ...grpc.CallOption) (*resources.MobileDeviceConstant, error)
+}
+
+type mobileDeviceConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMobileDeviceConstantServiceClient(cc grpc.ClientConnInterface) MobileDeviceConstantServiceClient {
+	return &mobileDeviceConstantServiceClient{cc}
+}
+
+func (c *mobileDeviceConstantServiceClient) GetMobileDeviceConstant(ctx context.Context, in *GetMobileDeviceConstantRequest, opts ...grpc.CallOption) (*resources.MobileDeviceConstant, error) {
+	out := new(resources.MobileDeviceConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MobileDeviceConstantService/GetMobileDeviceConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MobileDeviceConstantServiceServer is the server API for MobileDeviceConstantService service.
+type MobileDeviceConstantServiceServer interface {
+	// Returns the requested mobile device constant in full detail.
+	GetMobileDeviceConstant(context.Context, *GetMobileDeviceConstantRequest) (*resources.MobileDeviceConstant, error)
+}
+
+// UnimplementedMobileDeviceConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedMobileDeviceConstantServiceServer struct {
+}
+
+func (*UnimplementedMobileDeviceConstantServiceServer) GetMobileDeviceConstant(ctx context.Context, req *GetMobileDeviceConstantRequest) (*resources.MobileDeviceConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMobileDeviceConstant not implemented")
+}
+
+func RegisterMobileDeviceConstantServiceServer(s *grpc.Server, srv MobileDeviceConstantServiceServer) {
+	s.RegisterService(&_MobileDeviceConstantService_serviceDesc, srv)
+}
+
+func _MobileDeviceConstantService_GetMobileDeviceConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMobileDeviceConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MobileDeviceConstantServiceServer).GetMobileDeviceConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MobileDeviceConstantService/GetMobileDeviceConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MobileDeviceConstantServiceServer).GetMobileDeviceConstant(ctx, req.(*GetMobileDeviceConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MobileDeviceConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.MobileDeviceConstantService",
+	HandlerType: (*MobileDeviceConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetMobileDeviceConstant",
+			Handler:    _MobileDeviceConstantService_GetMobileDeviceConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/mobile_device_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/mutate_job_service.pb.go b/googleapis/ads/googleads/v3/services/mutate_job_service.pb.go
new file mode 100644
index 0000000..3356ba0
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/mutate_job_service.pb.go
@@ -0,0 +1,820 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/mutate_job_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	longrunning "google.golang.org/genproto/googleapis/longrunning"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [MutateJobService.CreateMutateJobRequest][]
+type CreateMutateJobRequest struct {
+	// Required. The ID of the customer for which to create a mutate job.
+	CustomerId           string   `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateMutateJobRequest) Reset()         { *m = CreateMutateJobRequest{} }
+func (m *CreateMutateJobRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateMutateJobRequest) ProtoMessage()    {}
+func (*CreateMutateJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{0}
+}
+
+func (m *CreateMutateJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateMutateJobRequest.Unmarshal(m, b)
+}
+func (m *CreateMutateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateMutateJobRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateMutateJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateMutateJobRequest.Merge(m, src)
+}
+func (m *CreateMutateJobRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateMutateJobRequest.Size(m)
+}
+func (m *CreateMutateJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateMutateJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateMutateJobRequest proto.InternalMessageInfo
+
+func (m *CreateMutateJobRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+// Response message for [MutateJobService.CreateMutateJobResponse][]
+type CreateMutateJobResponse struct {
+	// The resource name of the MutateJob.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateMutateJobResponse) Reset()         { *m = CreateMutateJobResponse{} }
+func (m *CreateMutateJobResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateMutateJobResponse) ProtoMessage()    {}
+func (*CreateMutateJobResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{1}
+}
+
+func (m *CreateMutateJobResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateMutateJobResponse.Unmarshal(m, b)
+}
+func (m *CreateMutateJobResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateMutateJobResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateMutateJobResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateMutateJobResponse.Merge(m, src)
+}
+func (m *CreateMutateJobResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateMutateJobResponse.Size(m)
+}
+func (m *CreateMutateJobResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateMutateJobResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateMutateJobResponse proto.InternalMessageInfo
+
+func (m *CreateMutateJobResponse) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MutateJobService.GetMutateJob][google.ads.googleads.v3.services.MutateJobService.GetMutateJob]
+type GetMutateJobRequest struct {
+	// Required. The resource name of the MutateJob to get.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMutateJobRequest) Reset()         { *m = GetMutateJobRequest{} }
+func (m *GetMutateJobRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMutateJobRequest) ProtoMessage()    {}
+func (*GetMutateJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{2}
+}
+
+func (m *GetMutateJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMutateJobRequest.Unmarshal(m, b)
+}
+func (m *GetMutateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMutateJobRequest.Marshal(b, m, deterministic)
+}
+func (m *GetMutateJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMutateJobRequest.Merge(m, src)
+}
+func (m *GetMutateJobRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMutateJobRequest.Size(m)
+}
+func (m *GetMutateJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMutateJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMutateJobRequest proto.InternalMessageInfo
+
+func (m *GetMutateJobRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MutateJobService.RunMutateJob][google.ads.googleads.v3.services.MutateJobService.RunMutateJob]
+type RunMutateJobRequest struct {
+	// Required. The resource name of the MutateJob to run.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RunMutateJobRequest) Reset()         { *m = RunMutateJobRequest{} }
+func (m *RunMutateJobRequest) String() string { return proto.CompactTextString(m) }
+func (*RunMutateJobRequest) ProtoMessage()    {}
+func (*RunMutateJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{3}
+}
+
+func (m *RunMutateJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RunMutateJobRequest.Unmarshal(m, b)
+}
+func (m *RunMutateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RunMutateJobRequest.Marshal(b, m, deterministic)
+}
+func (m *RunMutateJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RunMutateJobRequest.Merge(m, src)
+}
+func (m *RunMutateJobRequest) XXX_Size() int {
+	return xxx_messageInfo_RunMutateJobRequest.Size(m)
+}
+func (m *RunMutateJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_RunMutateJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RunMutateJobRequest proto.InternalMessageInfo
+
+func (m *RunMutateJobRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MutateJobService.AddMutateJobOperations][google.ads.googleads.v3.services.MutateJobService.AddMutateJobOperations]
+type AddMutateJobOperationsRequest struct {
+	// Required. The resource name of the MutateJob.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// A token used to enforce sequencing.
+	//
+	// The first AddMutateJobOperations request for a MutateJob should not set
+	// sequence_token. Subsequent requests must set sequence_token to the value of
+	// next_sequence_token received in the previous AddMutateJobOperations
+	// response.
+	SequenceToken string `protobuf:"bytes,2,opt,name=sequence_token,json=sequenceToken,proto3" json:"sequence_token,omitempty"`
+	// Required. The list of mutates being added.
+	//
+	// Operations can use negative integers as temp ids to signify dependencies
+	// between entities created in this MutateJob. For example, a customer with
+	// id = 1234 can create a campaign and an ad group in that same campaign by
+	// creating a campaign in the first operation with the resource name
+	// explicitly set to "customers/1234/campaigns/-1", and creating an ad group
+	// in the second operation with the campaign field also set to
+	// "customers/1234/campaigns/-1".
+	MutateOperations     []*MutateOperation `protobuf:"bytes,3,rep,name=mutate_operations,json=mutateOperations,proto3" json:"mutate_operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *AddMutateJobOperationsRequest) Reset()         { *m = AddMutateJobOperationsRequest{} }
+func (m *AddMutateJobOperationsRequest) String() string { return proto.CompactTextString(m) }
+func (*AddMutateJobOperationsRequest) ProtoMessage()    {}
+func (*AddMutateJobOperationsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{4}
+}
+
+func (m *AddMutateJobOperationsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddMutateJobOperationsRequest.Unmarshal(m, b)
+}
+func (m *AddMutateJobOperationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddMutateJobOperationsRequest.Marshal(b, m, deterministic)
+}
+func (m *AddMutateJobOperationsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddMutateJobOperationsRequest.Merge(m, src)
+}
+func (m *AddMutateJobOperationsRequest) XXX_Size() int {
+	return xxx_messageInfo_AddMutateJobOperationsRequest.Size(m)
+}
+func (m *AddMutateJobOperationsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddMutateJobOperationsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddMutateJobOperationsRequest proto.InternalMessageInfo
+
+func (m *AddMutateJobOperationsRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AddMutateJobOperationsRequest) GetSequenceToken() string {
+	if m != nil {
+		return m.SequenceToken
+	}
+	return ""
+}
+
+func (m *AddMutateJobOperationsRequest) GetMutateOperations() []*MutateOperation {
+	if m != nil {
+		return m.MutateOperations
+	}
+	return nil
+}
+
+// Response message for [MutateJobService.AddMutateJobOperations][google.ads.googleads.v3.services.MutateJobService.AddMutateJobOperations]
+type AddMutateJobOperationsResponse struct {
+	// The total number of operations added so far for this job.
+	TotalOperations int64 `protobuf:"varint,1,opt,name=total_operations,json=totalOperations,proto3" json:"total_operations,omitempty"`
+	// The sequence token to be used when calling AddMutateJobOperations again if
+	// more operations need to be added. The next AddMutateJobOperations request
+	// must set the sequence_token field to the value of this field.
+	NextSequenceToken    string   `protobuf:"bytes,2,opt,name=next_sequence_token,json=nextSequenceToken,proto3" json:"next_sequence_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AddMutateJobOperationsResponse) Reset()         { *m = AddMutateJobOperationsResponse{} }
+func (m *AddMutateJobOperationsResponse) String() string { return proto.CompactTextString(m) }
+func (*AddMutateJobOperationsResponse) ProtoMessage()    {}
+func (*AddMutateJobOperationsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{5}
+}
+
+func (m *AddMutateJobOperationsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddMutateJobOperationsResponse.Unmarshal(m, b)
+}
+func (m *AddMutateJobOperationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddMutateJobOperationsResponse.Marshal(b, m, deterministic)
+}
+func (m *AddMutateJobOperationsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddMutateJobOperationsResponse.Merge(m, src)
+}
+func (m *AddMutateJobOperationsResponse) XXX_Size() int {
+	return xxx_messageInfo_AddMutateJobOperationsResponse.Size(m)
+}
+func (m *AddMutateJobOperationsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddMutateJobOperationsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddMutateJobOperationsResponse proto.InternalMessageInfo
+
+func (m *AddMutateJobOperationsResponse) GetTotalOperations() int64 {
+	if m != nil {
+		return m.TotalOperations
+	}
+	return 0
+}
+
+func (m *AddMutateJobOperationsResponse) GetNextSequenceToken() string {
+	if m != nil {
+		return m.NextSequenceToken
+	}
+	return ""
+}
+
+// Request message for [MutateJobService.ListMutateJobResults][google.ads.googleads.v3.services.MutateJobService.ListMutateJobResults].
+type ListMutateJobResultsRequest struct {
+	// Required. The resource name of the MutateJob whose results are being listed.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Token of the page to retrieve. If not specified, the first
+	// page of results will be returned. Use the value obtained from
+	// `next_page_token` in the previous response in order to request
+	// the next page of results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When a page request is too large, the server may decide to
+	// further limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListMutateJobResultsRequest) Reset()         { *m = ListMutateJobResultsRequest{} }
+func (m *ListMutateJobResultsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListMutateJobResultsRequest) ProtoMessage()    {}
+func (*ListMutateJobResultsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{6}
+}
+
+func (m *ListMutateJobResultsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListMutateJobResultsRequest.Unmarshal(m, b)
+}
+func (m *ListMutateJobResultsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListMutateJobResultsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListMutateJobResultsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListMutateJobResultsRequest.Merge(m, src)
+}
+func (m *ListMutateJobResultsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListMutateJobResultsRequest.Size(m)
+}
+func (m *ListMutateJobResultsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListMutateJobResultsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListMutateJobResultsRequest proto.InternalMessageInfo
+
+func (m *ListMutateJobResultsRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ListMutateJobResultsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListMutateJobResultsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for [MutateJobService.ListMutateJobResults][google.ads.googleads.v3.services.MutateJobService.ListMutateJobResults].
+type ListMutateJobResultsResponse struct {
+	// The list of rows that matched the query.
+	Results []*MutateJobResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Pagination token used to retrieve the next page of results.
+	// Pass the content of this string as the `page_token` attribute of
+	// the next request. `next_page_token` is not returned for the last
+	// page.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListMutateJobResultsResponse) Reset()         { *m = ListMutateJobResultsResponse{} }
+func (m *ListMutateJobResultsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListMutateJobResultsResponse) ProtoMessage()    {}
+func (*ListMutateJobResultsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{7}
+}
+
+func (m *ListMutateJobResultsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListMutateJobResultsResponse.Unmarshal(m, b)
+}
+func (m *ListMutateJobResultsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListMutateJobResultsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListMutateJobResultsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListMutateJobResultsResponse.Merge(m, src)
+}
+func (m *ListMutateJobResultsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListMutateJobResultsResponse.Size(m)
+}
+func (m *ListMutateJobResultsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListMutateJobResultsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListMutateJobResultsResponse proto.InternalMessageInfo
+
+func (m *ListMutateJobResultsResponse) GetResults() []*MutateJobResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *ListMutateJobResultsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// MutateJob result.
+type MutateJobResult struct {
+	// Index of the mutate operation.
+	OperationIndex int64 `protobuf:"varint,1,opt,name=operation_index,json=operationIndex,proto3" json:"operation_index,omitempty"`
+	// Response for the mutate.
+	// May be empty if errors occurred.
+	MutateOperationResponse *MutateOperationResponse `protobuf:"bytes,2,opt,name=mutate_operation_response,json=mutateOperationResponse,proto3" json:"mutate_operation_response,omitempty"`
+	// Details of the errors when processing the operation.
+	Status               *status.Status `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *MutateJobResult) Reset()         { *m = MutateJobResult{} }
+func (m *MutateJobResult) String() string { return proto.CompactTextString(m) }
+func (*MutateJobResult) ProtoMessage()    {}
+func (*MutateJobResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f886c171116bc7fb, []int{8}
+}
+
+func (m *MutateJobResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateJobResult.Unmarshal(m, b)
+}
+func (m *MutateJobResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateJobResult.Marshal(b, m, deterministic)
+}
+func (m *MutateJobResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateJobResult.Merge(m, src)
+}
+func (m *MutateJobResult) XXX_Size() int {
+	return xxx_messageInfo_MutateJobResult.Size(m)
+}
+func (m *MutateJobResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateJobResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateJobResult proto.InternalMessageInfo
+
+func (m *MutateJobResult) GetOperationIndex() int64 {
+	if m != nil {
+		return m.OperationIndex
+	}
+	return 0
+}
+
+func (m *MutateJobResult) GetMutateOperationResponse() *MutateOperationResponse {
+	if m != nil {
+		return m.MutateOperationResponse
+	}
+	return nil
+}
+
+func (m *MutateJobResult) GetStatus() *status.Status {
+	if m != nil {
+		return m.Status
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CreateMutateJobRequest)(nil), "google.ads.googleads.v3.services.CreateMutateJobRequest")
+	proto.RegisterType((*CreateMutateJobResponse)(nil), "google.ads.googleads.v3.services.CreateMutateJobResponse")
+	proto.RegisterType((*GetMutateJobRequest)(nil), "google.ads.googleads.v3.services.GetMutateJobRequest")
+	proto.RegisterType((*RunMutateJobRequest)(nil), "google.ads.googleads.v3.services.RunMutateJobRequest")
+	proto.RegisterType((*AddMutateJobOperationsRequest)(nil), "google.ads.googleads.v3.services.AddMutateJobOperationsRequest")
+	proto.RegisterType((*AddMutateJobOperationsResponse)(nil), "google.ads.googleads.v3.services.AddMutateJobOperationsResponse")
+	proto.RegisterType((*ListMutateJobResultsRequest)(nil), "google.ads.googleads.v3.services.ListMutateJobResultsRequest")
+	proto.RegisterType((*ListMutateJobResultsResponse)(nil), "google.ads.googleads.v3.services.ListMutateJobResultsResponse")
+	proto.RegisterType((*MutateJobResult)(nil), "google.ads.googleads.v3.services.MutateJobResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/mutate_job_service.proto", fileDescriptor_f886c171116bc7fb)
+}
+
+var fileDescriptor_f886c171116bc7fb = []byte{
+	// 976 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x6f, 0xdc, 0x44,
+	0x14, 0x97, 0x77, 0x45, 0x21, 0x93, 0xa4, 0x9b, 0x4e, 0x69, 0xb3, 0x38, 0x0d, 0x5d, 0xb9, 0x01,
+	0xc2, 0x2a, 0xb2, 0x61, 0x97, 0x4a, 0x8d, 0x51, 0x12, 0x1c, 0x40, 0x69, 0x0b, 0x85, 0xc8, 0x41,
+	0x39, 0xa0, 0x48, 0xd6, 0xac, 0x3d, 0x35, 0x86, 0xf5, 0x8c, 0xf1, 0x8c, 0xa3, 0xd2, 0xa8, 0x17,
+	0x38, 0x72, 0xec, 0x85, 0x33, 0xe2, 0xc4, 0x07, 0x40, 0xe2, 0x2b, 0xe4, 0x84, 0x84, 0xb8, 0x44,
+	0x42, 0xe2, 0x80, 0x84, 0xc4, 0x85, 0x2f, 0xc0, 0x01, 0xd9, 0x9e, 0xf1, 0xda, 0x59, 0x27, 0xcb,
+	0xa6, 0xb7, 0xd9, 0xdf, 0xfb, 0xfb, 0x7b, 0xef, 0xf9, 0xbd, 0x05, 0xeb, 0x3e, 0xa5, 0xfe, 0x10,
+	0x1b, 0xc8, 0x63, 0x46, 0xfe, 0x4c, 0x5f, 0x87, 0x7d, 0x83, 0xe1, 0xf8, 0x30, 0x70, 0x31, 0x33,
+	0xc2, 0x84, 0x23, 0x8e, 0x9d, 0xcf, 0xe9, 0xc0, 0x11, 0x98, 0x1e, 0xc5, 0x94, 0x53, 0xd8, 0xc9,
+	0xf5, 0x75, 0xe4, 0x31, 0xbd, 0x30, 0xd5, 0x0f, 0xfb, 0xba, 0x34, 0x55, 0x7b, 0x67, 0x39, 0x8f,
+	0x31, 0xa3, 0x49, 0x5c, 0xf5, 0x9e, 0x7b, 0x55, 0x27, 0x27, 0x94, 0xa3, 0x0e, 0xf2, 0x58, 0x35,
+	0x21, 0xf5, 0x86, 0x34, 0x8d, 0x02, 0x03, 0x11, 0x42, 0x39, 0xe2, 0x01, 0x25, 0x4c, 0x48, 0x17,
+	0x4b, 0x52, 0x77, 0x18, 0x60, 0xc2, 0x85, 0xe0, 0x66, 0x49, 0xf0, 0x30, 0xc0, 0x43, 0xcf, 0x19,
+	0xe0, 0xcf, 0xd0, 0x61, 0x40, 0x63, 0xa1, 0x70, 0x4b, 0x28, 0x0c, 0x29, 0xf1, 0xe3, 0x84, 0x90,
+	0x80, 0xf8, 0x06, 0x8d, 0x70, 0x5c, 0xeb, 0x3e, 0x8e, 0x5c, 0x83, 0x71, 0xc4, 0x13, 0x21, 0xd0,
+	0x36, 0xc1, 0xf5, 0x77, 0x63, 0x8c, 0x38, 0x7e, 0x90, 0x51, 0xbd, 0x4f, 0x07, 0x36, 0xfe, 0x32,
+	0xc1, 0x8c, 0xc3, 0x15, 0x30, 0xeb, 0x26, 0x8c, 0xd3, 0x10, 0xc7, 0x4e, 0xe0, 0xb5, 0x95, 0x8e,
+	0xb2, 0x3a, 0xb3, 0xdd, 0xfc, 0xc3, 0x6a, 0xd8, 0x40, 0xe2, 0xf7, 0x3c, 0x6d, 0x13, 0x2c, 0x8e,
+	0xd9, 0xb3, 0x88, 0x12, 0x86, 0xe1, 0x2d, 0x30, 0x2f, 0x2b, 0xe9, 0x10, 0x14, 0xe2, 0xdc, 0x85,
+	0x3d, 0x27, 0xc1, 0x8f, 0x50, 0x88, 0xb5, 0x2d, 0x70, 0x75, 0x07, 0xf3, 0xb1, 0xe0, 0xab, 0xb5,
+	0xb6, 0x79, 0xf8, 0x31, 0x07, 0x76, 0x42, 0x9e, 0xc1, 0xc1, 0x6f, 0x0a, 0x58, 0xb6, 0x3c, 0xaf,
+	0xf0, 0xf0, 0x71, 0x51, 0xbb, 0xa9, 0x7d, 0xc1, 0x57, 0xc0, 0x65, 0x96, 0x1a, 0x11, 0x17, 0x3b,
+	0x9c, 0x7e, 0x81, 0x49, 0xbb, 0x91, 0x71, 0x9e, 0x97, 0xe8, 0x27, 0x29, 0x08, 0x5d, 0x70, 0x45,
+	0x4c, 0xd6, 0xa8, 0x51, 0xed, 0x66, 0xa7, 0xb9, 0x3a, 0xdb, 0x7b, 0x53, 0x9f, 0x34, 0xb7, 0x7a,
+	0x9e, 0x69, 0x91, 0x66, 0x9e, 0xc7, 0x42, 0x58, 0x45, 0x99, 0x76, 0x04, 0x5e, 0x3e, 0x8b, 0x96,
+	0x68, 0xd0, 0xeb, 0x60, 0x81, 0x53, 0x8e, 0x86, 0xe5, 0x2c, 0x52, 0x6a, 0x4d, 0xbb, 0x95, 0xe1,
+	0x23, 0x13, 0xa8, 0x83, 0xab, 0x04, 0x3f, 0xe2, 0x4e, 0x2d, 0xbb, 0x2b, 0xa9, 0x68, 0xaf, 0xcc,
+	0x50, 0xfb, 0x46, 0x01, 0x4b, 0x1f, 0x06, 0xac, 0xdc, 0x58, 0x96, 0x0c, 0xf9, 0x05, 0x4a, 0xba,
+	0x0c, 0x40, 0x84, 0xfc, 0x6a, 0xc0, 0x99, 0x14, 0xc9, 0x4b, 0xb9, 0x04, 0xb2, 0x1f, 0x0e, 0x0b,
+	0x1e, 0xe3, 0x76, 0xb3, 0xa3, 0xac, 0x3e, 0x67, 0xbf, 0x90, 0x02, 0x7b, 0xc1, 0x63, 0xac, 0x3d,
+	0x55, 0xc0, 0x8d, 0xfa, 0x2c, 0x44, 0x05, 0x3e, 0x00, 0xcf, 0xc7, 0x39, 0xd4, 0x56, 0xa6, 0x2b,
+	0x7f, 0xe1, 0xcc, 0x96, 0x1e, 0xe0, 0xab, 0xa0, 0x95, 0xd5, 0x68, 0x2c, 0xdd, 0xf9, 0x14, 0xde,
+	0x95, 0x29, 0x6b, 0xbf, 0x2b, 0xa0, 0x75, 0xca, 0x09, 0x7c, 0x0d, 0xb4, 0x8a, 0x26, 0x38, 0x01,
+	0xf1, 0xf0, 0x23, 0xd1, 0x89, 0xcb, 0x05, 0x7c, 0x2f, 0x45, 0x61, 0x02, 0x5e, 0x3a, 0x3d, 0x3a,
+	0x4e, 0x2c, 0xe8, 0x64, 0xe1, 0x66, 0x7b, 0xeb, 0x53, 0x8f, 0x90, 0xac, 0x87, 0xbd, 0x18, 0xd6,
+	0x0b, 0x60, 0x17, 0x5c, 0xca, 0xd7, 0x46, 0x56, 0xe3, 0xd9, 0x1e, 0x94, 0x31, 0xe2, 0xc8, 0xd5,
+	0xf7, 0x32, 0x89, 0x2d, 0x34, 0x7a, 0xff, 0xcc, 0x80, 0x85, 0x82, 0xdf, 0x5e, 0x1e, 0x12, 0xfe,
+	0xa2, 0x80, 0xd6, 0xa9, 0x45, 0x01, 0xef, 0x4c, 0x4e, 0xb4, 0x7e, 0x37, 0xa9, 0xeb, 0x17, 0xb0,
+	0xcc, 0x99, 0x68, 0x77, 0x4f, 0xac, 0xf2, 0x5e, 0xfb, 0xfa, 0xd7, 0x3f, 0x9f, 0x36, 0xde, 0xd2,
+	0x8c, 0x74, 0x87, 0x4b, 0x98, 0x19, 0x47, 0x25, 0x8d, 0x8d, 0xee, 0x13, 0x71, 0x07, 0xee, 0xd3,
+	0x01, 0x33, 0xdd, 0xcc, 0xaf, 0xa9, 0x74, 0xe1, 0xcf, 0x0a, 0x98, 0x2b, 0xef, 0x2e, 0x78, 0x7b,
+	0x72, 0x56, 0x35, 0xbb, 0x4e, 0x5d, 0x3b, 0xd3, 0xac, 0x38, 0x44, 0xa3, 0xa1, 0xd3, 0xde, 0x3b,
+	0xb1, 0xaa, 0x9f, 0x4e, 0xc6, 0x40, 0x87, 0x6b, 0x29, 0x83, 0xa3, 0x8a, 0x64, 0x63, 0x44, 0xa8,
+	0x5b, 0xa2, 0x60, 0x74, 0x9f, 0xc0, 0xbf, 0x14, 0xf0, 0x62, 0xdd, 0x97, 0x01, 0x37, 0x26, 0x73,
+	0x38, 0xe7, 0xbb, 0x56, 0x37, 0x2f, 0x6a, 0x2e, 0xba, 0xb3, 0x5b, 0xcb, 0xce, 0x84, 0x77, 0xa6,
+	0x61, 0x67, 0x0e, 0x03, 0xc6, 0x25, 0xa1, 0x6f, 0x1b, 0x60, 0xae, 0x7c, 0x20, 0xfe, 0x4f, 0x97,
+	0x6a, 0x0e, 0x8a, 0xba, 0x2c, 0xcd, 0x4a, 0x77, 0x56, 0x2f, 0x3e, 0x14, 0xed, 0x07, 0xe5, 0xd8,
+	0xda, 0x07, 0xd7, 0x84, 0x4e, 0x76, 0x5b, 0x07, 0xc9, 0x43, 0xfd, 0xfd, 0x30, 0xe2, 0x5f, 0xc1,
+	0x8d, 0x29, 0x1a, 0x3c, 0x7a, 0x3d, 0xc0, 0x1c, 0x79, 0x88, 0xa3, 0xda, 0x92, 0xdc, 0xd6, 0xde,
+	0x98, 0xaa, 0x24, 0x71, 0x42, 0xd2, 0x99, 0xfd, 0xa9, 0x01, 0xae, 0xd7, 0x5f, 0x05, 0xb8, 0x35,
+	0xb9, 0x2e, 0xe7, 0x9e, 0x49, 0xf5, 0x9d, 0x8b, 0x3b, 0x10, 0xdd, 0xff, 0x4e, 0x39, 0xb1, 0xf4,
+	0x0a, 0xa3, 0xb5, 0xea, 0xc1, 0x59, 0x1b, 0x3b, 0x9b, 0x27, 0xd6, 0xcd, 0xaa, 0xc1, 0x98, 0x46,
+	0x56, 0xae, 0x2d, 0xcd, 0x9c, 0xaa, 0x5c, 0xc8, 0xf3, 0x46, 0xf9, 0x99, 0x4a, 0x57, 0x5d, 0x3a,
+	0xb6, 0xda, 0x23, 0x4e, 0xe2, 0x15, 0x05, 0x4c, 0x77, 0x69, 0xb8, 0xfd, 0xaf, 0x02, 0x56, 0x5c,
+	0x1a, 0x4e, 0xe4, 0xbf, 0x7d, 0xed, 0xf4, 0x5e, 0xdc, 0x4d, 0x07, 0x65, 0x57, 0xf9, 0xf4, 0xae,
+	0x30, 0xf5, 0xe9, 0x10, 0x11, 0x5f, 0xa7, 0xb1, 0x6f, 0xf8, 0x98, 0x64, 0x63, 0x64, 0x8c, 0x82,
+	0x9d, 0xfd, 0xb7, 0xf3, 0x6d, 0xf9, 0xf8, 0xbe, 0xd1, 0xdc, 0xb1, 0xac, 0x1f, 0x1b, 0x9d, 0x9d,
+	0xdc, 0xa1, 0xe5, 0x31, 0x3d, 0x7f, 0xa6, 0xaf, 0xfd, 0xbe, 0x2e, 0x02, 0xb3, 0x63, 0xa9, 0x72,
+	0x60, 0x79, 0xec, 0xa0, 0x50, 0x39, 0xd8, 0xef, 0x1f, 0x48, 0x95, 0xbf, 0x1b, 0x2b, 0x39, 0x6e,
+	0x9a, 0x96, 0xc7, 0x4c, 0xb3, 0x50, 0x32, 0xcd, 0xfd, 0xbe, 0x69, 0x4a, 0xb5, 0xc1, 0xa5, 0x2c,
+	0xcf, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x99, 0x07, 0x1b, 0xa6, 0xae, 0x0b, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// MutateJobServiceClient is the client API for MutateJobService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MutateJobServiceClient interface {
+	// Creates a mutate job.
+	CreateMutateJob(ctx context.Context, in *CreateMutateJobRequest, opts ...grpc.CallOption) (*CreateMutateJobResponse, error)
+	// Returns the mutate job.
+	GetMutateJob(ctx context.Context, in *GetMutateJobRequest, opts ...grpc.CallOption) (*resources.MutateJob, error)
+	// Returns the results of the mutate job. The job must be done.
+	// Supports standard list paging.
+	ListMutateJobResults(ctx context.Context, in *ListMutateJobResultsRequest, opts ...grpc.CallOption) (*ListMutateJobResultsResponse, error)
+	// Runs the mutate job.
+	//
+	// The Operation.metadata field type is MutateJobMetadata. When finished, the
+	// long running operation will not contain errors or a response. Instead, use
+	// ListMutateJobResults to get the results of the job.
+	RunMutateJob(ctx context.Context, in *RunMutateJobRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
+	// Add operations to the mutate job.
+	AddMutateJobOperations(ctx context.Context, in *AddMutateJobOperationsRequest, opts ...grpc.CallOption) (*AddMutateJobOperationsResponse, error)
+}
+
+type mutateJobServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMutateJobServiceClient(cc grpc.ClientConnInterface) MutateJobServiceClient {
+	return &mutateJobServiceClient{cc}
+}
+
+func (c *mutateJobServiceClient) CreateMutateJob(ctx context.Context, in *CreateMutateJobRequest, opts ...grpc.CallOption) (*CreateMutateJobResponse, error) {
+	out := new(CreateMutateJobResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MutateJobService/CreateMutateJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mutateJobServiceClient) GetMutateJob(ctx context.Context, in *GetMutateJobRequest, opts ...grpc.CallOption) (*resources.MutateJob, error) {
+	out := new(resources.MutateJob)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MutateJobService/GetMutateJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mutateJobServiceClient) ListMutateJobResults(ctx context.Context, in *ListMutateJobResultsRequest, opts ...grpc.CallOption) (*ListMutateJobResultsResponse, error) {
+	out := new(ListMutateJobResultsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MutateJobService/ListMutateJobResults", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mutateJobServiceClient) RunMutateJob(ctx context.Context, in *RunMutateJobRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
+	out := new(longrunning.Operation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MutateJobService/RunMutateJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mutateJobServiceClient) AddMutateJobOperations(ctx context.Context, in *AddMutateJobOperationsRequest, opts ...grpc.CallOption) (*AddMutateJobOperationsResponse, error) {
+	out := new(AddMutateJobOperationsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.MutateJobService/AddMutateJobOperations", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MutateJobServiceServer is the server API for MutateJobService service.
+type MutateJobServiceServer interface {
+	// Creates a mutate job.
+	CreateMutateJob(context.Context, *CreateMutateJobRequest) (*CreateMutateJobResponse, error)
+	// Returns the mutate job.
+	GetMutateJob(context.Context, *GetMutateJobRequest) (*resources.MutateJob, error)
+	// Returns the results of the mutate job. The job must be done.
+	// Supports standard list paging.
+	ListMutateJobResults(context.Context, *ListMutateJobResultsRequest) (*ListMutateJobResultsResponse, error)
+	// Runs the mutate job.
+	//
+	// The Operation.metadata field type is MutateJobMetadata. When finished, the
+	// long running operation will not contain errors or a response. Instead, use
+	// ListMutateJobResults to get the results of the job.
+	RunMutateJob(context.Context, *RunMutateJobRequest) (*longrunning.Operation, error)
+	// Add operations to the mutate job.
+	AddMutateJobOperations(context.Context, *AddMutateJobOperationsRequest) (*AddMutateJobOperationsResponse, error)
+}
+
+// UnimplementedMutateJobServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedMutateJobServiceServer struct {
+}
+
+func (*UnimplementedMutateJobServiceServer) CreateMutateJob(ctx context.Context, req *CreateMutateJobRequest) (*CreateMutateJobResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method CreateMutateJob not implemented")
+}
+func (*UnimplementedMutateJobServiceServer) GetMutateJob(ctx context.Context, req *GetMutateJobRequest) (*resources.MutateJob, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetMutateJob not implemented")
+}
+func (*UnimplementedMutateJobServiceServer) ListMutateJobResults(ctx context.Context, req *ListMutateJobResultsRequest) (*ListMutateJobResultsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method ListMutateJobResults not implemented")
+}
+func (*UnimplementedMutateJobServiceServer) RunMutateJob(ctx context.Context, req *RunMutateJobRequest) (*longrunning.Operation, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method RunMutateJob not implemented")
+}
+func (*UnimplementedMutateJobServiceServer) AddMutateJobOperations(ctx context.Context, req *AddMutateJobOperationsRequest) (*AddMutateJobOperationsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method AddMutateJobOperations not implemented")
+}
+
+func RegisterMutateJobServiceServer(s *grpc.Server, srv MutateJobServiceServer) {
+	s.RegisterService(&_MutateJobService_serviceDesc, srv)
+}
+
+func _MutateJobService_CreateMutateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateMutateJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MutateJobServiceServer).CreateMutateJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MutateJobService/CreateMutateJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MutateJobServiceServer).CreateMutateJob(ctx, req.(*CreateMutateJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MutateJobService_GetMutateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMutateJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MutateJobServiceServer).GetMutateJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MutateJobService/GetMutateJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MutateJobServiceServer).GetMutateJob(ctx, req.(*GetMutateJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MutateJobService_ListMutateJobResults_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListMutateJobResultsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MutateJobServiceServer).ListMutateJobResults(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MutateJobService/ListMutateJobResults",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MutateJobServiceServer).ListMutateJobResults(ctx, req.(*ListMutateJobResultsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MutateJobService_RunMutateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RunMutateJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MutateJobServiceServer).RunMutateJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MutateJobService/RunMutateJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MutateJobServiceServer).RunMutateJob(ctx, req.(*RunMutateJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MutateJobService_AddMutateJobOperations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AddMutateJobOperationsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MutateJobServiceServer).AddMutateJobOperations(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.MutateJobService/AddMutateJobOperations",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MutateJobServiceServer).AddMutateJobOperations(ctx, req.(*AddMutateJobOperationsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MutateJobService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.MutateJobService",
+	HandlerType: (*MutateJobServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CreateMutateJob",
+			Handler:    _MutateJobService_CreateMutateJob_Handler,
+		},
+		{
+			MethodName: "GetMutateJob",
+			Handler:    _MutateJobService_GetMutateJob_Handler,
+		},
+		{
+			MethodName: "ListMutateJobResults",
+			Handler:    _MutateJobService_ListMutateJobResults_Handler,
+		},
+		{
+			MethodName: "RunMutateJob",
+			Handler:    _MutateJobService_RunMutateJob_Handler,
+		},
+		{
+			MethodName: "AddMutateJobOperations",
+			Handler:    _MutateJobService_AddMutateJobOperations_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/mutate_job_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/operating_system_version_constant_service.pb.go b/googleapis/ads/googleads/v3/services/operating_system_version_constant_service.pb.go
new file mode 100644
index 0000000..af52301
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/operating_system_version_constant_service.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/operating_system_version_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [OperatingSystemVersionConstantService.GetOperatingSystemVersionConstant][google.ads.googleads.v3.services.OperatingSystemVersionConstantService.GetOperatingSystemVersionConstant].
+type GetOperatingSystemVersionConstantRequest struct {
+	// Required. Resource name of the OS version to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetOperatingSystemVersionConstantRequest) Reset() {
+	*m = GetOperatingSystemVersionConstantRequest{}
+}
+func (m *GetOperatingSystemVersionConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetOperatingSystemVersionConstantRequest) ProtoMessage()    {}
+func (*GetOperatingSystemVersionConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0b1505ba5b934207, []int{0}
+}
+
+func (m *GetOperatingSystemVersionConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOperatingSystemVersionConstantRequest.Unmarshal(m, b)
+}
+func (m *GetOperatingSystemVersionConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOperatingSystemVersionConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetOperatingSystemVersionConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOperatingSystemVersionConstantRequest.Merge(m, src)
+}
+func (m *GetOperatingSystemVersionConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetOperatingSystemVersionConstantRequest.Size(m)
+}
+func (m *GetOperatingSystemVersionConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOperatingSystemVersionConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetOperatingSystemVersionConstantRequest proto.InternalMessageInfo
+
+func (m *GetOperatingSystemVersionConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetOperatingSystemVersionConstantRequest)(nil), "google.ads.googleads.v3.services.GetOperatingSystemVersionConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/operating_system_version_constant_service.proto", fileDescriptor_0b1505ba5b934207)
+}
+
+var fileDescriptor_0b1505ba5b934207 = []byte{
+	// 427 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x4f, 0x8b, 0xd3, 0x40,
+	0x18, 0xc6, 0x69, 0x16, 0x04, 0x83, 0x5e, 0x72, 0x71, 0xa9, 0x82, 0x75, 0x59, 0xa1, 0xec, 0x61,
+	0x06, 0x0c, 0x22, 0x8c, 0x78, 0x98, 0x7a, 0xa8, 0x0a, 0x6a, 0xd9, 0x95, 0x1e, 0xa4, 0x10, 0x66,
+	0x93, 0xd7, 0x38, 0xd0, 0xcc, 0x5b, 0xe7, 0x9d, 0x0d, 0x88, 0x78, 0xd0, 0x6f, 0x20, 0x7e, 0x03,
+	0x8f, 0x7e, 0x12, 0xd9, 0xab, 0x37, 0x4f, 0x1e, 0x3c, 0xf9, 0x29, 0x96, 0x74, 0x32, 0xd9, 0xed,
+	0xa1, 0x7f, 0x6e, 0x0f, 0x7d, 0x9f, 0xfe, 0xde, 0x27, 0xcf, 0x9b, 0xc4, 0x93, 0x12, 0xb1, 0x9c,
+	0x03, 0x57, 0x05, 0x71, 0x2f, 0x1b, 0x55, 0xa7, 0x9c, 0xc0, 0xd6, 0x3a, 0x07, 0xe2, 0xb8, 0x00,
+	0xab, 0x9c, 0x36, 0x65, 0x46, 0x1f, 0xc9, 0x41, 0x95, 0xd5, 0x60, 0x49, 0xa3, 0xc9, 0x72, 0x34,
+	0xe4, 0x94, 0x71, 0x59, 0x6b, 0x65, 0x0b, 0x8b, 0x0e, 0x93, 0x81, 0xc7, 0x30, 0x55, 0x10, 0xeb,
+	0x88, 0xac, 0x4e, 0x59, 0x20, 0xf6, 0x9f, 0xaf, 0xdb, 0x69, 0x81, 0xf0, 0xcc, 0xee, 0xb4, 0xd4,
+	0x2f, 0xeb, 0xdf, 0x09, 0xa8, 0x85, 0xe6, 0xca, 0x18, 0x74, 0xca, 0x69, 0x34, 0xd4, 0x4e, 0x6f,
+	0x5d, 0x99, 0xe6, 0x73, 0x0d, 0xdd, 0xdf, 0xee, 0x5e, 0x19, 0xbc, 0xd3, 0x30, 0x2f, 0xb2, 0x53,
+	0x78, 0xaf, 0x6a, 0x8d, 0xd6, 0x1b, 0x0e, 0xde, 0xc4, 0xc3, 0x31, 0xb8, 0xd7, 0x21, 0xc5, 0xc9,
+	0x32, 0xc4, 0xd4, 0x67, 0x78, 0xda, 0x46, 0x38, 0x86, 0x0f, 0x67, 0x40, 0x2e, 0x19, 0xc6, 0x37,
+	0x43, 0xf0, 0xcc, 0xa8, 0x0a, 0xf6, 0x7b, 0x83, 0xde, 0xf0, 0xfa, 0x68, 0xef, 0xaf, 0x8c, 0x8e,
+	0x6f, 0x84, 0xc9, 0x2b, 0x55, 0xc1, 0x83, 0x5f, 0x51, 0x7c, 0x7f, 0x33, 0xf3, 0xc4, 0x77, 0x94,
+	0x7c, 0x89, 0xe2, 0x7b, 0x5b, 0x03, 0x24, 0x2f, 0xd8, 0xb6, 0xae, 0xd9, 0xae, 0x4f, 0xd1, 0x97,
+	0x6b, 0x59, 0xdd, 0x55, 0xd8, 0x66, 0xd2, 0xc1, 0xcb, 0x3f, 0x72, 0xb5, 0x89, 0xaf, 0xbf, 0xff,
+	0x7d, 0x8f, 0x1e, 0x25, 0x0f, 0x9b, 0xdb, 0x7e, 0x5a, 0x99, 0x3c, 0xc1, 0x8d, 0x28, 0xe2, 0x47,
+	0x9f, 0xfb, 0xb7, 0xcf, 0xe5, 0xfe, 0x65, 0x90, 0x56, 0x2d, 0x34, 0xb1, 0x1c, 0xab, 0xd1, 0xb7,
+	0x28, 0x3e, 0xcc, 0xb1, 0xda, 0x5a, 0xc0, 0xe8, 0x68, 0xa7, 0xc2, 0x27, 0xcd, 0xd5, 0x27, 0xbd,
+	0xb7, 0xcf, 0x5a, 0x5e, 0x89, 0x73, 0x65, 0x4a, 0x86, 0xb6, 0xe4, 0x25, 0x98, 0xe5, 0x3b, 0xc1,
+	0x2f, 0x13, 0xac, 0xff, 0x5a, 0x1e, 0x07, 0xf1, 0x23, 0xda, 0x1b, 0x4b, 0xf9, 0x33, 0x1a, 0x8c,
+	0x3d, 0x50, 0x16, 0xc4, 0xbc, 0x6c, 0xd4, 0x34, 0x65, 0xed, 0x62, 0x3a, 0x0f, 0x96, 0x99, 0x2c,
+	0x68, 0xd6, 0x59, 0x66, 0xd3, 0x74, 0x16, 0x2c, 0xff, 0xa3, 0x43, 0xff, 0xbb, 0x10, 0xb2, 0x20,
+	0x21, 0x3a, 0x93, 0x10, 0xd3, 0x54, 0x88, 0x60, 0x3b, 0xbd, 0xb6, 0xcc, 0x99, 0x5e, 0x04, 0x00,
+	0x00, 0xff, 0xff, 0x19, 0xa8, 0x93, 0xae, 0xd4, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// OperatingSystemVersionConstantServiceClient is the client API for OperatingSystemVersionConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type OperatingSystemVersionConstantServiceClient interface {
+	// Returns the requested OS version constant in full detail.
+	GetOperatingSystemVersionConstant(ctx context.Context, in *GetOperatingSystemVersionConstantRequest, opts ...grpc.CallOption) (*resources.OperatingSystemVersionConstant, error)
+}
+
+type operatingSystemVersionConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewOperatingSystemVersionConstantServiceClient(cc grpc.ClientConnInterface) OperatingSystemVersionConstantServiceClient {
+	return &operatingSystemVersionConstantServiceClient{cc}
+}
+
+func (c *operatingSystemVersionConstantServiceClient) GetOperatingSystemVersionConstant(ctx context.Context, in *GetOperatingSystemVersionConstantRequest, opts ...grpc.CallOption) (*resources.OperatingSystemVersionConstant, error) {
+	out := new(resources.OperatingSystemVersionConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.OperatingSystemVersionConstantService/GetOperatingSystemVersionConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// OperatingSystemVersionConstantServiceServer is the server API for OperatingSystemVersionConstantService service.
+type OperatingSystemVersionConstantServiceServer interface {
+	// Returns the requested OS version constant in full detail.
+	GetOperatingSystemVersionConstant(context.Context, *GetOperatingSystemVersionConstantRequest) (*resources.OperatingSystemVersionConstant, error)
+}
+
+// UnimplementedOperatingSystemVersionConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedOperatingSystemVersionConstantServiceServer struct {
+}
+
+func (*UnimplementedOperatingSystemVersionConstantServiceServer) GetOperatingSystemVersionConstant(ctx context.Context, req *GetOperatingSystemVersionConstantRequest) (*resources.OperatingSystemVersionConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOperatingSystemVersionConstant not implemented")
+}
+
+func RegisterOperatingSystemVersionConstantServiceServer(s *grpc.Server, srv OperatingSystemVersionConstantServiceServer) {
+	s.RegisterService(&_OperatingSystemVersionConstantService_serviceDesc, srv)
+}
+
+func _OperatingSystemVersionConstantService_GetOperatingSystemVersionConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetOperatingSystemVersionConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OperatingSystemVersionConstantServiceServer).GetOperatingSystemVersionConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.OperatingSystemVersionConstantService/GetOperatingSystemVersionConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OperatingSystemVersionConstantServiceServer).GetOperatingSystemVersionConstant(ctx, req.(*GetOperatingSystemVersionConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _OperatingSystemVersionConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.OperatingSystemVersionConstantService",
+	HandlerType: (*OperatingSystemVersionConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetOperatingSystemVersionConstant",
+			Handler:    _OperatingSystemVersionConstantService_GetOperatingSystemVersionConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/operating_system_version_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/paid_organic_search_term_view_service.pb.go b/googleapis/ads/googleads/v3/services/paid_organic_search_term_view_service.pb.go
new file mode 100644
index 0000000..1e585e2
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/paid_organic_search_term_view_service.pb.go
@@ -0,0 +1,192 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/paid_organic_search_term_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [PaidOrganicSearchTermViewService.GetPaidOrganicSearchTermView][google.ads.googleads.v3.services.PaidOrganicSearchTermViewService.GetPaidOrganicSearchTermView].
+type GetPaidOrganicSearchTermViewRequest struct {
+	// Required. The resource name of the paid organic search term view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetPaidOrganicSearchTermViewRequest) Reset()         { *m = GetPaidOrganicSearchTermViewRequest{} }
+func (m *GetPaidOrganicSearchTermViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetPaidOrganicSearchTermViewRequest) ProtoMessage()    {}
+func (*GetPaidOrganicSearchTermViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3d009f350eeeb233, []int{0}
+}
+
+func (m *GetPaidOrganicSearchTermViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetPaidOrganicSearchTermViewRequest.Unmarshal(m, b)
+}
+func (m *GetPaidOrganicSearchTermViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetPaidOrganicSearchTermViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetPaidOrganicSearchTermViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetPaidOrganicSearchTermViewRequest.Merge(m, src)
+}
+func (m *GetPaidOrganicSearchTermViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetPaidOrganicSearchTermViewRequest.Size(m)
+}
+func (m *GetPaidOrganicSearchTermViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetPaidOrganicSearchTermViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetPaidOrganicSearchTermViewRequest proto.InternalMessageInfo
+
+func (m *GetPaidOrganicSearchTermViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetPaidOrganicSearchTermViewRequest)(nil), "google.ads.googleads.v3.services.GetPaidOrganicSearchTermViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/paid_organic_search_term_view_service.proto", fileDescriptor_3d009f350eeeb233)
+}
+
+var fileDescriptor_3d009f350eeeb233 = []byte{
+	// 439 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x31, 0x6b, 0x14, 0x41,
+	0x14, 0xc7, 0xb9, 0x0d, 0x08, 0x2e, 0xda, 0x6c, 0x63, 0x38, 0x03, 0x1e, 0x31, 0x42, 0x48, 0x31,
+	0x03, 0x6e, 0x37, 0x46, 0x61, 0x0e, 0xc2, 0x59, 0x88, 0x39, 0x92, 0x70, 0x85, 0x1c, 0x2c, 0x93,
+	0x9d, 0xe7, 0x66, 0xe0, 0x76, 0xe6, 0x9c, 0x37, 0xb7, 0x29, 0xc4, 0xc6, 0xda, 0xce, 0x6f, 0x60,
+	0xe9, 0x57, 0xf0, 0x1b, 0xa4, 0xb5, 0xb3, 0xb2, 0xb0, 0xf2, 0x1b, 0xd8, 0xc9, 0xed, 0xec, 0x6c,
+	0x72, 0xe0, 0xba, 0xe9, 0xfe, 0xec, 0xff, 0xcf, 0xef, 0xff, 0xe6, 0x3d, 0x36, 0x7e, 0x55, 0x18,
+	0x53, 0x2c, 0x80, 0x0a, 0x89, 0xd4, 0xcb, 0xb5, 0xaa, 0x52, 0x8a, 0x60, 0x2b, 0x95, 0x03, 0xd2,
+	0xa5, 0x50, 0x32, 0x33, 0xb6, 0x10, 0x5a, 0xe5, 0x19, 0x82, 0xb0, 0xf9, 0x45, 0xe6, 0xc0, 0x96,
+	0x59, 0xa5, 0xe0, 0x32, 0x6b, 0x62, 0x64, 0x69, 0x8d, 0x33, 0xc9, 0xc8, 0x23, 0x88, 0x90, 0x48,
+	0x5a, 0x1a, 0xa9, 0x52, 0x12, 0x68, 0xc3, 0xa3, 0xae, 0x3e, 0x0b, 0x68, 0x56, 0xb6, 0xb7, 0xd0,
+	0x17, 0x0d, 0x77, 0x02, 0x66, 0xa9, 0xa8, 0xd0, 0xda, 0x38, 0xe1, 0x94, 0xd1, 0xd8, 0xb8, 0x0f,
+	0x6e, 0xb8, 0xf9, 0x42, 0x81, 0x76, 0x8d, 0xf1, 0xe8, 0x86, 0xf1, 0x56, 0xc1, 0x42, 0x66, 0xe7,
+	0x70, 0x21, 0x2a, 0x65, 0xac, 0x0f, 0xec, 0x1e, 0xc7, 0x8f, 0x27, 0xe0, 0xa6, 0x42, 0xc9, 0x63,
+	0x3f, 0xc0, 0x69, 0xdd, 0x7f, 0x06, 0xb6, 0x9c, 0x29, 0xb8, 0x3c, 0x81, 0x77, 0x2b, 0x40, 0x97,
+	0xec, 0xc7, 0xf7, 0xc3, 0xbc, 0x99, 0x16, 0x25, 0x6c, 0x0f, 0x46, 0x83, 0xfd, 0xbb, 0xe3, 0xad,
+	0x9f, 0x3c, 0x3a, 0xb9, 0x17, 0x9c, 0xd7, 0xa2, 0x84, 0xa7, 0xdf, 0xa2, 0x78, 0xd4, 0x89, 0x3b,
+	0xf5, 0x5b, 0x49, 0xfe, 0x0c, 0xe2, 0x9d, 0xff, 0xd5, 0x26, 0x47, 0xa4, 0x6f, 0xb1, 0xe4, 0x16,
+	0x63, 0x0f, 0x0f, 0x3b, 0x31, 0xed, 0xf6, 0x49, 0x27, 0x64, 0xf7, 0xec, 0x07, 0xdf, 0x7c, 0xf5,
+	0xc7, 0xef, 0xbf, 0x3e, 0x47, 0x2f, 0x92, 0xc3, 0xf5, 0xf9, 0xde, 0x6f, 0x38, 0xcf, 0xf3, 0x15,
+	0x3a, 0x53, 0x82, 0x45, 0x7a, 0x50, 0xdf, 0xf3, 0x9f, 0x44, 0xa4, 0x07, 0x1f, 0x86, 0x0f, 0xaf,
+	0xf8, 0xf6, 0xf5, 0x28, 0x8d, 0x5a, 0x2a, 0x24, 0xb9, 0x29, 0xc7, 0x9f, 0xa2, 0x78, 0x2f, 0x37,
+	0x65, 0xef, 0xeb, 0xc7, 0x4f, 0xfa, 0x76, 0x3c, 0x5d, 0x9f, 0x77, 0x3a, 0x78, 0xf3, 0xb2, 0x41,
+	0x15, 0x66, 0x21, 0x74, 0x41, 0x8c, 0x2d, 0x68, 0x01, 0xba, 0x3e, 0x3e, 0xbd, 0x2e, 0xef, 0xfe,
+	0x1d, 0x9e, 0x05, 0xf1, 0x25, 0xda, 0x9a, 0x70, 0xfe, 0x35, 0x1a, 0x4d, 0x3c, 0x90, 0x4b, 0x24,
+	0x5e, 0xae, 0xd5, 0x2c, 0x25, 0x4d, 0x31, 0x5e, 0x85, 0xc8, 0x9c, 0x4b, 0x9c, 0xb7, 0x91, 0xf9,
+	0x2c, 0x9d, 0x87, 0xc8, 0xef, 0x68, 0xcf, 0x7f, 0x67, 0x8c, 0x4b, 0x64, 0xac, 0x0d, 0x31, 0x36,
+	0x4b, 0x19, 0x0b, 0xb1, 0xf3, 0x3b, 0xf5, 0x9c, 0xe9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc5,
+	0xb4, 0x90, 0x79, 0xb5, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// PaidOrganicSearchTermViewServiceClient is the client API for PaidOrganicSearchTermViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type PaidOrganicSearchTermViewServiceClient interface {
+	// Returns the requested paid organic search term view in full detail.
+	GetPaidOrganicSearchTermView(ctx context.Context, in *GetPaidOrganicSearchTermViewRequest, opts ...grpc.CallOption) (*resources.PaidOrganicSearchTermView, error)
+}
+
+type paidOrganicSearchTermViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewPaidOrganicSearchTermViewServiceClient(cc grpc.ClientConnInterface) PaidOrganicSearchTermViewServiceClient {
+	return &paidOrganicSearchTermViewServiceClient{cc}
+}
+
+func (c *paidOrganicSearchTermViewServiceClient) GetPaidOrganicSearchTermView(ctx context.Context, in *GetPaidOrganicSearchTermViewRequest, opts ...grpc.CallOption) (*resources.PaidOrganicSearchTermView, error) {
+	out := new(resources.PaidOrganicSearchTermView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.PaidOrganicSearchTermViewService/GetPaidOrganicSearchTermView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// PaidOrganicSearchTermViewServiceServer is the server API for PaidOrganicSearchTermViewService service.
+type PaidOrganicSearchTermViewServiceServer interface {
+	// Returns the requested paid organic search term view in full detail.
+	GetPaidOrganicSearchTermView(context.Context, *GetPaidOrganicSearchTermViewRequest) (*resources.PaidOrganicSearchTermView, error)
+}
+
+// UnimplementedPaidOrganicSearchTermViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedPaidOrganicSearchTermViewServiceServer struct {
+}
+
+func (*UnimplementedPaidOrganicSearchTermViewServiceServer) GetPaidOrganicSearchTermView(ctx context.Context, req *GetPaidOrganicSearchTermViewRequest) (*resources.PaidOrganicSearchTermView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetPaidOrganicSearchTermView not implemented")
+}
+
+func RegisterPaidOrganicSearchTermViewServiceServer(s *grpc.Server, srv PaidOrganicSearchTermViewServiceServer) {
+	s.RegisterService(&_PaidOrganicSearchTermViewService_serviceDesc, srv)
+}
+
+func _PaidOrganicSearchTermViewService_GetPaidOrganicSearchTermView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetPaidOrganicSearchTermViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PaidOrganicSearchTermViewServiceServer).GetPaidOrganicSearchTermView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.PaidOrganicSearchTermViewService/GetPaidOrganicSearchTermView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PaidOrganicSearchTermViewServiceServer).GetPaidOrganicSearchTermView(ctx, req.(*GetPaidOrganicSearchTermViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _PaidOrganicSearchTermViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.PaidOrganicSearchTermViewService",
+	HandlerType: (*PaidOrganicSearchTermViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetPaidOrganicSearchTermView",
+			Handler:    _PaidOrganicSearchTermViewService_GetPaidOrganicSearchTermView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/paid_organic_search_term_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/parental_status_view_service.pb.go b/googleapis/ads/googleads/v3/services/parental_status_view_service.pb.go
new file mode 100644
index 0000000..e00e091
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/parental_status_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/parental_status_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ParentalStatusViewService.GetParentalStatusView][google.ads.googleads.v3.services.ParentalStatusViewService.GetParentalStatusView].
+type GetParentalStatusViewRequest struct {
+	// Required. The resource name of the parental status view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetParentalStatusViewRequest) Reset()         { *m = GetParentalStatusViewRequest{} }
+func (m *GetParentalStatusViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetParentalStatusViewRequest) ProtoMessage()    {}
+func (*GetParentalStatusViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1481d5b1312f10e7, []int{0}
+}
+
+func (m *GetParentalStatusViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Unmarshal(m, b)
+}
+func (m *GetParentalStatusViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetParentalStatusViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetParentalStatusViewRequest.Merge(m, src)
+}
+func (m *GetParentalStatusViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Size(m)
+}
+func (m *GetParentalStatusViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetParentalStatusViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetParentalStatusViewRequest proto.InternalMessageInfo
+
+func (m *GetParentalStatusViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetParentalStatusViewRequest)(nil), "google.ads.googleads.v3.services.GetParentalStatusViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/parental_status_view_service.proto", fileDescriptor_1481d5b1312f10e7)
+}
+
+var fileDescriptor_1481d5b1312f10e7 = []byte{
+	// 423 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x6b, 0xd4, 0x40,
+	0x18, 0x65, 0x53, 0x10, 0x0c, 0x7a, 0x09, 0x88, 0x75, 0x2d, 0xba, 0x94, 0x1e, 0x4a, 0x0f, 0x33,
+	0x60, 0x28, 0xc2, 0xf8, 0x03, 0x66, 0x3d, 0x6c, 0x2f, 0xca, 0xd2, 0xc2, 0x1e, 0x24, 0x10, 0xa6,
+	0xc9, 0x67, 0x1c, 0x48, 0x66, 0xe2, 0x7c, 0x93, 0xf4, 0x20, 0x5e, 0x04, 0xff, 0x02, 0x2f, 0x9e,
+	0x3d, 0xfa, 0xa7, 0xf4, 0xea, 0x4d, 0x10, 0x3c, 0x78, 0xf2, 0xaf, 0x90, 0xec, 0x64, 0xb2, 0x2d,
+	0x35, 0xf6, 0xf6, 0x98, 0xf7, 0xbe, 0xf7, 0xbe, 0x1f, 0x13, 0xbe, 0x28, 0xb4, 0x2e, 0x4a, 0xa0,
+	0x22, 0x47, 0xea, 0x60, 0x87, 0xda, 0x98, 0x22, 0x98, 0x56, 0x66, 0x80, 0xb4, 0x16, 0x06, 0x94,
+	0x15, 0x65, 0x8a, 0x56, 0xd8, 0x06, 0xd3, 0x56, 0xc2, 0x59, 0xda, 0xb3, 0xa4, 0x36, 0xda, 0xea,
+	0x68, 0xe6, 0x2a, 0x89, 0xc8, 0x91, 0x0c, 0x26, 0xa4, 0x8d, 0x89, 0x37, 0x99, 0x3e, 0x1d, 0x8b,
+	0x31, 0x80, 0xba, 0x31, 0x63, 0x39, 0xce, 0x7f, 0xba, 0xe3, 0xab, 0x6b, 0x49, 0x85, 0x52, 0xda,
+	0x0a, 0x2b, 0xb5, 0xc2, 0x9e, 0xbd, 0x7b, 0x81, 0xcd, 0x4a, 0x09, 0xca, 0xf6, 0xc4, 0xc3, 0x0b,
+	0xc4, 0x1b, 0x09, 0x65, 0x9e, 0x9e, 0xc2, 0x5b, 0xd1, 0x4a, 0x6d, 0x9c, 0x60, 0xf7, 0x28, 0xdc,
+	0x59, 0x80, 0x5d, 0xf6, 0xc1, 0x27, 0xeb, 0xdc, 0x95, 0x84, 0xb3, 0x63, 0x78, 0xd7, 0x00, 0xda,
+	0x68, 0x3f, 0xbc, 0xed, 0xfb, 0x4b, 0x95, 0xa8, 0x60, 0x7b, 0x32, 0x9b, 0xec, 0xdf, 0x9c, 0x6f,
+	0xfd, 0xe2, 0xc1, 0xf1, 0x2d, 0xcf, 0xbc, 0x12, 0x15, 0x3c, 0xfa, 0x12, 0x84, 0xf7, 0xae, 0xfa,
+	0x9c, 0xb8, 0xf1, 0xa3, 0x9f, 0x93, 0xf0, 0xce, 0x3f, 0x83, 0xa2, 0xe7, 0xe4, 0xba, 0xd5, 0x91,
+	0xff, 0x75, 0x38, 0x3d, 0x1c, 0xad, 0x1f, 0x16, 0x4b, 0xae, 0x56, 0xef, 0xbe, 0xfc, 0xc1, 0x2f,
+	0x4f, 0xf6, 0xf1, 0xfb, 0xef, 0xcf, 0xc1, 0xe3, 0xe8, 0xb0, 0x3b, 0xc9, 0xfb, 0x4b, 0xcc, 0xb3,
+	0xac, 0x41, 0xab, 0x2b, 0x30, 0x48, 0x0f, 0x86, 0x1b, 0x6d, 0xac, 0x90, 0x1e, 0x7c, 0x98, 0xde,
+	0x3f, 0xe7, 0xdb, 0x9b, 0xf0, 0x1e, 0xd5, 0x12, 0x49, 0xa6, 0xab, 0xf9, 0xa7, 0x20, 0xdc, 0xcb,
+	0x74, 0x75, 0xed, 0xa0, 0xf3, 0x07, 0xa3, 0x0b, 0x5c, 0x76, 0xd7, 0x5a, 0x4e, 0x5e, 0x1f, 0xf5,
+	0x1e, 0x85, 0x2e, 0x85, 0x2a, 0x88, 0x36, 0x05, 0x2d, 0x40, 0xad, 0x6f, 0x49, 0x37, 0xa9, 0xe3,
+	0x7f, 0xf9, 0x89, 0x07, 0x5f, 0x83, 0xad, 0x05, 0xe7, 0xdf, 0x82, 0xd9, 0xc2, 0x19, 0xf2, 0x1c,
+	0x89, 0x83, 0x1d, 0x5a, 0xc5, 0xa4, 0x0f, 0xc6, 0x73, 0x2f, 0x49, 0x78, 0x8e, 0xc9, 0x20, 0x49,
+	0x56, 0x71, 0xe2, 0x25, 0x7f, 0x82, 0x3d, 0xf7, 0xce, 0x18, 0xcf, 0x91, 0xb1, 0x41, 0xc4, 0xd8,
+	0x2a, 0x66, 0xcc, 0xcb, 0x4e, 0x6f, 0xac, 0xfb, 0x8c, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xba,
+	0x37, 0x7a, 0x88, 0x72, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ParentalStatusViewServiceClient is the client API for ParentalStatusViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ParentalStatusViewServiceClient interface {
+	// Returns the requested parental status view in full detail.
+	GetParentalStatusView(ctx context.Context, in *GetParentalStatusViewRequest, opts ...grpc.CallOption) (*resources.ParentalStatusView, error)
+}
+
+type parentalStatusViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewParentalStatusViewServiceClient(cc grpc.ClientConnInterface) ParentalStatusViewServiceClient {
+	return &parentalStatusViewServiceClient{cc}
+}
+
+func (c *parentalStatusViewServiceClient) GetParentalStatusView(ctx context.Context, in *GetParentalStatusViewRequest, opts ...grpc.CallOption) (*resources.ParentalStatusView, error) {
+	out := new(resources.ParentalStatusView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ParentalStatusViewService/GetParentalStatusView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ParentalStatusViewServiceServer is the server API for ParentalStatusViewService service.
+type ParentalStatusViewServiceServer interface {
+	// Returns the requested parental status view in full detail.
+	GetParentalStatusView(context.Context, *GetParentalStatusViewRequest) (*resources.ParentalStatusView, error)
+}
+
+// UnimplementedParentalStatusViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedParentalStatusViewServiceServer struct {
+}
+
+func (*UnimplementedParentalStatusViewServiceServer) GetParentalStatusView(ctx context.Context, req *GetParentalStatusViewRequest) (*resources.ParentalStatusView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetParentalStatusView not implemented")
+}
+
+func RegisterParentalStatusViewServiceServer(s *grpc.Server, srv ParentalStatusViewServiceServer) {
+	s.RegisterService(&_ParentalStatusViewService_serviceDesc, srv)
+}
+
+func _ParentalStatusViewService_GetParentalStatusView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetParentalStatusViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ParentalStatusViewServiceServer).GetParentalStatusView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ParentalStatusViewService/GetParentalStatusView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ParentalStatusViewServiceServer).GetParentalStatusView(ctx, req.(*GetParentalStatusViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ParentalStatusViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ParentalStatusViewService",
+	HandlerType: (*ParentalStatusViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetParentalStatusView",
+			Handler:    _ParentalStatusViewService_GetParentalStatusView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/parental_status_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/payments_account_service.pb.go b/googleapis/ads/googleads/v3/services/payments_account_service.pb.go
new file mode 100644
index 0000000..a363f79
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/payments_account_service.pb.go
@@ -0,0 +1,237 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/payments_account_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for fetching all accessible payments accounts.
+type ListPaymentsAccountsRequest struct {
+	// Required. The ID of the customer to apply the PaymentsAccount list operation to.
+	CustomerId           string   `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListPaymentsAccountsRequest) Reset()         { *m = ListPaymentsAccountsRequest{} }
+func (m *ListPaymentsAccountsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListPaymentsAccountsRequest) ProtoMessage()    {}
+func (*ListPaymentsAccountsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5c270c0495c602d6, []int{0}
+}
+
+func (m *ListPaymentsAccountsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Unmarshal(m, b)
+}
+func (m *ListPaymentsAccountsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListPaymentsAccountsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPaymentsAccountsRequest.Merge(m, src)
+}
+func (m *ListPaymentsAccountsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Size(m)
+}
+func (m *ListPaymentsAccountsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPaymentsAccountsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPaymentsAccountsRequest proto.InternalMessageInfo
+
+func (m *ListPaymentsAccountsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+// Response message for [PaymentsAccountService.ListPaymentsAccounts][google.ads.googleads.v3.services.PaymentsAccountService.ListPaymentsAccounts].
+type ListPaymentsAccountsResponse struct {
+	// The list of accessible payments accounts.
+	PaymentsAccounts     []*resources.PaymentsAccount `protobuf:"bytes,1,rep,name=payments_accounts,json=paymentsAccounts,proto3" json:"payments_accounts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *ListPaymentsAccountsResponse) Reset()         { *m = ListPaymentsAccountsResponse{} }
+func (m *ListPaymentsAccountsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListPaymentsAccountsResponse) ProtoMessage()    {}
+func (*ListPaymentsAccountsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5c270c0495c602d6, []int{1}
+}
+
+func (m *ListPaymentsAccountsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Unmarshal(m, b)
+}
+func (m *ListPaymentsAccountsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListPaymentsAccountsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPaymentsAccountsResponse.Merge(m, src)
+}
+func (m *ListPaymentsAccountsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Size(m)
+}
+func (m *ListPaymentsAccountsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPaymentsAccountsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPaymentsAccountsResponse proto.InternalMessageInfo
+
+func (m *ListPaymentsAccountsResponse) GetPaymentsAccounts() []*resources.PaymentsAccount {
+	if m != nil {
+		return m.PaymentsAccounts
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ListPaymentsAccountsRequest)(nil), "google.ads.googleads.v3.services.ListPaymentsAccountsRequest")
+	proto.RegisterType((*ListPaymentsAccountsResponse)(nil), "google.ads.googleads.v3.services.ListPaymentsAccountsResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/payments_account_service.proto", fileDescriptor_5c270c0495c602d6)
+}
+
+var fileDescriptor_5c270c0495c602d6 = []byte{
+	// 444 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0x26, 0x29, 0x08, 0xce, 0x5e, 0x34, 0x88, 0x96, 0x76, 0xc1, 0x52, 0x7a, 0x58, 0x3c, 0xcc,
+	0x48, 0x73, 0x91, 0x91, 0x55, 0xa6, 0x0a, 0xab, 0xe0, 0xa1, 0x54, 0xe8, 0x41, 0x0a, 0x61, 0x36,
+	0x33, 0xc6, 0x81, 0x76, 0x26, 0xe6, 0x4d, 0x0b, 0x22, 0x22, 0xec, 0x5f, 0xd8, 0x7f, 0xe0, 0xd1,
+	0x9f, 0xb2, 0x57, 0x6f, 0x7a, 0xf1, 0xe0, 0xc9, 0x5f, 0x21, 0xd9, 0xc9, 0x64, 0x43, 0x48, 0x5d,
+	0xd8, 0xdb, 0xc7, 0x7b, 0xdf, 0xfb, 0xbe, 0x37, 0x5f, 0x5e, 0xd0, 0xf3, 0xcc, 0x98, 0x6c, 0x2d,
+	0x09, 0x17, 0x40, 0x1c, 0x2c, 0xd1, 0x2e, 0x26, 0x20, 0x8b, 0x9d, 0x4a, 0x25, 0x90, 0x9c, 0x7f,
+	0xda, 0x48, 0x6d, 0x21, 0xe1, 0x69, 0x6a, 0xb6, 0xda, 0x26, 0x55, 0x07, 0xe7, 0x85, 0xb1, 0x26,
+	0x1a, 0xb9, 0x29, 0xcc, 0x05, 0xe0, 0x5a, 0x00, 0xef, 0x62, 0xec, 0x05, 0x06, 0x4f, 0xf6, 0x59,
+	0x14, 0x12, 0xcc, 0xb6, 0xe8, 0xf2, 0x70, 0xda, 0x83, 0x43, 0x3f, 0x99, 0x2b, 0xc2, 0xb5, 0x36,
+	0x96, 0x5b, 0x65, 0x34, 0x54, 0xdd, 0x07, 0x8d, 0x6e, 0xba, 0x56, 0xb2, 0x1e, 0x7b, 0xd8, 0x68,
+	0xbc, 0x57, 0x72, 0x2d, 0x92, 0x53, 0xf9, 0x81, 0xef, 0x94, 0x29, 0x1c, 0x61, 0xfc, 0x02, 0x0d,
+	0xdf, 0x28, 0xb0, 0xf3, 0xca, 0x95, 0x39, 0x53, 0x58, 0xc8, 0x8f, 0x5b, 0x09, 0x36, 0x9a, 0xa0,
+	0x83, 0x74, 0x0b, 0xd6, 0x6c, 0x64, 0x91, 0x28, 0xd1, 0x0f, 0x46, 0xc1, 0xd1, 0xed, 0x59, 0xef,
+	0x37, 0x0b, 0x17, 0xc8, 0xd7, 0x5f, 0x8b, 0xf1, 0x57, 0x74, 0xd8, 0x2d, 0x02, 0xb9, 0xd1, 0x20,
+	0xa3, 0x04, 0xdd, 0x6d, 0x3f, 0x0b, 0xfa, 0xc1, 0xa8, 0x77, 0x74, 0x30, 0x9d, 0xe2, 0x7d, 0xa1,
+	0xd5, 0x91, 0xe0, 0x96, 0xee, 0xe2, 0x4e, 0xde, 0x32, 0x9a, 0x9e, 0x87, 0xe8, 0x7e, 0x8b, 0xf5,
+	0xd6, 0x65, 0x1e, 0xfd, 0x0a, 0xd0, 0xbd, 0xae, 0xe5, 0xa2, 0x63, 0x7c, 0xdd, 0xe7, 0xc2, 0xff,
+	0x49, 0x66, 0xf0, 0xec, 0xa6, 0xe3, 0x2e, 0x93, 0xf1, 0xcb, 0x9f, 0xac, 0x19, 0xed, 0xd9, 0x8f,
+	0x3f, 0xe7, 0xe1, 0xe3, 0x08, 0x97, 0xc7, 0xe0, 0xcb, 0x40, 0x3e, 0x37, 0x18, 0xc7, 0x8f, 0xbe,
+	0x90, 0xf6, 0xc3, 0x07, 0xc3, 0x0b, 0xd6, 0xbf, 0x32, 0xaf, 0x50, 0xae, 0x00, 0xa7, 0x66, 0x33,
+	0x3b, 0x0b, 0xd1, 0x24, 0x35, 0x9b, 0x6b, 0x17, 0x9d, 0x0d, 0xbb, 0xb3, 0x9b, 0x97, 0x17, 0x32,
+	0x0f, 0xde, 0xbd, 0xaa, 0x04, 0x32, 0xb3, 0xe6, 0x3a, 0xc3, 0xa6, 0xc8, 0x48, 0x26, 0xf5, 0xe5,
+	0xfd, 0x90, 0x2b, 0xcb, 0xfd, 0xff, 0xcd, 0x53, 0x0f, 0xbe, 0x85, 0xbd, 0x13, 0xc6, 0xbe, 0x87,
+	0xa3, 0x13, 0x27, 0xc8, 0x04, 0x60, 0x07, 0x4b, 0xb4, 0x8c, 0x71, 0x65, 0x0c, 0x17, 0x9e, 0xb2,
+	0x62, 0x02, 0x56, 0x35, 0x65, 0xb5, 0x8c, 0x57, 0x9e, 0xf2, 0x37, 0x9c, 0xb8, 0x3a, 0xa5, 0x4c,
+	0x00, 0xa5, 0x35, 0x89, 0xd2, 0x65, 0x4c, 0xa9, 0xa7, 0x9d, 0xde, 0xba, 0xdc, 0x33, 0xfe, 0x17,
+	0x00, 0x00, 0xff, 0xff, 0x20, 0xf3, 0xe8, 0x7e, 0xde, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// PaymentsAccountServiceClient is the client API for PaymentsAccountService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type PaymentsAccountServiceClient interface {
+	// Returns all payments accounts associated with all managers
+	// between the login customer ID and specified serving customer in the
+	// hierarchy, inclusive.
+	ListPaymentsAccounts(ctx context.Context, in *ListPaymentsAccountsRequest, opts ...grpc.CallOption) (*ListPaymentsAccountsResponse, error)
+}
+
+type paymentsAccountServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewPaymentsAccountServiceClient(cc grpc.ClientConnInterface) PaymentsAccountServiceClient {
+	return &paymentsAccountServiceClient{cc}
+}
+
+func (c *paymentsAccountServiceClient) ListPaymentsAccounts(ctx context.Context, in *ListPaymentsAccountsRequest, opts ...grpc.CallOption) (*ListPaymentsAccountsResponse, error) {
+	out := new(ListPaymentsAccountsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.PaymentsAccountService/ListPaymentsAccounts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// PaymentsAccountServiceServer is the server API for PaymentsAccountService service.
+type PaymentsAccountServiceServer interface {
+	// Returns all payments accounts associated with all managers
+	// between the login customer ID and specified serving customer in the
+	// hierarchy, inclusive.
+	ListPaymentsAccounts(context.Context, *ListPaymentsAccountsRequest) (*ListPaymentsAccountsResponse, error)
+}
+
+// UnimplementedPaymentsAccountServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedPaymentsAccountServiceServer struct {
+}
+
+func (*UnimplementedPaymentsAccountServiceServer) ListPaymentsAccounts(ctx context.Context, req *ListPaymentsAccountsRequest) (*ListPaymentsAccountsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListPaymentsAccounts not implemented")
+}
+
+func RegisterPaymentsAccountServiceServer(s *grpc.Server, srv PaymentsAccountServiceServer) {
+	s.RegisterService(&_PaymentsAccountService_serviceDesc, srv)
+}
+
+func _PaymentsAccountService_ListPaymentsAccounts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListPaymentsAccountsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PaymentsAccountServiceServer).ListPaymentsAccounts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.PaymentsAccountService/ListPaymentsAccounts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PaymentsAccountServiceServer).ListPaymentsAccounts(ctx, req.(*ListPaymentsAccountsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _PaymentsAccountService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.PaymentsAccountService",
+	HandlerType: (*PaymentsAccountServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListPaymentsAccounts",
+			Handler:    _PaymentsAccountService_ListPaymentsAccounts_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/payments_account_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/product_bidding_category_constant_service.pb.go b/googleapis/ads/googleads/v3/services/product_bidding_category_constant_service.pb.go
new file mode 100644
index 0000000..f5f593f
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/product_bidding_category_constant_service.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/product_bidding_category_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [ProductBiddingCategoryService.GetProductBiddingCategory][].
+type GetProductBiddingCategoryConstantRequest struct {
+	// Required. Resource name of the Product Bidding Category to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetProductBiddingCategoryConstantRequest) Reset() {
+	*m = GetProductBiddingCategoryConstantRequest{}
+}
+func (m *GetProductBiddingCategoryConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetProductBiddingCategoryConstantRequest) ProtoMessage()    {}
+func (*GetProductBiddingCategoryConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8f0f8e22f494321d, []int{0}
+}
+
+func (m *GetProductBiddingCategoryConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetProductBiddingCategoryConstantRequest.Unmarshal(m, b)
+}
+func (m *GetProductBiddingCategoryConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetProductBiddingCategoryConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetProductBiddingCategoryConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetProductBiddingCategoryConstantRequest.Merge(m, src)
+}
+func (m *GetProductBiddingCategoryConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetProductBiddingCategoryConstantRequest.Size(m)
+}
+func (m *GetProductBiddingCategoryConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetProductBiddingCategoryConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetProductBiddingCategoryConstantRequest proto.InternalMessageInfo
+
+func (m *GetProductBiddingCategoryConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetProductBiddingCategoryConstantRequest)(nil), "google.ads.googleads.v3.services.GetProductBiddingCategoryConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/product_bidding_category_constant_service.proto", fileDescriptor_8f0f8e22f494321d)
+}
+
+var fileDescriptor_8f0f8e22f494321d = []byte{
+	// 426 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x4f, 0x8b, 0xd4, 0x30,
+	0x18, 0xc6, 0x99, 0x2c, 0x08, 0x16, 0xbd, 0xf4, 0xe2, 0x52, 0x05, 0xc7, 0x65, 0x85, 0x61, 0x0f,
+	0x09, 0x58, 0x44, 0x88, 0x78, 0x48, 0xf7, 0x30, 0x2a, 0x28, 0x65, 0x95, 0x39, 0x48, 0xa1, 0x64,
+	0x9a, 0x18, 0x03, 0x6d, 0x52, 0x93, 0x4c, 0x41, 0xc4, 0x83, 0x7e, 0x03, 0xf1, 0x1b, 0x78, 0xf4,
+	0x93, 0xc8, 0x5e, 0xbd, 0x79, 0xf2, 0xe0, 0xc9, 0x4f, 0x21, 0xdd, 0x34, 0xdd, 0x9d, 0xc3, 0xfc,
+	0xb9, 0x3d, 0xcc, 0xfb, 0xcc, 0xef, 0x7d, 0xfa, 0xbc, 0x6d, 0x94, 0x0b, 0xad, 0x45, 0xcd, 0x11,
+	0x65, 0x16, 0x79, 0xd9, 0xab, 0x2e, 0x45, 0x96, 0x9b, 0x4e, 0x56, 0xdc, 0xa2, 0xd6, 0x68, 0xb6,
+	0xaa, 0x5c, 0xb9, 0x94, 0x8c, 0x49, 0x25, 0xca, 0x8a, 0x3a, 0x2e, 0xb4, 0xf9, 0x50, 0x56, 0x5a,
+	0x59, 0x47, 0x95, 0x2b, 0x07, 0x2b, 0x6c, 0x8d, 0x76, 0x3a, 0x9e, 0x7a, 0x0c, 0xa4, 0xcc, 0xc2,
+	0x91, 0x08, 0xbb, 0x14, 0x06, 0x62, 0xf2, 0x6c, 0xd3, 0x4e, 0xc3, 0xad, 0x5e, 0x99, 0xbd, 0x96,
+	0xfa, 0x65, 0xc9, 0x9d, 0x80, 0x6a, 0x25, 0xa2, 0x4a, 0x69, 0x47, 0x9d, 0xd4, 0xca, 0x0e, 0xd3,
+	0x5b, 0x57, 0xa6, 0x55, 0x2d, 0xf9, 0xf8, 0xb7, 0xbb, 0x57, 0x06, 0x6f, 0x25, 0xaf, 0x59, 0xb9,
+	0xe4, 0xef, 0x68, 0x27, 0xb5, 0xf1, 0x86, 0xa3, 0xd7, 0xd1, 0x6c, 0xce, 0x5d, 0xee, 0x53, 0x64,
+	0x3e, 0xc4, 0xe9, 0x90, 0xe1, 0x74, 0x88, 0x70, 0xc6, 0xdf, 0xaf, 0xb8, 0x75, 0xf1, 0x2c, 0xba,
+	0x19, 0x82, 0x97, 0x8a, 0x36, 0xfc, 0x70, 0x32, 0x9d, 0xcc, 0xae, 0x67, 0x07, 0x7f, 0x08, 0x38,
+	0xbb, 0x11, 0x26, 0x2f, 0x69, 0xc3, 0x1f, 0xfc, 0x04, 0xd1, 0xfd, 0xed, 0xcc, 0x57, 0xbe, 0xa3,
+	0xf8, 0x33, 0x88, 0xee, 0xed, 0x0c, 0x10, 0x3f, 0x87, 0xbb, 0xba, 0x86, 0xfb, 0x3e, 0x45, 0x42,
+	0x36, 0xb2, 0xc6, 0xab, 0xc0, 0xed, 0xa4, 0xa3, 0x17, 0xbf, 0xc9, 0x7a, 0x13, 0x5f, 0x7e, 0xfd,
+	0xfd, 0x06, 0x1e, 0xc5, 0x0f, 0xfb, 0xdb, 0x7e, 0x5c, 0x9b, 0x3c, 0x69, 0xb7, 0xa2, 0x2c, 0x3a,
+	0xf9, 0x94, 0xdc, 0x3e, 0x27, 0x87, 0x97, 0x41, 0x06, 0xd5, 0x4a, 0x0b, 0x2b, 0xdd, 0x64, 0x5f,
+	0x41, 0x74, 0x5c, 0xe9, 0x66, 0x67, 0x01, 0xd9, 0xc9, 0x5e, 0x85, 0xe7, 0xfd, 0xd5, 0xf3, 0xc9,
+	0x9b, 0xa7, 0x03, 0x4f, 0xe8, 0x9a, 0x2a, 0x01, 0xb5, 0x11, 0x48, 0x70, 0x75, 0xf1, 0x4e, 0xa0,
+	0xcb, 0x04, 0x9b, 0xbf, 0x96, 0xc7, 0x41, 0x7c, 0x07, 0x07, 0x73, 0x42, 0x7e, 0x80, 0xe9, 0xdc,
+	0x03, 0x09, 0xb3, 0xd0, 0xcb, 0x5e, 0x2d, 0x52, 0x38, 0x2c, 0xb6, 0xe7, 0xc1, 0x52, 0x10, 0x66,
+	0x8b, 0xd1, 0x52, 0x2c, 0xd2, 0x22, 0x58, 0xfe, 0x81, 0x63, 0xff, 0x3b, 0xc6, 0x84, 0x59, 0x8c,
+	0x47, 0x13, 0xc6, 0x8b, 0x14, 0xe3, 0x60, 0x5b, 0x5e, 0xbb, 0xc8, 0x99, 0xfe, 0x0f, 0x00, 0x00,
+	0xff, 0xff, 0x56, 0x1a, 0x52, 0x8c, 0xd4, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ProductBiddingCategoryConstantServiceClient is the client API for ProductBiddingCategoryConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ProductBiddingCategoryConstantServiceClient interface {
+	// Returns the requested Product Bidding Category in full detail.
+	GetProductBiddingCategoryConstant(ctx context.Context, in *GetProductBiddingCategoryConstantRequest, opts ...grpc.CallOption) (*resources.ProductBiddingCategoryConstant, error)
+}
+
+type productBiddingCategoryConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewProductBiddingCategoryConstantServiceClient(cc grpc.ClientConnInterface) ProductBiddingCategoryConstantServiceClient {
+	return &productBiddingCategoryConstantServiceClient{cc}
+}
+
+func (c *productBiddingCategoryConstantServiceClient) GetProductBiddingCategoryConstant(ctx context.Context, in *GetProductBiddingCategoryConstantRequest, opts ...grpc.CallOption) (*resources.ProductBiddingCategoryConstant, error) {
+	out := new(resources.ProductBiddingCategoryConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ProductBiddingCategoryConstantService/GetProductBiddingCategoryConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ProductBiddingCategoryConstantServiceServer is the server API for ProductBiddingCategoryConstantService service.
+type ProductBiddingCategoryConstantServiceServer interface {
+	// Returns the requested Product Bidding Category in full detail.
+	GetProductBiddingCategoryConstant(context.Context, *GetProductBiddingCategoryConstantRequest) (*resources.ProductBiddingCategoryConstant, error)
+}
+
+// UnimplementedProductBiddingCategoryConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedProductBiddingCategoryConstantServiceServer struct {
+}
+
+func (*UnimplementedProductBiddingCategoryConstantServiceServer) GetProductBiddingCategoryConstant(ctx context.Context, req *GetProductBiddingCategoryConstantRequest) (*resources.ProductBiddingCategoryConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetProductBiddingCategoryConstant not implemented")
+}
+
+func RegisterProductBiddingCategoryConstantServiceServer(s *grpc.Server, srv ProductBiddingCategoryConstantServiceServer) {
+	s.RegisterService(&_ProductBiddingCategoryConstantService_serviceDesc, srv)
+}
+
+func _ProductBiddingCategoryConstantService_GetProductBiddingCategoryConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetProductBiddingCategoryConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProductBiddingCategoryConstantServiceServer).GetProductBiddingCategoryConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ProductBiddingCategoryConstantService/GetProductBiddingCategoryConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProductBiddingCategoryConstantServiceServer).GetProductBiddingCategoryConstant(ctx, req.(*GetProductBiddingCategoryConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ProductBiddingCategoryConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ProductBiddingCategoryConstantService",
+	HandlerType: (*ProductBiddingCategoryConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetProductBiddingCategoryConstant",
+			Handler:    _ProductBiddingCategoryConstantService_GetProductBiddingCategoryConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/product_bidding_category_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/product_group_view_service.pb.go b/googleapis/ads/googleads/v3/services/product_group_view_service.pb.go
new file mode 100644
index 0000000..c52625c
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/product_group_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/product_group_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ProductGroupViewService.GetProductGroupView][google.ads.googleads.v3.services.ProductGroupViewService.GetProductGroupView].
+type GetProductGroupViewRequest struct {
+	// Required. The resource name of the product group view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetProductGroupViewRequest) Reset()         { *m = GetProductGroupViewRequest{} }
+func (m *GetProductGroupViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetProductGroupViewRequest) ProtoMessage()    {}
+func (*GetProductGroupViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a629789fd6fc67c7, []int{0}
+}
+
+func (m *GetProductGroupViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetProductGroupViewRequest.Unmarshal(m, b)
+}
+func (m *GetProductGroupViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetProductGroupViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetProductGroupViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetProductGroupViewRequest.Merge(m, src)
+}
+func (m *GetProductGroupViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetProductGroupViewRequest.Size(m)
+}
+func (m *GetProductGroupViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetProductGroupViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetProductGroupViewRequest proto.InternalMessageInfo
+
+func (m *GetProductGroupViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetProductGroupViewRequest)(nil), "google.ads.googleads.v3.services.GetProductGroupViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/product_group_view_service.proto", fileDescriptor_a629789fd6fc67c7)
+}
+
+var fileDescriptor_a629789fd6fc67c7 = []byte{
+	// 417 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x1c, 0x25, 0x39, 0x10, 0x0c, 0xda, 0xc4, 0xe2, 0x8e, 0x78, 0xe0, 0x72, 0x5c, 0x71, 0x5c, 0x31,
+	0x03, 0x0e, 0x36, 0xa3, 0x16, 0xb3, 0x85, 0x11, 0x04, 0x59, 0x4e, 0x48, 0x21, 0x81, 0x30, 0x97,
+	0xfc, 0x8c, 0x03, 0x49, 0x26, 0xce, 0x4c, 0x72, 0x85, 0xd8, 0x68, 0x6f, 0xe3, 0x37, 0xb0, 0xf4,
+	0xa3, 0x5c, 0x2b, 0x36, 0x56, 0x16, 0x56, 0x7e, 0x0a, 0xc9, 0x4d, 0x26, 0xb7, 0xbb, 0x6c, 0xd8,
+	0xee, 0x31, 0xef, 0xfd, 0xde, 0xfb, 0xfd, 0x99, 0x80, 0x95, 0x52, 0x96, 0x15, 0x60, 0x5e, 0x68,
+	0x6c, 0xe1, 0x80, 0x7a, 0x82, 0x35, 0xa8, 0x5e, 0xe4, 0xa0, 0x71, 0xab, 0x64, 0xd1, 0xe5, 0x26,
+	0x2b, 0x95, 0xec, 0xda, 0xac, 0x17, 0x70, 0x95, 0x8d, 0x1c, 0x6a, 0x95, 0x34, 0x32, 0x5c, 0xd8,
+	0x3a, 0xc4, 0x0b, 0x8d, 0x26, 0x0b, 0xd4, 0x13, 0xe4, 0x2c, 0x22, 0x3a, 0x17, 0xa2, 0x40, 0xcb,
+	0x4e, 0xed, 0x4e, 0xb1, 0xee, 0xd1, 0xb1, 0xab, 0x6d, 0x05, 0xe6, 0x4d, 0x23, 0x0d, 0x37, 0x42,
+	0x36, 0x7a, 0x64, 0x0f, 0xd7, 0xd8, 0xbc, 0x12, 0xd0, 0x98, 0x91, 0x78, 0xb4, 0x46, 0xbc, 0x13,
+	0x50, 0x15, 0xd9, 0x25, 0xbc, 0xe7, 0xbd, 0x90, 0xca, 0x0a, 0x4e, 0x5e, 0x04, 0x51, 0x0c, 0x66,
+	0x65, 0x63, 0xe3, 0x21, 0x35, 0x11, 0x70, 0x75, 0x01, 0x1f, 0x3a, 0xd0, 0x26, 0x3c, 0x0b, 0xee,
+	0xbb, 0xde, 0xb2, 0x86, 0xd7, 0x70, 0xe4, 0x2d, 0xbc, 0xb3, 0xbb, 0xcb, 0x83, 0x3f, 0xcc, 0xbf,
+	0xb8, 0xe7, 0x98, 0xd7, 0xbc, 0x86, 0xc7, 0x5f, 0xfd, 0xe0, 0x70, 0xdb, 0xe5, 0x8d, 0x1d, 0x3c,
+	0xfc, 0xe5, 0x05, 0x0f, 0x76, 0x84, 0x84, 0xcf, 0xd0, 0xbe, 0x95, 0xa1, 0xf9, 0xde, 0x22, 0x32,
+	0x5b, 0x3d, 0xad, 0x13, 0x6d, 0xd7, 0x9e, 0xbc, 0xfa, 0xcd, 0x36, 0x27, 0xfa, 0xfc, 0xf3, 0xef,
+	0x37, 0xff, 0x49, 0x48, 0x86, 0x33, 0x7c, 0xdc, 0x60, 0x9e, 0xe7, 0x9d, 0x36, 0xb2, 0x06, 0xa5,
+	0xf1, 0xb9, 0xbb, 0xcb, 0x64, 0xa4, 0xf1, 0xf9, 0xa7, 0xe8, 0xe1, 0x35, 0x3b, 0xba, 0x0d, 0x1e,
+	0x51, 0x2b, 0x34, 0xca, 0x65, 0xbd, 0xfc, 0xe2, 0x07, 0xa7, 0xb9, 0xac, 0xf7, 0x8e, 0xb8, 0x3c,
+	0x9e, 0x59, 0xdb, 0x6a, 0xb8, 0xcf, 0xca, 0x7b, 0xfb, 0x72, 0x74, 0x28, 0x65, 0xc5, 0x9b, 0x12,
+	0x49, 0x55, 0xe2, 0x12, 0x9a, 0x9b, 0xeb, 0xe1, 0xdb, 0xcc, 0xf9, 0x9f, 0xfb, 0xd4, 0x81, 0xef,
+	0xfe, 0x41, 0xcc, 0xd8, 0x0f, 0x7f, 0x11, 0x5b, 0x43, 0x56, 0x68, 0x64, 0xe1, 0x80, 0x12, 0x82,
+	0xc6, 0x60, 0x7d, 0xed, 0x24, 0x29, 0x2b, 0x74, 0x3a, 0x49, 0xd2, 0x84, 0xa4, 0x4e, 0xf2, 0xcf,
+	0x3f, 0xb5, 0xef, 0x94, 0xb2, 0x42, 0x53, 0x3a, 0x89, 0x28, 0x4d, 0x08, 0xa5, 0x4e, 0x76, 0x79,
+	0xe7, 0xa6, 0x4f, 0xf2, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x26, 0x5d, 0xa0, 0x60, 0x03, 0x00,
+	0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ProductGroupViewServiceClient is the client API for ProductGroupViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ProductGroupViewServiceClient interface {
+	// Returns the requested product group view in full detail.
+	GetProductGroupView(ctx context.Context, in *GetProductGroupViewRequest, opts ...grpc.CallOption) (*resources.ProductGroupView, error)
+}
+
+type productGroupViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewProductGroupViewServiceClient(cc grpc.ClientConnInterface) ProductGroupViewServiceClient {
+	return &productGroupViewServiceClient{cc}
+}
+
+func (c *productGroupViewServiceClient) GetProductGroupView(ctx context.Context, in *GetProductGroupViewRequest, opts ...grpc.CallOption) (*resources.ProductGroupView, error) {
+	out := new(resources.ProductGroupView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ProductGroupViewService/GetProductGroupView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ProductGroupViewServiceServer is the server API for ProductGroupViewService service.
+type ProductGroupViewServiceServer interface {
+	// Returns the requested product group view in full detail.
+	GetProductGroupView(context.Context, *GetProductGroupViewRequest) (*resources.ProductGroupView, error)
+}
+
+// UnimplementedProductGroupViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedProductGroupViewServiceServer struct {
+}
+
+func (*UnimplementedProductGroupViewServiceServer) GetProductGroupView(ctx context.Context, req *GetProductGroupViewRequest) (*resources.ProductGroupView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetProductGroupView not implemented")
+}
+
+func RegisterProductGroupViewServiceServer(s *grpc.Server, srv ProductGroupViewServiceServer) {
+	s.RegisterService(&_ProductGroupViewService_serviceDesc, srv)
+}
+
+func _ProductGroupViewService_GetProductGroupView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetProductGroupViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProductGroupViewServiceServer).GetProductGroupView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ProductGroupViewService/GetProductGroupView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProductGroupViewServiceServer).GetProductGroupView(ctx, req.(*GetProductGroupViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ProductGroupViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ProductGroupViewService",
+	HandlerType: (*ProductGroupViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetProductGroupView",
+			Handler:    _ProductGroupViewService_GetProductGroupView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/product_group_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/reach_plan_service.pb.go b/googleapis/ads/googleads/v3/services/reach_plan_service.pb.go
new file mode 100644
index 0000000..7fcdb27
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/reach_plan_service.pb.go
@@ -0,0 +1,1544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/reach_plan_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [ReachForecastService.ListPlannableLocations][]
+type ListPlannableLocationsRequest struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListPlannableLocationsRequest) Reset()         { *m = ListPlannableLocationsRequest{} }
+func (m *ListPlannableLocationsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListPlannableLocationsRequest) ProtoMessage()    {}
+func (*ListPlannableLocationsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{0}
+}
+
+func (m *ListPlannableLocationsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPlannableLocationsRequest.Unmarshal(m, b)
+}
+func (m *ListPlannableLocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPlannableLocationsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListPlannableLocationsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPlannableLocationsRequest.Merge(m, src)
+}
+func (m *ListPlannableLocationsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListPlannableLocationsRequest.Size(m)
+}
+func (m *ListPlannableLocationsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPlannableLocationsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPlannableLocationsRequest proto.InternalMessageInfo
+
+// The list of plannable locations.
+type ListPlannableLocationsResponse struct {
+	// The list of locations available for planning (Countries, DMAs,
+	// sub-countries).
+	// For locations like Countries, DMAs see
+	// https://developers.google.com/adwords/api/docs/appendix/geotargeting for
+	// more information.
+	PlannableLocations   []*PlannableLocation `protobuf:"bytes,1,rep,name=plannable_locations,json=plannableLocations,proto3" json:"plannable_locations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ListPlannableLocationsResponse) Reset()         { *m = ListPlannableLocationsResponse{} }
+func (m *ListPlannableLocationsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListPlannableLocationsResponse) ProtoMessage()    {}
+func (*ListPlannableLocationsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{1}
+}
+
+func (m *ListPlannableLocationsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPlannableLocationsResponse.Unmarshal(m, b)
+}
+func (m *ListPlannableLocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPlannableLocationsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListPlannableLocationsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPlannableLocationsResponse.Merge(m, src)
+}
+func (m *ListPlannableLocationsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListPlannableLocationsResponse.Size(m)
+}
+func (m *ListPlannableLocationsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPlannableLocationsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPlannableLocationsResponse proto.InternalMessageInfo
+
+func (m *ListPlannableLocationsResponse) GetPlannableLocations() []*PlannableLocation {
+	if m != nil {
+		return m.PlannableLocations
+	}
+	return nil
+}
+
+// A plannable location: a country, a DMA, a metro region, a tv region,
+// a province.
+type PlannableLocation struct {
+	// The location identifier.
+	Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The unique location name in english.
+	Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// The parent country code, not present if location is a country.
+	// If present will always be a criterion id: additional information, such as
+	// country name are returned both via ListPlannableLocations or directly by
+	// accessing GeoTargetConstantService with the criterion id.
+	ParentCountryId      *wrappers.Int64Value `protobuf:"bytes,3,opt,name=parent_country_id,json=parentCountryId,proto3" json:"parent_country_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *PlannableLocation) Reset()         { *m = PlannableLocation{} }
+func (m *PlannableLocation) String() string { return proto.CompactTextString(m) }
+func (*PlannableLocation) ProtoMessage()    {}
+func (*PlannableLocation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{2}
+}
+
+func (m *PlannableLocation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlannableLocation.Unmarshal(m, b)
+}
+func (m *PlannableLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlannableLocation.Marshal(b, m, deterministic)
+}
+func (m *PlannableLocation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlannableLocation.Merge(m, src)
+}
+func (m *PlannableLocation) XXX_Size() int {
+	return xxx_messageInfo_PlannableLocation.Size(m)
+}
+func (m *PlannableLocation) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlannableLocation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlannableLocation proto.InternalMessageInfo
+
+func (m *PlannableLocation) GetId() *wrappers.StringValue {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *PlannableLocation) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *PlannableLocation) GetParentCountryId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ParentCountryId
+	}
+	return nil
+}
+
+// Request to list available products in a given location.
+type ListPlannableProductsRequest struct {
+	// Required. The ID of the selected location for planning. To list the available
+	// plannable location ids use ListPlannableLocations.
+	PlannableLocationId  *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ListPlannableProductsRequest) Reset()         { *m = ListPlannableProductsRequest{} }
+func (m *ListPlannableProductsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListPlannableProductsRequest) ProtoMessage()    {}
+func (*ListPlannableProductsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{3}
+}
+
+func (m *ListPlannableProductsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPlannableProductsRequest.Unmarshal(m, b)
+}
+func (m *ListPlannableProductsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPlannableProductsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListPlannableProductsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPlannableProductsRequest.Merge(m, src)
+}
+func (m *ListPlannableProductsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListPlannableProductsRequest.Size(m)
+}
+func (m *ListPlannableProductsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPlannableProductsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPlannableProductsRequest proto.InternalMessageInfo
+
+func (m *ListPlannableProductsRequest) GetPlannableLocationId() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableLocationId
+	}
+	return nil
+}
+
+// A response with all available products.
+type ListPlannableProductsResponse struct {
+	// The list of products available for planning and related targeting metadata.
+	ProductMetadata      []*ProductMetadata `protobuf:"bytes,1,rep,name=product_metadata,json=productMetadata,proto3" json:"product_metadata,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *ListPlannableProductsResponse) Reset()         { *m = ListPlannableProductsResponse{} }
+func (m *ListPlannableProductsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListPlannableProductsResponse) ProtoMessage()    {}
+func (*ListPlannableProductsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{4}
+}
+
+func (m *ListPlannableProductsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPlannableProductsResponse.Unmarshal(m, b)
+}
+func (m *ListPlannableProductsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPlannableProductsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListPlannableProductsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPlannableProductsResponse.Merge(m, src)
+}
+func (m *ListPlannableProductsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListPlannableProductsResponse.Size(m)
+}
+func (m *ListPlannableProductsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPlannableProductsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPlannableProductsResponse proto.InternalMessageInfo
+
+func (m *ListPlannableProductsResponse) GetProductMetadata() []*ProductMetadata {
+	if m != nil {
+		return m.ProductMetadata
+	}
+	return nil
+}
+
+// The metadata associated with an available plannable product.
+type ProductMetadata struct {
+	// The code associated with the ad product. E.g. Trueview, Bumper
+	// To list the available plannable product codes use ListPlannableProducts.
+	PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
+	// The allowed plannable targeting for this product.
+	PlannableTargeting   *PlannableTargeting `protobuf:"bytes,2,opt,name=plannable_targeting,json=plannableTargeting,proto3" json:"plannable_targeting,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ProductMetadata) Reset()         { *m = ProductMetadata{} }
+func (m *ProductMetadata) String() string { return proto.CompactTextString(m) }
+func (*ProductMetadata) ProtoMessage()    {}
+func (*ProductMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{5}
+}
+
+func (m *ProductMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductMetadata.Unmarshal(m, b)
+}
+func (m *ProductMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductMetadata.Marshal(b, m, deterministic)
+}
+func (m *ProductMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductMetadata.Merge(m, src)
+}
+func (m *ProductMetadata) XXX_Size() int {
+	return xxx_messageInfo_ProductMetadata.Size(m)
+}
+func (m *ProductMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductMetadata proto.InternalMessageInfo
+
+func (m *ProductMetadata) GetPlannableProductCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableProductCode
+	}
+	return nil
+}
+
+func (m *ProductMetadata) GetPlannableTargeting() *PlannableTargeting {
+	if m != nil {
+		return m.PlannableTargeting
+	}
+	return nil
+}
+
+// The targeting for which traffic metrics will be reported.
+type PlannableTargeting struct {
+	// Allowed plannable age ranges for the product for which metrics will be
+	// reported. Actual targeting is computed by mapping this age range onto
+	// standard Google common.AgeRangeInfo values.
+	AgeRanges []enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange `protobuf:"varint,1,rep,packed,name=age_ranges,json=ageRanges,proto3,enum=google.ads.googleads.v3.enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange" json:"age_ranges,omitempty"`
+	// Targetable genders for the ad product.
+	Genders []*common.GenderInfo `protobuf:"bytes,2,rep,name=genders,proto3" json:"genders,omitempty"`
+	// Targetable devices for the ad product.
+	Devices []*common.DeviceInfo `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices,omitempty"`
+	// Targetable networks for the ad product.
+	Networks             []enums.ReachPlanNetworkEnum_ReachPlanNetwork `protobuf:"varint,4,rep,packed,name=networks,proto3,enum=google.ads.googleads.v3.enums.ReachPlanNetworkEnum_ReachPlanNetwork" json:"networks,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *PlannableTargeting) Reset()         { *m = PlannableTargeting{} }
+func (m *PlannableTargeting) String() string { return proto.CompactTextString(m) }
+func (*PlannableTargeting) ProtoMessage()    {}
+func (*PlannableTargeting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{6}
+}
+
+func (m *PlannableTargeting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlannableTargeting.Unmarshal(m, b)
+}
+func (m *PlannableTargeting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlannableTargeting.Marshal(b, m, deterministic)
+}
+func (m *PlannableTargeting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlannableTargeting.Merge(m, src)
+}
+func (m *PlannableTargeting) XXX_Size() int {
+	return xxx_messageInfo_PlannableTargeting.Size(m)
+}
+func (m *PlannableTargeting) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlannableTargeting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlannableTargeting proto.InternalMessageInfo
+
+func (m *PlannableTargeting) GetAgeRanges() []enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange {
+	if m != nil {
+		return m.AgeRanges
+	}
+	return nil
+}
+
+func (m *PlannableTargeting) GetGenders() []*common.GenderInfo {
+	if m != nil {
+		return m.Genders
+	}
+	return nil
+}
+
+func (m *PlannableTargeting) GetDevices() []*common.DeviceInfo {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+func (m *PlannableTargeting) GetNetworks() []enums.ReachPlanNetworkEnum_ReachPlanNetwork {
+	if m != nil {
+		return m.Networks
+	}
+	return nil
+}
+
+// Request message for [ReachForecastService.GenerateProductMixIdeas][].
+type GenerateProductMixIdeasRequest struct {
+	// Required. The ID of the customer.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The ID of the location, this is one of the ids returned by
+	// ListPlannableLocations.
+	PlannableLocationId *wrappers.StringValue `protobuf:"bytes,2,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
+	// Required. Currency code.
+	// Three-character ISO 4217 currency code.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// Required. Total budget.
+	// Amount in micros. One million is equivalent to one unit.
+	BudgetMicros *wrappers.Int64Value `protobuf:"bytes,4,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
+	// The preferences of the suggested product mix.
+	// An unset preference is interpreted as all possible values are allowed,
+	// unless explicitly specified.
+	Preferences          *Preferences `protobuf:"bytes,5,opt,name=preferences,proto3" json:"preferences,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *GenerateProductMixIdeasRequest) Reset()         { *m = GenerateProductMixIdeasRequest{} }
+func (m *GenerateProductMixIdeasRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateProductMixIdeasRequest) ProtoMessage()    {}
+func (*GenerateProductMixIdeasRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{7}
+}
+
+func (m *GenerateProductMixIdeasRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateProductMixIdeasRequest.Unmarshal(m, b)
+}
+func (m *GenerateProductMixIdeasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateProductMixIdeasRequest.Marshal(b, m, deterministic)
+}
+func (m *GenerateProductMixIdeasRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateProductMixIdeasRequest.Merge(m, src)
+}
+func (m *GenerateProductMixIdeasRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateProductMixIdeasRequest.Size(m)
+}
+func (m *GenerateProductMixIdeasRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateProductMixIdeasRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateProductMixIdeasRequest proto.InternalMessageInfo
+
+func (m *GenerateProductMixIdeasRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *GenerateProductMixIdeasRequest) GetPlannableLocationId() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableLocationId
+	}
+	return nil
+}
+
+func (m *GenerateProductMixIdeasRequest) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *GenerateProductMixIdeasRequest) GetBudgetMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetMicros
+	}
+	return nil
+}
+
+func (m *GenerateProductMixIdeasRequest) GetPreferences() *Preferences {
+	if m != nil {
+		return m.Preferences
+	}
+	return nil
+}
+
+// Set of preferences about the planned mix.
+type Preferences struct {
+	// True if ad skippable.
+	// If not set, default is any value.
+	IsSkippable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=is_skippable,json=isSkippable,proto3" json:"is_skippable,omitempty"`
+	// True if ad start with sound.
+	// If not set, default is any value.
+	StartsWithSound *wrappers.BoolValue `protobuf:"bytes,2,opt,name=starts_with_sound,json=startsWithSound,proto3" json:"starts_with_sound,omitempty"`
+	// The length of the ad.
+	// If not set, default is any value.
+	AdLength enums.ReachPlanAdLengthEnum_ReachPlanAdLength `protobuf:"varint,3,opt,name=ad_length,json=adLength,proto3,enum=google.ads.googleads.v3.enums.ReachPlanAdLengthEnum_ReachPlanAdLength" json:"ad_length,omitempty"`
+	// True if ad will only show on the top content.
+	// If not set, default is false.
+	TopContentOnly *wrappers.BoolValue `protobuf:"bytes,4,opt,name=top_content_only,json=topContentOnly,proto3" json:"top_content_only,omitempty"`
+	// True if the price guaranteed. The cost of serving the ad is agreed upfront
+	// and not subject to an auction.
+	// If not set, default is any value.
+	HasGuaranteedPrice   *wrappers.BoolValue `protobuf:"bytes,5,opt,name=has_guaranteed_price,json=hasGuaranteedPrice,proto3" json:"has_guaranteed_price,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *Preferences) Reset()         { *m = Preferences{} }
+func (m *Preferences) String() string { return proto.CompactTextString(m) }
+func (*Preferences) ProtoMessage()    {}
+func (*Preferences) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{8}
+}
+
+func (m *Preferences) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Preferences.Unmarshal(m, b)
+}
+func (m *Preferences) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Preferences.Marshal(b, m, deterministic)
+}
+func (m *Preferences) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Preferences.Merge(m, src)
+}
+func (m *Preferences) XXX_Size() int {
+	return xxx_messageInfo_Preferences.Size(m)
+}
+func (m *Preferences) XXX_DiscardUnknown() {
+	xxx_messageInfo_Preferences.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Preferences proto.InternalMessageInfo
+
+func (m *Preferences) GetIsSkippable() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsSkippable
+	}
+	return nil
+}
+
+func (m *Preferences) GetStartsWithSound() *wrappers.BoolValue {
+	if m != nil {
+		return m.StartsWithSound
+	}
+	return nil
+}
+
+func (m *Preferences) GetAdLength() enums.ReachPlanAdLengthEnum_ReachPlanAdLength {
+	if m != nil {
+		return m.AdLength
+	}
+	return enums.ReachPlanAdLengthEnum_UNSPECIFIED
+}
+
+func (m *Preferences) GetTopContentOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.TopContentOnly
+	}
+	return nil
+}
+
+func (m *Preferences) GetHasGuaranteedPrice() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasGuaranteedPrice
+	}
+	return nil
+}
+
+// The suggested product mix.
+type GenerateProductMixIdeasResponse struct {
+	// A list of products (ad formats) and the associated budget allocation idea.
+	ProductAllocation    []*ProductAllocation `protobuf:"bytes,1,rep,name=product_allocation,json=productAllocation,proto3" json:"product_allocation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *GenerateProductMixIdeasResponse) Reset()         { *m = GenerateProductMixIdeasResponse{} }
+func (m *GenerateProductMixIdeasResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateProductMixIdeasResponse) ProtoMessage()    {}
+func (*GenerateProductMixIdeasResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{9}
+}
+
+func (m *GenerateProductMixIdeasResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateProductMixIdeasResponse.Unmarshal(m, b)
+}
+func (m *GenerateProductMixIdeasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateProductMixIdeasResponse.Marshal(b, m, deterministic)
+}
+func (m *GenerateProductMixIdeasResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateProductMixIdeasResponse.Merge(m, src)
+}
+func (m *GenerateProductMixIdeasResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateProductMixIdeasResponse.Size(m)
+}
+func (m *GenerateProductMixIdeasResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateProductMixIdeasResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateProductMixIdeasResponse proto.InternalMessageInfo
+
+func (m *GenerateProductMixIdeasResponse) GetProductAllocation() []*ProductAllocation {
+	if m != nil {
+		return m.ProductAllocation
+	}
+	return nil
+}
+
+// An allocation of a part of the budget on a given product.
+type ProductAllocation struct {
+	// Selected product for planning. The product codes returned are within the
+	// set of the ones returned by ListPlannableProducts when using the same
+	// location id.
+	PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
+	// The value to be allocated for the suggested product in requested currency.
+	// Amount in micros. One million is equivalent to one unit.
+	BudgetMicros         *wrappers.Int64Value `protobuf:"bytes,2,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ProductAllocation) Reset()         { *m = ProductAllocation{} }
+func (m *ProductAllocation) String() string { return proto.CompactTextString(m) }
+func (*ProductAllocation) ProtoMessage()    {}
+func (*ProductAllocation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{10}
+}
+
+func (m *ProductAllocation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductAllocation.Unmarshal(m, b)
+}
+func (m *ProductAllocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductAllocation.Marshal(b, m, deterministic)
+}
+func (m *ProductAllocation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductAllocation.Merge(m, src)
+}
+func (m *ProductAllocation) XXX_Size() int {
+	return xxx_messageInfo_ProductAllocation.Size(m)
+}
+func (m *ProductAllocation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductAllocation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductAllocation proto.InternalMessageInfo
+
+func (m *ProductAllocation) GetPlannableProductCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableProductCode
+	}
+	return nil
+}
+
+func (m *ProductAllocation) GetBudgetMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetMicros
+	}
+	return nil
+}
+
+// Request message for [ReachPlanService.GenerateReachForecast][google.ads.googleads.v3.services.ReachPlanService.GenerateReachForecast].
+type GenerateReachForecastRequest struct {
+	// Required. The ID of the customer.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The currency code.
+	// Three-character ISO 4217 currency code.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// Required. Campaign duration.
+	CampaignDuration *CampaignDuration `protobuf:"bytes,3,opt,name=campaign_duration,json=campaignDuration,proto3" json:"campaign_duration,omitempty"`
+	// Desired cookie frequency cap that will be applied to each planned product.
+	// This is equivalent to the frequency cap exposed in Google Ads when creating
+	// a campaign, it represents the maximum number of times an ad can be shown to
+	// the same user.
+	// If not specified no cap is applied.
+	CookieFrequencyCap *wrappers.Int32Value `protobuf:"bytes,4,opt,name=cookie_frequency_cap,json=cookieFrequencyCap,proto3" json:"cookie_frequency_cap,omitempty"`
+	// Desired minimum effective frequency (the number of times a person was
+	// exposed to the ad) for the reported reach metrics [1-10].
+	// This won't affect the targeting, but just the reporting.
+	// If not specified, a default of 1 is applied.
+	MinEffectiveFrequency *wrappers.Int32Value `protobuf:"bytes,5,opt,name=min_effective_frequency,json=minEffectiveFrequency,proto3" json:"min_effective_frequency,omitempty"`
+	// The targeting to be applied to all products selected in the product mix.
+	//
+	// This is planned targeting: execution details might vary based on the
+	// advertising product, please consult an implementation specialist.
+	//
+	// If no targeting dimensions are specified, then campaigns will target
+	// everywhere and everyone.
+	//
+	// See specific metrics for details on how targeting affects them.
+	//
+	// In some cases, targeting may be overridden using the
+	// PlannedProduct.advanced_product_targeting field.
+	Targeting *Targeting `protobuf:"bytes,6,opt,name=targeting,proto3" json:"targeting,omitempty"`
+	// Required. The product to be planned.
+	PlannedProducts      []*PlannedProduct `protobuf:"bytes,7,rep,name=planned_products,json=plannedProducts,proto3" json:"planned_products,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *GenerateReachForecastRequest) Reset()         { *m = GenerateReachForecastRequest{} }
+func (m *GenerateReachForecastRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateReachForecastRequest) ProtoMessage()    {}
+func (*GenerateReachForecastRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{11}
+}
+
+func (m *GenerateReachForecastRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateReachForecastRequest.Unmarshal(m, b)
+}
+func (m *GenerateReachForecastRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateReachForecastRequest.Marshal(b, m, deterministic)
+}
+func (m *GenerateReachForecastRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateReachForecastRequest.Merge(m, src)
+}
+func (m *GenerateReachForecastRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateReachForecastRequest.Size(m)
+}
+func (m *GenerateReachForecastRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateReachForecastRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateReachForecastRequest proto.InternalMessageInfo
+
+func (m *GenerateReachForecastRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *GenerateReachForecastRequest) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastRequest) GetCampaignDuration() *CampaignDuration {
+	if m != nil {
+		return m.CampaignDuration
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastRequest) GetCookieFrequencyCap() *wrappers.Int32Value {
+	if m != nil {
+		return m.CookieFrequencyCap
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastRequest) GetMinEffectiveFrequency() *wrappers.Int32Value {
+	if m != nil {
+		return m.MinEffectiveFrequency
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastRequest) GetTargeting() *Targeting {
+	if m != nil {
+		return m.Targeting
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastRequest) GetPlannedProducts() []*PlannedProduct {
+	if m != nil {
+		return m.PlannedProducts
+	}
+	return nil
+}
+
+// The targeting for which traffic metrics will be reported.
+type Targeting struct {
+	// Required. The ID of the selected location.
+	// Plannable locations ID can be obtained from ListPlannableLocations.
+	PlannableLocationId *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
+	// Required
+	// Selected age range to be planned on.
+	AgeRange enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange `protobuf:"varint,2,opt,name=age_range,json=ageRange,proto3,enum=google.ads.googleads.v3.enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange" json:"age_range,omitempty"`
+	// Targetable genders for the ad product.
+	Genders []*common.GenderInfo `protobuf:"bytes,3,rep,name=genders,proto3" json:"genders,omitempty"`
+	// Targetable devices for the ad product.
+	Devices []*common.DeviceInfo `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"`
+	// Targetable network for the ad product.
+	Network              enums.ReachPlanNetworkEnum_ReachPlanNetwork `protobuf:"varint,5,opt,name=network,proto3,enum=google.ads.googleads.v3.enums.ReachPlanNetworkEnum_ReachPlanNetwork" json:"network,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *Targeting) Reset()         { *m = Targeting{} }
+func (m *Targeting) String() string { return proto.CompactTextString(m) }
+func (*Targeting) ProtoMessage()    {}
+func (*Targeting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{12}
+}
+
+func (m *Targeting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Targeting.Unmarshal(m, b)
+}
+func (m *Targeting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Targeting.Marshal(b, m, deterministic)
+}
+func (m *Targeting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Targeting.Merge(m, src)
+}
+func (m *Targeting) XXX_Size() int {
+	return xxx_messageInfo_Targeting.Size(m)
+}
+func (m *Targeting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Targeting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Targeting proto.InternalMessageInfo
+
+func (m *Targeting) GetPlannableLocationId() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableLocationId
+	}
+	return nil
+}
+
+func (m *Targeting) GetAgeRange() enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange {
+	if m != nil {
+		return m.AgeRange
+	}
+	return enums.ReachPlanAgeRangeEnum_UNSPECIFIED
+}
+
+func (m *Targeting) GetGenders() []*common.GenderInfo {
+	if m != nil {
+		return m.Genders
+	}
+	return nil
+}
+
+func (m *Targeting) GetDevices() []*common.DeviceInfo {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+func (m *Targeting) GetNetwork() enums.ReachPlanNetworkEnum_ReachPlanNetwork {
+	if m != nil {
+		return m.Network
+	}
+	return enums.ReachPlanNetworkEnum_UNSPECIFIED
+}
+
+// The duration of a planned campaign.
+type CampaignDuration struct {
+	// The duration value in days.
+	DurationInDays       *wrappers.Int32Value `protobuf:"bytes,1,opt,name=duration_in_days,json=durationInDays,proto3" json:"duration_in_days,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CampaignDuration) Reset()         { *m = CampaignDuration{} }
+func (m *CampaignDuration) String() string { return proto.CompactTextString(m) }
+func (*CampaignDuration) ProtoMessage()    {}
+func (*CampaignDuration) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{13}
+}
+
+func (m *CampaignDuration) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignDuration.Unmarshal(m, b)
+}
+func (m *CampaignDuration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignDuration.Marshal(b, m, deterministic)
+}
+func (m *CampaignDuration) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignDuration.Merge(m, src)
+}
+func (m *CampaignDuration) XXX_Size() int {
+	return xxx_messageInfo_CampaignDuration.Size(m)
+}
+func (m *CampaignDuration) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignDuration.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignDuration proto.InternalMessageInfo
+
+func (m *CampaignDuration) GetDurationInDays() *wrappers.Int32Value {
+	if m != nil {
+		return m.DurationInDays
+	}
+	return nil
+}
+
+// A product being planned for reach.
+type PlannedProduct struct {
+	// Required. Selected product for planning.
+	// Plannable products codes can be obtained from ListPlannableProducts.
+	PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
+	// Required. Maximum budget allocation in micros for the selected product.
+	// The value is specified in the selected planning currency_code.
+	// E.g. 1 000 000$ = 1 000 000 000 000 micros.
+	BudgetMicros         *wrappers.Int64Value `protobuf:"bytes,2,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *PlannedProduct) Reset()         { *m = PlannedProduct{} }
+func (m *PlannedProduct) String() string { return proto.CompactTextString(m) }
+func (*PlannedProduct) ProtoMessage()    {}
+func (*PlannedProduct) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{14}
+}
+
+func (m *PlannedProduct) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlannedProduct.Unmarshal(m, b)
+}
+func (m *PlannedProduct) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlannedProduct.Marshal(b, m, deterministic)
+}
+func (m *PlannedProduct) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlannedProduct.Merge(m, src)
+}
+func (m *PlannedProduct) XXX_Size() int {
+	return xxx_messageInfo_PlannedProduct.Size(m)
+}
+func (m *PlannedProduct) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlannedProduct.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlannedProduct proto.InternalMessageInfo
+
+func (m *PlannedProduct) GetPlannableProductCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PlannableProductCode
+	}
+	return nil
+}
+
+func (m *PlannedProduct) GetBudgetMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetMicros
+	}
+	return nil
+}
+
+// Response message containing the generated reach curve.
+type GenerateReachForecastResponse struct {
+	// Reference on target audiences for this curve.
+	OnTargetAudienceMetrics *OnTargetAudienceMetrics `protobuf:"bytes,1,opt,name=on_target_audience_metrics,json=onTargetAudienceMetrics,proto3" json:"on_target_audience_metrics,omitempty"`
+	// The generated reach curve for the planned product mix.
+	ReachCurve           *ReachCurve `protobuf:"bytes,2,opt,name=reach_curve,json=reachCurve,proto3" json:"reach_curve,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *GenerateReachForecastResponse) Reset()         { *m = GenerateReachForecastResponse{} }
+func (m *GenerateReachForecastResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateReachForecastResponse) ProtoMessage()    {}
+func (*GenerateReachForecastResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{15}
+}
+
+func (m *GenerateReachForecastResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateReachForecastResponse.Unmarshal(m, b)
+}
+func (m *GenerateReachForecastResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateReachForecastResponse.Marshal(b, m, deterministic)
+}
+func (m *GenerateReachForecastResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateReachForecastResponse.Merge(m, src)
+}
+func (m *GenerateReachForecastResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateReachForecastResponse.Size(m)
+}
+func (m *GenerateReachForecastResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateReachForecastResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateReachForecastResponse proto.InternalMessageInfo
+
+func (m *GenerateReachForecastResponse) GetOnTargetAudienceMetrics() *OnTargetAudienceMetrics {
+	if m != nil {
+		return m.OnTargetAudienceMetrics
+	}
+	return nil
+}
+
+func (m *GenerateReachForecastResponse) GetReachCurve() *ReachCurve {
+	if m != nil {
+		return m.ReachCurve
+	}
+	return nil
+}
+
+// The reach curve for the planned products.
+type ReachCurve struct {
+	// All points on the reach curve.
+	ReachForecasts       []*ReachForecast `protobuf:"bytes,1,rep,name=reach_forecasts,json=reachForecasts,proto3" json:"reach_forecasts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *ReachCurve) Reset()         { *m = ReachCurve{} }
+func (m *ReachCurve) String() string { return proto.CompactTextString(m) }
+func (*ReachCurve) ProtoMessage()    {}
+func (*ReachCurve) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{16}
+}
+
+func (m *ReachCurve) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachCurve.Unmarshal(m, b)
+}
+func (m *ReachCurve) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachCurve.Marshal(b, m, deterministic)
+}
+func (m *ReachCurve) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachCurve.Merge(m, src)
+}
+func (m *ReachCurve) XXX_Size() int {
+	return xxx_messageInfo_ReachCurve.Size(m)
+}
+func (m *ReachCurve) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachCurve.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachCurve proto.InternalMessageInfo
+
+func (m *ReachCurve) GetReachForecasts() []*ReachForecast {
+	if m != nil {
+		return m.ReachForecasts
+	}
+	return nil
+}
+
+// A point on reach curve.
+type ReachForecast struct {
+	// The cost in micros.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Forecasted traffic metrics for this point.
+	Forecast *Forecast `protobuf:"bytes,2,opt,name=forecast,proto3" json:"forecast,omitempty"`
+	// The forecasted allocation. This differs from the input allocation if one
+	// or more product cannot fulfill the budget because of limited inventory.
+	ForecastedProductAllocations []*ProductAllocation `protobuf:"bytes,3,rep,name=forecasted_product_allocations,json=forecastedProductAllocations,proto3" json:"forecasted_product_allocations,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}             `json:"-"`
+	XXX_unrecognized             []byte               `json:"-"`
+	XXX_sizecache                int32                `json:"-"`
+}
+
+func (m *ReachForecast) Reset()         { *m = ReachForecast{} }
+func (m *ReachForecast) String() string { return proto.CompactTextString(m) }
+func (*ReachForecast) ProtoMessage()    {}
+func (*ReachForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{17}
+}
+
+func (m *ReachForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ReachForecast.Unmarshal(m, b)
+}
+func (m *ReachForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ReachForecast.Marshal(b, m, deterministic)
+}
+func (m *ReachForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ReachForecast.Merge(m, src)
+}
+func (m *ReachForecast) XXX_Size() int {
+	return xxx_messageInfo_ReachForecast.Size(m)
+}
+func (m *ReachForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_ReachForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ReachForecast proto.InternalMessageInfo
+
+func (m *ReachForecast) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *ReachForecast) GetForecast() *Forecast {
+	if m != nil {
+		return m.Forecast
+	}
+	return nil
+}
+
+func (m *ReachForecast) GetForecastedProductAllocations() []*ProductAllocation {
+	if m != nil {
+		return m.ForecastedProductAllocations
+	}
+	return nil
+}
+
+// Forecasted traffic metrics for the planned products and targeting.
+type Forecast struct {
+	// Number of unique people reached at least
+	// GenerateReachForecastRequest.min_effective_frequency times that exactly
+	// matches the Targeting.
+	OnTargetReach *wrappers.Int64Value `protobuf:"bytes,1,opt,name=on_target_reach,json=onTargetReach,proto3" json:"on_target_reach,omitempty"`
+	// Total number of unique people reached at least
+	// GenerateReachForecastRequest.min_effective_frequency times. This includes
+	// people that may fall outside the specified Targeting.
+	TotalReach *wrappers.Int64Value `protobuf:"bytes,2,opt,name=total_reach,json=totalReach,proto3" json:"total_reach,omitempty"`
+	// Number of ad impressions that exactly matches the Targeting.
+	OnTargetImpressions *wrappers.Int64Value `protobuf:"bytes,3,opt,name=on_target_impressions,json=onTargetImpressions,proto3" json:"on_target_impressions,omitempty"`
+	// Total number of ad impressions. This includes impressions that may fall
+	// outside the specified Targeting, due to insufficent information on
+	// signed-in users.
+	TotalImpressions     *wrappers.Int64Value `protobuf:"bytes,4,opt,name=total_impressions,json=totalImpressions,proto3" json:"total_impressions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Forecast) Reset()         { *m = Forecast{} }
+func (m *Forecast) String() string { return proto.CompactTextString(m) }
+func (*Forecast) ProtoMessage()    {}
+func (*Forecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{18}
+}
+
+func (m *Forecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Forecast.Unmarshal(m, b)
+}
+func (m *Forecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Forecast.Marshal(b, m, deterministic)
+}
+func (m *Forecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Forecast.Merge(m, src)
+}
+func (m *Forecast) XXX_Size() int {
+	return xxx_messageInfo_Forecast.Size(m)
+}
+func (m *Forecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_Forecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Forecast proto.InternalMessageInfo
+
+func (m *Forecast) GetOnTargetReach() *wrappers.Int64Value {
+	if m != nil {
+		return m.OnTargetReach
+	}
+	return nil
+}
+
+func (m *Forecast) GetTotalReach() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalReach
+	}
+	return nil
+}
+
+func (m *Forecast) GetOnTargetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.OnTargetImpressions
+	}
+	return nil
+}
+
+func (m *Forecast) GetTotalImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalImpressions
+	}
+	return nil
+}
+
+// Audience metrics for the planned products.
+// These metrics consider the following targeting dimensions:
+//
+// - Location
+// - PlannableAgeRange
+// - Gender
+type OnTargetAudienceMetrics struct {
+	// Reference audience size matching the considered targeting for YouTube.
+	YoutubeAudienceSize *wrappers.Int64Value `protobuf:"bytes,1,opt,name=youtube_audience_size,json=youtubeAudienceSize,proto3" json:"youtube_audience_size,omitempty"`
+	// Reference audience size matching the considered targeting for Census.
+	CensusAudienceSize   *wrappers.Int64Value `protobuf:"bytes,2,opt,name=census_audience_size,json=censusAudienceSize,proto3" json:"census_audience_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *OnTargetAudienceMetrics) Reset()         { *m = OnTargetAudienceMetrics{} }
+func (m *OnTargetAudienceMetrics) String() string { return proto.CompactTextString(m) }
+func (*OnTargetAudienceMetrics) ProtoMessage()    {}
+func (*OnTargetAudienceMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d80b4ff3bff090d4, []int{19}
+}
+
+func (m *OnTargetAudienceMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OnTargetAudienceMetrics.Unmarshal(m, b)
+}
+func (m *OnTargetAudienceMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OnTargetAudienceMetrics.Marshal(b, m, deterministic)
+}
+func (m *OnTargetAudienceMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OnTargetAudienceMetrics.Merge(m, src)
+}
+func (m *OnTargetAudienceMetrics) XXX_Size() int {
+	return xxx_messageInfo_OnTargetAudienceMetrics.Size(m)
+}
+func (m *OnTargetAudienceMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_OnTargetAudienceMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OnTargetAudienceMetrics proto.InternalMessageInfo
+
+func (m *OnTargetAudienceMetrics) GetYoutubeAudienceSize() *wrappers.Int64Value {
+	if m != nil {
+		return m.YoutubeAudienceSize
+	}
+	return nil
+}
+
+func (m *OnTargetAudienceMetrics) GetCensusAudienceSize() *wrappers.Int64Value {
+	if m != nil {
+		return m.CensusAudienceSize
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ListPlannableLocationsRequest)(nil), "google.ads.googleads.v3.services.ListPlannableLocationsRequest")
+	proto.RegisterType((*ListPlannableLocationsResponse)(nil), "google.ads.googleads.v3.services.ListPlannableLocationsResponse")
+	proto.RegisterType((*PlannableLocation)(nil), "google.ads.googleads.v3.services.PlannableLocation")
+	proto.RegisterType((*ListPlannableProductsRequest)(nil), "google.ads.googleads.v3.services.ListPlannableProductsRequest")
+	proto.RegisterType((*ListPlannableProductsResponse)(nil), "google.ads.googleads.v3.services.ListPlannableProductsResponse")
+	proto.RegisterType((*ProductMetadata)(nil), "google.ads.googleads.v3.services.ProductMetadata")
+	proto.RegisterType((*PlannableTargeting)(nil), "google.ads.googleads.v3.services.PlannableTargeting")
+	proto.RegisterType((*GenerateProductMixIdeasRequest)(nil), "google.ads.googleads.v3.services.GenerateProductMixIdeasRequest")
+	proto.RegisterType((*Preferences)(nil), "google.ads.googleads.v3.services.Preferences")
+	proto.RegisterType((*GenerateProductMixIdeasResponse)(nil), "google.ads.googleads.v3.services.GenerateProductMixIdeasResponse")
+	proto.RegisterType((*ProductAllocation)(nil), "google.ads.googleads.v3.services.ProductAllocation")
+	proto.RegisterType((*GenerateReachForecastRequest)(nil), "google.ads.googleads.v3.services.GenerateReachForecastRequest")
+	proto.RegisterType((*Targeting)(nil), "google.ads.googleads.v3.services.Targeting")
+	proto.RegisterType((*CampaignDuration)(nil), "google.ads.googleads.v3.services.CampaignDuration")
+	proto.RegisterType((*PlannedProduct)(nil), "google.ads.googleads.v3.services.PlannedProduct")
+	proto.RegisterType((*GenerateReachForecastResponse)(nil), "google.ads.googleads.v3.services.GenerateReachForecastResponse")
+	proto.RegisterType((*ReachCurve)(nil), "google.ads.googleads.v3.services.ReachCurve")
+	proto.RegisterType((*ReachForecast)(nil), "google.ads.googleads.v3.services.ReachForecast")
+	proto.RegisterType((*Forecast)(nil), "google.ads.googleads.v3.services.Forecast")
+	proto.RegisterType((*OnTargetAudienceMetrics)(nil), "google.ads.googleads.v3.services.OnTargetAudienceMetrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/reach_plan_service.proto", fileDescriptor_d80b4ff3bff090d4)
+}
+
+var fileDescriptor_d80b4ff3bff090d4 = []byte{
+	// 1769 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x6f, 0x24, 0x47,
+	0x19, 0x57, 0xf7, 0x2c, 0x59, 0xbb, 0x9c, 0xf5, 0xa3, 0x76, 0x1d, 0x0f, 0x13, 0xc7, 0xbb, 0x6a,
+	0x2d, 0x52, 0x64, 0x9c, 0x99, 0xe0, 0x09, 0x51, 0x32, 0x64, 0x49, 0x66, 0xed, 0xb5, 0x33, 0xd2,
+	0x9a, 0xb5, 0xda, 0xb0, 0x3c, 0x64, 0xd1, 0x29, 0x77, 0xd7, 0xb4, 0x4b, 0x3b, 0x53, 0xd5, 0x54,
+	0x55, 0x7b, 0x99, 0xa0, 0x48, 0x08, 0x09, 0x24, 0x0e, 0x48, 0x48, 0xfc, 0x05, 0x70, 0x40, 0xc0,
+	0x81, 0x3b, 0x12, 0xe2, 0xc0, 0x31, 0xe2, 0x86, 0xc4, 0x61, 0x4f, 0x1c, 0x10, 0x12, 0xfc, 0x0d,
+	0x44, 0x42, 0x5d, 0x8f, 0x9e, 0xf7, 0x4c, 0xdb, 0xbb, 0x48, 0xdc, 0xca, 0x55, 0xdf, 0xef, 0x57,
+	0xf5, 0xbd, 0xbf, 0x1e, 0x83, 0x77, 0x63, 0xc6, 0xe2, 0x0e, 0xae, 0xa1, 0x48, 0xd4, 0xf4, 0x32,
+	0x5b, 0x5d, 0xd4, 0x6b, 0x02, 0xf3, 0x0b, 0x12, 0x62, 0x51, 0xe3, 0x18, 0x85, 0xe7, 0x41, 0xd2,
+	0x41, 0x34, 0x30, 0x7b, 0xd5, 0x84, 0x33, 0xc9, 0xe0, 0x1d, 0x2d, 0x5f, 0x45, 0x91, 0xa8, 0xe6,
+	0xd0, 0xea, 0x45, 0xbd, 0x6a, 0xa1, 0x95, 0x37, 0xa6, 0x91, 0x87, 0xac, 0xdb, 0x65, 0xb4, 0x16,
+	0x72, 0x22, 0x31, 0x27, 0x48, 0x13, 0x56, 0xde, 0x99, 0x26, 0x8e, 0x69, 0xda, 0x1d, 0x7a, 0x08,
+	0x8a, 0x82, 0x0e, 0xa6, 0xb1, 0x3c, 0xbf, 0x3c, 0x32, 0xc6, 0x01, 0x47, 0x34, 0x36, 0x4a, 0x54,
+	0xde, 0x2e, 0x8c, 0xa4, 0x58, 0x3e, 0x65, 0xfc, 0x89, 0xc1, 0x6d, 0x5a, 0x5c, 0x42, 0x6a, 0x88,
+	0x52, 0x26, 0x91, 0x24, 0x8c, 0x0a, 0x73, 0xba, 0x31, 0x70, 0x1a, 0x76, 0x08, 0xa6, 0xd2, 0x1c,
+	0xdc, 0x1e, 0x38, 0x68, 0x13, 0xdc, 0x89, 0x82, 0x33, 0x7c, 0x8e, 0x2e, 0x08, 0xe3, 0x46, 0x60,
+	0xcb, 0x08, 0xa8, 0xbf, 0xce, 0xd2, 0x76, 0xed, 0x29, 0x47, 0x49, 0x82, 0xb9, 0x61, 0xf6, 0x6e,
+	0x83, 0xd7, 0x1e, 0x12, 0x21, 0x8f, 0x3b, 0x88, 0x52, 0x74, 0xd6, 0xc1, 0x0f, 0x59, 0xa8, 0x6f,
+	0xf6, 0xf1, 0xf7, 0x52, 0x2c, 0xa4, 0xf7, 0x13, 0x07, 0x6c, 0x4d, 0x93, 0x10, 0x09, 0xa3, 0x02,
+	0xc3, 0x08, 0xdc, 0x4c, 0xec, 0x69, 0xd0, 0xb1, 0xc7, 0x65, 0xe7, 0x4e, 0xe9, 0xf5, 0xa5, 0xdd,
+	0x7a, 0x75, 0x9e, 0x5b, 0xab, 0x63, 0xd4, 0x3e, 0x4c, 0xc6, 0x6e, 0xf3, 0xfe, 0xe8, 0x80, 0xb5,
+	0x31, 0x49, 0xb8, 0x03, 0x5c, 0x12, 0x95, 0x9d, 0x3b, 0xce, 0xeb, 0x4b, 0xbb, 0x9b, 0xf6, 0x2a,
+	0xab, 0x6c, 0xf5, 0x44, 0x72, 0x42, 0xe3, 0xc7, 0xa8, 0x93, 0x62, 0xdf, 0x25, 0x11, 0x7c, 0x13,
+	0x5c, 0xa3, 0xa8, 0x8b, 0xcb, 0x6e, 0x01, 0x79, 0x25, 0x09, 0x0f, 0xc1, 0x5a, 0x82, 0x38, 0xa6,
+	0x32, 0x08, 0x59, 0x4a, 0x25, 0xef, 0x05, 0x24, 0x2a, 0x97, 0x14, 0xfc, 0xd5, 0x31, 0x78, 0x8b,
+	0xca, 0xb7, 0xdf, 0xd2, 0xe8, 0x15, 0x8d, 0xda, 0xd3, 0xa0, 0x56, 0xe4, 0xa5, 0x60, 0x73, 0xc8,
+	0x8c, 0xc7, 0x9c, 0x45, 0x69, 0x28, 0xad, 0x9d, 0xe1, 0x37, 0xc0, 0xfa, 0xb8, 0x11, 0x83, 0x62,
+	0xba, 0xdd, 0x2f, 0xfd, 0xbd, 0xe9, 0xfa, 0x37, 0xc7, 0x8c, 0xd6, 0x8a, 0xbc, 0x4f, 0x46, 0xfc,
+	0xdb, 0xbf, 0xd6, 0x38, 0xef, 0x14, 0xac, 0x26, 0x7a, 0x2f, 0xe8, 0x62, 0x89, 0x22, 0x24, 0x91,
+	0xf1, 0xdc, 0x97, 0x0a, 0x78, 0x4e, 0x23, 0x8f, 0x0c, 0xd0, 0x5f, 0x49, 0x86, 0x37, 0xbc, 0xbf,
+	0x38, 0x60, 0x65, 0x44, 0x08, 0xfa, 0xe0, 0x95, 0xbe, 0xa6, 0xf6, 0xee, 0x90, 0x45, 0xb8, 0x90,
+	0x1b, 0x6f, 0x25, 0x23, 0xaa, 0xec, 0xb1, 0x08, 0x43, 0x3c, 0x18, 0x82, 0x12, 0xf1, 0x18, 0x4b,
+	0x42, 0x63, 0xe3, 0xe7, 0xb7, 0x2e, 0x11, 0x82, 0x5f, 0xb7, 0xd8, 0x81, 0x18, 0xcc, 0xf7, 0xbc,
+	0x7f, 0xb9, 0x00, 0x8e, 0x8b, 0x42, 0x0c, 0x40, 0x5e, 0x07, 0x74, 0xdc, 0x2f, 0xef, 0x1e, 0x4c,
+	0xbd, 0x54, 0x55, 0x82, 0xaa, 0x9f, 0x55, 0x82, 0x8c, 0xab, 0x19, 0x63, 0x3f, 0x03, 0x3e, 0xa0,
+	0x69, 0x77, 0x7c, 0xd7, 0x5f, 0x44, 0x66, 0x25, 0xe0, 0x3e, 0xb8, 0x1e, 0x63, 0x1a, 0x61, 0x2e,
+	0xca, 0xae, 0xf2, 0xd0, 0xf6, 0xd4, 0x3b, 0x74, 0x41, 0xac, 0x1e, 0x2a, 0xf1, 0x16, 0x6d, 0x33,
+	0xdf, 0x42, 0x33, 0x96, 0x08, 0x2b, 0xad, 0xcb, 0xa5, 0x62, 0x2c, 0xfb, 0x4a, 0x5c, 0xb3, 0x18,
+	0x28, 0xfc, 0x08, 0x2c, 0x98, 0x02, 0x26, 0xca, 0xd7, 0x94, 0xc2, 0xfb, 0x45, 0x15, 0xfe, 0x9a,
+	0xc6, 0x0d, 0xeb, 0x6b, 0x36, 0xfd, 0x9c, 0xd5, 0xfb, 0xcc, 0x05, 0x5b, 0x87, 0x98, 0x62, 0x8e,
+	0xa4, 0x75, 0xf5, 0x11, 0xf9, 0x7e, 0x2b, 0xc2, 0x28, 0xcf, 0x99, 0xbb, 0x60, 0x29, 0x4c, 0x85,
+	0x64, 0x5d, 0xcc, 0x6d, 0xa6, 0x2c, 0xea, 0x5c, 0x00, 0x76, 0xbf, 0x15, 0x4d, 0xcf, 0x2c, 0xf7,
+	0x79, 0x32, 0x0b, 0x1e, 0x80, 0x1b, 0x61, 0xca, 0x39, 0xa6, 0x61, 0x4f, 0x47, 0x6f, 0xa9, 0x28,
+	0xdd, 0xcb, 0x16, 0xa7, 0x42, 0xf7, 0x01, 0xb8, 0x71, 0x96, 0x46, 0x31, 0x96, 0x41, 0x97, 0x84,
+	0x9c, 0x65, 0xe6, 0x9c, 0x57, 0x5d, 0x0c, 0x8d, 0x86, 0x1d, 0x29, 0x14, 0x7c, 0x04, 0x96, 0x12,
+	0x8e, 0xdb, 0x38, 0x23, 0xc6, 0xa2, 0xfc, 0x39, 0x45, 0xf2, 0x46, 0x91, 0x14, 0xce, 0x41, 0xfe,
+	0x20, 0x83, 0xf7, 0xb3, 0x12, 0x58, 0x1a, 0x38, 0x84, 0xf7, 0xc0, 0xcb, 0x44, 0x04, 0xe2, 0x09,
+	0x49, 0x92, 0xcc, 0x12, 0x26, 0x59, 0x2b, 0x63, 0xcf, 0xbc, 0xcf, 0x58, 0x47, 0xa7, 0xea, 0x12,
+	0x11, 0x27, 0x56, 0x1c, 0x1e, 0x80, 0x35, 0x21, 0x11, 0x97, 0x22, 0x78, 0x4a, 0xe4, 0x79, 0x20,
+	0x58, 0x4a, 0xad, 0x07, 0x66, 0x71, 0xac, 0x68, 0xd0, 0x37, 0x89, 0x3c, 0x3f, 0xc9, 0x20, 0x30,
+	0x04, 0x8b, 0x79, 0xb7, 0x56, 0x26, 0xbf, 0x4c, 0xaa, 0x45, 0x0f, 0x15, 0x6e, 0x24, 0xd5, 0xcc,
+	0xae, 0xbf, 0x80, 0xcc, 0x0a, 0xee, 0x83, 0x55, 0xc9, 0x92, 0x20, 0x64, 0x54, 0x66, 0xa5, 0x9f,
+	0xd1, 0x4e, 0xcf, 0xb8, 0x65, 0xd6, 0x5b, 0x97, 0x25, 0x4b, 0xf6, 0x34, 0xe4, 0x11, 0xed, 0xf4,
+	0xe0, 0x43, 0x70, 0xeb, 0x1c, 0x89, 0x20, 0x4e, 0x11, 0x47, 0x54, 0x62, 0x1c, 0x05, 0x09, 0x27,
+	0x21, 0x36, 0xbe, 0x99, 0xc5, 0x04, 0xcf, 0x91, 0x38, 0xcc, 0x61, 0xc7, 0x19, 0xca, 0xfb, 0xb1,
+	0x03, 0x6e, 0x4f, 0xcd, 0x07, 0x53, 0xcc, 0xcf, 0x00, 0xb4, 0x05, 0x15, 0x75, 0x6c, 0xa8, 0x5f,
+	0xa2, 0x11, 0x6b, 0x6c, 0x33, 0x87, 0xfa, 0x6b, 0xc9, 0xe8, 0x96, 0xf7, 0xdb, 0xac, 0x0f, 0x8f,
+	0xee, 0xfe, 0x4f, 0x8a, 0xfa, 0x07, 0xa3, 0x99, 0xe1, 0xce, 0xef, 0xbb, 0x43, 0x49, 0xe1, 0xfd,
+	0xe9, 0x1a, 0xd8, 0xb4, 0x36, 0x53, 0xfe, 0x3e, 0x60, 0x1c, 0x87, 0x48, 0xc8, 0xcb, 0x55, 0x90,
+	0xe6, 0x68, 0xaa, 0x17, 0x99, 0x1f, 0x86, 0xb3, 0x3c, 0x02, 0x6b, 0x21, 0xea, 0x26, 0x88, 0xc4,
+	0x34, 0x88, 0x52, 0xae, 0x1d, 0xa3, 0x2b, 0xc6, 0xee, 0x7c, 0xc7, 0xec, 0x19, 0xe8, 0xbe, 0x41,
+	0xea, 0x27, 0xae, 0x86, 0x23, 0xdb, 0xf0, 0x08, 0xdc, 0x0a, 0x19, 0x7b, 0x42, 0x70, 0xd0, 0xe6,
+	0x99, 0x86, 0xea, 0xc1, 0x28, 0x99, 0x55, 0x52, 0xea, 0xbb, 0x26, 0xe4, 0x34, 0xf0, 0xc0, 0xe2,
+	0xf6, 0x50, 0x02, 0x4f, 0xc0, 0x46, 0x97, 0xd0, 0x00, 0xb7, 0xdb, 0x38, 0x94, 0xe4, 0x62, 0x80,
+	0xd5, 0xc4, 0xf0, 0x4c, 0xc6, 0xf5, 0x2e, 0xa1, 0x0f, 0x2c, 0x34, 0xe7, 0x85, 0x2d, 0xb0, 0xd8,
+	0x6f, 0xd0, 0x2f, 0x29, 0x9a, 0x2f, 0xce, 0xb7, 0x40, 0xbf, 0x2f, 0xf7, 0xd1, 0xf0, 0x23, 0xb0,
+	0xaa, 0x02, 0x47, 0x65, 0x96, 0x9e, 0x6b, 0xca, 0xd7, 0x55, 0xb0, 0xbf, 0x59, 0xb0, 0xe5, 0x67,
+	0xc9, 0xa5, 0x80, 0xda, 0xa2, 0x2b, 0xc9, 0xd0, 0xa6, 0xf0, 0x7e, 0x5f, 0x02, 0x8b, 0xfd, 0x3e,
+	0x7f, 0xfc, 0x1c, 0x33, 0xda, 0xe4, 0x26, 0x92, 0x55, 0x33, 0x3b, 0x39, 0xa8, 0xa8, 0x7a, 0x71,
+	0x83, 0xc3, 0x82, 0x1d, 0x1c, 0x06, 0xe7, 0x86, 0xd2, 0x0b, 0x99, 0x1b, 0xae, 0x5d, 0x7d, 0x6e,
+	0xf8, 0x2e, 0xb8, 0x6e, 0x3a, 0xbc, 0x0a, 0xa1, 0x17, 0x35, 0x36, 0x58, 0x52, 0xef, 0xdb, 0x60,
+	0x75, 0x34, 0x59, 0xe0, 0x03, 0xb0, 0x6a, 0x53, 0x2e, 0x20, 0x34, 0x88, 0x50, 0x4f, 0x18, 0x8f,
+	0xcd, 0x8c, 0xdf, 0x65, 0x0b, 0x6a, 0xd1, 0x7d, 0xd4, 0x13, 0xde, 0xaf, 0x1d, 0xb0, 0x3c, 0x1c,
+	0x34, 0xff, 0xa7, 0x55, 0xef, 0x9f, 0x0e, 0x78, 0x6d, 0x4a, 0xd5, 0x33, 0x7d, 0xe2, 0x02, 0x54,
+	0x18, 0x35, 0x73, 0x72, 0x80, 0xd2, 0x88, 0x64, 0x2d, 0x3e, 0x9b, 0xff, 0x39, 0x09, 0xad, 0x6d,
+	0xde, 0x9d, 0x9f, 0x42, 0x8f, 0xa8, 0xce, 0x8d, 0xa6, 0x61, 0x38, 0xd2, 0x04, 0xfe, 0x06, 0x9b,
+	0x7c, 0x00, 0x8f, 0xc0, 0x92, 0xfe, 0x02, 0x0e, 0x53, 0x7e, 0x61, 0xcb, 0xe8, 0xce, 0xfc, 0x8b,
+	0x94, 0x16, 0x7b, 0x19, 0xc6, 0x07, 0x3c, 0x5f, 0x7b, 0x6d, 0x00, 0xfa, 0x27, 0xf0, 0x5b, 0x60,
+	0x45, 0x93, 0xb7, 0x8d, 0xba, 0xf6, 0x13, 0xb4, 0x56, 0xf0, 0x82, 0xdc, 0x4c, 0xcb, 0x7c, 0xf0,
+	0x4f, 0xe1, 0xfd, 0xdc, 0x05, 0x37, 0x86, 0x24, 0xe0, 0x7b, 0x60, 0x29, 0x64, 0x22, 0x77, 0x91,
+	0x33, 0xdf, 0x45, 0x20, 0x93, 0x37, 0xb3, 0xda, 0x01, 0x58, 0xb0, 0x6f, 0x34, 0x36, 0xd8, 0x9e,
+	0xff, 0xc4, 0xfc, 0x75, 0x39, 0x16, 0xf6, 0xc0, 0x96, 0x5d, 0xf7, 0x4b, 0xe0, 0x40, 0xe7, 0xb7,
+	0xf9, 0x7e, 0xa5, 0xd6, 0xbf, 0xd9, 0xa7, 0x1e, 0x3b, 0x14, 0xde, 0x6f, 0x5c, 0xb0, 0x90, 0x5b,
+	0x63, 0x0f, 0xac, 0xf4, 0xc3, 0x49, 0xd9, 0xae, 0x88, 0x45, 0x6e, 0xd8, 0x28, 0x51, 0xa6, 0xcd,
+	0x4c, 0x2a, 0x99, 0x44, 0x1d, 0x43, 0x50, 0x20, 0xea, 0x81, 0x92, 0xd7, 0xe8, 0x47, 0x60, 0xbd,
+	0xff, 0x04, 0xd2, 0x4d, 0x38, 0x16, 0xc2, 0x58, 0x60, 0x2e, 0xcf, 0x4d, 0xfb, 0x90, 0x56, 0x1f,
+	0x07, 0x3f, 0x04, 0x6b, 0xfa, 0x39, 0x83, 0x64, 0xf3, 0x47, 0x73, 0x7f, 0x55, 0xa1, 0x06, 0x98,
+	0xbc, 0x3f, 0x38, 0x60, 0x63, 0x4a, 0xa6, 0x64, 0xcf, 0xee, 0xb1, 0x54, 0xa6, 0x67, 0xb8, 0x9f,
+	0x86, 0x82, 0x7c, 0x8c, 0x8b, 0xd8, 0xef, 0xa6, 0x41, 0x5a, 0xce, 0x13, 0xf2, 0x31, 0x56, 0x13,
+	0x00, 0xa6, 0x22, 0x15, 0x23, 0x7c, 0x05, 0xcc, 0x09, 0x35, 0x70, 0x90, 0x6e, 0xf7, 0xb3, 0xeb,
+	0x60, 0x35, 0x2f, 0xb6, 0x27, 0x3a, 0x58, 0xe0, 0x9f, 0x1d, 0xf0, 0xca, 0xe4, 0x9f, 0x84, 0xe0,
+	0xfb, 0xf3, 0x23, 0x6d, 0xe6, 0xcf, 0x4d, 0x95, 0x0f, 0xae, 0x4e, 0xa0, 0x6b, 0x9b, 0xf7, 0x85,
+	0x1f, 0xfd, 0xf5, 0x1f, 0xbf, 0x70, 0x6f, 0x7b, 0x95, 0xda, 0x45, 0xbd, 0xd1, 0x99, 0x28, 0xdb,
+	0x70, 0xb6, 0xe1, 0xdf, 0x1c, 0xb0, 0x3e, 0xf1, 0x97, 0x11, 0xf8, 0xd5, 0x4b, 0x3e, 0x61, 0xe4,
+	0x97, 0x9c, 0xca, 0xfb, 0x57, 0xc6, 0x1b, 0x0d, 0xde, 0x7b, 0xd6, 0x9c, 0x3c, 0x67, 0x28, 0xcd,
+	0xb6, 0xbc, 0xcf, 0x8f, 0x69, 0x66, 0x29, 0x32, 0xc5, 0x7e, 0xe9, 0x82, 0x8d, 0x29, 0xdf, 0x09,
+	0xb0, 0x80, 0x75, 0x67, 0x7f, 0x72, 0x57, 0x9a, 0xcf, 0xc1, 0x60, 0xd4, 0xfb, 0xa1, 0xf3, 0xac,
+	0x79, 0x6f, 0x60, 0xea, 0xde, 0x99, 0xa8, 0xeb, 0xce, 0xd0, 0xc4, 0xbd, 0x33, 0xd4, 0x12, 0x95,
+	0x1d, 0x1a, 0xde, 0x97, 0xd5, 0x4f, 0xbf, 0x86, 0x48, 0xd4, 0x7e, 0x30, 0xc0, 0x79, 0x6f, 0xfb,
+	0x93, 0x46, 0x3c, 0xf9, 0x1d, 0x99, 0x8d, 0x7e, 0xea, 0x82, 0xf5, 0x89, 0x1d, 0xb2, 0x88, 0xf3,
+	0x67, 0x7d, 0x50, 0x14, 0x71, 0xfe, 0xcc, 0xd6, 0xec, 0xb1, 0x67, 0xcd, 0xea, 0xa0, 0x71, 0xc6,
+	0xbe, 0x1a, 0x76, 0x46, 0x47, 0x5e, 0x65, 0x8d, 0x77, 0xbc, 0x7a, 0x31, 0x6b, 0x0c, 0xdd, 0xda,
+	0x70, 0xb6, 0x2b, 0xaf, 0x7e, 0xda, 0x2c, 0xf7, 0x1f, 0x6a, 0x56, 0x09, 0x11, 0xd9, 0x14, 0x77,
+	0xff, 0x3f, 0x0e, 0xb8, 0x1b, 0xb2, 0xee, 0x5c, 0xa5, 0xee, 0xaf, 0x8f, 0x56, 0x89, 0xe3, 0xac,
+	0xc2, 0x1c, 0x3b, 0xdf, 0xf9, 0xd0, 0x40, 0x63, 0xd6, 0x41, 0x34, 0xae, 0x32, 0x1e, 0xd7, 0x62,
+	0x4c, 0x55, 0xfd, 0xa9, 0xf5, 0x2f, 0x9b, 0xfe, 0xff, 0x82, 0xaf, 0xd8, 0xc5, 0xaf, 0xdc, 0xd2,
+	0x61, 0xb3, 0xf9, 0x3b, 0xf7, 0xce, 0xa1, 0x26, 0x6c, 0x46, 0xa2, 0xaa, 0x97, 0xd9, 0xea, 0x71,
+	0xbd, 0x6a, 0x2e, 0x16, 0x9f, 0x5a, 0x91, 0xd3, 0x66, 0x24, 0x4e, 0x73, 0x91, 0xd3, 0xc7, 0xf5,
+	0x53, 0x2b, 0xf2, 0x6f, 0xf7, 0xae, 0xde, 0x6f, 0x34, 0x9a, 0x91, 0x68, 0x34, 0x72, 0xa1, 0x46,
+	0xe3, 0x71, 0xbd, 0xd1, 0xb0, 0x62, 0x67, 0x2f, 0xa9, 0x77, 0xd6, 0xff, 0x1b, 0x00, 0x00, 0xff,
+	0xff, 0x4d, 0x42, 0xf6, 0x7e, 0xd6, 0x18, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ReachPlanServiceClient is the client API for ReachPlanService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ReachPlanServiceClient interface {
+	// Returns the list of plannable locations (for example, countries & DMAs).
+	ListPlannableLocations(ctx context.Context, in *ListPlannableLocationsRequest, opts ...grpc.CallOption) (*ListPlannableLocationsResponse, error)
+	// Returns the list of per-location plannable YouTube ad formats with allowed
+	// targeting.
+	ListPlannableProducts(ctx context.Context, in *ListPlannableProductsRequest, opts ...grpc.CallOption) (*ListPlannableProductsResponse, error)
+	// Generates a product mix ideas given a set of preferences. This method
+	// helps the advertiser to obtain a good mix of ad formats and budget
+	// allocations based on its preferences.
+	GenerateProductMixIdeas(ctx context.Context, in *GenerateProductMixIdeasRequest, opts ...grpc.CallOption) (*GenerateProductMixIdeasResponse, error)
+	// Generates a reach forecast for a given targeting / product mix.
+	GenerateReachForecast(ctx context.Context, in *GenerateReachForecastRequest, opts ...grpc.CallOption) (*GenerateReachForecastResponse, error)
+}
+
+type reachPlanServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewReachPlanServiceClient(cc grpc.ClientConnInterface) ReachPlanServiceClient {
+	return &reachPlanServiceClient{cc}
+}
+
+func (c *reachPlanServiceClient) ListPlannableLocations(ctx context.Context, in *ListPlannableLocationsRequest, opts ...grpc.CallOption) (*ListPlannableLocationsResponse, error) {
+	out := new(ListPlannableLocationsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ReachPlanService/ListPlannableLocations", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *reachPlanServiceClient) ListPlannableProducts(ctx context.Context, in *ListPlannableProductsRequest, opts ...grpc.CallOption) (*ListPlannableProductsResponse, error) {
+	out := new(ListPlannableProductsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ReachPlanService/ListPlannableProducts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *reachPlanServiceClient) GenerateProductMixIdeas(ctx context.Context, in *GenerateProductMixIdeasRequest, opts ...grpc.CallOption) (*GenerateProductMixIdeasResponse, error) {
+	out := new(GenerateProductMixIdeasResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ReachPlanService/GenerateProductMixIdeas", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *reachPlanServiceClient) GenerateReachForecast(ctx context.Context, in *GenerateReachForecastRequest, opts ...grpc.CallOption) (*GenerateReachForecastResponse, error) {
+	out := new(GenerateReachForecastResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ReachPlanService/GenerateReachForecast", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ReachPlanServiceServer is the server API for ReachPlanService service.
+type ReachPlanServiceServer interface {
+	// Returns the list of plannable locations (for example, countries & DMAs).
+	ListPlannableLocations(context.Context, *ListPlannableLocationsRequest) (*ListPlannableLocationsResponse, error)
+	// Returns the list of per-location plannable YouTube ad formats with allowed
+	// targeting.
+	ListPlannableProducts(context.Context, *ListPlannableProductsRequest) (*ListPlannableProductsResponse, error)
+	// Generates a product mix ideas given a set of preferences. This method
+	// helps the advertiser to obtain a good mix of ad formats and budget
+	// allocations based on its preferences.
+	GenerateProductMixIdeas(context.Context, *GenerateProductMixIdeasRequest) (*GenerateProductMixIdeasResponse, error)
+	// Generates a reach forecast for a given targeting / product mix.
+	GenerateReachForecast(context.Context, *GenerateReachForecastRequest) (*GenerateReachForecastResponse, error)
+}
+
+// UnimplementedReachPlanServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedReachPlanServiceServer struct {
+}
+
+func (*UnimplementedReachPlanServiceServer) ListPlannableLocations(ctx context.Context, req *ListPlannableLocationsRequest) (*ListPlannableLocationsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListPlannableLocations not implemented")
+}
+func (*UnimplementedReachPlanServiceServer) ListPlannableProducts(ctx context.Context, req *ListPlannableProductsRequest) (*ListPlannableProductsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListPlannableProducts not implemented")
+}
+func (*UnimplementedReachPlanServiceServer) GenerateProductMixIdeas(ctx context.Context, req *GenerateProductMixIdeasRequest) (*GenerateProductMixIdeasResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GenerateProductMixIdeas not implemented")
+}
+func (*UnimplementedReachPlanServiceServer) GenerateReachForecast(ctx context.Context, req *GenerateReachForecastRequest) (*GenerateReachForecastResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GenerateReachForecast not implemented")
+}
+
+func RegisterReachPlanServiceServer(s *grpc.Server, srv ReachPlanServiceServer) {
+	s.RegisterService(&_ReachPlanService_serviceDesc, srv)
+}
+
+func _ReachPlanService_ListPlannableLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListPlannableLocationsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ReachPlanServiceServer).ListPlannableLocations(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ReachPlanService/ListPlannableLocations",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ReachPlanServiceServer).ListPlannableLocations(ctx, req.(*ListPlannableLocationsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ReachPlanService_ListPlannableProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListPlannableProductsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ReachPlanServiceServer).ListPlannableProducts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ReachPlanService/ListPlannableProducts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ReachPlanServiceServer).ListPlannableProducts(ctx, req.(*ListPlannableProductsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ReachPlanService_GenerateProductMixIdeas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateProductMixIdeasRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ReachPlanServiceServer).GenerateProductMixIdeas(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ReachPlanService/GenerateProductMixIdeas",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ReachPlanServiceServer).GenerateProductMixIdeas(ctx, req.(*GenerateProductMixIdeasRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ReachPlanService_GenerateReachForecast_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateReachForecastRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ReachPlanServiceServer).GenerateReachForecast(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ReachPlanService/GenerateReachForecast",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ReachPlanServiceServer).GenerateReachForecast(ctx, req.(*GenerateReachForecastRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ReachPlanService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ReachPlanService",
+	HandlerType: (*ReachPlanServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListPlannableLocations",
+			Handler:    _ReachPlanService_ListPlannableLocations_Handler,
+		},
+		{
+			MethodName: "ListPlannableProducts",
+			Handler:    _ReachPlanService_ListPlannableProducts_Handler,
+		},
+		{
+			MethodName: "GenerateProductMixIdeas",
+			Handler:    _ReachPlanService_GenerateProductMixIdeas_Handler,
+		},
+		{
+			MethodName: "GenerateReachForecast",
+			Handler:    _ReachPlanService_GenerateReachForecast_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/reach_plan_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/recommendation_service.pb.go b/googleapis/ads/googleads/v3/services/recommendation_service.pb.go
new file mode 100644
index 0000000..db7bffa
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/recommendation_service.pb.go
@@ -0,0 +1,1290 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/recommendation_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	wrappers "github.com/golang/protobuf/ptypes/wrappers"
+	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
+	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [RecommendationService.GetRecommendation][google.ads.googleads.v3.services.RecommendationService.GetRecommendation].
+type GetRecommendationRequest struct {
+	// Required. The resource name of the recommendation to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetRecommendationRequest) Reset()         { *m = GetRecommendationRequest{} }
+func (m *GetRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetRecommendationRequest) ProtoMessage()    {}
+func (*GetRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{0}
+}
+
+func (m *GetRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetRecommendationRequest.Unmarshal(m, b)
+}
+func (m *GetRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (m *GetRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetRecommendationRequest.Merge(m, src)
+}
+func (m *GetRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetRecommendationRequest.Size(m)
+}
+func (m *GetRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetRecommendationRequest proto.InternalMessageInfo
+
+func (m *GetRecommendationRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [RecommendationService.ApplyRecommendation][google.ads.googleads.v3.services.RecommendationService.ApplyRecommendation].
+type ApplyRecommendationRequest struct {
+	// Required. The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to apply recommendations.
+	// If partial_failure=false all recommendations should be of the same type
+	// There is a limit of 100 operations per request.
+	Operations []*ApplyRecommendationOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, operations will be carried
+	// out as a transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure       bool     `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplyRecommendationRequest) Reset()         { *m = ApplyRecommendationRequest{} }
+func (m *ApplyRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationRequest) ProtoMessage()    {}
+func (*ApplyRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{1}
+}
+
+func (m *ApplyRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationRequest.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationRequest.Merge(m, src)
+}
+func (m *ApplyRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationRequest.Size(m)
+}
+func (m *ApplyRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationRequest proto.InternalMessageInfo
+
+func (m *ApplyRecommendationRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *ApplyRecommendationRequest) GetOperations() []*ApplyRecommendationOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+// Information about the operation to apply a recommendation and any parameters
+// to customize it.
+type ApplyRecommendationOperation struct {
+	// The resource name of the recommendation to apply.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Parameters to use when applying the recommendation.
+	//
+	// Types that are valid to be assigned to ApplyParameters:
+	//	*ApplyRecommendationOperation_CampaignBudget
+	//	*ApplyRecommendationOperation_TextAd
+	//	*ApplyRecommendationOperation_Keyword
+	//	*ApplyRecommendationOperation_TargetCpaOptIn
+	//	*ApplyRecommendationOperation_CalloutExtension
+	//	*ApplyRecommendationOperation_CallExtension
+	//	*ApplyRecommendationOperation_SitelinkExtension
+	//	*ApplyRecommendationOperation_MoveUnusedBudget
+	ApplyParameters      isApplyRecommendationOperation_ApplyParameters `protobuf_oneof:"apply_parameters"`
+	XXX_NoUnkeyedLiteral struct{}                                       `json:"-"`
+	XXX_unrecognized     []byte                                         `json:"-"`
+	XXX_sizecache        int32                                          `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation) Reset()         { *m = ApplyRecommendationOperation{} }
+func (m *ApplyRecommendationOperation) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationOperation) ProtoMessage()    {}
+func (*ApplyRecommendationOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2}
+}
+
+func (m *ApplyRecommendationOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation.Size(m)
+}
+func (m *ApplyRecommendationOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+type isApplyRecommendationOperation_ApplyParameters interface {
+	isApplyRecommendationOperation_ApplyParameters()
+}
+
+type ApplyRecommendationOperation_CampaignBudget struct {
+	CampaignBudget *ApplyRecommendationOperation_CampaignBudgetParameters `protobuf:"bytes,2,opt,name=campaign_budget,json=campaignBudget,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_TextAd struct {
+	TextAd *ApplyRecommendationOperation_TextAdParameters `protobuf:"bytes,3,opt,name=text_ad,json=textAd,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_Keyword struct {
+	Keyword *ApplyRecommendationOperation_KeywordParameters `protobuf:"bytes,4,opt,name=keyword,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_TargetCpaOptIn struct {
+	TargetCpaOptIn *ApplyRecommendationOperation_TargetCpaOptInParameters `protobuf:"bytes,5,opt,name=target_cpa_opt_in,json=targetCpaOptIn,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_CalloutExtension struct {
+	CalloutExtension *ApplyRecommendationOperation_CalloutExtensionParameters `protobuf:"bytes,6,opt,name=callout_extension,json=calloutExtension,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_CallExtension struct {
+	CallExtension *ApplyRecommendationOperation_CallExtensionParameters `protobuf:"bytes,7,opt,name=call_extension,json=callExtension,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_SitelinkExtension struct {
+	SitelinkExtension *ApplyRecommendationOperation_SitelinkExtensionParameters `protobuf:"bytes,8,opt,name=sitelink_extension,json=sitelinkExtension,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_MoveUnusedBudget struct {
+	MoveUnusedBudget *ApplyRecommendationOperation_MoveUnusedBudgetParameters `protobuf:"bytes,9,opt,name=move_unused_budget,json=moveUnusedBudget,proto3,oneof"`
+}
+
+func (*ApplyRecommendationOperation_CampaignBudget) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_TextAd) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_Keyword) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_TargetCpaOptIn) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_CalloutExtension) isApplyRecommendationOperation_ApplyParameters() {
+}
+
+func (*ApplyRecommendationOperation_CallExtension) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_SitelinkExtension) isApplyRecommendationOperation_ApplyParameters() {
+}
+
+func (*ApplyRecommendationOperation_MoveUnusedBudget) isApplyRecommendationOperation_ApplyParameters() {
+}
+
+func (m *ApplyRecommendationOperation) GetApplyParameters() isApplyRecommendationOperation_ApplyParameters {
+	if m != nil {
+		return m.ApplyParameters
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetCampaignBudget() *ApplyRecommendationOperation_CampaignBudgetParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_CampaignBudget); ok {
+		return x.CampaignBudget
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetTextAd() *ApplyRecommendationOperation_TextAdParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_TextAd); ok {
+		return x.TextAd
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetKeyword() *ApplyRecommendationOperation_KeywordParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetTargetCpaOptIn() *ApplyRecommendationOperation_TargetCpaOptInParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_TargetCpaOptIn); ok {
+		return x.TargetCpaOptIn
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetCalloutExtension() *ApplyRecommendationOperation_CalloutExtensionParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_CalloutExtension); ok {
+		return x.CalloutExtension
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetCallExtension() *ApplyRecommendationOperation_CallExtensionParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_CallExtension); ok {
+		return x.CallExtension
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetSitelinkExtension() *ApplyRecommendationOperation_SitelinkExtensionParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_SitelinkExtension); ok {
+		return x.SitelinkExtension
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetMoveUnusedBudget() *ApplyRecommendationOperation_MoveUnusedBudgetParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_MoveUnusedBudget); ok {
+		return x.MoveUnusedBudget
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ApplyRecommendationOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ApplyRecommendationOperation_CampaignBudget)(nil),
+		(*ApplyRecommendationOperation_TextAd)(nil),
+		(*ApplyRecommendationOperation_Keyword)(nil),
+		(*ApplyRecommendationOperation_TargetCpaOptIn)(nil),
+		(*ApplyRecommendationOperation_CalloutExtension)(nil),
+		(*ApplyRecommendationOperation_CallExtension)(nil),
+		(*ApplyRecommendationOperation_SitelinkExtension)(nil),
+		(*ApplyRecommendationOperation_MoveUnusedBudget)(nil),
+	}
+}
+
+// Parameters to use when applying a campaign budget recommendation.
+type ApplyRecommendationOperation_CampaignBudgetParameters struct {
+	// New budget amount to set for target budget resource. This is a required
+	// field.
+	NewBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=new_budget_amount_micros,json=newBudgetAmountMicros,proto3" json:"new_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}             `json:"-"`
+	XXX_unrecognized      []byte               `json:"-"`
+	XXX_sizecache         int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) Reset() {
+	*m = ApplyRecommendationOperation_CampaignBudgetParameters{}
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_CampaignBudgetParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_CampaignBudgetParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 0}
+}
+
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) GetNewBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.NewBudgetAmountMicros
+	}
+	return nil
+}
+
+// Parameters to use when applying a text ad recommendation.
+type ApplyRecommendationOperation_TextAdParameters struct {
+	// New ad to add to recommended ad group. All necessary fields need to be
+	// set in this message. This is a required field.
+	Ad                   *resources.Ad `protobuf:"bytes,1,opt,name=ad,proto3" json:"ad,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_TextAdParameters) Reset() {
+	*m = ApplyRecommendationOperation_TextAdParameters{}
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_TextAdParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_TextAdParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 1}
+}
+
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_TextAdParameters) GetAd() *resources.Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+// Parameters to use when applying keyword recommendation.
+type ApplyRecommendationOperation_KeywordParameters struct {
+	// The ad group resource to add keyword to. This is a required field.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,1,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The match type of the keyword. This is a required field.
+	MatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v3.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	// Optional, CPC bid to set for the keyword. If not set, keyword will use
+	// bid based on bidding strategy used by target ad group.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) Reset() {
+	*m = ApplyRecommendationOperation_KeywordParameters{}
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_KeywordParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_KeywordParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 2}
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+// Parameters to use when applying Target CPA recommendation.
+type ApplyRecommendationOperation_TargetCpaOptInParameters struct {
+	// Average CPA to use for Target CPA bidding strategy. This is a required
+	// field.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// Optional, budget amount to set for the campaign.
+	NewCampaignBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=new_campaign_budget_amount_micros,json=newCampaignBudgetAmountMicros,proto3" json:"new_campaign_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) Reset() {
+	*m = ApplyRecommendationOperation_TargetCpaOptInParameters{}
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_TargetCpaOptInParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_TargetCpaOptInParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 3}
+}
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) GetNewCampaignBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.NewCampaignBudgetAmountMicros
+	}
+	return nil
+}
+
+// Parameters to use when applying callout extension recommendation.
+type ApplyRecommendationOperation_CalloutExtensionParameters struct {
+	// Callout extensions to be added. This is a required field.
+	CalloutExtensions    []*common.CalloutFeedItem `protobuf:"bytes,1,rep,name=callout_extensions,json=calloutExtensions,proto3" json:"callout_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) Reset() {
+	*m = ApplyRecommendationOperation_CalloutExtensionParameters{}
+}
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_CalloutExtensionParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_CalloutExtensionParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 4}
+}
+
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_CalloutExtensionParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_CalloutExtensionParameters) GetCalloutExtensions() []*common.CalloutFeedItem {
+	if m != nil {
+		return m.CalloutExtensions
+	}
+	return nil
+}
+
+// Parameters to use when applying call extension recommendation.
+type ApplyRecommendationOperation_CallExtensionParameters struct {
+	// Call extensions to be added. This is a required field.
+	CallExtensions       []*common.CallFeedItem `protobuf:"bytes,1,rep,name=call_extensions,json=callExtensions,proto3" json:"call_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_CallExtensionParameters) Reset() {
+	*m = ApplyRecommendationOperation_CallExtensionParameters{}
+}
+func (m *ApplyRecommendationOperation_CallExtensionParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_CallExtensionParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_CallExtensionParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 5}
+}
+
+func (m *ApplyRecommendationOperation_CallExtensionParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_CallExtensionParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_CallExtensionParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_CallExtensionParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_CallExtensionParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_CallExtensionParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_CallExtensionParameters) GetCallExtensions() []*common.CallFeedItem {
+	if m != nil {
+		return m.CallExtensions
+	}
+	return nil
+}
+
+// Parameters to use when applying sitelink extension recommendation.
+type ApplyRecommendationOperation_SitelinkExtensionParameters struct {
+	// Sitelink extensions to be added. This is a required field.
+	SitelinkExtensions   []*common.SitelinkFeedItem `protobuf:"bytes,1,rep,name=sitelink_extensions,json=sitelinkExtensions,proto3" json:"sitelink_extensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) Reset() {
+	*m = ApplyRecommendationOperation_SitelinkExtensionParameters{}
+}
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_SitelinkExtensionParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_SitelinkExtensionParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 6}
+}
+
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_SitelinkExtensionParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_SitelinkExtensionParameters) GetSitelinkExtensions() []*common.SitelinkFeedItem {
+	if m != nil {
+		return m.SitelinkExtensions
+	}
+	return nil
+}
+
+// Parameters to use when applying move unused budget recommendation.
+type ApplyRecommendationOperation_MoveUnusedBudgetParameters struct {
+	// Budget amount to move from excess budget to constrained budget. This is
+	// a required field.
+	BudgetMicrosToMove   *wrappers.Int64Value `protobuf:"bytes,1,opt,name=budget_micros_to_move,json=budgetMicrosToMove,proto3" json:"budget_micros_to_move,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) Reset() {
+	*m = ApplyRecommendationOperation_MoveUnusedBudgetParameters{}
+}
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_MoveUnusedBudgetParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_MoveUnusedBudgetParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{2, 7}
+}
+
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters.Merge(m, src)
+}
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_MoveUnusedBudgetParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_MoveUnusedBudgetParameters) GetBudgetMicrosToMove() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetMicrosToMove
+	}
+	return nil
+}
+
+// Response message for [RecommendationService.ApplyRecommendation][google.ads.googleads.v3.services.RecommendationService.ApplyRecommendation].
+type ApplyRecommendationResponse struct {
+	// Results of operations to apply recommendations.
+	Results []*ApplyRecommendationResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors)
+	// we return the RPC level error.
+	PartialFailureError  *status.Status `protobuf:"bytes,2,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *ApplyRecommendationResponse) Reset()         { *m = ApplyRecommendationResponse{} }
+func (m *ApplyRecommendationResponse) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationResponse) ProtoMessage()    {}
+func (*ApplyRecommendationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{3}
+}
+
+func (m *ApplyRecommendationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationResponse.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationResponse.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationResponse.Merge(m, src)
+}
+func (m *ApplyRecommendationResponse) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationResponse.Size(m)
+}
+func (m *ApplyRecommendationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationResponse proto.InternalMessageInfo
+
+func (m *ApplyRecommendationResponse) GetResults() []*ApplyRecommendationResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+// The result of applying a recommendation.
+type ApplyRecommendationResult struct {
+	// Returned for successful applies.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplyRecommendationResult) Reset()         { *m = ApplyRecommendationResult{} }
+func (m *ApplyRecommendationResult) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationResult) ProtoMessage()    {}
+func (*ApplyRecommendationResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{4}
+}
+
+func (m *ApplyRecommendationResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationResult.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationResult.Marshal(b, m, deterministic)
+}
+func (m *ApplyRecommendationResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationResult.Merge(m, src)
+}
+func (m *ApplyRecommendationResult) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationResult.Size(m)
+}
+func (m *ApplyRecommendationResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationResult proto.InternalMessageInfo
+
+func (m *ApplyRecommendationResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [RecommendationService.DismissRecommendation][google.ads.googleads.v3.services.RecommendationService.DismissRecommendation].
+type DismissRecommendationRequest struct {
+	// Required. The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to dismiss recommendations.
+	// If partial_failure=false all recommendations should be of the same type
+	// There is a limit of 100 operations per request.
+	Operations []*DismissRecommendationRequest_DismissRecommendationOperation `protobuf:"bytes,3,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, operations will be carried in a
+	// single transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure       bool     `protobuf:"varint,2,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DismissRecommendationRequest) Reset()         { *m = DismissRecommendationRequest{} }
+func (m *DismissRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*DismissRecommendationRequest) ProtoMessage()    {}
+func (*DismissRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{5}
+}
+
+func (m *DismissRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationRequest.Unmarshal(m, b)
+}
+func (m *DismissRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (m *DismissRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationRequest.Merge(m, src)
+}
+func (m *DismissRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationRequest.Size(m)
+}
+func (m *DismissRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationRequest proto.InternalMessageInfo
+
+func (m *DismissRecommendationRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *DismissRecommendationRequest) GetOperations() []*DismissRecommendationRequest_DismissRecommendationOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *DismissRecommendationRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+// Operation to dismiss a single recommendation identified by resource_name.
+type DismissRecommendationRequest_DismissRecommendationOperation struct {
+	// The resource name of the recommendation to dismiss.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) Reset() {
+	*m = DismissRecommendationRequest_DismissRecommendationOperation{}
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*DismissRecommendationRequest_DismissRecommendationOperation) ProtoMessage() {}
+func (*DismissRecommendationRequest_DismissRecommendationOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{5, 0}
+}
+
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Unmarshal(m, b)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Marshal(b, m, deterministic)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Merge(m, src)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Size(m)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation proto.InternalMessageInfo
+
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Response message for [RecommendationService.DismissRecommendation][google.ads.googleads.v3.services.RecommendationService.DismissRecommendation].
+type DismissRecommendationResponse struct {
+	// Results of operations to dismiss recommendations.
+	Results []*DismissRecommendationResponse_DismissRecommendationResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors)
+	// we return the RPC level error.
+	PartialFailureError  *status.Status `protobuf:"bytes,2,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *DismissRecommendationResponse) Reset()         { *m = DismissRecommendationResponse{} }
+func (m *DismissRecommendationResponse) String() string { return proto.CompactTextString(m) }
+func (*DismissRecommendationResponse) ProtoMessage()    {}
+func (*DismissRecommendationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{6}
+}
+
+func (m *DismissRecommendationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationResponse.Unmarshal(m, b)
+}
+func (m *DismissRecommendationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationResponse.Marshal(b, m, deterministic)
+}
+func (m *DismissRecommendationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationResponse.Merge(m, src)
+}
+func (m *DismissRecommendationResponse) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationResponse.Size(m)
+}
+func (m *DismissRecommendationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationResponse proto.InternalMessageInfo
+
+func (m *DismissRecommendationResponse) GetResults() []*DismissRecommendationResponse_DismissRecommendationResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *DismissRecommendationResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+// The result of dismissing a recommendation.
+type DismissRecommendationResponse_DismissRecommendationResult struct {
+	// Returned for successful dismissals.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DismissRecommendationResponse_DismissRecommendationResult) Reset() {
+	*m = DismissRecommendationResponse_DismissRecommendationResult{}
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*DismissRecommendationResponse_DismissRecommendationResult) ProtoMessage() {}
+func (*DismissRecommendationResponse_DismissRecommendationResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_973145c253202d21, []int{6, 0}
+}
+
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Unmarshal(m, b)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Marshal(b, m, deterministic)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Merge(m, src)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Size(m)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult proto.InternalMessageInfo
+
+func (m *DismissRecommendationResponse_DismissRecommendationResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetRecommendationRequest)(nil), "google.ads.googleads.v3.services.GetRecommendationRequest")
+	proto.RegisterType((*ApplyRecommendationRequest)(nil), "google.ads.googleads.v3.services.ApplyRecommendationRequest")
+	proto.RegisterType((*ApplyRecommendationOperation)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation")
+	proto.RegisterType((*ApplyRecommendationOperation_CampaignBudgetParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.CampaignBudgetParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_TextAdParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.TextAdParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_KeywordParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.KeywordParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_TargetCpaOptInParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.TargetCpaOptInParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_CalloutExtensionParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.CalloutExtensionParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_CallExtensionParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.CallExtensionParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_SitelinkExtensionParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.SitelinkExtensionParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_MoveUnusedBudgetParameters)(nil), "google.ads.googleads.v3.services.ApplyRecommendationOperation.MoveUnusedBudgetParameters")
+	proto.RegisterType((*ApplyRecommendationResponse)(nil), "google.ads.googleads.v3.services.ApplyRecommendationResponse")
+	proto.RegisterType((*ApplyRecommendationResult)(nil), "google.ads.googleads.v3.services.ApplyRecommendationResult")
+	proto.RegisterType((*DismissRecommendationRequest)(nil), "google.ads.googleads.v3.services.DismissRecommendationRequest")
+	proto.RegisterType((*DismissRecommendationRequest_DismissRecommendationOperation)(nil), "google.ads.googleads.v3.services.DismissRecommendationRequest.DismissRecommendationOperation")
+	proto.RegisterType((*DismissRecommendationResponse)(nil), "google.ads.googleads.v3.services.DismissRecommendationResponse")
+	proto.RegisterType((*DismissRecommendationResponse_DismissRecommendationResult)(nil), "google.ads.googleads.v3.services.DismissRecommendationResponse.DismissRecommendationResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/recommendation_service.proto", fileDescriptor_973145c253202d21)
+}
+
+var fileDescriptor_973145c253202d21 = []byte{
+	// 1396 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x41, 0x6f, 0xdc, 0xc4,
+	0x17, 0xff, 0xdb, 0xf9, 0xb7, 0x69, 0x27, 0x6d, 0x9a, 0x9d, 0x2a, 0x74, 0x71, 0xd2, 0x12, 0x96,
+	0x22, 0xa2, 0xa8, 0xb2, 0x69, 0x96, 0x16, 0xb4, 0x25, 0x05, 0x6f, 0x9b, 0xa6, 0x11, 0x6a, 0x1b,
+	0x6d, 0xd2, 0x54, 0x2d, 0x01, 0x6b, 0x62, 0x4f, 0xb7, 0xa6, 0xb6, 0x67, 0x98, 0x19, 0x27, 0x8d,
+	0x4a, 0x05, 0x54, 0x1c, 0x40, 0x1c, 0xf9, 0x06, 0x3d, 0xf2, 0x0d, 0x90, 0xb8, 0x72, 0xa9, 0x84,
+	0x84, 0xc4, 0xad, 0x27, 0x0e, 0x1c, 0x10, 0x1c, 0xe1, 0x03, 0x20, 0x8f, 0x3d, 0x9b, 0xf5, 0xee,
+	0x3a, 0xbb, 0xcd, 0x96, 0xdb, 0xec, 0xbc, 0x79, 0xbf, 0xdf, 0x7b, 0x6f, 0xe6, 0xfd, 0x66, 0xbc,
+	0x60, 0xa1, 0x49, 0x48, 0x33, 0xc0, 0x16, 0xf2, 0xb8, 0x95, 0x0e, 0x93, 0xd1, 0x56, 0xd5, 0xe2,
+	0x98, 0x6d, 0xf9, 0x2e, 0xe6, 0x16, 0xc3, 0x2e, 0x09, 0x43, 0x1c, 0x79, 0x48, 0xf8, 0x24, 0x72,
+	0xb2, 0x79, 0x93, 0x32, 0x22, 0x08, 0x9c, 0x49, 0x7d, 0x4c, 0xe4, 0x71, 0xb3, 0xe5, 0x6e, 0x6e,
+	0x55, 0x4d, 0xe5, 0x6e, 0x58, 0x45, 0x04, 0x09, 0x2a, 0x89, 0x2c, 0xfc, 0x40, 0xe0, 0x88, 0xfb,
+	0x24, 0xe2, 0x29, 0xa4, 0x71, 0xbe, 0xc8, 0x01, 0x47, 0x71, 0xc8, 0xad, 0xfb, 0x78, 0x67, 0x9b,
+	0x30, 0xcf, 0x09, 0x91, 0x70, 0xef, 0x39, 0x62, 0x87, 0x66, 0xa1, 0x18, 0x73, 0x45, 0x7e, 0x0c,
+	0x73, 0x12, 0xb3, 0x24, 0x15, 0xe4, 0xf5, 0xe3, 0xd8, 0x5d, 0x9b, 0x4f, 0x3b, 0xf3, 0x9b, 0x56,
+	0x7e, 0xd4, 0xb7, 0x50, 0x14, 0x11, 0x21, 0x8d, 0x2a, 0xf2, 0x13, 0x6d, 0x56, 0x37, 0xf0, 0x71,
+	0x24, 0x32, 0xc3, 0x2b, 0x6d, 0x86, 0xbb, 0x3e, 0x0e, 0x3c, 0x67, 0x13, 0xdf, 0x43, 0x5b, 0x3e,
+	0x61, 0xd9, 0x82, 0x53, 0xd9, 0x02, 0xf9, 0x6b, 0x33, 0xbe, 0x6b, 0x6d, 0x33, 0x44, 0x29, 0x66,
+	0x9d, 0xc8, 0x8c, 0xba, 0x16, 0x17, 0x48, 0xc4, 0x99, 0xa1, 0x72, 0x19, 0x94, 0x97, 0xb0, 0x68,
+	0xe4, 0x62, 0x6d, 0xe0, 0x4f, 0x63, 0xcc, 0x05, 0x9c, 0x05, 0x47, 0x55, 0x3a, 0x4e, 0x84, 0x42,
+	0x5c, 0xd6, 0x66, 0xb4, 0xd9, 0xc3, 0xf5, 0x91, 0xdf, 0x6c, 0xbd, 0x71, 0x44, 0x59, 0xae, 0xa3,
+	0x10, 0x57, 0x7e, 0xd1, 0x80, 0x61, 0x53, 0x1a, 0xec, 0xf4, 0x06, 0x3a, 0x0d, 0xc6, 0xdc, 0x98,
+	0x0b, 0x12, 0x62, 0xe6, 0xf8, 0x5e, 0x3b, 0x0c, 0x50, 0xf3, 0xcb, 0x1e, 0x74, 0x01, 0x20, 0x14,
+	0xb3, 0xb4, 0x22, 0x65, 0x7d, 0x66, 0x64, 0x76, 0x6c, 0xfe, 0xa2, 0xd9, 0xef, 0x7c, 0x98, 0x3d,
+	0x78, 0x6f, 0x28, 0x98, 0x8c, 0x64, 0x17, 0x16, 0xbe, 0x01, 0x8e, 0x51, 0xc4, 0x84, 0x8f, 0x02,
+	0xe7, 0x2e, 0xf2, 0x83, 0x98, 0xe1, 0xf2, 0xc8, 0x8c, 0x36, 0x7b, 0xa8, 0x31, 0x9e, 0x4d, 0x5f,
+	0x49, 0x67, 0x2b, 0x3f, 0x95, 0xc0, 0xf4, 0x5e, 0xd0, 0xf0, 0xb5, 0x9e, 0xd5, 0xc9, 0x17, 0x06,
+	0x3e, 0xd6, 0xc0, 0x31, 0x17, 0x85, 0x14, 0xf9, 0xcd, 0xc8, 0xd9, 0x8c, 0xbd, 0x26, 0x16, 0x65,
+	0x7d, 0x46, 0x9b, 0x1d, 0x9b, 0xbf, 0x35, 0x5c, 0x66, 0xe6, 0xa5, 0x0c, 0xb5, 0x2e, 0x41, 0x57,
+	0x10, 0x43, 0x21, 0x16, 0x98, 0xf1, 0xab, 0xff, 0x6b, 0x8c, 0xbb, 0x39, 0x1b, 0xfc, 0x04, 0x8c,
+	0x0a, 0xfc, 0x40, 0x38, 0xc8, 0x93, 0xb9, 0x8e, 0xcd, 0xdf, 0x18, 0x92, 0x7b, 0x0d, 0x3f, 0x10,
+	0xb6, 0x97, 0xe3, 0x3c, 0x28, 0xe4, 0x1c, 0x0c, 0xc0, 0x68, 0xd6, 0x60, 0xe5, 0xff, 0x4b, 0xae,
+	0x95, 0x21, 0xb9, 0x3e, 0x48, 0xd1, 0x72, 0x64, 0x8a, 0x02, 0x7e, 0xa5, 0x81, 0x92, 0x40, 0xac,
+	0x89, 0x85, 0xe3, 0x52, 0xe4, 0x10, 0x2a, 0x1c, 0x3f, 0x2a, 0x1f, 0x78, 0x21, 0x05, 0x5e, 0x93,
+	0xb8, 0x97, 0x28, 0xba, 0x41, 0xc5, 0x72, 0x94, 0x2f, 0xb0, 0xc8, 0xd9, 0xe0, 0xd7, 0x1a, 0x28,
+	0xb9, 0x28, 0x08, 0x48, 0x2c, 0x9c, 0x96, 0x1c, 0x95, 0x0f, 0xca, 0x30, 0x6e, 0x0f, 0xbd, 0xcf,
+	0x12, 0x77, 0x51, 0xc1, 0xe6, 0x02, 0x99, 0x70, 0x3b, 0xac, 0xf0, 0x73, 0x30, 0x9e, 0xcc, 0xb5,
+	0x85, 0x31, 0x2a, 0xc3, 0x58, 0x7f, 0x01, 0x61, 0xf4, 0x8e, 0xe1, 0xa8, 0xdb, 0x6e, 0x82, 0xdf,
+	0x6a, 0x00, 0x72, 0x5f, 0xe0, 0xc0, 0x8f, 0xee, 0xb7, 0x45, 0x71, 0x48, 0x46, 0x71, 0x67, 0xc8,
+	0x28, 0x56, 0x33, 0xe0, 0xde, 0x91, 0x94, 0x78, 0xa7, 0x19, 0x7e, 0xa3, 0x01, 0x18, 0x92, 0x2d,
+	0xec, 0xc4, 0x51, 0xcc, 0xb1, 0xa7, 0x5a, 0xf0, 0xf0, 0x0b, 0xd9, 0x9a, 0x6b, 0x64, 0x0b, 0xdf,
+	0x94, 0xb8, 0x3d, 0x9a, 0x70, 0x22, 0xec, 0xb0, 0x1a, 0x14, 0x94, 0x8b, 0x9a, 0x16, 0xae, 0x81,
+	0x72, 0x84, 0xb7, 0xb3, 0xf0, 0x1c, 0x14, 0x92, 0x38, 0x12, 0x4e, 0xe8, 0xbb, 0x8c, 0x70, 0xa9,
+	0x2b, 0x63, 0xf3, 0x53, 0x2a, 0x58, 0x25, 0xf1, 0xe6, 0x72, 0x24, 0xce, 0xbf, 0xb5, 0x8e, 0x82,
+	0x18, 0x37, 0x26, 0x23, 0xbc, 0x9d, 0x62, 0xda, 0xd2, 0xf5, 0x9a, 0xf4, 0x34, 0x96, 0xc1, 0x44,
+	0x67, 0xab, 0xc2, 0x73, 0x40, 0x47, 0x5e, 0x86, 0xf9, 0x7a, 0x61, 0x01, 0x5a, 0xd7, 0x98, 0x69,
+	0x7b, 0x0d, 0x1d, 0x79, 0xc6, 0x3f, 0x1a, 0x28, 0x75, 0xb5, 0x22, 0x7c, 0x1b, 0x1c, 0x42, 0x9e,
+	0xd3, 0x64, 0x24, 0xa6, 0x19, 0xe4, 0x74, 0x57, 0x98, 0xab, 0x82, 0xf9, 0x51, 0x33, 0x8d, 0x73,
+	0x14, 0x79, 0x4b, 0xc9, 0xe2, 0x44, 0xeb, 0x77, 0xef, 0x5f, 0xa9, 0x88, 0xe3, 0xf3, 0x97, 0x0b,
+	0xa3, 0x91, 0x17, 0xb7, 0x52, 0x82, 0x6b, 0x89, 0xdf, 0xda, 0x0e, 0xc5, 0x8b, 0x51, 0x1c, 0x76,
+	0x4d, 0x36, 0x0e, 0x87, 0x6a, 0x08, 0x6d, 0x30, 0xee, 0x52, 0xd7, 0xd9, 0xf4, 0x3d, 0x55, 0xca,
+	0x91, 0xfe, 0xa5, 0x3c, 0xe2, 0x52, 0xb7, 0xee, 0x7b, 0x59, 0x05, 0x9f, 0x6a, 0xa0, 0x5c, 0x24,
+	0x04, 0x70, 0x29, 0x27, 0x3e, 0x83, 0xef, 0xd6, 0xb1, 0x96, 0x7c, 0xa4, 0x2c, 0x10, 0x83, 0x57,
+	0x93, 0xdd, 0xef, 0xb8, 0x28, 0x3a, 0x8e, 0x81, 0xde, 0x1f, 0xf8, 0x64, 0x84, 0xb7, 0xf3, 0x47,
+	0x2c, 0x77, 0x1c, 0x3e, 0x03, 0x46, 0xb1, 0x9a, 0xc0, 0x8f, 0x01, 0xec, 0xd2, 0xb0, 0x24, 0x9d,
+	0xe4, 0x1a, 0xb6, 0x0a, 0xb7, 0x26, 0x7d, 0x84, 0x29, 0x95, 0xba, 0x82, 0xb1, 0xb7, 0x2c, 0x70,
+	0xd8, 0x28, 0x75, 0x0a, 0x13, 0x37, 0x28, 0x38, 0x51, 0x20, 0x22, 0xf0, 0x66, 0x72, 0x49, 0xb6,
+	0x8b, 0x96, 0xe2, 0x3d, 0x33, 0x08, 0x6f, 0x8b, 0x74, 0x3c, 0xa7, 0x44, 0xdc, 0xf8, 0x42, 0x03,
+	0x53, 0x7b, 0x28, 0x06, 0x44, 0xe0, 0x78, 0xb7, 0x52, 0x29, 0xea, 0x37, 0xfb, 0x51, 0x2b, 0xe4,
+	0x16, 0x3d, 0xec, 0x92, 0x1f, 0x6e, 0x04, 0xc0, 0x28, 0x56, 0x09, 0x78, 0x1d, 0x4c, 0x66, 0x5b,
+	0x9d, 0xee, 0xb1, 0x23, 0x88, 0x93, 0xc8, 0xc6, 0x20, 0x87, 0x08, 0xa6, 0x9e, 0xe9, 0xd6, 0xae,
+	0x91, 0x84, 0xa5, 0x0e, 0xc1, 0x04, 0x4a, 0x04, 0xcb, 0xa1, 0x2d, 0x8e, 0xca, 0x8f, 0x1a, 0x98,
+	0xea, 0xf9, 0x34, 0xe3, 0x94, 0x44, 0x1c, 0xc3, 0x9b, 0x60, 0x94, 0x61, 0x1e, 0x07, 0x42, 0x25,
+	0x7e, 0x61, 0x5f, 0xaa, 0xd8, 0x90, 0x18, 0x0d, 0x85, 0x05, 0xaf, 0x80, 0xc9, 0x8e, 0x77, 0x96,
+	0x83, 0x19, 0x23, 0x2c, 0x3b, 0xc6, 0x50, 0x91, 0x30, 0xea, 0x9a, 0xab, 0xf2, 0x41, 0xda, 0x38,
+	0x9e, 0x7f, 0x81, 0x2d, 0x26, 0xcb, 0x2b, 0xef, 0x83, 0x97, 0x0b, 0xd9, 0x06, 0x7a, 0x82, 0x55,
+	0x7e, 0xd0, 0xc1, 0xf4, 0x65, 0x9f, 0x87, 0x3e, 0xe7, 0xc3, 0xbc, 0x4e, 0x1f, 0x6b, 0xb9, 0xe7,
+	0xe9, 0x88, 0xac, 0xd5, 0x47, 0xfd, 0x6b, 0xb5, 0x17, 0x75, 0x6f, 0xe3, 0xf3, 0xbd, 0x5e, 0xf5,
+	0x5e, 0xaf, 0x57, 0x63, 0x11, 0x9c, 0xda, 0x1b, 0x7b, 0xb0, 0xda, 0x3d, 0xd1, 0xc1, 0xc9, 0x82,
+	0x04, 0xb2, 0xe3, 0x13, 0x77, 0x1e, 0x9f, 0x0f, 0xf7, 0x5d, 0x92, 0x14, 0xb1, 0xd0, 0xfa, 0x5f,
+	0x1c, 0x2f, 0xa3, 0x0e, 0xa6, 0xf6, 0xe0, 0x1b, 0xa8, 0x48, 0xf3, 0x7f, 0x1c, 0x00, 0x93, 0x79,
+	0xef, 0xd5, 0x34, 0x53, 0xf8, 0xb3, 0x06, 0x4a, 0x5d, 0x5f, 0x57, 0xb0, 0xd6, 0xbf, 0x42, 0x45,
+	0x9f, 0x64, 0xc6, 0xd9, 0x01, 0x6e, 0xec, 0xbc, 0x67, 0x65, 0xf9, 0x99, 0x9d, 0x4f, 0xe2, 0xf1,
+	0xaf, 0xbf, 0x7f, 0xa7, 0x57, 0xe1, 0xd9, 0xe4, 0x73, 0xf5, 0x61, 0xce, 0xb2, 0xa0, 0xce, 0x3b,
+	0xb7, 0xe6, 0x3a, 0xbe, 0x5f, 0xb9, 0x35, 0xf7, 0x08, 0xfe, 0xa5, 0x81, 0xe3, 0x3d, 0xba, 0x11,
+	0xbe, 0xbb, 0x4f, 0xc9, 0x48, 0x73, 0x5a, 0xd8, 0xaf, 0xe0, 0xc8, 0xf3, 0x52, 0xb9, 0xf5, 0xcc,
+	0x7e, 0xa9, 0xad, 0x7f, 0xcf, 0xec, 0xb6, 0x8b, 0x4c, 0xf4, 0x9d, 0x4a, 0x55, 0xfe, 0x59, 0xd0,
+	0xca, 0xec, 0x61, 0xdb, 0xe2, 0x85, 0xb9, 0x47, 0x9d, 0x79, 0xd6, 0xa4, 0x82, 0xd6, 0xb4, 0x39,
+	0xf8, 0xb7, 0x06, 0x26, 0x7b, 0x1e, 0x0e, 0x78, 0x71, 0xb8, 0xb6, 0x37, 0xde, 0x1b, 0xb2, 0x47,
+	0x2a, 0xb7, 0xf7, 0xce, 0xb9, 0x56, 0x39, 0xf7, 0x7c, 0x39, 0x7b, 0x29, 0x5b, 0x4d, 0x9b, 0x33,
+	0xa6, 0x9e, 0xda, 0xe5, 0xdd, 0x90, 0xb2, 0x11, 0xf5, 0x79, 0x72, 0xed, 0xd5, 0xbf, 0xd4, 0xc1,
+	0x69, 0x97, 0x84, 0x7d, 0xc3, 0xaf, 0x1b, 0x3d, 0x1b, 0x62, 0x25, 0xb9, 0xc7, 0x56, 0xb4, 0x3b,
+	0x57, 0x33, 0xff, 0x26, 0x09, 0x50, 0xd4, 0x34, 0x09, 0x6b, 0x5a, 0x4d, 0x1c, 0xc9, 0x5b, 0xce,
+	0xda, 0x65, 0x2c, 0xfe, 0x4b, 0xe9, 0x82, 0x1a, 0x3c, 0xd1, 0x47, 0x96, 0x6c, 0xfb, 0x7b, 0x7d,
+	0x66, 0x29, 0x05, 0xb4, 0x3d, 0x6e, 0xa6, 0xc3, 0x64, 0xb4, 0x5e, 0x35, 0x33, 0x62, 0xfe, 0x54,
+	0x2d, 0xd9, 0xb0, 0x3d, 0xbe, 0xd1, 0x5a, 0xb2, 0xb1, 0x5e, 0xdd, 0x50, 0x4b, 0xfe, 0xd4, 0x4f,
+	0xa7, 0xf3, 0xb5, 0x9a, 0xed, 0xf1, 0x5a, 0xad, 0xb5, 0xa8, 0x56, 0x5b, 0xaf, 0xd6, 0x6a, 0x6a,
+	0xd9, 0xe6, 0x41, 0x19, 0x67, 0xf5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0x44, 0x72, 0xfa,
+	0xf9, 0x12, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// RecommendationServiceClient is the client API for RecommendationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type RecommendationServiceClient interface {
+	// Returns the requested recommendation in full detail.
+	GetRecommendation(ctx context.Context, in *GetRecommendationRequest, opts ...grpc.CallOption) (*resources.Recommendation, error)
+	// Applies given recommendations with corresponding apply parameters.
+	ApplyRecommendation(ctx context.Context, in *ApplyRecommendationRequest, opts ...grpc.CallOption) (*ApplyRecommendationResponse, error)
+	// Dismisses given recommendations.
+	DismissRecommendation(ctx context.Context, in *DismissRecommendationRequest, opts ...grpc.CallOption) (*DismissRecommendationResponse, error)
+}
+
+type recommendationServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewRecommendationServiceClient(cc grpc.ClientConnInterface) RecommendationServiceClient {
+	return &recommendationServiceClient{cc}
+}
+
+func (c *recommendationServiceClient) GetRecommendation(ctx context.Context, in *GetRecommendationRequest, opts ...grpc.CallOption) (*resources.Recommendation, error) {
+	out := new(resources.Recommendation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.RecommendationService/GetRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *recommendationServiceClient) ApplyRecommendation(ctx context.Context, in *ApplyRecommendationRequest, opts ...grpc.CallOption) (*ApplyRecommendationResponse, error) {
+	out := new(ApplyRecommendationResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.RecommendationService/ApplyRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *recommendationServiceClient) DismissRecommendation(ctx context.Context, in *DismissRecommendationRequest, opts ...grpc.CallOption) (*DismissRecommendationResponse, error) {
+	out := new(DismissRecommendationResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.RecommendationService/DismissRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// RecommendationServiceServer is the server API for RecommendationService service.
+type RecommendationServiceServer interface {
+	// Returns the requested recommendation in full detail.
+	GetRecommendation(context.Context, *GetRecommendationRequest) (*resources.Recommendation, error)
+	// Applies given recommendations with corresponding apply parameters.
+	ApplyRecommendation(context.Context, *ApplyRecommendationRequest) (*ApplyRecommendationResponse, error)
+	// Dismisses given recommendations.
+	DismissRecommendation(context.Context, *DismissRecommendationRequest) (*DismissRecommendationResponse, error)
+}
+
+// UnimplementedRecommendationServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedRecommendationServiceServer struct {
+}
+
+func (*UnimplementedRecommendationServiceServer) GetRecommendation(ctx context.Context, req *GetRecommendationRequest) (*resources.Recommendation, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetRecommendation not implemented")
+}
+func (*UnimplementedRecommendationServiceServer) ApplyRecommendation(ctx context.Context, req *ApplyRecommendationRequest) (*ApplyRecommendationResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method ApplyRecommendation not implemented")
+}
+func (*UnimplementedRecommendationServiceServer) DismissRecommendation(ctx context.Context, req *DismissRecommendationRequest) (*DismissRecommendationResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method DismissRecommendation not implemented")
+}
+
+func RegisterRecommendationServiceServer(s *grpc.Server, srv RecommendationServiceServer) {
+	s.RegisterService(&_RecommendationService_serviceDesc, srv)
+}
+
+func _RecommendationService_GetRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).GetRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.RecommendationService/GetRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).GetRecommendation(ctx, req.(*GetRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RecommendationService_ApplyRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ApplyRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).ApplyRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.RecommendationService/ApplyRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).ApplyRecommendation(ctx, req.(*ApplyRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RecommendationService_DismissRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DismissRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).DismissRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.RecommendationService/DismissRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).DismissRecommendation(ctx, req.(*DismissRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _RecommendationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.RecommendationService",
+	HandlerType: (*RecommendationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetRecommendation",
+			Handler:    _RecommendationService_GetRecommendation_Handler,
+		},
+		{
+			MethodName: "ApplyRecommendation",
+			Handler:    _RecommendationService_ApplyRecommendation_Handler,
+		},
+		{
+			MethodName: "DismissRecommendation",
+			Handler:    _RecommendationService_DismissRecommendation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/recommendation_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/remarketing_action_service.pb.go b/googleapis/ads/googleads/v3/services/remarketing_action_service.pb.go
new file mode 100644
index 0000000..a23c748
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/remarketing_action_service.pb.go
@@ -0,0 +1,513 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/remarketing_action_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [RemarketingActionService.GetRemarketingAction][google.ads.googleads.v3.services.RemarketingActionService.GetRemarketingAction].
+type GetRemarketingActionRequest struct {
+	// Required. The resource name of the remarketing action to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetRemarketingActionRequest) Reset()         { *m = GetRemarketingActionRequest{} }
+func (m *GetRemarketingActionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetRemarketingActionRequest) ProtoMessage()    {}
+func (*GetRemarketingActionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_890528f85438186a, []int{0}
+}
+
+func (m *GetRemarketingActionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetRemarketingActionRequest.Unmarshal(m, b)
+}
+func (m *GetRemarketingActionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetRemarketingActionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetRemarketingActionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetRemarketingActionRequest.Merge(m, src)
+}
+func (m *GetRemarketingActionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetRemarketingActionRequest.Size(m)
+}
+func (m *GetRemarketingActionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetRemarketingActionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetRemarketingActionRequest proto.InternalMessageInfo
+
+func (m *GetRemarketingActionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [RemarketingActionService.MutateRemarketingActions][google.ads.googleads.v3.services.RemarketingActionService.MutateRemarketingActions].
+type MutateRemarketingActionsRequest struct {
+	// Required. The ID of the customer whose remarketing actions are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual remarketing actions.
+	Operations []*RemarketingActionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateRemarketingActionsRequest) Reset()         { *m = MutateRemarketingActionsRequest{} }
+func (m *MutateRemarketingActionsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateRemarketingActionsRequest) ProtoMessage()    {}
+func (*MutateRemarketingActionsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_890528f85438186a, []int{1}
+}
+
+func (m *MutateRemarketingActionsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateRemarketingActionsRequest.Unmarshal(m, b)
+}
+func (m *MutateRemarketingActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateRemarketingActionsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateRemarketingActionsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateRemarketingActionsRequest.Merge(m, src)
+}
+func (m *MutateRemarketingActionsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateRemarketingActionsRequest.Size(m)
+}
+func (m *MutateRemarketingActionsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateRemarketingActionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateRemarketingActionsRequest proto.InternalMessageInfo
+
+func (m *MutateRemarketingActionsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateRemarketingActionsRequest) GetOperations() []*RemarketingActionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateRemarketingActionsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateRemarketingActionsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update) on a remarketing action.
+type RemarketingActionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*RemarketingActionOperation_Create
+	//	*RemarketingActionOperation_Update
+	Operation            isRemarketingActionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *RemarketingActionOperation) Reset()         { *m = RemarketingActionOperation{} }
+func (m *RemarketingActionOperation) String() string { return proto.CompactTextString(m) }
+func (*RemarketingActionOperation) ProtoMessage()    {}
+func (*RemarketingActionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_890528f85438186a, []int{2}
+}
+
+func (m *RemarketingActionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RemarketingActionOperation.Unmarshal(m, b)
+}
+func (m *RemarketingActionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RemarketingActionOperation.Marshal(b, m, deterministic)
+}
+func (m *RemarketingActionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RemarketingActionOperation.Merge(m, src)
+}
+func (m *RemarketingActionOperation) XXX_Size() int {
+	return xxx_messageInfo_RemarketingActionOperation.Size(m)
+}
+func (m *RemarketingActionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_RemarketingActionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RemarketingActionOperation proto.InternalMessageInfo
+
+func (m *RemarketingActionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isRemarketingActionOperation_Operation interface {
+	isRemarketingActionOperation_Operation()
+}
+
+type RemarketingActionOperation_Create struct {
+	Create *resources.RemarketingAction `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type RemarketingActionOperation_Update struct {
+	Update *resources.RemarketingAction `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+func (*RemarketingActionOperation_Create) isRemarketingActionOperation_Operation() {}
+
+func (*RemarketingActionOperation_Update) isRemarketingActionOperation_Operation() {}
+
+func (m *RemarketingActionOperation) GetOperation() isRemarketingActionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *RemarketingActionOperation) GetCreate() *resources.RemarketingAction {
+	if x, ok := m.GetOperation().(*RemarketingActionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *RemarketingActionOperation) GetUpdate() *resources.RemarketingAction {
+	if x, ok := m.GetOperation().(*RemarketingActionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*RemarketingActionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*RemarketingActionOperation_Create)(nil),
+		(*RemarketingActionOperation_Update)(nil),
+	}
+}
+
+// Response message for remarketing action mutate.
+type MutateRemarketingActionsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateRemarketingActionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateRemarketingActionsResponse) Reset()         { *m = MutateRemarketingActionsResponse{} }
+func (m *MutateRemarketingActionsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateRemarketingActionsResponse) ProtoMessage()    {}
+func (*MutateRemarketingActionsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_890528f85438186a, []int{3}
+}
+
+func (m *MutateRemarketingActionsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateRemarketingActionsResponse.Unmarshal(m, b)
+}
+func (m *MutateRemarketingActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateRemarketingActionsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateRemarketingActionsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateRemarketingActionsResponse.Merge(m, src)
+}
+func (m *MutateRemarketingActionsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateRemarketingActionsResponse.Size(m)
+}
+func (m *MutateRemarketingActionsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateRemarketingActionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateRemarketingActionsResponse proto.InternalMessageInfo
+
+func (m *MutateRemarketingActionsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateRemarketingActionsResponse) GetResults() []*MutateRemarketingActionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the remarketing action mutate.
+type MutateRemarketingActionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateRemarketingActionResult) Reset()         { *m = MutateRemarketingActionResult{} }
+func (m *MutateRemarketingActionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateRemarketingActionResult) ProtoMessage()    {}
+func (*MutateRemarketingActionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_890528f85438186a, []int{4}
+}
+
+func (m *MutateRemarketingActionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateRemarketingActionResult.Unmarshal(m, b)
+}
+func (m *MutateRemarketingActionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateRemarketingActionResult.Marshal(b, m, deterministic)
+}
+func (m *MutateRemarketingActionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateRemarketingActionResult.Merge(m, src)
+}
+func (m *MutateRemarketingActionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateRemarketingActionResult.Size(m)
+}
+func (m *MutateRemarketingActionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateRemarketingActionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateRemarketingActionResult proto.InternalMessageInfo
+
+func (m *MutateRemarketingActionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetRemarketingActionRequest)(nil), "google.ads.googleads.v3.services.GetRemarketingActionRequest")
+	proto.RegisterType((*MutateRemarketingActionsRequest)(nil), "google.ads.googleads.v3.services.MutateRemarketingActionsRequest")
+	proto.RegisterType((*RemarketingActionOperation)(nil), "google.ads.googleads.v3.services.RemarketingActionOperation")
+	proto.RegisterType((*MutateRemarketingActionsResponse)(nil), "google.ads.googleads.v3.services.MutateRemarketingActionsResponse")
+	proto.RegisterType((*MutateRemarketingActionResult)(nil), "google.ads.googleads.v3.services.MutateRemarketingActionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/remarketing_action_service.proto", fileDescriptor_890528f85438186a)
+}
+
+var fileDescriptor_890528f85438186a = []byte{
+	// 757 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcd, 0x6a, 0xdb, 0x4a,
+	0x14, 0xc7, 0xaf, 0xe4, 0x90, 0x7b, 0x33, 0x4e, 0xee, 0x85, 0xb9, 0xf7, 0xb6, 0xc2, 0x69, 0x88,
+	0x51, 0x03, 0x35, 0xa6, 0x48, 0x60, 0x87, 0x16, 0x94, 0x84, 0x22, 0xd3, 0xc6, 0x29, 0x34, 0x1f,
+	0x28, 0x10, 0x68, 0x6b, 0x10, 0x13, 0x69, 0xe2, 0x8a, 0x48, 0x1a, 0x75, 0x66, 0x64, 0x08, 0x21,
+	0x9b, 0x52, 0xfa, 0x02, 0xed, 0x13, 0x74, 0xd9, 0xf7, 0xe8, 0x26, 0xdb, 0xae, 0x9a, 0x55, 0x17,
+	0x5d, 0xf5, 0x09, 0xba, 0x2a, 0x45, 0x1f, 0xe3, 0x8f, 0xd8, 0x8a, 0x21, 0xd9, 0x1d, 0xcf, 0xf9,
+	0xeb, 0x77, 0xce, 0x99, 0x73, 0xe6, 0x18, 0x98, 0x5d, 0x42, 0xba, 0x3e, 0xd6, 0x91, 0xcb, 0xf4,
+	0xcc, 0x4c, 0xac, 0x5e, 0x53, 0x67, 0x98, 0xf6, 0x3c, 0x07, 0x33, 0x9d, 0xe2, 0x00, 0xd1, 0x63,
+	0xcc, 0xbd, 0xb0, 0x6b, 0x23, 0x87, 0x7b, 0x24, 0xb4, 0x73, 0x9f, 0x16, 0x51, 0xc2, 0x09, 0xac,
+	0x66, 0xdf, 0x69, 0xc8, 0x65, 0x5a, 0x1f, 0xa1, 0xf5, 0x9a, 0x9a, 0x40, 0x54, 0x8c, 0xa2, 0x20,
+	0x14, 0x33, 0x12, 0xd3, 0xc9, 0x51, 0x32, 0x7a, 0xe5, 0x8e, 0xf8, 0x36, 0xf2, 0x74, 0x14, 0x86,
+	0x84, 0xa3, 0xc4, 0xc9, 0x72, 0xef, 0xed, 0x21, 0xaf, 0xe3, 0x7b, 0x38, 0xe4, 0xb9, 0x63, 0x79,
+	0xc8, 0x71, 0xe4, 0x61, 0xdf, 0xb5, 0x0f, 0xf1, 0x2b, 0xd4, 0xf3, 0x08, 0xcd, 0x05, 0x79, 0xd6,
+	0x7a, 0xfa, 0xeb, 0x30, 0x3e, 0xca, 0x55, 0x01, 0x62, 0xc7, 0x97, 0xd8, 0x34, 0x72, 0x74, 0xc6,
+	0x11, 0x8f, 0xf3, 0xa0, 0x6a, 0x1b, 0x2c, 0xb6, 0x31, 0xb7, 0x06, 0x19, 0x9b, 0x69, 0xc2, 0x16,
+	0x7e, 0x1d, 0x63, 0xc6, 0x61, 0x0d, 0x2c, 0x88, 0xba, 0xec, 0x10, 0x05, 0x58, 0x91, 0xaa, 0x52,
+	0x6d, 0xae, 0x55, 0xfa, 0x66, 0xca, 0xd6, 0xbc, 0xf0, 0xec, 0xa0, 0x00, 0xab, 0x3f, 0x25, 0xb0,
+	0xbc, 0x1d, 0x73, 0xc4, 0xf1, 0x18, 0x8c, 0x09, 0xda, 0x0a, 0x28, 0x3b, 0x31, 0xe3, 0x24, 0xc0,
+	0xd4, 0xf6, 0xdc, 0x61, 0x16, 0x10, 0xe7, 0x4f, 0x5d, 0x88, 0x00, 0x20, 0x11, 0xa6, 0xd9, 0xdd,
+	0x28, 0x72, 0xb5, 0x54, 0x2b, 0x37, 0xd6, 0xb5, 0x69, 0x8d, 0xd1, 0xc6, 0xc2, 0xee, 0x0a, 0x48,
+	0x1e, 0x62, 0x00, 0x85, 0xf7, 0xc0, 0x3f, 0x11, 0xa2, 0xdc, 0x43, 0xbe, 0x7d, 0x84, 0x3c, 0x3f,
+	0xa6, 0x58, 0x29, 0x55, 0xa5, 0xda, 0x5f, 0xd6, 0xdf, 0xf9, 0xf1, 0x66, 0x76, 0x0a, 0xef, 0x82,
+	0x85, 0x1e, 0xf2, 0x3d, 0x17, 0x71, 0x6c, 0x93, 0xd0, 0x3f, 0x51, 0x66, 0x52, 0xd9, 0xbc, 0x38,
+	0xdc, 0x0d, 0xfd, 0x13, 0xf5, 0x9d, 0x0c, 0x2a, 0xc5, 0xd1, 0xe1, 0x1a, 0x28, 0xc7, 0x51, 0x4a,
+	0x48, 0x1a, 0x92, 0x12, 0xca, 0x8d, 0x8a, 0x28, 0x48, 0xf4, 0x4c, 0xdb, 0x4c, 0x7a, 0xb6, 0x8d,
+	0xd8, 0xb1, 0x05, 0x32, 0x79, 0x62, 0xc3, 0x1d, 0x30, 0xeb, 0x50, 0x8c, 0x78, 0x76, 0xf3, 0xe5,
+	0xc6, 0x6a, 0xe1, 0x45, 0xf4, 0xe7, 0x6f, 0xfc, 0x26, 0xb6, 0xfe, 0xb0, 0x72, 0x4a, 0xc2, 0xcb,
+	0xe8, 0x8a, 0x7c, 0x33, 0x5e, 0x46, 0x69, 0x95, 0xc1, 0x5c, 0xff, 0x5e, 0xd5, 0xcf, 0x12, 0xa8,
+	0x16, 0xcf, 0x00, 0x8b, 0x48, 0xc8, 0x30, 0xdc, 0x04, 0xff, 0x5f, 0xba, 0x7b, 0x1b, 0x53, 0x4a,
+	0x68, 0xda, 0x81, 0x72, 0x03, 0x8a, 0x84, 0x68, 0xe4, 0x68, 0xfb, 0xe9, 0xa8, 0x5a, 0xff, 0x8e,
+	0x76, 0xe5, 0x49, 0x22, 0x87, 0xcf, 0xc1, 0x9f, 0x14, 0xb3, 0xd8, 0xe7, 0x62, 0x46, 0x1e, 0x4d,
+	0x9f, 0x91, 0x82, 0xe4, 0xac, 0x94, 0x63, 0x09, 0x9e, 0xfa, 0x18, 0x2c, 0x5d, 0xa9, 0x4c, 0xc6,
+	0x62, 0xc2, 0xb3, 0x18, 0x7d, 0x11, 0x8d, 0x0f, 0x33, 0x40, 0x19, 0x03, 0xec, 0x67, 0xa9, 0xc0,
+	0xaf, 0x12, 0xf8, 0x6f, 0xd2, 0xc3, 0x83, 0x1b, 0xd3, 0xab, 0xb8, 0xe2, 0xc1, 0x56, 0xae, 0xd5,
+	0x4f, 0xf5, 0xd9, 0x85, 0x39, 0x5a, 0xd0, 0x9b, 0x2f, 0xdf, 0xdf, 0xcb, 0x0f, 0xe0, 0x6a, 0xb2,
+	0xd8, 0x4e, 0x47, 0x3c, 0x1b, 0xe2, 0xa5, 0x32, 0xbd, 0x3e, 0xbc, 0xe9, 0xf2, 0x36, 0xeb, 0xf5,
+	0x33, 0xf8, 0x4b, 0x02, 0x4a, 0xd1, 0x18, 0x40, 0xf3, 0xda, 0x5d, 0x12, 0x6b, 0xa4, 0xd2, 0xba,
+	0x09, 0x22, 0x9b, 0x42, 0xf5, 0xe5, 0x85, 0x79, 0x6b, 0x68, 0x17, 0xdd, 0x1f, 0x2c, 0x87, 0xb4,
+	0xf4, 0x75, 0xf5, 0x61, 0x52, 0xfa, 0xa0, 0xd6, 0xd3, 0x21, 0xf1, 0x46, 0xfd, 0x6c, 0x42, 0xe5,
+	0x46, 0x90, 0xc6, 0x34, 0xa4, 0x7a, 0x65, 0xf1, 0xdc, 0x54, 0x06, 0x79, 0xe5, 0x56, 0xe4, 0x31,
+	0xcd, 0x21, 0x41, 0xeb, 0xad, 0x0c, 0x56, 0x1c, 0x12, 0x4c, 0xad, 0xa1, 0xb5, 0x54, 0x34, 0x3c,
+	0x7b, 0xc9, 0xca, 0xd8, 0x93, 0x5e, 0x6c, 0xe5, 0x88, 0x2e, 0xf1, 0x51, 0xd8, 0xd5, 0x08, 0xed,
+	0xea, 0x5d, 0x1c, 0xa6, 0x0b, 0x45, 0x1f, 0x04, 0x2d, 0xfe, 0x3b, 0x5c, 0x13, 0xc6, 0x47, 0xb9,
+	0xd4, 0x36, 0xcd, 0x4f, 0x72, 0xb5, 0x9d, 0x01, 0x4d, 0x97, 0x69, 0x99, 0x99, 0x58, 0x07, 0x4d,
+	0x2d, 0x0f, 0xcc, 0xce, 0x85, 0xa4, 0x63, 0xba, 0xac, 0xd3, 0x97, 0x74, 0x0e, 0x9a, 0x1d, 0x21,
+	0xf9, 0x21, 0xaf, 0x64, 0xe7, 0x86, 0x61, 0xba, 0xcc, 0x30, 0xfa, 0x22, 0xc3, 0x38, 0x68, 0x1a,
+	0x86, 0x90, 0x1d, 0xce, 0xa6, 0x79, 0x36, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x1a, 0x5b,
+	0x02, 0xb5, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// RemarketingActionServiceClient is the client API for RemarketingActionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type RemarketingActionServiceClient interface {
+	// Returns the requested remarketing action in full detail.
+	GetRemarketingAction(ctx context.Context, in *GetRemarketingActionRequest, opts ...grpc.CallOption) (*resources.RemarketingAction, error)
+	// Creates or updates remarketing actions. Operation statuses are returned.
+	MutateRemarketingActions(ctx context.Context, in *MutateRemarketingActionsRequest, opts ...grpc.CallOption) (*MutateRemarketingActionsResponse, error)
+}
+
+type remarketingActionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewRemarketingActionServiceClient(cc grpc.ClientConnInterface) RemarketingActionServiceClient {
+	return &remarketingActionServiceClient{cc}
+}
+
+func (c *remarketingActionServiceClient) GetRemarketingAction(ctx context.Context, in *GetRemarketingActionRequest, opts ...grpc.CallOption) (*resources.RemarketingAction, error) {
+	out := new(resources.RemarketingAction)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.RemarketingActionService/GetRemarketingAction", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *remarketingActionServiceClient) MutateRemarketingActions(ctx context.Context, in *MutateRemarketingActionsRequest, opts ...grpc.CallOption) (*MutateRemarketingActionsResponse, error) {
+	out := new(MutateRemarketingActionsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.RemarketingActionService/MutateRemarketingActions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// RemarketingActionServiceServer is the server API for RemarketingActionService service.
+type RemarketingActionServiceServer interface {
+	// Returns the requested remarketing action in full detail.
+	GetRemarketingAction(context.Context, *GetRemarketingActionRequest) (*resources.RemarketingAction, error)
+	// Creates or updates remarketing actions. Operation statuses are returned.
+	MutateRemarketingActions(context.Context, *MutateRemarketingActionsRequest) (*MutateRemarketingActionsResponse, error)
+}
+
+// UnimplementedRemarketingActionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedRemarketingActionServiceServer struct {
+}
+
+func (*UnimplementedRemarketingActionServiceServer) GetRemarketingAction(ctx context.Context, req *GetRemarketingActionRequest) (*resources.RemarketingAction, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetRemarketingAction not implemented")
+}
+func (*UnimplementedRemarketingActionServiceServer) MutateRemarketingActions(ctx context.Context, req *MutateRemarketingActionsRequest) (*MutateRemarketingActionsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateRemarketingActions not implemented")
+}
+
+func RegisterRemarketingActionServiceServer(s *grpc.Server, srv RemarketingActionServiceServer) {
+	s.RegisterService(&_RemarketingActionService_serviceDesc, srv)
+}
+
+func _RemarketingActionService_GetRemarketingAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetRemarketingActionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RemarketingActionServiceServer).GetRemarketingAction(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.RemarketingActionService/GetRemarketingAction",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RemarketingActionServiceServer).GetRemarketingAction(ctx, req.(*GetRemarketingActionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RemarketingActionService_MutateRemarketingActions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateRemarketingActionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RemarketingActionServiceServer).MutateRemarketingActions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.RemarketingActionService/MutateRemarketingActions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RemarketingActionServiceServer).MutateRemarketingActions(ctx, req.(*MutateRemarketingActionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _RemarketingActionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.RemarketingActionService",
+	HandlerType: (*RemarketingActionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetRemarketingAction",
+			Handler:    _RemarketingActionService_GetRemarketingAction_Handler,
+		},
+		{
+			MethodName: "MutateRemarketingActions",
+			Handler:    _RemarketingActionService_MutateRemarketingActions_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/remarketing_action_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/search_term_view_service.pb.go b/googleapis/ads/googleads/v3/services/search_term_view_service.pb.go
new file mode 100644
index 0000000..0d71709
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/search_term_view_service.pb.go
@@ -0,0 +1,190 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/search_term_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [SearchTermViewService.GetSearchTermView][google.ads.googleads.v3.services.SearchTermViewService.GetSearchTermView].
+type GetSearchTermViewRequest struct {
+	// Required. The resource name of the search term view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSearchTermViewRequest) Reset()         { *m = GetSearchTermViewRequest{} }
+func (m *GetSearchTermViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSearchTermViewRequest) ProtoMessage()    {}
+func (*GetSearchTermViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1667b609515952c8, []int{0}
+}
+
+func (m *GetSearchTermViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSearchTermViewRequest.Unmarshal(m, b)
+}
+func (m *GetSearchTermViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSearchTermViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetSearchTermViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSearchTermViewRequest.Merge(m, src)
+}
+func (m *GetSearchTermViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSearchTermViewRequest.Size(m)
+}
+func (m *GetSearchTermViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSearchTermViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSearchTermViewRequest proto.InternalMessageInfo
+
+func (m *GetSearchTermViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSearchTermViewRequest)(nil), "google.ads.googleads.v3.services.GetSearchTermViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/search_term_view_service.proto", fileDescriptor_1667b609515952c8)
+}
+
+var fileDescriptor_1667b609515952c8 = []byte{
+	// 417 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x6b, 0xd4, 0x40,
+	0x14, 0x27, 0x29, 0x08, 0x06, 0x3d, 0x18, 0x10, 0x97, 0x28, 0xb8, 0x94, 0x1e, 0x4a, 0x0f, 0x33,
+	0xd4, 0x5c, 0x64, 0x44, 0x64, 0x16, 0x61, 0xf5, 0x22, 0xa5, 0x95, 0x1c, 0x24, 0x10, 0xa6, 0xc9,
+	0x33, 0x1d, 0x48, 0x32, 0xeb, 0xbc, 0xd9, 0xf4, 0x20, 0x1e, 0x14, 0xbf, 0x81, 0xdf, 0xc0, 0xa3,
+	0x1f, 0xa5, 0xe0, 0xc9, 0x9b, 0x27, 0x0f, 0x9e, 0xfc, 0x14, 0x92, 0x9d, 0x4c, 0xda, 0xd0, 0x86,
+	0xbd, 0xfd, 0xc8, 0xef, 0xdf, 0xbc, 0xf7, 0x12, 0xbc, 0x28, 0x95, 0x2a, 0x2b, 0xa0, 0xa2, 0x40,
+	0x6a, 0x61, 0x87, 0xda, 0x98, 0x22, 0xe8, 0x56, 0xe6, 0x80, 0x14, 0x41, 0xe8, 0xfc, 0x2c, 0x33,
+	0xa0, 0xeb, 0xac, 0x95, 0x70, 0x9e, 0xf5, 0x0c, 0x59, 0x69, 0x65, 0x54, 0x38, 0xb7, 0x2e, 0x22,
+	0x0a, 0x24, 0x43, 0x00, 0x69, 0x63, 0xe2, 0x02, 0xa2, 0xa7, 0x53, 0x15, 0x1a, 0x50, 0xad, 0xf5,
+	0x4d, 0x1d, 0x36, 0x3b, 0x7a, 0xe4, 0x9c, 0x2b, 0x49, 0x45, 0xd3, 0x28, 0x23, 0x8c, 0x54, 0x0d,
+	0xf6, 0xec, 0x83, 0x2b, 0x6c, 0x5e, 0x49, 0x68, 0x4c, 0x4f, 0x3c, 0xbe, 0x42, 0xbc, 0x97, 0x50,
+	0x15, 0xd9, 0x29, 0x9c, 0x89, 0x56, 0x2a, 0x6d, 0x05, 0xbb, 0x2f, 0x83, 0xd9, 0x12, 0xcc, 0xc9,
+	0xa6, 0xf4, 0x2d, 0xe8, 0x3a, 0x91, 0x70, 0x7e, 0x0c, 0x1f, 0xd6, 0x80, 0x26, 0xdc, 0x0f, 0xee,
+	0xba, 0x77, 0x65, 0x8d, 0xa8, 0x61, 0xe6, 0xcd, 0xbd, 0xfd, 0xdb, 0x8b, 0x9d, 0x3f, 0xdc, 0x3f,
+	0xbe, 0xe3, 0x98, 0x37, 0xa2, 0x86, 0x27, 0x5f, 0xfd, 0xe0, 0xfe, 0x38, 0xe3, 0xc4, 0x8e, 0x1c,
+	0xfe, 0xf4, 0x82, 0x7b, 0xd7, 0x0a, 0x42, 0x46, 0xb6, 0xad, 0x8a, 0x4c, 0xbd, 0x2a, 0x3a, 0x9c,
+	0xf4, 0x0e, 0x4b, 0x24, 0x63, 0xe7, 0xee, 0xeb, 0xdf, 0x7c, 0x3c, 0xc9, 0x97, 0x5f, 0x7f, 0xbf,
+	0xf9, 0x71, 0x78, 0xd8, 0xad, 0xfe, 0xe3, 0x88, 0x79, 0x9e, 0xaf, 0xd1, 0xa8, 0x1a, 0x34, 0xd2,
+	0x83, 0xfe, 0x16, 0x2e, 0x06, 0xe9, 0xc1, 0xa7, 0xe8, 0xe1, 0x05, 0x9f, 0x5d, 0x96, 0xf6, 0x68,
+	0x25, 0x91, 0xe4, 0xaa, 0x5e, 0x7c, 0xf6, 0x83, 0xbd, 0x5c, 0xd5, 0x5b, 0x87, 0x5b, 0x44, 0x37,
+	0x2e, 0xeb, 0xa8, 0xbb, 0xc8, 0x91, 0xf7, 0xee, 0x55, 0xef, 0x2f, 0x55, 0x25, 0x9a, 0x92, 0x28,
+	0x5d, 0xd2, 0x12, 0x9a, 0xcd, 0xbd, 0xe8, 0x65, 0xe3, 0xf4, 0x7f, 0xfa, 0xcc, 0x81, 0xef, 0xfe,
+	0xce, 0x92, 0xf3, 0x1f, 0xfe, 0x7c, 0x69, 0x03, 0x79, 0x81, 0xc4, 0xc2, 0x0e, 0x25, 0x31, 0xe9,
+	0x8b, 0xf1, 0xc2, 0x49, 0x52, 0x5e, 0x60, 0x3a, 0x48, 0xd2, 0x24, 0x4e, 0x9d, 0xe4, 0x9f, 0xbf,
+	0x67, 0xbf, 0x33, 0xc6, 0x0b, 0x64, 0x6c, 0x10, 0x31, 0x96, 0xc4, 0x8c, 0x39, 0xd9, 0xe9, 0xad,
+	0xcd, 0x3b, 0xe3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x58, 0xa3, 0xde, 0xec, 0x4e, 0x03, 0x00,
+	0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// SearchTermViewServiceClient is the client API for SearchTermViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SearchTermViewServiceClient interface {
+	// Returns the attributes of the requested search term view.
+	GetSearchTermView(ctx context.Context, in *GetSearchTermViewRequest, opts ...grpc.CallOption) (*resources.SearchTermView, error)
+}
+
+type searchTermViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewSearchTermViewServiceClient(cc grpc.ClientConnInterface) SearchTermViewServiceClient {
+	return &searchTermViewServiceClient{cc}
+}
+
+func (c *searchTermViewServiceClient) GetSearchTermView(ctx context.Context, in *GetSearchTermViewRequest, opts ...grpc.CallOption) (*resources.SearchTermView, error) {
+	out := new(resources.SearchTermView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.SearchTermViewService/GetSearchTermView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SearchTermViewServiceServer is the server API for SearchTermViewService service.
+type SearchTermViewServiceServer interface {
+	// Returns the attributes of the requested search term view.
+	GetSearchTermView(context.Context, *GetSearchTermViewRequest) (*resources.SearchTermView, error)
+}
+
+// UnimplementedSearchTermViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedSearchTermViewServiceServer struct {
+}
+
+func (*UnimplementedSearchTermViewServiceServer) GetSearchTermView(ctx context.Context, req *GetSearchTermViewRequest) (*resources.SearchTermView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetSearchTermView not implemented")
+}
+
+func RegisterSearchTermViewServiceServer(s *grpc.Server, srv SearchTermViewServiceServer) {
+	s.RegisterService(&_SearchTermViewService_serviceDesc, srv)
+}
+
+func _SearchTermViewService_GetSearchTermView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSearchTermViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SearchTermViewServiceServer).GetSearchTermView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.SearchTermViewService/GetSearchTermView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SearchTermViewServiceServer).GetSearchTermView(ctx, req.(*GetSearchTermViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SearchTermViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.SearchTermViewService",
+	HandlerType: (*SearchTermViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSearchTermView",
+			Handler:    _SearchTermViewService_GetSearchTermView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/search_term_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/shared_criterion_service.pb.go b/googleapis/ads/googleads/v3/services/shared_criterion_service.pb.go
new file mode 100644
index 0000000..9ae32a8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/shared_criterion_service.pb.go
@@ -0,0 +1,500 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/shared_criterion_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [SharedCriterionService.GetSharedCriterion][google.ads.googleads.v3.services.SharedCriterionService.GetSharedCriterion].
+type GetSharedCriterionRequest struct {
+	// Required. The resource name of the shared criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSharedCriterionRequest) Reset()         { *m = GetSharedCriterionRequest{} }
+func (m *GetSharedCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSharedCriterionRequest) ProtoMessage()    {}
+func (*GetSharedCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_759802b7b62c0df4, []int{0}
+}
+
+func (m *GetSharedCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSharedCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetSharedCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSharedCriterionRequest.Marshal(b, m, deterministic)
+}
+func (m *GetSharedCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSharedCriterionRequest.Merge(m, src)
+}
+func (m *GetSharedCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSharedCriterionRequest.Size(m)
+}
+func (m *GetSharedCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSharedCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSharedCriterionRequest proto.InternalMessageInfo
+
+func (m *GetSharedCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [SharedCriterionService.MutateSharedCriteria][google.ads.googleads.v3.services.SharedCriterionService.MutateSharedCriteria].
+type MutateSharedCriteriaRequest struct {
+	// Required. The ID of the customer whose shared criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual shared criteria.
+	Operations []*SharedCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedCriteriaRequest) Reset()         { *m = MutateSharedCriteriaRequest{} }
+func (m *MutateSharedCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriteriaRequest) ProtoMessage()    {}
+func (*MutateSharedCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_759802b7b62c0df4, []int{1}
+}
+
+func (m *MutateSharedCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateSharedCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriteriaRequest.Merge(m, src)
+}
+func (m *MutateSharedCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Size(m)
+}
+func (m *MutateSharedCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateSharedCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateSharedCriteriaRequest) GetOperations() []*SharedCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateSharedCriteriaRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateSharedCriteriaRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, remove) on an shared criterion.
+type SharedCriterionOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*SharedCriterionOperation_Create
+	//	*SharedCriterionOperation_Remove
+	Operation            isSharedCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *SharedCriterionOperation) Reset()         { *m = SharedCriterionOperation{} }
+func (m *SharedCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterionOperation) ProtoMessage()    {}
+func (*SharedCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_759802b7b62c0df4, []int{2}
+}
+
+func (m *SharedCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterionOperation.Unmarshal(m, b)
+}
+func (m *SharedCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterionOperation.Marshal(b, m, deterministic)
+}
+func (m *SharedCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterionOperation.Merge(m, src)
+}
+func (m *SharedCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterionOperation.Size(m)
+}
+func (m *SharedCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterionOperation proto.InternalMessageInfo
+
+type isSharedCriterionOperation_Operation interface {
+	isSharedCriterionOperation_Operation()
+}
+
+type SharedCriterionOperation_Create struct {
+	Create *resources.SharedCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type SharedCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*SharedCriterionOperation_Create) isSharedCriterionOperation_Operation() {}
+
+func (*SharedCriterionOperation_Remove) isSharedCriterionOperation_Operation() {}
+
+func (m *SharedCriterionOperation) GetOperation() isSharedCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *SharedCriterionOperation) GetCreate() *resources.SharedCriterion {
+	if x, ok := m.GetOperation().(*SharedCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *SharedCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*SharedCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SharedCriterionOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*SharedCriterionOperation_Create)(nil),
+		(*SharedCriterionOperation_Remove)(nil),
+	}
+}
+
+// Response message for a shared criterion mutate.
+type MutateSharedCriteriaResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateSharedCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateSharedCriteriaResponse) Reset()         { *m = MutateSharedCriteriaResponse{} }
+func (m *MutateSharedCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriteriaResponse) ProtoMessage()    {}
+func (*MutateSharedCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_759802b7b62c0df4, []int{3}
+}
+
+func (m *MutateSharedCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateSharedCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriteriaResponse.Merge(m, src)
+}
+func (m *MutateSharedCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Size(m)
+}
+func (m *MutateSharedCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateSharedCriteriaResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateSharedCriteriaResponse) GetResults() []*MutateSharedCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the shared criterion mutate.
+type MutateSharedCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedCriterionResult) Reset()         { *m = MutateSharedCriterionResult{} }
+func (m *MutateSharedCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriterionResult) ProtoMessage()    {}
+func (*MutateSharedCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_759802b7b62c0df4, []int{4}
+}
+
+func (m *MutateSharedCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateSharedCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriterionResult.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriterionResult.Merge(m, src)
+}
+func (m *MutateSharedCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriterionResult.Size(m)
+}
+func (m *MutateSharedCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriterionResult proto.InternalMessageInfo
+
+func (m *MutateSharedCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSharedCriterionRequest)(nil), "google.ads.googleads.v3.services.GetSharedCriterionRequest")
+	proto.RegisterType((*MutateSharedCriteriaRequest)(nil), "google.ads.googleads.v3.services.MutateSharedCriteriaRequest")
+	proto.RegisterType((*SharedCriterionOperation)(nil), "google.ads.googleads.v3.services.SharedCriterionOperation")
+	proto.RegisterType((*MutateSharedCriteriaResponse)(nil), "google.ads.googleads.v3.services.MutateSharedCriteriaResponse")
+	proto.RegisterType((*MutateSharedCriterionResult)(nil), "google.ads.googleads.v3.services.MutateSharedCriterionResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/shared_criterion_service.proto", fileDescriptor_759802b7b62c0df4)
+}
+
+var fileDescriptor_759802b7b62c0df4 = []byte{
+	// 711 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6b, 0xd4, 0x40,
+	0x14, 0x37, 0x59, 0xa9, 0x76, 0xb6, 0x55, 0x18, 0xb5, 0xc6, 0x6d, 0xc1, 0x25, 0x16, 0x5c, 0x16,
+	0x49, 0x64, 0x73, 0x29, 0x29, 0x55, 0xb2, 0xd2, 0x3f, 0x82, 0xda, 0xb2, 0x85, 0x16, 0x64, 0x21,
+	0x4c, 0x93, 0xe9, 0x36, 0x90, 0x64, 0xe2, 0xcc, 0x64, 0xa1, 0x94, 0x5e, 0xfa, 0x05, 0x3c, 0xf8,
+	0x0d, 0x3c, 0xfa, 0x25, 0xbc, 0xf7, 0xe2, 0xc1, 0x5b, 0x4f, 0x1e, 0x3c, 0x79, 0xf0, 0xe0, 0xc9,
+	0xa3, 0x24, 0x93, 0xd9, 0x7f, 0x66, 0x59, 0xe8, 0xed, 0x65, 0xde, 0x7b, 0xbf, 0xf7, 0x7b, 0xf3,
+	0x7e, 0x6f, 0x02, 0x5e, 0xf6, 0x08, 0xe9, 0x85, 0xd8, 0x44, 0x3e, 0x33, 0x85, 0x99, 0x59, 0x7d,
+	0xcb, 0x64, 0x98, 0xf6, 0x03, 0x0f, 0x33, 0x93, 0x9d, 0x20, 0x8a, 0x7d, 0xd7, 0xa3, 0x01, 0xc7,
+	0x34, 0x20, 0xb1, 0x5b, 0x78, 0x8c, 0x84, 0x12, 0x4e, 0x60, 0x5d, 0x64, 0x19, 0xc8, 0x67, 0xc6,
+	0x00, 0xc0, 0xe8, 0x5b, 0x86, 0x04, 0xa8, 0xad, 0x4d, 0x2b, 0x41, 0x31, 0x23, 0x29, 0x2d, 0xab,
+	0x21, 0xb0, 0x6b, 0x2b, 0x32, 0x33, 0x09, 0x4c, 0x14, 0xc7, 0x84, 0x23, 0x1e, 0x90, 0x98, 0x15,
+	0xde, 0x87, 0x23, 0x5e, 0x2f, 0x0c, 0x70, 0xcc, 0x0b, 0xc7, 0xe3, 0x11, 0xc7, 0x71, 0x80, 0x43,
+	0xdf, 0x3d, 0xc2, 0x27, 0xa8, 0x1f, 0x10, 0x3a, 0x91, 0x49, 0x13, 0xcf, 0x64, 0x1c, 0xf1, 0xb4,
+	0x80, 0xd4, 0x37, 0xc1, 0xa3, 0x6d, 0xcc, 0xf7, 0x73, 0x36, 0xaf, 0x24, 0x99, 0x0e, 0xfe, 0x90,
+	0x62, 0xc6, 0x61, 0x03, 0x2c, 0x4a, 0xc6, 0x6e, 0x8c, 0x22, 0xac, 0x29, 0x75, 0xa5, 0x31, 0xdf,
+	0xae, 0xfc, 0x70, 0xd4, 0xce, 0x82, 0xf4, 0xbc, 0x43, 0x11, 0xd6, 0xff, 0x28, 0x60, 0xf9, 0x6d,
+	0xca, 0x11, 0xc7, 0x63, 0x50, 0x48, 0x22, 0xad, 0x82, 0xaa, 0x97, 0x32, 0x4e, 0x22, 0x4c, 0xdd,
+	0xc0, 0x1f, 0xc5, 0x01, 0xf2, 0xfc, 0xb5, 0x0f, 0x5d, 0x00, 0x48, 0x82, 0xa9, 0xe8, 0x59, 0x53,
+	0xeb, 0x95, 0x46, 0xb5, 0x65, 0x1b, 0xb3, 0xae, 0xdb, 0x98, 0x60, 0xbf, 0x2b, 0x21, 0x8a, 0x02,
+	0x43, 0x48, 0xf8, 0x14, 0xdc, 0x4d, 0x10, 0xe5, 0x01, 0x0a, 0xdd, 0x63, 0x14, 0x84, 0x29, 0xc5,
+	0x5a, 0xa5, 0xae, 0x34, 0x6e, 0x77, 0xee, 0x14, 0xc7, 0x5b, 0xe2, 0x14, 0x3e, 0x01, 0x8b, 0x7d,
+	0x14, 0x06, 0x3e, 0xe2, 0xd8, 0x25, 0x71, 0x78, 0xaa, 0xdd, 0xcc, 0xc3, 0x16, 0xe4, 0xe1, 0x6e,
+	0x1c, 0x9e, 0xea, 0x1f, 0x15, 0xa0, 0x4d, 0xab, 0x0d, 0xdf, 0x80, 0x39, 0x8f, 0x62, 0xc4, 0xc5,
+	0xa5, 0x55, 0x5b, 0xad, 0xa9, 0x7d, 0x0c, 0x44, 0x31, 0xd9, 0xc8, 0xce, 0x8d, 0x4e, 0x81, 0x01,
+	0x35, 0x30, 0x47, 0x71, 0x44, 0xfa, 0x82, 0xef, 0x7c, 0xe6, 0x11, 0xdf, 0xed, 0x2a, 0x98, 0x1f,
+	0x34, 0xa8, 0x7f, 0x55, 0xc0, 0x4a, 0xf9, 0x18, 0x58, 0x42, 0x62, 0x86, 0xe1, 0x16, 0x78, 0x30,
+	0x71, 0x01, 0x2e, 0xa6, 0x94, 0xd0, 0x1c, 0xb6, 0xda, 0x82, 0x92, 0x24, 0x4d, 0x3c, 0x63, 0x3f,
+	0xd7, 0x49, 0xe7, 0xde, 0xf8, 0xd5, 0x6c, 0x66, 0xe1, 0xf0, 0x10, 0xdc, 0xa2, 0x98, 0xa5, 0x21,
+	0x97, 0x63, 0xda, 0x98, 0x3d, 0xa6, 0x12, 0x62, 0x99, 0xd4, 0x32, 0x94, 0x8e, 0x44, 0xd3, 0xdb,
+	0xa5, 0x3a, 0x92, 0x71, 0xd9, 0x5c, 0x4a, 0x14, 0x39, 0x2e, 0xc6, 0xd6, 0xdf, 0x0a, 0x58, 0x9a,
+	0x48, 0xdf, 0x17, 0x24, 0xe0, 0x37, 0x05, 0xc0, 0xff, 0xf5, 0x0e, 0xd7, 0x67, 0xb3, 0x9f, 0xba,
+	0x25, 0xb5, 0x6b, 0x4c, 0x56, 0xdf, 0xb9, 0x72, 0xc6, 0x1b, 0xb9, 0xf8, 0xfe, 0xf3, 0x93, 0xda,
+	0x82, 0xcf, 0xb3, 0x57, 0xe2, 0x6c, 0xcc, 0xb3, 0x21, 0x17, 0x84, 0x99, 0xcd, 0xe2, 0xd9, 0x90,
+	0x63, 0x35, 0x9b, 0xe7, 0xf0, 0xb7, 0x02, 0xee, 0x97, 0x8d, 0x1c, 0x5e, 0x6f, 0x22, 0x72, 0x63,
+	0x6b, 0x2f, 0xae, 0x9b, 0x2e, 0x94, 0xa6, 0x1f, 0x5e, 0x39, 0x4b, 0x23, 0x2b, 0xff, 0x6c, 0xb8,
+	0x85, 0x79, 0xab, 0x6b, 0xba, 0x95, 0xb5, 0x3a, 0xec, 0xed, 0x6c, 0x24, 0x78, 0xa3, 0x79, 0x3e,
+	0xd1, 0xa9, 0x1d, 0xe5, 0xb5, 0x6c, 0xa5, 0x59, 0x5b, 0xbe, 0x74, 0xb4, 0x21, 0x9f, 0xc2, 0x4a,
+	0x02, 0x66, 0x78, 0x24, 0x6a, 0x5f, 0xa8, 0x60, 0xd5, 0x23, 0xd1, 0x4c, 0xee, 0xed, 0xe5, 0x72,
+	0x81, 0xec, 0x65, 0x8f, 0xe2, 0x9e, 0xf2, 0x7e, 0xa7, 0x00, 0xe8, 0x91, 0x10, 0xc5, 0x3d, 0x83,
+	0xd0, 0x9e, 0xd9, 0xc3, 0x71, 0xfe, 0x64, 0x9a, 0xc3, 0x92, 0xd3, 0xff, 0x21, 0xeb, 0xd2, 0xf8,
+	0xac, 0x56, 0xb6, 0x1d, 0xe7, 0x8b, 0x5a, 0xdf, 0x16, 0x80, 0x8e, 0xcf, 0x0c, 0x61, 0x66, 0xd6,
+	0x81, 0x65, 0x14, 0x85, 0xd9, 0xa5, 0x0c, 0xe9, 0x3a, 0x3e, 0xeb, 0x0e, 0x42, 0xba, 0x07, 0x56,
+	0x57, 0x86, 0xfc, 0x52, 0x57, 0xc5, 0xb9, 0x6d, 0x3b, 0x3e, 0xb3, 0xed, 0x41, 0x90, 0x6d, 0x1f,
+	0x58, 0xb6, 0x2d, 0xc3, 0x8e, 0xe6, 0x72, 0x9e, 0xd6, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x96,
+	0xed, 0xaf, 0x7a, 0xea, 0x06, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// SharedCriterionServiceClient is the client API for SharedCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SharedCriterionServiceClient interface {
+	// Returns the requested shared criterion in full detail.
+	GetSharedCriterion(ctx context.Context, in *GetSharedCriterionRequest, opts ...grpc.CallOption) (*resources.SharedCriterion, error)
+	// Creates or removes shared criteria. Operation statuses are returned.
+	MutateSharedCriteria(ctx context.Context, in *MutateSharedCriteriaRequest, opts ...grpc.CallOption) (*MutateSharedCriteriaResponse, error)
+}
+
+type sharedCriterionServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewSharedCriterionServiceClient(cc grpc.ClientConnInterface) SharedCriterionServiceClient {
+	return &sharedCriterionServiceClient{cc}
+}
+
+func (c *sharedCriterionServiceClient) GetSharedCriterion(ctx context.Context, in *GetSharedCriterionRequest, opts ...grpc.CallOption) (*resources.SharedCriterion, error) {
+	out := new(resources.SharedCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.SharedCriterionService/GetSharedCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *sharedCriterionServiceClient) MutateSharedCriteria(ctx context.Context, in *MutateSharedCriteriaRequest, opts ...grpc.CallOption) (*MutateSharedCriteriaResponse, error) {
+	out := new(MutateSharedCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.SharedCriterionService/MutateSharedCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SharedCriterionServiceServer is the server API for SharedCriterionService service.
+type SharedCriterionServiceServer interface {
+	// Returns the requested shared criterion in full detail.
+	GetSharedCriterion(context.Context, *GetSharedCriterionRequest) (*resources.SharedCriterion, error)
+	// Creates or removes shared criteria. Operation statuses are returned.
+	MutateSharedCriteria(context.Context, *MutateSharedCriteriaRequest) (*MutateSharedCriteriaResponse, error)
+}
+
+// UnimplementedSharedCriterionServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedSharedCriterionServiceServer struct {
+}
+
+func (*UnimplementedSharedCriterionServiceServer) GetSharedCriterion(ctx context.Context, req *GetSharedCriterionRequest) (*resources.SharedCriterion, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetSharedCriterion not implemented")
+}
+func (*UnimplementedSharedCriterionServiceServer) MutateSharedCriteria(ctx context.Context, req *MutateSharedCriteriaRequest) (*MutateSharedCriteriaResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateSharedCriteria not implemented")
+}
+
+func RegisterSharedCriterionServiceServer(s *grpc.Server, srv SharedCriterionServiceServer) {
+	s.RegisterService(&_SharedCriterionService_serviceDesc, srv)
+}
+
+func _SharedCriterionService_GetSharedCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSharedCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedCriterionServiceServer).GetSharedCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.SharedCriterionService/GetSharedCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedCriterionServiceServer).GetSharedCriterion(ctx, req.(*GetSharedCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _SharedCriterionService_MutateSharedCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateSharedCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedCriterionServiceServer).MutateSharedCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.SharedCriterionService/MutateSharedCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedCriterionServiceServer).MutateSharedCriteria(ctx, req.(*MutateSharedCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SharedCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.SharedCriterionService",
+	HandlerType: (*SharedCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSharedCriterion",
+			Handler:    _SharedCriterionService_GetSharedCriterion_Handler,
+		},
+		{
+			MethodName: "MutateSharedCriteria",
+			Handler:    _SharedCriterionService_MutateSharedCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/shared_criterion_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/shared_set_service.pb.go b/googleapis/ads/googleads/v3/services/shared_set_service.pb.go
new file mode 100644
index 0000000..3aa8f1b
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/shared_set_service.pb.go
@@ -0,0 +1,528 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/shared_set_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [SharedSetService.GetSharedSet][google.ads.googleads.v3.services.SharedSetService.GetSharedSet].
+type GetSharedSetRequest struct {
+	// Required. The resource name of the shared set to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSharedSetRequest) Reset()         { *m = GetSharedSetRequest{} }
+func (m *GetSharedSetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSharedSetRequest) ProtoMessage()    {}
+func (*GetSharedSetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a612c7f11f5fd3bc, []int{0}
+}
+
+func (m *GetSharedSetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSharedSetRequest.Unmarshal(m, b)
+}
+func (m *GetSharedSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSharedSetRequest.Marshal(b, m, deterministic)
+}
+func (m *GetSharedSetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSharedSetRequest.Merge(m, src)
+}
+func (m *GetSharedSetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSharedSetRequest.Size(m)
+}
+func (m *GetSharedSetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSharedSetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSharedSetRequest proto.InternalMessageInfo
+
+func (m *GetSharedSetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [SharedSetService.MutateSharedSets][google.ads.googleads.v3.services.SharedSetService.MutateSharedSets].
+type MutateSharedSetsRequest struct {
+	// Required. The ID of the customer whose shared sets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual shared sets.
+	Operations []*SharedSetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedSetsRequest) Reset()         { *m = MutateSharedSetsRequest{} }
+func (m *MutateSharedSetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetsRequest) ProtoMessage()    {}
+func (*MutateSharedSetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a612c7f11f5fd3bc, []int{1}
+}
+
+func (m *MutateSharedSetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetsRequest.Unmarshal(m, b)
+}
+func (m *MutateSharedSetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedSetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetsRequest.Merge(m, src)
+}
+func (m *MutateSharedSetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetsRequest.Size(m)
+}
+func (m *MutateSharedSetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetsRequest proto.InternalMessageInfo
+
+func (m *MutateSharedSetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateSharedSetsRequest) GetOperations() []*SharedSetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateSharedSetsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateSharedSetsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update, remove) on an shared set.
+type SharedSetOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*SharedSetOperation_Create
+	//	*SharedSetOperation_Update
+	//	*SharedSetOperation_Remove
+	Operation            isSharedSetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *SharedSetOperation) Reset()         { *m = SharedSetOperation{} }
+func (m *SharedSetOperation) String() string { return proto.CompactTextString(m) }
+func (*SharedSetOperation) ProtoMessage()    {}
+func (*SharedSetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a612c7f11f5fd3bc, []int{2}
+}
+
+func (m *SharedSetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetOperation.Unmarshal(m, b)
+}
+func (m *SharedSetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetOperation.Marshal(b, m, deterministic)
+}
+func (m *SharedSetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetOperation.Merge(m, src)
+}
+func (m *SharedSetOperation) XXX_Size() int {
+	return xxx_messageInfo_SharedSetOperation.Size(m)
+}
+func (m *SharedSetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetOperation proto.InternalMessageInfo
+
+func (m *SharedSetOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isSharedSetOperation_Operation interface {
+	isSharedSetOperation_Operation()
+}
+
+type SharedSetOperation_Create struct {
+	Create *resources.SharedSet `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type SharedSetOperation_Update struct {
+	Update *resources.SharedSet `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type SharedSetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*SharedSetOperation_Create) isSharedSetOperation_Operation() {}
+
+func (*SharedSetOperation_Update) isSharedSetOperation_Operation() {}
+
+func (*SharedSetOperation_Remove) isSharedSetOperation_Operation() {}
+
+func (m *SharedSetOperation) GetOperation() isSharedSetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetCreate() *resources.SharedSet {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetUpdate() *resources.SharedSet {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SharedSetOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*SharedSetOperation_Create)(nil),
+		(*SharedSetOperation_Update)(nil),
+		(*SharedSetOperation_Remove)(nil),
+	}
+}
+
+// Response message for a shared set mutate.
+type MutateSharedSetsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateSharedSetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateSharedSetsResponse) Reset()         { *m = MutateSharedSetsResponse{} }
+func (m *MutateSharedSetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetsResponse) ProtoMessage()    {}
+func (*MutateSharedSetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a612c7f11f5fd3bc, []int{3}
+}
+
+func (m *MutateSharedSetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetsResponse.Unmarshal(m, b)
+}
+func (m *MutateSharedSetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedSetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetsResponse.Merge(m, src)
+}
+func (m *MutateSharedSetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetsResponse.Size(m)
+}
+func (m *MutateSharedSetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetsResponse proto.InternalMessageInfo
+
+func (m *MutateSharedSetsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateSharedSetsResponse) GetResults() []*MutateSharedSetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the shared set mutate.
+type MutateSharedSetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedSetResult) Reset()         { *m = MutateSharedSetResult{} }
+func (m *MutateSharedSetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetResult) ProtoMessage()    {}
+func (*MutateSharedSetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a612c7f11f5fd3bc, []int{4}
+}
+
+func (m *MutateSharedSetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetResult.Unmarshal(m, b)
+}
+func (m *MutateSharedSetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetResult.Marshal(b, m, deterministic)
+}
+func (m *MutateSharedSetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetResult.Merge(m, src)
+}
+func (m *MutateSharedSetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetResult.Size(m)
+}
+func (m *MutateSharedSetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetResult proto.InternalMessageInfo
+
+func (m *MutateSharedSetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSharedSetRequest)(nil), "google.ads.googleads.v3.services.GetSharedSetRequest")
+	proto.RegisterType((*MutateSharedSetsRequest)(nil), "google.ads.googleads.v3.services.MutateSharedSetsRequest")
+	proto.RegisterType((*SharedSetOperation)(nil), "google.ads.googleads.v3.services.SharedSetOperation")
+	proto.RegisterType((*MutateSharedSetsResponse)(nil), "google.ads.googleads.v3.services.MutateSharedSetsResponse")
+	proto.RegisterType((*MutateSharedSetResult)(nil), "google.ads.googleads.v3.services.MutateSharedSetResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/shared_set_service.proto", fileDescriptor_a612c7f11f5fd3bc)
+}
+
+var fileDescriptor_a612c7f11f5fd3bc = []byte{
+	// 757 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6b, 0xdb, 0x48,
+	0x18, 0x5e, 0xc9, 0x4b, 0x76, 0x33, 0x4e, 0x76, 0xc3, 0x84, 0x6c, 0x84, 0x77, 0x61, 0x8d, 0x36,
+	0xb0, 0xc6, 0x04, 0x09, 0xec, 0x94, 0x12, 0xa5, 0xa1, 0xc8, 0xb4, 0x49, 0x7a, 0x48, 0x93, 0xca,
+	0x10, 0x68, 0x31, 0x88, 0x89, 0x34, 0x71, 0x44, 0x24, 0x8d, 0x3a, 0x33, 0x32, 0x84, 0x90, 0x4b,
+	0x4f, 0xbd, 0xf7, 0x1f, 0xf4, 0xd8, 0x7b, 0x0f, 0xfd, 0x0b, 0xa1, 0xb7, 0xde, 0x72, 0x28, 0x3d,
+	0xf4, 0x50, 0xfa, 0x1b, 0x7a, 0x28, 0xd2, 0x68, 0xe4, 0x8f, 0x24, 0x98, 0xe4, 0xf6, 0x7a, 0xde,
+	0xe7, 0x79, 0xde, 0x6f, 0x19, 0xac, 0xf7, 0x09, 0xe9, 0x87, 0xd8, 0x44, 0x3e, 0x33, 0x85, 0x99,
+	0x59, 0x83, 0xb6, 0xc9, 0x30, 0x1d, 0x04, 0x1e, 0x66, 0x26, 0x3b, 0x46, 0x14, 0xfb, 0x2e, 0xc3,
+	0xdc, 0x2d, 0xde, 0x8c, 0x84, 0x12, 0x4e, 0x60, 0x5d, 0xe0, 0x0d, 0xe4, 0x33, 0xa3, 0xa4, 0x1a,
+	0x83, 0xb6, 0x21, 0xa9, 0xb5, 0xd6, 0x4d, 0xe2, 0x14, 0x33, 0x92, 0xd2, 0x71, 0x75, 0xa1, 0x5a,
+	0xfb, 0x47, 0x72, 0x92, 0xc0, 0x44, 0x71, 0x4c, 0x38, 0xe2, 0x01, 0x89, 0x59, 0xe1, 0x5d, 0x1e,
+	0xf1, 0x7a, 0x61, 0x80, 0x63, 0x49, 0xfb, 0x77, 0xc4, 0x71, 0x14, 0xe0, 0xd0, 0x77, 0x0f, 0xf1,
+	0x31, 0x1a, 0x04, 0x84, 0x16, 0x80, 0x22, 0x5b, 0x33, 0xff, 0x75, 0x98, 0x1e, 0x15, 0xa8, 0x08,
+	0xb1, 0x93, 0x09, 0x6d, 0x9a, 0x78, 0x26, 0xe3, 0x88, 0xa7, 0x45, 0x50, 0xfd, 0x21, 0x58, 0xdc,
+	0xc6, 0xbc, 0x9b, 0x67, 0xda, 0xc5, 0xdc, 0xc1, 0x2f, 0x53, 0xcc, 0x38, 0x6c, 0x80, 0x79, 0x59,
+	0x87, 0x1b, 0xa3, 0x08, 0x6b, 0x4a, 0x5d, 0x69, 0xcc, 0x76, 0x2a, 0x5f, 0x6c, 0xd5, 0x99, 0x93,
+	0x9e, 0xa7, 0x28, 0xc2, 0xfa, 0x37, 0x05, 0x2c, 0xef, 0xa6, 0x1c, 0x71, 0x5c, 0x8a, 0x30, 0xa9,
+	0xb2, 0x02, 0xaa, 0x5e, 0xca, 0x38, 0x89, 0x30, 0x75, 0x03, 0x7f, 0x54, 0x03, 0xc8, 0xf7, 0x27,
+	0x3e, 0x7c, 0x0e, 0x00, 0x49, 0x30, 0x15, 0xbd, 0xd0, 0xd4, 0x7a, 0xa5, 0x51, 0x6d, 0xad, 0x19,
+	0xd3, 0x06, 0x60, 0x94, 0xe1, 0xf6, 0x24, 0xb9, 0x90, 0x1e, 0x8a, 0xc1, 0xff, 0xc1, 0x9f, 0x09,
+	0xa2, 0x3c, 0x40, 0xa1, 0x7b, 0x84, 0x82, 0x30, 0xa5, 0x58, 0xab, 0xd4, 0x95, 0xc6, 0xef, 0xce,
+	0x1f, 0xc5, 0xf3, 0x96, 0x78, 0x85, 0xff, 0x81, 0xf9, 0x01, 0x0a, 0x03, 0x1f, 0x71, 0xec, 0x92,
+	0x38, 0x3c, 0xd5, 0x7e, 0xcd, 0x61, 0x73, 0xf2, 0x71, 0x2f, 0x0e, 0x4f, 0xf5, 0xd7, 0x2a, 0x80,
+	0x57, 0xa3, 0xc2, 0x0d, 0x50, 0x4d, 0x93, 0x9c, 0x99, 0x35, 0x3c, 0x67, 0x56, 0x5b, 0x35, 0x59,
+	0x80, 0x9c, 0x89, 0xb1, 0x95, 0xcd, 0x64, 0x17, 0xb1, 0x13, 0x07, 0x08, 0x78, 0x66, 0xc3, 0x2d,
+	0x30, 0xe3, 0x51, 0x8c, 0xb8, 0xe8, 0x70, 0xb5, 0xb5, 0x7a, 0x63, 0xe1, 0xe5, 0x5e, 0x0d, 0x2b,
+	0xdf, 0xf9, 0xc5, 0x29, 0xd8, 0x99, 0x8e, 0x50, 0xd5, 0xd4, 0xbb, 0xe9, 0x08, 0x36, 0xd4, 0xc0,
+	0x0c, 0xc5, 0x11, 0x19, 0x88, 0x46, 0xcd, 0x66, 0x1e, 0xf1, 0xbb, 0x53, 0x05, 0xb3, 0x65, 0x67,
+	0xf5, 0xf7, 0x0a, 0xd0, 0xae, 0x4e, 0x9d, 0x25, 0x24, 0x66, 0x59, 0x2e, 0x4b, 0x13, 0x5d, 0x77,
+	0x31, 0xa5, 0x84, 0xe6, 0x92, 0xd5, 0x16, 0x94, 0xa9, 0xd1, 0xc4, 0x33, 0xba, 0xf9, 0x32, 0x3a,
+	0x8b, 0xe3, 0xf3, 0x78, 0x9c, 0xc1, 0xe1, 0x33, 0xf0, 0x1b, 0xc5, 0x2c, 0x0d, 0xb9, 0xdc, 0x8a,
+	0xfb, 0xd3, 0xb7, 0x62, 0x22, 0x29, 0x27, 0xe7, 0x3b, 0x52, 0x47, 0x7f, 0x00, 0x96, 0xae, 0x45,
+	0x64, 0x0b, 0x70, 0xcd, 0xc2, 0x8f, 0xef, 0x7a, 0xeb, 0x63, 0x05, 0x2c, 0x94, 0xc4, 0xae, 0x08,
+	0x09, 0x3f, 0x28, 0x60, 0x6e, 0xf4, 0x84, 0xe0, 0xbd, 0xe9, 0x59, 0x5e, 0x73, 0x72, 0xb5, 0x5b,
+	0x4d, 0x4c, 0x7f, 0x74, 0x69, 0x8f, 0x27, 0xfc, 0xea, 0xd3, 0xd7, 0x37, 0xaa, 0x01, 0x57, 0xb3,
+	0x4f, 0xd0, 0xd9, 0x98, 0x67, 0x53, 0xde, 0x1a, 0x33, 0x9b, 0xc5, 0x37, 0x29, 0x1b, 0x97, 0xd9,
+	0x3c, 0x87, 0x9f, 0x15, 0xb0, 0x30, 0x39, 0x46, 0xb8, 0x7e, 0xeb, 0x2e, 0xcb, 0x83, 0xaf, 0x59,
+	0x77, 0xa1, 0x8a, 0xad, 0xd1, 0xbb, 0x97, 0xf6, 0x5f, 0x23, 0x5f, 0x8b, 0xd5, 0xe1, 0x19, 0xe7,
+	0xa5, 0xad, 0xe9, 0x66, 0x56, 0xda, 0xb0, 0x96, 0xb3, 0x11, 0xf0, 0x66, 0xf3, 0x7c, 0xa4, 0x32,
+	0x2b, 0xca, 0x63, 0x58, 0x4a, 0xb3, 0xf6, 0xf7, 0x85, 0xad, 0x0d, 0xf3, 0x28, 0xac, 0x24, 0x60,
+	0x86, 0x47, 0xa2, 0xce, 0x0f, 0x05, 0xac, 0x78, 0x24, 0x9a, 0x9a, 0x73, 0x67, 0x69, 0x72, 0xe8,
+	0xfb, 0xd9, 0x51, 0xef, 0x2b, 0x2f, 0x76, 0x0a, 0x6a, 0x9f, 0x84, 0x28, 0xee, 0x1b, 0x84, 0xf6,
+	0xcd, 0x3e, 0x8e, 0xf3, 0x93, 0x37, 0x87, 0xc1, 0x6e, 0xfe, 0x03, 0xda, 0x90, 0xc6, 0x5b, 0xb5,
+	0xb2, 0x6d, 0xdb, 0xef, 0xd4, 0xfa, 0xb6, 0x10, 0xb4, 0x7d, 0x66, 0x08, 0x33, 0xb3, 0x0e, 0xda,
+	0x46, 0x11, 0x98, 0x5d, 0x48, 0x48, 0xcf, 0xf6, 0x59, 0xaf, 0x84, 0xf4, 0x0e, 0xda, 0x3d, 0x09,
+	0xf9, 0xae, 0xae, 0x88, 0x77, 0xcb, 0xb2, 0x7d, 0x66, 0x59, 0x25, 0xc8, 0xb2, 0x0e, 0xda, 0x96,
+	0x25, 0x61, 0x87, 0x33, 0x79, 0x9e, 0xed, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x4c, 0xb1,
+	0x43, 0x27, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// SharedSetServiceClient is the client API for SharedSetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SharedSetServiceClient interface {
+	// Returns the requested shared set in full detail.
+	GetSharedSet(ctx context.Context, in *GetSharedSetRequest, opts ...grpc.CallOption) (*resources.SharedSet, error)
+	// Creates, updates, or removes shared sets. Operation statuses are returned.
+	MutateSharedSets(ctx context.Context, in *MutateSharedSetsRequest, opts ...grpc.CallOption) (*MutateSharedSetsResponse, error)
+}
+
+type sharedSetServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewSharedSetServiceClient(cc grpc.ClientConnInterface) SharedSetServiceClient {
+	return &sharedSetServiceClient{cc}
+}
+
+func (c *sharedSetServiceClient) GetSharedSet(ctx context.Context, in *GetSharedSetRequest, opts ...grpc.CallOption) (*resources.SharedSet, error) {
+	out := new(resources.SharedSet)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.SharedSetService/GetSharedSet", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *sharedSetServiceClient) MutateSharedSets(ctx context.Context, in *MutateSharedSetsRequest, opts ...grpc.CallOption) (*MutateSharedSetsResponse, error) {
+	out := new(MutateSharedSetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.SharedSetService/MutateSharedSets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SharedSetServiceServer is the server API for SharedSetService service.
+type SharedSetServiceServer interface {
+	// Returns the requested shared set in full detail.
+	GetSharedSet(context.Context, *GetSharedSetRequest) (*resources.SharedSet, error)
+	// Creates, updates, or removes shared sets. Operation statuses are returned.
+	MutateSharedSets(context.Context, *MutateSharedSetsRequest) (*MutateSharedSetsResponse, error)
+}
+
+// UnimplementedSharedSetServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedSharedSetServiceServer struct {
+}
+
+func (*UnimplementedSharedSetServiceServer) GetSharedSet(ctx context.Context, req *GetSharedSetRequest) (*resources.SharedSet, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetSharedSet not implemented")
+}
+func (*UnimplementedSharedSetServiceServer) MutateSharedSets(ctx context.Context, req *MutateSharedSetsRequest) (*MutateSharedSetsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateSharedSets not implemented")
+}
+
+func RegisterSharedSetServiceServer(s *grpc.Server, srv SharedSetServiceServer) {
+	s.RegisterService(&_SharedSetService_serviceDesc, srv)
+}
+
+func _SharedSetService_GetSharedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSharedSetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedSetServiceServer).GetSharedSet(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.SharedSetService/GetSharedSet",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedSetServiceServer).GetSharedSet(ctx, req.(*GetSharedSetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _SharedSetService_MutateSharedSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateSharedSetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedSetServiceServer).MutateSharedSets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.SharedSetService/MutateSharedSets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedSetServiceServer).MutateSharedSets(ctx, req.(*MutateSharedSetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SharedSetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.SharedSetService",
+	HandlerType: (*SharedSetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSharedSet",
+			Handler:    _SharedSetService_GetSharedSet_Handler,
+		},
+		{
+			MethodName: "MutateSharedSets",
+			Handler:    _SharedSetService_MutateSharedSets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/shared_set_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/shopping_performance_view_service.pb.go b/googleapis/ads/googleads/v3/services/shopping_performance_view_service.pb.go
new file mode 100644
index 0000000..a8d269d
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/shopping_performance_view_service.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/shopping_performance_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for
+// [ShoppingPerformanceViewService.GetShoppingPerformanceView][google.ads.googleads.v3.services.ShoppingPerformanceViewService.GetShoppingPerformanceView].
+type GetShoppingPerformanceViewRequest struct {
+	// Required. The resource name of the Shopping performance view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetShoppingPerformanceViewRequest) Reset()         { *m = GetShoppingPerformanceViewRequest{} }
+func (m *GetShoppingPerformanceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetShoppingPerformanceViewRequest) ProtoMessage()    {}
+func (*GetShoppingPerformanceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9f8e4c8a85feddc3, []int{0}
+}
+
+func (m *GetShoppingPerformanceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetShoppingPerformanceViewRequest.Unmarshal(m, b)
+}
+func (m *GetShoppingPerformanceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetShoppingPerformanceViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetShoppingPerformanceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetShoppingPerformanceViewRequest.Merge(m, src)
+}
+func (m *GetShoppingPerformanceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetShoppingPerformanceViewRequest.Size(m)
+}
+func (m *GetShoppingPerformanceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetShoppingPerformanceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetShoppingPerformanceViewRequest proto.InternalMessageInfo
+
+func (m *GetShoppingPerformanceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetShoppingPerformanceViewRequest)(nil), "google.ads.googleads.v3.services.GetShoppingPerformanceViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/shopping_performance_view_service.proto", fileDescriptor_9f8e4c8a85feddc3)
+}
+
+var fileDescriptor_9f8e4c8a85feddc3 = []byte{
+	// 423 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xb1, 0xae, 0xd3, 0x30,
+	0x14, 0x55, 0xf2, 0x24, 0x24, 0x22, 0x58, 0xb2, 0xf0, 0x14, 0x10, 0x94, 0xc7, 0x1b, 0x9e, 0x18,
+	0x6c, 0x89, 0x0c, 0x08, 0x23, 0x06, 0x97, 0xa1, 0x2c, 0x40, 0xf5, 0x2a, 0x65, 0x40, 0x91, 0x22,
+	0x37, 0xb9, 0x4d, 0x2d, 0x25, 0x76, 0xb0, 0xd3, 0x74, 0x40, 0x2c, 0x8c, 0xac, 0xfc, 0x01, 0x23,
+	0x03, 0x1f, 0xd2, 0x95, 0x8d, 0x89, 0x81, 0x89, 0x81, 0x6f, 0x40, 0xa9, 0xe3, 0xb4, 0x45, 0x4a,
+	0xbb, 0x1d, 0xe5, 0x9c, 0x9c, 0x73, 0x7d, 0xcf, 0xf5, 0x5e, 0xe5, 0x52, 0xe6, 0x05, 0x60, 0x96,
+	0x69, 0x6c, 0x60, 0x8b, 0x9a, 0x10, 0x6b, 0x50, 0x0d, 0x4f, 0x41, 0x63, 0xbd, 0x94, 0x55, 0xc5,
+	0x45, 0x9e, 0x54, 0xa0, 0x16, 0x52, 0x95, 0x4c, 0xa4, 0x90, 0x34, 0x1c, 0xd6, 0x49, 0x27, 0x41,
+	0x95, 0x92, 0xb5, 0xf4, 0x47, 0xe6, 0x77, 0xc4, 0x32, 0x8d, 0x7a, 0x27, 0xd4, 0x84, 0xc8, 0x3a,
+	0x05, 0x74, 0x28, 0x4b, 0x81, 0x96, 0x2b, 0x75, 0x34, 0xcc, 0x84, 0x04, 0xf7, 0xac, 0x45, 0xc5,
+	0x31, 0x13, 0x42, 0xd6, 0xac, 0xe6, 0x52, 0xe8, 0x8e, 0xbd, 0xb3, 0xc7, 0xa6, 0x05, 0x07, 0x51,
+	0x77, 0xc4, 0x83, 0x3d, 0x62, 0xc1, 0xa1, 0xc8, 0x92, 0x39, 0x2c, 0x59, 0xc3, 0xa5, 0x32, 0x82,
+	0x8b, 0xd7, 0xde, 0xc3, 0x09, 0xd4, 0xb3, 0x2e, 0x7d, 0xba, 0x0b, 0x8f, 0x38, 0xac, 0xaf, 0xe1,
+	0xfd, 0x0a, 0x74, 0xed, 0x5f, 0x79, 0xb7, 0xed, 0xa4, 0x89, 0x60, 0x25, 0x9c, 0x3b, 0x23, 0xe7,
+	0xea, 0xe6, 0xf8, 0xec, 0x17, 0x75, 0xaf, 0x6f, 0x59, 0xe6, 0x0d, 0x2b, 0xe1, 0xc9, 0x77, 0xd7,
+	0xbb, 0x3f, 0x60, 0x36, 0x33, 0xdb, 0xf0, 0xff, 0x3a, 0x5e, 0x30, 0x1c, 0xe9, 0xbf, 0x44, 0xa7,
+	0xd6, 0x89, 0x4e, 0x0e, 0x1c, 0x90, 0x41, 0x93, 0x7e, 0xe3, 0x68, 0xc0, 0xe2, 0xe2, 0xed, 0x4f,
+	0x7a, 0xf8, 0xda, 0x4f, 0x3f, 0x7e, 0x7f, 0x71, 0x9f, 0xf9, 0x4f, 0xdb, 0xc2, 0x3e, 0x1c, 0x30,
+	0x2f, 0xd2, 0x95, 0xae, 0x65, 0x09, 0x4a, 0xe3, 0xc7, 0x7d, 0x83, 0xff, 0xf9, 0x7d, 0x0c, 0xee,
+	0x6e, 0xe8, 0xf9, 0x6e, 0x86, 0x0e, 0x55, 0x5c, 0xa3, 0x54, 0x96, 0xe3, 0xcf, 0xae, 0x77, 0x99,
+	0xca, 0xf2, 0xe4, 0xa3, 0xc7, 0x8f, 0x8e, 0xaf, 0x75, 0xda, 0xb6, 0x39, 0x75, 0xde, 0x75, 0x67,
+	0x8d, 0x72, 0x59, 0x30, 0x91, 0x23, 0xa9, 0x72, 0x9c, 0x83, 0xd8, 0x76, 0x8d, 0x77, 0xd1, 0xc3,
+	0x57, 0xff, 0xdc, 0x82, 0xaf, 0xee, 0xd9, 0x84, 0xd2, 0x6f, 0xee, 0x68, 0x62, 0x0c, 0x69, 0xa6,
+	0x91, 0x81, 0x2d, 0x8a, 0x42, 0xd4, 0x05, 0xeb, 0x8d, 0x95, 0xc4, 0x34, 0xd3, 0x71, 0x2f, 0x89,
+	0xa3, 0x30, 0xb6, 0x92, 0x3f, 0xee, 0xa5, 0xf9, 0x4e, 0x08, 0xcd, 0x34, 0x21, 0xbd, 0x88, 0x90,
+	0x28, 0x24, 0xc4, 0xca, 0xe6, 0x37, 0xb6, 0x73, 0x86, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x43,
+	0xdb, 0x03, 0x47, 0x9c, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// ShoppingPerformanceViewServiceClient is the client API for ShoppingPerformanceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ShoppingPerformanceViewServiceClient interface {
+	// Returns the requested Shopping performance view in full detail.
+	GetShoppingPerformanceView(ctx context.Context, in *GetShoppingPerformanceViewRequest, opts ...grpc.CallOption) (*resources.ShoppingPerformanceView, error)
+}
+
+type shoppingPerformanceViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewShoppingPerformanceViewServiceClient(cc grpc.ClientConnInterface) ShoppingPerformanceViewServiceClient {
+	return &shoppingPerformanceViewServiceClient{cc}
+}
+
+func (c *shoppingPerformanceViewServiceClient) GetShoppingPerformanceView(ctx context.Context, in *GetShoppingPerformanceViewRequest, opts ...grpc.CallOption) (*resources.ShoppingPerformanceView, error) {
+	out := new(resources.ShoppingPerformanceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ShoppingPerformanceViewService/GetShoppingPerformanceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ShoppingPerformanceViewServiceServer is the server API for ShoppingPerformanceViewService service.
+type ShoppingPerformanceViewServiceServer interface {
+	// Returns the requested Shopping performance view in full detail.
+	GetShoppingPerformanceView(context.Context, *GetShoppingPerformanceViewRequest) (*resources.ShoppingPerformanceView, error)
+}
+
+// UnimplementedShoppingPerformanceViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedShoppingPerformanceViewServiceServer struct {
+}
+
+func (*UnimplementedShoppingPerformanceViewServiceServer) GetShoppingPerformanceView(ctx context.Context, req *GetShoppingPerformanceViewRequest) (*resources.ShoppingPerformanceView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetShoppingPerformanceView not implemented")
+}
+
+func RegisterShoppingPerformanceViewServiceServer(s *grpc.Server, srv ShoppingPerformanceViewServiceServer) {
+	s.RegisterService(&_ShoppingPerformanceViewService_serviceDesc, srv)
+}
+
+func _ShoppingPerformanceViewService_GetShoppingPerformanceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetShoppingPerformanceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ShoppingPerformanceViewServiceServer).GetShoppingPerformanceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.ShoppingPerformanceViewService/GetShoppingPerformanceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ShoppingPerformanceViewServiceServer).GetShoppingPerformanceView(ctx, req.(*GetShoppingPerformanceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ShoppingPerformanceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.ShoppingPerformanceViewService",
+	HandlerType: (*ShoppingPerformanceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetShoppingPerformanceView",
+			Handler:    _ShoppingPerformanceViewService_GetShoppingPerformanceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/shopping_performance_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/topic_constant_service.pb.go b/googleapis/ads/googleads/v3/services/topic_constant_service.pb.go
new file mode 100644
index 0000000..c2823cc
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/topic_constant_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/topic_constant_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [TopicConstantService.GetTopicConstant][google.ads.googleads.v3.services.TopicConstantService.GetTopicConstant].
+type GetTopicConstantRequest struct {
+	// Required. Resource name of the Topic to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetTopicConstantRequest) Reset()         { *m = GetTopicConstantRequest{} }
+func (m *GetTopicConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetTopicConstantRequest) ProtoMessage()    {}
+func (*GetTopicConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_5b4ada837764fee6, []int{0}
+}
+
+func (m *GetTopicConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetTopicConstantRequest.Unmarshal(m, b)
+}
+func (m *GetTopicConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetTopicConstantRequest.Marshal(b, m, deterministic)
+}
+func (m *GetTopicConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetTopicConstantRequest.Merge(m, src)
+}
+func (m *GetTopicConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetTopicConstantRequest.Size(m)
+}
+func (m *GetTopicConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetTopicConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetTopicConstantRequest proto.InternalMessageInfo
+
+func (m *GetTopicConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetTopicConstantRequest)(nil), "google.ads.googleads.v3.services.GetTopicConstantRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/topic_constant_service.proto", fileDescriptor_5b4ada837764fee6)
+}
+
+var fileDescriptor_5b4ada837764fee6 = []byte{
+	// 405 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x41, 0x8b, 0xd3, 0x40,
+	0x18, 0x25, 0x29, 0x08, 0x06, 0x05, 0x09, 0x42, 0x6b, 0x14, 0x2c, 0xa5, 0x48, 0xf1, 0x30, 0x23,
+	0x06, 0x04, 0x47, 0x7b, 0x98, 0xf6, 0x50, 0x4f, 0x52, 0xaa, 0xf4, 0x20, 0x81, 0x30, 0x4d, 0xc6,
+	0x38, 0x90, 0xcc, 0xc4, 0xcc, 0x34, 0x17, 0x11, 0xc4, 0xbf, 0xe0, 0x3f, 0xf0, 0xe8, 0x7f, 0xf0,
+	0x0f, 0xf4, 0xea, 0xcd, 0xd3, 0x1e, 0xf6, 0xb4, 0xd7, 0xfd, 0x03, 0x4b, 0x3a, 0x99, 0xb4, 0xd9,
+	0xdd, 0xd0, 0xdb, 0x63, 0xde, 0x7b, 0xdf, 0xfb, 0xbe, 0x97, 0x38, 0xd3, 0x44, 0x88, 0x24, 0xa5,
+	0x90, 0xc4, 0x12, 0x6a, 0x58, 0xa1, 0xd2, 0x87, 0x92, 0x16, 0x25, 0x8b, 0xa8, 0x84, 0x4a, 0xe4,
+	0x2c, 0x0a, 0x23, 0xc1, 0xa5, 0x22, 0x5c, 0x85, 0xf5, 0x3b, 0xc8, 0x0b, 0xa1, 0x84, 0x3b, 0xd4,
+	0x1e, 0x40, 0x62, 0x09, 0x1a, 0x3b, 0x28, 0x7d, 0x60, 0xec, 0xde, 0xab, 0xae, 0x80, 0x82, 0x4a,
+	0xb1, 0x2d, 0x6e, 0x26, 0xe8, 0xc9, 0xde, 0x13, 0xe3, 0xcb, 0x19, 0x24, 0x9c, 0x0b, 0x45, 0x14,
+	0x13, 0x5c, 0xd6, 0x6c, 0xff, 0x88, 0x8d, 0x52, 0x46, 0x1b, 0xdb, 0xd3, 0x23, 0xe2, 0x33, 0xa3,
+	0x69, 0x1c, 0x6e, 0xe8, 0x17, 0x52, 0x32, 0x51, 0x68, 0xc1, 0x68, 0xee, 0xf4, 0x17, 0x54, 0x7d,
+	0xac, 0x22, 0xe7, 0x75, 0xe2, 0x8a, 0x7e, 0xdd, 0x52, 0xa9, 0xdc, 0x89, 0x73, 0xdf, 0x2c, 0x15,
+	0x72, 0x92, 0xd1, 0x81, 0x35, 0xb4, 0x26, 0x77, 0x67, 0xbd, 0x33, 0x6c, 0xaf, 0xee, 0x19, 0xe6,
+	0x3d, 0xc9, 0xe8, 0xcb, 0x4b, 0xcb, 0x79, 0xd8, 0x1a, 0xf1, 0x41, 0x9f, 0xeb, 0xfe, 0xb5, 0x9c,
+	0x07, 0xd7, 0xc7, 0xbb, 0xaf, 0xc1, 0xa9, 0x96, 0x40, 0xc7, 0x4a, 0xde, 0x8b, 0x4e, 0x6b, 0x53,
+	0x1f, 0x68, 0x19, 0x47, 0x6f, 0xff, 0xe3, 0xf6, 0x15, 0x3f, 0xff, 0x9d, 0xff, 0xb2, 0x9f, 0xb9,
+	0xe3, 0xaa, 0xf3, 0x6f, 0x2d, 0x66, 0xaa, 0x8e, 0x9d, 0x12, 0x3e, 0xff, 0xee, 0x3d, 0xde, 0xe1,
+	0xc1, 0x21, 0xa6, 0x46, 0x39, 0x93, 0x20, 0x12, 0xd9, 0xec, 0x87, 0xed, 0x8c, 0x23, 0x91, 0x9d,
+	0xbc, 0x66, 0xf6, 0xe8, 0xb6, 0x6e, 0x96, 0x55, 0xfd, 0x4b, 0xeb, 0xd3, 0xbb, 0xda, 0x9e, 0x88,
+	0x94, 0xf0, 0x04, 0x88, 0x22, 0x81, 0x09, 0xe5, 0xfb, 0x8f, 0x03, 0x0f, 0x81, 0xdd, 0x3f, 0xe4,
+	0x1b, 0x03, 0x7e, 0xdb, 0xbd, 0x05, 0xc6, 0x7f, 0xec, 0xe1, 0x42, 0x0f, 0xc4, 0xb1, 0x04, 0x1a,
+	0x56, 0x68, 0xed, 0x83, 0x3a, 0x58, 0xee, 0x8c, 0x24, 0xc0, 0xb1, 0x0c, 0x1a, 0x49, 0xb0, 0xf6,
+	0x03, 0x23, 0xb9, 0xb0, 0xc7, 0xfa, 0x1d, 0x21, 0x1c, 0x4b, 0x84, 0x1a, 0x11, 0x42, 0x6b, 0x1f,
+	0x21, 0x23, 0xdb, 0xdc, 0xd9, 0xef, 0xe9, 0x5f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x40, 0x95, 0xc9,
+	0x25, 0x37, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// TopicConstantServiceClient is the client API for TopicConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type TopicConstantServiceClient interface {
+	// Returns the requested topic constant in full detail.
+	GetTopicConstant(ctx context.Context, in *GetTopicConstantRequest, opts ...grpc.CallOption) (*resources.TopicConstant, error)
+}
+
+type topicConstantServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewTopicConstantServiceClient(cc grpc.ClientConnInterface) TopicConstantServiceClient {
+	return &topicConstantServiceClient{cc}
+}
+
+func (c *topicConstantServiceClient) GetTopicConstant(ctx context.Context, in *GetTopicConstantRequest, opts ...grpc.CallOption) (*resources.TopicConstant, error) {
+	out := new(resources.TopicConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.TopicConstantService/GetTopicConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// TopicConstantServiceServer is the server API for TopicConstantService service.
+type TopicConstantServiceServer interface {
+	// Returns the requested topic constant in full detail.
+	GetTopicConstant(context.Context, *GetTopicConstantRequest) (*resources.TopicConstant, error)
+}
+
+// UnimplementedTopicConstantServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedTopicConstantServiceServer struct {
+}
+
+func (*UnimplementedTopicConstantServiceServer) GetTopicConstant(ctx context.Context, req *GetTopicConstantRequest) (*resources.TopicConstant, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetTopicConstant not implemented")
+}
+
+func RegisterTopicConstantServiceServer(s *grpc.Server, srv TopicConstantServiceServer) {
+	s.RegisterService(&_TopicConstantService_serviceDesc, srv)
+}
+
+func _TopicConstantService_GetTopicConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetTopicConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TopicConstantServiceServer).GetTopicConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.TopicConstantService/GetTopicConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TopicConstantServiceServer).GetTopicConstant(ctx, req.(*GetTopicConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _TopicConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.TopicConstantService",
+	HandlerType: (*TopicConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetTopicConstant",
+			Handler:    _TopicConstantService_GetTopicConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/topic_constant_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/topic_view_service.pb.go b/googleapis/ads/googleads/v3/services/topic_view_service.pb.go
new file mode 100644
index 0000000..c3d8a3e
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/topic_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/topic_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [TopicViewService.GetTopicView][google.ads.googleads.v3.services.TopicViewService.GetTopicView].
+type GetTopicViewRequest struct {
+	// Required. The resource name of the topic view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetTopicViewRequest) Reset()         { *m = GetTopicViewRequest{} }
+func (m *GetTopicViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetTopicViewRequest) ProtoMessage()    {}
+func (*GetTopicViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_9cc4db1367a5244f, []int{0}
+}
+
+func (m *GetTopicViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetTopicViewRequest.Unmarshal(m, b)
+}
+func (m *GetTopicViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetTopicViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetTopicViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetTopicViewRequest.Merge(m, src)
+}
+func (m *GetTopicViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetTopicViewRequest.Size(m)
+}
+func (m *GetTopicViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetTopicViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetTopicViewRequest proto.InternalMessageInfo
+
+func (m *GetTopicViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetTopicViewRequest)(nil), "google.ads.googleads.v3.services.GetTopicViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/topic_view_service.proto", fileDescriptor_9cc4db1367a5244f)
+}
+
+var fileDescriptor_9cc4db1367a5244f = []byte{
+	// 409 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0xca, 0xd3, 0x40,
+	0x14, 0x25, 0xf9, 0x40, 0x30, 0x54, 0x90, 0x88, 0x58, 0xa2, 0x60, 0x29, 0x5d, 0x94, 0x52, 0x66,
+	0xa0, 0xc1, 0x85, 0x23, 0x22, 0x53, 0x84, 0xba, 0x92, 0x52, 0x25, 0x0b, 0x09, 0x84, 0x69, 0x72,
+	0x8d, 0x03, 0x49, 0x26, 0x66, 0xa6, 0xe9, 0x42, 0xdc, 0xf8, 0x0a, 0xbe, 0x81, 0x4b, 0xdf, 0xc0,
+	0x57, 0xe8, 0xd6, 0x9d, 0x2b, 0x17, 0xae, 0xf4, 0x15, 0x5c, 0x48, 0x3a, 0x99, 0xb4, 0x95, 0xaf,
+	0x74, 0x77, 0x98, 0xf3, 0x73, 0xef, 0x3d, 0x89, 0xf3, 0x38, 0x15, 0x22, 0xcd, 0x00, 0xb3, 0x44,
+	0x62, 0x0d, 0x1b, 0x54, 0xfb, 0x58, 0x42, 0x55, 0xf3, 0x18, 0x24, 0x56, 0xa2, 0xe4, 0x71, 0x54,
+	0x73, 0xd8, 0x46, 0xed, 0x1b, 0x2a, 0x2b, 0xa1, 0x84, 0x3b, 0xd0, 0x7a, 0xc4, 0x12, 0x89, 0x3a,
+	0x2b, 0xaa, 0x7d, 0x64, 0xac, 0xde, 0xec, 0x5c, 0x78, 0x05, 0x52, 0x6c, 0xaa, 0xd3, 0x74, 0x9d,
+	0xea, 0x3d, 0x30, 0x9e, 0x92, 0x63, 0x56, 0x14, 0x42, 0x31, 0xc5, 0x45, 0x21, 0x5b, 0xf6, 0xde,
+	0x11, 0x1b, 0x67, 0x1c, 0x0a, 0xd5, 0x12, 0x0f, 0x8f, 0x88, 0xb7, 0x1c, 0xb2, 0x24, 0x5a, 0xc3,
+	0x3b, 0x56, 0x73, 0x51, 0x69, 0xc1, 0xf0, 0x99, 0x73, 0x67, 0x01, 0xea, 0x75, 0x33, 0x2e, 0xe0,
+	0xb0, 0x5d, 0xc1, 0xfb, 0x0d, 0x48, 0xe5, 0x8e, 0x9d, 0x5b, 0x66, 0x99, 0xa8, 0x60, 0x39, 0xf4,
+	0xad, 0x81, 0x35, 0xbe, 0x39, 0xbf, 0xfa, 0x49, 0xed, 0x55, 0xcf, 0x30, 0x2f, 0x59, 0x0e, 0xb3,
+	0x3f, 0x96, 0x73, 0xbb, 0xb3, 0xbf, 0xd2, 0x27, 0xba, 0xdf, 0x2c, 0xa7, 0x77, 0x1c, 0xeb, 0x3e,
+	0x42, 0x97, 0x5a, 0x41, 0xd7, 0xac, 0xe1, 0x4d, 0xcf, 0xda, 0xba, 0xaa, 0x50, 0x67, 0x1a, 0x3e,
+	0xff, 0x41, 0x4f, 0xb7, 0xfe, 0xf4, 0xfd, 0xd7, 0x67, 0x1b, 0xb9, 0xd3, 0xa6, 0xdb, 0x0f, 0x27,
+	0xcc, 0xd3, 0x78, 0x23, 0x95, 0xc8, 0xa1, 0x92, 0x78, 0xa2, 0xcb, 0x6e, 0x12, 0x24, 0x9e, 0x7c,
+	0xf4, 0xee, 0xef, 0x68, 0xff, 0x30, 0xaa, 0x45, 0x25, 0x97, 0x28, 0x16, 0xf9, 0xfc, 0xaf, 0xe5,
+	0x8c, 0x62, 0x91, 0x5f, 0xbc, 0x66, 0x7e, 0xf7, 0xff, 0x4e, 0x96, 0x4d, 0xdd, 0x4b, 0xeb, 0xcd,
+	0x8b, 0xd6, 0x9a, 0x8a, 0x8c, 0x15, 0x29, 0x12, 0x55, 0x8a, 0x53, 0x28, 0xf6, 0x1f, 0x03, 0x1f,
+	0x86, 0x9d, 0xff, 0xf1, 0x9e, 0x18, 0xf0, 0xc5, 0xbe, 0x5a, 0x50, 0xfa, 0xd5, 0x1e, 0x2c, 0x74,
+	0x20, 0x4d, 0x24, 0xd2, 0xb0, 0x41, 0x81, 0x8f, 0xda, 0xc1, 0x72, 0x67, 0x24, 0x21, 0x4d, 0x64,
+	0xd8, 0x49, 0xc2, 0xc0, 0x0f, 0x8d, 0xe4, 0xb7, 0x3d, 0xd2, 0xef, 0x84, 0xd0, 0x44, 0x12, 0xd2,
+	0x89, 0x08, 0x09, 0x7c, 0x42, 0x8c, 0x6c, 0x7d, 0x63, 0xbf, 0xa7, 0xff, 0x2f, 0x00, 0x00, 0xff,
+	0xff, 0xac, 0x59, 0x01, 0xa5, 0x1f, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// TopicViewServiceClient is the client API for TopicViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type TopicViewServiceClient interface {
+	// Returns the requested topic view in full detail.
+	GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error)
+}
+
+type topicViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewTopicViewServiceClient(cc grpc.ClientConnInterface) TopicViewServiceClient {
+	return &topicViewServiceClient{cc}
+}
+
+func (c *topicViewServiceClient) GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error) {
+	out := new(resources.TopicView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.TopicViewService/GetTopicView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// TopicViewServiceServer is the server API for TopicViewService service.
+type TopicViewServiceServer interface {
+	// Returns the requested topic view in full detail.
+	GetTopicView(context.Context, *GetTopicViewRequest) (*resources.TopicView, error)
+}
+
+// UnimplementedTopicViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedTopicViewServiceServer struct {
+}
+
+func (*UnimplementedTopicViewServiceServer) GetTopicView(ctx context.Context, req *GetTopicViewRequest) (*resources.TopicView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetTopicView not implemented")
+}
+
+func RegisterTopicViewServiceServer(s *grpc.Server, srv TopicViewServiceServer) {
+	s.RegisterService(&_TopicViewService_serviceDesc, srv)
+}
+
+func _TopicViewService_GetTopicView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetTopicViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TopicViewServiceServer).GetTopicView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.TopicViewService/GetTopicView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TopicViewServiceServer).GetTopicView(ctx, req.(*GetTopicViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _TopicViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.TopicViewService",
+	HandlerType: (*TopicViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetTopicView",
+			Handler:    _TopicViewService_GetTopicView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/topic_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/user_interest_service.pb.go b/googleapis/ads/googleads/v3/services/user_interest_service.pb.go
new file mode 100644
index 0000000..4bd5490
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/user_interest_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/user_interest_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [UserInterestService.GetUserInterest][google.ads.googleads.v3.services.UserInterestService.GetUserInterest].
+type GetUserInterestRequest struct {
+	// Required. Resource name of the UserInterest to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserInterestRequest) Reset()         { *m = GetUserInterestRequest{} }
+func (m *GetUserInterestRequest) String() string { return proto.CompactTextString(m) }
+func (*GetUserInterestRequest) ProtoMessage()    {}
+func (*GetUserInterestRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a82485cc994a3e73, []int{0}
+}
+
+func (m *GetUserInterestRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserInterestRequest.Unmarshal(m, b)
+}
+func (m *GetUserInterestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserInterestRequest.Marshal(b, m, deterministic)
+}
+func (m *GetUserInterestRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserInterestRequest.Merge(m, src)
+}
+func (m *GetUserInterestRequest) XXX_Size() int {
+	return xxx_messageInfo_GetUserInterestRequest.Size(m)
+}
+func (m *GetUserInterestRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserInterestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserInterestRequest proto.InternalMessageInfo
+
+func (m *GetUserInterestRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetUserInterestRequest)(nil), "google.ads.googleads.v3.services.GetUserInterestRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/user_interest_service.proto", fileDescriptor_a82485cc994a3e73)
+}
+
+var fileDescriptor_a82485cc994a3e73 = []byte{
+	// 411 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x8b, 0xd4, 0x40,
+	0x14, 0x27, 0x39, 0x10, 0x0c, 0x8a, 0x10, 0x41, 0x97, 0x55, 0x70, 0x39, 0xae, 0x38, 0xae, 0x98,
+	0x41, 0x83, 0x20, 0xa3, 0x16, 0xb3, 0x4d, 0xb4, 0x91, 0xe3, 0xc4, 0x2d, 0x24, 0x10, 0xe6, 0x92,
+	0x67, 0x1c, 0x48, 0x66, 0xd6, 0x79, 0x93, 0x34, 0x62, 0xe3, 0x57, 0xf0, 0x1b, 0x58, 0xfa, 0x3d,
+	0x6c, 0xae, 0xb5, 0xb3, 0xb2, 0xb0, 0xf2, 0x23, 0xd8, 0x28, 0xd9, 0xc9, 0xe4, 0x72, 0x7a, 0xcb,
+	0x76, 0x3f, 0xf2, 0x7e, 0x7f, 0xde, 0xfb, 0x4d, 0xa2, 0x27, 0x95, 0xd6, 0x55, 0x0d, 0x54, 0x94,
+	0x48, 0x1d, 0xec, 0x51, 0x97, 0x50, 0x04, 0xd3, 0xc9, 0x02, 0x90, 0xb6, 0x08, 0x26, 0x97, 0xca,
+	0x82, 0x01, 0xb4, 0xf9, 0xf0, 0x99, 0xac, 0x8d, 0xb6, 0x3a, 0x5e, 0x38, 0x09, 0x11, 0x25, 0x92,
+	0x51, 0x4d, 0xba, 0x84, 0x78, 0xf5, 0xfc, 0xe1, 0x36, 0x7f, 0x03, 0xa8, 0x5b, 0xf3, 0x5f, 0x80,
+	0x33, 0x9e, 0xdf, 0xf5, 0xb2, 0xb5, 0xa4, 0x42, 0x29, 0x6d, 0x85, 0x95, 0x5a, 0xe1, 0x30, 0xbd,
+	0x3d, 0x99, 0x16, 0xb5, 0x04, 0xe5, 0x65, 0xf7, 0x26, 0x83, 0x37, 0x12, 0xea, 0x32, 0x3f, 0x85,
+	0xb7, 0xa2, 0x93, 0xda, 0x38, 0xc2, 0xfe, 0x32, 0xba, 0x95, 0x82, 0x7d, 0x85, 0x60, 0x9e, 0x0f,
+	0x81, 0x27, 0xf0, 0xae, 0x05, 0xb4, 0xf1, 0x61, 0x74, 0xdd, 0xaf, 0x94, 0x2b, 0xd1, 0xc0, 0x2c,
+	0x58, 0x04, 0x87, 0x57, 0x97, 0x7b, 0x3f, 0x78, 0x78, 0x72, 0xcd, 0x4f, 0x5e, 0x88, 0x06, 0x1e,
+	0xfc, 0x0e, 0xa2, 0x9b, 0x53, 0x87, 0x97, 0xee, 0xd6, 0xf8, 0x6b, 0x10, 0xdd, 0xf8, 0xc7, 0x3c,
+	0x7e, 0x44, 0x76, 0x35, 0x44, 0x2e, 0xdf, 0x67, 0x4e, 0xb7, 0x2a, 0xc7, 0xe6, 0xc8, 0x54, 0xb7,
+	0x9f, 0x7e, 0xe7, 0x17, 0x2f, 0xf8, 0xf8, 0xed, 0xe7, 0xa7, 0xf0, 0x7e, 0x4c, 0xfb, 0xb6, 0xdf,
+	0x5f, 0x98, 0x3c, 0x2d, 0x5a, 0xb4, 0xba, 0x01, 0x83, 0xf4, 0x68, 0x53, 0xbf, 0x37, 0x41, 0x7a,
+	0xf4, 0x61, 0x7e, 0xe7, 0x8c, 0xcf, 0xce, 0x03, 0x07, 0xb4, 0x96, 0x48, 0x0a, 0xdd, 0x2c, 0xff,
+	0x04, 0xd1, 0x41, 0xa1, 0x9b, 0x9d, 0x67, 0x2d, 0x67, 0x97, 0x54, 0x74, 0xdc, 0xbf, 0xc1, 0x71,
+	0xf0, 0xfa, 0xd9, 0xa0, 0xae, 0x74, 0x2d, 0x54, 0x45, 0xb4, 0xa9, 0x68, 0x05, 0x6a, 0xf3, 0x42,
+	0xf4, 0x3c, 0x6f, 0xfb, 0x3f, 0xf9, 0xd8, 0x83, 0xcf, 0xe1, 0x5e, 0xca, 0xf9, 0x97, 0x70, 0x91,
+	0x3a, 0x43, 0x5e, 0x22, 0x71, 0xb0, 0x47, 0xab, 0x84, 0x0c, 0xc1, 0x78, 0xe6, 0x29, 0x19, 0x2f,
+	0x31, 0x1b, 0x29, 0xd9, 0x2a, 0xc9, 0x3c, 0xe5, 0x57, 0x78, 0xe0, 0xbe, 0x33, 0xc6, 0x4b, 0x64,
+	0x6c, 0x24, 0x31, 0xb6, 0x4a, 0x18, 0xf3, 0xb4, 0xd3, 0x2b, 0x9b, 0x3d, 0x93, 0xbf, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x21, 0xc7, 0xa4, 0xbc, 0x3a, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// UserInterestServiceClient is the client API for UserInterestService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type UserInterestServiceClient interface {
+	// Returns the requested user interest in full detail
+	GetUserInterest(ctx context.Context, in *GetUserInterestRequest, opts ...grpc.CallOption) (*resources.UserInterest, error)
+}
+
+type userInterestServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewUserInterestServiceClient(cc grpc.ClientConnInterface) UserInterestServiceClient {
+	return &userInterestServiceClient{cc}
+}
+
+func (c *userInterestServiceClient) GetUserInterest(ctx context.Context, in *GetUserInterestRequest, opts ...grpc.CallOption) (*resources.UserInterest, error) {
+	out := new(resources.UserInterest)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.UserInterestService/GetUserInterest", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// UserInterestServiceServer is the server API for UserInterestService service.
+type UserInterestServiceServer interface {
+	// Returns the requested user interest in full detail
+	GetUserInterest(context.Context, *GetUserInterestRequest) (*resources.UserInterest, error)
+}
+
+// UnimplementedUserInterestServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedUserInterestServiceServer struct {
+}
+
+func (*UnimplementedUserInterestServiceServer) GetUserInterest(ctx context.Context, req *GetUserInterestRequest) (*resources.UserInterest, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetUserInterest not implemented")
+}
+
+func RegisterUserInterestServiceServer(s *grpc.Server, srv UserInterestServiceServer) {
+	s.RegisterService(&_UserInterestService_serviceDesc, srv)
+}
+
+func _UserInterestService_GetUserInterest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserInterestRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserInterestServiceServer).GetUserInterest(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.UserInterestService/GetUserInterest",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserInterestServiceServer).GetUserInterest(ctx, req.(*GetUserInterestRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _UserInterestService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.UserInterestService",
+	HandlerType: (*UserInterestServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetUserInterest",
+			Handler:    _UserInterestService_GetUserInterest_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/user_interest_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/user_list_service.pb.go b/googleapis/ads/googleads/v3/services/user_list_service.pb.go
new file mode 100644
index 0000000..492a0b8
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/user_list_service.pb.go
@@ -0,0 +1,528 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/user_list_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	status "google.golang.org/genproto/googleapis/rpc/status"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status1 "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [UserListService.GetUserList][google.ads.googleads.v3.services.UserListService.GetUserList].
+type GetUserListRequest struct {
+	// Required. The resource name of the user list to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserListRequest) Reset()         { *m = GetUserListRequest{} }
+func (m *GetUserListRequest) String() string { return proto.CompactTextString(m) }
+func (*GetUserListRequest) ProtoMessage()    {}
+func (*GetUserListRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1187560e29a12465, []int{0}
+}
+
+func (m *GetUserListRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserListRequest.Unmarshal(m, b)
+}
+func (m *GetUserListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserListRequest.Marshal(b, m, deterministic)
+}
+func (m *GetUserListRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserListRequest.Merge(m, src)
+}
+func (m *GetUserListRequest) XXX_Size() int {
+	return xxx_messageInfo_GetUserListRequest.Size(m)
+}
+func (m *GetUserListRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserListRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserListRequest proto.InternalMessageInfo
+
+func (m *GetUserListRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [UserListService.MutateUserLists][google.ads.googleads.v3.services.UserListService.MutateUserLists].
+type MutateUserListsRequest struct {
+	// Required. The ID of the customer whose user lists are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// Required. The list of operations to perform on individual user lists.
+	Operations []*UserListOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, all operations will be carried
+	// out in one transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// If true, the request is validated but not executed. Only errors are
+	// returned, not results.
+	ValidateOnly         bool     `protobuf:"varint,4,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateUserListsRequest) Reset()         { *m = MutateUserListsRequest{} }
+func (m *MutateUserListsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListsRequest) ProtoMessage()    {}
+func (*MutateUserListsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1187560e29a12465, []int{1}
+}
+
+func (m *MutateUserListsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListsRequest.Unmarshal(m, b)
+}
+func (m *MutateUserListsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListsRequest.Marshal(b, m, deterministic)
+}
+func (m *MutateUserListsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListsRequest.Merge(m, src)
+}
+func (m *MutateUserListsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListsRequest.Size(m)
+}
+func (m *MutateUserListsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListsRequest proto.InternalMessageInfo
+
+func (m *MutateUserListsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateUserListsRequest) GetOperations() []*UserListOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *MutateUserListsRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *MutateUserListsRequest) GetValidateOnly() bool {
+	if m != nil {
+		return m.ValidateOnly
+	}
+	return false
+}
+
+// A single operation (create, update) on a user list.
+type UserListOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*UserListOperation_Create
+	//	*UserListOperation_Update
+	//	*UserListOperation_Remove
+	Operation            isUserListOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *UserListOperation) Reset()         { *m = UserListOperation{} }
+func (m *UserListOperation) String() string { return proto.CompactTextString(m) }
+func (*UserListOperation) ProtoMessage()    {}
+func (*UserListOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1187560e29a12465, []int{2}
+}
+
+func (m *UserListOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListOperation.Unmarshal(m, b)
+}
+func (m *UserListOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListOperation.Marshal(b, m, deterministic)
+}
+func (m *UserListOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListOperation.Merge(m, src)
+}
+func (m *UserListOperation) XXX_Size() int {
+	return xxx_messageInfo_UserListOperation.Size(m)
+}
+func (m *UserListOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListOperation proto.InternalMessageInfo
+
+func (m *UserListOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isUserListOperation_Operation interface {
+	isUserListOperation_Operation()
+}
+
+type UserListOperation_Create struct {
+	Create *resources.UserList `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type UserListOperation_Update struct {
+	Update *resources.UserList `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type UserListOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*UserListOperation_Create) isUserListOperation_Operation() {}
+
+func (*UserListOperation_Update) isUserListOperation_Operation() {}
+
+func (*UserListOperation_Remove) isUserListOperation_Operation() {}
+
+func (m *UserListOperation) GetOperation() isUserListOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetCreate() *resources.UserList {
+	if x, ok := m.GetOperation().(*UserListOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetUpdate() *resources.UserList {
+	if x, ok := m.GetOperation().(*UserListOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*UserListOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*UserListOperation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*UserListOperation_Create)(nil),
+		(*UserListOperation_Update)(nil),
+		(*UserListOperation_Remove)(nil),
+	}
+}
+
+// Response message for user list mutate.
+type MutateUserListsResponse struct {
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors),
+	// we return an RPC level error.
+	PartialFailureError *status.Status `protobuf:"bytes,3,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	// All results for the mutate.
+	Results              []*MutateUserListResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateUserListsResponse) Reset()         { *m = MutateUserListsResponse{} }
+func (m *MutateUserListsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListsResponse) ProtoMessage()    {}
+func (*MutateUserListsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1187560e29a12465, []int{3}
+}
+
+func (m *MutateUserListsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListsResponse.Unmarshal(m, b)
+}
+func (m *MutateUserListsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListsResponse.Marshal(b, m, deterministic)
+}
+func (m *MutateUserListsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListsResponse.Merge(m, src)
+}
+func (m *MutateUserListsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListsResponse.Size(m)
+}
+func (m *MutateUserListsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListsResponse proto.InternalMessageInfo
+
+func (m *MutateUserListsResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+func (m *MutateUserListsResponse) GetResults() []*MutateUserListResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the user list mutate.
+type MutateUserListResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateUserListResult) Reset()         { *m = MutateUserListResult{} }
+func (m *MutateUserListResult) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListResult) ProtoMessage()    {}
+func (*MutateUserListResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1187560e29a12465, []int{4}
+}
+
+func (m *MutateUserListResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListResult.Unmarshal(m, b)
+}
+func (m *MutateUserListResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListResult.Marshal(b, m, deterministic)
+}
+func (m *MutateUserListResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListResult.Merge(m, src)
+}
+func (m *MutateUserListResult) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListResult.Size(m)
+}
+func (m *MutateUserListResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListResult proto.InternalMessageInfo
+
+func (m *MutateUserListResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetUserListRequest)(nil), "google.ads.googleads.v3.services.GetUserListRequest")
+	proto.RegisterType((*MutateUserListsRequest)(nil), "google.ads.googleads.v3.services.MutateUserListsRequest")
+	proto.RegisterType((*UserListOperation)(nil), "google.ads.googleads.v3.services.UserListOperation")
+	proto.RegisterType((*MutateUserListsResponse)(nil), "google.ads.googleads.v3.services.MutateUserListsResponse")
+	proto.RegisterType((*MutateUserListResult)(nil), "google.ads.googleads.v3.services.MutateUserListResult")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/user_list_service.proto", fileDescriptor_1187560e29a12465)
+}
+
+var fileDescriptor_1187560e29a12465 = []byte{
+	// 757 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6b, 0xdb, 0x48,
+	0x18, 0x5e, 0xc9, 0x4b, 0x76, 0x33, 0x4a, 0x36, 0xec, 0x6c, 0x36, 0x31, 0xde, 0x85, 0x35, 0xda,
+	0x40, 0x8d, 0xd3, 0x4a, 0xd4, 0x2a, 0x25, 0x55, 0x48, 0x41, 0x2e, 0xf9, 0x28, 0x34, 0x4d, 0x50,
+	0x68, 0x28, 0xc5, 0x20, 0x26, 0xd2, 0xc4, 0x15, 0x91, 0x34, 0xea, 0xcc, 0xc8, 0x10, 0x42, 0x2e,
+	0x85, 0xfe, 0x82, 0xfe, 0x83, 0x1e, 0x7b, 0x2d, 0xfd, 0x05, 0xbd, 0xe5, 0xda, 0x5b, 0x4e, 0x3d,
+	0x94, 0x1e, 0xfa, 0x17, 0x7a, 0x29, 0xd2, 0x68, 0xfc, 0x95, 0x04, 0x93, 0xdc, 0x5e, 0xcf, 0xfb,
+	0x3c, 0xcf, 0xfb, 0x2d, 0x83, 0x95, 0x2e, 0x21, 0xdd, 0x08, 0x9b, 0x28, 0x60, 0xa6, 0x30, 0x73,
+	0xab, 0x67, 0x99, 0x0c, 0xd3, 0x5e, 0xe8, 0x63, 0x66, 0x66, 0x0c, 0x53, 0x2f, 0x0a, 0x19, 0xf7,
+	0xca, 0x27, 0x23, 0xa5, 0x84, 0x13, 0x58, 0x17, 0x70, 0x03, 0x05, 0xcc, 0xe8, 0x33, 0x8d, 0x9e,
+	0x65, 0x48, 0x66, 0xed, 0xee, 0x55, 0xda, 0x14, 0x33, 0x92, 0xd1, 0x11, 0x71, 0x21, 0x5a, 0xfb,
+	0x57, 0x52, 0xd2, 0xd0, 0x44, 0x49, 0x42, 0x38, 0xe2, 0x21, 0x49, 0x58, 0xe9, 0x5d, 0x1c, 0xf2,
+	0xfa, 0x51, 0x88, 0x13, 0x49, 0xfb, 0x6f, 0xc8, 0x71, 0x18, 0xe2, 0x28, 0xf0, 0x0e, 0xf0, 0x4b,
+	0xd4, 0x0b, 0x09, 0x2d, 0x01, 0x65, 0xb2, 0x66, 0xf1, 0xeb, 0x20, 0x3b, 0x2c, 0x51, 0x31, 0x62,
+	0x47, 0x63, 0xda, 0x34, 0xf5, 0x4d, 0xc6, 0x11, 0xcf, 0xca, 0xa0, 0xfa, 0x43, 0x00, 0x37, 0x31,
+	0x7f, 0xc6, 0x30, 0x7d, 0x12, 0x32, 0xee, 0xe2, 0x57, 0x19, 0x66, 0x1c, 0x36, 0xc0, 0xac, 0xac,
+	0xc2, 0x4b, 0x50, 0x8c, 0xab, 0x4a, 0x5d, 0x69, 0x4c, 0xb7, 0x2b, 0x5f, 0x1c, 0xd5, 0x9d, 0x91,
+	0x9e, 0xa7, 0x28, 0xc6, 0xfa, 0x37, 0x05, 0x2c, 0x6c, 0x67, 0x1c, 0x71, 0x2c, 0x35, 0x98, 0x14,
+	0x59, 0x02, 0x9a, 0x9f, 0x31, 0x4e, 0x62, 0x4c, 0xbd, 0x30, 0x18, 0x96, 0x00, 0xf2, 0xfd, 0x71,
+	0x00, 0x9f, 0x03, 0x40, 0x52, 0x4c, 0x45, 0x27, 0xaa, 0x6a, 0xbd, 0xd2, 0xd0, 0x5a, 0x96, 0x31,
+	0xa9, 0xfb, 0x86, 0x8c, 0xb6, 0x23, 0xb9, 0xa5, 0xf2, 0x40, 0x0b, 0xde, 0x02, 0x73, 0x29, 0xa2,
+	0x3c, 0x44, 0x91, 0x77, 0x88, 0xc2, 0x28, 0xa3, 0xb8, 0x5a, 0xa9, 0x2b, 0x8d, 0xdf, 0xdd, 0x3f,
+	0xca, 0xe7, 0x0d, 0xf1, 0x0a, 0xff, 0x07, 0xb3, 0x3d, 0x14, 0x85, 0x01, 0xe2, 0xd8, 0x23, 0x49,
+	0x74, 0x5c, 0xfd, 0xb5, 0x80, 0xcd, 0xc8, 0xc7, 0x9d, 0x24, 0x3a, 0xd6, 0xdf, 0xa8, 0xe0, 0xcf,
+	0x0b, 0x41, 0xe1, 0x2a, 0xd0, 0xb2, 0xb4, 0x20, 0xe6, 0xcd, 0x2e, 0x88, 0x5a, 0xab, 0x26, 0xd3,
+	0x97, 0xf3, 0x30, 0x36, 0xf2, 0x79, 0x6c, 0x23, 0x76, 0xe4, 0x02, 0x01, 0xcf, 0x6d, 0xb8, 0x0e,
+	0xa6, 0x7c, 0x8a, 0x11, 0x17, 0xed, 0xd5, 0x5a, 0xcb, 0x57, 0x96, 0xdd, 0x5f, 0xa9, 0x7e, 0xdd,
+	0x5b, 0xbf, 0xb8, 0x25, 0x39, 0x97, 0x11, 0xa2, 0x55, 0xf5, 0x46, 0x32, 0x82, 0x0c, 0xab, 0x60,
+	0x8a, 0xe2, 0x98, 0xf4, 0x44, 0x97, 0xa6, 0x73, 0x8f, 0xf8, 0xdd, 0xd6, 0xc0, 0x74, 0xbf, 0xad,
+	0xfa, 0x07, 0x05, 0x2c, 0x5e, 0x18, 0x38, 0x4b, 0x49, 0xc2, 0x30, 0xdc, 0x00, 0x7f, 0x8f, 0x75,
+	0xdc, 0xc3, 0x94, 0x12, 0x5a, 0x28, 0x6a, 0x2d, 0x28, 0x13, 0xa3, 0xa9, 0x6f, 0xec, 0x15, 0x5b,
+	0xe8, 0xfe, 0x35, 0x3a, 0x8b, 0xf5, 0x1c, 0x0e, 0x77, 0xc1, 0x6f, 0x14, 0xb3, 0x2c, 0xe2, 0x72,
+	0x21, 0xee, 0x4f, 0x5e, 0x88, 0xd1, 0x9c, 0xdc, 0x82, 0xee, 0x4a, 0x19, 0x7d, 0x15, 0xcc, 0x5f,
+	0x06, 0xc8, 0x47, 0x7f, 0xc9, 0xa2, 0x8f, 0xee, 0x78, 0xeb, 0x53, 0x05, 0xcc, 0x49, 0xde, 0x9e,
+	0x88, 0x07, 0x3f, 0x2a, 0x40, 0x1b, 0x3a, 0x1c, 0x78, 0x6f, 0x72, 0x86, 0x17, 0xef, 0xac, 0x76,
+	0x9d, 0x51, 0xe9, 0x8f, 0xce, 0x9d, 0xd1, 0x64, 0x5f, 0x7f, 0xfe, 0xfa, 0x56, 0xbd, 0x03, 0x97,
+	0xf3, 0x8f, 0xce, 0xc9, 0x88, 0x67, 0x4d, 0x1e, 0x18, 0x33, 0x9b, 0xc5, 0x57, 0xa8, 0x98, 0x93,
+	0xd9, 0x3c, 0x85, 0xe7, 0x0a, 0x98, 0x1b, 0x1b, 0x1f, 0x5c, 0xb9, 0x6e, 0x77, 0xe5, 0x89, 0xd7,
+	0x1e, 0xdc, 0x80, 0x29, 0x76, 0x45, 0x77, 0xcf, 0x9d, 0x85, 0xa1, 0xcf, 0xc3, 0xed, 0xc1, 0xe1,
+	0x16, 0x65, 0x59, 0xba, 0x91, 0x97, 0x35, 0xa8, 0xe3, 0x64, 0x08, 0xbc, 0xd6, 0x3c, 0x1d, 0x54,
+	0x65, 0xc7, 0x45, 0x04, 0x5b, 0x69, 0xd6, 0xfe, 0x39, 0x73, 0xaa, 0x83, 0x2c, 0x4a, 0x2b, 0x0d,
+	0x99, 0xe1, 0x93, 0xb8, 0xfd, 0x43, 0x01, 0x4b, 0x3e, 0x89, 0x27, 0x66, 0xdc, 0x9e, 0x1f, 0x9b,
+	0xf5, 0x6e, 0x7e, 0xc5, 0xbb, 0xca, 0x8b, 0xad, 0x92, 0xd9, 0x25, 0x11, 0x4a, 0xba, 0x06, 0xa1,
+	0x5d, 0xb3, 0x8b, 0x93, 0xe2, 0xc6, 0xcd, 0x41, 0xac, 0xab, 0xff, 0x6b, 0x56, 0xa5, 0xf1, 0x4e,
+	0xad, 0x6c, 0x3a, 0xce, 0x7b, 0xb5, 0xbe, 0x29, 0x04, 0x9d, 0x80, 0x19, 0xc2, 0xcc, 0xad, 0x7d,
+	0xcb, 0x28, 0x03, 0xb3, 0x33, 0x09, 0xe9, 0x38, 0x01, 0xeb, 0xf4, 0x21, 0x9d, 0x7d, 0xab, 0x23,
+	0x21, 0xdf, 0xd5, 0x25, 0xf1, 0x6e, 0xdb, 0x4e, 0xc0, 0x6c, 0xbb, 0x0f, 0xb2, 0xed, 0x7d, 0xcb,
+	0xb6, 0x25, 0xec, 0x60, 0xaa, 0xc8, 0xd3, 0xfa, 0x19, 0x00, 0x00, 0xff, 0xff, 0x16, 0x2a, 0xc1,
+	0xa6, 0x12, 0x07, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// UserListServiceClient is the client API for UserListService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type UserListServiceClient interface {
+	// Returns the requested user list.
+	GetUserList(ctx context.Context, in *GetUserListRequest, opts ...grpc.CallOption) (*resources.UserList, error)
+	// Creates or updates user lists. Operation statuses are returned.
+	MutateUserLists(ctx context.Context, in *MutateUserListsRequest, opts ...grpc.CallOption) (*MutateUserListsResponse, error)
+}
+
+type userListServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewUserListServiceClient(cc grpc.ClientConnInterface) UserListServiceClient {
+	return &userListServiceClient{cc}
+}
+
+func (c *userListServiceClient) GetUserList(ctx context.Context, in *GetUserListRequest, opts ...grpc.CallOption) (*resources.UserList, error) {
+	out := new(resources.UserList)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.UserListService/GetUserList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *userListServiceClient) MutateUserLists(ctx context.Context, in *MutateUserListsRequest, opts ...grpc.CallOption) (*MutateUserListsResponse, error) {
+	out := new(MutateUserListsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.UserListService/MutateUserLists", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// UserListServiceServer is the server API for UserListService service.
+type UserListServiceServer interface {
+	// Returns the requested user list.
+	GetUserList(context.Context, *GetUserListRequest) (*resources.UserList, error)
+	// Creates or updates user lists. Operation statuses are returned.
+	MutateUserLists(context.Context, *MutateUserListsRequest) (*MutateUserListsResponse, error)
+}
+
+// UnimplementedUserListServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedUserListServiceServer struct {
+}
+
+func (*UnimplementedUserListServiceServer) GetUserList(ctx context.Context, req *GetUserListRequest) (*resources.UserList, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method GetUserList not implemented")
+}
+func (*UnimplementedUserListServiceServer) MutateUserLists(ctx context.Context, req *MutateUserListsRequest) (*MutateUserListsResponse, error) {
+	return nil, status1.Errorf(codes.Unimplemented, "method MutateUserLists not implemented")
+}
+
+func RegisterUserListServiceServer(s *grpc.Server, srv UserListServiceServer) {
+	s.RegisterService(&_UserListService_serviceDesc, srv)
+}
+
+func _UserListService_GetUserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserListRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserListServiceServer).GetUserList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.UserListService/GetUserList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserListServiceServer).GetUserList(ctx, req.(*GetUserListRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _UserListService_MutateUserLists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateUserListsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserListServiceServer).MutateUserLists(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.UserListService/MutateUserLists",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserListServiceServer).MutateUserLists(ctx, req.(*MutateUserListsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _UserListService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.UserListService",
+	HandlerType: (*UserListServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetUserList",
+			Handler:    _UserListService_GetUserList_Handler,
+		},
+		{
+			MethodName: "MutateUserLists",
+			Handler:    _UserListService_MutateUserLists_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/user_list_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/user_location_view_service.pb.go b/googleapis/ads/googleads/v3/services/user_location_view_service.pb.go
new file mode 100644
index 0000000..30464f6
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/user_location_view_service.pb.go
@@ -0,0 +1,189 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/user_location_view_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [UserLocationViewService.GetUserLocationView][google.ads.googleads.v3.services.UserLocationViewService.GetUserLocationView].
+type GetUserLocationViewRequest struct {
+	// Required. The resource name of the user location view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserLocationViewRequest) Reset()         { *m = GetUserLocationViewRequest{} }
+func (m *GetUserLocationViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetUserLocationViewRequest) ProtoMessage()    {}
+func (*GetUserLocationViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7fcc93788fa7dbb3, []int{0}
+}
+
+func (m *GetUserLocationViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserLocationViewRequest.Unmarshal(m, b)
+}
+func (m *GetUserLocationViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserLocationViewRequest.Marshal(b, m, deterministic)
+}
+func (m *GetUserLocationViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserLocationViewRequest.Merge(m, src)
+}
+func (m *GetUserLocationViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetUserLocationViewRequest.Size(m)
+}
+func (m *GetUserLocationViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserLocationViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserLocationViewRequest proto.InternalMessageInfo
+
+func (m *GetUserLocationViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetUserLocationViewRequest)(nil), "google.ads.googleads.v3.services.GetUserLocationViewRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/user_location_view_service.proto", fileDescriptor_7fcc93788fa7dbb3)
+}
+
+var fileDescriptor_7fcc93788fa7dbb3 = []byte{
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3d, 0x8b, 0xd5, 0x40,
+	0x14, 0x25, 0x59, 0x10, 0x0c, 0xda, 0xc4, 0x62, 0x97, 0xb8, 0xe0, 0x63, 0xd9, 0x62, 0xd9, 0x62,
+	0x06, 0x1c, 0x6c, 0x46, 0x2d, 0xe6, 0x15, 0x3e, 0x41, 0x91, 0x65, 0xc5, 0x14, 0x12, 0x08, 0xb3,
+	0xc9, 0x35, 0x0e, 0x24, 0x99, 0xe7, 0xdc, 0x24, 0x5b, 0x88, 0x8d, 0xf6, 0x36, 0xfe, 0x03, 0x4b,
+	0x7f, 0xca, 0xb6, 0x62, 0x63, 0x65, 0x61, 0xe5, 0xaf, 0x90, 0x64, 0x32, 0xd9, 0xb7, 0xcb, 0x86,
+	0xd7, 0x1d, 0xe6, 0x9c, 0x7b, 0xce, 0xfd, 0x98, 0x40, 0x14, 0x5a, 0x17, 0x25, 0x50, 0x99, 0x23,
+	0xb5, 0xb0, 0x47, 0x1d, 0xa3, 0x08, 0xa6, 0x53, 0x19, 0x20, 0x6d, 0x11, 0x4c, 0x5a, 0xea, 0x4c,
+	0x36, 0x4a, 0xd7, 0x69, 0xa7, 0xe0, 0x3c, 0x1d, 0x39, 0xb2, 0x36, 0xba, 0xd1, 0xe1, 0xc2, 0xd6,
+	0x11, 0x99, 0x23, 0x99, 0x2c, 0x48, 0xc7, 0x88, 0xb3, 0x88, 0xf8, 0x5c, 0x88, 0x01, 0xd4, 0xad,
+	0xb9, 0x39, 0xc5, 0xba, 0x47, 0xfb, 0xae, 0x76, 0xad, 0xa8, 0xac, 0x6b, 0xdd, 0x0c, 0x0a, 0x1c,
+	0xd9, 0xdd, 0x0d, 0x36, 0x2b, 0x15, 0xd4, 0xcd, 0x48, 0x3c, 0xd8, 0x20, 0xde, 0x29, 0x28, 0xf3,
+	0xf4, 0x0c, 0xde, 0xcb, 0x4e, 0x69, 0x63, 0x05, 0x07, 0xcf, 0x82, 0x68, 0x05, 0xcd, 0x1b, 0x04,
+	0xf3, 0x72, 0x4c, 0x8d, 0x15, 0x9c, 0x9f, 0xc2, 0x87, 0x16, 0xb0, 0x09, 0x8f, 0x82, 0xbb, 0xae,
+	0xb7, 0xb4, 0x96, 0x15, 0xec, 0x79, 0x0b, 0xef, 0xe8, 0xf6, 0x72, 0xe7, 0x8f, 0xf0, 0x4f, 0xef,
+	0x38, 0xe6, 0x95, 0xac, 0xe0, 0xe1, 0x57, 0x3f, 0xd8, 0xbd, 0xee, 0xf2, 0xda, 0x0e, 0x1e, 0xfe,
+	0xf2, 0x82, 0x7b, 0x37, 0x84, 0x84, 0x4f, 0xc8, 0xb6, 0x95, 0x91, 0xf9, 0xde, 0x22, 0x36, 0x5b,
+	0x3d, 0xad, 0x93, 0x5c, 0xaf, 0x3d, 0x78, 0xf1, 0x5b, 0x5c, 0x9d, 0xe8, 0xf3, 0xcf, 0xbf, 0xdf,
+	0xfc, 0x47, 0x21, 0xeb, 0xcf, 0xf0, 0xf1, 0x0a, 0xf3, 0x34, 0x6b, 0xb1, 0xd1, 0x15, 0x18, 0xa4,
+	0xc7, 0xc3, 0x5d, 0x36, 0x8d, 0x90, 0x1e, 0x7f, 0x8a, 0xee, 0x5f, 0x88, 0xbd, 0xcb, 0xe0, 0x11,
+	0xad, 0x15, 0x92, 0x4c, 0x57, 0xcb, 0x2f, 0x7e, 0x70, 0x98, 0xe9, 0x6a, 0xeb, 0x88, 0xcb, 0xfd,
+	0x99, 0xb5, 0x9d, 0xf4, 0xf7, 0x39, 0xf1, 0xde, 0x3e, 0x1f, 0x1d, 0x0a, 0x5d, 0xca, 0xba, 0x20,
+	0xda, 0x14, 0xb4, 0x80, 0x7a, 0xb8, 0x1e, 0xbd, 0xcc, 0x9c, 0xff, 0xb9, 0x8f, 0x1d, 0xf8, 0xee,
+	0xef, 0xac, 0x84, 0xf8, 0xe1, 0x2f, 0x56, 0xd6, 0x50, 0xe4, 0x48, 0x2c, 0xec, 0x51, 0xcc, 0xc8,
+	0x18, 0x8c, 0x17, 0x4e, 0x92, 0x88, 0x1c, 0x93, 0x49, 0x92, 0xc4, 0x2c, 0x71, 0x92, 0x7f, 0xfe,
+	0xa1, 0x7d, 0xe7, 0x5c, 0xe4, 0xc8, 0xf9, 0x24, 0xe2, 0x3c, 0x66, 0x9c, 0x3b, 0xd9, 0xd9, 0xad,
+	0xa1, 0x4f, 0xf6, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x4c, 0x17, 0x4e, 0x60, 0x03, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// UserLocationViewServiceClient is the client API for UserLocationViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type UserLocationViewServiceClient interface {
+	// Returns the requested user location view in full detail.
+	GetUserLocationView(ctx context.Context, in *GetUserLocationViewRequest, opts ...grpc.CallOption) (*resources.UserLocationView, error)
+}
+
+type userLocationViewServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewUserLocationViewServiceClient(cc grpc.ClientConnInterface) UserLocationViewServiceClient {
+	return &userLocationViewServiceClient{cc}
+}
+
+func (c *userLocationViewServiceClient) GetUserLocationView(ctx context.Context, in *GetUserLocationViewRequest, opts ...grpc.CallOption) (*resources.UserLocationView, error) {
+	out := new(resources.UserLocationView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.UserLocationViewService/GetUserLocationView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// UserLocationViewServiceServer is the server API for UserLocationViewService service.
+type UserLocationViewServiceServer interface {
+	// Returns the requested user location view in full detail.
+	GetUserLocationView(context.Context, *GetUserLocationViewRequest) (*resources.UserLocationView, error)
+}
+
+// UnimplementedUserLocationViewServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedUserLocationViewServiceServer struct {
+}
+
+func (*UnimplementedUserLocationViewServiceServer) GetUserLocationView(ctx context.Context, req *GetUserLocationViewRequest) (*resources.UserLocationView, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetUserLocationView not implemented")
+}
+
+func RegisterUserLocationViewServiceServer(s *grpc.Server, srv UserLocationViewServiceServer) {
+	s.RegisterService(&_UserLocationViewService_serviceDesc, srv)
+}
+
+func _UserLocationViewService_GetUserLocationView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserLocationViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserLocationViewServiceServer).GetUserLocationView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.UserLocationViewService/GetUserLocationView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserLocationViewServiceServer).GetUserLocationView(ctx, req.(*GetUserLocationViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _UserLocationViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.UserLocationViewService",
+	HandlerType: (*UserLocationViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetUserLocationView",
+			Handler:    _UserLocationViewService_GetUserLocationView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/user_location_view_service.proto",
+}
diff --git a/googleapis/ads/googleads/v3/services/video_service.pb.go b/googleapis/ads/googleads/v3/services/video_service.pb.go
new file mode 100644
index 0000000..683a13a
--- /dev/null
+++ b/googleapis/ads/googleads/v3/services/video_service.pb.go
@@ -0,0 +1,188 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v3/services/video_service.proto
+
+package services
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Request message for [VideoService.GetVideo][google.ads.googleads.v3.services.VideoService.GetVideo].
+type GetVideoRequest struct {
+	// Required. The resource name of the video to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetVideoRequest) Reset()         { *m = GetVideoRequest{} }
+func (m *GetVideoRequest) String() string { return proto.CompactTextString(m) }
+func (*GetVideoRequest) ProtoMessage()    {}
+func (*GetVideoRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_a293e66e60f3b801, []int{0}
+}
+
+func (m *GetVideoRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetVideoRequest.Unmarshal(m, b)
+}
+func (m *GetVideoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetVideoRequest.Marshal(b, m, deterministic)
+}
+func (m *GetVideoRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetVideoRequest.Merge(m, src)
+}
+func (m *GetVideoRequest) XXX_Size() int {
+	return xxx_messageInfo_GetVideoRequest.Size(m)
+}
+func (m *GetVideoRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetVideoRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetVideoRequest proto.InternalMessageInfo
+
+func (m *GetVideoRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetVideoRequest)(nil), "google.ads.googleads.v3.services.GetVideoRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v3/services/video_service.proto", fileDescriptor_a293e66e60f3b801)
+}
+
+var fileDescriptor_a293e66e60f3b801 = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4a, 0xeb, 0x40,
+	0x14, 0x25, 0x29, 0x3c, 0xde, 0x0b, 0x7d, 0x3c, 0x5e, 0x36, 0x96, 0x28, 0x58, 0x4a, 0x17, 0xa1,
+	0xe0, 0x0c, 0x1a, 0x57, 0x53, 0x04, 0xa7, 0x9b, 0xba, 0x92, 0x52, 0x21, 0x0b, 0x09, 0x94, 0x69,
+	0x32, 0xc6, 0x81, 0x24, 0x53, 0x33, 0x69, 0x36, 0xe2, 0xc6, 0x5f, 0xf0, 0x0f, 0xdc, 0xe9, 0xa7,
+	0x74, 0xeb, 0x42, 0x70, 0xe5, 0xc2, 0x95, 0x5f, 0xe0, 0x52, 0x92, 0xc9, 0xa4, 0xad, 0x50, 0xba,
+	0x3b, 0xc9, 0x39, 0xe7, 0x9e, 0x7b, 0x0f, 0x63, 0x1c, 0x87, 0x9c, 0x87, 0x11, 0x85, 0x24, 0x10,
+	0x50, 0xc2, 0x02, 0xe5, 0x0e, 0x14, 0x34, 0xcd, 0x99, 0x4f, 0x05, 0xcc, 0x59, 0x40, 0xf9, 0xa4,
+	0xfa, 0x04, 0xb3, 0x94, 0x67, 0xdc, 0x6c, 0x4b, 0x29, 0x20, 0x81, 0x00, 0xb5, 0x0b, 0xe4, 0x0e,
+	0x50, 0x2e, 0xeb, 0x60, 0xd3, 0xdc, 0x94, 0x0a, 0x3e, 0x4f, 0xeb, 0xc1, 0x72, 0xa0, 0xb5, 0xa7,
+	0xe4, 0x33, 0x06, 0x49, 0x92, 0xf0, 0x8c, 0x64, 0x8c, 0x27, 0xa2, 0x62, 0x77, 0x56, 0x58, 0x3f,
+	0x62, 0x34, 0xc9, 0x2a, 0x62, 0x7f, 0x85, 0xb8, 0x62, 0x34, 0x0a, 0x26, 0x53, 0x7a, 0x4d, 0x72,
+	0xc6, 0x53, 0x29, 0xe8, 0xf4, 0x8d, 0x7f, 0x43, 0x9a, 0xb9, 0x45, 0xd2, 0x98, 0xde, 0xcc, 0xa9,
+	0xc8, 0x4c, 0xdb, 0xf8, 0xab, 0x76, 0x98, 0x24, 0x24, 0xa6, 0x2d, 0xad, 0xad, 0xd9, 0x7f, 0x06,
+	0x8d, 0x77, 0xac, 0x8f, 0x9b, 0x8a, 0x39, 0x27, 0x31, 0x3d, 0x7a, 0xd5, 0x8c, 0x66, 0x69, 0xbd,
+	0x90, 0x57, 0x99, 0x4f, 0x9a, 0xf1, 0x5b, 0x8d, 0x33, 0x0f, 0xc1, 0xb6, 0x12, 0xc0, 0x8f, 0x68,
+	0xcb, 0xde, 0x68, 0xa9, 0x5b, 0x01, 0xa5, 0xa1, 0x73, 0xfa, 0x86, 0xd7, 0xb7, 0xbc, 0x7f, 0xf9,
+	0x78, 0xd0, 0x7b, 0xa6, 0x5d, 0x54, 0x78, 0xbb, 0xc6, 0x9c, 0xf8, 0x73, 0x91, 0xf1, 0x98, 0xa6,
+	0x02, 0xf6, 0x64, 0xa7, 0x02, 0xf6, 0xee, 0xac, 0xdd, 0x05, 0x6e, 0x2d, 0x23, 0x2a, 0x34, 0x63,
+	0x02, 0xf8, 0x3c, 0x1e, 0x7c, 0x69, 0x46, 0xd7, 0xe7, 0xf1, 0xd6, 0x0b, 0x06, 0xff, 0x57, 0xef,
+	0x1f, 0x15, 0x95, 0x8e, 0xb4, 0xcb, 0xb3, 0xca, 0x16, 0xf2, 0x88, 0x24, 0x21, 0xe0, 0x69, 0x08,
+	0x43, 0x9a, 0x94, 0x85, 0xc3, 0x65, 0xd0, 0xe6, 0x27, 0xd5, 0x57, 0xe0, 0x51, 0x6f, 0x0c, 0x31,
+	0x7e, 0xd6, 0xdb, 0x43, 0x39, 0x10, 0x07, 0x02, 0x48, 0x58, 0x20, 0xd7, 0x01, 0x55, 0xb0, 0x58,
+	0x28, 0x89, 0x87, 0x03, 0xe1, 0xd5, 0x12, 0xcf, 0x75, 0x3c, 0x25, 0xf9, 0xd4, 0xbb, 0xf2, 0x3f,
+	0x42, 0x38, 0x10, 0x08, 0xd5, 0x22, 0x84, 0x5c, 0x07, 0x21, 0x25, 0x9b, 0xfe, 0x2a, 0xf7, 0x74,
+	0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x86, 0x46, 0x0c, 0xf9, 0x02, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// VideoServiceClient is the client API for VideoService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type VideoServiceClient interface {
+	// Returns the requested video in full detail.
+	GetVideo(ctx context.Context, in *GetVideoRequest, opts ...grpc.CallOption) (*resources.Video, error)
+}
+
+type videoServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewVideoServiceClient(cc grpc.ClientConnInterface) VideoServiceClient {
+	return &videoServiceClient{cc}
+}
+
+func (c *videoServiceClient) GetVideo(ctx context.Context, in *GetVideoRequest, opts ...grpc.CallOption) (*resources.Video, error) {
+	out := new(resources.Video)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.VideoService/GetVideo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// VideoServiceServer is the server API for VideoService service.
+type VideoServiceServer interface {
+	// Returns the requested video in full detail.
+	GetVideo(context.Context, *GetVideoRequest) (*resources.Video, error)
+}
+
+// UnimplementedVideoServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedVideoServiceServer struct {
+}
+
+func (*UnimplementedVideoServiceServer) GetVideo(ctx context.Context, req *GetVideoRequest) (*resources.Video, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetVideo not implemented")
+}
+
+func RegisterVideoServiceServer(s *grpc.Server, srv VideoServiceServer) {
+	s.RegisterService(&_VideoService_serviceDesc, srv)
+}
+
+func _VideoService_GetVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetVideoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VideoServiceServer).GetVideo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v3.services.VideoService/GetVideo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VideoServiceServer).GetVideo(ctx, req.(*GetVideoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VideoService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v3.services.VideoService",
+	HandlerType: (*VideoServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetVideo",
+			Handler:    _VideoService_GetVideo_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v3/services/video_service.proto",
+}
diff --git a/googleapis/cloud/asset/v1p4beta1/asset_service.pb.go b/googleapis/cloud/asset/v1p4beta1/asset_service.pb.go
index a0e4aa4..f27582b 100644
--- a/googleapis/cloud/asset/v1p4beta1/asset_service.pb.go
+++ b/googleapis/cloud/asset/v1p4beta1/asset_service.pb.go
@@ -685,9 +685,7 @@
 	// gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
 	// Editing Object
 	// Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
-	// for more information. An INVALID_ARGUMENT error will be
-	// returned if file with the same name "gs://bucket_name/object_name"
-	// already exists.
+	// for more information.
 	Uri                  string   `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -944,83 +942,85 @@
 }
 
 var fileDescriptor_6d37c6d1bea9ee6a = []byte{
-	// 1204 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0xb1, 0x53, 0x24, 0xc5,
-	0x17, 0xfe, 0xcd, 0xc2, 0x1e, 0x5c, 0xc3, 0x2e, 0x4b, 0x5f, 0xf1, 0x63, 0x19, 0xb9, 0x3b, 0x6a,
-	0xaf, 0x38, 0xf1, 0x82, 0x19, 0xe1, 0xb8, 0xbb, 0x52, 0x38, 0x75, 0x81, 0x95, 0x43, 0xab, 0x04,
-	0x07, 0x8b, 0x40, 0xa9, 0x9a, 0x6b, 0x66, 0x9b, 0x71, 0xaa, 0x66, 0xba, 0x87, 0xee, 0x1e, 0x5c,
-	0xbc, 0x32, 0xf1, 0x4f, 0xd0, 0xd8, 0x2a, 0x63, 0x33, 0x33, 0x13, 0x03, 0x2d, 0x23, 0x02, 0x0d,
-	0xfc, 0x07, 0x0c, 0x8c, 0x0c, 0xcc, 0xcd, 0xac, 0xe9, 0xee, 0xd9, 0x9d, 0x5d, 0x60, 0xbd, 0x5b,
-	0x28, 0x23, 0xc3, 0x7e, 0xef, 0x7d, 0xdf, 0x7b, 0xfd, 0xf5, 0x9b, 0xd7, 0xd3, 0xe0, 0x55, 0x9f,
-	0x52, 0x3f, 0xc4, 0xb6, 0x17, 0xd2, 0xa4, 0x69, 0x23, 0xce, 0xb1, 0xb0, 0x8f, 0x17, 0xe3, 0xe5,
-	0x03, 0x2c, 0xd0, 0xa2, 0x5a, 0xbb, 0x1c, 0xb3, 0xe3, 0xc0, 0xc3, 0x56, 0xcc, 0xa8, 0xa0, 0x70,
-	0x56, 0x21, 0x2c, 0x89, 0xb0, 0x64, 0x84, 0xd5, 0x46, 0x98, 0xda, 0x6b, 0xa3, 0x38, 0xb0, 0x11,
-	0x21, 0x54, 0x20, 0x11, 0x50, 0xc2, 0x15, 0xd6, 0xbc, 0x9d, 0xf3, 0x1e, 0x06, 0x38, 0x6c, 0xba,
-	0x07, 0xf8, 0x63, 0x74, 0x1c, 0x50, 0xa6, 0x03, 0x5e, 0xf9, 0xe7, 0x72, 0x32, 0x2e, 0x53, 0x87,
-	0x06, 0x28, 0xb2, 0x8f, 0x17, 0xed, 0x98, 0x86, 0x81, 0x77, 0xa2, 0x7d, 0x77, 0xb4, 0x2f, 0xa4,
-	0xc4, 0x67, 0x09, 0x21, 0x01, 0xf1, 0x6d, 0x1a, 0x63, 0xd6, 0x55, 0xcc, 0x2d, 0x1d, 0x24, 0x57,
-	0x07, 0xc9, 0xa1, 0xdd, 0x4c, 0x54, 0x80, 0xf6, 0x4f, 0xe7, 0x8a, 0xf5, 0xc2, 0x00, 0x13, 0xa1,
-	0x1c, 0xb5, 0x3f, 0x86, 0xc1, 0xff, 0xb7, 0x50, 0xb4, 0x23, 0x33, 0xd6, 0x09, 0x0a, 0x4f, 0x78,
-	0xc0, 0xdf, 0x4f, 0x30, 0x3b, 0x81, 0x2f, 0x81, 0x6b, 0x31, 0x62, 0x98, 0x88, 0xaa, 0x31, 0x67,
-	0x2c, 0x5c, 0x5f, 0x1b, 0xfa, 0xad, 0x5e, 0x70, 0xb4, 0x09, 0x7e, 0x02, 0x26, 0x19, 0xe6, 0x34,
-	0x61, 0x1e, 0x76, 0x39, 0x0e, 0xb1, 0x27, 0x28, 0xab, 0x16, 0xe6, 0x8c, 0x85, 0xb1, 0xa5, 0x86,
-	0xd5, 0x4f, 0x55, 0xeb, 0xfc, 0x6c, 0x96, 0xa3, 0xd9, 0x76, 0x35, 0x59, 0x9a, 0xce, 0x70, 0x2a,
-	0xac, 0xc7, 0x9c, 0x26, 0x0e, 0x9a, 0x98, 0x88, 0x40, 0x9c, 0x74, 0x12, 0x0f, 0x5d, 0x22, 0xf1,
-	0x96, 0x66, 0xeb, 0x49, 0x1c, 0xf4, 0x98, 0xe1, 0x11, 0x98, 0x40, 0x9e, 0x87, 0x39, 0xef, 0xa4,
-	0x1d, 0x96, 0x69, 0xd7, 0x07, 0x4a, 0x5b, 0x97, 0x5c, 0xdd, 0x49, 0xcb, 0xa8, 0xcb, 0x68, 0x36,
-	0x40, 0xa5, 0x57, 0x16, 0xb8, 0x08, 0xe0, 0x61, 0x12, 0x86, 0x6e, 0x5b, 0x7d, 0x82, 0x22, 0x9c,
-	0x3f, 0xa1, 0x4a, 0xea, 0xce, 0x60, 0xef, 0xa1, 0x08, 0x9b, 0xf7, 0x41, 0xa5, 0x77, 0x93, 0xf0,
-	0x36, 0x18, 0xcd, 0x76, 0x98, 0x07, 0xb7, 0x8d, 0xa6, 0x03, 0xca, 0xdd, 0x25, 0xc2, 0x19, 0x50,
-	0x64, 0x34, 0xc4, 0xbc, 0x6a, 0xcc, 0x0d, 0xa9, 0x78, 0xc3, 0x51, 0x16, 0x38, 0x0f, 0xc6, 0x62,
-	0xcc, 0xa2, 0x80, 0xf3, 0xb4, 0x27, 0xab, 0x85, 0x4e, 0x40, 0xde, 0x5e, 0xfb, 0xb3, 0x08, 0xa6,
-	0xa5, 0x0a, 0x9f, 0xe2, 0xb6, 0x2a, 0x0e, 0x3e, 0x4a, 0x30, 0x17, 0xf0, 0x29, 0x28, 0x23, 0x2d,
-	0x90, 0x7b, 0x94, 0x2a, 0x24, 0xcb, 0x1a, 0x5b, 0x5a, 0x1e, 0x44, 0x5d, 0xb5, 0x99, 0x12, 0xea,
-	0xea, 0xe7, 0x7d, 0x30, 0x42, 0x63, 0xa1, 0x0b, 0x4c, 0xa9, 0x1f, 0xf7, 0xa7, 0xbe, 0xa0, 0x52,
-	0x6b, 0x5b, 0x91, 0xa8, 0xfd, 0x65, 0x94, 0xe6, 0x17, 0xc3, 0x60, 0x44, 0x7b, 0xe0, 0x02, 0x28,
-	0xe1, 0x56, 0x8c, 0x48, 0xd3, 0xf5, 0x19, 0x4d, 0x62, 0x2e, 0xb7, 0x32, 0xaa, 0x00, 0xe3, 0xca,
-	0xb3, 0x29, 0x1d, 0xf0, 0x2e, 0xd0, 0x6b, 0x57, 0x49, 0x5b, 0xe8, 0x04, 0x8e, 0x29, 0x87, 0x23,
-	0x05, 0xb6, 0x40, 0x25, 0x8b, 0xd3, 0x27, 0xcb, 0x65, 0xd3, 0xeb, 0xd8, 0x09, 0x1d, 0x9b, 0xf9,
-	0xe0, 0x23, 0x30, 0x45, 0x13, 0x11, 0x27, 0xa2, 0xd3, 0x27, 0xb8, 0xe9, 0x63, 0x2e, 0x5b, 0x56,
-	0x83, 0x6e, 0xa8, 0x88, 0x0c, 0xd4, 0x48, 0xfd, 0x69, 0x7b, 0x69, 0xa0, 0x2c, 0x5d, 0xa3, 0x8a,
-	0x1d, 0x54, 0x45, 0xb9, 0x65, 0xfd, 0x0a, 0xb2, 0x07, 0xe6, 0x91, 0x92, 0x2a, 0x9b, 0xae, 0x2e,
-	0xf2, 0x3c, 0x9a, 0x10, 0xe1, 0x06, 0x51, 0x8c, 0x19, 0xa7, 0x44, 0x8e, 0xa2, 0xea, 0xb5, 0x0e,
-	0x4b, 0x4d, 0x23, 0x76, 0x15, 0xa0, 0xae, 0xe2, 0xb7, 0xf2, 0xe1, 0xf0, 0x5d, 0x30, 0x89, 0x5b,
-	0xd8, 0x4b, 0xd2, 0x85, 0x2b, 0x82, 0x08, 0xd3, 0x44, 0x54, 0x47, 0xe4, 0xc9, 0xcd, 0x64, 0x27,
-	0x97, 0xcd, 0x3b, 0x6b, 0x43, 0xcf, 0x3b, 0x5d, 0x64, 0x1b, 0xf8, 0x81, 0xc2, 0xc1, 0x87, 0x60,
-	0x2a, 0x42, 0x2d, 0xf7, 0x10, 0x11, 0x9a, 0x08, 0xee, 0xc6, 0x98, 0xa9, 0x0d, 0x56, 0x47, 0xe7,
-	0x8c, 0x85, 0xa2, 0x42, 0xc1, 0x08, 0xb5, 0xde, 0x56, 0x01, 0x3b, 0x98, 0xc9, 0x1d, 0xc2, 0x55,
-	0x50, 0xed, 0xc5, 0x65, 0x8a, 0x56, 0xaf, 0x77, 0xa0, 0x53, 0x5d, 0xd0, 0x4c, 0xd2, 0xda, 0x0f,
-	0x45, 0x50, 0x3d, 0xdb, 0x46, 0x3c, 0xa6, 0x84, 0x63, 0x18, 0x81, 0x52, 0x84, 0x02, 0xe2, 0x66,
-	0x5d, 0xaa, 0x1b, 0xfe, 0xc9, 0x8b, 0x76, 0xa5, 0xa2, 0x3b, 0xfb, 0x25, 0x38, 0xe3, 0x29, 0x7d,
-	0xb6, 0x82, 0x5f, 0x19, 0xe0, 0x6e, 0xdf, 0xf3, 0xe9, 0x14, 0x92, 0x7e, 0xbf, 0x57, 0x59, 0xc8,
-	0x1d, 0x7e, 0xf1, 0x31, 0xb7, 0xeb, 0x9b, 0x07, 0xe5, 0x74, 0x72, 0x9d, 0xb8, 0xb8, 0x15, 0x87,
-	0x94, 0xe1, 0xa6, 0x6a, 0x70, 0xa7, 0x24, 0xad, 0x0d, 0x6d, 0x84, 0x1c, 0xdc, 0x20, 0x94, 0xb8,
-	0x1e, 0x0b, 0x44, 0xe0, 0xa1, 0xd0, 0xc5, 0x8c, 0x51, 0x96, 0xf6, 0xf5, 0xd0, 0x00, 0xa3, 0xd8,
-	0xc1, 0x3c, 0x09, 0x85, 0x95, 0x2d, 0x77, 0x05, 0x12, 0xd8, 0x99, 0x24, 0x94, 0xac, 0x6b, 0xfa,
-	0x86, 0x64, 0x37, 0xff, 0x32, 0xc0, 0xe4, 0x19, 0x30, 0xfc, 0xe8, 0x2a, 0x47, 0x56, 0xef, 0xb4,
-	0x7a, 0x0a, 0x2a, 0x6d, 0x72, 0x26, 0xcb, 0xcc, 0xce, 0xe5, 0xc1, 0x40, 0x9b, 0x74, 0x26, 0x50,
-	0xd7, 0xfa, 0x79, 0x05, 0xaf, 0xfd, 0x6c, 0x80, 0x9b, 0x67, 0x38, 0xb7, 0xe5, 0x10, 0x58, 0xa7,
-	0xe4, 0x30, 0xf0, 0x61, 0x02, 0x26, 0x7c, 0x8f, 0xbb, 0x4d, 0xcc, 0x45, 0xa0, 0x3f, 0x75, 0x25,
-	0xc4, 0x3b, 0x2f, 0x58, 0x69, 0x9e, 0xd5, 0xda, 0xf4, 0xf8, 0x46, 0x87, 0xf1, 0xc9, 0xff, 0x9c,
-	0xb2, 0xdf, 0x65, 0x31, 0x5f, 0x06, 0xe5, 0xee, 0x18, 0x38, 0x05, 0x86, 0x12, 0x16, 0xe4, 0xef,
-	0xb3, 0x74, 0xbd, 0x56, 0x02, 0x63, 0xb9, 0xda, 0x6a, 0x5f, 0x17, 0xc1, 0xad, 0x46, 0x2b, 0xa6,
-	0x4c, 0x9c, 0x23, 0xd5, 0xbf, 0x75, 0x19, 0x79, 0xbd, 0x97, 0xd1, 0x46, 0x7f, 0xea, 0xfe, 0x05,
-	0x9f, 0x7f, 0x27, 0x41, 0x0c, 0x4a, 0x7a, 0x98, 0x7b, 0x52, 0x53, 0xfd, 0x9f, 0xb4, 0x72, 0x89,
-	0x63, 0x51, 0x9b, 0x19, 0xa7, 0x39, 0x93, 0xf9, 0x4b, 0xe1, 0xbf, 0xab, 0xef, 0x4a, 0xaf, 0xbe,
-	0xa5, 0x6f, 0x87, 0xc1, 0x78, 0x3d, 0x3d, 0x16, 0x1d, 0x04, 0x7f, 0x34, 0x40, 0xa5, 0x77, 0xe0,
-	0xc2, 0x07, 0x03, 0xfd, 0xbf, 0x98, 0x0f, 0x07, 0x9b, 0xeb, 0xb5, 0x37, 0x3f, 0xff, 0xf5, 0xf7,
-	0x2f, 0x0b, 0xaf, 0xc1, 0x47, 0xb9, 0x57, 0xcc, 0xb3, 0xee, 0xcf, 0xc4, 0x52, 0xaf, 0x83, 0xc7,
-	0xf7, 0xec, 0x7b, 0x9f, 0xbd, 0x8e, 0x7a, 0xeb, 0xfd, 0xbe, 0x00, 0xa6, 0x2f, 0xe8, 0x63, 0xb8,
-	0x7a, 0x99, 0xf6, 0x37, 0x6f, 0x66, 0xe8, 0xdc, 0x23, 0xc9, 0xda, 0xce, 0x1e, 0x49, 0xb5, 0x9f,
-	0x8c, 0xd3, 0xfa, 0x33, 0xb0, 0x3a, 0x58, 0x06, 0x7d, 0x5b, 0xaf, 0x5c, 0xa2, 0x3e, 0x29, 0xdc,
-	0x5b, 0xf0, 0x8d, 0xe7, 0x14, 0x0e, 0x9f, 0x4f, 0x66, 0xce, 0x9e, 0xd6, 0x67, 0x64, 0x7a, 0x95,
-	0x5d, 0x15, 0x84, 0xe2, 0x80, 0x5b, 0x1e, 0x8d, 0xd6, 0xbe, 0x33, 0xc0, 0x9c, 0x47, 0xa3, 0xbe,
-	0x3a, 0xae, 0x4d, 0xe6, 0xbb, 0x6a, 0x27, 0xfd, 0x79, 0xda, 0x31, 0x3e, 0xac, 0x6b, 0x88, 0x4f,
-	0x43, 0x44, 0x7c, 0x8b, 0x32, 0xdf, 0xf6, 0x31, 0x91, 0xbf, 0x56, 0x76, 0x27, 0xc9, 0xf9, 0xef,
-	0xd8, 0x15, 0xb9, 0xfe, 0xa6, 0x30, 0xbb, 0xa9, 0x38, 0xd6, 0x65, 0x5a, 0x99, 0xc5, 0xda, 0x5b,
-	0xdc, 0x59, 0x5e, 0x4b, 0x83, 0x4e, 0x33, 0xf7, 0xbe, 0x74, 0xef, 0x4b, 0xf7, 0xfe, 0x5e, 0xc6,
-	0x71, 0x70, 0x4d, 0xe6, 0xba, 0xff, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8b, 0xfc, 0x5b, 0x40,
-	0xc1, 0x0f, 0x00, 0x00,
+	// 1234 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0x4f, 0x6f, 0xe3, 0x44,
+	0x14, 0xc7, 0x69, 0xb3, 0x7f, 0xa6, 0x4d, 0x9a, 0xce, 0xaa, 0x6c, 0xd6, 0xec, 0x9f, 0x2a, 0xab,
+	0x5d, 0xca, 0x4a, 0xd8, 0x74, 0xff, 0x8a, 0xb6, 0x0b, 0x4a, 0xdb, 0xd0, 0x2d, 0x08, 0x5a, 0x5c,
+	0xd4, 0x03, 0x54, 0xf2, 0x4e, 0x9d, 0x89, 0x6b, 0xc9, 0x9e, 0x71, 0x67, 0xc6, 0x6d, 0xca, 0x8a,
+	0x0b, 0x1f, 0x01, 0xce, 0x48, 0x9c, 0xf9, 0x04, 0x1c, 0x81, 0x0b, 0x52, 0x0f, 0x20, 0xc1, 0x17,
+	0xe0, 0x00, 0x17, 0x0e, 0xdc, 0xb9, 0x21, 0xcf, 0x8c, 0x13, 0x27, 0x6d, 0xc3, 0x6e, 0x5a, 0x71,
+	0xe2, 0x38, 0xef, 0xbd, 0xdf, 0xef, 0xfd, 0xe6, 0xcd, 0xf3, 0x1b, 0x0f, 0x78, 0xc3, 0xa7, 0xd4,
+	0x0f, 0xb1, 0xed, 0x85, 0x34, 0x69, 0xda, 0x88, 0x73, 0x2c, 0xec, 0xbd, 0xd9, 0xf8, 0xfe, 0x36,
+	0x16, 0x68, 0x56, 0xad, 0x5d, 0x8e, 0xd9, 0x5e, 0xe0, 0x61, 0x2b, 0x66, 0x54, 0x50, 0x78, 0x55,
+	0x21, 0x2c, 0x89, 0xb0, 0x64, 0x84, 0xd5, 0x41, 0x98, 0xda, 0x6b, 0xa3, 0x38, 0xb0, 0x11, 0x21,
+	0x54, 0x20, 0x11, 0x50, 0xc2, 0x15, 0xd6, 0xbc, 0x91, 0xf3, 0xb6, 0x02, 0x1c, 0x36, 0xdd, 0x6d,
+	0xbc, 0x83, 0xf6, 0x02, 0xca, 0x74, 0xc0, 0x6b, 0xff, 0x2e, 0x27, 0xe3, 0x32, 0x75, 0x68, 0x80,
+	0x22, 0x7b, 0x6f, 0xd6, 0x8e, 0x69, 0x18, 0x78, 0x07, 0xda, 0x77, 0x53, 0xfb, 0x42, 0x4a, 0x7c,
+	0x96, 0x10, 0x12, 0x10, 0xdf, 0xa6, 0x31, 0x66, 0x3d, 0x62, 0xae, 0xeb, 0x20, 0xb9, 0xda, 0x4e,
+	0x5a, 0x76, 0x33, 0x51, 0x01, 0xda, 0x7f, 0x39, 0x27, 0xd6, 0x0b, 0x03, 0x4c, 0x84, 0x72, 0xd4,
+	0xfe, 0x1c, 0x05, 0x2f, 0xaf, 0xa2, 0x68, 0x5d, 0x66, 0xac, 0x13, 0x14, 0x1e, 0xf0, 0x80, 0x7f,
+	0x98, 0x60, 0x76, 0x00, 0x5f, 0x01, 0xe7, 0x62, 0xc4, 0x30, 0x11, 0x55, 0x63, 0xda, 0x98, 0xb9,
+	0xb8, 0x38, 0xf2, 0x5b, 0xbd, 0xe0, 0x68, 0x13, 0xdc, 0x07, 0x93, 0x0c, 0x73, 0x9a, 0x30, 0x0f,
+	0xbb, 0x1c, 0x87, 0xd8, 0x13, 0x94, 0x55, 0x0b, 0xd3, 0xc6, 0xcc, 0xd8, 0xdd, 0x86, 0x35, 0xa8,
+	0xaa, 0xd6, 0xf1, 0xd9, 0x2c, 0x47, 0xb3, 0x6d, 0x68, 0xb2, 0x34, 0x9d, 0xe1, 0x54, 0x58, 0x9f,
+	0x39, 0x4d, 0x1c, 0x34, 0x31, 0x11, 0x81, 0x38, 0xe8, 0x26, 0x1e, 0x39, 0x45, 0xe2, 0x55, 0xcd,
+	0xd6, 0x97, 0x38, 0xe8, 0x33, 0xc3, 0x5d, 0x30, 0x81, 0x3c, 0x0f, 0x73, 0xde, 0x4d, 0x3b, 0x2a,
+	0xd3, 0x2e, 0x0d, 0x95, 0xb6, 0x2e, 0xb9, 0x7a, 0x93, 0x96, 0x51, 0x8f, 0xd1, 0x6c, 0x80, 0x4a,
+	0x7f, 0x59, 0xe0, 0x2c, 0x80, 0xad, 0x24, 0x0c, 0xdd, 0x4e, 0xf5, 0x09, 0x8a, 0x70, 0xfe, 0x84,
+	0x2a, 0xa9, 0x3b, 0x83, 0x7d, 0x80, 0x22, 0x6c, 0xde, 0x03, 0x95, 0xfe, 0x4d, 0xc2, 0x1b, 0xe0,
+	0x42, 0xb6, 0xc3, 0x3c, 0xb8, 0x63, 0x34, 0x1d, 0x50, 0xee, 0x95, 0x08, 0xaf, 0x80, 0x22, 0xa3,
+	0x21, 0xe6, 0x55, 0x63, 0x7a, 0x44, 0xc5, 0x1b, 0x8e, 0xb2, 0xc0, 0x5b, 0x60, 0x2c, 0xc6, 0x2c,
+	0x0a, 0x38, 0x4f, 0x7b, 0xb2, 0x5a, 0xe8, 0x06, 0xe4, 0xed, 0xb5, 0xbf, 0x8a, 0xe0, 0xb2, 0xac,
+	0xc2, 0xa7, 0xb8, 0x53, 0x15, 0x07, 0xef, 0x26, 0x98, 0x0b, 0xf8, 0x14, 0x94, 0x91, 0x2e, 0x90,
+	0xbb, 0x9b, 0x56, 0x48, 0xca, 0x1a, 0xbb, 0x7b, 0x7f, 0x98, 0xea, 0xaa, 0xcd, 0x94, 0x50, 0x4f,
+	0x3f, 0x6f, 0x81, 0xf3, 0x34, 0x16, 0x5a, 0x60, 0x4a, 0xfd, 0x78, 0x30, 0xf5, 0x09, 0x4a, 0xad,
+	0x35, 0x45, 0xa2, 0xf6, 0x97, 0x51, 0x9a, 0x5f, 0x8c, 0x82, 0xf3, 0xda, 0x03, 0x67, 0x40, 0x09,
+	0xb7, 0x63, 0x44, 0x9a, 0xae, 0xcf, 0x68, 0x12, 0x73, 0xb9, 0x95, 0x0b, 0x0a, 0x30, 0xae, 0x3c,
+	0x2b, 0xd2, 0x01, 0x6f, 0x03, 0xbd, 0x76, 0x55, 0x69, 0x0b, 0xdd, 0xc0, 0x31, 0xe5, 0x70, 0x64,
+	0x81, 0x2d, 0x50, 0xc9, 0xe2, 0xf4, 0xc9, 0x72, 0xd9, 0xf4, 0x3a, 0x76, 0x42, 0xc7, 0x66, 0x3e,
+	0xf8, 0x08, 0x4c, 0xd1, 0x44, 0xc4, 0x89, 0xe8, 0xf6, 0x09, 0x6e, 0xfa, 0x98, 0xcb, 0x96, 0xd5,
+	0xa0, 0x4b, 0x2a, 0x22, 0x03, 0x35, 0x52, 0x7f, 0xda, 0x5e, 0x1a, 0x28, 0xa5, 0x6b, 0x54, 0xb1,
+	0x8b, 0xaa, 0x28, 0xb7, 0xd4, 0xaf, 0x20, 0x9b, 0xe0, 0x16, 0x52, 0xa5, 0xca, 0xa6, 0xab, 0x8b,
+	0x3c, 0x8f, 0x26, 0x44, 0xb8, 0x41, 0x14, 0x63, 0xc6, 0x29, 0x91, 0xa3, 0xa8, 0x7a, 0xae, 0xcb,
+	0x52, 0xd3, 0x88, 0x0d, 0x05, 0xa8, 0xab, 0xf8, 0xd5, 0x7c, 0x38, 0x7c, 0x0f, 0x4c, 0xe2, 0x36,
+	0xf6, 0x92, 0x74, 0xe1, 0x8a, 0x20, 0xc2, 0x34, 0x11, 0xd5, 0xf3, 0xf2, 0xe4, 0xae, 0x64, 0x27,
+	0x97, 0xcd, 0x3b, 0x6b, 0x59, 0xcf, 0x3b, 0x2d, 0xb2, 0x03, 0xfc, 0x48, 0xe1, 0xe0, 0x43, 0x30,
+	0x15, 0xa1, 0xb6, 0xdb, 0x42, 0x84, 0x26, 0x82, 0xbb, 0x31, 0x66, 0x6a, 0x83, 0xd5, 0x0b, 0xd3,
+	0xc6, 0x4c, 0x51, 0xa1, 0x60, 0x84, 0xda, 0xef, 0xa8, 0x80, 0x75, 0xcc, 0xe4, 0x0e, 0xe1, 0x02,
+	0xa8, 0xf6, 0xe3, 0xb2, 0x8a, 0x56, 0x2f, 0x76, 0xa1, 0x53, 0x3d, 0xd0, 0xac, 0xa4, 0xb5, 0xef,
+	0x8b, 0xa0, 0x7a, 0xb4, 0x8d, 0x78, 0x4c, 0x09, 0xc7, 0x30, 0x02, 0xa5, 0x08, 0x05, 0xc4, 0xcd,
+	0xba, 0x54, 0x37, 0xfc, 0x93, 0x17, 0xed, 0x4a, 0x45, 0x77, 0xf4, 0x4b, 0x70, 0xc6, 0x53, 0xfa,
+	0x6c, 0x05, 0xbf, 0x32, 0xc0, 0xed, 0x81, 0xe7, 0xd3, 0x15, 0x92, 0x7e, 0xbf, 0x67, 0x29, 0xe4,
+	0x26, 0x3f, 0xf9, 0x98, 0x3b, 0xfa, 0x6e, 0x81, 0x72, 0x3a, 0xb9, 0x0e, 0x5c, 0xdc, 0x8e, 0x43,
+	0xca, 0x70, 0x53, 0x35, 0xb8, 0x53, 0x92, 0xd6, 0x86, 0x36, 0x42, 0x0e, 0x2e, 0x11, 0x4a, 0x5c,
+	0x8f, 0x05, 0x22, 0xf0, 0x50, 0xe8, 0x62, 0xc6, 0x28, 0x4b, 0xfb, 0x7a, 0x64, 0x88, 0x51, 0xec,
+	0x60, 0x9e, 0x84, 0xc2, 0xca, 0x96, 0x1b, 0x02, 0x09, 0xec, 0x4c, 0x12, 0x4a, 0x96, 0x34, 0x7d,
+	0x43, 0xb2, 0x9b, 0x7f, 0x1b, 0x60, 0xf2, 0x08, 0x18, 0x7e, 0x72, 0x96, 0x23, 0xab, 0x7f, 0x5a,
+	0x3d, 0x05, 0x95, 0x0e, 0x39, 0x93, 0x32, 0xb3, 0x73, 0x79, 0x30, 0xd4, 0x26, 0x9d, 0x09, 0xd4,
+	0xb3, 0x7e, 0xde, 0x82, 0xd7, 0x7e, 0x32, 0xc0, 0xb5, 0x23, 0x9c, 0x6b, 0x72, 0x08, 0x2c, 0x51,
+	0xd2, 0x0a, 0x7c, 0x98, 0x80, 0x09, 0xdf, 0xe3, 0x6e, 0x13, 0x73, 0x11, 0xe8, 0x4f, 0x5d, 0x15,
+	0xe2, 0xdd, 0x17, 0x54, 0x9a, 0x67, 0xb5, 0x56, 0x3c, 0xbe, 0xdc, 0x65, 0x7c, 0xf2, 0x92, 0x53,
+	0xf6, 0x7b, 0x2c, 0xe6, 0xab, 0xa0, 0xdc, 0x1b, 0x03, 0xa7, 0xc0, 0x48, 0xc2, 0x82, 0xfc, 0x7d,
+	0x96, 0xae, 0x17, 0x4b, 0x60, 0x2c, 0xa7, 0xad, 0xf6, 0x75, 0x11, 0x5c, 0x6f, 0xb4, 0x63, 0xca,
+	0xc4, 0x31, 0xa5, 0xfa, 0xaf, 0x2e, 0x23, 0xaf, 0xff, 0x32, 0x5a, 0x1e, 0x4c, 0x3d, 0x58, 0xf0,
+	0xf1, 0x77, 0x12, 0xc4, 0xa0, 0xa4, 0x87, 0xb9, 0x27, 0x6b, 0xaa, 0xff, 0x93, 0xe6, 0x4f, 0x71,
+	0x2c, 0x6a, 0x33, 0xe3, 0x34, 0x67, 0x32, 0x7f, 0x2e, 0xfc, 0x7f, 0xf5, 0x9d, 0xe9, 0xd5, 0x77,
+	0xf7, 0x8f, 0x51, 0x30, 0x5e, 0x4f, 0x8f, 0x45, 0x07, 0xc1, 0x1f, 0x0c, 0x50, 0xe9, 0x1f, 0xb8,
+	0xf0, 0xc1, 0x50, 0xff, 0x2f, 0xe6, 0xc3, 0xe1, 0xe6, 0x7a, 0xed, 0xed, 0xcf, 0x7f, 0xfd, 0xfd,
+	0xcb, 0xc2, 0x9b, 0xf0, 0x51, 0xee, 0x15, 0xf3, 0xac, 0xf7, 0x33, 0xb1, 0xd4, 0xeb, 0xe0, 0xf1,
+	0x1d, 0xfb, 0xce, 0x67, 0x73, 0xa8, 0x5f, 0xef, 0x77, 0x05, 0x70, 0xf9, 0x84, 0x3e, 0x86, 0x0b,
+	0xa7, 0x69, 0x7f, 0xf3, 0x5a, 0x86, 0xce, 0x3d, 0x92, 0xac, 0xb5, 0xec, 0x91, 0x54, 0xfb, 0xd1,
+	0x38, 0xac, 0x3f, 0x03, 0x0b, 0xc3, 0x65, 0xd0, 0xb7, 0xf5, 0xfc, 0x29, 0xf4, 0xc9, 0xc2, 0x2d,
+	0xd5, 0xde, 0x7a, 0xce, 0xc2, 0xe1, 0xe3, 0xc9, 0xe6, 0x8c, 0x3b, 0xe6, 0xfb, 0x87, 0xf5, 0x2b,
+	0x52, 0x81, 0x12, 0xa0, 0x34, 0xa1, 0x38, 0xe0, 0x96, 0x47, 0xa3, 0x5f, 0xea, 0xd6, 0x8e, 0x10,
+	0x31, 0x9f, 0xb3, 0xed, 0xfd, 0xfd, 0xfd, 0x3e, 0xa7, 0x8d, 0x12, 0xb1, 0xa3, 0xde, 0xa2, 0xaf,
+	0xc7, 0x21, 0x12, 0x2d, 0xca, 0xa2, 0xc5, 0x6f, 0x0d, 0x30, 0xed, 0xd1, 0x68, 0x60, 0xed, 0x17,
+	0x27, 0xf3, 0x9d, 0xb8, 0x9e, 0xfe, 0x70, 0xad, 0x1b, 0x1f, 0xd7, 0x35, 0xc4, 0xa7, 0x21, 0x22,
+	0xbe, 0x45, 0x99, 0x6f, 0xfb, 0x98, 0xc8, 0xdf, 0x31, 0xbb, 0x9b, 0xf8, 0xf8, 0xb7, 0xef, 0xbc,
+	0x5c, 0x7f, 0x53, 0xb8, 0xba, 0xa2, 0x38, 0x96, 0x64, 0x5a, 0x99, 0xc5, 0xda, 0x9c, 0x5d, 0xbf,
+	0xbf, 0x98, 0x06, 0x1d, 0x66, 0xee, 0x2d, 0xe9, 0xde, 0x92, 0xee, 0xad, 0xcd, 0x8c, 0x63, 0xfb,
+	0x9c, 0xcc, 0x75, 0xef, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xc1, 0xab, 0x59, 0xf5, 0x0f,
+	0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/googleapis/cloud/securitycenter/v1/asset.pb.go b/googleapis/cloud/securitycenter/v1/asset.pb.go
index d55d60d..5aa0d7d 100644
--- a/googleapis/cloud/securitycenter/v1/asset.pb.go
+++ b/googleapis/cloud/securitycenter/v1/asset.pb.go
@@ -302,48 +302,48 @@
 }
 
 var fileDescriptor_8afac45fcf79e390 = []byte{
-	// 680 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0xd4, 0x4e,
-	0x14, 0xce, 0xee, 0xf2, 0x6f, 0xcf, 0xfe, 0xf8, 0x93, 0xf9, 0x45, 0x2d, 0x0d, 0xc2, 0x0a, 0x17,
-	0xa2, 0x62, 0x9b, 0x85, 0x1b, 0x53, 0xa2, 0x06, 0xd0, 0x18, 0x13, 0x45, 0x52, 0x71, 0x2f, 0x0c,
-	0x66, 0x33, 0x5b, 0xc6, 0xa6, 0xd2, 0x76, 0x9a, 0x99, 0x29, 0xa6, 0x22, 0x0f, 0xe2, 0x23, 0xe8,
-	0xa3, 0xf8, 0x08, 0x3e, 0x02, 0x4f, 0x61, 0x3a, 0xd3, 0x76, 0xdb, 0x92, 0x75, 0xb9, 0x6a, 0xe7,
-	0xcc, 0xf7, 0x7d, 0xe7, 0x9c, 0xf9, 0xce, 0x0c, 0x3c, 0x74, 0x29, 0x75, 0x7d, 0x62, 0x3a, 0x3e,
-	0x8d, 0x4f, 0x4d, 0x4e, 0x9c, 0x98, 0x79, 0x22, 0x71, 0x48, 0x28, 0x08, 0x33, 0xcf, 0x7b, 0x26,
-	0xe6, 0x9c, 0x08, 0x23, 0x62, 0x54, 0x50, 0xb4, 0xaa, 0xb0, 0x86, 0xc4, 0x1a, 0x55, 0xac, 0x71,
-	0xde, 0xd3, 0x97, 0x33, 0x2d, 0x1c, 0x79, 0x26, 0x23, 0x9c, 0xc6, 0xcc, 0x21, 0x8a, 0xaa, 0xef,
-	0x4c, 0x48, 0x93, 0x47, 0x06, 0x01, 0x66, 0x67, 0x3c, 0x23, 0xad, 0x64, 0x24, 0xb9, 0x1a, 0xc6,
-	0x9f, 0x4d, 0x2e, 0x58, 0xec, 0x64, 0xd5, 0xe8, 0x6b, 0xf5, 0x5d, 0xe1, 0x05, 0x84, 0x0b, 0x1c,
-	0x44, 0x35, 0x7a, 0x5a, 0x0e, 0x0e, 0x43, 0x2a, 0xb0, 0xf0, 0x68, 0x98, 0x89, 0xaf, 0xff, 0x6c,
-	0xc3, 0xf4, 0x5e, 0xda, 0x1c, 0x42, 0x30, 0x15, 0xe2, 0x80, 0x68, 0x8d, 0x6e, 0x63, 0xb3, 0x6d,
-	0xcb, 0x7f, 0xf4, 0x1d, 0xf4, 0xa2, 0x24, 0x55, 0xe5, 0x20, 0x62, 0x34, 0x22, 0x4c, 0x78, 0x84,
-	0x6b, 0xcd, 0x6e, 0x63, 0xb3, 0xb3, 0xfd, 0xcc, 0xf8, 0xf7, 0x79, 0x18, 0x52, 0xde, 0x78, 0x9f,
-	0xc5, 0x0f, 0x64, 0xfc, 0xa8, 0x50, 0xb1, 0x35, 0x3e, 0x66, 0x07, 0x85, 0xf0, 0x7f, 0x7e, 0x7e,
-	0xe5, 0xb4, 0xb3, 0xdd, 0xd6, 0x66, 0x67, 0xfb, 0xe9, 0xcd, 0xd2, 0xda, 0x99, 0xc0, 0x48, 0xf6,
-	0x65, 0x28, 0x58, 0x62, 0x23, 0x76, 0x6d, 0x03, 0x1d, 0xc3, 0x42, 0xd5, 0x00, 0x6d, 0x4e, 0x76,
-	0xf8, 0x78, 0x52, 0xaa, 0xbc, 0xb7, 0xb7, 0x29, 0xc9, 0x9e, 0xe7, 0xe5, 0x25, 0xda, 0x85, 0x8e,
-	0xc3, 0x08, 0x16, 0x64, 0x90, 0x3a, 0xa3, 0xb5, 0xa5, 0xa4, 0x9e, 0x4b, 0xe6, 0xb6, 0x19, 0xc7,
-	0xb9, 0x6d, 0x36, 0x28, 0x78, 0x1a, 0x48, 0xc9, 0x71, 0x74, 0x5a, 0x90, 0x61, 0x32, 0x59, 0xc1,
-	0x25, 0xf9, 0x10, 0xc0, 0xc3, 0xc1, 0x20, 0xa2, 0xbe, 0xe7, 0x24, 0x5a, 0x47, 0x72, 0xcd, 0x9b,
-	0x1d, 0xdb, 0x6b, 0x1c, 0x1c, 0x49, 0x9a, 0xdd, 0xf6, 0xf2, 0x5f, 0xfd, 0x47, 0x0b, 0xb4, 0x71,
-	0x36, 0xa2, 0x0d, 0x98, 0x2f, 0xcc, 0x2a, 0xcd, 0xd1, 0x7f, 0x79, 0xf0, 0x30, 0x9d, 0xa7, 0x32,
-	0x48, 0x24, 0x11, 0x91, 0x23, 0x54, 0x02, 0x1d, 0x27, 0x11, 0x41, 0xf7, 0x61, 0x71, 0x64, 0x3b,
-	0x66, 0x24, 0x14, 0x5a, 0x4b, 0xc2, 0x16, 0x0a, 0xcf, 0x64, 0x14, 0x3d, 0x80, 0xa5, 0xf2, 0x7c,
-	0x7c, 0x21, 0x8e, 0xd0, 0xa6, 0x24, 0x72, 0xb1, 0xe4, 0x6e, 0x1a, 0xae, 0x68, 0xd2, 0xaf, 0x21,
-	0x61, 0x5c, 0x9b, 0xee, 0xb6, 0xca, 0x9a, 0xef, 0x64, 0x14, 0x6d, 0xc3, 0xad, 0x02, 0x78, 0xea,
-	0xf1, 0xc8, 0xc7, 0x89, 0x6a, 0x67, 0x46, 0x0a, 0x17, 0x03, 0xf9, 0x42, 0xed, 0xc9, 0xae, 0x9e,
-	0xc3, 0x4a, 0xad, 0xe0, 0x2a, 0x75, 0x56, 0x52, 0x97, 0xab, 0xd5, 0x97, 0x05, 0xf6, 0xe0, 0x6e,
-	0xbd, 0x91, 0xaa, 0xc2, 0x9c, 0x54, 0xd0, 0x6b, 0x5d, 0x95, 0x24, 0xf4, 0x2d, 0x68, 0x17, 0x9e,
-	0xa1, 0x35, 0xe8, 0x28, 0xd3, 0x07, 0x43, 0x9f, 0x0e, 0x33, 0x27, 0x40, 0x85, 0xf6, 0x7d, 0x3a,
-	0xd4, 0x3f, 0xc1, 0x9d, 0x31, 0x17, 0x03, 0x2d, 0x41, 0xeb, 0x8c, 0x24, 0x19, 0x27, 0xfd, 0x45,
-	0x5b, 0x30, 0x7d, 0x8e, 0xfd, 0x98, 0x64, 0xf7, 0xfd, 0xf6, 0xb5, 0xe9, 0xeb, 0xa7, 0xbb, 0xb6,
-	0x02, 0x59, 0xcd, 0x27, 0x0d, 0xeb, 0xc3, 0xd5, 0x9e, 0x0d, 0x1b, 0xb5, 0xd9, 0x52, 0x2c, 0x1c,
-	0x79, 0xdc, 0x70, 0x68, 0x60, 0xaa, 0x47, 0xe7, 0x11, 0x65, 0x2e, 0x0e, 0xbd, 0x6f, 0xea, 0x4d,
-	0x32, 0x2f, 0xca, 0xcb, 0x4b, 0xf5, 0xea, 0x72, 0xf3, 0x42, 0x7e, 0x2f, 0xf7, 0xff, 0x34, 0x60,
-	0xdd, 0xa1, 0xc1, 0x84, 0x09, 0x3e, 0x6a, 0x7c, 0x7c, 0x93, 0x21, 0x5c, 0xea, 0xe3, 0xd0, 0x35,
-	0x28, 0x73, 0x4d, 0x97, 0x84, 0xb2, 0x5e, 0x73, 0x54, 0xc6, 0xb8, 0x57, 0x78, 0xb7, 0x1a, 0xf9,
-	0xd5, 0x5c, 0x7d, 0xa5, 0xe4, 0x0e, 0x64, 0xc2, 0xea, 0x0d, 0x30, 0xfa, 0xbd, 0xdf, 0x39, 0xe0,
-	0x44, 0x02, 0x4e, 0xaa, 0x80, 0x93, 0x7e, 0xef, 0xaa, 0x79, 0x4f, 0x01, 0x2c, 0x4b, 0x22, 0x2c,
-	0xab, 0x0a, 0xb1, 0xac, 0x7e, 0x6f, 0x38, 0x23, 0xcb, 0xdb, 0xf9, 0x1b, 0x00, 0x00, 0xff, 0xff,
-	0xe3, 0x3f, 0x99, 0x99, 0x8a, 0x06, 0x00, 0x00,
+	// 678 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x4e, 0xd4, 0x4c,
+	0x18, 0x4e, 0x77, 0xf9, 0xdb, 0x77, 0x3f, 0x7e, 0x32, 0x5f, 0xd4, 0xd2, 0x20, 0xac, 0x70, 0x20,
+	0x2a, 0xb6, 0x59, 0x38, 0x31, 0x25, 0x6a, 0x00, 0x8d, 0x31, 0x51, 0x24, 0x15, 0xf7, 0xc0, 0x60,
+	0x36, 0xb3, 0x65, 0x6c, 0x2a, 0x6d, 0xa7, 0x99, 0x99, 0x62, 0x2a, 0x72, 0x21, 0x5e, 0x82, 0x5e,
+	0x8a, 0x97, 0xe0, 0x25, 0x70, 0x15, 0xa6, 0x33, 0x6d, 0xb7, 0x5d, 0xb2, 0x2e, 0x47, 0xed, 0xbc,
+	0xef, 0xf3, 0x3c, 0xef, 0xef, 0x0c, 0x3c, 0xf4, 0x28, 0xf5, 0x02, 0x62, 0xb9, 0x01, 0x4d, 0x4e,
+	0x2d, 0x4e, 0xdc, 0x84, 0xf9, 0x22, 0x75, 0x49, 0x24, 0x08, 0xb3, 0xce, 0xbb, 0x16, 0xe6, 0x9c,
+	0x08, 0x33, 0x66, 0x54, 0x50, 0xb4, 0xaa, 0xb0, 0xa6, 0xc4, 0x9a, 0x75, 0xac, 0x79, 0xde, 0x35,
+	0x56, 0x72, 0x2d, 0x1c, 0xfb, 0x16, 0x8e, 0x22, 0x2a, 0xb0, 0xf0, 0x69, 0xc4, 0x15, 0xdb, 0x58,
+	0xae, 0x78, 0x19, 0xe1, 0x34, 0x61, 0x2e, 0xc9, 0x5d, 0x3b, 0x13, 0x92, 0x28, 0x2c, 0xfd, 0x10,
+	0xb3, 0xb3, 0x42, 0xaf, 0x88, 0x26, 0x4f, 0x83, 0xe4, 0xb3, 0xc5, 0x05, 0x4b, 0xdc, 0x3c, 0x57,
+	0x63, 0x6d, 0xd4, 0x2b, 0xfc, 0x90, 0x70, 0x81, 0xc3, 0x58, 0x01, 0xd6, 0x7f, 0xb6, 0x60, 0x7a,
+	0x2f, 0x2b, 0x0e, 0x21, 0x98, 0x8a, 0x70, 0x48, 0x74, 0xad, 0xa3, 0x6d, 0xb6, 0x1c, 0xf9, 0x8f,
+	0xbe, 0x83, 0x51, 0x06, 0x55, 0x79, 0xf4, 0x63, 0x46, 0x63, 0xc2, 0x84, 0x4f, 0xb8, 0xde, 0xe8,
+	0x68, 0x9b, 0xed, 0xed, 0x67, 0xe6, 0xbf, 0xfb, 0x61, 0x4a, 0x79, 0xf3, 0x7d, 0x6e, 0x3f, 0x90,
+	0xf6, 0xa3, 0x52, 0xc5, 0xd1, 0xf9, 0x18, 0x0f, 0x8a, 0xe0, 0xff, 0xa2, 0x43, 0xd5, 0xb0, 0xb3,
+	0x9d, 0xe6, 0x66, 0x7b, 0xfb, 0xe9, 0xcd, 0xc2, 0x3a, 0xb9, 0xc0, 0x50, 0xf6, 0x65, 0x24, 0x58,
+	0xea, 0x20, 0x76, 0xcd, 0x81, 0x8e, 0x61, 0xa1, 0xde, 0x62, 0x7d, 0x4e, 0x56, 0xf8, 0x78, 0x52,
+	0xa8, 0xa2, 0xb6, 0xb7, 0x19, 0xc9, 0x99, 0xe7, 0xd5, 0x23, 0xda, 0x85, 0xb6, 0xcb, 0x08, 0x16,
+	0xa4, 0x9f, 0xf5, 0x5e, 0x6f, 0x49, 0x49, 0xa3, 0x90, 0x2c, 0x06, 0x63, 0x1e, 0x17, 0x83, 0x71,
+	0x40, 0xc1, 0x33, 0x43, 0x46, 0x4e, 0xe2, 0xd3, 0x92, 0x0c, 0x93, 0xc9, 0x0a, 0x2e, 0xc9, 0x87,
+	0x00, 0x3e, 0x0e, 0xfb, 0x31, 0x0d, 0x7c, 0x37, 0xd5, 0xdb, 0x92, 0x6b, 0xdd, 0xac, 0x6d, 0xaf,
+	0x71, 0x78, 0x24, 0x69, 0x4e, 0xcb, 0x2f, 0x7e, 0x8d, 0x1f, 0x4d, 0xd0, 0xc7, 0x8d, 0x11, 0x6d,
+	0xc0, 0x7c, 0x39, 0xac, 0xca, 0x1e, 0xfd, 0x57, 0x18, 0x0f, 0xb3, 0x7d, 0xaa, 0x82, 0x44, 0x1a,
+	0x13, 0xb9, 0x42, 0x15, 0xd0, 0x71, 0x1a, 0x13, 0x74, 0x1f, 0x16, 0x87, 0x63, 0xc7, 0x8c, 0x44,
+	0x42, 0x6f, 0x4a, 0xd8, 0x42, 0x39, 0x33, 0x69, 0x45, 0x0f, 0x60, 0xa9, 0xba, 0x1f, 0x5f, 0x88,
+	0x2b, 0xf4, 0x29, 0x89, 0x5c, 0xac, 0x4c, 0x37, 0x33, 0xd7, 0x34, 0xe9, 0xd7, 0x88, 0x30, 0xae,
+	0x4f, 0x77, 0x9a, 0x55, 0xcd, 0x77, 0xd2, 0x8a, 0xb6, 0xe1, 0x56, 0x09, 0x3c, 0xf5, 0x79, 0x1c,
+	0xe0, 0x54, 0x95, 0x33, 0x23, 0x85, 0xcb, 0x85, 0x7c, 0xa1, 0x7c, 0xb2, 0xaa, 0xe7, 0xb0, 0x32,
+	0x92, 0x70, 0x9d, 0x3a, 0x2b, 0xa9, 0xcb, 0xf5, 0xec, 0xab, 0x02, 0x7b, 0x70, 0x77, 0xb4, 0x90,
+	0xba, 0xc2, 0x9c, 0x54, 0x30, 0x46, 0xaa, 0xaa, 0x48, 0x18, 0x5b, 0xd0, 0x2a, 0x67, 0x86, 0xd6,
+	0xa0, 0xad, 0x86, 0xde, 0x1f, 0x04, 0x74, 0x90, 0x4f, 0x02, 0x94, 0x69, 0x3f, 0xa0, 0x03, 0xe3,
+	0x13, 0xdc, 0x19, 0x73, 0x31, 0xd0, 0x12, 0x34, 0xcf, 0x48, 0x9a, 0x73, 0xb2, 0x5f, 0xb4, 0x05,
+	0xd3, 0xe7, 0x38, 0x48, 0x48, 0x7e, 0xdf, 0x6f, 0x5f, 0xdb, 0xbe, 0x5e, 0xe6, 0x75, 0x14, 0xc8,
+	0x6e, 0x3c, 0xd1, 0xec, 0x0f, 0x57, 0x7b, 0x0e, 0x6c, 0x8c, 0xec, 0x96, 0x62, 0xe1, 0xd8, 0xe7,
+	0xa6, 0x4b, 0x43, 0x4b, 0x3d, 0x3a, 0x8f, 0x28, 0xf3, 0x70, 0xe4, 0x7f, 0x53, 0x4f, 0xa4, 0x75,
+	0x51, 0x3d, 0x5e, 0xaa, 0x57, 0x97, 0x5b, 0x17, 0xf2, 0x7b, 0xb9, 0xff, 0x47, 0x83, 0x75, 0x97,
+	0x86, 0x13, 0x36, 0xf8, 0x48, 0xfb, 0xf8, 0x26, 0x47, 0x78, 0x34, 0xc0, 0x91, 0x67, 0x52, 0xe6,
+	0x59, 0x1e, 0x89, 0x64, 0xbe, 0xd6, 0x30, 0x8d, 0x71, 0xef, 0xec, 0x6e, 0xdd, 0xf2, 0xab, 0xb1,
+	0xfa, 0x4a, 0xc9, 0x1d, 0xc8, 0x80, 0xf5, 0x1b, 0x60, 0xf6, 0xba, 0xbf, 0x0b, 0xc0, 0x89, 0x04,
+	0x9c, 0xd4, 0x01, 0x27, 0xbd, 0xee, 0x55, 0xe3, 0x9e, 0x02, 0xd8, 0xb6, 0x44, 0xd8, 0x76, 0x1d,
+	0x62, 0xdb, 0xbd, 0xee, 0x60, 0x46, 0xa6, 0xb7, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, 0x81, 0x34,
+	0x4a, 0x76, 0x8a, 0x06, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/securitycenter/v1/finding.pb.go b/googleapis/cloud/securitycenter/v1/finding.pb.go
index 176e584..c2a5023 100644
--- a/googleapis/cloud/securitycenter/v1/finding.pb.go
+++ b/googleapis/cloud/securitycenter/v1/finding.pb.go
@@ -219,45 +219,45 @@
 }
 
 var fileDescriptor_b75f23af5a63668d = []byte{
-	// 633 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x4e, 0x13, 0x41,
-	0x14, 0x76, 0x5b, 0x5a, 0xe0, 0x14, 0x48, 0x99, 0x04, 0xb2, 0x36, 0x06, 0x0a, 0xc6, 0xa4, 0x17,
-	0xb8, 0x9b, 0xc2, 0x0d, 0x2e, 0x31, 0xb1, 0xd4, 0x62, 0x9a, 0x28, 0x21, 0x6d, 0x69, 0xa2, 0x92,
-	0x34, 0xc3, 0x32, 0xac, 0x23, 0xdb, 0x99, 0xcd, 0xec, 0x6c, 0x63, 0x25, 0xbc, 0x8c, 0x97, 0x3e,
-	0x8a, 0x8f, 0xe0, 0x95, 0xd7, 0x3c, 0x85, 0xd9, 0x99, 0x59, 0xa4, 0xf5, 0xa7, 0xde, 0x9d, 0xf3,
-	0x9d, 0xef, 0x3b, 0x3f, 0x73, 0xce, 0x2e, 0xec, 0x04, 0x9c, 0x07, 0x21, 0x71, 0xfd, 0x90, 0x27,
-	0x17, 0x6e, 0x4c, 0xfc, 0x44, 0x50, 0x39, 0xf6, 0x09, 0x93, 0x44, 0xb8, 0xa3, 0xba, 0x7b, 0x49,
-	0xd9, 0x05, 0x65, 0x81, 0x13, 0x09, 0x2e, 0x39, 0xda, 0xd0, 0x6c, 0x47, 0xb1, 0x9d, 0x49, 0xb6,
-	0x33, 0xaa, 0x57, 0x36, 0x4d, 0x36, 0x1c, 0x51, 0xf7, 0x92, 0x92, 0xf0, 0x62, 0x70, 0x4e, 0x3e,
-	0xe0, 0x11, 0xe5, 0x42, 0x27, 0xa8, 0x3c, 0xbc, 0x47, 0x10, 0x24, 0xe6, 0x89, 0xf0, 0x89, 0x09,
-	0xed, 0xcd, 0xe8, 0x24, 0x43, 0x06, 0x43, 0x2c, 0xae, 0x62, 0x23, 0x7a, 0x64, 0x44, 0xca, 0x3b,
-	0x4f, 0x2e, 0xdd, 0x58, 0x8a, 0xc4, 0x97, 0x26, 0xba, 0x39, 0x1d, 0x95, 0x74, 0x48, 0x62, 0x89,
-	0x87, 0xd1, 0x94, 0x3c, 0x6d, 0x07, 0x33, 0xc6, 0x25, 0x96, 0x94, 0x33, 0x93, 0x7c, 0xfb, 0x4b,
-	0x11, 0xe6, 0x8f, 0xf4, 0xfc, 0x08, 0xc1, 0x1c, 0xc3, 0x43, 0x62, 0x5b, 0x55, 0xab, 0xb6, 0xd8,
-	0x51, 0x36, 0x5a, 0x87, 0x62, 0x84, 0x05, 0x61, 0xd2, 0xce, 0x29, 0xd4, 0x78, 0xe8, 0x31, 0x2c,
-	0x67, 0xb3, 0x0d, 0x94, 0x28, 0xaf, 0xc2, 0x4b, 0x19, 0x78, 0x9c, 0x8a, 0x9b, 0x50, 0x88, 0x25,
-	0x96, 0xc4, 0x9e, 0xab, 0x5a, 0xb5, 0x95, 0xdd, 0xa7, 0xce, 0xbf, 0x9f, 0xd6, 0x31, 0x8d, 0x38,
-	0xdd, 0x54, 0xd4, 0xd1, 0x5a, 0x54, 0x81, 0x05, 0x1f, 0x4b, 0x12, 0x70, 0x31, 0xb6, 0x0b, 0xaa,
-	0xc8, 0x9d, 0x8f, 0xb6, 0x60, 0x89, 0x7c, 0x92, 0x44, 0x30, 0x1c, 0x0e, 0x12, 0x41, 0xed, 0xa2,
-	0x8a, 0x97, 0x32, 0xec, 0x54, 0x50, 0xf4, 0x11, 0x56, 0x4d, 0x9b, 0x91, 0xe0, 0x11, 0x11, 0x92,
-	0x92, 0xd8, 0x9e, 0xaf, 0xe6, 0x6b, 0xa5, 0xdd, 0xe7, 0xff, 0xdd, 0x8f, 0x4a, 0x70, 0x72, 0xa7,
-	0x6f, 0x31, 0x29, 0xc6, 0x9d, 0x72, 0x3c, 0x05, 0xa3, 0xb7, 0xb0, 0x32, 0xb9, 0x41, 0x7b, 0xa1,
-	0x6a, 0xd5, 0x4a, 0xb3, 0x07, 0xef, 0x1a, 0xe4, 0x4d, 0x2a, 0x3a, 0xcc, 0xff, 0x68, 0xe4, 0x3b,
-	0xcb, 0xf1, 0x7d, 0x0c, 0x3d, 0x03, 0x20, 0x23, 0xc2, 0xe4, 0x20, 0x5d, 0xaf, 0xbd, 0xa8, 0xd2,
-	0x56, 0xb2, 0xb4, 0xd9, 0xee, 0x9d, 0x5e, 0xb6, 0xfb, 0xce, 0xa2, 0x62, 0xa7, 0x3e, 0x3a, 0x80,
-	0x92, 0x2f, 0x08, 0x96, 0x44, 0x6b, 0x61, 0xa6, 0x16, 0x34, 0x3d, 0x05, 0x2a, 0xef, 0x61, 0xed,
-	0x8f, 0xd3, 0xa3, 0x32, 0xe4, 0xaf, 0xc8, 0xd8, 0xdc, 0x4a, 0x6a, 0xa2, 0x1d, 0x28, 0x8c, 0x70,
-	0x98, 0x10, 0x75, 0x29, 0xa5, 0xdd, 0xf5, 0xdf, 0x2a, 0xf4, 0xd3, 0x68, 0x47, 0x93, 0xbc, 0xdc,
-	0xbe, 0xb5, 0xbd, 0x0f, 0x05, 0xb5, 0x6a, 0xb4, 0x06, 0xab, 0xdd, 0x5e, 0xa3, 0xd7, 0x1a, 0x9c,
-	0x1e, 0x77, 0x4f, 0x5a, 0xcd, 0xf6, 0x51, 0xbb, 0xf5, 0xb2, 0xfc, 0x00, 0x01, 0x14, 0x1b, 0xcd,
-	0x5e, 0xbb, 0xdf, 0x2a, 0x5b, 0x68, 0x09, 0x16, 0xda, 0xc7, 0xc6, 0xcb, 0x79, 0xe1, 0x6d, 0x83,
-	0xc2, 0x93, 0xa9, 0x87, 0xd4, 0xf5, 0x70, 0x44, 0x63, 0xc7, 0xe7, 0x43, 0x37, 0x3b, 0xeb, 0x17,
-	0x5c, 0x04, 0x98, 0xd1, 0xcf, 0xfa, 0xee, 0xdd, 0xeb, 0xfb, 0xee, 0x8d, 0xab, 0x97, 0x18, 0xbb,
-	0xd7, 0xda, 0xb8, 0xc9, 0xfe, 0x06, 0xb1, 0x7b, 0x6d, 0xac, 0x9b, 0xc3, 0xef, 0x16, 0x6c, 0xfb,
-	0x7c, 0x38, 0x63, 0x8b, 0x27, 0xd6, 0xbb, 0xd7, 0x86, 0x11, 0xf0, 0x10, 0xb3, 0xc0, 0xe1, 0x22,
-	0x70, 0x03, 0xc2, 0xd4, 0x03, 0xb8, 0xbf, 0xba, 0xfb, 0xdb, 0xe7, 0x7f, 0x30, 0x89, 0x7c, 0xcd,
-	0x6d, 0xbc, 0xd2, 0xe9, 0x9a, 0xaa, 0x60, 0x76, 0x24, 0x4d, 0x5d, 0xb0, 0x5f, 0xff, 0x96, 0x11,
-	0xce, 0x14, 0xe1, 0x6c, 0x92, 0x70, 0xd6, 0xaf, 0xdf, 0xe6, 0xb6, 0x34, 0xc1, 0xf3, 0x14, 0xc3,
-	0xf3, 0x26, 0x29, 0x9e, 0xd7, 0xaf, 0x9f, 0x17, 0x55, 0x7b, 0x7b, 0x3f, 0x03, 0x00, 0x00, 0xff,
-	0xff, 0x68, 0xec, 0xf4, 0xff, 0x26, 0x05, 0x00, 0x00,
+	// 634 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0xdb, 0x3e,
+	0x14, 0xfe, 0xa5, 0xa5, 0x05, 0x4e, 0x01, 0x15, 0x4b, 0xa0, 0xfc, 0xaa, 0x89, 0x15, 0xa6, 0x49,
+	0xbd, 0x60, 0x89, 0x0a, 0x37, 0x2c, 0x68, 0xd2, 0x4a, 0x57, 0xa6, 0x4a, 0x1b, 0x42, 0x6d, 0xa9,
+	0xb4, 0x0d, 0xa9, 0x32, 0xc1, 0x64, 0x1e, 0xa9, 0x1d, 0x39, 0x4e, 0xb5, 0x0e, 0xf1, 0x32, 0xbb,
+	0xdc, 0xa3, 0xec, 0x11, 0x76, 0xb5, 0x6b, 0x9e, 0x62, 0x8a, 0x1d, 0xb3, 0xb6, 0xfb, 0xd3, 0xdd,
+	0xf9, 0x7c, 0xe7, 0xfb, 0xce, 0xf9, 0xec, 0x73, 0x12, 0xd8, 0x0d, 0x38, 0x0f, 0x42, 0xe2, 0xfa,
+	0x21, 0x4f, 0x2e, 0xdd, 0x98, 0xf8, 0x89, 0xa0, 0x72, 0xec, 0x13, 0x26, 0x89, 0x70, 0x47, 0x75,
+	0xf7, 0x8a, 0xb2, 0x4b, 0xca, 0x02, 0x27, 0x12, 0x5c, 0x72, 0xb4, 0xa5, 0xd9, 0x8e, 0x62, 0x3b,
+	0xd3, 0x6c, 0x67, 0x54, 0xaf, 0x3c, 0xc8, 0xaa, 0xe1, 0x88, 0xba, 0x98, 0x31, 0x2e, 0xb1, 0xa4,
+	0x9c, 0xc5, 0x5a, 0x5d, 0x79, 0x38, 0x91, 0xbd, 0xa2, 0x24, 0xbc, 0x1c, 0x5c, 0x90, 0xf7, 0x78,
+	0x44, 0xb9, 0xc8, 0x08, 0xff, 0x4f, 0x10, 0x04, 0x89, 0x79, 0x22, 0x7c, 0x92, 0xa5, 0xf6, 0xe7,
+	0xf8, 0x34, 0xc8, 0x60, 0x88, 0xc5, 0xb5, 0x69, 0x68, 0xec, 0xa8, 0xe8, 0x22, 0xb9, 0x72, 0x63,
+	0x29, 0x12, 0x5f, 0xce, 0xd8, 0xb9, 0xcf, 0x4a, 0x3a, 0x24, 0xb1, 0xc4, 0xc3, 0x48, 0x13, 0x76,
+	0x3e, 0x17, 0x61, 0xf1, 0x58, 0xdf, 0x1f, 0x21, 0x58, 0x60, 0x78, 0x48, 0x6c, 0xab, 0x6a, 0xd5,
+	0x96, 0x3b, 0xea, 0x8c, 0x36, 0xa1, 0x18, 0x61, 0x41, 0x98, 0xb4, 0x73, 0x0a, 0xcd, 0x22, 0xf4,
+	0x08, 0x56, 0x8d, 0xfb, 0x81, 0x12, 0xe5, 0x55, 0x7a, 0xc5, 0x80, 0x27, 0xa9, 0xb8, 0x09, 0x85,
+	0x58, 0x62, 0x49, 0xec, 0x85, 0xaa, 0x55, 0x5b, 0xdb, 0x7b, 0xe2, 0xfc, 0xfd, 0x69, 0x9d, 0xcc,
+	0x88, 0xd3, 0x4d, 0x45, 0x1d, 0xad, 0x45, 0x15, 0x58, 0xf2, 0xb1, 0x24, 0x01, 0x17, 0x63, 0xbb,
+	0xa0, 0x9a, 0xdc, 0xc7, 0x68, 0x1b, 0x56, 0xc8, 0x47, 0x49, 0x04, 0xc3, 0xe1, 0x20, 0x11, 0xd4,
+	0x2e, 0xaa, 0x7c, 0xc9, 0x60, 0x67, 0x82, 0xa2, 0x0f, 0xb0, 0x9e, 0xd9, 0x8c, 0x04, 0x8f, 0x88,
+	0x90, 0x94, 0xc4, 0xf6, 0x62, 0x35, 0x5f, 0x2b, 0xed, 0x3d, 0xfb, 0x67, 0x3f, 0xaa, 0xc0, 0xe9,
+	0xbd, 0xbe, 0xc5, 0xa4, 0x18, 0x77, 0xca, 0xf1, 0x0c, 0x8c, 0xde, 0xc0, 0xda, 0xf4, 0x8c, 0xec,
+	0xa5, 0xaa, 0x55, 0x2b, 0xcd, 0xbf, 0x78, 0x37, 0x43, 0x5e, 0xa7, 0xa2, 0xa3, 0xfc, 0xf7, 0x46,
+	0xbe, 0xb3, 0x1a, 0x4f, 0x62, 0xe8, 0x29, 0x00, 0x19, 0x11, 0x26, 0x07, 0xe9, 0x00, 0xed, 0x65,
+	0x55, 0xb6, 0x62, 0xca, 0x9a, 0xe9, 0x3a, 0x3d, 0x33, 0xdd, 0xce, 0xb2, 0x62, 0xa7, 0x31, 0x3a,
+	0x84, 0x92, 0x2f, 0x08, 0x96, 0x44, 0x6b, 0x61, 0xae, 0x16, 0x34, 0x3d, 0x05, 0x2a, 0xef, 0x60,
+	0xe3, 0xb7, 0xb7, 0x47, 0x65, 0xc8, 0x5f, 0x93, 0x71, 0xb6, 0x2b, 0xe9, 0x11, 0xed, 0x42, 0x61,
+	0x84, 0xc3, 0x84, 0xa8, 0x4d, 0x29, 0xed, 0x6d, 0xfe, 0xd2, 0xa1, 0x9f, 0x66, 0x3b, 0x9a, 0xe4,
+	0xe5, 0x0e, 0xac, 0x9d, 0x03, 0x28, 0xa8, 0x51, 0xa3, 0x0d, 0x58, 0xef, 0xf6, 0x1a, 0xbd, 0xd6,
+	0xe0, 0xec, 0xa4, 0x7b, 0xda, 0x6a, 0xb6, 0x8f, 0xdb, 0xad, 0x17, 0xe5, 0xff, 0x10, 0x40, 0xb1,
+	0xd1, 0xec, 0xb5, 0xfb, 0xad, 0xb2, 0x85, 0x56, 0x60, 0xa9, 0x7d, 0x92, 0x45, 0x39, 0x2f, 0xbc,
+	0x6b, 0x50, 0x78, 0x3c, 0xf3, 0x90, 0xba, 0x1f, 0x8e, 0x68, 0xec, 0xf8, 0x7c, 0xe8, 0x9a, 0xb5,
+	0x7e, 0xce, 0x45, 0x80, 0x19, 0xfd, 0xa4, 0xbf, 0x53, 0xf7, 0x66, 0x32, 0xbc, 0x75, 0xf5, 0x10,
+	0x63, 0xf7, 0x46, 0x1f, 0x6e, 0xcd, 0xdf, 0x20, 0x76, 0x6f, 0xb2, 0xd3, 0xed, 0xd1, 0x37, 0x0b,
+	0x76, 0x7c, 0x3e, 0x9c, 0x33, 0xc5, 0x53, 0xeb, 0xed, 0xab, 0x8c, 0x11, 0xf0, 0x10, 0xb3, 0xc0,
+	0xe1, 0x22, 0x70, 0x03, 0xc2, 0xd4, 0x03, 0xb8, 0x3f, 0xdd, 0xfd, 0xe9, 0x03, 0x3f, 0x9c, 0x46,
+	0xbe, 0xe4, 0xb6, 0x5e, 0xea, 0x72, 0x4d, 0xd5, 0xd0, 0x2c, 0x49, 0x53, 0x37, 0xec, 0xd7, 0xbf,
+	0x1a, 0xc2, 0xb9, 0x22, 0x9c, 0x4f, 0x13, 0xce, 0xfb, 0xf5, 0xbb, 0xdc, 0xb6, 0x26, 0x78, 0x9e,
+	0x62, 0x78, 0xde, 0x34, 0xc5, 0xf3, 0xfa, 0xf5, 0x8b, 0xa2, 0xb2, 0xb7, 0xff, 0x23, 0x00, 0x00,
+	0xff, 0xff, 0x2b, 0x16, 0xec, 0x2d, 0x26, 0x05, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/securitycenter/v1/notification_config.pb.go b/googleapis/cloud/securitycenter/v1/notification_config.pb.go
new file mode 100644
index 0000000..773d7e5
--- /dev/null
+++ b/googleapis/cloud/securitycenter/v1/notification_config.pb.go
@@ -0,0 +1,241 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/securitycenter/v1/notification_config.proto
+
+package securitycenter
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Cloud Security Command Center (Cloud SCC) notification configs.
+//
+// A notification config is a Cloud SCC resource that contains the configuration
+// to send notifications for create/update events of findings, assets and etc.
+type NotificationConfig struct {
+	// The relative resource name of this notification config. See:
+	// https://cloud.google.com/apis/design/resource_names#relative_resource_name
+	// Example:
+	// "organizations/{organization_id}/notificationConfigs/notify_public_bucket".
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The description of the notification config (max of 1024 characters).
+	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// The PubSub topic to send notifications to. Its format is
+	// "projects/[project_id]/topics/[topic]".
+	PubsubTopic string `protobuf:"bytes,3,opt,name=pubsub_topic,json=pubsubTopic,proto3" json:"pubsub_topic,omitempty"`
+	// Output only. The service account that needs "pubsub.topics.publish"
+	// permission to publish to the PubSub topic.
+	ServiceAccount string `protobuf:"bytes,4,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"`
+	// The config for triggering notifications.
+	//
+	// Types that are valid to be assigned to NotifyConfig:
+	//	*NotificationConfig_StreamingConfig_
+	NotifyConfig         isNotificationConfig_NotifyConfig `protobuf_oneof:"notify_config"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *NotificationConfig) Reset()         { *m = NotificationConfig{} }
+func (m *NotificationConfig) String() string { return proto.CompactTextString(m) }
+func (*NotificationConfig) ProtoMessage()    {}
+func (*NotificationConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8283693b130632bd, []int{0}
+}
+
+func (m *NotificationConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotificationConfig.Unmarshal(m, b)
+}
+func (m *NotificationConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotificationConfig.Marshal(b, m, deterministic)
+}
+func (m *NotificationConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotificationConfig.Merge(m, src)
+}
+func (m *NotificationConfig) XXX_Size() int {
+	return xxx_messageInfo_NotificationConfig.Size(m)
+}
+func (m *NotificationConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotificationConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotificationConfig proto.InternalMessageInfo
+
+func (m *NotificationConfig) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *NotificationConfig) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *NotificationConfig) GetPubsubTopic() string {
+	if m != nil {
+		return m.PubsubTopic
+	}
+	return ""
+}
+
+func (m *NotificationConfig) GetServiceAccount() string {
+	if m != nil {
+		return m.ServiceAccount
+	}
+	return ""
+}
+
+type isNotificationConfig_NotifyConfig interface {
+	isNotificationConfig_NotifyConfig()
+}
+
+type NotificationConfig_StreamingConfig_ struct {
+	StreamingConfig *NotificationConfig_StreamingConfig `protobuf:"bytes,5,opt,name=streaming_config,json=streamingConfig,proto3,oneof"`
+}
+
+func (*NotificationConfig_StreamingConfig_) isNotificationConfig_NotifyConfig() {}
+
+func (m *NotificationConfig) GetNotifyConfig() isNotificationConfig_NotifyConfig {
+	if m != nil {
+		return m.NotifyConfig
+	}
+	return nil
+}
+
+func (m *NotificationConfig) GetStreamingConfig() *NotificationConfig_StreamingConfig {
+	if x, ok := m.GetNotifyConfig().(*NotificationConfig_StreamingConfig_); ok {
+		return x.StreamingConfig
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*NotificationConfig) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*NotificationConfig_StreamingConfig_)(nil),
+	}
+}
+
+// The config for streaming-based notifications, which send each event as soon
+// as it is detected.
+type NotificationConfig_StreamingConfig struct {
+	// Expression that defines the filter to apply across create/update events
+	// of assets or findings as specified by the event type. The expression is a
+	// list of zero or more restrictions combined via logical operators `AND`
+	// and `OR`. Parentheses are supported, and `OR` has higher precedence than
+	// `AND`.
+	//
+	// Restrictions have the form `<field> <operator> <value>` and may have a
+	// `-` character in front of them to indicate negation. The fields map to
+	// those defined in the corresponding resource.
+	//
+	// The supported operators are:
+	//
+	// * `=` for all value types.
+	// * `>`, `<`, `>=`, `<=` for integer values.
+	// * `:`, meaning substring matching, for strings.
+	//
+	// The supported value types are:
+	//
+	// * string literals in quotes.
+	// * integer literals without quotes.
+	// * boolean literals `true` and `false` without quotes.
+	Filter               string   `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NotificationConfig_StreamingConfig) Reset()         { *m = NotificationConfig_StreamingConfig{} }
+func (m *NotificationConfig_StreamingConfig) String() string { return proto.CompactTextString(m) }
+func (*NotificationConfig_StreamingConfig) ProtoMessage()    {}
+func (*NotificationConfig_StreamingConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8283693b130632bd, []int{0, 0}
+}
+
+func (m *NotificationConfig_StreamingConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotificationConfig_StreamingConfig.Unmarshal(m, b)
+}
+func (m *NotificationConfig_StreamingConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotificationConfig_StreamingConfig.Marshal(b, m, deterministic)
+}
+func (m *NotificationConfig_StreamingConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotificationConfig_StreamingConfig.Merge(m, src)
+}
+func (m *NotificationConfig_StreamingConfig) XXX_Size() int {
+	return xxx_messageInfo_NotificationConfig_StreamingConfig.Size(m)
+}
+func (m *NotificationConfig_StreamingConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotificationConfig_StreamingConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotificationConfig_StreamingConfig proto.InternalMessageInfo
+
+func (m *NotificationConfig_StreamingConfig) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*NotificationConfig)(nil), "google.cloud.securitycenter.v1.NotificationConfig")
+	proto.RegisterType((*NotificationConfig_StreamingConfig)(nil), "google.cloud.securitycenter.v1.NotificationConfig.StreamingConfig")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/securitycenter/v1/notification_config.proto", fileDescriptor_8283693b130632bd)
+}
+
+var fileDescriptor_8283693b130632bd = []byte{
+	// 495 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xc1, 0x6e, 0x13, 0x3d,
+	0x10, 0xc7, 0xbf, 0x24, 0xfd, 0x2a, 0xe1, 0x00, 0x41, 0x3e, 0x40, 0x08, 0x50, 0xd2, 0x9e, 0x8a,
+	0x84, 0x6c, 0x02, 0x17, 0xb4, 0x5c, 0xd8, 0x8d, 0x04, 0x1c, 0x10, 0xaa, 0x52, 0x94, 0x03, 0x8a,
+	0x14, 0x39, 0x8e, 0xb3, 0x18, 0x6d, 0x3c, 0x2b, 0xdb, 0x1b, 0xa9, 0x8d, 0xf6, 0x85, 0x78, 0x00,
+	0x1e, 0x82, 0xa7, 0xe0, 0x4a, 0x1e, 0x81, 0x13, 0x8a, 0xed, 0x8a, 0xdd, 0xb4, 0x94, 0x53, 0x3c,
+	0xf3, 0xff, 0xcd, 0xe4, 0xef, 0xf1, 0x2c, 0x7a, 0x99, 0x02, 0xa4, 0x99, 0xa0, 0x3c, 0x83, 0x62,
+	0x4e, 0x8d, 0xe0, 0x85, 0x96, 0xf6, 0x8c, 0x0b, 0x65, 0x85, 0xa6, 0xab, 0x01, 0x55, 0x60, 0xe5,
+	0x42, 0x72, 0x66, 0x25, 0xa8, 0x29, 0x07, 0xb5, 0x90, 0x29, 0xc9, 0x35, 0x58, 0xc0, 0x07, 0xbe,
+	0x92, 0xb8, 0x4a, 0x52, 0xaf, 0x24, 0xab, 0x41, 0xef, 0x61, 0xe8, 0xcc, 0x72, 0x49, 0x99, 0x52,
+	0x60, 0x5d, 0x0f, 0xe3, 0xab, 0x7b, 0x8f, 0x2b, 0xea, 0x42, 0x8a, 0x6c, 0x3e, 0x9d, 0x89, 0xcf,
+	0x6c, 0x25, 0x41, 0x07, 0xe0, 0x7e, 0x05, 0xd0, 0xc2, 0x40, 0xa1, 0xb9, 0xf0, 0xd2, 0xd1, 0xcf,
+	0x16, 0xc2, 0x1f, 0x2a, 0xbe, 0x86, 0xce, 0x16, 0xc6, 0x68, 0x4f, 0xb1, 0xa5, 0xe8, 0x36, 0xfa,
+	0x8d, 0xe3, 0x1b, 0x23, 0x77, 0xc6, 0x7d, 0xd4, 0x9e, 0x0b, 0xc3, 0xb5, 0xcc, 0xb7, 0x60, 0xb7,
+	0xe9, 0xa4, 0x6a, 0x0a, 0x0f, 0xd1, 0xcd, 0xbc, 0x98, 0x99, 0x62, 0x36, 0xb5, 0x90, 0x4b, 0xde,
+	0x6d, 0x6d, 0x91, 0xa4, 0xff, 0x2b, 0x7e, 0x84, 0x1e, 0x78, 0x81, 0x78, 0x27, 0x2c, 0x97, 0x86,
+	0x70, 0x58, 0xd2, 0x8f, 0x5b, 0x6e, 0xd4, 0xf6, 0xa2, 0x0b, 0xf0, 0x53, 0xd4, 0x31, 0x42, 0xaf,
+	0x24, 0x17, 0x53, 0xc6, 0x39, 0x14, 0xca, 0x76, 0xf7, 0x5c, 0x9f, 0xd6, 0x8f, 0xb8, 0x35, 0xba,
+	0x1d, 0xb4, 0xd8, 0x4b, 0x18, 0xd0, 0x1d, 0x63, 0xb5, 0x60, 0x4b, 0xa9, 0xd2, 0x30, 0xd3, 0xee,
+	0xff, 0xfd, 0xc6, 0x71, 0xfb, 0x79, 0x42, 0xae, 0x1f, 0x2a, 0xb9, 0x7c, 0x6d, 0x72, 0x7a, 0xd1,
+	0xca, 0xc7, 0xef, 0xfe, 0x1b, 0x75, 0x4c, 0x3d, 0xd5, 0x7b, 0x82, 0x3a, 0x3b, 0x14, 0xbe, 0x8b,
+	0xf6, 0x17, 0x32, 0xb3, 0x42, 0x87, 0x71, 0x85, 0x28, 0x2a, 0x37, 0xf1, 0x39, 0x7a, 0xb6, 0xf3,
+	0xc7, 0x3b, 0x03, 0xb8, 0x62, 0xf6, 0x6f, 0x40, 0xa7, 0x4c, 0xc9, 0x73, 0xff, 0xc6, 0x74, 0x5d,
+	0x0d, 0xcb, 0xda, 0x12, 0xf9, 0x02, 0x43, 0xd7, 0x57, 0x6c, 0x56, 0x99, 0x74, 0xd0, 0x2d, 0x97,
+	0x3f, 0x0b, 0x99, 0xe4, 0x5b, 0x73, 0x13, 0xbf, 0xbe, 0xf6, 0x25, 0xf0, 0x61, 0xae, 0xe1, 0x8b,
+	0xe0, 0xd6, 0xd0, 0x75, 0x38, 0x95, 0xd4, 0xbd, 0xa5, 0xa1, 0x6b, 0xf7, 0x5b, 0xa2, 0x23, 0x0e,
+	0xcb, 0x7f, 0x8c, 0x36, 0xb9, 0x77, 0xf9, 0x5a, 0x27, 0xdb, 0x75, 0x3b, 0x69, 0x7c, 0x7a, 0x1f,
+	0x4a, 0x53, 0xc8, 0x98, 0x4a, 0x09, 0xe8, 0x94, 0xa6, 0x42, 0xb9, 0x65, 0xa4, 0x7f, 0x2c, 0xfd,
+	0xed, 0x1b, 0x7a, 0x55, 0xcf, 0x7c, 0x6d, 0x1e, 0xbc, 0xf5, 0xed, 0x86, 0xce, 0xc9, 0x69, 0x50,
+	0x87, 0xde, 0xc9, 0x78, 0xf0, 0xfd, 0x02, 0x98, 0x38, 0x60, 0x52, 0x07, 0x26, 0xe3, 0xc1, 0xa6,
+	0x79, 0xe8, 0x81, 0x28, 0x72, 0x44, 0x14, 0xd5, 0x91, 0x28, 0x1a, 0x0f, 0x66, 0xfb, 0xce, 0xde,
+	0x8b, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x5f, 0x53, 0x87, 0xe1, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/securitycenter/v1/notification_message.pb.go b/googleapis/cloud/securitycenter/v1/notification_message.pb.go
new file mode 100644
index 0000000..c72f78f
--- /dev/null
+++ b/googleapis/cloud/securitycenter/v1/notification_message.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/securitycenter/v1/notification_message.proto
+
+package securitycenter
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Cloud SCC's Notification
+type NotificationMessage struct {
+	// Name of the notification config that generated current notification.
+	NotificationConfigName string `protobuf:"bytes,1,opt,name=notification_config_name,json=notificationConfigName,proto3" json:"notification_config_name,omitempty"`
+	// Notification Event.
+	//
+	// Types that are valid to be assigned to Event:
+	//	*NotificationMessage_Finding
+	Event                isNotificationMessage_Event `protobuf_oneof:"event"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *NotificationMessage) Reset()         { *m = NotificationMessage{} }
+func (m *NotificationMessage) String() string { return proto.CompactTextString(m) }
+func (*NotificationMessage) ProtoMessage()    {}
+func (*NotificationMessage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_63db66f0787c1bb5, []int{0}
+}
+
+func (m *NotificationMessage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotificationMessage.Unmarshal(m, b)
+}
+func (m *NotificationMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotificationMessage.Marshal(b, m, deterministic)
+}
+func (m *NotificationMessage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotificationMessage.Merge(m, src)
+}
+func (m *NotificationMessage) XXX_Size() int {
+	return xxx_messageInfo_NotificationMessage.Size(m)
+}
+func (m *NotificationMessage) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotificationMessage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotificationMessage proto.InternalMessageInfo
+
+func (m *NotificationMessage) GetNotificationConfigName() string {
+	if m != nil {
+		return m.NotificationConfigName
+	}
+	return ""
+}
+
+type isNotificationMessage_Event interface {
+	isNotificationMessage_Event()
+}
+
+type NotificationMessage_Finding struct {
+	Finding *Finding `protobuf:"bytes,2,opt,name=finding,proto3,oneof"`
+}
+
+func (*NotificationMessage_Finding) isNotificationMessage_Event() {}
+
+func (m *NotificationMessage) GetEvent() isNotificationMessage_Event {
+	if m != nil {
+		return m.Event
+	}
+	return nil
+}
+
+func (m *NotificationMessage) GetFinding() *Finding {
+	if x, ok := m.GetEvent().(*NotificationMessage_Finding); ok {
+		return x.Finding
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*NotificationMessage) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*NotificationMessage_Finding)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterType((*NotificationMessage)(nil), "google.cloud.securitycenter.v1.NotificationMessage")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/securitycenter/v1/notification_message.proto", fileDescriptor_63db66f0787c1bb5)
+}
+
+var fileDescriptor_63db66f0787c1bb5 = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0x33, 0x31,
+	0x14, 0x85, 0xff, 0x14, 0x7e, 0x8b, 0x71, 0x57, 0x41, 0x86, 0x22, 0xa5, 0x76, 0x63, 0x17, 0x92,
+	0x30, 0xba, 0xd1, 0xb8, 0xeb, 0x80, 0xba, 0xd0, 0x52, 0x2a, 0x74, 0x21, 0x85, 0x12, 0xd3, 0x34,
+	0x04, 0x66, 0xee, 0x1d, 0x66, 0xd2, 0x01, 0x1f, 0xc6, 0x17, 0xf0, 0x51, 0x7c, 0x14, 0xd7, 0x3e,
+	0x80, 0x98, 0x4c, 0xa1, 0x03, 0x6a, 0xb7, 0x39, 0xdf, 0x39, 0xf7, 0x9c, 0xd0, 0x2b, 0x83, 0x68,
+	0x52, 0xcd, 0x55, 0x8a, 0xeb, 0x25, 0x2f, 0xb5, 0x5a, 0x17, 0xd6, 0xbd, 0x28, 0x0d, 0x4e, 0x17,
+	0xbc, 0x8a, 0x39, 0xa0, 0xb3, 0x2b, 0xab, 0xa4, 0xb3, 0x08, 0x8b, 0x4c, 0x97, 0xa5, 0x34, 0x9a,
+	0xe5, 0x05, 0x3a, 0xec, 0xf4, 0x82, 0x95, 0x79, 0x2b, 0x6b, 0x5a, 0x59, 0x15, 0x77, 0x8f, 0xeb,
+	0x68, 0x99, 0x5b, 0x2e, 0x01, 0xd0, 0xf9, 0x90, 0x32, 0xb8, 0xbb, 0x67, 0x3b, 0x0e, 0xaf, 0x2c,
+	0x2c, 0x2d, 0x98, 0x40, 0x0f, 0x5e, 0x09, 0x3d, 0x1c, 0x6f, 0x55, 0x79, 0x08, 0x4d, 0x3a, 0x97,
+	0x34, 0x6a, 0x34, 0x54, 0x08, 0x2b, 0x6b, 0x16, 0x20, 0x33, 0x1d, 0x91, 0x3e, 0x19, 0xee, 0x4f,
+	0x8f, 0xb6, 0xf5, 0xc4, 0xcb, 0x63, 0x99, 0xe9, 0x4e, 0x42, 0xdb, 0xf5, 0x89, 0xa8, 0xd5, 0x27,
+	0xc3, 0x83, 0xf3, 0x53, 0xf6, 0xf7, 0x1e, 0x76, 0x13, 0xf0, 0xbb, 0x7f, 0xd3, 0x8d, 0x73, 0xd4,
+	0xa6, 0xff, 0x75, 0xa5, 0xc1, 0x8d, 0x3e, 0x09, 0x1d, 0x28, 0xcc, 0x76, 0x44, 0x8c, 0xa2, 0x1f,
+	0x36, 0x4c, 0xbe, 0x07, 0x4e, 0xc8, 0xd3, 0x7d, 0xed, 0x35, 0x98, 0x4a, 0x30, 0x0c, 0x0b, 0xc3,
+	0x8d, 0x06, 0x3f, 0x9f, 0x07, 0x49, 0xe6, 0xb6, 0xfc, 0xed, 0xbf, 0xae, 0x9b, 0x2f, 0x6f, 0xad,
+	0xde, 0x6d, 0x88, 0x4b, 0x7c, 0x95, 0xc7, 0x5a, 0x4d, 0x42, 0x95, 0x59, 0xfc, 0xbe, 0x01, 0xe6,
+	0x1e, 0x98, 0x37, 0x81, 0xf9, 0x2c, 0xfe, 0x68, 0x9d, 0x04, 0x40, 0x08, 0x4f, 0x08, 0xd1, 0x44,
+	0x84, 0x98, 0xc5, 0xcf, 0x7b, 0xbe, 0xde, 0xc5, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, 0x1f,
+	0xf5, 0x40, 0x46, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/securitycenter/v1/organization_settings.pb.go b/googleapis/cloud/securitycenter/v1/organization_settings.pb.go
index a3bf09b..1703ce7 100644
--- a/googleapis/cloud/securitycenter/v1/organization_settings.pb.go
+++ b/googleapis/cloud/securitycenter/v1/organization_settings.pb.go
@@ -202,27 +202,27 @@
 	0xdf, 0x49, 0xbe, 0x20, 0x57, 0x00, 0x88, 0x94, 0xdb, 0x2c, 0x85, 0x75, 0x62, 0x6b, 0xce, 0xd6,
 	0x99, 0xcc, 0xaf, 0x18, 0x57, 0x39, 0xcf, 0xec, 0x8d, 0x63, 0x43, 0x26, 0xa8, 0x92, 0x1f, 0x68,
 	0x2e, 0x41, 0xc5, 0x9a, 0xe7, 0xb9, 0x54, 0x42, 0x93, 0x55, 0x06, 0x39, 0xe0, 0x5e, 0xa1, 0x25,
-	0x46, 0x4b, 0xea, 0x5a, 0xb2, 0x71, 0xba, 0x0f, 0x4b, 0x6f, 0xba, 0x92, 0x76, 0xc6, 0x35, 0xac,
-	0x33, 0xc6, 0x0b, 0x69, 0xf7, 0x51, 0x05, 0xa2, 0x4a, 0x41, 0x6e, 0x02, 0x4a, 0xe3, 0xc1, 0x8f,
-	0x7d, 0xd4, 0x9e, 0x56, 0x82, 0x67, 0x65, 0x2e, 0xc6, 0x68, 0x5f, 0xd1, 0x25, 0xef, 0x58, 0x7d,
-	0x6b, 0x78, 0x10, 0x99, 0x67, 0xfc, 0x0c, 0x1d, 0x73, 0x45, 0x2f, 0x52, 0x1e, 0x53, 0xad, 0x79,
-	0x1e, 0x27, 0x52, 0x33, 0xd8, 0xf0, 0xec, 0xaa, 0xd3, 0xe8, 0x5b, 0xc3, 0xfb, 0x51, 0xbb, 0x40,
-	0x4f, 0x6e, 0xc0, 0xf1, 0x16, 0xc3, 0x5f, 0xd0, 0xf1, 0x2d, 0x7a, 0xcc, 0x40, 0xbd, 0x97, 0xa2,
-	0xb3, 0xd7, 0xb7, 0x86, 0xcd, 0x51, 0x40, 0xfe, 0x7e, 0x39, 0xb2, 0xab, 0x1f, 0xa9, 0x87, 0x78,
-	0xc6, 0x30, 0x6a, 0xd3, 0x1d, 0xd3, 0xee, 0xd7, 0x06, 0x6a, 0xef, 0xa2, 0xe3, 0xc7, 0xa8, 0xb9,
-	0xca, 0xe0, 0x92, 0xb3, 0x3c, 0x96, 0x89, 0xee, 0x58, 0xfd, 0xbd, 0xe1, 0x41, 0x84, 0xca, 0x51,
-	0x90, 0x68, 0xfc, 0x19, 0x1d, 0x49, 0xc5, 0xd2, 0xb5, 0xbe, 0xf9, 0x24, 0x4b, 0x48, 0xb8, 0xb9,
-	0xe8, 0xd1, 0xe8, 0xf5, 0x7f, 0xab, 0x4c, 0x82, 0xad, 0xff, 0x29, 0x24, 0x3c, 0x3a, 0x94, 0xd5,
-	0xe3, 0x20, 0x44, 0x87, 0x35, 0x1c, 0xf7, 0x50, 0x37, 0x08, 0xbd, 0xc9, 0xf9, 0x2c, 0x98, 0x86,
-	0xf1, 0xe9, 0x74, 0xec, 0xc7, 0xe7, 0xe1, 0xec, 0xcc, 0xf7, 0x82, 0x97, 0x81, 0x3f, 0x6e, 0xdd,
-	0xc1, 0x2d, 0xf4, 0xc0, 0xe0, 0x63, 0x3f, 0x9e, 0x86, 0x93, 0xb7, 0x2d, 0x0b, 0x37, 0xd1, 0x3d,
-	0xff, 0x8d, 0x99, 0xb4, 0x1a, 0xee, 0xe5, 0xf5, 0x89, 0x40, 0xa3, 0x5b, 0x75, 0x8b, 0xab, 0xd0,
-	0x95, 0xd4, 0x84, 0xc1, 0xd2, 0xde, 0xb9, 0x0d, 0x4e, 0x75, 0x39, 0xb5, 0xfd, 0xb1, 0x7a, 0xfc,
-	0x54, 0xdb, 0xdc, 0xad, 0xe4, 0xc5, 0x4f, 0x0b, 0x0d, 0x18, 0x2c, 0xff, 0xf1, 0xa6, 0xce, 0xac,
-	0x77, 0x93, 0x92, 0x21, 0x20, 0xa5, 0x4a, 0x10, 0xc8, 0x84, 0x2d, 0xb8, 0x32, 0xeb, 0x69, 0xff,
-	0xee, 0xf6, 0xa7, 0xdf, 0xe6, 0x79, 0x7d, 0xf2, 0xad, 0xd1, 0x7b, 0x55, 0xd8, 0x79, 0x26, 0x70,
-	0x56, 0xa2, 0x5e, 0x11, 0x38, 0x77, 0xbe, 0x6f, 0x09, 0x0b, 0x43, 0x58, 0xd4, 0x09, 0x8b, 0xb9,
-	0x73, 0xdd, 0x78, 0x52, 0x10, 0x5c, 0xd7, 0x30, 0x5c, 0xb7, 0x4e, 0x71, 0xdd, 0xb9, 0x73, 0x71,
-	0xd7, 0xd4, 0x7b, 0xfa, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x53, 0xc2, 0x39, 0x76, 0xd4, 0x03, 0x00,
+	0x46, 0x4b, 0xea, 0x5a, 0xb2, 0x71, 0xba, 0x8f, 0x4a, 0x6f, 0xba, 0x92, 0x36, 0x55, 0x0a, 0x72,
+	0xe3, 0x52, 0xaa, 0xbb, 0x0f, 0x2b, 0x68, 0xc6, 0x35, 0xac, 0x33, 0xc6, 0x0b, 0x68, 0xf0, 0x63,
+	0x1f, 0xb5, 0xa7, 0x95, 0xe0, 0x59, 0x99, 0x8b, 0x31, 0xda, 0x57, 0x74, 0xc9, 0x3b, 0x56, 0xdf,
+	0x1a, 0x1e, 0x44, 0xe6, 0x19, 0x3f, 0x43, 0xc7, 0x5c, 0xd1, 0x8b, 0x94, 0xc7, 0x54, 0x6b, 0x9e,
+	0xc7, 0x89, 0xd4, 0x0c, 0x36, 0x3c, 0xbb, 0xea, 0x34, 0xfa, 0xd6, 0xf0, 0x7e, 0xd4, 0x2e, 0xd0,
+	0x93, 0x1b, 0x70, 0xbc, 0xc5, 0xf0, 0x17, 0x74, 0x7c, 0x8b, 0x1e, 0x33, 0x50, 0xef, 0xa5, 0xe8,
+	0xec, 0xf5, 0xad, 0x61, 0x73, 0x14, 0x90, 0xbf, 0x5f, 0x8e, 0xec, 0xea, 0x47, 0xea, 0x21, 0x9e,
+	0x31, 0x8c, 0xda, 0x74, 0xc7, 0xb4, 0xfb, 0xb5, 0x81, 0xda, 0xbb, 0xe8, 0xf8, 0x31, 0x6a, 0xae,
+	0x32, 0xb8, 0xe4, 0x2c, 0x8f, 0x65, 0xa2, 0x3b, 0x56, 0x7f, 0x6f, 0x78, 0x10, 0xa1, 0x72, 0x14,
+	0x24, 0x1a, 0x7f, 0x46, 0x47, 0x52, 0xb1, 0x74, 0xad, 0x6f, 0x3e, 0xc9, 0x12, 0x12, 0x6e, 0x2e,
+	0x7a, 0x34, 0x7a, 0xfd, 0xdf, 0x2a, 0x93, 0x60, 0xeb, 0x7f, 0x0a, 0x09, 0x8f, 0x0e, 0x65, 0xf5,
+	0x38, 0x08, 0xd1, 0x61, 0x0d, 0xc7, 0x3d, 0xd4, 0x0d, 0x42, 0x6f, 0x72, 0x3e, 0x0b, 0xa6, 0x61,
+	0x7c, 0x3a, 0x1d, 0xfb, 0xf1, 0x79, 0x38, 0x3b, 0xf3, 0xbd, 0xe0, 0x65, 0xe0, 0x8f, 0x5b, 0x77,
+	0x70, 0x0b, 0x3d, 0x30, 0xf8, 0xd8, 0x8f, 0xa7, 0xe1, 0xe4, 0x6d, 0xcb, 0xc2, 0x4d, 0x74, 0xcf,
+	0x7f, 0x63, 0x26, 0xad, 0x86, 0x7b, 0x79, 0x7d, 0x22, 0xd0, 0xe8, 0x56, 0xdd, 0xe2, 0x2a, 0x74,
+	0x25, 0x35, 0x61, 0xb0, 0xb4, 0x77, 0x6e, 0x83, 0x53, 0x5d, 0x4e, 0x6d, 0x7f, 0xac, 0x1e, 0x3f,
+	0xd5, 0x36, 0x77, 0x2b, 0x79, 0xf1, 0xd3, 0x42, 0x03, 0x06, 0xcb, 0x7f, 0xbc, 0xa9, 0x33, 0xeb,
+	0xdd, 0xa4, 0x64, 0x08, 0x48, 0xa9, 0x12, 0x04, 0x32, 0x61, 0x0b, 0xae, 0xcc, 0x7a, 0xda, 0xbf,
+	0xbb, 0xfd, 0xe9, 0xb7, 0x79, 0x5e, 0x9f, 0x7c, 0x6b, 0xf4, 0x5e, 0x15, 0x76, 0x9e, 0x09, 0x9c,
+	0x95, 0xa8, 0x57, 0x04, 0xce, 0x9d, 0xef, 0x5b, 0xc2, 0xc2, 0x10, 0x16, 0x75, 0xc2, 0x62, 0xee,
+	0x5c, 0x37, 0x9e, 0x14, 0x04, 0xd7, 0x35, 0x0c, 0xd7, 0xad, 0x53, 0x5c, 0x77, 0xee, 0x5c, 0xdc,
+	0x35, 0xf5, 0x9e, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xcd, 0x64, 0xa3, 0xd4, 0x03, 0x00,
 	0x00,
 }
diff --git a/googleapis/cloud/securitycenter/v1/run_asset_discovery_response.pb.go b/googleapis/cloud/securitycenter/v1/run_asset_discovery_response.pb.go
index 1a9e272..4465222 100644
--- a/googleapis/cloud/securitycenter/v1/run_asset_discovery_response.pb.go
+++ b/googleapis/cloud/securitycenter/v1/run_asset_discovery_response.pb.go
@@ -121,28 +121,28 @@
 
 var fileDescriptor_421ea6ed240ae1f7 = []byte{
 	// 374 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x8a, 0xdb, 0x30,
-	0x14, 0x86, 0x6b, 0x97, 0x94, 0x56, 0xa5, 0x21, 0x35, 0x14, 0x92, 0x50, 0x42, 0x9a, 0x55, 0x56,
-	0x12, 0x4e, 0xe9, 0xc6, 0x5d, 0x14, 0xd7, 0x56, 0x4b, 0x20, 0x49, 0x8d, 0xed, 0x64, 0x51, 0x02,
-	0xc6, 0x71, 0x54, 0x63, 0x48, 0x25, 0x23, 0xc9, 0x81, 0x5c, 0x69, 0x8e, 0x32, 0x47, 0x98, 0x23,
-	0xcc, 0x09, 0x66, 0x39, 0x58, 0xb2, 0x07, 0xbc, 0xc8, 0xcc, 0x52, 0xfa, 0x3f, 0x7d, 0xef, 0x7f,
-	0x08, 0xb8, 0x39, 0x63, 0xf9, 0x89, 0xa0, 0xec, 0xc4, 0xaa, 0x23, 0x12, 0x24, 0xab, 0x78, 0x21,
-	0x2f, 0x19, 0xa1, 0x92, 0x70, 0x74, 0xb6, 0x11, 0xaf, 0x68, 0x92, 0x0a, 0x41, 0x64, 0x72, 0x2c,
-	0x44, 0xc6, 0xce, 0x84, 0x5f, 0x12, 0x4e, 0x44, 0xc9, 0xa8, 0x20, 0xb0, 0xe4, 0x4c, 0x32, 0x6b,
-	0xa2, 0x15, 0x50, 0x29, 0x60, 0x57, 0x01, 0xcf, 0xf6, 0xb8, 0xc9, 0x91, 0xa2, 0x0f, 0xd5, 0x3f,
-	0x74, 0xac, 0x78, 0x2a, 0x0b, 0x46, 0xf5, 0xfb, 0xf1, 0xe7, 0x26, 0x4f, 0xcb, 0x02, 0xa5, 0x94,
-	0x32, 0xa9, 0x42, 0xa1, 0xd3, 0xd9, 0x83, 0x01, 0x46, 0x61, 0x45, 0xdd, 0xba, 0x83, 0xdf, 0x56,
-	0x08, 0x9b, 0x06, 0xd6, 0x16, 0xf4, 0x84, 0x4c, 0x25, 0x19, 0x1a, 0x53, 0x63, 0xde, 0x5f, 0xfc,
-	0x80, 0xcf, 0x77, 0x81, 0x57, 0x4d, 0x30, 0xaa, 0x35, 0xa1, 0xb6, 0x59, 0xdf, 0xc0, 0xdb, 0xb6,
-	0xe4, 0xd0, 0x9c, 0x1a, 0xf3, 0xf7, 0x8b, 0x51, 0x6b, 0x6e, 0xb7, 0x80, 0x7e, 0x03, 0x84, 0x4f,
-	0xe8, 0x6c, 0x0d, 0x7a, 0x4a, 0x63, 0x7d, 0x02, 0x1f, 0xa3, 0xd8, 0x8d, 0x71, 0xb2, 0xdd, 0x44,
-	0x01, 0xf6, 0x96, 0xbf, 0x96, 0xd8, 0x1f, 0xbc, 0xb2, 0x3e, 0x80, 0x77, 0xde, 0x9f, 0x75, 0xb0,
-	0xc2, 0x31, 0xf6, 0x07, 0x86, 0xd5, 0x07, 0x20, 0xda, 0x06, 0x38, 0x8c, 0xb0, 0x8f, 0xfd, 0x81,
-	0x59, 0x9f, 0x63, 0x1c, 0xae, 0x97, 0x1b, 0xb7, 0xce, 0x5f, 0xff, 0xbc, 0x33, 0xc0, 0x2c, 0x63,
-	0xff, 0x5f, 0xd8, 0x29, 0x30, 0xfe, 0xae, 0x1a, 0x22, 0x67, 0xa7, 0x94, 0xe6, 0x90, 0xf1, 0x1c,
-	0xe5, 0x84, 0xaa, 0xa6, 0x48, 0x47, 0x69, 0x59, 0x88, 0x6b, 0x7f, 0xfc, 0xbd, 0x7b, 0x73, 0x63,
-	0x4e, 0x7e, 0x6b, 0x9d, 0xa7, 0x06, 0x46, 0x4d, 0xea, 0xe9, 0x81, 0x3b, 0xfb, 0xb6, 0x05, 0xf6,
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x8a, 0x9b, 0x40,
+	0x18, 0x80, 0xab, 0x25, 0xa5, 0x9d, 0xd2, 0x90, 0x0a, 0x85, 0x24, 0x94, 0x90, 0xe6, 0x94, 0xd3,
+	0x0c, 0xa6, 0xf4, 0x62, 0x0f, 0xc5, 0xea, 0xb4, 0x04, 0x92, 0x54, 0xd4, 0xe4, 0x50, 0x02, 0x62,
+	0xcc, 0x54, 0x84, 0x74, 0x46, 0x66, 0xc6, 0x40, 0x5e, 0x69, 0x1f, 0x65, 0x1f, 0x61, 0x1f, 0x61,
+	0x9f, 0x60, 0x8f, 0x8b, 0x33, 0xba, 0xe0, 0x21, 0xbb, 0xc7, 0xf1, 0xff, 0xe6, 0xfb, 0x3f, 0x19,
+	0xe0, 0xe6, 0x8c, 0xe5, 0x27, 0x82, 0xb2, 0x13, 0xab, 0x8e, 0x48, 0x90, 0xac, 0xe2, 0x85, 0xbc,
+	0x64, 0x84, 0x4a, 0xc2, 0xd1, 0xd9, 0x46, 0xbc, 0xa2, 0x49, 0x2a, 0x04, 0x91, 0xc9, 0xb1, 0x10,
+	0x19, 0x3b, 0x13, 0x7e, 0x49, 0x38, 0x11, 0x25, 0xa3, 0x82, 0xc0, 0x92, 0x33, 0xc9, 0xac, 0x89,
+	0x56, 0x40, 0xa5, 0x80, 0x5d, 0x05, 0x3c, 0xdb, 0xe3, 0xcf, 0xcd, 0x8a, 0xb4, 0x2c, 0x50, 0x4a,
+	0x29, 0x93, 0xa9, 0x2c, 0x18, 0x15, 0xfa, 0xf6, 0xb8, 0xb9, 0x8d, 0xd4, 0xe9, 0x50, 0xfd, 0x43,
+	0xc7, 0x8a, 0x2b, 0x40, 0xcf, 0x67, 0x0f, 0x06, 0x18, 0x85, 0x15, 0x75, 0xeb, 0x06, 0xbf, 0x4d,
+	0x08, 0x9b, 0x02, 0x6b, 0x0b, 0x7a, 0x42, 0xa6, 0x92, 0x0c, 0x8d, 0xa9, 0x31, 0xef, 0x2f, 0x7e,
+	0xc0, 0xe7, 0x5b, 0xe0, 0x55, 0x13, 0x8c, 0x6a, 0x4d, 0xa8, 0x6d, 0xd6, 0x37, 0xf0, 0xb6, 0xcd,
+	0x18, 0x9a, 0x53, 0x63, 0xfe, 0x7e, 0x31, 0x6a, 0xcd, 0x6d, 0x27, 0xf4, 0x1b, 0x20, 0x7c, 0x42,
+	0x67, 0x6b, 0xd0, 0x53, 0x1a, 0xeb, 0x13, 0xf8, 0x18, 0xc5, 0x6e, 0x8c, 0x93, 0xed, 0x26, 0x0a,
+	0xb0, 0xb7, 0xfc, 0xb5, 0xc4, 0xfe, 0xe0, 0x95, 0xf5, 0x01, 0xbc, 0xf3, 0xfe, 0xac, 0x83, 0x15,
+	0x8e, 0xb1, 0x3f, 0x30, 0xac, 0x3e, 0x00, 0xd1, 0x36, 0xc0, 0x61, 0x84, 0x7d, 0xec, 0x0f, 0xcc,
+	0xfa, 0x1c, 0xe3, 0x70, 0xbd, 0xdc, 0xb8, 0xf5, 0xfc, 0xf5, 0xcf, 0x3b, 0x03, 0xcc, 0x32, 0xf6,
+	0xff, 0x85, 0x7f, 0x0a, 0x8c, 0xbf, 0xab, 0x86, 0xc8, 0xd9, 0x29, 0xa5, 0x39, 0x64, 0x3c, 0x47,
+	0x39, 0xa1, 0xaa, 0x14, 0xe9, 0x51, 0x5a, 0x16, 0xe2, 0xda, 0x1b, 0x7f, 0xef, 0x7e, 0xb9, 0x31,
+	0x27, 0xbf, 0xb5, 0xce, 0x53, 0x0b, 0xa3, 0x66, 0xea, 0xe9, 0x85, 0x3b, 0xfb, 0xb6, 0x05, 0xf6,
 	0x0a, 0xd8, 0x77, 0x81, 0xfd, 0xce, 0xbe, 0x37, 0xbf, 0x68, 0xc0, 0x71, 0x14, 0xe1, 0x38, 0x5d,
-	0xc4, 0x71, 0x76, 0xf6, 0xe1, 0x8d, 0xaa, 0xf7, 0xf5, 0x31, 0x00, 0x00, 0xff, 0xff, 0x47, 0x3a,
-	0x54, 0xc6, 0x81, 0x02, 0x00, 0x00,
+	0xc4, 0x71, 0x76, 0xf6, 0xe1, 0x8d, 0xca, 0xfb, 0xfa, 0x18, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xd3,
+	0x2e, 0xc5, 0x81, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/securitycenter/v1/security_marks.pb.go b/googleapis/cloud/securitycenter/v1/security_marks.pb.go
index 592442e..c8c6e6f 100644
--- a/googleapis/cloud/securitycenter/v1/security_marks.pb.go
+++ b/googleapis/cloud/securitycenter/v1/security_marks.pb.go
@@ -101,24 +101,24 @@
 	0x14, 0x66, 0xa6, 0xb7, 0x17, 0x6e, 0x2e, 0x82, 0x0c, 0x2e, 0x6a, 0x91, 0x52, 0xbb, 0x2a, 0x08,
 	0x09, 0x63, 0x37, 0x35, 0xae, 0xb4, 0x88, 0x1b, 0x2d, 0x52, 0xa1, 0x0b, 0x29, 0x48, 0x9c, 0xc6,
 	0x10, 0x3a, 0x93, 0x94, 0x24, 0x53, 0xa8, 0x43, 0x5f, 0xc8, 0x27, 0x70, 0xe1, 0x13, 0xf8, 0x08,
-	0x3e, 0x42, 0xf1, 0x21, 0xa4, 0xc9, 0xf4, 0x67, 0x0a, 0xd6, 0xcd, 0xcc, 0xc9, 0x99, 0xef, 0xe7,
-	0x9c, 0x6f, 0x02, 0x5a, 0x4c, 0x4a, 0x16, 0x53, 0x14, 0xc5, 0x32, 0x1d, 0x22, 0x4d, 0xa3, 0x54,
+	0x3e, 0x42, 0xf1, 0x21, 0xa4, 0xc9, 0xf4, 0x67, 0x0a, 0xd6, 0xcd, 0xcc, 0xc9, 0xc9, 0xf7, 0x73,
+	0xce, 0x37, 0x03, 0x5a, 0x4c, 0x4a, 0x16, 0x53, 0x14, 0xc5, 0x32, 0x1d, 0x22, 0x4d, 0xa3, 0x54,
 	0x71, 0x33, 0x8d, 0xa8, 0x30, 0x54, 0xa1, 0x49, 0xb8, 0xea, 0x3c, 0x26, 0x44, 0x8d, 0x34, 0x1c,
-	0x2b, 0x69, 0x64, 0x50, 0x73, 0x24, 0x68, 0x49, 0xb0, 0x48, 0x82, 0x93, 0xb0, 0x7a, 0x98, 0x8b,
-	0x92, 0x31, 0x47, 0x8a, 0x6a, 0x99, 0xaa, 0x88, 0x3a, 0x6a, 0xf5, 0x68, 0xe3, 0x13, 0x11, 0x42,
-	0x1a, 0x62, 0xb8, 0x14, 0xb9, 0x70, 0xe3, 0xcb, 0x07, 0x7b, 0xf7, 0xb9, 0xdc, 0xed, 0xc2, 0x30,
-	0x08, 0xc0, 0x1f, 0x41, 0x12, 0x5a, 0xf1, 0xea, 0x5e, 0xf3, 0x5f, 0xcf, 0xd6, 0x41, 0x17, 0x94,
-	0xed, 0x34, 0x15, 0xbf, 0x5e, 0x6a, 0xfe, 0x3f, 0x6d, 0xc3, 0xdd, 0xe3, 0xc0, 0x82, 0x22, 0xb4,
-	0xcf, 0x2b, 0x61, 0xd4, 0xb4, 0xe7, 0x64, 0xaa, 0x6d, 0x00, 0xd6, 0xcd, 0x60, 0x1f, 0x94, 0x46,
-	0x74, 0x9a, 0x1b, 0x2e, 0xca, 0xe0, 0x00, 0x94, 0x27, 0x24, 0x4e, 0x69, 0xc5, 0xb7, 0x3d, 0x77,
-	0xc0, 0x7e, 0xdb, 0xc3, 0xef, 0xde, 0xfc, 0xe2, 0xcd, 0x03, 0x27, 0x5b, 0x9e, 0x6e, 0x1e, 0x32,
-	0xe6, 0x1a, 0x46, 0x32, 0x41, 0xc5, 0x8d, 0xce, 0xa4, 0x62, 0x44, 0xf0, 0x17, 0xb7, 0x38, 0xca,
-	0x36, 0x8f, 0x33, 0x44, 0xb4, 0xa6, 0x46, 0xa3, 0xcc, 0xbe, 0x67, 0xab, 0xf8, 0x1d, 0xb5, 0xbb,
-	0x93, 0xea, 0x72, 0xd6, 0x28, 0x73, 0xc5, 0x0c, 0x3d, 0x73, 0x31, 0xe4, 0x82, 0x69, 0x94, 0xe5,
-	0xd5, 0x96, 0xde, 0xe5, 0xa7, 0x07, 0x1a, 0x91, 0x4c, 0x7e, 0xc9, 0xef, 0xce, 0x7b, 0xb8, 0xc9,
-	0x11, 0x4c, 0xc6, 0x44, 0x30, 0x28, 0x15, 0x43, 0x8c, 0x0a, 0xfb, 0xcf, 0xd0, 0x7a, 0xd9, 0x9f,
-	0x2e, 0xd1, 0x79, 0xb1, 0xf3, 0xea, 0xd7, 0xae, 0x9d, 0x5c, 0xc7, 0x1a, 0x2e, 0xe3, 0xe9, 0x38,
+	0x2b, 0x69, 0x64, 0x50, 0x73, 0x24, 0x68, 0x49, 0xb0, 0x48, 0x82, 0x93, 0xb0, 0x7a, 0x94, 0x8b,
+	0x92, 0x31, 0x47, 0x44, 0x08, 0x69, 0x88, 0xe1, 0x52, 0xe4, 0xec, 0xea, 0xe1, 0xc6, 0xad, 0xa2,
+	0x5a, 0xa6, 0x2a, 0xa2, 0xee, 0xaa, 0xf1, 0xe5, 0x83, 0xbd, 0xfb, 0x5c, 0xee, 0x76, 0x61, 0x18,
+	0x04, 0xe0, 0x8f, 0x20, 0x09, 0xad, 0x78, 0x75, 0xaf, 0xf9, 0xaf, 0x67, 0xeb, 0xa0, 0x0b, 0xca,
+	0x76, 0x9a, 0x8a, 0x5f, 0x2f, 0x35, 0xff, 0x9f, 0xb6, 0xe1, 0xee, 0x71, 0x60, 0x41, 0x11, 0xda,
+	0xe7, 0x95, 0x30, 0x6a, 0xda, 0x73, 0x32, 0xd5, 0x36, 0x00, 0xeb, 0x66, 0xb0, 0x0f, 0x4a, 0x23,
+	0x3a, 0xcd, 0x0d, 0x17, 0x65, 0x70, 0x00, 0xca, 0x13, 0x12, 0xa7, 0xb4, 0xe2, 0xdb, 0x9e, 0x3b,
+	0x60, 0xbf, 0xed, 0xe1, 0x77, 0x6f, 0x7e, 0xf1, 0xe6, 0x81, 0x93, 0x2d, 0x4f, 0x37, 0x0f, 0x19,
+	0x73, 0x0d, 0x23, 0x99, 0xa0, 0xe2, 0x46, 0x67, 0x52, 0x31, 0x22, 0xf8, 0x8b, 0xcb, 0x04, 0x65,
+	0x9b, 0xc7, 0x19, 0x22, 0x5a, 0x53, 0xa3, 0x51, 0x66, 0xdf, 0xb3, 0x55, 0xfc, 0x8e, 0xda, 0xdd,
+	0x49, 0x75, 0x49, 0x6a, 0x94, 0xb9, 0x62, 0x86, 0x9e, 0xb9, 0x18, 0x72, 0xc1, 0x34, 0xca, 0xf2,
+	0x6a, 0x4b, 0xef, 0xf2, 0xd3, 0x03, 0x8d, 0x48, 0x26, 0xbf, 0xe4, 0x77, 0xe7, 0x3d, 0xdc, 0xe4,
+	0x08, 0x26, 0x63, 0x22, 0x18, 0x94, 0x8a, 0x21, 0x46, 0x85, 0xfd, 0x66, 0x68, 0xbd, 0xec, 0x4f,
+	0x3f, 0xd1, 0x79, 0xb1, 0xf3, 0xea, 0xd7, 0xae, 0x9d, 0x5c, 0xc7, 0x1a, 0x2e, 0xe3, 0xe9, 0x38,
 	0xc3, 0x7e, 0xf8, 0xb1, 0x04, 0x0c, 0x2c, 0x60, 0x50, 0x04, 0x0c, 0xfa, 0xe1, 0xdc, 0x3f, 0x76,
 	0x00, 0x8c, 0x2d, 0x02, 0xe3, 0x22, 0x04, 0xe3, 0x7e, 0xf8, 0xf4, 0xd7, 0x8e, 0xd7, 0xfa, 0x0e,
-	0x00, 0x00, 0xff, 0xff, 0x90, 0xea, 0xfc, 0x33, 0xe2, 0x02, 0x00, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xb0, 0x0b, 0xf6, 0x45, 0xe2, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/securitycenter/v1/securitycenter_service.pb.go b/googleapis/cloud/securitycenter/v1/securitycenter_service.pb.go
index 4f6625f..6e6478f 100644
--- a/googleapis/cloud/securitycenter/v1/securitycenter_service.pb.go
+++ b/googleapis/cloud/securitycenter/v1/securitycenter_service.pb.go
@@ -10,7 +10,7 @@
 
 	proto "github.com/golang/protobuf/proto"
 	duration "github.com/golang/protobuf/ptypes/duration"
-	_ "github.com/golang/protobuf/ptypes/empty"
+	empty "github.com/golang/protobuf/ptypes/empty"
 	_struct "github.com/golang/protobuf/ptypes/struct"
 	timestamp "github.com/golang/protobuf/ptypes/timestamp"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
@@ -71,7 +71,7 @@
 }
 
 func (ListAssetsResponse_ListAssetsResult_StateChange) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{12, 0, 0}
+	return fileDescriptor_dd84f222a6a48f30, []int{17, 0, 0}
 }
 
 // The change in state of the finding.
@@ -121,7 +121,7 @@
 }
 
 func (ListFindingsResponse_ListFindingsResult_StateChange) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{14, 0, 0}
+	return fileDescriptor_dd84f222a6a48f30, []int{19, 0, 0}
 }
 
 // Request message for creating a finding.
@@ -133,8 +133,8 @@
 	// It must be alphanumeric and less than or equal to 32 characters and
 	// greater than 0 characters in length.
 	FindingId string `protobuf:"bytes,2,opt,name=finding_id,json=findingId,proto3" json:"finding_id,omitempty"`
-	// Required. The Finding being created. The name and security_marks will be ignored as
-	// they are both output only fields on this resource.
+	// Required. The Finding being created. The name and security_marks will be
+	// ignored as they are both output only fields on this resource.
 	Finding              *Finding `protobuf:"bytes,3,opt,name=finding,proto3" json:"finding,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -187,13 +187,78 @@
 	return nil
 }
 
+// Request message for creating a notification config.
+type CreateNotificationConfigRequest struct {
+	// Required. Resource name of the new notification config's parent. Its format
+	// is "organizations/[organization_id]".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	// Unique identifier provided by the client within the parent scope.
+	// It must be between 1 and 128 characters, and contains alphanumeric
+	// characters, underscores or hyphens only.
+	ConfigId string `protobuf:"bytes,2,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"`
+	// Required. The notification config being created. The name and the service
+	// account will be ignored as they are both output only fields on this
+	// resource.
+	NotificationConfig   *NotificationConfig `protobuf:"bytes,3,opt,name=notification_config,json=notificationConfig,proto3" json:"notification_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *CreateNotificationConfigRequest) Reset()         { *m = CreateNotificationConfigRequest{} }
+func (m *CreateNotificationConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateNotificationConfigRequest) ProtoMessage()    {}
+func (*CreateNotificationConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{1}
+}
+
+func (m *CreateNotificationConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateNotificationConfigRequest.Unmarshal(m, b)
+}
+func (m *CreateNotificationConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateNotificationConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateNotificationConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateNotificationConfigRequest.Merge(m, src)
+}
+func (m *CreateNotificationConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateNotificationConfigRequest.Size(m)
+}
+func (m *CreateNotificationConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateNotificationConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateNotificationConfigRequest proto.InternalMessageInfo
+
+func (m *CreateNotificationConfigRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateNotificationConfigRequest) GetConfigId() string {
+	if m != nil {
+		return m.ConfigId
+	}
+	return ""
+}
+
+func (m *CreateNotificationConfigRequest) GetNotificationConfig() *NotificationConfig {
+	if m != nil {
+		return m.NotificationConfig
+	}
+	return nil
+}
+
 // Request message for creating a source.
 type CreateSourceRequest struct {
 	// Required. Resource name of the new source's parent. Its format should be
 	// "organizations/[organization_id]".
 	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
-	// Required. The Source being created, only the display_name and description will be
-	// used. All other fields will be ignored.
+	// Required. The Source being created, only the display_name and description
+	// will be used. All other fields will be ignored.
 	Source               *Source  `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -204,7 +269,7 @@
 func (m *CreateSourceRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateSourceRequest) ProtoMessage()    {}
 func (*CreateSourceRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{1}
+	return fileDescriptor_dd84f222a6a48f30, []int{2}
 }
 
 func (m *CreateSourceRequest) XXX_Unmarshal(b []byte) error {
@@ -239,10 +304,94 @@
 	return nil
 }
 
+// Request message for deleting a notification config.
+type DeleteNotificationConfigRequest struct {
+	// Required. Name of the notification config to delete. Its format is
+	// "organizations/[organization_id]/notificationConfigs/[config_id]".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteNotificationConfigRequest) Reset()         { *m = DeleteNotificationConfigRequest{} }
+func (m *DeleteNotificationConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteNotificationConfigRequest) ProtoMessage()    {}
+func (*DeleteNotificationConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{3}
+}
+
+func (m *DeleteNotificationConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteNotificationConfigRequest.Unmarshal(m, b)
+}
+func (m *DeleteNotificationConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteNotificationConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *DeleteNotificationConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteNotificationConfigRequest.Merge(m, src)
+}
+func (m *DeleteNotificationConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteNotificationConfigRequest.Size(m)
+}
+func (m *DeleteNotificationConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteNotificationConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteNotificationConfigRequest proto.InternalMessageInfo
+
+func (m *DeleteNotificationConfigRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for getting a notification config.
+type GetNotificationConfigRequest struct {
+	// Required. Name of the notification config to get. Its format is
+	// "organizations/[organization_id]/notificationConfigs/[config_id]".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetNotificationConfigRequest) Reset()         { *m = GetNotificationConfigRequest{} }
+func (m *GetNotificationConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*GetNotificationConfigRequest) ProtoMessage()    {}
+func (*GetNotificationConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{4}
+}
+
+func (m *GetNotificationConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetNotificationConfigRequest.Unmarshal(m, b)
+}
+func (m *GetNotificationConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetNotificationConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *GetNotificationConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetNotificationConfigRequest.Merge(m, src)
+}
+func (m *GetNotificationConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_GetNotificationConfigRequest.Size(m)
+}
+func (m *GetNotificationConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetNotificationConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetNotificationConfigRequest proto.InternalMessageInfo
+
+func (m *GetNotificationConfigRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
 // Request message for getting organization settings.
 type GetOrganizationSettingsRequest struct {
-	// Required. Name of the organization to get organization settings for. Its format is
-	// "organizations/[organization_id]/organizationSettings".
+	// Required. Name of the organization to get organization settings for. Its
+	// format is "organizations/[organization_id]/organizationSettings".
 	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -253,7 +402,7 @@
 func (m *GetOrganizationSettingsRequest) String() string { return proto.CompactTextString(m) }
 func (*GetOrganizationSettingsRequest) ProtoMessage()    {}
 func (*GetOrganizationSettingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{2}
+	return fileDescriptor_dd84f222a6a48f30, []int{5}
 }
 
 func (m *GetOrganizationSettingsRequest) XXX_Unmarshal(b []byte) error {
@@ -295,7 +444,7 @@
 func (m *GetSourceRequest) String() string { return proto.CompactTextString(m) }
 func (*GetSourceRequest) ProtoMessage()    {}
 func (*GetSourceRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{3}
+	return fileDescriptor_dd84f222a6a48f30, []int{6}
 }
 
 func (m *GetSourceRequest) XXX_Unmarshal(b []byte) error {
@@ -385,9 +534,9 @@
 	//
 	// For example, `resource_properties.size = 100` is a valid filter string.
 	Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
-	// Required. Expression that defines what assets fields to use for grouping. The string
-	// value should follow SQL syntax: comma separated list of fields. For
-	// example:
+	// Required. Expression that defines what assets fields to use for grouping.
+	// The string value should follow SQL syntax: comma separated list of fields.
+	// For example:
 	// "security_center_properties.resource_project,security_center_properties.project".
 	//
 	// The following fields are supported when compare_duration is not set:
@@ -453,7 +602,7 @@
 func (m *GroupAssetsRequest) String() string { return proto.CompactTextString(m) }
 func (*GroupAssetsRequest) ProtoMessage()    {}
 func (*GroupAssetsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{4}
+	return fileDescriptor_dd84f222a6a48f30, []int{7}
 }
 
 func (m *GroupAssetsRequest) XXX_Unmarshal(b []byte) error {
@@ -545,7 +694,7 @@
 func (m *GroupAssetsResponse) String() string { return proto.CompactTextString(m) }
 func (*GroupAssetsResponse) ProtoMessage()    {}
 func (*GroupAssetsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{5}
+	return fileDescriptor_dd84f222a6a48f30, []int{8}
 }
 
 func (m *GroupAssetsResponse) XXX_Unmarshal(b []byte) error {
@@ -645,9 +794,9 @@
 	//
 	// For example, `source_properties.size = 100` is a valid filter string.
 	Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
-	// Required. Expression that defines what assets fields to use for grouping (including
-	// `state_change`). The string value should follow SQL syntax: comma separated
-	// list of fields. For example: "parent,resource_name".
+	// Required. Expression that defines what assets fields to use for grouping
+	// (including `state_change`). The string value should follow SQL syntax:
+	// comma separated list of fields. For example: "parent,resource_name".
 	//
 	// The following fields are supported:
 	//
@@ -678,12 +827,18 @@
 	//
 	// Possible "state_change" values when compare_duration is specified:
 	//
-	// * "CHANGED":   indicates that the finding was present at the start of
-	//                  compare_duration, but changed its state at read_time.
-	// * "UNCHANGED": indicates that the finding was present at the start of
-	//                  compare_duration and did not change state at read_time.
-	// * "ADDED":     indicates that the finding was not present at the start
-	//                  of compare_duration, but was present at read_time.
+	// * "CHANGED":   indicates that the finding was present and matched the given
+	//                  filter at the start of compare_duration, but changed its
+	//                  state at read_time.
+	// * "UNCHANGED": indicates that the finding was present and matched the given
+	//                  filter at the start of compare_duration and did not change
+	//                  state at read_time.
+	// * "ADDED":     indicates that the finding did not match the given filter or
+	//                  was not present at the start of compare_duration, but was
+	//                  present at read_time.
+	// * "REMOVED":   indicates that the finding was present and matched the
+	//                  filter at the start of compare_duration, but did not match
+	//                  the filter at read_time.
 	//
 	// If compare_duration is not specified, then the only possible state_change
 	// is "UNUSED",  which will be the state_change set for all findings present
@@ -708,7 +863,7 @@
 func (m *GroupFindingsRequest) String() string { return proto.CompactTextString(m) }
 func (*GroupFindingsRequest) ProtoMessage()    {}
 func (*GroupFindingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{6}
+	return fileDescriptor_dd84f222a6a48f30, []int{9}
 }
 
 func (m *GroupFindingsRequest) XXX_Unmarshal(b []byte) error {
@@ -800,7 +955,7 @@
 func (m *GroupFindingsResponse) String() string { return proto.CompactTextString(m) }
 func (*GroupFindingsResponse) ProtoMessage()    {}
 func (*GroupFindingsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{7}
+	return fileDescriptor_dd84f222a6a48f30, []int{10}
 }
 
 func (m *GroupFindingsResponse) XXX_Unmarshal(b []byte) error {
@@ -864,7 +1019,7 @@
 func (m *GroupResult) String() string { return proto.CompactTextString(m) }
 func (*GroupResult) ProtoMessage()    {}
 func (*GroupResult) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{8}
+	return fileDescriptor_dd84f222a6a48f30, []int{11}
 }
 
 func (m *GroupResult) XXX_Unmarshal(b []byte) error {
@@ -899,10 +1054,124 @@
 	return 0
 }
 
+// Request message for listing notification configs.
+type ListNotificationConfigsRequest struct {
+	// Required. Name of the organization to list notification configs.
+	// Its format is "organizations/[organization_id]".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// The value returned by the last `ListNotificationConfigsResponse`; indicates
+	// that this is a continuation of a prior `ListNotificationConfigs` call, and
+	// that the system should return the next page of data.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// The maximum number of results to return in a single response. Default is
+	// 10, minimum is 1, maximum is 1000.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListNotificationConfigsRequest) Reset()         { *m = ListNotificationConfigsRequest{} }
+func (m *ListNotificationConfigsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListNotificationConfigsRequest) ProtoMessage()    {}
+func (*ListNotificationConfigsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{12}
+}
+
+func (m *ListNotificationConfigsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNotificationConfigsRequest.Unmarshal(m, b)
+}
+func (m *ListNotificationConfigsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNotificationConfigsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListNotificationConfigsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNotificationConfigsRequest.Merge(m, src)
+}
+func (m *ListNotificationConfigsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListNotificationConfigsRequest.Size(m)
+}
+func (m *ListNotificationConfigsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNotificationConfigsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListNotificationConfigsRequest proto.InternalMessageInfo
+
+func (m *ListNotificationConfigsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListNotificationConfigsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListNotificationConfigsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for listing notification configs.
+type ListNotificationConfigsResponse struct {
+	// Notification configs belonging to the requested parent.
+	NotificationConfigs []*NotificationConfig `protobuf:"bytes,1,rep,name=notification_configs,json=notificationConfigs,proto3" json:"notification_configs,omitempty"`
+	// Token to retrieve the next page of results, or empty if there are no more
+	// results.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListNotificationConfigsResponse) Reset()         { *m = ListNotificationConfigsResponse{} }
+func (m *ListNotificationConfigsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListNotificationConfigsResponse) ProtoMessage()    {}
+func (*ListNotificationConfigsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{13}
+}
+
+func (m *ListNotificationConfigsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNotificationConfigsResponse.Unmarshal(m, b)
+}
+func (m *ListNotificationConfigsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNotificationConfigsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListNotificationConfigsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNotificationConfigsResponse.Merge(m, src)
+}
+func (m *ListNotificationConfigsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListNotificationConfigsResponse.Size(m)
+}
+func (m *ListNotificationConfigsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNotificationConfigsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListNotificationConfigsResponse proto.InternalMessageInfo
+
+func (m *ListNotificationConfigsResponse) GetNotificationConfigs() []*NotificationConfig {
+	if m != nil {
+		return m.NotificationConfigs
+	}
+	return nil
+}
+
+func (m *ListNotificationConfigsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
 // Request message for listing sources.
 type ListSourcesRequest struct {
-	// Required. Resource name of the parent of sources to list. Its format should be
-	// "organizations/[organization_id]".
+	// Required. Resource name of the parent of sources to list. Its format should
+	// be "organizations/[organization_id]".
 	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
 	// The value returned by the last `ListSourcesResponse`; indicates
 	// that this is a continuation of a prior `ListSources` call, and
@@ -920,7 +1189,7 @@
 func (m *ListSourcesRequest) String() string { return proto.CompactTextString(m) }
 func (*ListSourcesRequest) ProtoMessage()    {}
 func (*ListSourcesRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{9}
+	return fileDescriptor_dd84f222a6a48f30, []int{14}
 }
 
 func (m *ListSourcesRequest) XXX_Unmarshal(b []byte) error {
@@ -978,7 +1247,7 @@
 func (m *ListSourcesResponse) String() string { return proto.CompactTextString(m) }
 func (*ListSourcesResponse) ProtoMessage()    {}
 func (*ListSourcesResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{10}
+	return fileDescriptor_dd84f222a6a48f30, []int{15}
 }
 
 func (m *ListSourcesResponse) XXX_Unmarshal(b []byte) error {
@@ -1127,9 +1396,8 @@
 	// is "UNUSED",  which will be the state_change set for all assets present at
 	// read_time.
 	CompareDuration *duration.Duration `protobuf:"bytes,5,opt,name=compare_duration,json=compareDuration,proto3" json:"compare_duration,omitempty"`
-	// Optional. A field mask to specify the ListAssetsResult fields to be listed in the
-	// response.
-	// An empty field mask will list all fields.
+	// Optional. A field mask to specify the ListAssetsResult fields to be listed
+	// in the response. An empty field mask will list all fields.
 	FieldMask *field_mask.FieldMask `protobuf:"bytes,7,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
 	// The value returned by the last `ListAssetsResponse`; indicates
 	// that this is a continuation of a prior `ListAssets` call, and
@@ -1147,7 +1415,7 @@
 func (m *ListAssetsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListAssetsRequest) ProtoMessage()    {}
 func (*ListAssetsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{11}
+	return fileDescriptor_dd84f222a6a48f30, []int{16}
 }
 
 func (m *ListAssetsRequest) XXX_Unmarshal(b []byte) error {
@@ -1244,7 +1512,7 @@
 func (m *ListAssetsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListAssetsResponse) ProtoMessage()    {}
 func (*ListAssetsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{12}
+	return fileDescriptor_dd84f222a6a48f30, []int{17}
 }
 
 func (m *ListAssetsResponse) XXX_Unmarshal(b []byte) error {
@@ -1308,7 +1576,7 @@
 func (m *ListAssetsResponse_ListAssetsResult) String() string { return proto.CompactTextString(m) }
 func (*ListAssetsResponse_ListAssetsResult) ProtoMessage()    {}
 func (*ListAssetsResponse_ListAssetsResult) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{12, 0}
+	return fileDescriptor_dd84f222a6a48f30, []int{17, 0}
 }
 
 func (m *ListAssetsResponse_ListAssetsResult) XXX_Unmarshal(b []byte) error {
@@ -1432,19 +1700,25 @@
 	//
 	// Possible "state_change" values when compare_duration is specified:
 	//
-	// * "CHANGED":   indicates that the finding was present at the start of
-	//                  compare_duration, but changed its state at read_time.
-	// * "UNCHANGED": indicates that the finding was present at the start of
-	//                  compare_duration and did not change state at read_time.
-	// * "ADDED":     indicates that the finding was not present at the start
-	//                  of compare_duration, but was present at read_time.
+	// * "CHANGED":   indicates that the finding was present and matched the given
+	//                  filter at the start of compare_duration, but changed its
+	//                  state at read_time.
+	// * "UNCHANGED": indicates that the finding was present and matched the given
+	//                  filter at the start of compare_duration and did not change
+	//                  state at read_time.
+	// * "ADDED":     indicates that the finding did not match the given filter or
+	//                  was not present at the start of compare_duration, but was
+	//                  present at read_time.
+	// * "REMOVED":   indicates that the finding was present and matched the
+	//                  filter at the start of compare_duration, but did not match
+	//                  the filter at read_time.
 	//
 	// If compare_duration is not specified, then the only possible state_change
 	// is "UNUSED", which will be the state_change set for all findings present at
 	// read_time.
 	CompareDuration *duration.Duration `protobuf:"bytes,5,opt,name=compare_duration,json=compareDuration,proto3" json:"compare_duration,omitempty"`
-	// Optional. A field mask to specify the Finding fields to be listed in the response.
-	// An empty field mask will list all fields.
+	// Optional. A field mask to specify the Finding fields to be listed in the
+	// response. An empty field mask will list all fields.
 	FieldMask *field_mask.FieldMask `protobuf:"bytes,7,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
 	// The value returned by the last `ListFindingsResponse`; indicates
 	// that this is a continuation of a prior `ListFindings` call, and
@@ -1462,7 +1736,7 @@
 func (m *ListFindingsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListFindingsRequest) ProtoMessage()    {}
 func (*ListFindingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{13}
+	return fileDescriptor_dd84f222a6a48f30, []int{18}
 }
 
 func (m *ListFindingsRequest) XXX_Unmarshal(b []byte) error {
@@ -1559,7 +1833,7 @@
 func (m *ListFindingsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListFindingsResponse) ProtoMessage()    {}
 func (*ListFindingsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{14}
+	return fileDescriptor_dd84f222a6a48f30, []int{19}
 }
 
 func (m *ListFindingsResponse) XXX_Unmarshal(b []byte) error {
@@ -1627,7 +1901,7 @@
 func (m *ListFindingsResponse_ListFindingsResult) String() string { return proto.CompactTextString(m) }
 func (*ListFindingsResponse_ListFindingsResult) ProtoMessage()    {}
 func (*ListFindingsResponse_ListFindingsResult) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{14, 0}
+	return fileDescriptor_dd84f222a6a48f30, []int{19, 0}
 }
 
 func (m *ListFindingsResponse_ListFindingsResult) XXX_Unmarshal(b []byte) error {
@@ -1696,7 +1970,7 @@
 }
 func (*ListFindingsResponse_ListFindingsResult_Resource) ProtoMessage() {}
 func (*ListFindingsResponse_ListFindingsResult_Resource) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{14, 0, 0}
+	return fileDescriptor_dd84f222a6a48f30, []int{19, 0, 0}
 }
 
 func (m *ListFindingsResponse_ListFindingsResult_Resource) XXX_Unmarshal(b []byte) error {
@@ -1772,7 +2046,7 @@
 func (m *SetFindingStateRequest) String() string { return proto.CompactTextString(m) }
 func (*SetFindingStateRequest) ProtoMessage()    {}
 func (*SetFindingStateRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{15}
+	return fileDescriptor_dd84f222a6a48f30, []int{20}
 }
 
 func (m *SetFindingStateRequest) XXX_Unmarshal(b []byte) error {
@@ -1816,8 +2090,8 @@
 
 // Request message for running asset discovery for an organization.
 type RunAssetDiscoveryRequest struct {
-	// Required. Name of the organization to run asset discovery for. Its format is
-	// "organizations/[organization_id]".
+	// Required. Name of the organization to run asset discovery for. Its format
+	// is "organizations/[organization_id]".
 	Parent               string   `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -1828,7 +2102,7 @@
 func (m *RunAssetDiscoveryRequest) String() string { return proto.CompactTextString(m) }
 func (*RunAssetDiscoveryRequest) ProtoMessage()    {}
 func (*RunAssetDiscoveryRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{16}
+	return fileDescriptor_dd84f222a6a48f30, []int{21}
 }
 
 func (m *RunAssetDiscoveryRequest) XXX_Unmarshal(b []byte) error {
@@ -1858,8 +2132,8 @@
 
 // Request message for updating or creating a finding.
 type UpdateFindingRequest struct {
-	// Required. The finding resource to update or create if it does not already exist.
-	// parent, security_marks, and update_time will be ignored.
+	// Required. The finding resource to update or create if it does not already
+	// exist. parent, security_marks, and update_time will be ignored.
 	//
 	// In the case of creation, the finding id portion of the name must be
 	// alphanumeric and less than or equal to 32 characters and greater than 0
@@ -1882,7 +2156,7 @@
 func (m *UpdateFindingRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateFindingRequest) ProtoMessage()    {}
 func (*UpdateFindingRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{17}
+	return fileDescriptor_dd84f222a6a48f30, []int{22}
 }
 
 func (m *UpdateFindingRequest) XXX_Unmarshal(b []byte) error {
@@ -1917,6 +2191,58 @@
 	return nil
 }
 
+// Request message for updating a notification config.
+type UpdateNotificationConfigRequest struct {
+	// Required. The notification config to update.
+	NotificationConfig *NotificationConfig `protobuf:"bytes,1,opt,name=notification_config,json=notificationConfig,proto3" json:"notification_config,omitempty"`
+	// The FieldMask to use when updating the notification config.
+	//
+	// If empty all mutable fields will be updated.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateNotificationConfigRequest) Reset()         { *m = UpdateNotificationConfigRequest{} }
+func (m *UpdateNotificationConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateNotificationConfigRequest) ProtoMessage()    {}
+func (*UpdateNotificationConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd84f222a6a48f30, []int{23}
+}
+
+func (m *UpdateNotificationConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateNotificationConfigRequest.Unmarshal(m, b)
+}
+func (m *UpdateNotificationConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateNotificationConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *UpdateNotificationConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateNotificationConfigRequest.Merge(m, src)
+}
+func (m *UpdateNotificationConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateNotificationConfigRequest.Size(m)
+}
+func (m *UpdateNotificationConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateNotificationConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateNotificationConfigRequest proto.InternalMessageInfo
+
+func (m *UpdateNotificationConfigRequest) GetNotificationConfig() *NotificationConfig {
+	if m != nil {
+		return m.NotificationConfig
+	}
+	return nil
+}
+
+func (m *UpdateNotificationConfigRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
 // Request message for updating an organization's settings.
 type UpdateOrganizationSettingsRequest struct {
 	// Required. The organization settings resource to update.
@@ -1934,7 +2260,7 @@
 func (m *UpdateOrganizationSettingsRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateOrganizationSettingsRequest) ProtoMessage()    {}
 func (*UpdateOrganizationSettingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{18}
+	return fileDescriptor_dd84f222a6a48f30, []int{24}
 }
 
 func (m *UpdateOrganizationSettingsRequest) XXX_Unmarshal(b []byte) error {
@@ -1986,7 +2312,7 @@
 func (m *UpdateSourceRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateSourceRequest) ProtoMessage()    {}
 func (*UpdateSourceRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{19}
+	return fileDescriptor_dd84f222a6a48f30, []int{25}
 }
 
 func (m *UpdateSourceRequest) XXX_Unmarshal(b []byte) error {
@@ -2044,7 +2370,7 @@
 func (m *UpdateSecurityMarksRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateSecurityMarksRequest) ProtoMessage()    {}
 func (*UpdateSecurityMarksRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd84f222a6a48f30, []int{20}
+	return fileDescriptor_dd84f222a6a48f30, []int{26}
 }
 
 func (m *UpdateSecurityMarksRequest) XXX_Unmarshal(b []byte) error {
@@ -2090,7 +2416,10 @@
 	proto.RegisterEnum("google.cloud.securitycenter.v1.ListAssetsResponse_ListAssetsResult_StateChange", ListAssetsResponse_ListAssetsResult_StateChange_name, ListAssetsResponse_ListAssetsResult_StateChange_value)
 	proto.RegisterEnum("google.cloud.securitycenter.v1.ListFindingsResponse_ListFindingsResult_StateChange", ListFindingsResponse_ListFindingsResult_StateChange_name, ListFindingsResponse_ListFindingsResult_StateChange_value)
 	proto.RegisterType((*CreateFindingRequest)(nil), "google.cloud.securitycenter.v1.CreateFindingRequest")
+	proto.RegisterType((*CreateNotificationConfigRequest)(nil), "google.cloud.securitycenter.v1.CreateNotificationConfigRequest")
 	proto.RegisterType((*CreateSourceRequest)(nil), "google.cloud.securitycenter.v1.CreateSourceRequest")
+	proto.RegisterType((*DeleteNotificationConfigRequest)(nil), "google.cloud.securitycenter.v1.DeleteNotificationConfigRequest")
+	proto.RegisterType((*GetNotificationConfigRequest)(nil), "google.cloud.securitycenter.v1.GetNotificationConfigRequest")
 	proto.RegisterType((*GetOrganizationSettingsRequest)(nil), "google.cloud.securitycenter.v1.GetOrganizationSettingsRequest")
 	proto.RegisterType((*GetSourceRequest)(nil), "google.cloud.securitycenter.v1.GetSourceRequest")
 	proto.RegisterType((*GroupAssetsRequest)(nil), "google.cloud.securitycenter.v1.GroupAssetsRequest")
@@ -2099,6 +2428,8 @@
 	proto.RegisterType((*GroupFindingsResponse)(nil), "google.cloud.securitycenter.v1.GroupFindingsResponse")
 	proto.RegisterType((*GroupResult)(nil), "google.cloud.securitycenter.v1.GroupResult")
 	proto.RegisterMapType((map[string]*_struct.Value)(nil), "google.cloud.securitycenter.v1.GroupResult.PropertiesEntry")
+	proto.RegisterType((*ListNotificationConfigsRequest)(nil), "google.cloud.securitycenter.v1.ListNotificationConfigsRequest")
+	proto.RegisterType((*ListNotificationConfigsResponse)(nil), "google.cloud.securitycenter.v1.ListNotificationConfigsResponse")
 	proto.RegisterType((*ListSourcesRequest)(nil), "google.cloud.securitycenter.v1.ListSourcesRequest")
 	proto.RegisterType((*ListSourcesResponse)(nil), "google.cloud.securitycenter.v1.ListSourcesResponse")
 	proto.RegisterType((*ListAssetsRequest)(nil), "google.cloud.securitycenter.v1.ListAssetsRequest")
@@ -2111,6 +2442,7 @@
 	proto.RegisterType((*SetFindingStateRequest)(nil), "google.cloud.securitycenter.v1.SetFindingStateRequest")
 	proto.RegisterType((*RunAssetDiscoveryRequest)(nil), "google.cloud.securitycenter.v1.RunAssetDiscoveryRequest")
 	proto.RegisterType((*UpdateFindingRequest)(nil), "google.cloud.securitycenter.v1.UpdateFindingRequest")
+	proto.RegisterType((*UpdateNotificationConfigRequest)(nil), "google.cloud.securitycenter.v1.UpdateNotificationConfigRequest")
 	proto.RegisterType((*UpdateOrganizationSettingsRequest)(nil), "google.cloud.securitycenter.v1.UpdateOrganizationSettingsRequest")
 	proto.RegisterType((*UpdateSourceRequest)(nil), "google.cloud.securitycenter.v1.UpdateSourceRequest")
 	proto.RegisterType((*UpdateSecurityMarksRequest)(nil), "google.cloud.securitycenter.v1.UpdateSecurityMarksRequest")
@@ -2121,157 +2453,179 @@
 }
 
 var fileDescriptor_dd84f222a6a48f30 = []byte{
-	// 2398 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7,
-	0x15, 0xcf, 0x90, 0xfa, 0x7c, 0x94, 0x6c, 0x79, 0x24, 0x39, 0x32, 0x53, 0x39, 0xf2, 0xc6, 0x76,
-	0x14, 0x5b, 0x26, 0x2d, 0xca, 0xaa, 0x55, 0x0a, 0x36, 0xbc, 0x16, 0x65, 0xc5, 0xa8, 0x2d, 0x2b,
-	0xab, 0x0f, 0xa0, 0x89, 0x1b, 0x62, 0x4d, 0x8e, 0xe8, 0xad, 0xc8, 0x5d, 0x76, 0x77, 0x28, 0x57,
-	0x4e, 0x8d, 0x02, 0xb9, 0x14, 0xbd, 0xf4, 0x62, 0xa0, 0x2d, 0x5a, 0xb4, 0x28, 0x7a, 0x2c, 0xd2,
-	0x43, 0xf3, 0x27, 0x14, 0x3d, 0x04, 0x46, 0x8b, 0x04, 0xcd, 0xa1, 0x28, 0x4f, 0x39, 0xb4, 0x87,
-	0x16, 0x45, 0x7b, 0xef, 0xa9, 0xd8, 0xf9, 0x20, 0x77, 0x57, 0x2b, 0xee, 0x52, 0x96, 0x6b, 0xa0,
-	0xc8, 0x8d, 0x33, 0xf3, 0xde, 0x9b, 0xf7, 0x9b, 0x79, 0x1f, 0xf3, 0x1e, 0x17, 0x16, 0x2b, 0x96,
-	0x55, 0xa9, 0x92, 0x6c, 0xa9, 0x6a, 0x35, 0xca, 0x59, 0x87, 0x94, 0x1a, 0xb6, 0x41, 0xf7, 0x4a,
-	0xc4, 0xa4, 0xc4, 0xce, 0xee, 0xce, 0x06, 0x66, 0x8a, 0x0e, 0xb1, 0x77, 0x8d, 0x12, 0xc9, 0xd4,
-	0x6d, 0x8b, 0x5a, 0xf8, 0x34, 0x67, 0xce, 0x30, 0xe6, 0x8c, 0x9f, 0x34, 0xb3, 0x3b, 0x9b, 0x56,
-	0x23, 0x84, 0xdb, 0x0d, 0xb3, 0xa8, 0x3b, 0x0e, 0xa1, 0xc5, 0xb2, 0xe1, 0x94, 0xac, 0x5d, 0x62,
-	0xef, 0x15, 0x6d, 0xe2, 0xd4, 0x2d, 0xd3, 0x11, 0x5b, 0xa4, 0xbf, 0x22, 0x44, 0xe8, 0x75, 0x23,
-	0xab, 0x9b, 0xa6, 0x45, 0x75, 0x6a, 0x58, 0xa6, 0x23, 0x56, 0x5f, 0xf5, 0xac, 0x96, 0xaa, 0x06,
-	0x31, 0xa9, 0x58, 0x78, 0xdd, 0xb3, 0xb0, 0x6d, 0x90, 0x6a, 0xb9, 0xf8, 0x80, 0x3c, 0xd4, 0x77,
-	0x0d, 0xcb, 0x16, 0x04, 0xa7, 0x3c, 0x04, 0x36, 0x71, 0xac, 0x86, 0x2d, 0x51, 0xa5, 0x2f, 0x44,
-	0x68, 0xcd, 0x34, 0x16, 0xb4, 0x33, 0x11, 0xb4, 0xdb, 0x86, 0x59, 0x36, 0xcc, 0x8a, 0xa0, 0xce,
-	0x47, 0x50, 0x5b, 0x76, 0x45, 0x37, 0x8d, 0xc7, 0x0c, 0x62, 0xd1, 0x21, 0x94, 0x1a, 0x66, 0x45,
-	0x42, 0x9d, 0x8b, 0x79, 0x51, 0xc5, 0x9a, 0x6e, 0xef, 0x48, 0xa6, 0x8b, 0x51, 0x4c, 0x5e, 0xdc,
-	0xe2, 0x36, 0xb3, 0x86, 0x5e, 0x73, 0xd7, 0x0c, 0xbd, 0x56, 0xac, 0x5b, 0x55, 0xa3, 0xb4, 0x27,
-	0xd6, 0xd3, 0xfe, 0x75, 0xdf, 0xda, 0x1b, 0x62, 0xad, 0x6a, 0x99, 0x15, 0xbb, 0x61, 0x9a, 0x86,
-	0x59, 0xc9, 0x5a, 0x75, 0x62, 0xfb, 0x6e, 0x4b, 0x6e, 0xc0, 0x46, 0x0f, 0x1a, 0xdb, 0xd9, 0x72,
-	0x83, 0x13, 0x88, 0xf5, 0xd7, 0x82, 0xeb, 0xa4, 0x56, 0xa7, 0x72, 0x87, 0xa9, 0xe0, 0x22, 0xbf,
-	0xd6, 0x9a, 0xee, 0xec, 0x04, 0x4c, 0xa5, 0x45, 0xe1, 0x50, 0xbb, 0x51, 0x0a, 0x5a, 0x44, 0x6b,
-	0x95, 0x1a, 0x35, 0xe2, 0x50, 0xbd, 0x56, 0xe7, 0x04, 0xca, 0x27, 0x08, 0xc6, 0x96, 0x6c, 0xa2,
-	0x53, 0x72, 0x8b, 0x5f, 0x9a, 0x46, 0xbe, 0xdd, 0x20, 0x0e, 0xc5, 0x05, 0xe8, 0xab, 0xeb, 0x36,
-	0x31, 0xe9, 0x04, 0x9a, 0x42, 0xd3, 0x83, 0x37, 0x67, 0xbe, 0x50, 0x13, 0xff, 0x51, 0xcf, 0xc3,
-	0xd9, 0x80, 0xc1, 0xf3, 0x0d, 0xf4, 0xba, 0xe1, 0x64, 0x4a, 0x56, 0x2d, 0xbb, 0xce, 0xce, 0x56,
-	0x13, 0xbc, 0x58, 0x01, 0x10, 0xc6, 0x50, 0x34, 0xca, 0x13, 0x09, 0x26, 0x29, 0xf9, 0x85, 0x9a,
-	0xd0, 0x06, 0xc5, 0xf4, 0xed, 0x32, 0xbe, 0x05, 0xfd, 0x62, 0x30, 0x91, 0x9c, 0x42, 0xd3, 0xa9,
-	0xdc, 0x9b, 0x99, 0xce, 0x1e, 0x96, 0x11, 0xaa, 0x72, 0x49, 0x92, 0x59, 0xf9, 0x08, 0xc1, 0x28,
-	0x87, 0x22, 0x94, 0x10, 0x48, 0xd6, 0x02, 0x48, 0x16, 0x18, 0x92, 0x1c, 0x5c, 0x66, 0xe2, 0xa5,
-	0x1b, 0xd4, 0x74, 0x53, 0xaf, 0xec, 0xc7, 0x73, 0xcf, 0x63, 0x9c, 0x2d, 0x54, 0x4b, 0xd0, 0xc7,
-	0x99, 0x18, 0xa2, 0x54, 0xee, 0x7c, 0x94, 0xc2, 0x5c, 0x21, 0xae, 0xaf, 0x60, 0x55, 0xea, 0x70,
-	0x7a, 0x85, 0x50, 0xaf, 0xfc, 0x75, 0x61, 0xfb, 0x52, 0xf1, 0x55, 0xe8, 0x31, 0xf5, 0x1a, 0x11,
-	0x6a, 0xe7, 0x99, 0xda, 0x57, 0x20, 0xd7, 0xf9, 0x02, 0x42, 0x05, 0x32, 0x39, 0xca, 0x06, 0x8c,
-	0xac, 0x10, 0xea, 0x3f, 0x9c, 0x1b, 0xbe, 0x3d, 0xba, 0xbb, 0x64, 0x2e, 0xf5, 0x2f, 0x09, 0xc0,
-	0x2b, 0xb6, 0xd5, 0xa8, 0xab, 0x6e, 0x84, 0x70, 0x5e, 0xdc, 0xa9, 0x9f, 0x84, 0xbe, 0x6d, 0xa3,
-	0x4a, 0x89, 0xcd, 0xed, 0x48, 0x13, 0x23, 0x7c, 0x1a, 0x06, 0x2a, 0xee, 0xfe, 0xc5, 0x07, 0x7b,
-	0xcc, 0x80, 0x84, 0x85, 0xf5, 0xb3, 0xc9, 0x9b, 0x7b, 0xb8, 0x00, 0x23, 0x25, 0xab, 0xe6, 0x0a,
-	0x29, 0x4a, 0xd7, 0x9b, 0xe8, 0x61, 0xf7, 0x76, 0x4a, 0xde, 0x9b, 0x74, 0x8f, 0x4c, 0x41, 0x10,
-	0x68, 0xc7, 0x05, 0x8b, 0x9c, 0xc0, 0x57, 0x61, 0xd0, 0x26, 0x7a, 0xb9, 0xe8, 0x3a, 0xd0, 0x44,
-	0x2f, 0x63, 0x4f, 0xef, 0x63, 0xdf, 0x90, 0xde, 0xa5, 0x0d, 0xb8, 0xc4, 0xee, 0x10, 0x4f, 0x02,
-	0xd4, 0xf5, 0x0a, 0x29, 0x52, 0x6b, 0x87, 0x98, 0x13, 0xfd, 0x4c, 0xf5, 0x41, 0x77, 0x66, 0xc3,
-	0x9d, 0xc0, 0xaf, 0x01, 0x1b, 0x14, 0x1d, 0xe3, 0x31, 0x99, 0x18, 0x98, 0x42, 0xd3, 0xbd, 0xda,
-	0x80, 0x3b, 0xb1, 0x6e, 0x3c, 0x26, 0xca, 0x3f, 0x11, 0x8c, 0xfa, 0xce, 0x96, 0x67, 0x09, 0xbc,
-	0x09, 0x23, 0x12, 0xb2, 0x9b, 0x3a, 0x1a, 0x55, 0xea, 0x4c, 0xa0, 0xa9, 0xe4, 0x74, 0x2a, 0x77,
-	0x31, 0xca, 0x14, 0x99, 0x38, 0x8d, 0xf1, 0x68, 0xc7, 0xc4, 0x11, 0xf1, 0xa1, 0xe3, 0xc7, 0x98,
-	0xe8, 0x02, 0xe3, 0x79, 0x38, 0x6e, 0x92, 0xef, 0xd0, 0xa2, 0x07, 0x28, 0xbb, 0x09, 0x6d, 0xd8,
-	0x9d, 0x5e, 0x6b, 0x81, 0x9d, 0x04, 0xa0, 0x16, 0xd5, 0xab, 0x1c, 0x6d, 0x0f, 0x43, 0x3b, 0xc8,
-	0x66, 0x18, 0xdc, 0x4f, 0x13, 0x30, 0xc6, 0xf4, 0x13, 0x0e, 0xee, 0x1c, 0x6d, 0x30, 0x3a, 0xac,
-	0x01, 0xf9, 0x8e, 0xa5, 0xa7, 0x8b, 0x63, 0x09, 0xb3, 0xbc, 0xde, 0xae, 0x2d, 0xef, 0x79, 0x0c,
-	0xe8, 0x5f, 0x08, 0xc6, 0x03, 0x27, 0xfa, 0xff, 0x6d, 0x42, 0x7f, 0x46, 0x90, 0xf2, 0xe8, 0x87,
-	0xdf, 0x03, 0xa8, 0xdb, 0x6e, 0x4e, 0xa6, 0x06, 0x91, 0x00, 0x17, 0xbb, 0x00, 0x98, 0x59, 0x6b,
-	0x71, 0x2f, 0x9b, 0xd4, 0xde, 0xd3, 0x3c, 0xe2, 0xf0, 0x18, 0xf4, 0x96, 0xac, 0x86, 0x49, 0x19,
-	0xd0, 0xa4, 0xc6, 0x07, 0xe9, 0x4d, 0x38, 0x1e, 0x60, 0xc2, 0x23, 0x90, 0xdc, 0x21, 0x7b, 0xdc,
-	0x78, 0x35, 0xf7, 0x27, 0x9e, 0x81, 0xde, 0x5d, 0xbd, 0xda, 0x90, 0x67, 0x74, 0x72, 0xdf, 0x19,
-	0x6d, 0xb9, 0xab, 0x1a, 0x27, 0xca, 0x27, 0x16, 0x90, 0xf2, 0x2b, 0x04, 0xf8, 0x8e, 0xe1, 0x88,
-	0xf8, 0xfd, 0x02, 0xe3, 0xac, 0xdf, 0xde, 0x12, 0x1d, 0xed, 0xad, 0x3f, 0x60, 0x6f, 0xdf, 0x83,
-	0x51, 0x9f, 0x8e, 0xc2, 0xd8, 0x6e, 0x40, 0x3f, 0xd7, 0x43, 0x5e, 0x41, 0xcc, 0x8c, 0xa9, 0x49,
-	0xb6, 0x30, 0xf3, 0x48, 0x84, 0x98, 0x87, 0xf2, 0x34, 0x09, 0x27, 0x5c, 0x0d, 0x5e, 0x56, 0x32,
-	0x3a, 0x05, 0x03, 0x96, 0x5d, 0x26, 0x76, 0x2b, 0x96, 0x68, 0xfd, 0x6c, 0xfc, 0xf2, 0xc3, 0xc8,
-	0x75, 0xf7, 0x29, 0x26, 0x1f, 0x8f, 0xec, 0xe2, 0xc2, 0xf6, 0xbf, 0xe5, 0x92, 0xdc, 0xd5, 0x9d,
-	0x1d, 0x37, 0x06, 0x22, 0xf7, 0x99, 0x26, 0xc6, 0x01, 0xb3, 0x18, 0xe8, 0x68, 0x16, 0x83, 0x01,
-	0xb3, 0xf8, 0x61, 0x0f, 0xb7, 0xdd, 0x40, 0x1a, 0x73, 0x60, 0xb4, 0x6a, 0x38, 0x94, 0x57, 0x43,
-	0x4e, 0x20, 0x0c, 0x2d, 0x45, 0x99, 0xc8, 0x7e, 0x81, 0xfe, 0x29, 0x37, 0x3c, 0x9d, 0xa8, 0x06,
-	0x66, 0x5e, 0x7a, 0x84, 0x4a, 0x7f, 0x98, 0x80, 0x91, 0xa0, 0x9e, 0x78, 0x11, 0x7a, 0xd9, 0x21,
-	0x30, 0xfb, 0x4c, 0xe5, 0xce, 0x45, 0x61, 0x67, 0xcc, 0x1a, 0xe7, 0xc1, 0x36, 0x0c, 0x39, 0x54,
-	0xa7, 0xa4, 0x58, 0x7a, 0xa8, 0x9b, 0x15, 0x0e, 0xea, 0x58, 0xee, 0xde, 0x11, 0x9c, 0x5f, 0x66,
-	0xdd, 0x95, 0xbb, 0xc4, 0xc4, 0x6a, 0x29, 0xa7, 0x3d, 0x50, 0xae, 0x41, 0xca, 0xb3, 0x86, 0x01,
-	0xfa, 0x36, 0x57, 0x37, 0xd7, 0x97, 0x0b, 0x23, 0xaf, 0xe0, 0x41, 0xe8, 0x55, 0x0b, 0x85, 0xe5,
-	0xc2, 0x08, 0xc2, 0x29, 0xe8, 0xd7, 0x96, 0xef, 0xde, 0xdb, 0x5a, 0x2e, 0x8c, 0x24, 0x5c, 0x1a,
-	0x75, 0x69, 0xe3, 0xf6, 0xd6, 0xf2, 0x48, 0x52, 0xf9, 0x41, 0x92, 0x07, 0x8a, 0xff, 0x6d, 0xa2,
-	0xff, 0xd2, 0x39, 0xc3, 0x9c, 0xf3, 0xef, 0x7d, 0x30, 0xe6, 0xbf, 0x0b, 0xe1, 0x9e, 0x1f, 0xc0,
-	0x38, 0x73, 0x4f, 0x51, 0x60, 0x05, 0x1d, 0x74, 0x25, 0x8e, 0x81, 0x05, 0x85, 0x06, 0x27, 0x5d,
-	0x27, 0x65, 0x41, 0xc0, 0x3f, 0xf7, 0xf2, 0xdd, 0xf4, 0x73, 0x11, 0xb2, 0xfc, 0x7a, 0x61, 0xb5,
-	0x5d, 0xac, 0xa2, 0xae, 0x8a, 0xd5, 0x56, 0x9d, 0x8a, 0x77, 0x43, 0xdd, 0x75, 0xfd, 0x88, 0x4e,
-	0xf3, 0x40, 0x97, 0xc5, 0x55, 0x18, 0x90, 0x99, 0x4e, 0x14, 0xda, 0x6b, 0x47, 0xb5, 0xa7, 0x26,
-	0xe4, 0x6a, 0xad, 0x1d, 0xd2, 0xbf, 0x47, 0x30, 0x20, 0xa7, 0x31, 0xf6, 0x56, 0x99, 0xbc, 0x6e,
-	0xc4, 0x67, 0x60, 0xa8, 0x6e, 0x5b, 0xdf, 0x22, 0x25, 0x5a, 0x64, 0x6b, 0xdc, 0x55, 0x53, 0x62,
-	0x6e, 0xd5, 0x25, 0xb9, 0x0c, 0x63, 0x92, 0xa4, 0x6c, 0x38, 0xf5, 0xaa, 0xbe, 0xc7, 0x49, 0xf9,
-	0x7d, 0x62, 0xb1, 0x56, 0xe0, 0x4b, 0x8c, 0xe3, 0x75, 0x48, 0xf1, 0x18, 0xc0, 0x09, 0x7b, 0x18,
-	0x21, 0xf0, 0x29, 0x46, 0x90, 0x81, 0x51, 0x41, 0xe0, 0x93, 0xd8, 0xcb, 0x08, 0x4f, 0xf0, 0x25,
-	0x8f, 0x40, 0xe5, 0xee, 0xc1, 0x71, 0x2e, 0x05, 0xfd, 0x4b, 0x6f, 0xab, 0xab, 0x2b, 0x2c, 0xd2,
-	0x0d, 0xc3, 0xe0, 0xe6, 0xaa, 0x1c, 0x26, 0xda, 0x31, 0x30, 0xe9, 0x8d, 0x81, 0x3d, 0xca, 0xdf,
-	0x10, 0x9c, 0x5c, 0x27, 0xf2, 0xf8, 0x98, 0x64, 0x19, 0xfa, 0x54, 0x5f, 0x25, 0x7e, 0x89, 0x05,
-	0xbe, 0x37, 0xe1, 0x5c, 0xe7, 0xc0, 0x27, 0x8d, 0x8b, 0x1f, 0xe9, 0xdb, 0xd0, 0xcb, 0x2e, 0x5c,
-	0x98, 0xd4, 0xa5, 0x98, 0xa6, 0xc9, 0x4d, 0x86, 0x17, 0x3d, 0x5c, 0x80, 0x1b, 0x8f, 0x1c, 0xaa,
-	0xdb, 0x94, 0xbb, 0x5f, 0x32, 0xca, 0xfd, 0x44, 0x4f, 0x87, 0xb1, 0xb8, 0x93, 0x4a, 0x15, 0x26,
-	0xb4, 0x86, 0xc9, 0x52, 0x49, 0x41, 0x36, 0x39, 0x5f, 0xd8, 0x63, 0x4c, 0xf9, 0x19, 0x82, 0xb1,
-	0xcd, 0x7a, 0x79, 0x7f, 0x13, 0xeb, 0xd6, 0x61, 0xbd, 0xd5, 0xdf, 0x5a, 0xc2, 0x8b, 0x90, 0x6a,
-	0x30, 0xf9, 0x3c, 0x3e, 0x27, 0xa2, 0xe2, 0xb3, 0x06, 0x9c, 0xdc, 0xfd, 0xad, 0x7c, 0x86, 0xe0,
-	0x0c, 0xd7, 0xae, 0x53, 0xb3, 0xc7, 0x84, 0xf1, 0xd0, 0x46, 0xa8, 0x50, 0xfc, 0x4a, 0x94, 0xe2,
-	0x61, 0xb2, 0x39, 0x8a, 0x31, 0x2b, 0x64, 0xe9, 0xf9, 0x20, 0xfd, 0x18, 0xc1, 0x28, 0x87, 0xe4,
-	0xef, 0x26, 0xb5, 0x1b, 0x63, 0xe8, 0xd0, 0x8d, 0xb1, 0xe7, 0xd3, 0xec, 0xdf, 0x08, 0xd2, 0x42,
-	0x33, 0xb1, 0xd9, 0x5d, 0xdd, 0xde, 0x69, 0x9d, 0xf2, 0x37, 0xe0, 0x98, 0xbf, 0x65, 0x2c, 0x14,
-	0x8d, 0x74, 0x15, 0x9f, 0x34, 0xae, 0xef, 0xb0, 0xe3, 0x9d, 0x7b, 0x2e, 0xb5, 0xf1, 0xd7, 0xba,
-	0xf3, 0x37, 0x8f, 0xab, 0xe5, 0x7e, 0x31, 0x09, 0xc7, 0xa4, 0x76, 0x4b, 0x4c, 0x5f, 0xfc, 0x5b,
-	0x04, 0x43, 0xde, 0x4e, 0x28, 0x9e, 0x8b, 0x82, 0x17, 0xd2, 0x37, 0x4d, 0xc7, 0xbc, 0x3c, 0xa5,
-	0xd0, 0x54, 0x87, 0xb9, 0x23, 0xce, 0xf0, 0x1b, 0xfc, 0xf0, 0xf3, 0xbf, 0x3e, 0x4d, 0x64, 0x94,
-	0xb3, 0xd9, 0xdd, 0xd9, 0xec, 0x07, 0x7c, 0xe5, 0x9a, 0xd7, 0x06, 0x9d, 0xec, 0x85, 0x27, 0xa2,
-	0x09, 0xef, 0xe4, 0xe5, 0xad, 0xff, 0x01, 0xc1, 0xb0, 0xaf, 0x11, 0x8d, 0xaf, 0xc4, 0x53, 0xda,
-	0xef, 0xf2, 0xe9, 0xb8, 0x1e, 0xae, 0xdc, 0x6f, 0xaa, 0xa7, 0x84, 0xda, 0xed, 0x16, 0xb5, 0xfc,
-	0xc9, 0x20, 0xe4, 0x95, 0x6c, 0x07, 0x08, 0x12, 0x81, 0x0b, 0x46, 0xbe, 0x90, 0xf2, 0xad, 0x88,
-	0xf1, 0x23, 0x04, 0x43, 0x2b, 0x84, 0xde, 0xd6, 0x6b, 0x6b, 0xec, 0x1f, 0x03, 0xac, 0x48, 0xbd,
-	0x0c, 0xbd, 0xc6, 0x7a, 0x0c, 0x9e, 0x45, 0xa9, 0xfb, 0x78, 0x80, 0x86, 0xaf, 0x2a, 0x5f, 0x6f,
-	0xaa, 0xad, 0xbc, 0x2a, 0x14, 0x9b, 0x67, 0x8a, 0xc9, 0xc9, 0x0e, 0xaa, 0xe5, 0x2b, 0x9e, 0x7d,
-	0xf2, 0xe8, 0x02, 0xfe, 0x14, 0xc1, 0xab, 0x07, 0xf4, 0x9d, 0xf1, 0xf5, 0xc8, 0xc6, 0x48, 0xc7,
-	0x86, 0x75, 0xfa, 0x50, 0x41, 0x4a, 0xb9, 0xde, 0x54, 0x59, 0xfa, 0x62, 0xd0, 0x66, 0x31, 0x3f,
-	0x73, 0x77, 0x62, 0x1f, 0xac, 0xb0, 0x40, 0xf6, 0x04, 0xff, 0x14, 0xc1, 0x60, 0xab, 0xaf, 0x8d,
-	0x2f, 0xc7, 0xc0, 0x70, 0x38, 0x3b, 0x9f, 0xf3, 0xea, 0x79, 0x1e, 0x9f, 0x3d, 0x58, 0xcf, 0xf6,
-	0xf1, 0xe3, 0x8f, 0x64, 0x3f, 0x8a, 0x97, 0x55, 0x38, 0x17, 0xab, 0xf7, 0xe4, 0xeb, 0x5e, 0xa4,
-	0xe7, 0xba, 0xe2, 0xe1, 0xaf, 0x34, 0xe5, 0x8a, 0xf0, 0xc2, 0xb7, 0x3a, 0x7a, 0x21, 0xaf, 0xbc,
-	0xf3, 0xac, 0x89, 0xe7, 0x5a, 0xc7, 0x67, 0x08, 0x86, 0x7d, 0xfd, 0xc2, 0x68, 0x2f, 0x0c, 0x6b,
-	0xd8, 0xa6, 0xe7, 0xbb, 0xe4, 0x12, 0x4a, 0x6b, 0x4d, 0xf5, 0xb8, 0xf0, 0x49, 0xd9, 0x9c, 0xf4,
-	0x19, 0x7c, 0x17, 0x9e, 0xd8, 0x82, 0xf4, 0x4b, 0x04, 0xd0, 0xae, 0x6b, 0xf1, 0x6c, 0x37, 0x65,
-	0x31, 0x07, 0x93, 0xeb, 0xbe, 0x92, 0x56, 0x2e, 0x32, 0xbd, 0xcf, 0xe1, 0x37, 0x62, 0x1c, 0x3f,
-	0xfe, 0x18, 0xc1, 0x90, 0xf7, 0x55, 0x1d, 0x1d, 0xaf, 0x43, 0x6a, 0xe7, 0x68, 0xef, 0x0b, 0x7b,
-	0xcd, 0x2b, 0x57, 0x7d, 0x6e, 0x17, 0xff, 0x80, 0xf1, 0x6f, 0x10, 0xa4, 0x3c, 0xbd, 0x3e, 0x1c,
-	0xeb, 0x94, 0xfc, 0xcd, 0xcb, 0xf4, 0x5c, 0x57, 0x3c, 0x42, 0xe3, 0xf9, 0xa6, 0x2a, 0x1e, 0x7e,
-	0x3e, 0x4f, 0x8c, 0x48, 0x34, 0xf8, 0xfb, 0x09, 0x38, 0xb1, 0xef, 0x4d, 0x8a, 0x17, 0xa2, 0x34,
-	0x38, 0xe8, 0x19, 0x9b, 0x9e, 0x94, 0x9c, 0x9e, 0x7f, 0x7f, 0x33, 0xf7, 0xe4, 0xbf, 0xbf, 0xca,
-	0x4f, 0xd0, 0x33, 0xf5, 0x1d, 0x58, 0xe8, 0x5e, 0xba, 0x28, 0xbe, 0xc7, 0x83, 0xc9, 0x7f, 0xb9,
-	0x56, 0xa7, 0x7b, 0x7e, 0xe8, 0xf3, 0xca, 0xe5, 0x38, 0xde, 0x6d, 0x37, 0xcc, 0x96, 0x7c, 0x91,
-	0x02, 0x8e, 0x07, 0x8a, 0x10, 0xfc, 0xd5, 0xe8, 0x07, 0x50, 0x58, 0xd5, 0x12, 0x3f, 0xdd, 0xbe,
-	0xd7, 0x54, 0xc7, 0xdd, 0x60, 0x39, 0xc3, 0x0a, 0x8c, 0x99, 0xf6, 0x6b, 0x87, 0x21, 0xb9, 0xa6,
-	0x2c, 0xc4, 0x08, 0xa7, 0x2d, 0xe3, 0x73, 0x13, 0x9b, 0x43, 0x28, 0xd3, 0xc4, 0x45, 0xf4, 0x73,
-	0x04, 0x43, 0xeb, 0x9d, 0xb2, 0xed, 0x7a, 0xfc, 0x6c, 0xeb, 0xc6, 0x20, 0x99, 0x58, 0x67, 0xf8,
-	0xdf, 0xfd, 0x5d, 0x27, 0x5d, 0x27, 0x90, 0x74, 0x3f, 0x41, 0x80, 0x37, 0x88, 0xc3, 0x26, 0x89,
-	0x5d, 0x33, 0x1c, 0xc7, 0xe5, 0xc1, 0xd3, 0x01, 0x0d, 0xf6, 0x93, 0x48, 0x5d, 0xdf, 0x8a, 0x41,
-	0x29, 0xdc, 0xe3, 0x9b, 0x4d, 0x75, 0xac, 0xad, 0x7f, 0x9b, 0x80, 0x81, 0xb8, 0xa1, 0x2c, 0xc6,
-	0x06, 0x41, 0xf7, 0xed, 0xe1, 0x42, 0xf9, 0x1d, 0x82, 0x61, 0x5f, 0xad, 0x15, 0x9d, 0x21, 0xc2,
-	0x4a, 0xb3, 0xf8, 0x86, 0xa3, 0x35, 0xd5, 0x7e, 0xef, 0xab, 0xec, 0x66, 0xee, 0x2a, 0x83, 0x20,
-	0x3f, 0x32, 0xe9, 0xc2, 0x64, 0x5a, 0xaf, 0xb3, 0xa7, 0x09, 0x59, 0x25, 0x84, 0xbe, 0x83, 0xd4,
-	0x78, 0x88, 0x8e, 0xfe, 0x29, 0xf4, 0xdd, 0xa6, 0x1a, 0x5e, 0x05, 0x32, 0xe4, 0xef, 0xe7, 0x96,
-	0x19, 0xf2, 0xf0, 0x0f, 0x66, 0xe2, 0xbf, 0x98, 0xf2, 0xe1, 0x7b, 0xb0, 0xb2, 0xc1, 0x5b, 0xd5,
-	0x45, 0xa7, 0xa1, 0x90, 0x1a, 0xb0, 0x9b, 0xb2, 0xa1, 0xcf, 0xf3, 0xa6, 0x9d, 0xcf, 0x5d, 0x64,
-	0xe0, 0xc4, 0xc7, 0x39, 0x11, 0xef, 0xaa, 0x56, 0xd9, 0xf0, 0xc7, 0x44, 0xab, 0x12, 0xf5, 0x55,
-	0x63, 0xf9, 0x98, 0xaa, 0x87, 0x14, 0x89, 0xe9, 0xee, 0x8a, 0x41, 0xe5, 0x19, 0x6a, 0xaa, 0x81,
-	0xaa, 0x92, 0x21, 0xfa, 0x18, 0xe5, 0x6e, 0x70, 0x48, 0xfe, 0x8f, 0x94, 0x42, 0xa1, 0xf1, 0x50,
-	0xed, 0x62, 0xf4, 0xca, 0x7e, 0x92, 0x0f, 0x08, 0x7e, 0xf7, 0xfd, 0xdc, 0x9d, 0xd8, 0x32, 0xc3,
-	0x9c, 0x20, 0x42, 0x7e, 0xfa, 0x9d, 0x67, 0xea, 0x64, 0xc7, 0x96, 0xd3, 0x9f, 0xd4, 0xcc, 0x43,
-	0x4a, 0xeb, 0x4e, 0x3e, 0x9b, 0x7d, 0xf4, 0xe8, 0x51, 0xb0, 0x3d, 0xa3, 0x37, 0xe8, 0x43, 0xfe,
-	0xdd, 0xd5, 0xa5, 0x7a, 0x55, 0xa7, 0xdb, 0x96, 0x5d, 0xbb, 0xd9, 0x44, 0xa0, 0x94, 0xac, 0x5a,
-	0xc4, 0xa1, 0xae, 0xa1, 0x77, 0xef, 0x08, 0x8a, 0x8a, 0x55, 0xd5, 0xcd, 0x4a, 0xc6, 0xb2, 0x2b,
-	0xd9, 0x0a, 0x31, 0x59, 0x02, 0xcc, 0xb6, 0xf7, 0x39, 0xe8, 0xb3, 0xae, 0x45, 0xff, 0xcc, 0xaf,
-	0x13, 0xa7, 0x57, 0xb8, 0xb8, 0x25, 0xb6, 0xa1, 0xbf, 0x44, 0xce, 0x6c, 0xcd, 0x3e, 0x93, 0x04,
-	0xf7, 0x19, 0xc1, 0x7d, 0x3f, 0xc1, 0xfd, 0xad, 0xd9, 0x7f, 0x24, 0xce, 0x70, 0x82, 0x7c, 0x9e,
-	0x51, 0xe4, 0xf3, 0x7e, 0x92, 0x7c, 0x7e, 0x6b, 0x76, 0xed, 0x95, 0x07, 0x7d, 0x4c, 0xc1, 0xb9,
-	0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x55, 0x09, 0xc5, 0x1d, 0x54, 0x28, 0x00, 0x00,
+	// 2744 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xdd, 0x6f, 0x1b, 0x59,
+	0x15, 0xdf, 0xeb, 0x7c, 0x1f, 0x27, 0x6d, 0x7a, 0x93, 0xec, 0xba, 0xb3, 0xdb, 0x26, 0x3b, 0xdb,
+	0x76, 0xbb, 0x6d, 0x6a, 0x37, 0x4e, 0x4b, 0x83, 0x43, 0x3f, 0xa6, 0x71, 0x9a, 0xad, 0x68, 0xd3,
+	0xec, 0xa4, 0x89, 0xc4, 0xb6, 0xac, 0x35, 0xb5, 0x6f, 0xdc, 0x21, 0xf6, 0x8c, 0x99, 0x19, 0xa7,
+	0xa4, 0x4b, 0x85, 0xb4, 0x2f, 0x88, 0x17, 0x24, 0x54, 0x89, 0x4f, 0x21, 0x21, 0x78, 0x83, 0x05,
+	0xc1, 0x8a, 0xbf, 0x00, 0xf1, 0x50, 0x55, 0xa0, 0xae, 0x58, 0x09, 0x84, 0x25, 0xa4, 0x7d, 0x80,
+	0x07, 0x10, 0x82, 0x77, 0x5e, 0x40, 0x73, 0x3f, 0x9c, 0x99, 0xf1, 0xd8, 0x33, 0x4e, 0xd3, 0x2d,
+	0x42, 0xbc, 0x79, 0xee, 0x3d, 0xe7, 0xdc, 0xf3, 0x3b, 0xf7, 0x9c, 0x73, 0xcf, 0x3d, 0xd7, 0x30,
+	0x5f, 0x36, 0xcd, 0x72, 0x85, 0x64, 0x8a, 0x15, 0xb3, 0x5e, 0xca, 0xd8, 0xa4, 0x58, 0xb7, 0x74,
+	0x67, 0xbb, 0x48, 0x0c, 0x87, 0x58, 0x99, 0xad, 0x99, 0xc0, 0x48, 0xc1, 0x26, 0xd6, 0x96, 0x5e,
+	0x24, 0xe9, 0x9a, 0x65, 0x3a, 0x26, 0x3e, 0xcc, 0x98, 0xd3, 0x94, 0x39, 0xed, 0x27, 0x4d, 0x6f,
+	0xcd, 0x48, 0x4a, 0x84, 0x70, 0xab, 0x6e, 0x14, 0x34, 0xdb, 0x26, 0x4e, 0xa1, 0xa4, 0xdb, 0x45,
+	0x73, 0x8b, 0x58, 0xdb, 0x05, 0x8b, 0xd8, 0x35, 0xd3, 0xb0, 0xf9, 0x12, 0xd2, 0x2b, 0x5c, 0x84,
+	0x56, 0xd3, 0x33, 0x9a, 0x61, 0x98, 0x8e, 0xe6, 0xe8, 0xa6, 0x61, 0xf3, 0xd9, 0x97, 0x3c, 0xb3,
+	0xc5, 0x8a, 0x4e, 0x0c, 0x87, 0x4f, 0x4c, 0x7a, 0x26, 0x36, 0x74, 0x52, 0x29, 0x15, 0xee, 0x90,
+	0xbb, 0xda, 0x96, 0x6e, 0x5a, 0x9c, 0xe0, 0xa0, 0x87, 0xc0, 0x22, 0xb6, 0x59, 0xb7, 0x04, 0x2a,
+	0xe9, 0x44, 0x84, 0xd6, 0x54, 0x63, 0x4e, 0x3b, 0x1d, 0x41, 0xbb, 0xa1, 0x1b, 0x25, 0xdd, 0x28,
+	0x73, 0xea, 0xb9, 0x08, 0x6a, 0xc3, 0x74, 0xf4, 0x0d, 0xbd, 0x48, 0x21, 0x16, 0x8a, 0xa6, 0xb1,
+	0xa1, 0x0b, 0xce, 0x5c, 0x04, 0xa7, 0x69, 0x95, 0x35, 0x43, 0xbf, 0xcf, 0x38, 0x6d, 0xe2, 0x38,
+	0xba, 0x51, 0x16, 0x46, 0x9a, 0x8d, 0xb9, 0xc5, 0x85, 0xaa, 0x66, 0x6d, 0x0a, 0xa6, 0x93, 0x51,
+	0x4c, 0x5e, 0x8b, 0x71, 0x3f, 0xc8, 0xe8, 0x5a, 0xd5, 0x9d, 0xd3, 0xb5, 0x6a, 0xa1, 0x66, 0x56,
+	0xf4, 0xe2, 0x36, 0x9f, 0x97, 0xfc, 0xf3, 0xbe, 0xb9, 0xd7, 0xf8, 0x5c, 0xc5, 0x34, 0xca, 0x56,
+	0xdd, 0x30, 0x74, 0xa3, 0x9c, 0x31, 0x6b, 0xc4, 0xf2, 0xed, 0xb3, 0x58, 0x80, 0x7e, 0xdd, 0xa9,
+	0x6f, 0x64, 0x4a, 0x75, 0x46, 0xc0, 0xe7, 0x5f, 0x0e, 0xce, 0x93, 0x6a, 0xcd, 0x11, 0x2b, 0x4c,
+	0x05, 0x27, 0x99, 0x43, 0x54, 0x35, 0x7b, 0x33, 0xe0, 0x64, 0x4d, 0x0a, 0xdb, 0xb1, 0xea, 0xc5,
+	0xa0, 0x2f, 0x35, 0x67, 0x1d, 0xbd, 0x4a, 0x6c, 0x47, 0xab, 0xd6, 0x18, 0x81, 0xfc, 0x08, 0xc1,
+	0xf8, 0x82, 0x45, 0x34, 0x87, 0x5c, 0x61, 0xdb, 0xad, 0x92, 0x2f, 0xd6, 0x89, 0xed, 0xe0, 0x3c,
+	0xf4, 0xd7, 0x34, 0x8b, 0x18, 0x4e, 0x0a, 0x4d, 0xa1, 0xe3, 0x43, 0x97, 0xa7, 0x3f, 0x56, 0x12,
+	0xff, 0x52, 0x8e, 0xc1, 0x91, 0x40, 0xa8, 0xb0, 0x05, 0xb4, 0x9a, 0x6e, 0xa7, 0x8b, 0x66, 0x35,
+	0xb3, 0x4a, 0x6d, 0xab, 0x72, 0x5e, 0x2c, 0x03, 0x70, 0x37, 0x2a, 0xe8, 0xa5, 0x54, 0x82, 0x4a,
+	0xea, 0xf9, 0x58, 0x49, 0xa8, 0x43, 0x7c, 0xf8, 0x6a, 0x09, 0x5f, 0x81, 0x01, 0xfe, 0x91, 0xea,
+	0x99, 0x42, 0xc7, 0x93, 0xd9, 0xd7, 0xd3, 0x9d, 0x63, 0x33, 0xcd, 0x55, 0x65, 0x92, 0x04, 0xb3,
+	0xfc, 0x6f, 0x04, 0x93, 0x0c, 0xca, 0xb2, 0xc7, 0x17, 0x17, 0xa8, 0x2b, 0x0a, 0x54, 0x2b, 0x01,
+	0x54, 0x73, 0x14, 0x55, 0x16, 0x4e, 0xd3, 0xa5, 0x44, 0x30, 0x55, 0x35, 0x43, 0x2b, 0xb7, 0x62,
+	0xbb, 0xe1, 0x71, 0xd4, 0x26, 0xc2, 0x29, 0x18, 0x62, 0xde, 0x1e, 0x00, 0x38, 0xc8, 0x46, 0xaf,
+	0x96, 0xf0, 0x5d, 0x18, 0x0b, 0x09, 0x0e, 0x8e, 0x35, 0x1b, 0x85, 0xb5, 0x15, 0x0b, 0x93, 0x8f,
+	0x8d, 0x96, 0x09, 0xf9, 0x7d, 0x04, 0x63, 0xcc, 0x02, 0x7c, 0x1b, 0x9e, 0x19, 0xea, 0x05, 0xe8,
+	0x67, 0x4c, 0x14, 0x72, 0x32, 0x7b, 0x2c, 0x0a, 0x06, 0x53, 0x88, 0xa9, 0xce, 0x59, 0x65, 0x13,
+	0x26, 0xf3, 0xa4, 0x42, 0x3a, 0xed, 0xd7, 0x35, 0xe8, 0x35, 0xb4, 0x2a, 0x09, 0xea, 0xdd, 0xd9,
+	0x07, 0x43, 0xc4, 0x51, 0x29, 0x72, 0x05, 0x5e, 0x59, 0x22, 0xce, 0x27, 0xb5, 0x5a, 0x0d, 0x0e,
+	0x2f, 0x11, 0xc7, 0x6b, 0xbe, 0x55, 0x9e, 0xdc, 0xc4, 0x7a, 0xcb, 0xbe, 0xf5, 0x72, 0x74, 0xbd,
+	0x33, 0x90, 0xed, 0xbc, 0x5e, 0xa8, 0x40, 0xb6, 0xe2, 0x4d, 0x18, 0x5d, 0x22, 0x8e, 0x7f, 0xef,
+	0x2f, 0xf9, 0xd6, 0xe8, 0x2e, 0x8a, 0x99, 0xd4, 0x3f, 0x26, 0x00, 0x2f, 0x59, 0x66, 0xbd, 0xa6,
+	0xb8, 0x87, 0x87, 0xfd, 0xec, 0x9c, 0xea, 0x45, 0xe8, 0xdf, 0xd0, 0x2b, 0x0e, 0xb1, 0x58, 0x1c,
+	0xa9, 0xfc, 0x0b, 0x1f, 0x86, 0xc1, 0xb2, 0xbb, 0x7e, 0xe1, 0xce, 0x36, 0x8d, 0x1a, 0x1e, 0x61,
+	0x03, 0x74, 0xf0, 0xf2, 0x36, 0xce, 0xc3, 0x68, 0xd1, 0xac, 0xba, 0x42, 0x0a, 0x22, 0xb7, 0xa6,
+	0x7a, 0xa9, 0x5b, 0x1e, 0x14, 0x6e, 0x29, 0xf2, 0x5f, 0x3a, 0xcf, 0x09, 0xd4, 0xfd, 0x9c, 0x45,
+	0x0c, 0xe0, 0x73, 0x30, 0x64, 0x11, 0xad, 0x54, 0x70, 0x33, 0x64, 0xaa, 0x8f, 0xb2, 0x4b, 0x2d,
+	0xec, 0x37, 0x45, 0xfa, 0x54, 0x07, 0x5d, 0x62, 0xf7, 0x13, 0x1f, 0x02, 0xa8, 0x69, 0x65, 0x52,
+	0x70, 0xcc, 0x4d, 0x62, 0xa4, 0x06, 0xa8, 0xea, 0x43, 0xee, 0xc8, 0x4d, 0x77, 0x00, 0xbf, 0x0c,
+	0xf4, 0xa3, 0x60, 0xeb, 0xf7, 0x49, 0x6a, 0x70, 0x0a, 0x1d, 0xef, 0x53, 0x07, 0xdd, 0x81, 0x55,
+	0xfd, 0x3e, 0x91, 0xff, 0x8e, 0x60, 0xcc, 0x67, 0x5b, 0x56, 0x40, 0xe0, 0x35, 0x18, 0x15, 0x90,
+	0xdd, 0xaa, 0xa2, 0x5e, 0x71, 0xec, 0x14, 0x9a, 0xea, 0x39, 0x9e, 0xcc, 0x9e, 0x8c, 0x8a, 0x34,
+	0x2a, 0x4e, 0xa5, 0x3c, 0xea, 0x3e, 0x6e, 0x22, 0xf6, 0x69, 0xfb, 0x31, 0x26, 0xba, 0xc0, 0x78,
+	0x0c, 0xf6, 0x1b, 0xe4, 0x4b, 0x4e, 0xc1, 0x03, 0x94, 0xee, 0x84, 0x3a, 0xe2, 0x0e, 0xaf, 0x34,
+	0xc1, 0x1e, 0x02, 0x70, 0x4c, 0x47, 0xab, 0x30, 0xb4, 0xbd, 0x14, 0xed, 0x10, 0x1d, 0xa1, 0x70,
+	0x9f, 0x24, 0x60, 0x9c, 0xea, 0xc7, 0x33, 0xb8, 0xbd, 0xb7, 0xa7, 0xcd, 0x6e, 0x1d, 0xc8, 0x67,
+	0x96, 0xde, 0x2e, 0xcc, 0x12, 0xe6, 0x79, 0x7d, 0x5d, 0x7b, 0xde, 0xd3, 0x38, 0xd0, 0x3f, 0x10,
+	0x4c, 0x04, 0x2c, 0xfa, 0xbf, 0xed, 0x42, 0x7f, 0x40, 0x90, 0xf4, 0xe8, 0x87, 0x6f, 0x01, 0xd4,
+	0x2c, 0xb7, 0xe8, 0x72, 0x74, 0x22, 0x00, 0xce, 0x77, 0x01, 0x30, 0xbd, 0xd2, 0xe4, 0x5e, 0x34,
+	0x1c, 0x6b, 0x5b, 0xf5, 0x88, 0xc3, 0xe3, 0xd0, 0x57, 0x34, 0xeb, 0x86, 0x43, 0x81, 0xf6, 0xa8,
+	0xec, 0x43, 0x5a, 0x83, 0xfd, 0x01, 0x26, 0x3c, 0x0a, 0x3d, 0x9b, 0x64, 0x9b, 0x39, 0xaf, 0xea,
+	0xfe, 0xc4, 0xd3, 0xd0, 0xb7, 0xa5, 0x55, 0xea, 0xc2, 0x46, 0x2f, 0xb6, 0xd8, 0x68, 0xdd, 0x9d,
+	0x55, 0x19, 0x51, 0x2e, 0x31, 0x87, 0xe4, 0x9f, 0x21, 0x38, 0x7c, 0x4d, 0xb7, 0x43, 0xce, 0xa7,
+	0x67, 0x98, 0x73, 0xfd, 0xbe, 0x97, 0xe8, 0xe8, 0x7b, 0x3d, 0x01, 0xdf, 0xfb, 0x39, 0x82, 0xc9,
+	0xb6, 0x0a, 0x73, 0x2f, 0x24, 0x30, 0x1e, 0x52, 0xfc, 0x88, 0x8d, 0xda, 0x45, 0xf5, 0xa3, 0x8e,
+	0xb5, 0x16, 0x3e, 0x76, 0x98, 0x73, 0x25, 0x42, 0x9c, 0x4b, 0xfe, 0x21, 0x02, 0xec, 0xaa, 0xcc,
+	0x12, 0xc7, 0x7f, 0x89, 0x5d, 0x07, 0x02, 0x76, 0xfd, 0x0a, 0x8c, 0xf9, 0x74, 0xe4, 0xa6, 0xbc,
+	0x04, 0x03, 0x4c, 0x0f, 0x61, 0xbd, 0x98, 0x45, 0x97, 0x2a, 0xd8, 0x62, 0x5b, 0xe9, 0x61, 0x0f,
+	0x1c, 0x70, 0x35, 0x78, 0x5e, 0x07, 0xfe, 0x41, 0x18, 0x34, 0xad, 0x12, 0xb1, 0x9a, 0xf9, 0x5a,
+	0x1d, 0xa0, 0xdf, 0xcf, 0x3f, 0x55, 0x5f, 0x70, 0xef, 0x33, 0xe2, 0x06, 0x46, 0x37, 0x2e, 0x6c,
+	0xfd, 0x2b, 0x2e, 0xc9, 0x75, 0xcd, 0xde, 0x74, 0xcf, 0x19, 0xe4, 0xde, 0x75, 0xf8, 0x77, 0xc0,
+	0x2d, 0x06, 0x3b, 0xba, 0xc5, 0x50, 0xc0, 0x2d, 0xbe, 0xde, 0xcb, 0x7c, 0x37, 0x50, 0x2a, 0xd8,
+	0x30, 0x56, 0xd1, 0x6d, 0x87, 0x35, 0x23, 0xec, 0x40, 0xaa, 0x5f, 0x88, 0x72, 0x91, 0x56, 0x81,
+	0xfe, 0x21, 0xf7, 0x08, 0x38, 0x50, 0x09, 0x8c, 0x3c, 0xf7, 0x53, 0x40, 0x7a, 0x2f, 0x01, 0xa3,
+	0x41, 0x3d, 0xf1, 0x3c, 0xf4, 0x51, 0x23, 0x50, 0xff, 0x4c, 0x66, 0x8f, 0x46, 0x61, 0xa7, 0xcc,
+	0x2a, 0xe3, 0xc1, 0x16, 0x0c, 0xdb, 0x8e, 0xe6, 0x90, 0x42, 0xf1, 0xae, 0x66, 0x94, 0x19, 0xa8,
+	0x7d, 0xd9, 0x1b, 0x7b, 0x60, 0xbf, 0xf4, 0xaa, 0x2b, 0x77, 0x81, 0x8a, 0x55, 0x93, 0xf6, 0xce,
+	0x87, 0x7c, 0x1e, 0x92, 0x9e, 0x39, 0x0c, 0xd0, 0xbf, 0xb6, 0xbc, 0xb6, 0xba, 0x98, 0x1f, 0x7d,
+	0x01, 0x0f, 0x41, 0x9f, 0x92, 0xcf, 0x2f, 0xe6, 0x47, 0x11, 0x4e, 0xc2, 0x80, 0xba, 0x78, 0xfd,
+	0xc6, 0xfa, 0x62, 0x7e, 0x34, 0xe1, 0xd2, 0x28, 0x0b, 0x37, 0xaf, 0xae, 0x2f, 0x8e, 0xf6, 0xc8,
+	0x5f, 0xeb, 0x61, 0x89, 0xe2, 0x93, 0x2d, 0xa6, 0xfe, 0x1f, 0x9c, 0x61, 0xc1, 0xf9, 0xd7, 0x7e,
+	0x18, 0xf7, 0xef, 0x05, 0x0f, 0xcf, 0x77, 0x61, 0x82, 0x86, 0x27, 0xef, 0x52, 0x04, 0x03, 0x74,
+	0x29, 0x8e, 0x83, 0x05, 0x85, 0x06, 0x07, 0xdd, 0x20, 0xa5, 0x49, 0xc0, 0x3f, 0xf6, 0xfc, 0xc3,
+	0xf4, 0x23, 0x9e, 0xb2, 0xfc, 0x7a, 0x61, 0x65, 0xa7, 0xe3, 0x83, 0xba, 0xea, 0xf8, 0x34, 0x9b,
+	0x3d, 0x78, 0x2b, 0x34, 0x5c, 0x57, 0xf7, 0xc8, 0x9a, 0x6d, 0x43, 0x16, 0x57, 0x60, 0x50, 0x9c,
+	0x74, 0xbc, 0x83, 0xb3, 0xb2, 0x57, 0x6b, 0xaa, 0x5c, 0xae, 0xda, 0x5c, 0x41, 0xfa, 0x35, 0x82,
+	0x41, 0x31, 0x8c, 0xb1, 0xf7, 0x26, 0xcf, 0xee, 0xe6, 0xf8, 0x55, 0x18, 0xae, 0x59, 0xe6, 0x17,
+	0x48, 0xd1, 0x29, 0xd0, 0x39, 0x16, 0xaa, 0x49, 0x3e, 0xb6, 0xec, 0x92, 0x9c, 0x86, 0x71, 0x41,
+	0x52, 0xd2, 0xed, 0x5a, 0x45, 0xdb, 0x66, 0xa4, 0x6c, 0x3f, 0x31, 0x9f, 0xcb, 0xb3, 0x29, 0xca,
+	0x31, 0x09, 0x49, 0x96, 0x03, 0x18, 0x61, 0x2f, 0x25, 0x04, 0x36, 0x44, 0x09, 0xd2, 0x30, 0xc6,
+	0x09, 0x7c, 0x12, 0xfb, 0x28, 0xe1, 0x01, 0x36, 0xe5, 0x11, 0x28, 0x5f, 0x6f, 0x9f, 0xe7, 0x92,
+	0x30, 0xb0, 0xf0, 0xa6, 0xb2, 0xbc, 0x44, 0x33, 0xdd, 0x08, 0x0c, 0xad, 0x2d, 0x8b, 0xcf, 0xc4,
+	0x4e, 0x0e, 0xec, 0xf1, 0xe6, 0xc0, 0x5e, 0xf9, 0x2f, 0x08, 0x5e, 0x5c, 0x25, 0xc2, 0x7c, 0x54,
+	0xb2, 0x48, 0x7d, 0x8a, 0xaf, 0xdb, 0x71, 0x8a, 0x26, 0xbe, 0xd7, 0xe1, 0x68, 0xe7, 0xc4, 0x27,
+	0x9c, 0x8b, 0x99, 0xf4, 0x4d, 0xe8, 0xa3, 0x1b, 0xce, 0x5d, 0xea, 0x54, 0x4c, 0xd7, 0x64, 0x2e,
+	0xc3, 0x2e, 0x96, 0x4c, 0x80, 0x9b, 0x8f, 0x6c, 0x47, 0xb3, 0x1c, 0x16, 0x7e, 0x3d, 0x51, 0xe1,
+	0xc7, 0x1b, 0xa3, 0x94, 0xc5, 0x1d, 0x94, 0x2b, 0x90, 0x52, 0xeb, 0x06, 0x3d, 0x4a, 0xf2, 0xe2,
+	0x8d, 0xe1, 0x99, 0x15, 0x63, 0xf2, 0xf7, 0x10, 0x8c, 0xaf, 0xd5, 0x4a, 0xad, 0x9d, 0xe0, 0x2b,
+	0xbb, 0x8d, 0x56, 0x7f, 0x7f, 0x16, 0xcf, 0x43, 0xb2, 0x4e, 0xe5, 0xb3, 0xfc, 0x9c, 0x88, 0xca,
+	0xcf, 0x2a, 0x30, 0x72, 0xf7, 0xb7, 0xfc, 0x08, 0xc1, 0x24, 0xd3, 0xae, 0x7d, 0xfb, 0xae, 0x4d,
+	0xa3, 0x15, 0xed, 0x79, 0xa3, 0xf5, 0xe9, 0xa0, 0x7c, 0x88, 0xe0, 0x55, 0x06, 0xa5, 0x53, 0x6f,
+	0xd0, 0x80, 0x89, 0xd0, 0x87, 0x11, 0x0e, 0xe7, 0x4c, 0x14, 0x9c, 0x30, 0xd9, 0x0c, 0xd0, 0xb8,
+	0x19, 0x32, 0xf5, 0x74, 0x90, 0xbe, 0x85, 0x60, 0x8c, 0x41, 0xf2, 0x37, 0x1f, 0x77, 0xda, 0xc4,
+	0x68, 0xd7, 0x6d, 0xe2, 0xa7, 0xd3, 0xec, 0x9f, 0x08, 0x24, 0xae, 0x19, 0x5f, 0xec, 0xba, 0x66,
+	0x6d, 0x36, 0xad, 0xfc, 0x39, 0xd8, 0xe7, 0x7f, 0x42, 0xe2, 0x8a, 0x46, 0x46, 0xbd, 0x4f, 0x1a,
+	0xd3, 0x77, 0xc4, 0xf6, 0x8e, 0x3d, 0x95, 0xda, 0xf8, 0xd3, 0xdd, 0xa5, 0x0e, 0x4f, 0xd6, 0xc8,
+	0xfe, 0xfe, 0x18, 0xec, 0x13, 0xda, 0x2d, 0x50, 0x7d, 0xf1, 0x2f, 0x10, 0x0c, 0x7b, 0xdf, 0x05,
+	0xf0, 0x6c, 0x14, 0xbc, 0x90, 0x57, 0x04, 0x29, 0xe6, 0xe6, 0xc9, 0xf9, 0x86, 0x32, 0xc2, 0x72,
+	0xca, 0x34, 0xdb, 0xc1, 0xf7, 0x3e, 0xfa, 0xf3, 0xc3, 0x44, 0x5a, 0x3e, 0x92, 0xd9, 0x9a, 0xc9,
+	0xbc, 0xcb, 0x66, 0xce, 0x7b, 0x7d, 0xd0, 0xce, 0x9c, 0x78, 0xc0, 0x1f, 0xe5, 0xec, 0x9c, 0xd8,
+	0xf5, 0xdf, 0x20, 0x18, 0xf1, 0x3d, 0x4c, 0xe1, 0x33, 0xf1, 0x94, 0xf6, 0x67, 0x2f, 0x29, 0x6e,
+	0xb2, 0x92, 0x6f, 0x37, 0x94, 0x83, 0x5c, 0xed, 0x9d, 0x27, 0x2b, 0xf1, 0x93, 0x42, 0xc8, 0xc9,
+	0x99, 0x0e, 0x10, 0x04, 0x02, 0x17, 0x8c, 0x28, 0xf6, 0x72, 0xcd, 0xe4, 0xf7, 0xa3, 0x04, 0xa4,
+	0xda, 0x3d, 0x4e, 0xe1, 0x8b, 0xf1, 0x90, 0xb5, 0xcd, 0x7c, 0xd2, 0x2e, 0x92, 0x9b, 0xfc, 0x0d,
+	0xd4, 0x50, 0x8e, 0x70, 0xc0, 0xcd, 0x17, 0xac, 0xe9, 0x90, 0x04, 0xda, 0x50, 0x24, 0x4e, 0x16,
+	0x32, 0x49, 0x0d, 0xb3, 0x24, 0x9f, 0xee, 0xb8, 0xb7, 0x21, 0x1d, 0x9b, 0x5c, 0x58, 0xaa, 0xc6,
+	0xbf, 0x44, 0x90, 0x6a, 0xf7, 0x24, 0x14, 0x6d, 0xa5, 0x88, 0xc7, 0x24, 0xa9, 0xb5, 0x07, 0xb7,
+	0x58, 0xad, 0x39, 0xdb, 0xf2, 0xc5, 0x86, 0x42, 0x8f, 0x7e, 0x8a, 0x25, 0x7b, 0x82, 0x61, 0x71,
+	0x07, 0x5a, 0xb6, 0x38, 0x04, 0x48, 0xe6, 0xc4, 0x03, 0xfc, 0x4d, 0x04, 0xc3, 0x4b, 0xc4, 0xb9,
+	0xaa, 0x55, 0x57, 0xe8, 0xf3, 0x30, 0x96, 0xc5, 0x4a, 0xba, 0x56, 0xa5, 0xfd, 0x46, 0xcf, 0xa4,
+	0xd0, 0x66, 0x22, 0x40, 0xc3, 0x66, 0xe5, 0xcf, 0x36, 0x94, 0x66, 0xfd, 0xc7, 0xbd, 0xee, 0x2c,
+	0x55, 0x48, 0x0c, 0x76, 0xf0, 0xbb, 0x5c, 0xd9, 0xb3, 0x4e, 0x0e, 0x9d, 0xc0, 0x8f, 0x11, 0x4c,
+	0x84, 0xbe, 0x78, 0xe1, 0xcf, 0x44, 0xb6, 0x48, 0x3b, 0x3c, 0x94, 0xed, 0xca, 0xdf, 0xfc, 0x56,
+	0xc6, 0xdd, 0x5b, 0xf9, 0x09, 0x82, 0x97, 0xda, 0x3c, 0xa8, 0xe1, 0x0b, 0x31, 0xe0, 0x74, 0x38,
+	0x6d, 0xa5, 0x5d, 0x1d, 0xa7, 0xf2, 0x05, 0x2f, 0xa4, 0x19, 0x9c, 0x69, 0x0f, 0x29, 0xec, 0xc8,
+	0x7d, 0x80, 0xbf, 0x8b, 0x60, 0xa8, 0xf9, 0x60, 0x87, 0x4f, 0xc7, 0xc0, 0xb0, 0xbb, 0x8c, 0x3c,
+	0xeb, 0xd5, 0xf3, 0x18, 0x3e, 0xd2, 0x5e, 0xcf, 0x1d, 0x5f, 0xc2, 0xef, 0x8b, 0x46, 0x3b, 0xeb,
+	0x65, 0xe0, 0x6c, 0xac, 0xa6, 0xba, 0xaf, 0x65, 0x28, 0xcd, 0x76, 0xc5, 0xc3, 0xae, 0x46, 0xf2,
+	0x19, 0x7e, 0x5e, 0xbc, 0xd1, 0x31, 0xa7, 0xb0, 0x76, 0x57, 0x8e, 0xbe, 0x4e, 0xb8, 0xae, 0xfe,
+	0x21, 0x82, 0x11, 0xdf, 0x43, 0x48, 0xf4, 0x79, 0x11, 0xf6, 0x12, 0x25, 0x9d, 0xed, 0x92, 0x8b,
+	0x2b, 0xad, 0x36, 0x94, 0xfd, 0x3c, 0x4b, 0x8a, 0x57, 0x17, 0x5f, 0xf4, 0x76, 0x71, 0x66, 0x34,
+	0x21, 0xfd, 0x00, 0x01, 0xec, 0x34, 0x93, 0xf0, 0x4c, 0x37, 0xbd, 0xa8, 0x98, 0x71, 0xda, 0xda,
+	0xbe, 0x92, 0x4f, 0x52, 0xbd, 0x8f, 0xe2, 0xd7, 0x62, 0x98, 0x1f, 0x7f, 0x80, 0x60, 0xd8, 0x7b,
+	0x95, 0x8d, 0xae, 0x2c, 0x42, 0x1a, 0x56, 0xd1, 0xd1, 0x17, 0x76, 0x85, 0x96, 0xcf, 0xf9, 0xc2,
+	0x2e, 0xbe, 0x81, 0xf1, 0x9f, 0x10, 0xbc, 0xd4, 0xe6, 0xdd, 0x22, 0x3a, 0x91, 0x74, 0x7e, 0xa1,
+	0x91, 0x2e, 0xee, 0x9a, 0x9f, 0xa3, 0x52, 0x1a, 0x0a, 0xbf, 0x91, 0xf9, 0x12, 0x65, 0x17, 0x47,
+	0x2b, 0xfe, 0x29, 0x82, 0xa4, 0xe7, 0x01, 0x01, 0xc7, 0xf2, 0x02, 0xff, 0x8b, 0x88, 0x34, 0xdb,
+	0x15, 0x0f, 0xd7, 0xfd, 0xac, 0x5f, 0x77, 0x91, 0x69, 0x22, 0x4a, 0x3e, 0xfc, 0xd5, 0x04, 0x1c,
+	0x68, 0xb9, 0xe8, 0xe2, 0xb9, 0x28, 0x0d, 0xda, 0xdd, 0x8d, 0xa5, 0x43, 0x82, 0xd3, 0xf3, 0xbf,
+	0xac, 0xf4, 0x0d, 0xf1, 0xbf, 0x2c, 0xf9, 0xdb, 0xe8, 0xb1, 0xf2, 0x16, 0xcc, 0x75, 0x2f, 0x9d,
+	0x77, 0xf4, 0x26, 0x42, 0xab, 0x08, 0x3f, 0xf4, 0xb3, 0x11, 0x15, 0x11, 0xcf, 0x5e, 0x56, 0xdd,
+	0x68, 0xca, 0x77, 0x23, 0xfe, 0x09, 0x82, 0xfd, 0x81, 0xce, 0x06, 0xfe, 0x54, 0xf4, 0x55, 0x24,
+	0xac, 0x15, 0x12, 0xbf, 0xf0, 0xbd, 0xd5, 0x50, 0x26, 0xdc, 0xc3, 0x60, 0x9a, 0x76, 0x2d, 0xa6,
+	0x77, 0xee, 0x1d, 0x14, 0xc9, 0x79, 0x79, 0x2e, 0xc6, 0x71, 0xd1, 0x0c, 0x2e, 0xb7, 0x0a, 0xb1,
+	0x89, 0x43, 0x35, 0x71, 0x11, 0x7d, 0x1f, 0xc1, 0xf0, 0x6a, 0xa7, 0xd2, 0x68, 0x35, 0x7e, 0x69,
+	0xe4, 0xe6, 0x58, 0x51, 0x05, 0x4d, 0xb3, 0x3f, 0xe2, 0x75, 0x5d, 0x21, 0xd9, 0x81, 0x0a, 0xe9,
+	0x11, 0x02, 0x7c, 0x93, 0xd8, 0x74, 0x90, 0x58, 0x55, 0xdd, 0xb6, 0x5d, 0x1e, 0x7c, 0x3c, 0xa0,
+	0x41, 0x2b, 0x89, 0xd0, 0xf5, 0x8d, 0x18, 0x94, 0x3c, 0x3c, 0x3e, 0xdf, 0x50, 0xc6, 0x77, 0xf4,
+	0xdf, 0x21, 0xa0, 0x20, 0x2e, 0xc9, 0xf3, 0xb1, 0x41, 0x38, 0x2d, 0x6b, 0xb8, 0x50, 0x7e, 0x85,
+	0x60, 0xc4, 0xd7, 0xc0, 0x89, 0x3e, 0x01, 0xc3, 0xfa, 0x3d, 0xf1, 0x1d, 0x47, 0x6d, 0x28, 0x03,
+	0xde, 0xfb, 0xd1, 0xe5, 0xec, 0x39, 0x0a, 0x41, 0xfc, 0x71, 0xb4, 0x0b, 0x97, 0x69, 0xde, 0x93,
+	0x7e, 0x92, 0x80, 0x54, 0xbb, 0x3e, 0x4f, 0xf4, 0x0d, 0x20, 0xa2, 0x43, 0xb4, 0xab, 0xba, 0xf5,
+	0x3b, 0xa8, 0xa1, 0x8c, 0x85, 0x5e, 0x8b, 0x26, 0x43, 0x46, 0xa7, 0x3d, 0x77, 0x7e, 0x6a, 0x94,
+	0x5b, 0xd9, 0x3c, 0x8b, 0x9f, 0x90, 0xff, 0xc7, 0x76, 0x51, 0xfd, 0x86, 0xdf, 0x97, 0x1e, 0x26,
+	0x44, 0x77, 0x23, 0xb4, 0x2a, 0x56, 0xe2, 0xd9, 0x6b, 0xef, 0x0b, 0xe3, 0x2f, 0x37, 0x94, 0xf0,
+	0xee, 0x15, 0x35, 0xc9, 0x3b, 0xd9, 0x45, 0x6a, 0x92, 0xf0, 0x3f, 0xfe, 0xc6, 0xaf, 0x9f, 0x73,
+	0xe1, 0x6b, 0xd0, 0x76, 0x87, 0xb7, 0x1b, 0x15, 0x5d, 0x94, 0x84, 0xf4, 0xae, 0xba, 0x69, 0x77,
+	0xf4, 0x7b, 0xae, 0x6b, 0x67, 0xb3, 0x27, 0x29, 0x38, 0xfe, 0x27, 0xe3, 0x88, 0x2a, 0xbb, 0xd9,
+	0xee, 0xf8, 0x6d, 0xa2, 0xd9, 0x41, 0xf3, 0x75, 0x91, 0x72, 0x31, 0x55, 0x0f, 0x69, 0x6e, 0x49,
+	0xdd, 0x35, 0xb1, 0xe4, 0xc7, 0xa8, 0xa1, 0x04, 0xba, 0x61, 0x14, 0xd1, 0x07, 0x28, 0x7b, 0x89,
+	0x41, 0xf2, 0xff, 0xd9, 0x3a, 0x14, 0x1a, 0x3b, 0xd8, 0x5c, 0x8c, 0x5e, 0xd9, 0x0f, 0x72, 0x01,
+	0xc1, 0x6f, 0xbf, 0x93, 0xbd, 0x16, 0x5b, 0x66, 0x58, 0xca, 0x88, 0x90, 0x2f, 0xbd, 0xf5, 0x58,
+	0x39, 0xd4, 0xb1, 0xeb, 0xff, 0x3b, 0x25, 0x7d, 0xd7, 0x71, 0x6a, 0x76, 0x2e, 0x93, 0xb9, 0x77,
+	0xef, 0x5e, 0xb0, 0x43, 0xae, 0xd5, 0x9d, 0xbb, 0xec, 0xff, 0xe3, 0xa7, 0x6a, 0x15, 0xcd, 0xd9,
+	0x30, 0xad, 0xea, 0xe5, 0x06, 0x02, 0xb9, 0x68, 0x56, 0x23, 0x8c, 0xba, 0x82, 0xde, 0xbe, 0xc6,
+	0x29, 0xca, 0x66, 0x45, 0x33, 0xca, 0x69, 0xd3, 0x2a, 0x67, 0xca, 0xc4, 0xa0, 0xe5, 0x42, 0x66,
+	0x67, 0x9d, 0x76, 0x7f, 0x4f, 0x9f, 0xf7, 0x8f, 0xfc, 0x38, 0x71, 0x78, 0x89, 0x89, 0x5b, 0xa0,
+	0x0b, 0xfa, 0x5b, 0x7b, 0xe9, 0xf5, 0x99, 0xc7, 0x82, 0xe0, 0x36, 0x25, 0xb8, 0xed, 0x27, 0xb8,
+	0xbd, 0x3e, 0xf3, 0xb7, 0xc4, 0xab, 0x8c, 0x20, 0x97, 0xa3, 0x14, 0xb9, 0x9c, 0x9f, 0x24, 0x97,
+	0x5b, 0x9f, 0x59, 0x79, 0xe1, 0x4e, 0x3f, 0x55, 0x70, 0xf6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x46, 0x4e, 0xfd, 0x02, 0x56, 0x31, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2291,8 +2645,14 @@
 	// Creates a finding. The corresponding source must exist for finding creation
 	// to succeed.
 	CreateFinding(ctx context.Context, in *CreateFindingRequest, opts ...grpc.CallOption) (*Finding, error)
+	// Creates a notification config.
+	CreateNotificationConfig(ctx context.Context, in *CreateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error)
+	// Deletes a notification config.
+	DeleteNotificationConfig(ctx context.Context, in *DeleteNotificationConfigRequest, opts ...grpc.CallOption) (*empty.Empty, error)
 	// Gets the access control policy on the specified Source.
 	GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error)
+	// Gets a notification config.
+	GetNotificationConfig(ctx context.Context, in *GetNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error)
 	// Gets the settings for an organization.
 	GetOrganizationSettings(ctx context.Context, in *GetOrganizationSettingsRequest, opts ...grpc.CallOption) (*OrganizationSettings, error)
 	// Gets a source.
@@ -2313,6 +2673,8 @@
 	// To list across all sources provide a `-` as the source id.
 	// Example: /v1/organizations/{organization_id}/sources/-/findings
 	ListFindings(ctx context.Context, in *ListFindingsRequest, opts ...grpc.CallOption) (*ListFindingsResponse, error)
+	// Lists notification configs.
+	ListNotificationConfigs(ctx context.Context, in *ListNotificationConfigsRequest, opts ...grpc.CallOption) (*ListNotificationConfigsResponse, error)
 	// Lists all sources belonging to an organization.
 	ListSources(ctx context.Context, in *ListSourcesRequest, opts ...grpc.CallOption) (*ListSourcesResponse, error)
 	// Runs asset discovery. The discovery is tracked with a long-running
@@ -2331,6 +2693,9 @@
 	// Creates or updates a finding. The corresponding source must exist for a
 	// finding creation to succeed.
 	UpdateFinding(ctx context.Context, in *UpdateFindingRequest, opts ...grpc.CallOption) (*Finding, error)
+	//
+	// Updates a notification config.
+	UpdateNotificationConfig(ctx context.Context, in *UpdateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error)
 	// Updates an organization's settings.
 	UpdateOrganizationSettings(ctx context.Context, in *UpdateOrganizationSettingsRequest, opts ...grpc.CallOption) (*OrganizationSettings, error)
 	// Updates a source.
@@ -2365,6 +2730,24 @@
 	return out, nil
 }
 
+func (c *securityCenterClient) CreateNotificationConfig(ctx context.Context, in *CreateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) {
+	out := new(NotificationConfig)
+	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *securityCenterClient) DeleteNotificationConfig(ctx context.Context, in *DeleteNotificationConfigRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *securityCenterClient) GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) {
 	out := new(v1.Policy)
 	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy", in, out, opts...)
@@ -2374,6 +2757,15 @@
 	return out, nil
 }
 
+func (c *securityCenterClient) GetNotificationConfig(ctx context.Context, in *GetNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) {
+	out := new(NotificationConfig)
+	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *securityCenterClient) GetOrganizationSettings(ctx context.Context, in *GetOrganizationSettingsRequest, opts ...grpc.CallOption) (*OrganizationSettings, error) {
 	out := new(OrganizationSettings)
 	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings", in, out, opts...)
@@ -2428,6 +2820,15 @@
 	return out, nil
 }
 
+func (c *securityCenterClient) ListNotificationConfigs(ctx context.Context, in *ListNotificationConfigsRequest, opts ...grpc.CallOption) (*ListNotificationConfigsResponse, error) {
+	out := new(ListNotificationConfigsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *securityCenterClient) ListSources(ctx context.Context, in *ListSourcesRequest, opts ...grpc.CallOption) (*ListSourcesResponse, error) {
 	out := new(ListSourcesResponse)
 	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/ListSources", in, out, opts...)
@@ -2482,6 +2883,15 @@
 	return out, nil
 }
 
+func (c *securityCenterClient) UpdateNotificationConfig(ctx context.Context, in *UpdateNotificationConfigRequest, opts ...grpc.CallOption) (*NotificationConfig, error) {
+	out := new(NotificationConfig)
+	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *securityCenterClient) UpdateOrganizationSettings(ctx context.Context, in *UpdateOrganizationSettingsRequest, opts ...grpc.CallOption) (*OrganizationSettings, error) {
 	out := new(OrganizationSettings)
 	err := c.cc.Invoke(ctx, "/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings", in, out, opts...)
@@ -2516,8 +2926,14 @@
 	// Creates a finding. The corresponding source must exist for finding creation
 	// to succeed.
 	CreateFinding(context.Context, *CreateFindingRequest) (*Finding, error)
+	// Creates a notification config.
+	CreateNotificationConfig(context.Context, *CreateNotificationConfigRequest) (*NotificationConfig, error)
+	// Deletes a notification config.
+	DeleteNotificationConfig(context.Context, *DeleteNotificationConfigRequest) (*empty.Empty, error)
 	// Gets the access control policy on the specified Source.
 	GetIamPolicy(context.Context, *v1.GetIamPolicyRequest) (*v1.Policy, error)
+	// Gets a notification config.
+	GetNotificationConfig(context.Context, *GetNotificationConfigRequest) (*NotificationConfig, error)
 	// Gets the settings for an organization.
 	GetOrganizationSettings(context.Context, *GetOrganizationSettingsRequest) (*OrganizationSettings, error)
 	// Gets a source.
@@ -2538,6 +2954,8 @@
 	// To list across all sources provide a `-` as the source id.
 	// Example: /v1/organizations/{organization_id}/sources/-/findings
 	ListFindings(context.Context, *ListFindingsRequest) (*ListFindingsResponse, error)
+	// Lists notification configs.
+	ListNotificationConfigs(context.Context, *ListNotificationConfigsRequest) (*ListNotificationConfigsResponse, error)
 	// Lists all sources belonging to an organization.
 	ListSources(context.Context, *ListSourcesRequest) (*ListSourcesResponse, error)
 	// Runs asset discovery. The discovery is tracked with a long-running
@@ -2556,6 +2974,9 @@
 	// Creates or updates a finding. The corresponding source must exist for a
 	// finding creation to succeed.
 	UpdateFinding(context.Context, *UpdateFindingRequest) (*Finding, error)
+	//
+	// Updates a notification config.
+	UpdateNotificationConfig(context.Context, *UpdateNotificationConfigRequest) (*NotificationConfig, error)
 	// Updates an organization's settings.
 	UpdateOrganizationSettings(context.Context, *UpdateOrganizationSettingsRequest) (*OrganizationSettings, error)
 	// Updates a source.
@@ -2574,9 +2995,18 @@
 func (*UnimplementedSecurityCenterServer) CreateFinding(ctx context.Context, req *CreateFindingRequest) (*Finding, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method CreateFinding not implemented")
 }
+func (*UnimplementedSecurityCenterServer) CreateNotificationConfig(ctx context.Context, req *CreateNotificationConfigRequest) (*NotificationConfig, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateNotificationConfig not implemented")
+}
+func (*UnimplementedSecurityCenterServer) DeleteNotificationConfig(ctx context.Context, req *DeleteNotificationConfigRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteNotificationConfig not implemented")
+}
 func (*UnimplementedSecurityCenterServer) GetIamPolicy(ctx context.Context, req *v1.GetIamPolicyRequest) (*v1.Policy, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetIamPolicy not implemented")
 }
+func (*UnimplementedSecurityCenterServer) GetNotificationConfig(ctx context.Context, req *GetNotificationConfigRequest) (*NotificationConfig, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetNotificationConfig not implemented")
+}
 func (*UnimplementedSecurityCenterServer) GetOrganizationSettings(ctx context.Context, req *GetOrganizationSettingsRequest) (*OrganizationSettings, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetOrganizationSettings not implemented")
 }
@@ -2595,6 +3025,9 @@
 func (*UnimplementedSecurityCenterServer) ListFindings(ctx context.Context, req *ListFindingsRequest) (*ListFindingsResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ListFindings not implemented")
 }
+func (*UnimplementedSecurityCenterServer) ListNotificationConfigs(ctx context.Context, req *ListNotificationConfigsRequest) (*ListNotificationConfigsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListNotificationConfigs not implemented")
+}
 func (*UnimplementedSecurityCenterServer) ListSources(ctx context.Context, req *ListSourcesRequest) (*ListSourcesResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ListSources not implemented")
 }
@@ -2613,6 +3046,9 @@
 func (*UnimplementedSecurityCenterServer) UpdateFinding(ctx context.Context, req *UpdateFindingRequest) (*Finding, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UpdateFinding not implemented")
 }
+func (*UnimplementedSecurityCenterServer) UpdateNotificationConfig(ctx context.Context, req *UpdateNotificationConfigRequest) (*NotificationConfig, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateNotificationConfig not implemented")
+}
 func (*UnimplementedSecurityCenterServer) UpdateOrganizationSettings(ctx context.Context, req *UpdateOrganizationSettingsRequest) (*OrganizationSettings, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UpdateOrganizationSettings not implemented")
 }
@@ -2663,6 +3099,42 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _SecurityCenter_CreateNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateNotificationConfigRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SecurityCenterServer).CreateNotificationConfig(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SecurityCenterServer).CreateNotificationConfig(ctx, req.(*CreateNotificationConfigRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _SecurityCenter_DeleteNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteNotificationConfigRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SecurityCenterServer).DeleteNotificationConfig(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SecurityCenterServer).DeleteNotificationConfig(ctx, req.(*DeleteNotificationConfigRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _SecurityCenter_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(v1.GetIamPolicyRequest)
 	if err := dec(in); err != nil {
@@ -2681,6 +3153,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _SecurityCenter_GetNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetNotificationConfigRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SecurityCenterServer).GetNotificationConfig(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SecurityCenterServer).GetNotificationConfig(ctx, req.(*GetNotificationConfigRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _SecurityCenter_GetOrganizationSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(GetOrganizationSettingsRequest)
 	if err := dec(in); err != nil {
@@ -2789,6 +3279,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _SecurityCenter_ListNotificationConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListNotificationConfigsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SecurityCenterServer).ListNotificationConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SecurityCenterServer).ListNotificationConfigs(ctx, req.(*ListNotificationConfigsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _SecurityCenter_ListSources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ListSourcesRequest)
 	if err := dec(in); err != nil {
@@ -2897,6 +3405,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _SecurityCenter_UpdateNotificationConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateNotificationConfigRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SecurityCenterServer).UpdateNotificationConfig(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SecurityCenterServer).UpdateNotificationConfig(ctx, req.(*UpdateNotificationConfigRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _SecurityCenter_UpdateOrganizationSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(UpdateOrganizationSettingsRequest)
 	if err := dec(in); err != nil {
@@ -2964,10 +3490,22 @@
 			Handler:    _SecurityCenter_CreateFinding_Handler,
 		},
 		{
+			MethodName: "CreateNotificationConfig",
+			Handler:    _SecurityCenter_CreateNotificationConfig_Handler,
+		},
+		{
+			MethodName: "DeleteNotificationConfig",
+			Handler:    _SecurityCenter_DeleteNotificationConfig_Handler,
+		},
+		{
 			MethodName: "GetIamPolicy",
 			Handler:    _SecurityCenter_GetIamPolicy_Handler,
 		},
 		{
+			MethodName: "GetNotificationConfig",
+			Handler:    _SecurityCenter_GetNotificationConfig_Handler,
+		},
+		{
 			MethodName: "GetOrganizationSettings",
 			Handler:    _SecurityCenter_GetOrganizationSettings_Handler,
 		},
@@ -2992,6 +3530,10 @@
 			Handler:    _SecurityCenter_ListFindings_Handler,
 		},
 		{
+			MethodName: "ListNotificationConfigs",
+			Handler:    _SecurityCenter_ListNotificationConfigs_Handler,
+		},
+		{
 			MethodName: "ListSources",
 			Handler:    _SecurityCenter_ListSources_Handler,
 		},
@@ -3016,6 +3558,10 @@
 			Handler:    _SecurityCenter_UpdateFinding_Handler,
 		},
 		{
+			MethodName: "UpdateNotificationConfig",
+			Handler:    _SecurityCenter_UpdateNotificationConfig_Handler,
+		},
+		{
 			MethodName: "UpdateOrganizationSettings",
 			Handler:    _SecurityCenter_UpdateOrganizationSettings_Handler,
 		},
diff --git a/googleapis/cloud/securitycenter/v1/source.pb.go b/googleapis/cloud/securitycenter/v1/source.pb.go
index 83eea32..58dfe5e 100644
--- a/googleapis/cloud/securitycenter/v1/source.pb.go
+++ b/googleapis/cloud/securitycenter/v1/source.pb.go
@@ -106,25 +106,25 @@
 }
 
 var fileDescriptor_43f5cbeb6a51b224 = []byte{
-	// 312 bytes of a gzipped FileDescriptorProto
+	// 313 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xd1, 0x4a, 0xc3, 0x30,
 	0x14, 0x86, 0xe9, 0x94, 0x81, 0x99, 0x57, 0xbd, 0x9a, 0x43, 0xc6, 0x36, 0xbc, 0x10, 0xc4, 0x84,
 	0xe2, 0x5d, 0xbc, 0xd2, 0x5d, 0x78, 0x23, 0x22, 0x0e, 0x87, 0x48, 0x41, 0x62, 0x1a, 0x42, 0xa0,
 	0xcd, 0x29, 0x49, 0x3b, 0x98, 0x63, 0x2f, 0xe4, 0x2b, 0xf8, 0x06, 0x3e, 0x82, 0x8f, 0xb0, 0xa7,
-	0x90, 0x25, 0x91, 0xb5, 0x82, 0xde, 0x9d, 0x9e, 0xff, 0xeb, 0x39, 0x1f, 0x27, 0xe8, 0x4c, 0x02,
-	0xc8, 0x5c, 0x10, 0x9e, 0x43, 0x9d, 0x11, 0x2b, 0x78, 0x6d, 0x54, 0xb5, 0xe4, 0x42, 0x57, 0xc2,
-	0x90, 0x45, 0x42, 0x2c, 0xd4, 0x86, 0x0b, 0x5c, 0x1a, 0xa8, 0x20, 0x1e, 0x7a, 0x18, 0x3b, 0x18,
-	0xb7, 0x61, 0xbc, 0x48, 0x06, 0x47, 0x61, 0x18, 0x2b, 0x15, 0x31, 0xa2, 0xf9, 0xeb, 0xe0, 0xb8,
-	0x11, 0x31, 0xad, 0xa1, 0x62, 0x95, 0x02, 0x6d, 0x7d, 0x3a, 0xf9, 0x88, 0x50, 0x77, 0xe6, 0xf0,
-	0x38, 0x46, 0xfb, 0x9a, 0x15, 0xa2, 0x1f, 0x8d, 0xa2, 0xd3, 0x83, 0x07, 0x57, 0xc7, 0x63, 0x74,
-	0x98, 0x29, 0x5b, 0xe6, 0x6c, 0xf9, 0xe2, 0xb2, 0x8e, 0xcb, 0x7a, 0xa1, 0x77, 0xb7, 0x45, 0x46,
-	0xa8, 0x97, 0x09, 0xcb, 0x8d, 0x2a, 0xb7, 0x73, 0xfb, 0x7b, 0x81, 0xd8, 0xb5, 0xe8, 0xd3, 0xe6,
-	0xea, 0x11, 0x9d, 0xfc, 0x92, 0xf6, 0x56, 0xac, 0x54, 0x16, 0x73, 0x28, 0x48, 0x70, 0x38, 0x07,
-	0x23, 0x99, 0x56, 0x6f, 0xde, 0x91, 0xac, 0x9a, 0x9f, 0xeb, 0x70, 0x12, 0x4b, 0x56, 0xbe, 0x58,
-	0x5f, 0x7f, 0x45, 0x68, 0xc2, 0xa1, 0xc0, 0xff, 0x5f, 0xe7, 0x3e, 0x7a, 0xbe, 0x0d, 0x84, 0x84,
-	0x9c, 0x69, 0x89, 0xc1, 0x48, 0x22, 0x85, 0x76, 0x27, 0x20, 0x3b, 0x93, 0xbf, 0xde, 0xe2, 0xb2,
-	0xdd, 0x79, 0xef, 0x0c, 0x6f, 0xfc, 0xb8, 0xa9, 0x5b, 0x38, 0x0b, 0xe9, 0xd4, 0x2f, 0x9c, 0x27,
-	0x9f, 0x3f, 0x40, 0xea, 0x80, 0xb4, 0x0d, 0xa4, 0xf3, 0x64, 0xd3, 0x19, 0x7b, 0x80, 0x52, 0x47,
-	0x50, 0xda, 0x46, 0x28, 0x9d, 0x27, 0xaf, 0x5d, 0xa7, 0x77, 0xf1, 0x1d, 0x00, 0x00, 0xff, 0xff,
-	0x3a, 0x3c, 0xa2, 0xf3, 0x29, 0x02, 0x00, 0x00,
+	0x90, 0x25, 0x91, 0xb5, 0x82, 0xde, 0x9d, 0xfe, 0xff, 0xd7, 0x73, 0x7e, 0xfe, 0xa0, 0x33, 0x09,
+	0x20, 0x73, 0x41, 0x78, 0x0e, 0x75, 0x46, 0xac, 0xe0, 0xb5, 0x51, 0xd5, 0x92, 0x0b, 0x5d, 0x09,
+	0x43, 0x16, 0x09, 0xb1, 0x50, 0x1b, 0x2e, 0x70, 0x69, 0xa0, 0x82, 0x78, 0xe8, 0x61, 0xec, 0x60,
+	0xdc, 0x86, 0xf1, 0x22, 0x19, 0x1c, 0x87, 0x65, 0xac, 0x54, 0x84, 0x69, 0x0d, 0x15, 0xab, 0x14,
+	0x68, 0xeb, 0xff, 0x1e, 0x1c, 0x35, 0x5c, 0x23, 0x9a, 0x8b, 0x27, 0x1f, 0x11, 0xea, 0xce, 0x9c,
+	0x10, 0xc7, 0x68, 0x5f, 0xb3, 0x42, 0xf4, 0xa3, 0x51, 0x74, 0x7a, 0xf0, 0xe0, 0xe6, 0x78, 0x8c,
+	0x0e, 0x33, 0x65, 0xcb, 0x9c, 0x2d, 0x5f, 0x9c, 0xd7, 0x71, 0x5e, 0x2f, 0x68, 0x77, 0x5b, 0x64,
+	0x84, 0x7a, 0x99, 0xb0, 0xdc, 0xa8, 0x72, 0x7b, 0xb2, 0xbf, 0x17, 0x88, 0x9d, 0x44, 0x9f, 0x36,
+	0x57, 0x8f, 0xe8, 0xe4, 0x57, 0x68, 0x1f, 0x89, 0x95, 0xca, 0x62, 0x0e, 0x05, 0x09, 0x19, 0xce,
+	0xc1, 0x48, 0xa6, 0xd5, 0x9b, 0x8f, 0x4f, 0x56, 0xcd, 0xcf, 0x75, 0xa8, 0xc4, 0x92, 0x95, 0x1f,
+	0xd6, 0xd7, 0x5f, 0x11, 0x9a, 0x70, 0x28, 0xf0, 0xff, 0xed, 0xdc, 0x47, 0xcf, 0xb7, 0x81, 0x90,
+	0x90, 0x33, 0x2d, 0x31, 0x18, 0x49, 0xa4, 0xd0, 0xae, 0x02, 0xb2, 0x4b, 0xf2, 0xd7, 0x5b, 0x5c,
+	0xb6, 0x95, 0xf7, 0xce, 0xf0, 0xc6, 0xaf, 0x9b, 0xba, 0x83, 0xb3, 0xe0, 0x4e, 0xfd, 0xc1, 0x79,
+	0xf2, 0xf9, 0x03, 0xa4, 0x0e, 0x48, 0xdb, 0x40, 0x3a, 0x4f, 0x36, 0x9d, 0xb1, 0x07, 0x28, 0x75,
+	0x04, 0xa5, 0x6d, 0x84, 0xd2, 0x79, 0xf2, 0xda, 0x75, 0xf1, 0x2e, 0xbe, 0x03, 0x00, 0x00, 0xff,
+	0xff, 0x5a, 0x2b, 0x23, 0xf9, 0x29, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/servicedirectory/v1beta1/endpoint.pb.go b/googleapis/cloud/servicedirectory/v1beta1/endpoint.pb.go
new file mode 100644
index 0000000..476e409
--- /dev/null
+++ b/googleapis/cloud/servicedirectory/v1beta1/endpoint.pb.go
@@ -0,0 +1,143 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/servicedirectory/v1beta1/endpoint.proto
+
+package servicedirectory
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An individual endpoint that provides a
+// [service][google.cloud.servicedirectory.v1beta1.Service]. The service must
+// already exist to create an endpoint.
+type Endpoint struct {
+	// Immutable. The resource name for the endpoint in the format
+	// 'projects/*/locations/*/namespaces/*/services/*/endpoints/*'.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional. An IPv4 or IPv6 address. Service Directory will reject bad
+	// addresses like:
+	//   "8.8.8"
+	//   "8.8.8.8:53"
+	//   "test:bad:address"
+	//   "[::1]"
+	//   "[::1]:8080"
+	// Limited to 45 characters.
+	Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+	// Optional. Service Directory will reject values outside of [0, 65535].
+	Port int32 `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"`
+	// Optional. Metadata for the endpoint. This data can be consumed by service
+	// clients.  The entire metadata dictionary may contain up to 512 characters,
+	// spread accoss all key-value pairs. Metadata that goes beyond any these
+	// limits will be rejected.
+	Metadata             map[string]string `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Endpoint) Reset()         { *m = Endpoint{} }
+func (m *Endpoint) String() string { return proto.CompactTextString(m) }
+func (*Endpoint) ProtoMessage()    {}
+func (*Endpoint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b682dd88b410ee12, []int{0}
+}
+
+func (m *Endpoint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Endpoint.Unmarshal(m, b)
+}
+func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Endpoint.Marshal(b, m, deterministic)
+}
+func (m *Endpoint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Endpoint.Merge(m, src)
+}
+func (m *Endpoint) XXX_Size() int {
+	return xxx_messageInfo_Endpoint.Size(m)
+}
+func (m *Endpoint) XXX_DiscardUnknown() {
+	xxx_messageInfo_Endpoint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Endpoint proto.InternalMessageInfo
+
+func (m *Endpoint) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Endpoint) GetAddress() string {
+	if m != nil {
+		return m.Address
+	}
+	return ""
+}
+
+func (m *Endpoint) GetPort() int32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *Endpoint) GetMetadata() map[string]string {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Endpoint)(nil), "google.cloud.servicedirectory.v1beta1.Endpoint")
+	proto.RegisterMapType((map[string]string)(nil), "google.cloud.servicedirectory.v1beta1.Endpoint.MetadataEntry")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/servicedirectory/v1beta1/endpoint.proto", fileDescriptor_b682dd88b410ee12)
+}
+
+var fileDescriptor_b682dd88b410ee12 = []byte{
+	// 401 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x41, 0x8b, 0xd4, 0x30,
+	0x18, 0x25, 0xdb, 0x1d, 0x5d, 0x23, 0x0b, 0x52, 0x04, 0xeb, 0xa0, 0x38, 0x08, 0x42, 0xbd, 0x24,
+	0xac, 0x7a, 0x90, 0x5d, 0x3c, 0xec, 0xc0, 0x1e, 0x85, 0xa5, 0xe0, 0xc5, 0x83, 0x92, 0x49, 0xbf,
+	0xad, 0xd1, 0x36, 0x5f, 0x49, 0x32, 0x85, 0xa1, 0xf4, 0x47, 0xe8, 0x61, 0x7e, 0x9f, 0x67, 0x7f,
+	0x81, 0x47, 0x69, 0x93, 0xd6, 0x71, 0x3c, 0xec, 0xdc, 0x5e, 0xbf, 0xd7, 0xf7, 0x78, 0xdf, 0xcb,
+	0x47, 0xdf, 0x14, 0x88, 0x45, 0x09, 0x5c, 0x96, 0xb8, 0xce, 0xb9, 0x05, 0xd3, 0x28, 0x09, 0xb9,
+	0x32, 0x20, 0x1d, 0x9a, 0x0d, 0x6f, 0xce, 0x56, 0xe0, 0xc4, 0x19, 0x07, 0x9d, 0xd7, 0xa8, 0xb4,
+	0x63, 0xb5, 0x41, 0x87, 0xf1, 0x0b, 0xaf, 0x62, 0x83, 0x8a, 0xed, 0xab, 0x58, 0x50, 0xcd, 0x9f,
+	0x05, 0x73, 0x51, 0x2b, 0x7e, 0xa3, 0xa0, 0xcc, 0x3f, 0xaf, 0xe0, 0x8b, 0x68, 0x14, 0x1a, 0xef,
+	0x33, 0x7f, 0xbc, 0xf3, 0x83, 0x01, 0x8b, 0x6b, 0x23, 0x21, 0x50, 0x4f, 0x76, 0x28, 0xa1, 0x35,
+	0x3a, 0xe1, 0x14, 0x6a, 0xeb, 0xd9, 0xe7, 0xdf, 0x23, 0x7a, 0x72, 0x15, 0x32, 0xc5, 0x8f, 0xe8,
+	0xb1, 0x16, 0x15, 0x24, 0x64, 0x41, 0xd2, 0x7b, 0xcb, 0xe8, 0xe7, 0xe5, 0x2c, 0x1b, 0x06, 0xf1,
+	0x53, 0x7a, 0x57, 0xe4, 0xb9, 0x01, 0x6b, 0x93, 0xa3, 0x91, 0x23, 0xd9, 0x38, 0xeb, 0x75, 0x35,
+	0x1a, 0x97, 0x44, 0x0b, 0x92, 0xce, 0x3c, 0x37, 0x0c, 0xe2, 0x4f, 0xf4, 0xa4, 0x02, 0x27, 0x72,
+	0xe1, 0x44, 0x72, 0xbc, 0x88, 0xd2, 0xfb, 0xaf, 0xde, 0xb1, 0x83, 0x36, 0x66, 0x63, 0x26, 0xf6,
+	0x3e, 0xe8, 0xaf, 0xb4, 0x33, 0x1b, 0xef, 0x3d, 0x79, 0xce, 0x2f, 0xe8, 0xe9, 0x3f, 0x7c, 0xfc,
+	0x80, 0x46, 0xdf, 0x60, 0xe3, 0x17, 0xc8, 0x7a, 0x18, 0x3f, 0xa4, 0xb3, 0x46, 0x94, 0x6b, 0xf0,
+	0xc1, 0x33, 0xff, 0x71, 0x7e, 0xf4, 0x96, 0x9c, 0x6f, 0xc9, 0xaf, 0xcb, 0x1f, 0x84, 0xa6, 0xff,
+	0x65, 0xf0, 0x09, 0x45, 0xad, 0x2c, 0x93, 0x58, 0xf1, 0xa9, 0x9e, 0x9b, 0xda, 0xe0, 0x57, 0x90,
+	0xce, 0xf2, 0x36, 0xa0, 0x8e, 0x97, 0x28, 0x7d, 0x9f, 0xbc, 0x1d, 0x61, 0xc7, 0xfb, 0xce, 0x6c,
+	0x2d, 0x24, 0x58, 0xde, 0x4e, 0xb8, 0x1b, 0x8f, 0xc2, 0xf2, 0x36, 0xa0, 0x6e, 0x3a, 0x07, 0xcb,
+	0xdb, 0x11, 0x76, 0xcb, 0x2d, 0xa1, 0x2f, 0x25, 0x56, 0x87, 0x35, 0xb5, 0x3c, 0x1d, 0xf3, 0x5d,
+	0xf7, 0x0f, 0x7a, 0x4d, 0x3e, 0x7e, 0x08, 0xba, 0x02, 0x4b, 0xa1, 0x0b, 0x86, 0xa6, 0xe0, 0x05,
+	0xe8, 0xe1, 0xb9, 0xf9, 0xdf, 0xd5, 0x6e, 0x39, 0xd4, 0x8b, 0x7d, 0xe2, 0x37, 0x21, 0xab, 0x3b,
+	0x83, 0xc9, 0xeb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x87, 0x47, 0xb3, 0x0b, 0xec, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/cloud/servicedirectory/v1beta1/lookup_service.pb.go b/googleapis/cloud/servicedirectory/v1beta1/lookup_service.pb.go
new file mode 100644
index 0000000..cebf332
--- /dev/null
+++ b/googleapis/cloud/servicedirectory/v1beta1/lookup_service.pb.go
@@ -0,0 +1,276 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/servicedirectory/v1beta1/lookup_service.proto
+
+package servicedirectory
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The request message for [LookupService.ResolveService][google.cloud.servicedirectory.v1beta1.LookupService.ResolveService].
+// Looks up a service by its name, returns the service and its endpoints.
+type ResolveServiceRequest struct {
+	// Required. The name of the service to resolve.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100.
+	// If a value less than one is specified, the Default is used.
+	// If a value greater than the Maximum is specified, the Maximum is used.
+	MaxEndpoints int32 `protobuf:"varint,2,opt,name=max_endpoints,json=maxEndpoints,proto3" json:"max_endpoints,omitempty"`
+	// Optional. The filter applied to the endpoints of the resolved service.
+	//
+	// General filter string syntax:
+	// <field> <operator> <value> (<logical connector>)
+	// <field> can be "name" or "metadata.<key>" for map field.
+	// <operator> can be "<, >, <=, >=, !=, =, :". Of which ":" means HAS and is
+	// roughly the same as "=".
+	// <value> must be the same data type as the field.
+	// <logical connector> can be "AND, OR, NOT".
+	//
+	// Examples of valid filters:
+	// * "metadata.owner" returns Endpoints that have a label with the
+	//   key "owner", this is the same as "metadata:owner"
+	// * "metadata.protocol=gRPC" returns Endpoints that have key/value
+	//   "protocol=gRPC"
+	// * "metadata.owner!=sd AND metadata.foo=bar" returns
+	//   Endpoints that have "owner" field in metadata with a value that is not
+	//   "sd" AND have the key/value foo=bar.
+	EndpointFilter       string   `protobuf:"bytes,3,opt,name=endpoint_filter,json=endpointFilter,proto3" json:"endpoint_filter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResolveServiceRequest) Reset()         { *m = ResolveServiceRequest{} }
+func (m *ResolveServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*ResolveServiceRequest) ProtoMessage()    {}
+func (*ResolveServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3fa925bc9d6d26cd, []int{0}
+}
+
+func (m *ResolveServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResolveServiceRequest.Unmarshal(m, b)
+}
+func (m *ResolveServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResolveServiceRequest.Marshal(b, m, deterministic)
+}
+func (m *ResolveServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResolveServiceRequest.Merge(m, src)
+}
+func (m *ResolveServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_ResolveServiceRequest.Size(m)
+}
+func (m *ResolveServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResolveServiceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResolveServiceRequest proto.InternalMessageInfo
+
+func (m *ResolveServiceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *ResolveServiceRequest) GetMaxEndpoints() int32 {
+	if m != nil {
+		return m.MaxEndpoints
+	}
+	return 0
+}
+
+func (m *ResolveServiceRequest) GetEndpointFilter() string {
+	if m != nil {
+		return m.EndpointFilter
+	}
+	return ""
+}
+
+// The response message for [LookupService.ResolveService][google.cloud.servicedirectory.v1beta1.LookupService.ResolveService].
+type ResolveServiceResponse struct {
+	Service              *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResolveServiceResponse) Reset()         { *m = ResolveServiceResponse{} }
+func (m *ResolveServiceResponse) String() string { return proto.CompactTextString(m) }
+func (*ResolveServiceResponse) ProtoMessage()    {}
+func (*ResolveServiceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_3fa925bc9d6d26cd, []int{1}
+}
+
+func (m *ResolveServiceResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResolveServiceResponse.Unmarshal(m, b)
+}
+func (m *ResolveServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResolveServiceResponse.Marshal(b, m, deterministic)
+}
+func (m *ResolveServiceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResolveServiceResponse.Merge(m, src)
+}
+func (m *ResolveServiceResponse) XXX_Size() int {
+	return xxx_messageInfo_ResolveServiceResponse.Size(m)
+}
+func (m *ResolveServiceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResolveServiceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResolveServiceResponse proto.InternalMessageInfo
+
+func (m *ResolveServiceResponse) GetService() *Service {
+	if m != nil {
+		return m.Service
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ResolveServiceRequest)(nil), "google.cloud.servicedirectory.v1beta1.ResolveServiceRequest")
+	proto.RegisterType((*ResolveServiceResponse)(nil), "google.cloud.servicedirectory.v1beta1.ResolveServiceResponse")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/servicedirectory/v1beta1/lookup_service.proto", fileDescriptor_3fa925bc9d6d26cd)
+}
+
+var fileDescriptor_3fa925bc9d6d26cd = []byte{
+	// 487 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcd, 0x8a, 0x13, 0x41,
+	0x10, 0xa6, 0xb3, 0xfe, 0x60, 0xeb, 0xae, 0x30, 0xa0, 0xc6, 0x41, 0xd8, 0x25, 0x20, 0x66, 0x83,
+	0x76, 0xb3, 0xbb, 0xb7, 0xe8, 0x1e, 0x12, 0x71, 0x11, 0xf4, 0xb0, 0x66, 0xf1, 0xe2, 0x25, 0x74,
+	0x26, 0x95, 0x49, 0x6b, 0x4f, 0x57, 0xdb, 0xdd, 0x93, 0xac, 0x88, 0x17, 0x5f, 0xc1, 0xa3, 0xaf,
+	0xe1, 0x3b, 0x08, 0x1e, 0xf5, 0x05, 0x72, 0xf0, 0x21, 0xc4, 0x93, 0x64, 0x7a, 0x46, 0x93, 0x28,
+	0x6c, 0xf0, 0xd8, 0x7c, 0xf5, 0x7d, 0xf5, 0x55, 0xd5, 0xd7, 0xb4, 0x9d, 0x22, 0xa6, 0x0a, 0x78,
+	0xa2, 0x30, 0x1f, 0x72, 0x07, 0x76, 0x22, 0x13, 0x18, 0x4a, 0x0b, 0x89, 0x47, 0xfb, 0x86, 0x4f,
+	0xf6, 0x06, 0xe0, 0xc5, 0x1e, 0x57, 0x88, 0xaf, 0x72, 0xd3, 0x2f, 0x71, 0x66, 0x2c, 0x7a, 0x8c,
+	0x6e, 0x07, 0x2e, 0x2b, 0xb8, 0x6c, 0x95, 0xcb, 0x4a, 0x6e, 0x7c, 0xab, 0x6c, 0x21, 0x8c, 0xe4,
+	0x42, 0x6b, 0xf4, 0xc2, 0x4b, 0xd4, 0x2e, 0x88, 0xc4, 0xdb, 0x0b, 0xe8, 0x48, 0x82, 0x1a, 0xf6,
+	0x07, 0x30, 0x16, 0x13, 0x89, 0xb6, 0x2c, 0xb8, 0xb9, 0x50, 0x60, 0xc1, 0x61, 0x6e, 0x2b, 0x03,
+	0xf1, 0xc1, 0x7a, 0xe6, 0x97, 0x5c, 0xc7, 0x37, 0x16, 0xf4, 0x12, 0x25, 0x41, 0xfb, 0x00, 0x34,
+	0x3e, 0x11, 0x7a, 0xad, 0x07, 0x0e, 0xd5, 0x04, 0x4e, 0x02, 0xa3, 0x07, 0xaf, 0x73, 0x70, 0x3e,
+	0x7a, 0x48, 0xcf, 0x69, 0x91, 0x41, 0x9d, 0xec, 0x90, 0xe6, 0xa5, 0x2e, 0x9f, 0x75, 0x6a, 0x3f,
+	0x3b, 0xbb, 0xf4, 0xce, 0x5f, 0x13, 0x07, 0x65, 0x61, 0xa4, 0x63, 0x09, 0x66, 0xbc, 0x52, 0x29,
+	0xc8, 0x51, 0x93, 0x6e, 0x66, 0xe2, 0xb4, 0x0f, 0x7a, 0x68, 0x50, 0x6a, 0xef, 0xea, 0xb5, 0x1d,
+	0xd2, 0x3c, 0xdf, 0xdd, 0x98, 0x75, 0x48, 0xef, 0x4a, 0x26, 0x4e, 0x1f, 0x55, 0x40, 0x74, 0x97,
+	0x5e, 0xad, 0xaa, 0xfa, 0x23, 0xa9, 0x3c, 0xd8, 0xfa, 0x46, 0xd1, 0xb9, 0xa8, 0xdd, 0xaa, 0xb0,
+	0xa3, 0x02, 0x6a, 0x0c, 0xe8, 0xf5, 0x55, 0xd7, 0xce, 0xa0, 0x76, 0x10, 0x3d, 0xa6, 0x17, 0x4b,
+	0x8b, 0x85, 0xf3, 0xcb, 0xfb, 0x8c, 0xad, 0x75, 0x31, 0x56, 0x09, 0x55, 0xf4, 0xfd, 0xcf, 0x35,
+	0xba, 0xf9, 0xb4, 0x88, 0x40, 0x09, 0x45, 0x33, 0x42, 0xb7, 0x96, 0xdb, 0x46, 0x0f, 0xd6, 0x54,
+	0xff, 0xe7, 0x8e, 0xe3, 0xc3, 0xff, 0x64, 0x87, 0x59, 0x1b, 0xcf, 0xde, 0x7f, 0xfb, 0xfe, 0xa1,
+	0xf6, 0xa4, 0x71, 0xf4, 0xfb, 0xea, 0x6f, 0xe7, 0x5b, 0x3f, 0x34, 0x16, 0x5f, 0x42, 0xe2, 0x1d,
+	0x6f, 0x71, 0x85, 0x49, 0x48, 0x1e, 0x6f, 0xf1, 0x39, 0xe6, 0x8c, 0x48, 0x60, 0xfe, 0x28, 0x7b,
+	0x39, 0xde, 0x7a, 0xd7, 0xb6, 0x41, 0xbe, 0x4d, 0x5a, 0xf1, 0xc9, 0x97, 0xce, 0xf6, 0x19, 0x27,
+	0xfe, 0xda, 0x61, 0x63, 0xef, 0x8d, 0x6b, 0x73, 0x3e, 0x9d, 0x4e, 0x57, 0xef, 0x2f, 0x72, 0x3f,
+	0x0e, 0xd9, 0xbc, 0x67, 0x94, 0xf0, 0x23, 0xb4, 0x59, 0xf7, 0x23, 0xa1, 0xbb, 0x09, 0x66, 0xeb,
+	0x0d, 0xdb, 0x8d, 0x96, 0x96, 0x7e, 0x3c, 0x8f, 0xe9, 0x31, 0x79, 0xf1, 0xbc, 0x24, 0xa7, 0xa8,
+	0x84, 0x4e, 0x19, 0xda, 0x94, 0xa7, 0xa0, 0x8b, 0x10, 0xf3, 0x3f, 0x16, 0xce, 0xf8, 0x15, 0xf7,
+	0x57, 0x81, 0x1f, 0x84, 0x0c, 0x2e, 0x14, 0x22, 0x07, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2e,
+	0xca, 0x4c, 0x51, 0x16, 0x04, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// LookupServiceClient is the client API for LookupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LookupServiceClient interface {
+	// Returns a [service][google.cloud.servicedirectory.v1beta1.Service] and its
+	// associated endpoints.
+	// Resolving a service is not considered an active developer method.
+	ResolveService(ctx context.Context, in *ResolveServiceRequest, opts ...grpc.CallOption) (*ResolveServiceResponse, error)
+}
+
+type lookupServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewLookupServiceClient(cc grpc.ClientConnInterface) LookupServiceClient {
+	return &lookupServiceClient{cc}
+}
+
+func (c *lookupServiceClient) ResolveService(ctx context.Context, in *ResolveServiceRequest, opts ...grpc.CallOption) (*ResolveServiceResponse, error) {
+	out := new(ResolveServiceResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.LookupService/ResolveService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LookupServiceServer is the server API for LookupService service.
+type LookupServiceServer interface {
+	// Returns a [service][google.cloud.servicedirectory.v1beta1.Service] and its
+	// associated endpoints.
+	// Resolving a service is not considered an active developer method.
+	ResolveService(context.Context, *ResolveServiceRequest) (*ResolveServiceResponse, error)
+}
+
+// UnimplementedLookupServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedLookupServiceServer struct {
+}
+
+func (*UnimplementedLookupServiceServer) ResolveService(ctx context.Context, req *ResolveServiceRequest) (*ResolveServiceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ResolveService not implemented")
+}
+
+func RegisterLookupServiceServer(s *grpc.Server, srv LookupServiceServer) {
+	s.RegisterService(&_LookupService_serviceDesc, srv)
+}
+
+func _LookupService_ResolveService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ResolveServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LookupServiceServer).ResolveService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.LookupService/ResolveService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LookupServiceServer).ResolveService(ctx, req.(*ResolveServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LookupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.servicedirectory.v1beta1.LookupService",
+	HandlerType: (*LookupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ResolveService",
+			Handler:    _LookupService_ResolveService_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/servicedirectory/v1beta1/lookup_service.proto",
+}
diff --git a/googleapis/cloud/servicedirectory/v1beta1/namespace.pb.go b/googleapis/cloud/servicedirectory/v1beta1/namespace.pb.go
new file mode 100644
index 0000000..e80e826
--- /dev/null
+++ b/googleapis/cloud/servicedirectory/v1beta1/namespace.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/servicedirectory/v1beta1/namespace.proto
+
+package servicedirectory
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A container for [services][google.cloud.servicedirectory.v1beta1.Service].
+// Namespaces allow administrators to group services together and define
+// permissions for a collection of services.
+type Namespace struct {
+	// Immutable. The resource name for the namespace in the format
+	// 'projects/*/locations/*/namespaces/*'.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional. Resource labels associated with this Namespace.
+	// No more than 64 user labels can be associated with a given resource.  Label
+	// keys and values can be no longer than 63 characters.
+	Labels               map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Namespace) Reset()         { *m = Namespace{} }
+func (m *Namespace) String() string { return proto.CompactTextString(m) }
+func (*Namespace) ProtoMessage()    {}
+func (*Namespace) Descriptor() ([]byte, []int) {
+	return fileDescriptor_aedd900d4e39df62, []int{0}
+}
+
+func (m *Namespace) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Namespace.Unmarshal(m, b)
+}
+func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Namespace.Marshal(b, m, deterministic)
+}
+func (m *Namespace) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Namespace.Merge(m, src)
+}
+func (m *Namespace) XXX_Size() int {
+	return xxx_messageInfo_Namespace.Size(m)
+}
+func (m *Namespace) XXX_DiscardUnknown() {
+	xxx_messageInfo_Namespace.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Namespace proto.InternalMessageInfo
+
+func (m *Namespace) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Namespace) GetLabels() map[string]string {
+	if m != nil {
+		return m.Labels
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Namespace)(nil), "google.cloud.servicedirectory.v1beta1.Namespace")
+	proto.RegisterMapType((map[string]string)(nil), "google.cloud.servicedirectory.v1beta1.Namespace.LabelsEntry")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/servicedirectory/v1beta1/namespace.proto", fileDescriptor_aedd900d4e39df62)
+}
+
+var fileDescriptor_aedd900d4e39df62 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4d, 0x4b, 0xc3, 0x40,
+	0x10, 0x65, 0x53, 0x5b, 0xe8, 0x16, 0x44, 0x82, 0x60, 0x0d, 0x82, 0x45, 0x10, 0xda, 0xcb, 0x2e,
+	0x55, 0x04, 0xad, 0x22, 0xb4, 0xe0, 0x4d, 0xa4, 0x14, 0x3c, 0xe8, 0x45, 0x36, 0xdb, 0x31, 0xc6,
+	0x6e, 0x77, 0xc2, 0x6e, 0x1a, 0x28, 0xa5, 0xbf, 0xc3, 0xff, 0xe0, 0xaf, 0xf2, 0xec, 0x2f, 0xf0,
+	0x28, 0xf9, 0xe8, 0x07, 0xf5, 0x60, 0x6f, 0x2f, 0xf3, 0xf2, 0xde, 0xbc, 0x99, 0x59, 0x7a, 0x11,
+	0x20, 0x06, 0x0a, 0xb8, 0x54, 0x38, 0x19, 0x72, 0x0b, 0x26, 0x09, 0x25, 0x0c, 0x43, 0x03, 0x32,
+	0x46, 0x33, 0xe5, 0x49, 0xdb, 0x87, 0x58, 0xb4, 0xb9, 0x16, 0x63, 0xb0, 0x91, 0x90, 0xc0, 0x22,
+	0x83, 0x31, 0xba, 0xa7, 0xb9, 0x8c, 0x65, 0x32, 0xb6, 0x29, 0x63, 0x85, 0xcc, 0x3b, 0x2e, 0xdc,
+	0x45, 0x14, 0xf2, 0xd7, 0x10, 0xd4, 0xf0, 0xc5, 0x87, 0x37, 0x91, 0x84, 0x68, 0x72, 0x1f, 0xef,
+	0x70, 0xed, 0x07, 0x03, 0x16, 0x27, 0x66, 0xd1, 0xc2, 0x3b, 0x5a, 0xa3, 0x84, 0xd6, 0x18, 0x8b,
+	0x38, 0x44, 0x6d, 0x73, 0xf6, 0xe4, 0xd3, 0xa1, 0xd5, 0x87, 0x45, 0x28, 0xf7, 0x80, 0xee, 0xa4,
+	0x09, 0xeb, 0xa4, 0x41, 0x9a, 0xd5, 0x5e, 0xe9, 0xab, 0x5b, 0x1e, 0x64, 0x05, 0xf7, 0x89, 0x56,
+	0x94, 0xf0, 0x41, 0xd9, 0xba, 0xd3, 0x28, 0x35, 0x6b, 0x67, 0x37, 0x6c, 0xab, 0xe0, 0x6c, 0x69,
+	0xcd, 0xee, 0x33, 0xf9, 0x9d, 0x8e, 0xcd, 0x34, 0x35, 0x26, 0x83, 0xc2, 0xd0, 0xbb, 0xa2, 0xb5,
+	0x35, 0xce, 0xdd, 0xa3, 0xa5, 0x11, 0x4c, 0xf3, 0x04, 0x83, 0x14, 0xba, 0xfb, 0xb4, 0x9c, 0x08,
+	0x35, 0x81, 0xba, 0x93, 0xd5, 0xf2, 0x8f, 0x8e, 0x73, 0x49, 0x3a, 0xfa, 0xbb, 0x3b, 0xa2, 0xad,
+	0x3f, 0xcd, 0xf3, 0x68, 0x22, 0x0a, 0x2d, 0x93, 0x38, 0xe6, 0xab, 0xf1, 0x6e, 0x23, 0x83, 0xef,
+	0x20, 0x63, 0xcb, 0x67, 0x05, 0x9a, 0x73, 0x85, 0x32, 0x5f, 0x08, 0x9f, 0x2d, 0xe0, 0x7c, 0x75,
+	0x26, 0xcb, 0x67, 0x4b, 0x3c, 0xef, 0x7d, 0x10, 0xda, 0x92, 0x38, 0xde, 0x6e, 0xf6, 0xde, 0xee,
+	0xb2, 0x71, 0x3f, 0x5d, 0x75, 0x9f, 0x3c, 0x3f, 0x16, 0xc2, 0x00, 0x95, 0xd0, 0x01, 0x43, 0x13,
+	0xf0, 0x00, 0x74, 0x76, 0x08, 0xbe, 0x0a, 0xfd, 0xcf, 0x1b, 0xba, 0xde, 0x24, 0x7e, 0x08, 0xf1,
+	0x2b, 0x99, 0xc9, 0xf9, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x3b, 0x4e, 0xe5, 0x87, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/cloud/servicedirectory/v1beta1/registration_service.pb.go b/googleapis/cloud/servicedirectory/v1beta1/registration_service.pb.go
new file mode 100644
index 0000000..71ce1b2
--- /dev/null
+++ b/googleapis/cloud/servicedirectory/v1beta1/registration_service.pb.go
@@ -0,0 +1,1952 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/servicedirectory/v1beta1/registration_service.proto
+
+package servicedirectory
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	empty "github.com/golang/protobuf/ptypes/empty"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	v1 "google.golang.org/genproto/googleapis/iam/v1"
+	field_mask "google.golang.org/genproto/protobuf/field_mask"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The request message for [RegistrationService.CreateNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateNamespace].
+type CreateNamespaceRequest struct {
+	// Required. The resource name of the project and location the namespace
+	// will be created in.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required. The Resource ID must be 1-63 characters long, and comply with
+	// <a href="https://www.ietf.org/rfc/rfc1035.txt" target="_blank">RFC1035</a>.
+	// Specifically, the name must be 1-63 characters long and match the regular
+	// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first
+	// character must be a lowercase letter, and all following characters must
+	// be a dash, lowercase letter, or digit, except the last character, which
+	// cannot be a dash.
+	NamespaceId string `protobuf:"bytes,2,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"`
+	// Required. A namespace with initial fields set.
+	Namespace            *Namespace `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *CreateNamespaceRequest) Reset()         { *m = CreateNamespaceRequest{} }
+func (m *CreateNamespaceRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateNamespaceRequest) ProtoMessage()    {}
+func (*CreateNamespaceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{0}
+}
+
+func (m *CreateNamespaceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateNamespaceRequest.Unmarshal(m, b)
+}
+func (m *CreateNamespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateNamespaceRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateNamespaceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateNamespaceRequest.Merge(m, src)
+}
+func (m *CreateNamespaceRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateNamespaceRequest.Size(m)
+}
+func (m *CreateNamespaceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateNamespaceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateNamespaceRequest proto.InternalMessageInfo
+
+func (m *CreateNamespaceRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateNamespaceRequest) GetNamespaceId() string {
+	if m != nil {
+		return m.NamespaceId
+	}
+	return ""
+}
+
+func (m *CreateNamespaceRequest) GetNamespace() *Namespace {
+	if m != nil {
+		return m.Namespace
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.ListNamespaces][google.cloud.servicedirectory.v1beta1.RegistrationService.ListNamespaces].
+type ListNamespacesRequest struct {
+	// Required. The resource name of the project and location whose namespaces we'd like to
+	// list.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional. The maximum number of items to return.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional. The next_page_token value returned from a previous List request, if any.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional. The filter to list result by.
+	//
+	// General filter string syntax:
+	// <field> <operator> <value> (<logical connector>)
+	// <field> can be "name", or "labels.<key>" for map field.
+	// <operator> can be "<, >, <=, >=, !=, =, :". Of which ":" means HAS, and
+	// is roughly the same as "=".
+	// <value> must be the same data type as field.
+	// <logical connector> can be "AND, OR, NOT".
+	//
+	// Examples of valid filters:
+	// * "labels.owner" returns Namespaces that have a label with the key "owner"
+	//   this is the same as "labels:owner".
+	// * "labels.protocol=gRPC" returns Namespaces that have key/value
+	//   "protocol=gRPC".
+	// * "name>projects/my-project/locations/us-east/namespaces/namespace-c"
+	//   returns Namespaces that have name that is alphabetically later than the
+	//   string, so "namespace-e" will be returned but "namespace-a" will not be.
+	// * "labels.owner!=sd AND labels.foo=bar" returns Namespaces that have
+	//   "owner" in label key but value is not "sd" AND have key/value foo=bar.
+	// * "doesnotexist.foo=bar" returns an empty list. Note that Namespace doesn't
+	//   have a field called "doesnotexist". Since the filter does not match any
+	//   Namespaces, it returns no results.
+	Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"`
+	// Optional. The order to list result by.
+	//
+	// General order by string syntax:
+	// <field> (<asc|desc>) (,)
+	// <field> allows values {"name"}
+	// <asc/desc> ascending or descending order by <field>. If this is left
+	// blank, "asc" is used.
+	// Note that an empty order_by string result in default order, which is order
+	// by name in ascending order.
+	OrderBy              string   `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListNamespacesRequest) Reset()         { *m = ListNamespacesRequest{} }
+func (m *ListNamespacesRequest) String() string { return proto.CompactTextString(m) }
+func (*ListNamespacesRequest) ProtoMessage()    {}
+func (*ListNamespacesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{1}
+}
+
+func (m *ListNamespacesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNamespacesRequest.Unmarshal(m, b)
+}
+func (m *ListNamespacesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNamespacesRequest.Marshal(b, m, deterministic)
+}
+func (m *ListNamespacesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNamespacesRequest.Merge(m, src)
+}
+func (m *ListNamespacesRequest) XXX_Size() int {
+	return xxx_messageInfo_ListNamespacesRequest.Size(m)
+}
+func (m *ListNamespacesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNamespacesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListNamespacesRequest proto.InternalMessageInfo
+
+func (m *ListNamespacesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListNamespacesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListNamespacesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListNamespacesRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func (m *ListNamespacesRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+// The response message for [RegistrationService.ListNamespaces][google.cloud.servicedirectory.v1beta1.RegistrationService.ListNamespaces].
+type ListNamespacesResponse struct {
+	// The list of namespaces.
+	Namespaces []*Namespace `protobuf:"bytes,1,rep,name=namespaces,proto3" json:"namespaces,omitempty"`
+	// Token to retrieve the next page of results, or empty if there are no
+	// more results in the list.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListNamespacesResponse) Reset()         { *m = ListNamespacesResponse{} }
+func (m *ListNamespacesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListNamespacesResponse) ProtoMessage()    {}
+func (*ListNamespacesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{2}
+}
+
+func (m *ListNamespacesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNamespacesResponse.Unmarshal(m, b)
+}
+func (m *ListNamespacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNamespacesResponse.Marshal(b, m, deterministic)
+}
+func (m *ListNamespacesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNamespacesResponse.Merge(m, src)
+}
+func (m *ListNamespacesResponse) XXX_Size() int {
+	return xxx_messageInfo_ListNamespacesResponse.Size(m)
+}
+func (m *ListNamespacesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNamespacesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListNamespacesResponse proto.InternalMessageInfo
+
+func (m *ListNamespacesResponse) GetNamespaces() []*Namespace {
+	if m != nil {
+		return m.Namespaces
+	}
+	return nil
+}
+
+func (m *ListNamespacesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.GetNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.GetNamespace].
+type GetNamespaceRequest struct {
+	// Required. The name of the namespace to retrieve.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetNamespaceRequest) Reset()         { *m = GetNamespaceRequest{} }
+func (m *GetNamespaceRequest) String() string { return proto.CompactTextString(m) }
+func (*GetNamespaceRequest) ProtoMessage()    {}
+func (*GetNamespaceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{3}
+}
+
+func (m *GetNamespaceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetNamespaceRequest.Unmarshal(m, b)
+}
+func (m *GetNamespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetNamespaceRequest.Marshal(b, m, deterministic)
+}
+func (m *GetNamespaceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetNamespaceRequest.Merge(m, src)
+}
+func (m *GetNamespaceRequest) XXX_Size() int {
+	return xxx_messageInfo_GetNamespaceRequest.Size(m)
+}
+func (m *GetNamespaceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetNamespaceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetNamespaceRequest proto.InternalMessageInfo
+
+func (m *GetNamespaceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.UpdateNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateNamespace].
+type UpdateNamespaceRequest struct {
+	// Required. The updated namespace.
+	Namespace *Namespace `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	// Required. List of fields to be updated in this request.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateNamespaceRequest) Reset()         { *m = UpdateNamespaceRequest{} }
+func (m *UpdateNamespaceRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateNamespaceRequest) ProtoMessage()    {}
+func (*UpdateNamespaceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{4}
+}
+
+func (m *UpdateNamespaceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateNamespaceRequest.Unmarshal(m, b)
+}
+func (m *UpdateNamespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateNamespaceRequest.Marshal(b, m, deterministic)
+}
+func (m *UpdateNamespaceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateNamespaceRequest.Merge(m, src)
+}
+func (m *UpdateNamespaceRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateNamespaceRequest.Size(m)
+}
+func (m *UpdateNamespaceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateNamespaceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateNamespaceRequest proto.InternalMessageInfo
+
+func (m *UpdateNamespaceRequest) GetNamespace() *Namespace {
+	if m != nil {
+		return m.Namespace
+	}
+	return nil
+}
+
+func (m *UpdateNamespaceRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.DeleteNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteNamespace].
+type DeleteNamespaceRequest struct {
+	// Required. The name of the namespace to delete.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteNamespaceRequest) Reset()         { *m = DeleteNamespaceRequest{} }
+func (m *DeleteNamespaceRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteNamespaceRequest) ProtoMessage()    {}
+func (*DeleteNamespaceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{5}
+}
+
+func (m *DeleteNamespaceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteNamespaceRequest.Unmarshal(m, b)
+}
+func (m *DeleteNamespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteNamespaceRequest.Marshal(b, m, deterministic)
+}
+func (m *DeleteNamespaceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteNamespaceRequest.Merge(m, src)
+}
+func (m *DeleteNamespaceRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteNamespaceRequest.Size(m)
+}
+func (m *DeleteNamespaceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteNamespaceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteNamespaceRequest proto.InternalMessageInfo
+
+func (m *DeleteNamespaceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.CreateService][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateService].
+type CreateServiceRequest struct {
+	// Required. The resource name of the namespace this service will belong to.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required. The Resource ID must be 1-63 characters long, and comply with
+	// <a href="https://www.ietf.org/rfc/rfc1035.txt" target="_blank">RFC1035</a>.
+	// Specifically, the name must be 1-63 characters long and match the regular
+	// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first
+	// character must be a lowercase letter, and all following characters must
+	// be a dash, lowercase letter, or digit, except the last character, which
+	// cannot be a dash.
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
+	// Required. A service  with initial fields set.
+	Service              *Service `protobuf:"bytes,3,opt,name=service,proto3" json:"service,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateServiceRequest) Reset()         { *m = CreateServiceRequest{} }
+func (m *CreateServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateServiceRequest) ProtoMessage()    {}
+func (*CreateServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{6}
+}
+
+func (m *CreateServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateServiceRequest.Unmarshal(m, b)
+}
+func (m *CreateServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateServiceRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateServiceRequest.Merge(m, src)
+}
+func (m *CreateServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateServiceRequest.Size(m)
+}
+func (m *CreateServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateServiceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateServiceRequest proto.InternalMessageInfo
+
+func (m *CreateServiceRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateServiceRequest) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
+
+func (m *CreateServiceRequest) GetService() *Service {
+	if m != nil {
+		return m.Service
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.ListServices][google.cloud.servicedirectory.v1beta1.RegistrationService.ListServices].
+type ListServicesRequest struct {
+	// Required. The resource name of the namespace whose services we'd
+	// like to list.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional. The maximum number of items to return.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional. The next_page_token value returned from a previous List request,
+	// if any.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional. The filter to list result by.
+	//
+	// General filter string syntax:
+	// <field> <operator> <value> (<logical connector>)
+	// <field> can be "name", or "metadata.<key>" for map field.
+	// <operator> can be "<, >, <=, >=, !=, =, :". Of which ":" means HAS, and
+	// is roughly the same as "=".
+	// <value> must be the same data type as field.
+	// <logical connector> can be "AND, OR, NOT".
+	//
+	// Examples of valid filters:
+	// * "metadata.owner" returns Services that have a label with the key "owner"
+	//   this is the same as "metadata:owner".
+	// * "metadata.protocol=gRPC" returns Services that have key/value
+	//   "protocol=gRPC".
+	// * "name>projects/my-project/locations/us-east/namespaces/my-namespace/services/service-c"
+	//   returns Services that have name that is alphabetically later than the
+	//   string, so "service-e" will be returned but "service-a" will not be.
+	// * "metadata.owner!=sd AND metadata.foo=bar" returns Services that have
+	//   "owner" in label key but value is not "sd" AND have key/value foo=bar.
+	// * "doesnotexist.foo=bar" returns an empty list. Note that Service doesn't
+	//   have a field called "doesnotexist". Since the filter does not match any
+	//   Services, it returns no results.
+	Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"`
+	// Optional. The order to list result by.
+	OrderBy              string   `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListServicesRequest) Reset()         { *m = ListServicesRequest{} }
+func (m *ListServicesRequest) String() string { return proto.CompactTextString(m) }
+func (*ListServicesRequest) ProtoMessage()    {}
+func (*ListServicesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{7}
+}
+
+func (m *ListServicesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListServicesRequest.Unmarshal(m, b)
+}
+func (m *ListServicesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListServicesRequest.Marshal(b, m, deterministic)
+}
+func (m *ListServicesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListServicesRequest.Merge(m, src)
+}
+func (m *ListServicesRequest) XXX_Size() int {
+	return xxx_messageInfo_ListServicesRequest.Size(m)
+}
+func (m *ListServicesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListServicesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListServicesRequest proto.InternalMessageInfo
+
+func (m *ListServicesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListServicesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListServicesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListServicesRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func (m *ListServicesRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+// The response message for [RegistrationService.ListServices][google.cloud.servicedirectory.v1beta1.RegistrationService.ListServices].
+type ListServicesResponse struct {
+	// The list of services.
+	Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"`
+	// Token to retrieve the next page of results, or empty if there are no
+	// more results in the list.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListServicesResponse) Reset()         { *m = ListServicesResponse{} }
+func (m *ListServicesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListServicesResponse) ProtoMessage()    {}
+func (*ListServicesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{8}
+}
+
+func (m *ListServicesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListServicesResponse.Unmarshal(m, b)
+}
+func (m *ListServicesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListServicesResponse.Marshal(b, m, deterministic)
+}
+func (m *ListServicesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListServicesResponse.Merge(m, src)
+}
+func (m *ListServicesResponse) XXX_Size() int {
+	return xxx_messageInfo_ListServicesResponse.Size(m)
+}
+func (m *ListServicesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListServicesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListServicesResponse proto.InternalMessageInfo
+
+func (m *ListServicesResponse) GetServices() []*Service {
+	if m != nil {
+		return m.Services
+	}
+	return nil
+}
+
+func (m *ListServicesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.GetService][google.cloud.servicedirectory.v1beta1.RegistrationService.GetService].
+// This should not be used for looking up a service. Insead, use the `resolve`
+// method as it will contain all endpoints and associated metadata.
+type GetServiceRequest struct {
+	// Required. The name of the service to get.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetServiceRequest) Reset()         { *m = GetServiceRequest{} }
+func (m *GetServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*GetServiceRequest) ProtoMessage()    {}
+func (*GetServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{9}
+}
+
+func (m *GetServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetServiceRequest.Unmarshal(m, b)
+}
+func (m *GetServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetServiceRequest.Marshal(b, m, deterministic)
+}
+func (m *GetServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetServiceRequest.Merge(m, src)
+}
+func (m *GetServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_GetServiceRequest.Size(m)
+}
+func (m *GetServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetServiceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetServiceRequest proto.InternalMessageInfo
+
+func (m *GetServiceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.UpdateService][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateService].
+type UpdateServiceRequest struct {
+	// Required. The updated service.
+	Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
+	// Required. List of fields to be updated in this request.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateServiceRequest) Reset()         { *m = UpdateServiceRequest{} }
+func (m *UpdateServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateServiceRequest) ProtoMessage()    {}
+func (*UpdateServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{10}
+}
+
+func (m *UpdateServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateServiceRequest.Unmarshal(m, b)
+}
+func (m *UpdateServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateServiceRequest.Marshal(b, m, deterministic)
+}
+func (m *UpdateServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateServiceRequest.Merge(m, src)
+}
+func (m *UpdateServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateServiceRequest.Size(m)
+}
+func (m *UpdateServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateServiceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateServiceRequest proto.InternalMessageInfo
+
+func (m *UpdateServiceRequest) GetService() *Service {
+	if m != nil {
+		return m.Service
+	}
+	return nil
+}
+
+func (m *UpdateServiceRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.DeleteService][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteService].
+type DeleteServiceRequest struct {
+	// Required. The name of the service to delete.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteServiceRequest) Reset()         { *m = DeleteServiceRequest{} }
+func (m *DeleteServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteServiceRequest) ProtoMessage()    {}
+func (*DeleteServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{11}
+}
+
+func (m *DeleteServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteServiceRequest.Unmarshal(m, b)
+}
+func (m *DeleteServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteServiceRequest.Marshal(b, m, deterministic)
+}
+func (m *DeleteServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteServiceRequest.Merge(m, src)
+}
+func (m *DeleteServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteServiceRequest.Size(m)
+}
+func (m *DeleteServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteServiceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteServiceRequest proto.InternalMessageInfo
+
+func (m *DeleteServiceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.CreateEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateEndpoint].
+type CreateEndpointRequest struct {
+	// Required. The resource name of the service that this endpoint provides.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required. The Resource ID must be 1-63 characters long, and comply with
+	// <a href="https://www.ietf.org/rfc/rfc1035.txt" target="_blank">RFC1035</a>.
+	// Specifically, the name must be 1-63 characters long and match the regular
+	// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first
+	// character must be a lowercase letter, and all following characters must
+	// be a dash, lowercase letter, or digit, except the last character, which
+	// cannot be a dash.
+	EndpointId string `protobuf:"bytes,2,opt,name=endpoint_id,json=endpointId,proto3" json:"endpoint_id,omitempty"`
+	// Required. A endpoint with initial fields set.
+	Endpoint             *Endpoint `protobuf:"bytes,3,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *CreateEndpointRequest) Reset()         { *m = CreateEndpointRequest{} }
+func (m *CreateEndpointRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateEndpointRequest) ProtoMessage()    {}
+func (*CreateEndpointRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{12}
+}
+
+func (m *CreateEndpointRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateEndpointRequest.Unmarshal(m, b)
+}
+func (m *CreateEndpointRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateEndpointRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateEndpointRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateEndpointRequest.Merge(m, src)
+}
+func (m *CreateEndpointRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateEndpointRequest.Size(m)
+}
+func (m *CreateEndpointRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateEndpointRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateEndpointRequest proto.InternalMessageInfo
+
+func (m *CreateEndpointRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateEndpointRequest) GetEndpointId() string {
+	if m != nil {
+		return m.EndpointId
+	}
+	return ""
+}
+
+func (m *CreateEndpointRequest) GetEndpoint() *Endpoint {
+	if m != nil {
+		return m.Endpoint
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.ListEndpoints][google.cloud.servicedirectory.v1beta1.RegistrationService.ListEndpoints].
+type ListEndpointsRequest struct {
+	// Required. The resource name of the service whose endpoints we'd like to
+	// list.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional. The maximum number of items to return.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional. The next_page_token value returned from a previous List request,
+	// if any.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional. The filter to list result by.
+	//
+	// General filter string syntax:
+	// <field> <operator> <value> (<logical connector>)
+	// <field> can be "name", "address", "port" or "metadata.<key>" for map field.
+	// <operator> can be "<, >, <=, >=, !=, =, :". Of which ":" means HAS, and
+	// is roughly the same as "=".
+	// <value> must be the same data type as field.
+	// <logical connector> can be "AND, OR, NOT".
+	//
+	// Examples of valid filters:
+	// * "metadata.owner" returns Endpoints that have a label with the key "owner"
+	//   this is the same as "metadata:owner".
+	// * "metadata.protocol=gRPC" returns Endpoints that have key/value
+	//   "protocol=gRPC".
+	// * "address=192.108.1.105" returns Endpoints that have this address.
+	// * "port>8080" returns Endpoints that have port number larger than 8080.
+	// * "name>projects/my-project/locations/us-east/namespaces/my-namespace/services/my-service/endpoints/endpoint-c"
+	//   returns Endpoints that have name that is alphabetically later than the
+	//   string, so "endpoint-e" will be returned but "endpoint-a" will not be.
+	// * "metadata.owner!=sd AND metadata.foo=bar" returns Endpoints that have
+	//   "owner" in label key but value is not "sd" AND have key/value foo=bar.
+	// * "doesnotexist.foo=bar" returns an empty list. Note that Endpoint doesn't
+	//   have a field called "doesnotexist". Since the filter does not match any
+	//   Endpoints, it returns no results.
+	Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"`
+	// Optional. The order to list result by.
+	OrderBy              string   `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListEndpointsRequest) Reset()         { *m = ListEndpointsRequest{} }
+func (m *ListEndpointsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListEndpointsRequest) ProtoMessage()    {}
+func (*ListEndpointsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{13}
+}
+
+func (m *ListEndpointsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListEndpointsRequest.Unmarshal(m, b)
+}
+func (m *ListEndpointsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListEndpointsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListEndpointsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListEndpointsRequest.Merge(m, src)
+}
+func (m *ListEndpointsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListEndpointsRequest.Size(m)
+}
+func (m *ListEndpointsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListEndpointsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListEndpointsRequest proto.InternalMessageInfo
+
+func (m *ListEndpointsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListEndpointsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListEndpointsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListEndpointsRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func (m *ListEndpointsRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+// The response message for [RegistrationService.ListEndpoints][google.cloud.servicedirectory.v1beta1.RegistrationService.ListEndpoints].
+type ListEndpointsResponse struct {
+	// The list of endpoints.
+	Endpoints []*Endpoint `protobuf:"bytes,1,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
+	// Token to retrieve the next page of results, or empty if there are no
+	// more results in the list.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListEndpointsResponse) Reset()         { *m = ListEndpointsResponse{} }
+func (m *ListEndpointsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListEndpointsResponse) ProtoMessage()    {}
+func (*ListEndpointsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{14}
+}
+
+func (m *ListEndpointsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListEndpointsResponse.Unmarshal(m, b)
+}
+func (m *ListEndpointsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListEndpointsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListEndpointsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListEndpointsResponse.Merge(m, src)
+}
+func (m *ListEndpointsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListEndpointsResponse.Size(m)
+}
+func (m *ListEndpointsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListEndpointsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListEndpointsResponse proto.InternalMessageInfo
+
+func (m *ListEndpointsResponse) GetEndpoints() []*Endpoint {
+	if m != nil {
+		return m.Endpoints
+	}
+	return nil
+}
+
+func (m *ListEndpointsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.GetEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.GetEndpoint].
+// This should not be used to lookup endpoints at runtime. Instead, use
+// the `resolve` method.
+type GetEndpointRequest struct {
+	// Required. The name of the endpoint to get.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetEndpointRequest) Reset()         { *m = GetEndpointRequest{} }
+func (m *GetEndpointRequest) String() string { return proto.CompactTextString(m) }
+func (*GetEndpointRequest) ProtoMessage()    {}
+func (*GetEndpointRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{15}
+}
+
+func (m *GetEndpointRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetEndpointRequest.Unmarshal(m, b)
+}
+func (m *GetEndpointRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetEndpointRequest.Marshal(b, m, deterministic)
+}
+func (m *GetEndpointRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetEndpointRequest.Merge(m, src)
+}
+func (m *GetEndpointRequest) XXX_Size() int {
+	return xxx_messageInfo_GetEndpointRequest.Size(m)
+}
+func (m *GetEndpointRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetEndpointRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetEndpointRequest proto.InternalMessageInfo
+
+func (m *GetEndpointRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for [RegistrationService.UpdateEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateEndpoint].
+type UpdateEndpointRequest struct {
+	// Required. The updated endpoint.
+	Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
+	// Required. List of fields to be updated in this request.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateEndpointRequest) Reset()         { *m = UpdateEndpointRequest{} }
+func (m *UpdateEndpointRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateEndpointRequest) ProtoMessage()    {}
+func (*UpdateEndpointRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{16}
+}
+
+func (m *UpdateEndpointRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateEndpointRequest.Unmarshal(m, b)
+}
+func (m *UpdateEndpointRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateEndpointRequest.Marshal(b, m, deterministic)
+}
+func (m *UpdateEndpointRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateEndpointRequest.Merge(m, src)
+}
+func (m *UpdateEndpointRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateEndpointRequest.Size(m)
+}
+func (m *UpdateEndpointRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateEndpointRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateEndpointRequest proto.InternalMessageInfo
+
+func (m *UpdateEndpointRequest) GetEndpoint() *Endpoint {
+	if m != nil {
+		return m.Endpoint
+	}
+	return nil
+}
+
+func (m *UpdateEndpointRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// The request message for [RegistrationService.DeleteEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteEndpoint].
+type DeleteEndpointRequest struct {
+	// Required. The name of the endpoint to delete.
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteEndpointRequest) Reset()         { *m = DeleteEndpointRequest{} }
+func (m *DeleteEndpointRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteEndpointRequest) ProtoMessage()    {}
+func (*DeleteEndpointRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_df30e8cd406c05e7, []int{17}
+}
+
+func (m *DeleteEndpointRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteEndpointRequest.Unmarshal(m, b)
+}
+func (m *DeleteEndpointRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteEndpointRequest.Marshal(b, m, deterministic)
+}
+func (m *DeleteEndpointRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteEndpointRequest.Merge(m, src)
+}
+func (m *DeleteEndpointRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteEndpointRequest.Size(m)
+}
+func (m *DeleteEndpointRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteEndpointRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteEndpointRequest proto.InternalMessageInfo
+
+func (m *DeleteEndpointRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*CreateNamespaceRequest)(nil), "google.cloud.servicedirectory.v1beta1.CreateNamespaceRequest")
+	proto.RegisterType((*ListNamespacesRequest)(nil), "google.cloud.servicedirectory.v1beta1.ListNamespacesRequest")
+	proto.RegisterType((*ListNamespacesResponse)(nil), "google.cloud.servicedirectory.v1beta1.ListNamespacesResponse")
+	proto.RegisterType((*GetNamespaceRequest)(nil), "google.cloud.servicedirectory.v1beta1.GetNamespaceRequest")
+	proto.RegisterType((*UpdateNamespaceRequest)(nil), "google.cloud.servicedirectory.v1beta1.UpdateNamespaceRequest")
+	proto.RegisterType((*DeleteNamespaceRequest)(nil), "google.cloud.servicedirectory.v1beta1.DeleteNamespaceRequest")
+	proto.RegisterType((*CreateServiceRequest)(nil), "google.cloud.servicedirectory.v1beta1.CreateServiceRequest")
+	proto.RegisterType((*ListServicesRequest)(nil), "google.cloud.servicedirectory.v1beta1.ListServicesRequest")
+	proto.RegisterType((*ListServicesResponse)(nil), "google.cloud.servicedirectory.v1beta1.ListServicesResponse")
+	proto.RegisterType((*GetServiceRequest)(nil), "google.cloud.servicedirectory.v1beta1.GetServiceRequest")
+	proto.RegisterType((*UpdateServiceRequest)(nil), "google.cloud.servicedirectory.v1beta1.UpdateServiceRequest")
+	proto.RegisterType((*DeleteServiceRequest)(nil), "google.cloud.servicedirectory.v1beta1.DeleteServiceRequest")
+	proto.RegisterType((*CreateEndpointRequest)(nil), "google.cloud.servicedirectory.v1beta1.CreateEndpointRequest")
+	proto.RegisterType((*ListEndpointsRequest)(nil), "google.cloud.servicedirectory.v1beta1.ListEndpointsRequest")
+	proto.RegisterType((*ListEndpointsResponse)(nil), "google.cloud.servicedirectory.v1beta1.ListEndpointsResponse")
+	proto.RegisterType((*GetEndpointRequest)(nil), "google.cloud.servicedirectory.v1beta1.GetEndpointRequest")
+	proto.RegisterType((*UpdateEndpointRequest)(nil), "google.cloud.servicedirectory.v1beta1.UpdateEndpointRequest")
+	proto.RegisterType((*DeleteEndpointRequest)(nil), "google.cloud.servicedirectory.v1beta1.DeleteEndpointRequest")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/servicedirectory/v1beta1/registration_service.proto", fileDescriptor_df30e8cd406c05e7)
+}
+
+var fileDescriptor_df30e8cd406c05e7 = []byte{
+	// 1595 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x6f, 0x1b, 0x45,
+	0x18, 0xd7, 0xa4, 0xaf, 0xe4, 0x4b, 0x93, 0x88, 0xc9, 0x03, 0x77, 0x0b, 0x6d, 0x58, 0xa0, 0x24,
+	0x26, 0x78, 0x9b, 0x94, 0x4a, 0x90, 0x36, 0x28, 0x9b, 0xa6, 0x8d, 0x52, 0x35, 0x34, 0xd8, 0x2d,
+	0x82, 0x14, 0x64, 0x6d, 0xec, 0x89, 0xb3, 0xc4, 0xf6, 0x2e, 0xbb, 0x9b, 0x94, 0x14, 0x7a, 0xe1,
+	0xc8, 0x81, 0x03, 0xdc, 0x41, 0x5c, 0xe0, 0x50, 0x24, 0x24, 0xf8, 0x07, 0xe0, 0xc0, 0x85, 0x0b,
+	0x12, 0xed, 0xa1, 0xb2, 0x84, 0x54, 0x01, 0x12, 0xe2, 0x71, 0xe2, 0x84, 0x40, 0x48, 0x68, 0xe7,
+	0xb1, 0xaf, 0x6c, 0xc8, 0xd8, 0x71, 0x50, 0x4f, 0x91, 0xe7, 0x9b, 0xf9, 0xed, 0xfc, 0xbe, 0xf9,
+	0x7d, 0x5f, 0x7e, 0xb3, 0x0b, 0xd3, 0x15, 0xcb, 0xaa, 0x54, 0x89, 0x56, 0xaa, 0x5a, 0xeb, 0x65,
+	0xcd, 0x25, 0xce, 0x86, 0x59, 0x22, 0x65, 0xd3, 0x21, 0x25, 0xcf, 0x72, 0x36, 0xb5, 0x8d, 0xf1,
+	0x65, 0xe2, 0x19, 0xe3, 0x9a, 0x43, 0x2a, 0xa6, 0xeb, 0x39, 0x86, 0x67, 0x5a, 0xf5, 0x22, 0x9f,
+	0x95, 0xb3, 0x1d, 0xcb, 0xb3, 0xf0, 0xe3, 0x0c, 0x21, 0x47, 0x11, 0x72, 0x49, 0x84, 0x1c, 0x47,
+	0x50, 0x1e, 0xe2, 0x0f, 0x32, 0x6c, 0x53, 0x33, 0xea, 0x75, 0xcb, 0xa3, 0x58, 0x2e, 0x03, 0x51,
+	0x1e, 0x8c, 0x44, 0x4b, 0x55, 0x93, 0xd4, 0x3d, 0x1e, 0x38, 0x1e, 0x09, 0xac, 0x98, 0xa4, 0x5a,
+	0x2e, 0x2e, 0x93, 0x55, 0x63, 0xc3, 0xb4, 0x1c, 0x3e, 0xe1, 0x48, 0x64, 0x82, 0x43, 0x5c, 0x6b,
+	0xdd, 0x11, 0x3b, 0x53, 0x9e, 0x96, 0xe3, 0x46, 0xea, 0x65, 0xdb, 0x32, 0x83, 0x27, 0x9e, 0x96,
+	0x5b, 0x55, 0x37, 0x6a, 0xc4, 0xb5, 0x8d, 0xe0, 0x61, 0xa7, 0xe4, 0x96, 0xc5, 0x72, 0xa7, 0x1c,
+	0xe3, 0x8b, 0x4c, 0xa3, 0xa6, 0x6d, 0x8c, 0xfb, 0x7f, 0x8a, 0xb6, 0x55, 0x35, 0x4b, 0x9b, 0x3c,
+	0xae, 0xc4, 0xe3, 0xb1, 0xd8, 0x51, 0x1e, 0xa3, 0xbf, 0x96, 0xd7, 0x57, 0x34, 0x52, 0xb3, 0x3d,
+	0x11, 0x1c, 0x4e, 0x06, 0x59, 0xee, 0x6a, 0x86, 0xbb, 0xc6, 0x66, 0xa8, 0x77, 0x11, 0x0c, 0x9d,
+	0x73, 0x88, 0xe1, 0x91, 0xe7, 0x05, 0x93, 0x3c, 0x79, 0x7d, 0x9d, 0xb8, 0x1e, 0xd6, 0xe1, 0xa0,
+	0x6d, 0x38, 0xa4, 0xee, 0x65, 0xd0, 0x30, 0x1a, 0xe9, 0x9a, 0x19, 0xbd, 0xa7, 0x77, 0xfc, 0xa5,
+	0x3f, 0x0a, 0x8f, 0x54, 0xad, 0x12, 0x3f, 0x35, 0x06, 0x6f, 0xd8, 0xa6, 0x9b, 0x2b, 0x59, 0x35,
+	0xed, 0x12, 0x0f, 0xe4, 0xf9, 0x42, 0x7c, 0x02, 0x0e, 0x07, 0x09, 0x2a, 0x9a, 0xe5, 0x4c, 0x07,
+	0x05, 0xda, 0x77, 0x4f, 0xef, 0xc8, 0x77, 0x07, 0x81, 0xf9, 0x32, 0x2e, 0x40, 0x57, 0xf0, 0x33,
+	0xb3, 0x6f, 0x18, 0x8d, 0x74, 0x4f, 0x9c, 0xcc, 0x49, 0x09, 0x2a, 0x17, 0x6c, 0x9b, 0xc1, 0x86,
+	0x38, 0xea, 0xf7, 0x08, 0x06, 0x2f, 0x99, 0xae, 0x17, 0xcc, 0x70, 0xdb, 0xc8, 0x6c, 0x18, 0xba,
+	0x6c, 0xa3, 0x42, 0x8a, 0xae, 0x79, 0x83, 0x50, 0x5a, 0x07, 0xfc, 0xe7, 0xa3, 0x7c, 0xa7, 0x3f,
+	0x5a, 0x30, 0x6f, 0x10, 0xac, 0x02, 0xd0, 0x19, 0x9e, 0xb5, 0x46, 0xea, 0x94, 0x54, 0x17, 0x9b,
+	0x42, 0x17, 0x5e, 0xf1, 0x47, 0xf1, 0x51, 0x38, 0xb8, 0x62, 0x56, 0x3d, 0xe2, 0x64, 0xf6, 0x87,
+	0x71, 0x3e, 0x84, 0x8f, 0x41, 0xa7, 0xe5, 0x94, 0x89, 0x53, 0x5c, 0xde, 0xcc, 0x1c, 0x08, 0xc3,
+	0x87, 0xe8, 0xe0, 0xcc, 0xa6, 0xfa, 0x1e, 0x82, 0xa1, 0x24, 0x3f, 0xd7, 0xb6, 0xea, 0x2e, 0xc1,
+	0x8b, 0x00, 0x41, 0x1e, 0xdc, 0x0c, 0x1a, 0xde, 0xd7, 0x4a, 0x42, 0xf3, 0x11, 0x0c, 0x7c, 0x02,
+	0xfa, 0xea, 0xe4, 0x0d, 0xaf, 0x18, 0xa1, 0x44, 0x0f, 0x33, 0xdf, 0xe3, 0x0f, 0x2f, 0x0a, 0x46,
+	0xea, 0x2b, 0xd0, 0x3f, 0x47, 0xbc, 0x2d, 0x5a, 0x3a, 0x0f, 0xfb, 0x7d, 0x30, 0x9e, 0xef, 0x71,
+	0x9a, 0xef, 0x27, 0x61, 0x74, 0xcb, 0x26, 0x12, 0x69, 0x0f, 0x71, 0xe8, 0x72, 0xf5, 0x33, 0x04,
+	0x43, 0x57, 0xed, 0x72, 0x9a, 0x5a, 0x63, 0x12, 0x42, 0xed, 0x91, 0x10, 0x9e, 0x86, 0xee, 0x75,
+	0xfa, 0x38, 0x5a, 0x32, 0x94, 0x71, 0xf7, 0x84, 0x22, 0x60, 0x45, 0x55, 0xe5, 0x2e, 0xf8, 0x55,
+	0xb5, 0x60, 0xb8, 0x6b, 0x0c, 0x00, 0xd8, 0x1a, 0x7f, 0x40, 0x2d, 0xc2, 0xd0, 0x2c, 0xa9, 0x92,
+	0x94, 0x0d, 0xb7, 0x29, 0x25, 0x77, 0x10, 0x0c, 0xb0, 0x02, 0x2e, 0xb0, 0x95, 0x02, 0x7f, 0x3e,
+	0x21, 0xf2, 0x16, 0x9e, 0x20, 0xc4, 0xae, 0x02, 0xf0, 0x45, 0x89, 0x22, 0xee, 0xe2, 0xc3, 0xf3,
+	0x65, 0xbc, 0x00, 0x87, 0xf8, 0x0f, 0x5e, 0xc0, 0x39, 0xc9, 0xec, 0xf3, 0x6d, 0x33, 0x40, 0x81,
+	0xa1, 0xfe, 0x88, 0xa0, 0xdf, 0x17, 0x37, 0x8f, 0xba, 0x7b, 0xc0, 0xea, 0x3e, 0x28, 0xe1, 0x77,
+	0x10, 0x0c, 0xc4, 0x59, 0xf2, 0x02, 0xbe, 0x08, 0x9d, 0x9c, 0x90, 0x28, 0xdf, 0x26, 0xd3, 0x99,
+	0x0f, 0xd6, 0x4b, 0x97, 0xee, 0x4b, 0xf0, 0xc0, 0x1c, 0xf1, 0x12, 0x2a, 0x3a, 0x17, 0x53, 0xa9,
+	0x46, 0xb3, 0x3d, 0x0a, 0x4f, 0xec, 0x94, 0x6d, 0x81, 0xc2, 0x34, 0xfa, 0x09, 0x82, 0x01, 0x56,
+	0xb6, 0x09, 0xf4, 0x88, 0x68, 0xd0, 0xee, 0x45, 0xd3, 0x86, 0x72, 0xbd, 0x06, 0x03, 0xac, 0x5c,
+	0xf7, 0x22, 0x0d, 0x77, 0x11, 0x0c, 0xb2, 0x52, 0x3d, 0xcf, 0xbd, 0x86, 0x80, 0x9f, 0x4b, 0xa8,
+	0xba, 0xe9, 0x07, 0x08, 0x4d, 0x3f, 0x06, 0xdd, 0xc2, 0xc7, 0x24, 0x4a, 0x15, 0xc4, 0xf8, 0x7c,
+	0x19, 0x2f, 0x42, 0xa7, 0xf8, 0xc5, 0x8b, 0x55, 0x93, 0xcc, 0xbb, 0xd8, 0x38, 0xc3, 0x0c, 0x50,
+	0xd4, 0x1f, 0xb8, 0x90, 0x45, 0xdc, 0x6d, 0x3b, 0xb3, 0xfb, 0xa0, 0x5a, 0xdf, 0xe5, 0x86, 0x22,
+	0x42, 0x92, 0x97, 0xeb, 0x02, 0x74, 0x89, 0x54, 0x88, 0x7a, 0x6d, 0x36, 0xa3, 0xf9, 0x10, 0x41,
+	0xba, 0x62, 0x97, 0x00, 0xcf, 0x11, 0x2f, 0x29, 0xa6, 0xd9, 0x98, 0x56, 0x4f, 0xd2, 0x84, 0x67,
+	0x61, 0x64, 0xa7, 0x84, 0x07, 0x30, 0x4c, 0xac, 0xb7, 0x10, 0x0c, 0xb2, 0x9a, 0x4d, 0xe2, 0x47,
+	0xd5, 0x83, 0xda, 0xa1, 0x9e, 0x36, 0xd4, 0xed, 0xab, 0x30, 0xc8, 0xea, 0x76, 0x4f, 0x92, 0x31,
+	0xf1, 0xed, 0x30, 0xf4, 0xe7, 0x23, 0x77, 0x1f, 0x2e, 0x4e, 0xfc, 0x2b, 0x82, 0xbe, 0x84, 0x7b,
+	0xc6, 0x53, 0x92, 0xc9, 0x48, 0x77, 0xdd, 0x4a, 0xd3, 0xa6, 0x45, 0x5d, 0x69, 0xe8, 0x0f, 0xb3,
+	0x22, 0x19, 0x0b, 0x9c, 0xcb, 0x58, 0xd4, 0x76, 0xbf, 0x7d, 0xfb, 0xa7, 0xf7, 0x3b, 0xa6, 0xd5,
+	0x53, 0xc1, 0xed, 0xe3, 0x4d, 0x36, 0x7d, 0xca, 0x76, 0xac, 0xd7, 0x48, 0xc9, 0x73, 0xb5, 0xac,
+	0x16, 0x38, 0x5f, 0x2d, 0x7b, 0x33, 0xbc, 0xd4, 0xb8, 0x93, 0x11, 0x33, 0x74, 0x1b, 0x41, 0x6f,
+	0xdc, 0x6f, 0xe2, 0xb3, 0x92, 0x9b, 0x4d, 0xb5, 0xe1, 0xca, 0x54, 0x8b, 0xab, 0x59, 0xd1, 0xa9,
+	0xb3, 0x0d, 0x9d, 0x37, 0x07, 0x4a, 0xf0, 0x34, 0x6e, 0x85, 0x20, 0xfe, 0x12, 0xc1, 0xe1, 0xa8,
+	0x63, 0xc5, 0x93, 0x92, 0xbb, 0x4a, 0xb1, 0xb9, 0x2d, 0x1c, 0xde, 0x4c, 0x43, 0xa7, 0x12, 0xdb,
+	0x4a, 0xc1, 0x1f, 0xdd, 0x86, 0x40, 0x64, 0xff, 0x5a, 0xf6, 0x26, 0xfe, 0x1d, 0x41, 0x5f, 0xc2,
+	0x15, 0x4b, 0xab, 0x30, 0xdd, 0x4d, 0xb7, 0x40, 0x64, 0xb5, 0xa1, 0x0f, 0x86, 0xf2, 0x8b, 0x94,
+	0x33, 0x65, 0x76, 0x71, 0x62, 0x2a, 0xce, 0x8c, 0xdd, 0x99, 0xa5, 0x39, 0x46, 0x75, 0xf8, 0x29,
+	0x82, 0xbe, 0x84, 0xa7, 0x96, 0xa6, 0x9b, 0xee, 0xc5, 0x95, 0xa1, 0x2d, 0xbd, 0xe6, 0xbc, 0x7f,
+	0x8b, 0x4e, 0x9c, 0x4e, 0xb6, 0xa5, 0xd3, 0xf9, 0x05, 0x41, 0x4f, 0xcc, 0xa0, 0xe3, 0x33, 0x4d,
+	0x75, 0x88, 0xb8, 0x13, 0x51, 0x9a, 0x74, 0x48, 0xea, 0x5a, 0x43, 0x3f, 0xc2, 0xbb, 0x03, 0x9f,
+	0x3b, 0x16, 0x7a, 0x79, 0xca, 0x6b, 0x5e, 0x7d, 0x4e, 0xb2, 0x70, 0xe2, 0xcc, 0xc4, 0x4b, 0x0c,
+	0x77, 0x32, 0x30, 0x60, 0x77, 0x11, 0x1c, 0x8e, 0xfa, 0x59, 0xe9, 0x62, 0x4a, 0xb1, 0xfa, 0xca,
+	0x99, 0x96, 0xd6, 0xf2, 0xe6, 0x70, 0x39, 0xde, 0x1c, 0xa6, 0xf1, 0x2e, 0x39, 0xe2, 0xaf, 0x11,
+	0x40, 0x68, 0x8f, 0xf1, 0x33, 0xf2, 0x5d, 0x62, 0x97, 0x07, 0xb8, 0x10, 0xd5, 0x60, 0x8c, 0x87,
+	0xac, 0x06, 0x03, 0x12, 0xbe, 0x1c, 0x7f, 0x43, 0xd0, 0x13, 0xf3, 0xe2, 0xd2, 0x72, 0x4c, 0x73,
+	0xf0, 0x4d, 0xb3, 0xa9, 0x35, 0xf4, 0x7e, 0xa1, 0xc3, 0x64, 0x93, 0x78, 0x61, 0xe2, 0x42, 0x48,
+	0x4e, 0xbc, 0x21, 0x6b, 0x85, 0x64, 0x28, 0xc8, 0x2f, 0x10, 0xf4, 0xc4, 0x0c, 0xbd, 0x34, 0xdb,
+	0xb4, 0x6b, 0xc0, 0xb6, 0x7d, 0x22, 0x7e, 0x46, 0xd9, 0xdd, 0x9e, 0xd1, 0xdf, 0x08, 0x7a, 0xe3,
+	0x17, 0x05, 0xe9, 0xff, 0xb4, 0xa9, 0xf7, 0x0b, 0xa5, 0x59, 0x83, 0xa6, 0xde, 0x68, 0xe8, 0x47,
+	0x79, 0xd7, 0x10, 0x2e, 0x6d, 0x2c, 0x72, 0xb1, 0xa0, 0x3c, 0x5f, 0x54, 0x2f, 0xb6, 0x52, 0x53,
+	0x51, 0xa6, 0xc1, 0x4b, 0x57, 0x77, 0x32, 0x74, 0x83, 0x3f, 0x23, 0xe8, 0x89, 0xd9, 0x6c, 0xdc,
+	0x4c, 0x27, 0x48, 0xde, 0x40, 0x94, 0xb3, 0xad, 0x2d, 0xe6, 0x7d, 0xe4, 0x5a, 0xbc, 0x8f, 0x5c,
+	0xc2, 0x6d, 0xe4, 0x8c, 0xef, 0x20, 0xe8, 0x8e, 0x18, 0x78, 0xfc, 0xac, 0x7c, 0x53, 0xd9, 0xf5,
+	0x09, 0xbf, 0x1c, 0x95, 0x6c, 0x8c, 0x56, 0x0b, 0x92, 0x0d, 0x39, 0xf9, 0xf2, 0xfd, 0x07, 0x41,
+	0x6f, 0xfc, 0xea, 0x20, 0x2d, 0xdf, 0xd4, 0x1b, 0x47, 0xf3, 0xe4, 0xde, 0x6a, 0xe8, 0x03, 0x81,
+	0x6e, 0x93, 0x6d, 0xa6, 0x38, 0x51, 0x08, 0xc9, 0x06, 0x6f, 0xfd, 0x77, 0xcb, 0x3a, 0x22, 0xe0,
+	0xaf, 0x10, 0xf4, 0xc6, 0x6f, 0x23, 0xd2, 0xfc, 0x53, 0x2f, 0x31, 0xdb, 0xb6, 0x9d, 0xf8, 0x19,
+	0x66, 0xdb, 0x79, 0x86, 0x7f, 0x30, 0x5b, 0x3c, 0x6f, 0xd4, 0x16, 0xe9, 0xd7, 0x06, 0xac, 0x8a,
+	0x3d, 0x98, 0x46, 0x2d, 0xb7, 0x41, 0x35, 0x18, 0x04, 0xc5, 0x3e, 0x07, 0x13, 0x73, 0x58, 0x54,
+	0xfd, 0x18, 0xd1, 0x0d, 0x7e, 0x88, 0xd4, 0xd9, 0x70, 0x87, 0xe2, 0x23, 0x8d, 0x9c, 0xfd, 0xab,
+	0x44, 0x9e, 0x36, 0x89, 0xb2, 0x4b, 0x57, 0xd4, 0xcb, 0xad, 0x41, 0xc5, 0xfe, 0x4d, 0x24, 0x50,
+	0x29, 0xe9, 0xc2, 0x7f, 0x91, 0x2e, 0xfc, 0xaf, 0xa4, 0xdd, 0x3d, 0x21, 0x9d, 0x40, 0xc5, 0x1f,
+	0x74, 0x00, 0xbe, 0x42, 0x5c, 0x3a, 0x48, 0x9c, 0x9a, 0xe9, 0xba, 0x3e, 0x02, 0x1e, 0x49, 0xd0,
+	0xda, 0x3a, 0x45, 0x24, 0x60, 0x54, 0x62, 0x26, 0xef, 0xa6, 0x9f, 0xb3, 0xa4, 0xdc, 0x42, 0xd1,
+	0x7f, 0x1d, 0xcd, 0x25, 0xc5, 0xdb, 0x82, 0xee, 0xa7, 0x66, 0x49, 0xbd, 0xda, 0x86, 0xd4, 0xa4,
+	0x62, 0x2b, 0x85, 0x6f, 0xf4, 0xe3, 0x3b, 0xbc, 0x2f, 0xf8, 0x4e, 0xcf, 0xad, 0x7a, 0x9e, 0xed,
+	0x4e, 0x6a, 0xda, 0xf5, 0xeb, 0xd7, 0x93, 0x2f, 0x13, 0x8c, 0x75, 0x6f, 0x95, 0x7d, 0x10, 0x7c,
+	0xca, 0xae, 0x1a, 0xde, 0x8a, 0xe5, 0xd4, 0x66, 0x3e, 0x42, 0x30, 0x5a, 0xb2, 0x6a, 0x72, 0x6d,
+	0x61, 0x26, 0x93, 0xf2, 0xf2, 0x61, 0xd1, 0xef, 0x05, 0x8b, 0x68, 0xe9, 0x2a, 0x87, 0xa8, 0x58,
+	0x55, 0xa3, 0x5e, 0xc9, 0x59, 0x4e, 0x45, 0xab, 0x90, 0x3a, 0xed, 0x14, 0x5a, 0xb8, 0x91, 0x1d,
+	0x3e, 0x48, 0x9e, 0x49, 0x06, 0xfe, 0x44, 0x68, 0xf9, 0x20, 0x05, 0x39, 0xf5, 0x6f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xb4, 0x44, 0x53, 0xca, 0x1d, 0x1e, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// RegistrationServiceClient is the client API for RegistrationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type RegistrationServiceClient interface {
+	// Creates a namespace, and returns the new Namespace.
+	CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error)
+	// Lists all namespaces.
+	ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error)
+	// Gets a namespace.
+	GetNamespace(ctx context.Context, in *GetNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error)
+	// Updates a namespace.
+	UpdateNamespace(ctx context.Context, in *UpdateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error)
+	// Deletes a namespace. This also deletes all services and endpoints in
+	// the namespace.
+	DeleteNamespace(ctx context.Context, in *DeleteNamespaceRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Creates a service, and returns the new Service.
+	CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*Service, error)
+	// Lists all services belonging to a namespace.
+	ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error)
+	// Gets a service.
+	GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error)
+	// Updates a service.
+	UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*Service, error)
+	// Deletes a service. This also deletes all endpoints associated with
+	// the service.
+	DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Creates a endpoint, and returns the new Endpoint.
+	CreateEndpoint(ctx context.Context, in *CreateEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error)
+	// Lists all endpoints.
+	ListEndpoints(ctx context.Context, in *ListEndpointsRequest, opts ...grpc.CallOption) (*ListEndpointsResponse, error)
+	// Gets a endpoint.
+	GetEndpoint(ctx context.Context, in *GetEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error)
+	// Updates a endpoint.
+	UpdateEndpoint(ctx context.Context, in *UpdateEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error)
+	// Deletes a endpoint.
+	DeleteEndpoint(ctx context.Context, in *DeleteEndpointRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Gets the IAM Policy for a resource (namespace or service only).
+	GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error)
+	// Sets the IAM Policy for a resource (namespace or service only).
+	SetIamPolicy(ctx context.Context, in *v1.SetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error)
+	// Tests IAM permissions for a resource (namespace or service only).
+	TestIamPermissions(ctx context.Context, in *v1.TestIamPermissionsRequest, opts ...grpc.CallOption) (*v1.TestIamPermissionsResponse, error)
+}
+
+type registrationServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewRegistrationServiceClient(cc grpc.ClientConnInterface) RegistrationServiceClient {
+	return &registrationServiceClient{cc}
+}
+
+func (c *registrationServiceClient) CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) {
+	out := new(Namespace)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateNamespace", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error) {
+	out := new(ListNamespacesResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListNamespaces", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) GetNamespace(ctx context.Context, in *GetNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) {
+	out := new(Namespace)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetNamespace", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) UpdateNamespace(ctx context.Context, in *UpdateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) {
+	out := new(Namespace)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateNamespace", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) DeleteNamespace(ctx context.Context, in *DeleteNamespaceRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteNamespace", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*Service, error) {
+	out := new(Service)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) {
+	out := new(ListServicesResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListServices", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error) {
+	out := new(Service)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*Service, error) {
+	out := new(Service)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) DeleteService(ctx context.Context, in *DeleteServiceRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) CreateEndpoint(ctx context.Context, in *CreateEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error) {
+	out := new(Endpoint)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateEndpoint", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) ListEndpoints(ctx context.Context, in *ListEndpointsRequest, opts ...grpc.CallOption) (*ListEndpointsResponse, error) {
+	out := new(ListEndpointsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListEndpoints", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) GetEndpoint(ctx context.Context, in *GetEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error) {
+	out := new(Endpoint)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetEndpoint", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) UpdateEndpoint(ctx context.Context, in *UpdateEndpointRequest, opts ...grpc.CallOption) (*Endpoint, error) {
+	out := new(Endpoint)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateEndpoint", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) DeleteEndpoint(ctx context.Context, in *DeleteEndpointRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteEndpoint", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) GetIamPolicy(ctx context.Context, in *v1.GetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) {
+	out := new(v1.Policy)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetIamPolicy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) SetIamPolicy(ctx context.Context, in *v1.SetIamPolicyRequest, opts ...grpc.CallOption) (*v1.Policy, error) {
+	out := new(v1.Policy)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/SetIamPolicy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *registrationServiceClient) TestIamPermissions(ctx context.Context, in *v1.TestIamPermissionsRequest, opts ...grpc.CallOption) (*v1.TestIamPermissionsResponse, error) {
+	out := new(v1.TestIamPermissionsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.servicedirectory.v1beta1.RegistrationService/TestIamPermissions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// RegistrationServiceServer is the server API for RegistrationService service.
+type RegistrationServiceServer interface {
+	// Creates a namespace, and returns the new Namespace.
+	CreateNamespace(context.Context, *CreateNamespaceRequest) (*Namespace, error)
+	// Lists all namespaces.
+	ListNamespaces(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error)
+	// Gets a namespace.
+	GetNamespace(context.Context, *GetNamespaceRequest) (*Namespace, error)
+	// Updates a namespace.
+	UpdateNamespace(context.Context, *UpdateNamespaceRequest) (*Namespace, error)
+	// Deletes a namespace. This also deletes all services and endpoints in
+	// the namespace.
+	DeleteNamespace(context.Context, *DeleteNamespaceRequest) (*empty.Empty, error)
+	// Creates a service, and returns the new Service.
+	CreateService(context.Context, *CreateServiceRequest) (*Service, error)
+	// Lists all services belonging to a namespace.
+	ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error)
+	// Gets a service.
+	GetService(context.Context, *GetServiceRequest) (*Service, error)
+	// Updates a service.
+	UpdateService(context.Context, *UpdateServiceRequest) (*Service, error)
+	// Deletes a service. This also deletes all endpoints associated with
+	// the service.
+	DeleteService(context.Context, *DeleteServiceRequest) (*empty.Empty, error)
+	// Creates a endpoint, and returns the new Endpoint.
+	CreateEndpoint(context.Context, *CreateEndpointRequest) (*Endpoint, error)
+	// Lists all endpoints.
+	ListEndpoints(context.Context, *ListEndpointsRequest) (*ListEndpointsResponse, error)
+	// Gets a endpoint.
+	GetEndpoint(context.Context, *GetEndpointRequest) (*Endpoint, error)
+	// Updates a endpoint.
+	UpdateEndpoint(context.Context, *UpdateEndpointRequest) (*Endpoint, error)
+	// Deletes a endpoint.
+	DeleteEndpoint(context.Context, *DeleteEndpointRequest) (*empty.Empty, error)
+	// Gets the IAM Policy for a resource (namespace or service only).
+	GetIamPolicy(context.Context, *v1.GetIamPolicyRequest) (*v1.Policy, error)
+	// Sets the IAM Policy for a resource (namespace or service only).
+	SetIamPolicy(context.Context, *v1.SetIamPolicyRequest) (*v1.Policy, error)
+	// Tests IAM permissions for a resource (namespace or service only).
+	TestIamPermissions(context.Context, *v1.TestIamPermissionsRequest) (*v1.TestIamPermissionsResponse, error)
+}
+
+// UnimplementedRegistrationServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedRegistrationServiceServer struct {
+}
+
+func (*UnimplementedRegistrationServiceServer) CreateNamespace(ctx context.Context, req *CreateNamespaceRequest) (*Namespace, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateNamespace not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) ListNamespaces(ctx context.Context, req *ListNamespacesRequest) (*ListNamespacesResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListNamespaces not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) GetNamespace(ctx context.Context, req *GetNamespaceRequest) (*Namespace, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetNamespace not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) UpdateNamespace(ctx context.Context, req *UpdateNamespaceRequest) (*Namespace, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateNamespace not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) DeleteNamespace(ctx context.Context, req *DeleteNamespaceRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteNamespace not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) CreateService(ctx context.Context, req *CreateServiceRequest) (*Service, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateService not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) ListServices(ctx context.Context, req *ListServicesRequest) (*ListServicesResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListServices not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) GetService(ctx context.Context, req *GetServiceRequest) (*Service, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetService not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) UpdateService(ctx context.Context, req *UpdateServiceRequest) (*Service, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateService not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) DeleteService(ctx context.Context, req *DeleteServiceRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteService not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) CreateEndpoint(ctx context.Context, req *CreateEndpointRequest) (*Endpoint, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateEndpoint not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) ListEndpoints(ctx context.Context, req *ListEndpointsRequest) (*ListEndpointsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListEndpoints not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) GetEndpoint(ctx context.Context, req *GetEndpointRequest) (*Endpoint, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetEndpoint not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) UpdateEndpoint(ctx context.Context, req *UpdateEndpointRequest) (*Endpoint, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateEndpoint not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) DeleteEndpoint(ctx context.Context, req *DeleteEndpointRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteEndpoint not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) GetIamPolicy(ctx context.Context, req *v1.GetIamPolicyRequest) (*v1.Policy, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetIamPolicy not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) SetIamPolicy(ctx context.Context, req *v1.SetIamPolicyRequest) (*v1.Policy, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetIamPolicy not implemented")
+}
+func (*UnimplementedRegistrationServiceServer) TestIamPermissions(ctx context.Context, req *v1.TestIamPermissionsRequest) (*v1.TestIamPermissionsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method TestIamPermissions not implemented")
+}
+
+func RegisterRegistrationServiceServer(s *grpc.Server, srv RegistrationServiceServer) {
+	s.RegisterService(&_RegistrationService_serviceDesc, srv)
+}
+
+func _RegistrationService_CreateNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateNamespaceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).CreateNamespace(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateNamespace",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).CreateNamespace(ctx, req.(*CreateNamespaceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_ListNamespaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListNamespacesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).ListNamespaces(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListNamespaces",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).ListNamespaces(ctx, req.(*ListNamespacesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_GetNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetNamespaceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).GetNamespace(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetNamespace",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).GetNamespace(ctx, req.(*GetNamespaceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_UpdateNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateNamespaceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).UpdateNamespace(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateNamespace",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).UpdateNamespace(ctx, req.(*UpdateNamespaceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_DeleteNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteNamespaceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).DeleteNamespace(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteNamespace",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).DeleteNamespace(ctx, req.(*DeleteNamespaceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_CreateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).CreateService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).CreateService(ctx, req.(*CreateServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListServicesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).ListServices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListServices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).ListServices(ctx, req.(*ListServicesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).GetService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).GetService(ctx, req.(*GetServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_UpdateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).UpdateService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).UpdateService(ctx, req.(*UpdateServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_DeleteService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).DeleteService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).DeleteService(ctx, req.(*DeleteServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_CreateEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateEndpointRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).CreateEndpoint(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/CreateEndpoint",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).CreateEndpoint(ctx, req.(*CreateEndpointRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_ListEndpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListEndpointsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).ListEndpoints(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/ListEndpoints",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).ListEndpoints(ctx, req.(*ListEndpointsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_GetEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetEndpointRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).GetEndpoint(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetEndpoint",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).GetEndpoint(ctx, req.(*GetEndpointRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_UpdateEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateEndpointRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).UpdateEndpoint(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/UpdateEndpoint",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).UpdateEndpoint(ctx, req.(*UpdateEndpointRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_DeleteEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteEndpointRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).DeleteEndpoint(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/DeleteEndpoint",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).DeleteEndpoint(ctx, req.(*DeleteEndpointRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(v1.GetIamPolicyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).GetIamPolicy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/GetIamPolicy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).GetIamPolicy(ctx, req.(*v1.GetIamPolicyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(v1.SetIamPolicyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).SetIamPolicy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/SetIamPolicy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).SetIamPolicy(ctx, req.(*v1.SetIamPolicyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RegistrationService_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(v1.TestIamPermissionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RegistrationServiceServer).TestIamPermissions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.servicedirectory.v1beta1.RegistrationService/TestIamPermissions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RegistrationServiceServer).TestIamPermissions(ctx, req.(*v1.TestIamPermissionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _RegistrationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.servicedirectory.v1beta1.RegistrationService",
+	HandlerType: (*RegistrationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CreateNamespace",
+			Handler:    _RegistrationService_CreateNamespace_Handler,
+		},
+		{
+			MethodName: "ListNamespaces",
+			Handler:    _RegistrationService_ListNamespaces_Handler,
+		},
+		{
+			MethodName: "GetNamespace",
+			Handler:    _RegistrationService_GetNamespace_Handler,
+		},
+		{
+			MethodName: "UpdateNamespace",
+			Handler:    _RegistrationService_UpdateNamespace_Handler,
+		},
+		{
+			MethodName: "DeleteNamespace",
+			Handler:    _RegistrationService_DeleteNamespace_Handler,
+		},
+		{
+			MethodName: "CreateService",
+			Handler:    _RegistrationService_CreateService_Handler,
+		},
+		{
+			MethodName: "ListServices",
+			Handler:    _RegistrationService_ListServices_Handler,
+		},
+		{
+			MethodName: "GetService",
+			Handler:    _RegistrationService_GetService_Handler,
+		},
+		{
+			MethodName: "UpdateService",
+			Handler:    _RegistrationService_UpdateService_Handler,
+		},
+		{
+			MethodName: "DeleteService",
+			Handler:    _RegistrationService_DeleteService_Handler,
+		},
+		{
+			MethodName: "CreateEndpoint",
+			Handler:    _RegistrationService_CreateEndpoint_Handler,
+		},
+		{
+			MethodName: "ListEndpoints",
+			Handler:    _RegistrationService_ListEndpoints_Handler,
+		},
+		{
+			MethodName: "GetEndpoint",
+			Handler:    _RegistrationService_GetEndpoint_Handler,
+		},
+		{
+			MethodName: "UpdateEndpoint",
+			Handler:    _RegistrationService_UpdateEndpoint_Handler,
+		},
+		{
+			MethodName: "DeleteEndpoint",
+			Handler:    _RegistrationService_DeleteEndpoint_Handler,
+		},
+		{
+			MethodName: "GetIamPolicy",
+			Handler:    _RegistrationService_GetIamPolicy_Handler,
+		},
+		{
+			MethodName: "SetIamPolicy",
+			Handler:    _RegistrationService_SetIamPolicy_Handler,
+		},
+		{
+			MethodName: "TestIamPermissions",
+			Handler:    _RegistrationService_TestIamPermissions_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/servicedirectory/v1beta1/registration_service.proto",
+}
diff --git a/googleapis/cloud/servicedirectory/v1beta1/service.pb.go b/googleapis/cloud/servicedirectory/v1beta1/service.pb.go
new file mode 100644
index 0000000..bcd5a93
--- /dev/null
+++ b/googleapis/cloud/servicedirectory/v1beta1/service.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/servicedirectory/v1beta1/service.proto
+
+package servicedirectory
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// An individual service. A service contains a name and optional metadata.
+// A service must exist before
+// [endpoints][google.cloud.servicedirectory.v1beta1.Endpoint] can be
+// added to it.
+type Service struct {
+	// Immutable. The resource name for the service in the format
+	// 'projects/*/locations/*/namespaces/*/services/*'.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional. Metadata for the service. This data can be consumed by service
+	// clients.  The entire metadata dictionary may contain up to 2000 characters,
+	// spread across all key-value pairs. Metadata that goes beyond any these
+	// limits will be rejected.
+	Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// Output only. Endpoints associated with this service. Returned on LookupService.Resolve.
+	// Control plane clients should use RegistrationService.ListEndpoints.
+	Endpoints            []*Endpoint `protobuf:"bytes,3,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *Service) Reset()         { *m = Service{} }
+func (m *Service) String() string { return proto.CompactTextString(m) }
+func (*Service) ProtoMessage()    {}
+func (*Service) Descriptor() ([]byte, []int) {
+	return fileDescriptor_2464dc41fdae2e63, []int{0}
+}
+
+func (m *Service) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Service.Unmarshal(m, b)
+}
+func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Service.Marshal(b, m, deterministic)
+}
+func (m *Service) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Service.Merge(m, src)
+}
+func (m *Service) XXX_Size() int {
+	return xxx_messageInfo_Service.Size(m)
+}
+func (m *Service) XXX_DiscardUnknown() {
+	xxx_messageInfo_Service.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Service proto.InternalMessageInfo
+
+func (m *Service) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Service) GetMetadata() map[string]string {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func (m *Service) GetEndpoints() []*Endpoint {
+	if m != nil {
+		return m.Endpoints
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Service)(nil), "google.cloud.servicedirectory.v1beta1.Service")
+	proto.RegisterMapType((map[string]string)(nil), "google.cloud.servicedirectory.v1beta1.Service.MetadataEntry")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/servicedirectory/v1beta1/service.proto", fileDescriptor_2464dc41fdae2e63)
+}
+
+var fileDescriptor_2464dc41fdae2e63 = []byte{
+	// 395 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x8b, 0xd4, 0x30,
+	0x14, 0xc7, 0xc9, 0xd4, 0x55, 0x37, 0x2a, 0x48, 0x11, 0xac, 0x45, 0x70, 0x11, 0xc4, 0xf5, 0x92,
+	0xb0, 0xae, 0x07, 0xd9, 0xf5, 0xb2, 0x03, 0x7b, 0x14, 0xc6, 0x8a, 0x17, 0x41, 0x24, 0x93, 0x3e,
+	0x6b, 0xb4, 0xcd, 0x2b, 0x49, 0xa6, 0x30, 0xd4, 0xe2, 0x1f, 0x21, 0xfe, 0x7f, 0x9e, 0xfd, 0x0b,
+	0x3c, 0x4a, 0x9b, 0x74, 0x66, 0x1c, 0x0f, 0xdb, 0xdb, 0xb7, 0xef, 0xf5, 0xfb, 0x79, 0xbf, 0x42,
+	0x4f, 0x0b, 0xc4, 0xa2, 0x04, 0x2e, 0x4b, 0x5c, 0xe5, 0xdc, 0x82, 0x69, 0x94, 0x84, 0x5c, 0x19,
+	0x90, 0x0e, 0xcd, 0x9a, 0x37, 0x27, 0x4b, 0x70, 0xe2, 0x64, 0x4c, 0xb0, 0xda, 0xa0, 0xc3, 0xf8,
+	0x89, 0x37, 0xb1, 0xc1, 0xc4, 0xf6, 0x4d, 0x2c, 0x98, 0xd2, 0x47, 0x81, 0x2d, 0x6a, 0xc5, 0x3f,
+	0x29, 0x28, 0xf3, 0x8f, 0x4b, 0xf8, 0x2c, 0x1a, 0x85, 0xc6, 0x73, 0xd2, 0x07, 0x3b, 0x3f, 0x18,
+	0xb0, 0xb8, 0x32, 0x63, 0x89, 0xf4, 0xc5, 0xb4, 0xbe, 0x40, 0xe7, 0x35, 0x2a, 0xed, 0x82, 0xeb,
+	0xe1, 0x0e, 0x50, 0x68, 0x8d, 0x4e, 0x38, 0x85, 0xda, 0xfa, 0xec, 0xe3, 0x1f, 0x11, 0xbd, 0xf1,
+	0xd6, 0x93, 0xe2, 0xfb, 0xf4, 0x9a, 0x16, 0x15, 0x24, 0xe4, 0x88, 0x1c, 0x1f, 0xce, 0xa3, 0x5f,
+	0x17, 0x07, 0xd9, 0x10, 0x88, 0x3f, 0xd0, 0x9b, 0x15, 0x38, 0x91, 0x0b, 0x27, 0x92, 0xd9, 0x51,
+	0x74, 0x7c, 0xeb, 0xf9, 0x2b, 0x36, 0x69, 0x5c, 0x16, 0xd0, 0xec, 0x75, 0xb0, 0x5f, 0x6a, 0x67,
+	0xd6, 0x3d, 0x9a, 0x64, 0x1b, 0x64, 0x9c, 0xd1, 0xc3, 0xb1, 0x67, 0x9b, 0x44, 0x03, 0x9f, 0x4f,
+	0xe4, 0x5f, 0x06, 0x5f, 0x8f, 0x8c, 0xb2, 0x2d, 0x26, 0x3d, 0xa7, 0x77, 0xfe, 0xa9, 0x19, 0xdf,
+	0xa5, 0xd1, 0x57, 0x58, 0xfb, 0xd9, 0xb2, 0x5e, 0xc6, 0xf7, 0xe8, 0x41, 0x23, 0xca, 0x15, 0x24,
+	0xb3, 0x21, 0xe6, 0x3f, 0xce, 0x66, 0x2f, 0xc9, 0xd9, 0xf7, 0xdf, 0x17, 0xdf, 0xe8, 0xd3, 0xff,
+	0x8a, 0xfa, 0x96, 0x44, 0xad, 0x2c, 0x93, 0x58, 0xf1, 0x71, 0x6d, 0x6f, 0x6a, 0x83, 0x5f, 0x40,
+	0x3a, 0xcb, 0xdb, 0xa0, 0x3a, 0x5e, 0xa2, 0xf4, 0x6b, 0xe6, 0xed, 0x28, 0x3b, 0xde, 0xef, 0xd2,
+	0xd6, 0x42, 0x82, 0xe5, 0xed, 0x46, 0x77, 0xe3, 0x21, 0x2d, 0x6f, 0x83, 0xea, 0xe6, 0x3f, 0x09,
+	0x7d, 0x26, 0xb1, 0x9a, 0xb6, 0x84, 0xf9, 0xed, 0xd0, 0xc9, 0xa2, 0xbf, 0xe8, 0x82, 0xbc, 0x7f,
+	0x17, 0x6c, 0x05, 0x96, 0x42, 0x17, 0x0c, 0x4d, 0xc1, 0x0b, 0xd0, 0xc3, 0xbd, 0xf9, 0x76, 0x86,
+	0x2b, 0x9e, 0xd1, 0xf9, 0x7e, 0xe2, 0x0f, 0x21, 0xcb, 0xeb, 0x03, 0xe4, 0xf4, 0x6f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xe5, 0xbb, 0x8d, 0x0d, 0x22, 0x03, 0x00, 0x00,
+}