I'm currently working with the Google Ads API (v21) to programmatically set Life Events and Detailed Demographics targeting for Display campaigns. However, I'm encountering inconsistencies between the data returned by the API and what's actually targetable in ad groups.
Current Implementation For Detailed Demographics:
SELECT
detailed_demographic.resource_name,
detailed_demographic.availabilities,
detailed_demographic.id,
detailed_demographic.name,
detailed_demographic.parent
FROM detailed_demographic
WHERE detailed_demographic.parent IS NOT NULL
For Life Events:
SELECT
life_event.resource_name,
life_event.id,
life_event.name,
life_event.parent
FROM life_event
WHERE life_event.launched_to_all = TRUE
Setting targeting on ad groups:
lifeEventAudiences?.forEach((lifeEventId) =>
operations.push(createCriterion({ lifeEvent: { lifeEventId } }))
);
detailedDemographics?.forEach((extendedDemographicId) =>
operations.push(createCriterion({ extendedDemographic: { extendedDemographicId } }))
);
Problems Encountered
Life Events:
Hi,
Thank you for reaching out to the Google Ads API support team.
Please refer to the below responses to your queries respectively.
Is there a reliable way to query only targetable Life Events and Detailed Demographics?
To check the availability of targetable fields for both Life Events and Detailed Demographics, please share a relevant screenshot by highlighting the required fields from the Google Ads UI. This will allow us to check for an accurate query that meets your specific requirements.
What's the recommended approach to filter out taxonomy-only categories that aren't meant for direct targeting?
To filter out taxonomy-only categories, you can use the user_interest.taxonomy_type field. This field is an output-only taxonomy type of the user interest and can help you identify and filter out categories that are not meant for direct targeting. I would recommend you to refer to this user_interest resource from Google Ads API for more additional information.
Why is there a discrepancy between what's shown in the UI and what's returned by the API?
To investigate the discrepancy you are facing, we need more information. Could you share an uncropped UI screenshot of the metrics for which you are seeing the discrepancy, with the relevant information highlighted? Additionally, please provide the complete associated API logs (request and response logs with request-id and request header) generated at your end to better assist you further.
If you are using a client library and haven't enabled the logging yet, I would request you to enable logging for the specific client library that you are using. You can refer to the guides Java, .Net, PHP, Python, Ruby or Perl to enable logging at your end. For REST interface requests, you can enable logging via the curl command by using the -i flag.
Any guidance on the correct query structure to retrieve only the values that can be used for ad group targeting would be greatly appreciated.
You can use the targeting setting in your ad groups or campaigns to specify whether to narrow your ads to show only to specific audience segments or on specific content you have selected. If you want to learn how to set targeting criteria for a campaign or ad group, such as audience targeting to specify who you want to reach, you can refer to the Targeting Criteria guide and the Add Campaign Targeting Criteria sample in the Google Ads API documentation.
You can send the details via Reply privately to the author option, or direct private reply to this email.
![]() |
Google Ads API Team |
[2025-08-21 11:24:09Z GMT] This message is in relation to case "ref:!00D1U01174p.!500Ht01u4pse:ref" (ADR-00330603)
Hi Support team,
Thank you for your response, let me give some more details. (I will create another comment for life_event problem to not mix query values)
Demographics values (for ad group targeting criteria).
SELECT
detailed_demographic.resource_name,
detailed_demographic.id,
detailed_demographic.name,
detailed_demographic.parent
FROM detailed_demographic
WHERE detailed_demographic.parent IS NOT NULL
1. Values like Highest Level of Educational Attainment are categorical only and not assignable (UI also doesn’t allow targeting them).
2. Values under Industry and Company Size appear in the results but are not assignable at all in Display campaigns (and I cannot see values from those categories in my Google Ad UI). I attached a screenshot from my UI - there is no values from Industry sector but I can see them in query results.
3. I need a reliable way to filter out only assignable values via GAQL query (similar to how life_event.launched_to_all works for life events).
Here is the full list of values I got for detailed_demographic
{
"resourceName": "customers/2806624176/detailedDemographics/30001",
"id": "30001",
"name": "Highest Level of Educational Attainment",
"parent": "customers/2806624176/detailedDemographics/30038",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30002",
"id": "30002",
"name": "High School Graduate",
"parent": "customers/2806624176/detailedDemographics/30001",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30004",
"id": "30004",
"name": "Bachelor's Degree",
"parent": "customers/2806624176/detailedDemographics/30001",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30005",
"id": "30005",
"name": "Advanced Degree",
"parent": "customers/2806624176/detailedDemographics/30001",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30007",
"id": "30007",
"name": "Homeowners",
"parent": "customers/2806624176/detailedDemographics/30006",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30008",
"id": "30008",
"name": "Renters",
"parent": "customers/2806624176/detailedDemographics/30006",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30009",
"id": "30009",
"name": "Parents",
"parent": "customers/2806624176/detailedDemographics/30039",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30010",
"id": "30010",
"name": "Parents of Infants (0-1 years)",
"parent": "customers/2806624176/detailedDemographics/30009",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30011",
"id": "30011",
"name": "Parents of Toddlers (1-3 years)",
"parent": "customers/2806624176/detailedDemographics/30009",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30012",
"id": "30012",
"name": "Parents of Preschoolers (4-5 years)",
"parent": "customers/2806624176/detailedDemographics/30009",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30013",
"id": "30013",
"name": "Parents of Grade-Schoolers (6-12 years)",
"parent": "customers/2806624176/detailedDemographics/30009",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30014",
"id": "30014",
"name": "Parents of Teens (13-17 years)",
"parent": "customers/2806624176/detailedDemographics/30009",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30016",
"id": "30016",
"name": "Married",
"parent": "customers/2806624176/detailedDemographics/30015",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30017",
"id": "30017",
"name": "Single",
"parent": "customers/2806624176/detailedDemographics/30015",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30020",
"id": "30020",
"name": "Industry",
"parent": "customers/2806624176/detailedDemographics/30018",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30021",
"id": "30021",
"name": "Company Size",
"parent": "customers/2806624176/detailedDemographics/30018",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30022",
"id": "30022",
"name": "Healthcare Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30023",
"id": "30023",
"name": "Technology Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30024",
"id": "30024",
"name": "Hospitality Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30025",
"id": "30025",
"name": "Education Sector",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30026",
"id": "30026",
"name": "Manufacturing Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30027",
"id": "30027",
"name": "Construction Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30028",
"id": "30028",
"name": "Small Employer (1-249 Employees)",
"parent": "customers/2806624176/detailedDemographics/30021",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30030",
"id": "30030",
"name": "Large Employer (250-10k Employees)",
"parent": "customers/2806624176/detailedDemographics/30021",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30031",
"id": "30031",
"name": "Very Large Employer (10k+ Employees)",
"parent": "customers/2806624176/detailedDemographics/30021",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30032",
"id": "30032",
"name": "Current College Students",
"parent": "customers/2806624176/detailedDemographics/30038",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30037",
"id": "30037",
"name": "In a Relationship",
"parent": "customers/2806624176/detailedDemographics/30015",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30041",
"id": "30041",
"name": "Financial Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
{
"resourceName": "customers/2806624176/detailedDemographics/30042",
"id": "30042",
"name": "Real Estate Industry",
"parent": "customers/2806624176/detailedDemographics/30020",
"type": "DETAILED_DEMOGRAPHIC"
},
Hi,
To accurately assist you, kindly provide uncropped Google Ads UI screenshot(s) displaying the data you are attempting to retrieve via the API where discrepancies are observed. This uncropped UI screenshot will help us replicate the issue from our end.
You can send the details via Reply privately to the author option, or direct private reply to this email.
Thanks & Regards,
Google Ads API support team.