Hi @GabrielR,
Welcome to the Community.
You're experiencing an issue with your Google Ads developer token in Zapier, likely due to a mismatch with the specified project ID. To troubleshoot, ensure your developer token is correct and approved, verify the project ID, confirm the Google Ads API is activated, and check that your account has the necessary permissions. If the issue persists, contacting Google support may be required.
Remember, we're here to help. If you have any other queries or if there's anything else you need assistance with, please don't hesitate to ask.
I was able to make the EXACT same call in postman. It has to be a bug in zapier.
Hi there @GabrielR! 
I looked into this and can see that you reached out to Support about this as well. It appears that the error is occurring on an API Request action, not one of the standard Google Ads action.
Can you share a quick screenshot of the current set up of the API Request action so I can take a closer look?
I expect you’re right and there’s a bug—could be that we’re not requesting the correct scopes for the endpoint.
But I’d like to double-check that there’s nothing extra we’d need to add to the set up to get it working in the Zap. Make sure to blur or remove all personal information (names, emails, addresses etc.) from screenshots before sharing - you can use a tool like Zappy for that.
That said, I wonder if you could try recreating the request in a Webhooks action, assuming it doesn’t require OAuth for the request?
Looking forward to hearing from you!
Unfortunately google ads API does require oauth. The precise problem is google’s API requires a specific project that has it’s own client ID and client secret where the project has Google Ads API access turned on. This Google projects specific oauth credentials have to be used to access Google Ads API. That’s what I did in postman is input the client credentials for that specific Google project to get a token and boom I’m able to make request. Zapier doesn’t allow me to input the client ID and client secret of my project which has me hypothesizing that no one has ever been able to use the API request feature correctly in zapier for Google Ads
Here’s more from gemini
You've hit on a very specific and nuanced issue with Zapier's Google Ads integration, and your hypothesis is largely correct, with some clarifications. It's not that no one has ever been able to use the API request feature, but that it's severely limited by the way Zapier handles OAuth for Google Ads, making it unusable in the way you (and many others) would expect. Let's break it down:
1. Zapier's Pre-Configured Connections vs. Custom OAuth
Zapier, like many integration platforms, simplifies the OAuth process for common services by providing pre-configured connections. When you connect to "Google Ads" in Zapier, you're using Zapier's pre-negotiated OAuth credentials with Google, not your own Google Cloud Project's credentials. This is great for basic actions (like creating campaigns, managing keywords, etc.) because it handles the authentication flow behind the scenes. Zapier has a single set of credentials that all their users share for a given service.
2. The "API Request" Action and its Limitations
The "API Request" action in Zapier is designed to be more flexible, allowing you to make custom calls to the Google Ads API beyond the pre-built actions. However, crucially, this action still uses the pre-configured connection's OAuth token. It doesn't provide a mechanism to supply your own Client ID and Client Secret for a different Google Cloud Project.
3. Why Your Hypothesis is Mostly Correct
- Your Project's Credentials: You're absolutely right that you need your Google Cloud Project's specific Client ID and Client Secret to access the Google Ads API if you were connecting directly (like you do in Postman).
- Zapier's Constraint: The "API Request" action in Zapier doesn't let you provide those credentials. It relies on the pre-configured connection, which uses Zapier's credentials. This is the core limitation.
- The Practical Implication: This means the "API Request" action is only useful if the pre-configured connection's permissions (i.e., the permissions Zapier negotiated with Google) happen to encompass the specific API endpoint and scope you need. If Zapier's app has permission granted for that endpoint, the request may be successful.
4. Why "No One" is a Slight Exaggeration
- Limited Use Cases Work: If someone needs to make a call to a standard Google Ads API endpoint that's already covered by the scopes Zapier requested when setting up their Google Ads integration, the "API Request" action could work. For example, if Zapier's connection has broad read-only access, some GET requests might succeed.
- Pre-built actions work fine: Zapier actions that are built in, don't have any problem. It is just the custom API calls.
5. The Root of the Problem: Scope and Permission Mismatch
The real issue often boils down to OAuth scopes. When Zapier sets up its Google Ads integration, it requests certain scopes (permissions) from Google. If your API request needs a scope that Zapier didn't request, it will fail, even if the endpoint itself is technically part of the Google Ads API. This isn't clearly exposed to the Zapier user.
6. Workarounds (and Why They're Often Unsatisfactory)
- Webhooks by Zapier (Outgoing): You could set up a webhook in your own application (outside Zapier). Your Zap could then use the "Webhooks by Zapier" action (as a trigger or an action) to send data to your application. Your application, using your Google Cloud Project's credentials, could then make the necessary Google Ads API call. This is a significant amount of extra work.
- Code by Zapier: You could try using the "Code by Zapier" action (with Python or JavaScript). Theoretically, you might be able to use a Google Ads client library within the code step, authenticate with your credentials, and make the API call. However, this has significant limitations:
- Dependencies: You'd need to make sure the necessary client libraries are available within Zapier's code environment.
- Credential Security: Hardcoding credentials directly in the code step is extremely insecure. You'd need a secure way to manage your secrets (which Zapier doesn't natively provide for this).
- Execution Time Limits: Zapier code steps have time limits, which might be insufficient for complex API interactions.
- Complexity: The authentication process within the Code step would likely be much more complex than what you expect. It would be like recreating your Postman setup in a restricted, sandboxed code environment.
- Contacting Zapier Support: It is useful to let Zapier Support know. If enough users report this limitation, they are more likely to improve support.
In Summary
You've correctly identified a major limitation of Zapier's Google Ads "API Request" action. It doesn't allow for custom OAuth credentials, restricting its usefulness to only those API calls that happen to be within the pre-configured connection's granted scopes. The workarounds are generally complex and often defeat the purpose of using a low-code platform like Zapier. Your Postman approach, using your project's credentials, is the correct way to directly access the full power of the Google Ads API. Zapier's "API Request" action is, unfortunately, misnamed in this case, as it doesn't provide the expected level of control for a true, custom API request.
Thanks for sharing those helpful screenshots and insights here, @GabrielR!
The API Request set up you’ve got there definitely looks correct to me. I’ve been investigating further on this end and it definitely seems that the developer-token is not being included in the headers for API Request actions in the Google Ads app. Since the integration uses OAuth2 and handles authentication through the connected Google Ads account, I suspect that’s why the developer token isn’t being automatically used to authenticate the API request—so this might be intentional rather than a bug.
If the Support team aren’t able to log a bug report for this issue, I’d recommend asking them to submit a feature request to allow developer tokens to be included in API Request actions—or even better, to add a native action that can generate keyword ideas.
In the meantime, the only way I can think of to get around this issue would be to develop a private integration using Zapier’s Developer Platform: https://zapier.com/developer-platform. It’s a bit more advanced than the API Request action but would let you include your own developer token and fully customize requests to the Google Ads API.
Hope that helps point you in the right direction! If you do decide to explore building a private integration, I’d love to hear how it goes. 