Google Ads Node -- still using v21 (Depreciated)

Describe the problem/error/question

Google sunset v21 support for the Google Ads API. This was telegraphed multiple times by Google, and unfortunately n8n has not updated the native node to account for that.

Requesting that this node be updated ASAP, as it is breaking a number of our ad reporting workflows, and we would rather not replace everything with HTTP requests.

Thank you.

What is the error message (if any)?

{
  "errorMessage": "Bad request - please check your parameters [item 0]",
  "errorDescription": "Request contains an invalid argument.",
  "errorDetails": {
    "rawErrorMessage": [
      "Request failed with status code 400"
    ],
    "httpCode": "400",
    "errorData": {
      "error": {
        "code": 400,
        "message": "Request contains an invalid argument.",
        "status": "INVALID_ARGUMENT",
        "details": [
          {
            "@type": "type.googleapis.com/google.ads.googleads.v21.errors.GoogleAdsFailure",
            "errors": [
              {
                "errorCode": {
                  "requestError": "UNSUPPORTED_VERSION"
                },
                "message": "Version v21 is deprecated. Requests to this version will be blocked."
              }
            ],
            "requestId": "B3xOfhMsRn2-pHE-MA3VQg"
          }
        ]
      }
    }
  },
  "n8nDetails": {
    "nodeName": "Get Google Ads Metrics",
    "nodeType": "n8n-nodes-base.googleAds",
    "nodeVersion": 1,
    "resource": "campaign",
    "operation": "getAll",
    "itemIndex": 0,
    "runIndex": 0,
    "time": "8/13/2026, 9:55:45 AM",
    "n8nVersion": "2.34.5 (Self Hosted)",
    "binaryDataMode": "filesystem",
    "stackTrace": [
      "NodeApiError: Bad request - please check your parameters",
      "    at ExecuteSingleContext.httpRequestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helpers/authentication.ts:145:9)",
      "    at processTicksAndRejections (node:internal/process/task_queues:104:5)",
      "    at ExecuteSingleContext.httpRequestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helpers/factory.ts:119:11)",
      "    at RoutingNode.rawRoutingRequest (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/routing-node.ts:547:20)",
      "    at RoutingNode.makeRequest (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/routing-node.ts:741:19)",
      "    at async Promise.allSettled (index 0)",
      "    at RoutingNode.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/routing-node.ts:250:29)",
      "    at ExecuteContext.versionedNodeType.execute (/usr/local/lib/node_modules/n8n/src/node-types.ts:109:18)",
      "    at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1082:8)",
      "    at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.1_@opentelemetry+exporter-trace-otlp_5fb55fe16e47a8b43ddf1e6f25750496/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1382:11)"
    ]
  }
}

Please share your workflow

Not necessary.

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

Share the output returned by the last node

See error above

Information on your n8n setup

  • n8n version: 2.34.5
  • Database (default: SQLite): dft
  • n8n EXECUTIONS_PROCESS setting (default: own, main): dft
  • Running n8n via (Docker, npm, n8n cloud, desktop app): Docker
  • Operating system: Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-143-generic x86_64)

Hey @Nickolas_Steel, while you wait for a response, here are some things that might help:

Suggested resources

Automatically matched to your question.

Docs:

Forum:

@tomilagom - you’ve helped with similar issues before, can you take a look?

Automatically suggested by n8n’s community bot. It’s a pilot - please share feedback here.

@Nickolas_Steel Hiii! If that node’s not working, a HTTPS request node should help!

One moment, I’ll paste JSON you can use!

@Nickolas_Steel Try this!

Yea, all good. I’ve already temp replaced for our most essential workflows. Thanks though, I’m sure others will find that helpful.

In truth I just don’t want to have to handle additional devops of ensuring another http request node is maintained on our end. Nicer to just be able to update n8n and have all the native nodes be WAD.

yea! I would submit a bug report on n8n’s github! If there’s any other help you need let us know! Or, you can mark any of the replies as the solution! The github is probably the best way though to get your bug fixed!

Submitted. and closed.

Thanks for letting us know about this, We have created NODE-5754 as the internal dev ticket to look into it.

No worries. I submitted a PR here if you like: fix(Google Ads Node): Migrate from sunset v21 API to v25 by DentalRx · Pull Request #36255 · n8n-io/n8n · GitHub

No need to raise on GitHub now, this issue was automatically routed to us :sweat_smile:

Looks like this particular issue has been resolved in the workspace version 2.34.6. The module is now using v25.

However after testing it, it seems there are some hardcoded fields in the query that have been renamed by Google.

{ “error”: { “code”: 400, “message”: “Request contains an invalid argument.”, “status”: “INVALID_ARGUMENT”, “details”: [ { “@type”: “type.googleapis.com/google.ads.googleads.v25.errors.GoogleAdsFailure”, “errors”: [ { “errorCode”: { “queryError”: “UNRECOGNIZED_FIELD” }, “message”: “Unrecognized field in the query: ‘metrics.video_views’.” } ], “requestId”: “Dl1TzXcLgEz_UrWEL1z5ew” } ] } }

Thanks for catching that @Craig_Barlow

I’ve added a PR from yesterday @Jon - - fix(Google Ads Node): Select the renamed video views metric on API v25 by DentalRx · Pull Request #36347 · n8n-io/n8n · GitHub

Fixes: Google Ads Node – Renamed video views metric on API v25 · Issue #36349 · n8n-io/n8n · GitHub