Why am I getting an "observation error" when deploying a Pipedream Connect trigger for Google Analytics?

This topic was automatically generated from Slack. You can find the original thread here.

When deploying a Pipedream Connect trigger for Google Analytics of the type google_analytics-page-opened, I’ve started getting this error:

{"error":"observation error","err":null,"observations":[{"k":"hook","ts":1767906968141,"h":"deploy"},{"k":"db.set","ts":1767906968141,"pn":"db","key":"startDate","val":"2025-12-08"},{"k":"db.get","ts":1767906968141,"pn":"db","key":"startDate","ret":"2025-12-08"},{"k":"error","ts":1767906968398,"err":{"name":"Error","message":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=en\u003e\n  \u003cmeta charset=utf-8\u003e\n  \u003cmeta name=viewport content=\"initial-scale=1, minimum-scale=1, width=device-width\"\u003e\n  \u003ctitle\u003eError 404 (Not Found)!!1\u003c/title\u003e\n  \u003cstyle\u003e\n    **{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}** \u003e body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}\n  \u003c/style\u003e\n  \u003ca href=//www.google.com/\u003e\u003cspan id=logo aria-label=Google\u003e\u003c/span\u003e\u003c/a\u003e\n  \u003cp\u003e\u003cb\u003e404.\u003c/b\u003e \u003cins\u003eThat's an error.\u003c/ins\u003e\n  \u003cp\u003eThe requested URL \u003ccode\u003e/v4/reports:batchGet\u003c/code\u003e was not found on this server.  \u003cins\u003eThat's all we know.\u003c/ins\u003e\n","stack":"Error: \u003c!DOCTYPE html\u003e\n\u003chtml lang=en\u003e\n  \u003cmeta charset=utf-8\u003e\n  \u003cmeta name=viewport content=\"initial-scale=1, minimum-scale=1, width=device-width\"\u003e\n  \u003ctitle\u003eError 404 (Not Found)!!1\u003c/title\u003e\n  \u003cstyle\u003e\n    **{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}** \u003e body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}\n  \u003c/style\u003e\n  \u003ca href=//www.google.com/\u003e\u003cspan id=logo aria-label=Google\u003e\u003c/span\u003e\u003c/a\u003e\n  \u003cp\u003e\u003cb\u003e404.\u003c/b\u003e \u003cins\u003eThat's an error.\u003c/ins\u003e\n  \u003cp\u003eThe requested URL \u003ccode\u003e/v4/reports:batchGet\u003c/code\u003e was not found on this server.  \u003cins\u003eThat's all we know.\u003c/ins\u003e\n\n    at Gaxios._request (/tmp/__pdg__/dist/code/28664e1919bbd8d207369a05dfb214498fe0bba66b4fde8f1f05a8539e7fc0a5/node_modules/.pnpm/gaxios@7.1.3/node_modules/gaxios/src/gaxios.ts:213:15)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async OAuth2Client.requestAsync (/tmp/__pdg__/dist/code/28664e1919bbd8d207369a05dfb214498fe0bba66b4fde8f1f05a8539e7fc0a5/node_modules/.pnpm/google-auth-library@10.5.0/node_modules/google-auth-library/build/src/auth/oauth2client.js:463:20)\n    at async createAPIRequestAsync (/tmp/__pdg__/dist/code/28664e1919bbd8d207369a05dfb214498fe0bba66b4fde8f1f05a8539e7fc0a5/node_modules/.pnpm/googleapis-common@8.0.1/node_modules/googleapis-common/build/src/apirequest.js:308:25)\n    at async Object.processEvent (file:///tmp/__pdg__/dist/code/28664e1919bbd8d207369a05dfb214498fe0bba66b4fde8f1f05a8539e7fc0a5/code/sources/page-opened/page-opened.mjs:78:32)\n    at async Object.deploy (file:///tmp/__pdg__/dist/code/28664e1919bbd8d207369a05dfb214498fe0bba66b4fde8f1f05a8539e7fc0a5/code/sources/page-opened/page-opened.mjs:32:7)\n    at async callComponentHooks (/var/task/node_modules/@lambda-v2/component-runtime/src/callComponentHooks.js:31:7)\n    at async /var/task/node_modules/@lambda-v2/component-runtime/src/deployedComponentMain.js:73:7\n    at async captureObservations (/var/task/node_modules/@lambda-v2/component-runtime/src/captureObservations.js:28:5)\n    at async deployedComponentMain (/var/task/node_modules/@lambda-v2/component-runtime/src/deployedComponentMain.js:46:20)"}}]}

I asked the Pipedream documentation AI what that means. It gave me the following response:

This error is not a Pipedream issue — it’s coming from Google’s API.
What’s Happening
The trigger is trying to call Google Analytics API endpoint /v4/reports:batchGet, but Google is returning a 404 Not Found error. This means:

  1. The API endpoint doesn’t exist — Google Analytics has migrated from Universal Analytics (UA) to Google Analytics 4 (GA4). The /v4/reports:batchGet endpoint was part of the older Universal Analytics Reporting API, which Google has deprecated and shut down.
  2. Universal Analytics was sunset — Google stopped processing UA data in July 2023, and the APIs have been discontinued.
    Solution
    You need to use a trigger/component that works with Google Analytics 4 (GA4) instead, which uses the Google Analytics Data API (not the Reporting API v4).
    Check if there’s an updated Google Analytics 4 component available in Pipedream, or update your integration to use the GA4 Data API endpoints.

any update on this?

Will have a look at the component to understand what this is - it’s definitely an error coming from Google’s API, will check if there’s an error on our end causing that.

Sounds to me like the component is calling an outdated API endpoint?

This is pretty obscure - the method still exists in the googleapis/analyticsreporting client, which is an official Google API client and even has the method documented, but the API rejects that endpoint call

cc this may need a more in-depth look

Thanks for looping me in .

@U0912K9MPBM - I agree with Guilherme, but we’ll dig in further to see if there’s anything we can do on our end.

Thank you!:pray:

Just checking in to see if you’ve got any updates here, / @U03EGTE5WC8?