@pipedream/google_ads 0.8.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +4 -4
  2. package/actions/add-contact-to-list-by-email/add-contact-to-list-by-email.mjs +2 -1
  3. package/actions/common/bidding.mjs +196 -0
  4. package/actions/common/conversion-upload.mjs +131 -0
  5. package/actions/common/props.mjs +1 -1
  6. package/actions/create-ad-group-report/create-ad-group-report.mjs +2 -2
  7. package/actions/create-ad-report/create-ad-report.mjs +2 -2
  8. package/actions/create-campaign-report/create-campaign-report.mjs +2 -2
  9. package/actions/create-customer-list/common-constants.mjs +10 -10
  10. package/actions/create-customer-list/create-customer-list.mjs +3 -3
  11. package/actions/create-customer-report/create-customer-report.mjs +2 -2
  12. package/actions/create-or-remove-campaign-criteria/create-or-remove-campaign-criteria.mjs +2 -2
  13. package/actions/create-or-remove-campaign-shared-set/create-or-remove-campaign-shared-set.mjs +2 -2
  14. package/actions/create-or-remove-shared-criteria/create-or-remove-shared-criteria.mjs +2 -2
  15. package/actions/create-or-update-ad-group/create-or-update-ad-group.mjs +2 -2
  16. package/actions/create-or-update-ad-group-ad/create-or-update-ad-group-ad.mjs +2 -2
  17. package/actions/create-or-update-bidding-strategy/create-or-update-bidding-strategy.mjs +7 -2
  18. package/actions/create-or-update-campaign/create-or-update-campaign.mjs +71 -14
  19. package/actions/create-or-update-campaign-budget/create-or-update-campaign-budget.mjs +2 -2
  20. package/actions/create-or-update-keywords/create-or-update-keywords.mjs +2 -2
  21. package/actions/create-or-update-shared-sets/create-or-update-shared-sets.mjs +2 -2
  22. package/actions/create-report/create-report.mjs +5 -7
  23. package/actions/create-responsive-search-ad/create-responsive-search-ad.mjs +2 -1
  24. package/actions/generate-keyword-ideas/generate-keyword-ideas.mjs +3 -3
  25. package/actions/get-keyword-quality-scores/get-keyword-quality-scores.mjs +3 -2
  26. package/actions/list-account-id-options/list-account-id-options.mjs +1 -1
  27. package/actions/list-ad-group-ads/list-ad-group-ads.mjs +2 -2
  28. package/actions/list-ad-group-criteria/list-ad-group-criteria.mjs +2 -2
  29. package/actions/list-ad-groups/list-ad-groups.mjs +2 -2
  30. package/actions/list-bidding-strategies/list-bidding-strategies.mjs +2 -2
  31. package/actions/list-campaign-budgets/list-campaign-budgets.mjs +2 -2
  32. package/actions/list-campaign-criteria/list-campaign-criteria.mjs +2 -2
  33. package/actions/list-campaign-shared-sets/list-campaign-shared-sets.mjs +2 -2
  34. package/actions/list-campaigns/list-campaigns.mjs +2 -2
  35. package/actions/list-customer-clients/list-customer-clients.mjs +2 -2
  36. package/actions/list-keywords/list-keywords.mjs +2 -2
  37. package/actions/list-shared-criteria/list-shared-criteria.mjs +2 -2
  38. package/actions/list-shared-sets/list-shared-sets.mjs +2 -2
  39. package/actions/send-offline-conversion/send-offline-conversion.mjs +4 -4
  40. package/actions/update-campaign-ai-max-settings/update-campaign-ai-max-settings.mjs +2 -1
  41. package/actions/upload-call-conversion/upload-call-conversion.mjs +65 -0
  42. package/actions/upload-click-conversion/upload-click-conversion.mjs +121 -0
  43. package/common/common-report.mjs +5 -7
  44. package/common/constants.mjs +108 -8
  45. package/common/resources/ad.mjs +25 -70
  46. package/common/resources/adGroup.mjs +2 -3
  47. package/common/resources/campaign.mjs +7 -10
  48. package/common/resources/customer.mjs +3 -4
  49. package/google_ads.app.mjs +79 -29
  50. package/package.json +1 -1
  51. package/sources/new-campaign-created/new-campaign-created.mjs +3 -3
  52. package/sources/new-lead-form-entry/new-lead-form-entry.mjs +3 -3
package/README.md CHANGED
@@ -28,7 +28,7 @@ The component accepts a standard Google Ads API request object with the followin
28
28
  ```javascript
29
29
  const googleAdsReq = {
30
30
  method: "get|post|put|delete", // HTTP method
31
- url: "/v21/...", // Google Ads API endpoint path
31
+ url: "/v25/...", // Google Ads API endpoint path
32
32
  headers: {
33
33
  Authorization: `Bearer ${this.googleAds.$auth.oauth_access_token}`,
34
34
  },
@@ -48,7 +48,7 @@ Example for a custom query:
48
48
  ```javascript
49
49
  const googleAdsReq = {
50
50
  method: "post",
51
- url: "/v16/customers/1234567890/googleAds:search",
51
+ url: "/v25/customers/1234567890/googleAds:search",
52
52
  headers: {
53
53
  Authorization: `Bearer ${this.googleAds.$auth.oauth_access_token}`,
54
54
  },
@@ -97,7 +97,7 @@ const resp = await pd.makeProxyRequest(
97
97
  options: {
98
98
  method: "POST",
99
99
  body: {
100
- url: "/v19/customers:listAccessibleCustomers",
100
+ url: "/v25/customers:listAccessibleCustomers",
101
101
  method: "GET",
102
102
  // data: {} // If you need to send a body with a POST request, define it here
103
103
  },
@@ -115,7 +115,7 @@ curl -X POST "https://api.pipedream.com/v1/connect/{your_project_id}/proxy/{url_
115
115
  -H "Authorization: Bearer {access_token}" \
116
116
  -H "x-pd-environment: {development | production}" \
117
117
  -d '{
118
- "url": "/v19/customers:listAccessibleCustomers",
118
+ "url": "/v25/customers:listAccessibleCustomers",
119
119
  "method": "GET",
120
120
  # "data": {} # If you need to send a body with a POST request, define it here
121
121
  }'
@@ -7,13 +7,14 @@ export default {
7
7
  key: "google_ads-add-contact-to-list-by-email",
8
8
  name: "Add Contact to Customer List by Email",
9
9
  description: "Adds a contact to a specific customer list in Google Ads. Lists typically update in 6 to 12 hours after operation. [See the documentation](https://developers.google.com/google-ads/api/docs/remarketing/audience-segments/customer-match/get-started)",
10
- version: "0.1.9",
10
+ version: "0.1.11",
11
11
  annotations: {
12
12
  destructiveHint: true,
13
13
  openWorldHint: true,
14
14
  readOnlyHint: false,
15
15
  },
16
16
  type: "action",
17
+ ai: "optimized",
17
18
  props: {
18
19
  ...common.props,
19
20
  contactEmail: {
@@ -0,0 +1,196 @@
1
+ import { TARGET_IMPRESSION_SHARE_LOCATIONS } from "../../common/constants.mjs";
2
+
3
+ const cpcBidCeilingMicros = {
4
+ type: "string",
5
+ label: "CPC Bid Ceiling (Micros)",
6
+ description: "Maximum bid limit that can be set by the bid strategy, in micros (1,000,000 micros = 1 unit of the account currency). Applies to **Target CPA**, **Target ROAS**, **Target Spend**, **Target Impression Share**, **Maximize Conversions**, **Maximize Conversion Value** and **Percent CPC**.",
7
+ optional: true,
8
+ };
9
+
10
+ const cpcBidFloorMicros = {
11
+ type: "string",
12
+ label: "CPC Bid Floor (Micros)",
13
+ description: "Minimum bid limit that can be set by the bid strategy, in micros (1,000,000 micros = 1 unit of the account currency). Applies to **Target CPA**, **Target ROAS**, **Maximize Conversions** and **Maximize Conversion Value**.",
14
+ optional: true,
15
+ };
16
+
17
+ const targetCpaMicros = {
18
+ type: "string",
19
+ label: "Target CPA (Micros)",
20
+ description: "Average cost per acquisition to target, in micros (1,000,000 micros = 1 unit of the account currency). Applies to **Target CPA** and **Maximize Conversions**.",
21
+ optional: true,
22
+ };
23
+
24
+ const targetRoas = {
25
+ type: "string",
26
+ label: "Target ROAS",
27
+ description: "Revenue to target per unit of spend, as a decimal (e.g. `3.5` targets 350% return). Applies to **Target ROAS** and **Maximize Conversion Value**.",
28
+ optional: true,
29
+ };
30
+
31
+ // `target_spend_micros` is deprecated in v25, so it is not exposed.
32
+
33
+ const targetImpressionShareProps = {
34
+ location: {
35
+ type: "string",
36
+ label: "Impression Share Location",
37
+ description: "Where on the search results page the ads should appear. Applies to **Target Impression Share**.",
38
+ options: TARGET_IMPRESSION_SHARE_LOCATIONS,
39
+ optional: true,
40
+ },
41
+ locationFractionMicros: {
42
+ type: "string",
43
+ label: "Impression Share Target (Micros)",
44
+ description: "Fraction of ads to be shown in the targeted location, in micros (e.g. `650000` targets 65%). Applies to **Target Impression Share**.",
45
+ optional: true,
46
+ },
47
+ cpcBidCeilingMicros,
48
+ };
49
+
50
+ const enhancedCpcEnabled = {
51
+ type: "boolean",
52
+ label: "Enhanced CPC Enabled",
53
+ description: "Whether bids are enhanced based on conversion optimizer data. Applies to **Manual CPC** and **Percent CPC**.",
54
+ optional: true,
55
+ };
56
+
57
+ // Flat union of every scheme's fields; buildBiddingScheme picks the subset for the chosen type.
58
+ export function getSchemeProps(schemes) {
59
+ const merged = {};
60
+ for (const { props } of Object.values(schemes)) {
61
+ for (const [
62
+ name,
63
+ definition,
64
+ ] of Object.entries(props)) {
65
+ merged[name] ??= definition;
66
+ }
67
+ }
68
+ return merged;
69
+ }
70
+
71
+ // Campaign and portfolio schemes differ in v25: no `enhanced_cpc` on campaigns, no `percent_cpc`
72
+ // or manual scheme on portfolio strategies.
73
+ export const CAMPAIGN_BIDDING_SCHEMES = {
74
+ MANUAL_CPC: {
75
+ field: "manualCpc",
76
+ props: {
77
+ enhancedCpcEnabled,
78
+ },
79
+ },
80
+ MANUAL_CPM: {
81
+ field: "manualCpm",
82
+ props: {},
83
+ },
84
+ TARGET_CPA: {
85
+ field: "targetCpa",
86
+ props: {
87
+ targetCpaMicros,
88
+ cpcBidCeilingMicros,
89
+ cpcBidFloorMicros,
90
+ },
91
+ },
92
+ TARGET_ROAS: {
93
+ field: "targetRoas",
94
+ props: {
95
+ targetRoas,
96
+ cpcBidCeilingMicros,
97
+ cpcBidFloorMicros,
98
+ },
99
+ },
100
+ TARGET_SPEND: {
101
+ field: "targetSpend",
102
+ props: {
103
+ cpcBidCeilingMicros,
104
+ },
105
+ },
106
+ MAXIMIZE_CONVERSIONS: {
107
+ field: "maximizeConversions",
108
+ props: {
109
+ targetCpaMicros,
110
+ },
111
+ },
112
+ MAXIMIZE_CONVERSION_VALUE: {
113
+ field: "maximizeConversionValue",
114
+ props: {
115
+ targetRoas,
116
+ },
117
+ },
118
+ TARGET_IMPRESSION_SHARE: {
119
+ field: "targetImpressionShare",
120
+ props: targetImpressionShareProps,
121
+ },
122
+ PERCENT_CPC: {
123
+ field: "percentCpc",
124
+ props: {
125
+ cpcBidCeilingMicros,
126
+ enhancedCpcEnabled,
127
+ },
128
+ },
129
+ };
130
+
131
+ export const PORTFOLIO_BIDDING_SCHEMES = {
132
+ ENHANCED_CPC: {
133
+ field: "enhancedCpc",
134
+ props: {},
135
+ },
136
+ TARGET_CPA: {
137
+ field: "targetCpa",
138
+ props: {
139
+ targetCpaMicros,
140
+ cpcBidCeilingMicros,
141
+ cpcBidFloorMicros,
142
+ },
143
+ },
144
+ TARGET_ROAS: {
145
+ field: "targetRoas",
146
+ props: {
147
+ targetRoas,
148
+ cpcBidCeilingMicros,
149
+ cpcBidFloorMicros,
150
+ },
151
+ },
152
+ TARGET_SPEND: {
153
+ field: "targetSpend",
154
+ props: {
155
+ cpcBidCeilingMicros,
156
+ },
157
+ },
158
+ MAXIMIZE_CONVERSIONS: {
159
+ field: "maximizeConversions",
160
+ props: {
161
+ targetCpaMicros,
162
+ cpcBidCeilingMicros,
163
+ cpcBidFloorMicros,
164
+ },
165
+ },
166
+ MAXIMIZE_CONVERSION_VALUE: {
167
+ field: "maximizeConversionValue",
168
+ props: {
169
+ targetRoas,
170
+ cpcBidCeilingMicros,
171
+ cpcBidFloorMicros,
172
+ },
173
+ },
174
+ TARGET_IMPRESSION_SHARE: {
175
+ field: "targetImpressionShare",
176
+ props: targetImpressionShareProps,
177
+ },
178
+ };
179
+
180
+ export function buildBiddingScheme(schemes, type, values) {
181
+ const scheme = schemes[type];
182
+ if (!scheme) {
183
+ return {};
184
+ }
185
+ const config = Object.fromEntries(
186
+ Object.keys(scheme.props)
187
+ .filter((key) => values[key] !== undefined && values[key] !== "")
188
+ .map((key) => [
189
+ key,
190
+ values[key],
191
+ ]),
192
+ );
193
+ return {
194
+ [scheme.field]: config,
195
+ };
196
+ }
@@ -0,0 +1,131 @@
1
+ import { ConfigurationError } from "@pipedream/platform";
2
+ import googleAds from "../../google_ads.app.mjs";
3
+ import { RESERVED_CONVERSION_FIELDS } from "../../common/constants.mjs";
4
+ import { parseObject } from "../../common/utils.mjs";
5
+ import { getAdditionalFields } from "../common/props.mjs";
6
+
7
+ export const DOC_LINK =
8
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/ConversionUploadService";
9
+
10
+ export const DATE_TIME_HINT =
11
+ "Format `YYYY-MM-DD HH:MM:SS+|-HH:MM`, including the UTC offset (e.g. `2026-08-13 12:32:45-08:00`).";
12
+
13
+ export const commonProps = {
14
+ googleAds,
15
+ accountId: {
16
+ propDefinition: [
17
+ googleAds,
18
+ "accountId",
19
+ ],
20
+ },
21
+ customerClientId: {
22
+ propDefinition: [
23
+ googleAds,
24
+ "customerClientId",
25
+ ({ accountId }) => ({
26
+ accountId,
27
+ }),
28
+ ],
29
+ optional: true,
30
+ },
31
+ conversionActionId: {
32
+ propDefinition: [
33
+ googleAds,
34
+ "conversionActionId",
35
+ ({
36
+ accountId, customerClientId,
37
+ }) => ({
38
+ accountId,
39
+ customerClientId,
40
+ }),
41
+ ],
42
+ },
43
+ conversionDateTime: {
44
+ type: "string",
45
+ label: "Conversion Date Time",
46
+ description: `When the conversion occurred. Must be after the click or call. ${DATE_TIME_HINT}`,
47
+ },
48
+ conversionValue: {
49
+ type: "string",
50
+ label: "Conversion Value",
51
+ description: "The value of the conversion to the advertiser (e.g. `25.50`).",
52
+ optional: true,
53
+ },
54
+ currencyCode: {
55
+ type: "string",
56
+ label: "Currency Code",
57
+ description: "ISO 4217 three-character currency code for the conversion value (e.g. `USD`).",
58
+ optional: true,
59
+ },
60
+ validateOnly: {
61
+ type: "boolean",
62
+ label: "Validate Only",
63
+ description: "If `true`, the upload is validated but not recorded. Useful for checking a payload before sending real data.",
64
+ optional: true,
65
+ default: false,
66
+ },
67
+ additionalFields: getAdditionalFields(DOC_LINK),
68
+ };
69
+
70
+ export function buildBaseConversion({
71
+ conversionActionId, conversionDateTime, conversionValue, currencyCode, additionalFields,
72
+ }) {
73
+ if (conversionValue && !currencyCode) {
74
+ throw new ConfigurationError(
75
+ "**Currency Code** is required when **Conversion Value** is set.",
76
+ );
77
+ }
78
+ // A non-numeric value serializes to `null`, which Google accepts as a valueless conversion.
79
+ if (conversionValue && Number.isNaN(Number(conversionValue))) {
80
+ throw new ConfigurationError(
81
+ `**Conversion Value** must be a number, got \`${conversionValue}\`.`,
82
+ );
83
+ }
84
+ // The spread below would otherwise let these override the values validated above.
85
+ const extraFields = parseObject(additionalFields) ?? {};
86
+ const reservedFields = RESERVED_CONVERSION_FIELDS.filter((field) => field in extraFields);
87
+ if (reservedFields.length) {
88
+ throw new ConfigurationError(
89
+ `**Additional Fields** cannot override: ${reservedFields.join(", ")}. Use the dedicated props instead.`,
90
+ );
91
+ }
92
+ return {
93
+ conversionAction: conversionActionId,
94
+ conversionDateTime,
95
+ ...(conversionValue && {
96
+ conversionValue: Number(conversionValue),
97
+ }),
98
+ ...(currencyCode && {
99
+ currencyCode,
100
+ }),
101
+ ...extraFields,
102
+ };
103
+ }
104
+
105
+ // `partialFailure` is required by the API, so a rejected conversion still returns HTTP 200 with
106
+ // the reason in `partialFailureError` - without this check a failed upload would report success.
107
+ export async function uploadConversion({
108
+ $, googleAds, method, accountId, customerClientId, conversion, validateOnly,
109
+ }) {
110
+ const response = await googleAds[method]({
111
+ $,
112
+ accountId,
113
+ customerClientId,
114
+ data: {
115
+ conversions: [
116
+ conversion,
117
+ ],
118
+ partialFailure: true,
119
+ validateOnly,
120
+ },
121
+ });
122
+
123
+ const { partialFailureError } = response;
124
+ if (partialFailureError) {
125
+ throw new Error(
126
+ `Google Ads rejected the conversion: ${partialFailureError.message}`,
127
+ );
128
+ }
129
+
130
+ return response;
131
+ }
@@ -1,5 +1,5 @@
1
1
  const DEFAULT_DOCS =
2
- "https://developers.google.com/google-ads/api/reference/rpc/v21/UserList";
2
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/UserList";
3
3
 
4
4
  export const getAdditionalFields = (docsLink = DEFAULT_DOCS) => ({
5
5
  type: "object",
@@ -5,8 +5,8 @@ export default {
5
5
  ...createReportComponent(adGroup),
6
6
  key: "google_ads-create-ad-group-report",
7
7
  name: "Create Ad Group Report",
8
- description: "Creates a report for the Ad Group resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/GoogleAdsService/Search?transport=rest)",
9
- version: "0.0.3",
8
+ description: "Creates a report for the Ad Group resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/GoogleAdsService/Search?transport=rest)",
9
+ version: "0.0.4",
10
10
  annotations: {
11
11
  destructiveHint: false,
12
12
  openWorldHint: true,
@@ -5,8 +5,8 @@ export default {
5
5
  ...createReportComponent(ad),
6
6
  key: "google_ads-create-ad-report",
7
7
  name: "Create Ad Report",
8
- description: "Creates a report for the Ad resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/GoogleAdsService/Search?transport=rest)",
9
- version: "0.0.3",
8
+ description: "Creates a report for the Ad resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/GoogleAdsService/Search?transport=rest)",
9
+ version: "0.0.4",
10
10
  annotations: {
11
11
  destructiveHint: false,
12
12
  openWorldHint: true,
@@ -5,8 +5,8 @@ export default {
5
5
  ...createReportComponent(campaign),
6
6
  key: "google_ads-create-campaign-report",
7
7
  name: "Create Campaign Report",
8
- description: "Creates a report for the Campaign resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/GoogleAdsService/Search?transport=rest)",
9
- version: "0.0.3",
8
+ description: "Creates a report for the Campaign resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/GoogleAdsService/Search?transport=rest)",
9
+ version: "0.1.0",
10
10
  annotations: {
11
11
  destructiveHint: false,
12
12
  openWorldHint: true,
@@ -57,7 +57,7 @@ const USER_LIST_CRM_BASED_PROPS = {
57
57
  type: "string",
58
58
  label: "App ID",
59
59
  description:
60
- "A string that uniquely identifies a mobile application from which the data was collected. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/CrmBasedUserListInfo) for more details.",
60
+ "A string that uniquely identifies a mobile application from which the data was collected. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/CrmBasedUserListInfo) for more details.",
61
61
  optional: true,
62
62
  },
63
63
  };
@@ -74,7 +74,7 @@ const USER_LIST_RULE_BASED_PROPS = {
74
74
  type: "object",
75
75
  label: "Flexible Rule Customer List",
76
76
  description:
77
- "Flexible rule representation of visitors with one or multiple actions. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/FlexibleRuleUserListInfo) on how to build this object. Values will be parsed as JSON where applicable.",
77
+ "Flexible rule representation of visitors with one or multiple actions. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/FlexibleRuleUserListInfo) on how to build this object. Values will be parsed as JSON where applicable.",
78
78
  optional: true,
79
79
  },
80
80
  };
@@ -84,7 +84,7 @@ const USER_LIST_LOGICAL_PROPS = {
84
84
  type: "string[]",
85
85
  label: "Rules",
86
86
  description:
87
- "Logical list rules that define this customer list. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/UserListLogicalRuleInfo) on how to build each object. Values will be parsed as JSON where applicable.",
87
+ "Logical list rules that define this customer list. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/UserListLogicalRuleInfo) on how to build each object. Values will be parsed as JSON where applicable.",
88
88
  },
89
89
  };
90
90
 
@@ -92,7 +92,7 @@ const USER_LIST_BASIC_PROPS = {
92
92
  conversionActions: {
93
93
  type: "string[]",
94
94
  label: "Conversion action(s)",
95
- description: "One or more [conversion actions](https://developers.google.com/google-ads/api/reference/rpc/v21/ConversionAction) to build the list with.",
95
+ description: "One or more [conversion actions](https://developers.google.com/google-ads/api/reference/rpc/v25/ConversionAction) to build the list with.",
96
96
  optional: true,
97
97
  options: async() => {
98
98
  const {
@@ -115,7 +115,7 @@ const USER_LIST_BASIC_PROPS = {
115
115
  remarketingActions: {
116
116
  type: "string[]",
117
117
  label: "Remarketing action(s)",
118
- description: "One or more [remarketing actions](https://developers.google.com/google-ads/api/reference/rpc/v21/RemarketingAction).",
118
+ description: "One or more [remarketing actions](https://developers.google.com/google-ads/api/reference/rpc/v25/RemarketingAction).",
119
119
  optional: true,
120
120
  options: async() => {
121
121
  const {
@@ -198,21 +198,21 @@ export const USER_LIST_TYPE_OPTIONS = [
198
198
  label: "CRM-based - a list of provided customers",
199
199
  value: USER_LIST_TYPES.CRM_BASED,
200
200
  docsLink:
201
- "https://developers.google.com/google-ads/api/reference/rpc/v21/CrmBasedUserListInfo",
201
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/CrmBasedUserListInfo",
202
202
  props: USER_LIST_CRM_BASED_PROPS,
203
203
  },
204
204
  {
205
205
  label: "Rule-Based - a customer list generated by a rule",
206
206
  value: USER_LIST_TYPES.RULE_BASED,
207
207
  docsLink:
208
- "https://developers.google.com/google-ads/api/reference/rpc/v21/RuleBasedUserListInfo",
208
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/RuleBasedUserListInfo",
209
209
  props: USER_LIST_RULE_BASED_PROPS,
210
210
  },
211
211
  {
212
212
  label: "Logical - a custom combination of customer lists",
213
213
  value: USER_LIST_TYPES.LOGICAL,
214
214
  docsLink:
215
- "https://developers.google.com/google-ads/api/reference/rpc/v21/LogicalUserListInfo",
215
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/LogicalUserListInfo",
216
216
  props: USER_LIST_LOGICAL_PROPS,
217
217
  },
218
218
  {
@@ -220,7 +220,7 @@ export const USER_LIST_TYPE_OPTIONS = [
220
220
  "Basic - a customer list targeting as a collection of conversions or remarketing actions",
221
221
  value: USER_LIST_TYPES.BASIC,
222
222
  docsLink:
223
- "https://developers.google.com/google-ads/api/reference/rpc/v21/BasicUserListInfo",
223
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/BasicUserListInfo",
224
224
  props: USER_LIST_BASIC_PROPS,
225
225
  },
226
226
  {
@@ -228,7 +228,7 @@ export const USER_LIST_TYPE_OPTIONS = [
228
228
  "Lookalike - a list composed of customers similar to those of a configurable seed",
229
229
  value: USER_LIST_TYPES.LOOKALIKE,
230
230
  docsLink:
231
- "https://developers.google.com/google-ads/api/reference/rpc/v21/LookalikeUserListInfo",
231
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/LookalikeUserListInfo",
232
232
  props: USER_LIST_LOOKALIKE_PROPS,
233
233
  },
234
234
  ];
@@ -14,8 +14,8 @@ export default {
14
14
  ...common,
15
15
  key: "google_ads-create-customer-list",
16
16
  name: "Create Customer List",
17
- description: "Create a new customer list in Google Ads. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/UserList)",
18
- version: "0.0.10",
17
+ description: "Create a new customer list in Google Ads. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/UserList)",
18
+ version: "0.0.11",
19
19
  annotations: {
20
20
  destructiveHint: false,
21
21
  openWorldHint: true,
@@ -38,7 +38,7 @@ export default {
38
38
  listType: {
39
39
  type: "string",
40
40
  label: "List Type",
41
- description: "The [type of customer list](https://developers.google.com/google-ads/api/reference/rpc/v21/CrmBasedUserListInfo) to create.",
41
+ description: "The [type of customer list](https://developers.google.com/google-ads/api/reference/rpc/v25/CrmBasedUserListInfo) to create.",
42
42
  options: USER_LIST_TYPE_OPTIONS.map(({
43
43
  label, value,
44
44
  }) => ({
@@ -5,8 +5,8 @@ export default {
5
5
  ...createReportComponent(customer),
6
6
  key: "google_ads-create-customer-report",
7
7
  name: "Create Customer Report",
8
- description: "Creates a report for the Customer resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v21/GoogleAdsService/Search?transport=rest)",
9
- version: "0.0.3",
8
+ description: "Creates a report for the Customer resource. [See the documentation](https://developers.google.com/google-ads/api/reference/rpc/v25/GoogleAdsService/Search?transport=rest)",
9
+ version: "0.0.4",
10
10
  annotations: {
11
11
  destructiveHint: false,
12
12
  openWorldHint: true,
@@ -9,13 +9,13 @@ import { parseObject } from "../../common/utils.mjs";
9
9
  import { getAdditionalFields } from "../common/props.mjs";
10
10
 
11
11
  const docLink =
12
- "https://developers.google.com/google-ads/api/reference/rpc/v21/CampaignCriterionService/MutateCampaignCriteria?transport=rest";
12
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/CampaignCriterionService/MutateCampaignCriteria?transport=rest";
13
13
 
14
14
  export default {
15
15
  key: "google_ads-create-or-remove-campaign-criteria",
16
16
  name: "Create or Remove Campaign Criteria",
17
17
  description: `Creates or removes criteria for a campaign (e.g., keyword targeting, brand lists). [See the documentation](${docLink})`,
18
- version: "0.0.1",
18
+ version: "0.0.2",
19
19
  type: "action",
20
20
  annotations: {
21
21
  destructiveHint: true,
@@ -3,13 +3,13 @@ import googleAds from "../../google_ads.app.mjs";
3
3
  import { CREATE_REMOVE_OPERATION_TYPES } from "../../common/constants.mjs";
4
4
 
5
5
  const docLink =
6
- "https://developers.google.com/google-ads/api/reference/rpc/v21/CampaignSharedSetService/MutateCampaignSharedSets?transport=rest";
6
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/CampaignSharedSetService/MutateCampaignSharedSets?transport=rest";
7
7
 
8
8
  export default {
9
9
  key: "google_ads-create-or-remove-campaign-shared-set",
10
10
  name: "Create or Remove Campaign Shared Set",
11
11
  description: `Attaches or detaches a shared set from a campaign. [See the documentation](${docLink})`,
12
- version: "0.0.1",
12
+ version: "0.0.2",
13
13
  type: "action",
14
14
  annotations: {
15
15
  destructiveHint: true,
@@ -8,13 +8,13 @@ import { parseObject } from "../../common/utils.mjs";
8
8
  import { getAdditionalFields } from "../common/props.mjs";
9
9
 
10
10
  const docLink =
11
- "https://developers.google.com/google-ads/api/reference/rpc/v21/SharedCriterionService/MutateSharedCriteria?transport=rest";
11
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/SharedCriterionService/MutateSharedCriteria?transport=rest";
12
12
 
13
13
  export default {
14
14
  key: "google_ads-create-or-remove-shared-criteria",
15
15
  name: "Create or Remove Shared Criteria",
16
16
  description: `Creates or removes criteria from a shared set (e.g., negative keywords). [See the documentation](${docLink})`,
17
- version: "0.0.1",
17
+ version: "0.0.2",
18
18
  type: "action",
19
19
  annotations: {
20
20
  destructiveHint: true,
@@ -10,13 +10,13 @@ import { parseObject } from "../../common/utils.mjs";
10
10
  import { getAdditionalFields } from "../common/props.mjs";
11
11
 
12
12
  const docLink =
13
- "https://developers.google.com/google-ads/api/reference/rpc/v21/AdGroupService/MutateAdGroups?transport=rest";
13
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/AdGroupService/MutateAdGroups?transport=rest";
14
14
 
15
15
  export default {
16
16
  key: "google_ads-create-or-update-ad-group",
17
17
  name: "Create or Update Ad Group",
18
18
  description: `Creates or updates an ad group. [See the documentation](${docLink})`,
19
- version: "0.0.1",
19
+ version: "0.1.0",
20
20
  type: "action",
21
21
  annotations: {
22
22
  destructiveHint: true,
@@ -9,13 +9,13 @@ import {
9
9
  import { getAdditionalFields } from "../common/props.mjs";
10
10
 
11
11
  const docLink =
12
- "https://developers.google.com/google-ads/api/reference/rpc/v21/AdGroupAdService/MutateAdGroupAds?transport=rest";
12
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/AdGroupAdService/MutateAdGroupAds?transport=rest";
13
13
 
14
14
  export default {
15
15
  key: "google_ads-create-or-update-ad-group-ad",
16
16
  name: "Create, Update, or Remove Ad Group Ad",
17
17
  description: `Creates, updates, or removes an ad group ad. [See the documentation](${docLink})`,
18
- version: "0.0.1",
18
+ version: "0.0.2",
19
19
  type: "action",
20
20
  annotations: {
21
21
  destructiveHint: true,
@@ -6,15 +6,18 @@ import {
6
6
  } from "../../common/constants.mjs";
7
7
  import { parseObject } from "../../common/utils.mjs";
8
8
  import { getAdditionalFields } from "../common/props.mjs";
9
+ import {
10
+ buildBiddingScheme, getSchemeProps, PORTFOLIO_BIDDING_SCHEMES,
11
+ } from "../common/bidding.mjs";
9
12
 
10
13
  const docLink =
11
- "https://developers.google.com/google-ads/api/reference/rpc/v21/BiddingStrategyService/MutateBiddingStrategies?transport=rest";
14
+ "https://developers.google.com/google-ads/api/reference/rpc/v25/BiddingStrategyService/MutateBiddingStrategies?transport=rest";
12
15
 
13
16
  export default {
14
17
  key: "google_ads-create-or-update-bidding-strategy",
15
18
  name: "Create or Update Bidding Strategy",
16
19
  description: `Creates, updates, or removes a portfolio bidding strategy. [See the documentation](${docLink})`,
17
- version: "0.0.1",
20
+ version: "1.0.0",
18
21
  type: "action",
19
22
  annotations: {
20
23
  destructiveHint: true,
@@ -78,6 +81,7 @@ export default {
78
81
  options: PORTFOLIO_BIDDING_STRATEGY_TYPES,
79
82
  optional: true,
80
83
  },
84
+ ...getSchemeProps(PORTFOLIO_BIDDING_SCHEMES),
81
85
  additionalFields: getAdditionalFields(docLink),
82
86
  },
83
87
  async run({ $ }) {
@@ -140,6 +144,7 @@ export default {
140
144
  ...(type && {
141
145
  type,
142
146
  }),
147
+ ...buildBiddingScheme(PORTFOLIO_BIDDING_SCHEMES, type, this),
143
148
  ...parseObject(additionalFields),
144
149
  };
145
150