Google Ads v2
Provides integration with Google Ads, Google's online advertising platform. Advertisers and agencies use Google Ads to run search, display, video, shopping and app campaigns, manage budgets and bids, track conversions, and report on performance across one or many customer accounts.
The Node connects to the Google Ads API (version v26). It can run GAQL reports, read account resources, create, update and remove resources such as campaigns, ad groups and labels, and run provider actions such as keyword planning and offline conversion uploads. Use it to bring Google Ads reporting into other systems, or to keep campaigns and conversions in sync with your own data.
Revision History
0.0.0.1 - Initial release.
Connection
The Connection stores the Google Cloud OAuth client and the tokens obtained when you click Connect your Account. All Methods use it. You can also set the manager account and the default customer account that requests act on.
| Property | Type | Description |
|---|---|---|
ClientId |
String | OAuth client ID from a Google Cloud project with the Google Ads API enabled. |
ClientSecret |
Masked | OAuth client secret from the same Google Cloud project. |
ManagerAccountId |
String | Optional 10-digit manager (MCC) customer ID without hyphens, for example 1234567890. It is sent to Google as the login customer ID, which you need when you access client accounts through a manager account. |
DefaultCustomerId |
String | Optional 10-digit customer ID without hyphens. It is used when Options.customerId is empty. |
TimeoutSeconds |
Integer | Per-request timeout in seconds. The default is 100. |
AccessToken |
Masked | Google access token with the adwords scope. Connect your Account sets it. |
RefreshToken |
Masked | Offline Google refresh token. Connect your Account sets it, and the Node uses it to renew the access token automatically. |
Setup Notes
Run this Node on a Cloud Runtime.
- In Google Cloud, create or choose a project, enable the Google Ads API, and create an OAuth client. Add the Flowgear OAuth callback URL,
https://app.flowgear.net/r/auth, to the client's authorized redirect URIs. - Make sure the project's Google Ads API access level allows the accounts you need. The access level (Test, Explorer, Basic or Standard) decides which accounts the
Connectioncan reach. Google retired developer tokens on 9 September 2026, so theConnectionhas no developer token Property. - Enter
ClientIdandClientSecret, then clickConnect your Accountand sign in with a Google user that has access to the Google Ads accounts. The Node requests offline access to thehttps://www.googleapis.com/auth/adwordsscope. - If you reach client accounts through a manager account, enter its 10-digit ID in
ManagerAccountId. EnterDefaultCustomerIdto avoid repeating the customer ID in every Method. - Enter customer IDs as 10 digits without hyphens. The Node rejects
123-456-7890instead of rewriting it.
You can supply an AccessToken on its own, but it can't be renewed. When it expires, the Node asks you to supply a new token.
Connections from the v1 Google Ads Node do not migrate. Create a new Connection and click Connect your Account. The v1 Node-level CustomerId becomes DefaultCustomerId or Options.customerId.
Methods
The Node groups the Google Ads API into six Methods by intent. In each Method, you choose a template that selects the operation and fills OperationId, Options and, where needed, Items. Options and Items use Google's own field names, such as customerId, query and resourceName. Options.customerId falls back to DefaultCustomerId when it is empty.
The Node handles paging itself. Templates have no page token, page size or search settings fields. The first page of a query, or the first batch or item of a mutation, is sent while the Node runs. Later pages and batches are sent as the next Node reads the results.
Query
Runs a GAQL report or another paged search with automatic pagination. The operations are googleAds:search (GAQL), googleAdsFields:search and generateKeywordIdeas.
The search template's default query is SELECT customer.id, customer.descriptive_name FROM customer, so it runs with only DefaultCustomerId set. The query sample shows a filtered campaign report you can adapt.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Operation selected from a template. |
Options |
Object | customerId, the GAQL query and other search fields. query is required for every operation that takes one, including googleAds:search and googleAdsFields:search. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per result, such as a GoogleAdsRow with the campaign, metrics and segments fields selected by the query. Page metadata such as nextPageToken, fieldMask and totalResultsCount is not included. |
A query that matches nothing returns no rows. If Google rejects the first page, for example because of a GAQL syntax error, the Node raises that error instead of returning an empty result.
Read
Reads accounts, invoices, operations, batch job results and other fixed resources through Google's 11 GET operations, such as listAccessibleCustomers.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Operation selected from a template. |
Options |
Object | Route and query values using Google's field names, such as customerId or resourceName. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per collection item, or one row for a single-object response. Paged reads continue automatically. |
Create
Creates Google Ads resources, such as campaigns, ad groups and labels, through every resource mutate service that supports create.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Service selected from a template. |
Items |
Array | One resource per item, for example the fields of a Label. |
Options |
Object | customerId, validateOnly and responseContentType. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per input item, with the mutate result, such as the new resourceName, and a Flowgear object. |
The Flowgear object contains:
IsSuccess: whether Google applied the item.Message:Created, orValidatedwhenvalidateOnlyistrue, or the reason the item failed.Request: the original input item.
Update
Updates Google Ads resources through every resource mutate service that supports update.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Service selected from a template. |
Items |
Array | One resource per item, with its resourceName and an updateMask such as name,status. |
Options |
Object | customerId, validateOnly and responseContentType. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per input item, with the mutate result and a Flowgear object (IsSuccess, Message and Request). A successful item has the message Updated, or Validated when validateOnly is true. |
updateMask is required on each item. The Node never derives it, because the mask decides which fields Google changes or clears. An item without an updateMask returns a failed row and is not sent.
Delete
Removes Google Ads resources by resource name through every resource mutate service that supports remove.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Service selected from a template. |
Items |
Array | One resourceName per item, for example customers/1234567890/labels/123. |
Options |
Object | customerId, validateOnly and responseContentType. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per input item, with a Flowgear object (IsSuccess, Message and Request). A successful item has the message Removed, or Validated when validateOnly is true. |
Delete templates leave resourceName empty, so a template can't remove anything as selected. An item without a resourceName returns a failed row and is not sent.
Action
Runs a Google Ads provider action, such as keyword planning, conversion uploads, recommendations, experiments, batch jobs and the mixed googleAds:mutate.
| Parameter | Type | Description |
|---|---|---|
Connection |
Connection | Google Ads Connection. |
OperationId |
String | Action selected from a template. |
Options |
Object | Route and query values using Google's field names. |
Items |
Array | One request body per item. Not used by actions without a request body. |
| Return | Type | Description |
|---|---|---|
Response |
Array | One row per input item with the action response and a Flowgear object (IsSuccess, Message and Request). An action without a request body runs once and returns one row without Flowgear.Request. |
Actions such as uploadClickConversions require partialFailure: true in the item, so Google accepts the request even when some operations are rejected. Those rows report IsSuccess as false with the rejected operations' errors, and keep the results of the accepted operations.
Usage Notes
Create,UpdateandDeletesend items in batches of up to 1,000 operations. Where the service supports partial failure, each item succeeds or fails on its own. Where it doesn't, one bad item rejects the whole batch: that item is markedRejected:with Google's errors, and the other items in the batch are markedNot applied:.- If Google rejects the first batch or item as a whole, the Node fails and nothing more is sent. This happens for authentication, permission and quota errors, for example. On a later batch or item, a rejection marks only that batch or item as failed, and the Node continues with the rest.
- An expired access token is refreshed and the request is retried, up to two times. If Google reports the grant as revoked (
invalid_grant), the Node asks you to reconnect theConnection. Permission errors such asUSER_PERMISSION_DENIEDandCLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTIONare not refreshed and include a hint about what to check. - Rate limits with a short retry delay (60 seconds or less) are retried automatically. Daily quota exhaustion fails immediately.
- String and integer lists are CSV text in both directions. Values that contain commas, quotes or line breaks are quoted with doubled quotes, and empty text is an empty list. Free-form provider fields are JSON text.
- When a request or response has a single object field, the template exposes that object's fields directly. For example,
productLinks:createitems are theproductLinkfields. - Set
validateOnlytotrueto have Google check items without changing anything. - Template keys include the API version. When the Node moves to a newer Google Ads API version, reselect the templates in your Workflows.
Known Issues
- The Node has been validated against a Google Ads test account only, not a production account.
googleAds:searchStream, media uploads and the long-running operationlist,wait,cancelanddeletecalls are not available. UsegoogleAds:searchin theQueryMethod instead ofsearchStream.- The
googleAds:searchtemplate describes the fullGoogleAdsRow, so it is large and can take a moment to load in the Workflow designer.