Hi,
I'm trying to integrate the Google Ads API with a service account to automate the retrieval of Keyword Planner metrics. I've set everything up according to the official documentation, but I'm getting 404 errors on all API endpoints, even though the API appears as "enabled" in the Google Cloud Console.
I'm including all the details (Cursor prepared them).
=== Issue
Main Error: 404 Not Found on all Google Ads API endpoints
Symptom: The API appears as "enabled" in the Google Cloud Console, but it's not available in Discovery, and all endpoints fail.
Impact: I can't access any Google Ads API endpoints.
=== Project Configuration
Project ID: keyword-explorer-******
Google Cloud Console: Google Ads API enabled for more than 24 hours.
Status: "Enabled" in APIs and Services.
Billing: Enabled and linked (Account: 010042-21EC96-******)
=== Credentials and Authentication
Service Account: kw-explorer-srv@keyword-explorer-******.
iam.gserviceaccount.comAuthentication Type: Service Account (not OAuth2).
Scope Used:
https://www.googleapis.com/auth/adwordsAccess Token: Generated successfully ✅
=== Developer Token
Token: 35583SrClUWFnXOo******
Length: 22 characters
Status: Active and approved in the Google Ads API Center
Type: Basic (pending upgrade to Standard)
=== Google Ads Accounts
Login Customer ID (MCC): 1559******
Customer ID (Specific Customer): 5737******
Service account authorized on both accounts with Administrator permissions ✅
=== Specific Errors
All of these endpoints return 404 Not Found:
https://googleads.googleapis.com/v14/customers/5737******/googleAds:searchStreamhttps://googleads.googleapis.com/v15/customers/5737******/googleAds:searchStreamhttps://googleads.googleapis.com/v14/customers/5737******/googleAds:searchhttps://googleads.googleapis.com/v14/customers/5737******/customers:listAccessibleCustomers=== Headers used:
Authorization: Bearer [token generated successfully]
developer-token: 35583SrClUWFnXOo******
login-customer-id: 1559******
Content-Type: application/json
=== Diagnostics Performed
✅ Access token generated successfully
✅ User API is working (
https://www.googleapis.com/oauth2/v2/userinfo)
✅ Discovery API is working
❌ Google Ads API v14 NOT found in Discovery
❌ All Google Ads endpoints return 404
❌ 403 error in Google Cloud Management APIs (normal for Service Accounts)
=== Checks Completed
✅ API enabled in Google Cloud Console
✅ Service account in IAM with ServiceAccountTokenCreator
✅ Service account authorized in Google Ads (MCC and client)
✅ Developer Token active and approved
✅ Billing enabled and linked
=== Sample Code
// Configuration
$developerToken = '35583SrClUWFnXOo******';
$loginCustomerId = '1559******';
$customerId = '5737******';
// Headers
$headers = [
'Authorization' => "Bearer $accessToken",
'developer-token' => $developerToken,
'login-customer-id' => $loginCustomerId,
'Content-Type' => 'application/json'
];
// Failing Endpoint
$url = "
https://googleads.googleapis.com/v14/customers/$customerId/googleAds:searchStream";
$data = ['query' => 'SELECT
customer.id FROM customer LIMIT 1'];
=== Specific Questions
Why does the API appear as "enabled" but is not available in Discovery?
Google Ads API v14 does NOT appear in the list of available APIs
All endpoints return 404 Not Found
Is the 22-character Developer Token normal? The documentation mentions 24 characters, but mine is 22.
Could this be causing the issue?
Are there any additional steps required for Service Accounts?
Do I need any special permissions or additional configuration?
Is this a known issue with Google Ads API v14?
Should I try v15 or v16?
Are there any specific requirements for the authentication scope?
Is the scope
https://www.googleapis.com/auth/adwords sufficient?
=== Additional Technical Information
Language: PHP
Library: GuzzleHttp
Time since enablement: More than 24 hours
Goal: Automate Keyword Planner to obtain keyword metrics
=== Sensitive Data (Obfuscated until requested)
I've put asterisks on all IDs. I can provide them.
=== Conclusion
I have everything configured correctly according to the documentation, but the API is not responding. Is there a step I'm missing, or is this a known issue with setting up Service Accounts and the Google Ads API?