Group data model

Updated:

View field support, webhooks, and list parameters for each integration on the Supported Integrations page.

FieldTypeRequiredDescription
idstringNo
created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
namestringNoThe ad group's name
parent_idstringNo
campaign_idstringNoThe ID of the campaign the ad group belongs to (an AdsCampaign ID)
organization_idstringNo
insertionorder_idstringNo
statusenumNoValues: UNSPECIFIED, ACTIVE, PAUSED, ARCHIVED, DRAFT, SCHEDULED_FOR_DELETION, PROCESSING, PROCESSING_FAILED
effective_statusenumNoValues: UNSPECIFIED, SERVING, LIMITED, LEARNING, PAUSED, PENDING, ENDED, MISCONFIGURED, NOT_ELIGIBLE, ARCHIVED, REMOVED
targetingobjectNo
targeting.geographicAdsGroup_targeting_geographicNo
targeting.geographic.countriesTargetRef[]No
targeting.geographic.countries[].idstringNo
targeting.geographic.countries[].namestringNo
targeting.geographic.regionsTargetRef[]No
targeting.geographic.regions[].idstringNo
targeting.geographic.regions[].namestringNo
targeting.geographic.citiesCityTarget[]No
targeting.geographic.cities[].idstringYes
targeting.geographic.cities[].namestringNo
targeting.geographic.cities[].radiusnumberNo
targeting.geographic.cities[].radius_unitenumNoValues: MILES, KILOMETERS
targeting.geographic.postal_codesTargetRef[]No
targeting.geographic.postal_codes[].idstringNo
targeting.geographic.postal_codes[].namestringNo
targeting.geographic.us_dmasTargetRef[]No
targeting.geographic.us_dmas[].idstringNo
targeting.geographic.us_dmas[].namestringNo
targeting.geographic.excluded_countriesTargetRef[]No
targeting.geographic.excluded_countries[].idstringNo
targeting.geographic.excluded_countries[].namestringNo
targeting.geographic.excluded_regionsTargetRef[]No
targeting.geographic.excluded_regions[].idstringNo
targeting.geographic.excluded_regions[].namestringNo
targeting.geographic.excluded_citiesCityTarget[]No
targeting.geographic.excluded_cities[].idstringYes
targeting.geographic.excluded_cities[].namestringNo
targeting.geographic.excluded_cities[].radiusnumberNo
targeting.geographic.excluded_cities[].radius_unitenumNoValues: MILES, KILOMETERS
targeting.geographic.excluded_postal_codesTargetRef[]No
targeting.geographic.excluded_postal_codes[].idstringNo
targeting.geographic.excluded_postal_codes[].namestringNo
targeting.geographic.excluded_us_dmasTargetRef[]No
targeting.geographic.excluded_us_dmas[].idstringNo
targeting.geographic.excluded_us_dmas[].namestringNo
targeting.geographic.location_typesenum[]NoValues: HOME, RECENT, TRAVEL
targeting.geographic.presence_typeenumNoValues: PRESENCE, PRESENCE_OR_INTEREST
targeting.demographicAdsGroup_targeting_demographicNoDemographic targeting (Meta: age_min, age_max, genders)
targeting.demographic.age_minnumberNo
targeting.demographic.age_maxnumberNo
targeting.demographic.malebooleanNo
targeting.demographic.femalebooleanNo
targeting.audienceAdsGroup_targeting_audienceNo
targeting.audience.custom_audiencesTargetRef[]No
targeting.audience.custom_audiences[].idstringNo
targeting.audience.custom_audiences[].namestringNo
targeting.audience.excluded_custom_audiencesTargetRef[]No
targeting.audience.excluded_custom_audiences[].idstringNo
targeting.audience.excluded_custom_audiences[].namestringNo
targeting.audience.lookalike_audiencesLookalikeAudience[]No
targeting.audience.lookalike_audiences[].idstringYes
targeting.audience.lookalike_audiences[].namestringNo
targeting.audience.lookalike_audiences[].similaritynumberNo
targeting.audience.lookalike_audiences[].source_audience_idstringNo
targeting.audience.interestsTargetRef[]No
targeting.audience.interests[].idstringNo
targeting.audience.interests[].namestringNo
targeting.audience.excluded_interestsTargetRef[]No
targeting.audience.excluded_interests[].idstringNo
targeting.audience.excluded_interests[].namestringNo
targeting.audience.behaviorsTargetRef[]No
targeting.audience.behaviors[].idstringNo
targeting.audience.behaviors[].namestringNo
targeting.audience.excluded_behaviorsTargetRef[]No
targeting.audience.excluded_behaviors[].idstringNo
targeting.audience.excluded_behaviors[].namestringNo
targeting.audience.combination_specAudienceCombination[]No
targeting.audience.combination_spec[].interestsTargetRef[]No
targeting.audience.combination_spec[].interests[].idstringNo
targeting.audience.combination_spec[].interests[].namestringNo
targeting.audience.combination_spec[].behaviorsTargetRef[]No
targeting.audience.combination_spec[].behaviors[].idstringNo
targeting.audience.combination_spec[].behaviors[].namestringNo
targeting.audience.combination_spec[].referencesTargetRef[]No
targeting.audience.combination_spec[].references[].idstringNo
targeting.audience.combination_spec[].references[].namestringNo
targeting.audience.combination_spec[].life_eventsTargetRef[]No
targeting.audience.combination_spec[].life_events[].idstringNo
targeting.audience.combination_spec[].life_events[].namestringNo
targeting.placementAdsGroup_targeting_placementNo
targeting.placement.platformsstring[]No
targeting.placement.facebook_positionsstring[]No
targeting.placement.instagram_positionsstring[]No
targeting.placement.messenger_positionsstring[]No
targeting.placement.audience_network_positionsstring[]No
targeting.deviceAdsGroup_targeting_deviceNo
targeting.device.typesTargetRef[]No
targeting.device.types[].idstringNo
targeting.device.types[].namestringNo
targeting.device.user_deviceTargetRef[]No
targeting.device.user_device[].idstringNo
targeting.device.user_device[].namestringNo
targeting.device.user_osTargetRef[]No
targeting.device.user_os[].idstringNo
targeting.device.user_os[].namestringNo
targeting.device.carriersTargetRef[]No
targeting.device.carriers[].idstringNo
targeting.device.carriers[].namestringNo
targeting.languageTargetRef[]No
targeting.language[].idstringNo
targeting.language[].namestringNo
targeting.contentAdsGroup_targeting_contentNo
targeting.content.keywordsAdsKeyword[]No
targeting.content.keywords[].textstringYes
targeting.content.keywords[].match_typeenumNoValues: BROAD, PHRASE, EXACT
targeting.content.excluded_keywordsAdsKeyword[]No
targeting.content.excluded_keywords[].textstringYes
targeting.content.excluded_keywords[].match_typeenumNoValues: BROAD, PHRASE, EXACT
targeting.content.topicsTargetRef[]No
targeting.content.topics[].idstringNo
targeting.content.topics[].namestringNo
targeting.content.excluded_topicsTargetRef[]No
targeting.content.excluded_topics[].idstringNo
targeting.content.excluded_topics[].namestringNo
targeting.content.urlsstring[]No
targeting.content.excluded_urlsstring[]No
targeting.content.videoAdsGroup_targeting_content_videoNo
targeting.content.video.youtube_videosstring[]No
targeting.content.video.excluded_youtube_videosstring[]No
targeting.content.video.youtube_channelsstring[]No
targeting.content.video.excluded_youtube_channelsstring[]No
targeting.content.video.positionsenum[]NoValues: PREROLL, MIDROLL, POSTROLL, INSTREAM, OUTSTREAM
targeting.content.video.player_sizesenum[]NoValues: SMALL, LARGE, HD
targeting.content.video.durationsenum[]NoValues: SHORT, MEDIUM, LONG
targeting.brand_safetyAdsGroup_targeting_brand_safetyNoBrand safety (Meta: excluded_publisher_categories, etc.; Google
targeting.brand_safety.excluded_publisher_categoriesstring[]No
targeting.brand_safety.excluded_content_labelsstring[]NoGoogle Ads ContentLabelType
targeting.brand_safety.brand_safety_content_filter_levelsstring[]No
targeting.brand_safety.publisher_visibility_categoriesenum[]NoValues: limited, standard, expanded
targeting.brand_safety.block_list_idsstring[]No
targeting.scheduleAdSchedule[]No
targeting.schedule[].day_of_weekenumYesValues: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
targeting.schedule[].start_hournumberYes0-23
targeting.schedule[].start_minutenumberNo0, 15, 30, 45
targeting.schedule[].end_hournumberYes0-24 (24 = end of day)
targeting.schedule[].end_minutenumberNo0, 15, 30, 45
targeting.schedule[].bid_modifiernumberNo0.1-10.0
targeting.optimizationAdsGroup_targeting_optimizationNoOptimization (Meta: targeting_automation; Google: observation vs targeting mode)
targeting.optimization.modeenumNoGoogle: bid_only falsetrue Values: TARGETING, OBSERVATION
targeting.optimization.advantage_audiencebooleanNo
targeting.optimization.advantage_placementsbooleanNo
targeting.optimization.targeting_optimization_expansion_allbooleanNo
targeting.inventoryAdsGroup_targeting_inventoryNoPublisher inventory (ad units, placements) to include / exclude
targeting.inventory.inventory_idsstring[]No
targeting.inventory.excluded_inventory_idsstring[]No
targeting.customCustomTargeting[]NoKey-value targeting; clauses are ANDed
targeting.custom[].keystringYes
targeting.custom[].valuesstring[]Yes
targeting.custom[].is_excludedbooleanNo
targeting.supplyAdsGroup_targeting_supplyNoBuy-side inventory: exchanges, deals, deal groups and seller authorization (DSPs)
targeting.supply.exchangesTargetRef[]NoPublic exchanges to buy on (ads_target type EXCHANGE)
targeting.supply.exchanges[].idstringNo
targeting.supply.exchanges[].namestringNo
targeting.supply.dealsTargetRef[]NoDeals / inventory packages (ads_target type DEAL)
targeting.supply.deals[].idstringNo
targeting.supply.deals[].namestringNo
targeting.supply.deal_groupsTargetRef[]NoGroups of deals (ads_target type DEAL_GROUP)
targeting.supply.deal_groups[].idstringNo
targeting.supply.deal_groups[].namestringNo
targeting.supply.authorized_seller_statusenumNoads.txt seller authorization to buy from Values: AUTHORIZED_DIRECT_ONLY, AUTHORIZED_DIRECT_AND_RESELLERS, AUTHORIZED_AND_NON_PARTICIPATING
bid_amountnumberNo
bid_strategyobjectNoYOUTUBE_AND_PARTNERS
bid_strategy.typeenumYesValues: FIXED_BID, MAXIMIZE_SPEND, PERFORMANCE_GOAL, YOUTUBE_AND_PARTNERS
bid_strategy.fixed_bid_amountnumberNo
bid_strategy.performance_goal_typeenumNoValues: UNSPECIFIED, CPA, CPC, VIEWABLE_CPM, CUSTOM_ALGO, CIVA, IVO_TEN, AV_VIEWED, REACH
bid_strategy.performance_goal_amountnumberNo
bid_strategy.max_average_cpm_bid_amountnumberNo
bid_strategy.custom_bidding_algorithm_idstringNo
bid_strategy.raise_bid_for_dealsbooleanNo
bid_strategy.youtube_and_partners_typeenumNoValues: UNSPECIFIED, MANUAL_CPV, MANUAL_CPM, TARGET_CPA, TARGET_CPM, RESERVE_CPM, MAXIMIZE_LIFT, MAXIMIZE_CONVERSIONS, TARGET_CPV, TARGET_ROAS, MAXIMIZE_CONVERSION_VALUE
bid_strategy.youtube_and_partners_valuestringNo
bid_strategy.target_roasnumberNoTarget ROAS e.g. 2.5 = 250% (Google)
budget_amountnumberNo
budget_periodenumNoValues: DAILY, MONTHLY, TOTAL, LIFETIME
budget_allocation_typeenumNoValues: UNSPECIFIED, AUTOMATIC, FIXED, UNLIMITED
start_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
end_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
budget_unitenumNoValues: UNSPECIFIED, CURRENCY, IMPRESSIONS
budget_max_amountnumberNo
typeenumNoValues: TEXT, IMAGE, VIDEO, RESPONSIVE, SHOPPING, APP, CALL, CAROUSEL, SOCIAL, DISPLAY, SEARCH, AUDIO, YOUTUBE, NATIVE, CTV, DOOH, PERFORMANCE_MAX
has_eu_political_adsbooleanNo
pacingobjectNo
pacing.periodenumNoValues: UNSPECIFIED, DAILY, FLIGHT
pacing.typestringNo
pacing.daily_max_amountnumberNo
pacing.daily_max_impressionsnumberNo
frequency_capobjectNo
frequency_cap.is_unlimitedbooleanNo
frequency_cap.time_unitenumNoValues: UNSPECIFIED, LIFETIME, MONTHS, WEEKS, DAYS, HOURS, MINUTES
frequency_cap.time_unit_countnumberNo
frequency_cap.max_impressionsnumberNo
frequency_cap.max_viewsnumberNo
creative_idsstring[]No
optimization_goalenumNoOptimization goals for ads_group (cross-platform; platform-specific values allowed as pass-through) Values: REACH, IMPRESSIONS, LINK_CLICKS, LANDING_PAGE_VIEWS, CONVERSIONS, LEAD_GENERATION, APP_INSTALLS, APP_ENGAGEMENT, VIDEO_VIEWS, ENGAGEMENT, PAGE_LIKES, MESSAGES
billing_eventenumNoBilling events for ads_group (what you pay for; cross-platform; platform-specific values allowed as pass-through) Values: IMPRESSIONS, LINK_CLICKS, VIDEO_VIEWS, APP_INSTALLS, ENGAGEMENT, PAGE_LIKES, MESSAGES, POST_ENGAGEMENT, PURCHASE, NONE
currencystringNo
promotedAdsPromoted[]No
promoted[].idstringYes
promoted[].namestringNo
promoted[].typeenumYesPromoted entity types for ads_promoted list endpoint Values: PAGE_ID, APP_ID, STORE_URL, PIXEL_ID, CUSTOM_CONVERSION_ID, CATALOG_ID, PRODUCT_SET_ID, PRIORITIZED_SET_ID, EVENT_ID, OFFER_ID, LEAD_FORM_ID, MESSAGING_CHANNEL_ID, PRODUCT_ID, TWEET_ID, AD_GROUP_TYPE
promoted[].metadataAdsMetadata[]No
promoted[].metadata[].idstringNo
promoted[].metadata[].slugstringNo
promoted[].metadata[].valueobjectNo
promoted[].metadata[].namespacestringNo
promoted[].metadata[].formatenumNoValues: TEXT, NUMBER, DATE, BOOLEAN, FILE, TEXTAREA, SINGLE_SELECT, MULTIPLE_SELECT, MEASUREMENT, PRICE, YES_NO, CURRENCY, URL
promoted[].metadata[].extra_dataobjectNo
language_localestringNoLanguage + region, ISO 639-1 with region (e.g. en-US); LinkedIn locale
creative_selectionenumNoCreative rotation strategy (LinkedIn creativeSelection) Values: OPTIMIZED, ROUND_ROBIN, WEIGHTED, SEQUENTIAL
metadataAdsMetadata[]No
metadata[].idstringNo
metadata[].slugstringNo
metadata[].valueobjectNo
metadata[].namespacestringNo
metadata[].formatenumNoValues: TEXT, NUMBER, DATE, BOOLEAN, FILE, TEXTAREA, SINGLE_SELECT, MULTIPLE_SELECT, MEASUREMENT, PRICE, YES_NO, CURRENCY, URL
metadata[].extra_dataobjectNo
delivery_typeenumNoAd server line item type / delivery class (Google Ad Manager lineItemType) Values: STANDARD, SPONSORSHIP, NETWORK, BULK, PRICE_PRIORITY, HOUSE, PREFERRED_DEAL, AD_EXCHANGE, CLICK_TRACKING, OTHER
prioritynumberNoAd server delivery priority, lower serves first (Google Ad Manager priority, Kevel priority)
cost_typeenumNoHow the line item is priced (Google Ad Manager costType) Values: CPM, VIEWABLE_CPM, CPC, CPD, CPA, CPCV, OTHER
delivery_goalobjectNoBooked delivery goal (Google Ad Manager goal)
delivery_goal.periodenumNoValues: DAILY, MONTHLY, TOTAL, LIFETIME
delivery_goal.unitenumNoValues: IMPRESSIONS, VIEWABLE_IMPRESSIONS, CLICKS, CONVERSIONS, COMPLETED_VIEWS
delivery_goal.quantitynumberNo
creative_sizesAdsSize[]NoExpected creative sizes (Google Ad Manager creativePlaceholders)
creative_sizes[].widthnumberYes
creative_sizes[].heightnumberYes
conversion_trackingAdsConversionTracking[]NoConversion trackers counted for this group (DV360 Floodlight activities, Pinterest conversion tag)
conversion_tracking[].identifierstringYesIntegration's conversion tracker ID (Floodlight activity ID, conversion tag ID)
conversion_tracking[].typeenumNoValues: FLOODLIGHT_ACTIVITY, CONVERSION_TAG, PIXEL, OTHER
conversion_tracking[].post_click_window_daysnumberNoDays after a click in which a conversion is counted
conversion_tracking[].post_view_window_daysnumberNoDays after a view in which a conversion is counted

TypeScript

TypeScript
export type AdsGroup = {
	id?: string;
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	name?: string; // The ad group's name
	parent_id?: string;
	campaign_id?: string; // The ID of the campaign the ad group belongs to (an AdsCampaign ID)
	organization_id?: string;
	insertionorder_id?: string;
	status?: 'UNSPECIFIED' | 'ACTIVE' | 'PAUSED' | 'ARCHIVED' | 'DRAFT' | 'SCHEDULED_FOR_DELETION' | 'PROCESSING' | 'PROCESSING_FAILED';
	effective_status?: 'UNSPECIFIED' | 'SERVING' | 'LIMITED' | 'LEARNING' | 'PAUSED' | 'PENDING' | 'ENDED' | 'MISCONFIGURED' | 'NOT_ELIGIBLE' | 'ARCHIVED' | 'REMOVED';
	targeting?: {
		geographic?: any; 
		demographic?: any; // Demographic targeting (Meta: age_min, age_max, genders) 
		audience?: any; 
		placement?: any; 
		device?: any; 
		language?: []; 
		content?: any; 
		brand_safety?: any; // Brand safety (Meta: excluded_publisher_categories, etc.; Google 
		schedule?: []; 
		optimization?: any; // Optimization (Meta: targeting_automation; Google: observation vs targeting mode) 
		inventory?: any; // Publisher inventory (ad units, placements) to include / exclude 
		custom?: []; // Key-value targeting; clauses are ANDed 
		supply?: any; // Buy-side inventory: exchanges, deals, deal groups and seller authorization (DSPs) 
	};
	bid_amount?: number;
	bid_strategy?: {
		type: 'FIXED_BID' | 'MAXIMIZE_SPEND' | 'PERFORMANCE_GOAL' | 'YOUTUBE_AND_PARTNERS'; 
		fixed_bid_amount?: number; 
		performance_goal_type?: 'UNSPECIFIED' | 'CPA' | 'CPC' | 'VIEWABLE_CPM' | 'CUSTOM_ALGO' | 'CIVA' | 'IVO_TEN' | 'AV_VIEWED' | 'REACH'; 
		performance_goal_amount?: number; 
		max_average_cpm_bid_amount?: number; 
		custom_bidding_algorithm_id?: string; 
		raise_bid_for_deals?: boolean; 
		youtube_and_partners_type?: 'UNSPECIFIED' | 'MANUAL_CPV' | 'MANUAL_CPM' | 'TARGET_CPA' | 'TARGET_CPM' | 'RESERVE_CPM' | 'MAXIMIZE_LIFT' | 'MAXIMIZE_CONVERSIONS' | 'TARGET_CPV' | 'TARGET_ROAS' | 'MAXIMIZE_CONVERSION_VALUE'; 
		youtube_and_partners_value?: string; 
		target_roas?: number; // Target ROAS e.g. 2.5 = 250% (Google) 
	}; // YOUTUBE_AND_PARTNERS
	budget_amount?: number;
	budget_period?: 'DAILY' | 'MONTHLY' | 'TOTAL' | 'LIFETIME';
	budget_allocation_type?: 'UNSPECIFIED' | 'AUTOMATIC' | 'FIXED' | 'UNLIMITED';
	start_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	end_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	budget_unit?: 'UNSPECIFIED' | 'CURRENCY' | 'IMPRESSIONS';
	budget_max_amount?: number;
	type?: 'TEXT' | 'IMAGE' | 'VIDEO' | 'RESPONSIVE' | 'SHOPPING' | 'APP' | 'CALL' | 'CAROUSEL' | 'SOCIAL' | 'DISPLAY' | 'SEARCH' | 'AUDIO' | 'YOUTUBE' | 'NATIVE' | 'CTV' | 'DOOH' | 'PERFORMANCE_MAX';
	has_eu_political_ads?: boolean;
	pacing?: {
		period?: 'UNSPECIFIED' | 'DAILY' | 'FLIGHT'; 
		type?: string; 
		daily_max_amount?: number; 
		daily_max_impressions?: number; 
	};
	frequency_cap?: {
		is_unlimited?: boolean; 
		time_unit?: 'UNSPECIFIED' | 'LIFETIME' | 'MONTHS' | 'WEEKS' | 'DAYS' | 'HOURS' | 'MINUTES'; 
		time_unit_count?: number; 
		max_impressions?: number; 
		max_views?: number; 
	};
	creative_ids?: string[];
	optimization_goal?: 'REACH' | 'IMPRESSIONS' | 'LINK_CLICKS' | 'LANDING_PAGE_VIEWS' | 'CONVERSIONS' | 'LEAD_GENERATION' | 'APP_INSTALLS' | 'APP_ENGAGEMENT' | 'VIDEO_VIEWS' | 'ENGAGEMENT' | 'PAGE_LIKES' | 'MESSAGES'; // Optimization goals for ads_group (cross-platform; platform-specific values allowed as pass-through)
	billing_event?: 'IMPRESSIONS' | 'LINK_CLICKS' | 'VIDEO_VIEWS' | 'APP_INSTALLS' | 'ENGAGEMENT' | 'PAGE_LIKES' | 'MESSAGES' | 'POST_ENGAGEMENT' | 'PURCHASE' | 'NONE'; // Billing events for ads_group (what you pay for; cross-platform; platform-specific values allowed as pass-through)
	currency?: string;
	promoted?: [];
	language_locale?: string; // Language + region, ISO 639-1 with region (e.g. en-US); LinkedIn locale
	creative_selection?: 'OPTIMIZED' | 'ROUND_ROBIN' | 'WEIGHTED' | 'SEQUENTIAL'; // Creative rotation strategy (LinkedIn creativeSelection)
	metadata?: [];
	raw?: any;
	delivery_type?: 'STANDARD' | 'SPONSORSHIP' | 'NETWORK' | 'BULK' | 'PRICE_PRIORITY' | 'HOUSE' | 'PREFERRED_DEAL' | 'AD_EXCHANGE' | 'CLICK_TRACKING' | 'OTHER'; // Ad server line item type / delivery class (Google Ad Manager lineItemType)
	priority?: number; // Ad server delivery priority, lower serves first (Google Ad Manager priority, Kevel priority)
	cost_type?: 'CPM' | 'VIEWABLE_CPM' | 'CPC' | 'CPD' | 'CPA' | 'CPCV' | 'OTHER'; // How the line item is priced (Google Ad Manager costType)
	delivery_goal?: {
		period?: 'DAILY' | 'MONTHLY' | 'TOTAL' | 'LIFETIME'; 
		unit?: 'IMPRESSIONS' | 'VIEWABLE_IMPRESSIONS' | 'CLICKS' | 'CONVERSIONS' | 'COMPLETED_VIEWS'; 
		quantity?: number; 
	}; // Booked delivery goal (Google Ad Manager goal)
	creative_sizes?: []; // Expected creative sizes (Google Ad Manager creativePlaceholders)
	conversion_tracking?: []; // Conversion trackers counted for this group (DV360 Floodlight activities, Pinterest conversion tag)
} 

Zod

Zod
import { z } from 'zod';

export const ZodAdsGroup = z.object({
	id: z.string().optional(),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	name: z.string().optional().describe("The ad group's name"),
	parent_id: z.string().optional(),
	campaign_id: z.string().optional().describe("The ID of the campaign the ad group belongs to (an AdsCampaign ID)"),
	organization_id: z.string().optional(),
	insertionorder_id: z.string().optional(),
	status: z.enum("UNSPECIFIED", "ACTIVE", "PAUSED", "ARCHIVED", "DRAFT", "SCHEDULED_FOR_DELETION", "PROCESSING", "PROCESSING_FAILED").optional(),
	effective_status: z.enum("UNSPECIFIED", "SERVING", "LIMITED", "LEARNING", "PAUSED", "PENDING", "ENDED", "MISCONFIGURED", "NOT_ELIGIBLE", "ARCHIVED", "REMOVED").optional(),
	targeting: z.object({
			geographic: z.unknown().optional(),
			demographic: z.unknown().optional().describe("Demographic targeting (Meta: age_min, age_max, genders)"),
			audience: z.unknown().optional(),
			placement: z.unknown().optional(),
			device: z.unknown().optional(),
			language: z.array().optional(),
			content: z.unknown().optional(),
			brand_safety: z.unknown().optional().describe("Brand safety (Meta: excluded_publisher_categories, etc.; Google"),
			schedule: z.array().optional(),
			optimization: z.unknown().optional().describe("Optimization (Meta: targeting_automation; Google: observation vs targeting mode)"),
			inventory: z.unknown().optional().describe("Publisher inventory (ad units, placements) to include / exclude"),
			custom: z.array().optional().describe("Key-value targeting; clauses are ANDed"),
			supply: z.unknown().optional().describe("Buy-side inventory: exchanges, deals, deal groups and seller authorization (DSPs)")
}).optional(),
	bid_amount: z.number().optional(),
	bid_strategy: z.object({
			type: z.enum("FIXED_BID", "MAXIMIZE_SPEND", "PERFORMANCE_GOAL", "YOUTUBE_AND_PARTNERS"),
			fixed_bid_amount: z.number().optional(),
			performance_goal_type: z.enum("UNSPECIFIED", "CPA", "CPC", "VIEWABLE_CPM", "CUSTOM_ALGO", "CIVA", "IVO_TEN", "AV_VIEWED", "REACH").optional(),
			performance_goal_amount: z.number().optional(),
			max_average_cpm_bid_amount: z.number().optional(),
			custom_bidding_algorithm_id: z.string().optional(),
			raise_bid_for_deals: z.boolean().optional(),
			youtube_and_partners_type: z.enum("UNSPECIFIED", "MANUAL_CPV", "MANUAL_CPM", "TARGET_CPA", "TARGET_CPM", "RESERVE_CPM", "MAXIMIZE_LIFT", "MAXIMIZE_CONVERSIONS", "TARGET_CPV", "TARGET_ROAS", "MAXIMIZE_CONVERSION_VALUE").optional(),
			youtube_and_partners_value: z.string().optional(),
			target_roas: z.number().optional().describe("Target ROAS e.g. 2.5 = 250% (Google)")
}).optional().describe("YOUTUBE_AND_PARTNERS"),
	budget_amount: z.number().optional(),
	budget_period: z.enum("DAILY", "MONTHLY", "TOTAL", "LIFETIME").optional(),
	budget_allocation_type: z.enum("UNSPECIFIED", "AUTOMATIC", "FIXED", "UNLIMITED").optional(),
	start_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	end_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	budget_unit: z.enum("UNSPECIFIED", "CURRENCY", "IMPRESSIONS").optional(),
	budget_max_amount: z.number().optional(),
	type: z.enum("TEXT", "IMAGE", "VIDEO", "RESPONSIVE", "SHOPPING", "APP", "CALL", "CAROUSEL", "SOCIAL", "DISPLAY", "SEARCH", "AUDIO", "YOUTUBE", "NATIVE", "CTV", "DOOH", "PERFORMANCE_MAX").optional(),
	has_eu_political_ads: z.boolean().optional(),
	pacing: z.object({
			period: z.enum("UNSPECIFIED", "DAILY", "FLIGHT").optional(),
			type: z.string().optional(),
			daily_max_amount: z.number().optional(),
			daily_max_impressions: z.number().optional()
}).optional(),
	frequency_cap: z.object({
			is_unlimited: z.boolean().optional(),
			time_unit: z.enum("UNSPECIFIED", "LIFETIME", "MONTHS", "WEEKS", "DAYS", "HOURS", "MINUTES").optional(),
			time_unit_count: z.number().optional(),
			max_impressions: z.number().optional(),
			max_views: z.number().optional()
}).optional(),
	creative_ids: z.array().optional(),
	optimization_goal: z.enum("REACH", "IMPRESSIONS", "LINK_CLICKS", "LANDING_PAGE_VIEWS", "CONVERSIONS", "LEAD_GENERATION", "APP_INSTALLS", "APP_ENGAGEMENT", "VIDEO_VIEWS", "ENGAGEMENT", "PAGE_LIKES", "MESSAGES").optional().describe("Optimization goals for ads_group (cross-platform; platform-specific values allowed as pass-through)"),
	billing_event: z.enum("IMPRESSIONS", "LINK_CLICKS", "VIDEO_VIEWS", "APP_INSTALLS", "ENGAGEMENT", "PAGE_LIKES", "MESSAGES", "POST_ENGAGEMENT", "PURCHASE", "NONE").optional().describe("Billing events for ads_group (what you pay for; cross-platform; platform-specific values allowed as pass-through)"),
	currency: z.string().optional(),
	promoted: z.array().optional(),
	language_locale: z.string().optional().describe("Language + region, ISO 639-1 with region (e.g. en-US); LinkedIn locale"),
	creative_selection: z.enum("OPTIMIZED", "ROUND_ROBIN", "WEIGHTED", "SEQUENTIAL").optional().describe("Creative rotation strategy (LinkedIn creativeSelection)"),
	metadata: z.array().optional(),
,
	delivery_type: z.enum("STANDARD", "SPONSORSHIP", "NETWORK", "BULK", "PRICE_PRIORITY", "HOUSE", "PREFERRED_DEAL", "AD_EXCHANGE", "CLICK_TRACKING", "OTHER").optional().describe("Ad server line item type / delivery class (Google Ad Manager lineItemType)"),
	priority: z.number().optional().describe("Ad server delivery priority, lower serves first (Google Ad Manager priority, Kevel priority)"),
	cost_type: z.enum("CPM", "VIEWABLE_CPM", "CPC", "CPD", "CPA", "CPCV", "OTHER").optional().describe("How the line item is priced (Google Ad Manager costType)"),
	delivery_goal: z.object({
			period: z.enum("DAILY", "MONTHLY", "TOTAL", "LIFETIME").optional(),
			unit: z.enum("IMPRESSIONS", "VIEWABLE_IMPRESSIONS", "CLICKS", "CONVERSIONS", "COMPLETED_VIEWS").optional(),
			quantity: z.number().optional()
}).optional().describe("Booked delivery goal (Google Ad Manager goal)"),
	creative_sizes: z.array().optional().describe("Expected creative sizes (Google Ad Manager creativePlaceholders)"),
	conversion_tracking: z.array().optional().describe("Conversion trackers counted for this group (DV360 Floodlight activities, Pinterest conversion tag)")
});

Python

Python
import dataclasses

@dataclasses.dataclass
class AdsGroupStatus(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	ACTIVE = 'ACTIVE'
	PAUSED = 'PAUSED'
	ARCHIVED = 'ARCHIVED'
	DRAFT = 'DRAFT'
	SCHEDULED_FOR_DELETION = 'SCHEDULED_FOR_DELETION'
	PROCESSING = 'PROCESSING'
	PROCESSING_FAILED = 'PROCESSING_FAILED'

@dataclasses.dataclass
class AdsGroupEffective_status(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	SERVING = 'SERVING'
	LIMITED = 'LIMITED'
	LEARNING = 'LEARNING'
	PAUSED = 'PAUSED'
	PENDING = 'PENDING'
	ENDED = 'ENDED'
	MISCONFIGURED = 'MISCONFIGURED'
	NOT_ELIGIBLE = 'NOT_ELIGIBLE'
	ARCHIVED = 'ARCHIVED'
	REMOVED = 'REMOVED'

@dataclasses.dataclass
class AdsGroupBudget_period(str, Enum):
	DAILY = 'DAILY'
	MONTHLY = 'MONTHLY'
	TOTAL = 'TOTAL'
	LIFETIME = 'LIFETIME'

@dataclasses.dataclass
class AdsGroupBudget_allocation_type(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	AUTOMATIC = 'AUTOMATIC'
	FIXED = 'FIXED'
	UNLIMITED = 'UNLIMITED'

@dataclasses.dataclass
class AdsGroupBudget_unit(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	CURRENCY = 'CURRENCY'
	IMPRESSIONS = 'IMPRESSIONS'

@dataclasses.dataclass
class AdsGroupType(str, Enum):
	TEXT = 'TEXT'
	IMAGE = 'IMAGE'
	VIDEO = 'VIDEO'
	RESPONSIVE = 'RESPONSIVE'
	SHOPPING = 'SHOPPING'
	APP = 'APP'
	CALL = 'CALL'
	CAROUSEL = 'CAROUSEL'
	SOCIAL = 'SOCIAL'
	DISPLAY = 'DISPLAY'
	SEARCH = 'SEARCH'
	AUDIO = 'AUDIO'
	YOUTUBE = 'YOUTUBE'
	NATIVE = 'NATIVE'
	CTV = 'CTV'
	DOOH = 'DOOH'
	PERFORMANCE_MAX = 'PERFORMANCE_MAX'

@dataclasses.dataclass
class AdsGroupOptimization_goal(str, Enum):
	REACH = 'REACH'
	IMPRESSIONS = 'IMPRESSIONS'
	LINK_CLICKS = 'LINK_CLICKS'
	LANDING_PAGE_VIEWS = 'LANDING_PAGE_VIEWS'
	CONVERSIONS = 'CONVERSIONS'
	LEAD_GENERATION = 'LEAD_GENERATION'
	APP_INSTALLS = 'APP_INSTALLS'
	APP_ENGAGEMENT = 'APP_ENGAGEMENT'
	VIDEO_VIEWS = 'VIDEO_VIEWS'
	ENGAGEMENT = 'ENGAGEMENT'
	PAGE_LIKES = 'PAGE_LIKES'
	MESSAGES = 'MESSAGES'

@dataclasses.dataclass
class AdsGroupBilling_event(str, Enum):
	IMPRESSIONS = 'IMPRESSIONS'
	LINK_CLICKS = 'LINK_CLICKS'
	VIDEO_VIEWS = 'VIDEO_VIEWS'
	APP_INSTALLS = 'APP_INSTALLS'
	ENGAGEMENT = 'ENGAGEMENT'
	PAGE_LIKES = 'PAGE_LIKES'
	MESSAGES = 'MESSAGES'
	POST_ENGAGEMENT = 'POST_ENGAGEMENT'
	PURCHASE = 'PURCHASE'
	NONE = 'NONE'

@dataclasses.dataclass
class AdsGroupCreative_selection(str, Enum):
	OPTIMIZED = 'OPTIMIZED'
	ROUND_ROBIN = 'ROUND_ROBIN'
	WEIGHTED = 'WEIGHTED'
	SEQUENTIAL = 'SEQUENTIAL'

@dataclasses.dataclass
class AdsGroupDelivery_type(str, Enum):
	STANDARD = 'STANDARD'
	SPONSORSHIP = 'SPONSORSHIP'
	NETWORK = 'NETWORK'
	BULK = 'BULK'
	PRICE_PRIORITY = 'PRICE_PRIORITY'
	HOUSE = 'HOUSE'
	PREFERRED_DEAL = 'PREFERRED_DEAL'
	AD_EXCHANGE = 'AD_EXCHANGE'
	CLICK_TRACKING = 'CLICK_TRACKING'
	OTHER = 'OTHER'

@dataclasses.dataclass
class AdsGroupCost_type(str, Enum):
	CPM = 'CPM'
	VIEWABLE_CPM = 'VIEWABLE_CPM'
	CPC = 'CPC'
	CPD = 'CPD'
	CPA = 'CPA'
	CPCV = 'CPCV'
	OTHER = 'OTHER'

@dataclasses.dataclass
class PropertyAdsGroupTargeting:
	geographic: Optional[PropertyAdsGroupGeographic]
	"""Demographic targeting (Meta: age_min, age_max, genders)"""
	demographic: Optional[PropertyAdsGroupDemographic]
	audience: Optional[PropertyAdsGroupAudience]
	placement: Optional[PropertyAdsGroupPlacement]
	device: Optional[PropertyAdsGroupDevice]
	language: Optional[PropertyAdsGroupLanguage]
	content: Optional[PropertyAdsGroupContent]
	"""Brand safety (Meta: excluded_publisher_categories, etc.; Google"""
	brand_safety: Optional[PropertyAdsGroupBrand_safety]
	schedule: Optional[PropertyAdsGroupSchedule]
	"""Optimization (Meta: targeting_automation; Google: observation vs targeting mode)"""
	optimization: Optional[PropertyAdsGroupOptimization]
	"""Publisher inventory (ad units, placements) to include / exclude"""
	inventory: Optional[PropertyAdsGroupInventory]
	"""Key-value targeting; clauses are ANDed"""
	custom: Optional[PropertyAdsGroupCustom]
	"""Buy-side inventory: exchanges, deals, deal groups and seller authorization (DSPs)"""
	supply: Optional[PropertyAdsGroupSupply]

@dataclasses.dataclass
class AdsGroupBid_strategyType(str, Enum):
	FIXED_BID = 'FIXED_BID'
	MAXIMIZE_SPEND = 'MAXIMIZE_SPEND'
	PERFORMANCE_GOAL = 'PERFORMANCE_GOAL'
	YOUTUBE_AND_PARTNERS = 'YOUTUBE_AND_PARTNERS'

@dataclasses.dataclass
class AdsGroupBid_strategyPerformance_goal_type(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	CPA = 'CPA'
	CPC = 'CPC'
	VIEWABLE_CPM = 'VIEWABLE_CPM'
	CUSTOM_ALGO = 'CUSTOM_ALGO'
	CIVA = 'CIVA'
	IVO_TEN = 'IVO_TEN'
	AV_VIEWED = 'AV_VIEWED'
	REACH = 'REACH'

@dataclasses.dataclass
class AdsGroupBid_strategyYoutube_and_partners_type(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	MANUAL_CPV = 'MANUAL_CPV'
	MANUAL_CPM = 'MANUAL_CPM'
	TARGET_CPA = 'TARGET_CPA'
	TARGET_CPM = 'TARGET_CPM'
	RESERVE_CPM = 'RESERVE_CPM'
	MAXIMIZE_LIFT = 'MAXIMIZE_LIFT'
	MAXIMIZE_CONVERSIONS = 'MAXIMIZE_CONVERSIONS'
	TARGET_CPV = 'TARGET_CPV'
	TARGET_ROAS = 'TARGET_ROAS'
	MAXIMIZE_CONVERSION_VALUE = 'MAXIMIZE_CONVERSION_VALUE'

@dataclasses.dataclass
class PropertyAdsGroupBid_strategy:
	type: Optional[AdsGroupBid_strategyType]
	fixed_bid_amount: Optional[int]
	performance_goal_type: Optional[AdsGroupBid_strategyPerformance_goal_type]
	performance_goal_amount: Optional[int]
	max_average_cpm_bid_amount: Optional[int]
	custom_bidding_algorithm_id: Optional[str]
	raise_bid_for_deals: Optional[bool]
	youtube_and_partners_type: Optional[AdsGroupBid_strategyYoutube_and_partners_type]
	youtube_and_partners_value: Optional[str]
	"""Target ROAS e.g. 2.5 = 250% (Google)"""
	target_roas: Optional[int]

@dataclasses.dataclass
class AdsGroupPacingPeriod(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	DAILY = 'DAILY'
	FLIGHT = 'FLIGHT'

@dataclasses.dataclass
class PropertyAdsGroupPacing:
	period: Optional[AdsGroupPacingPeriod]
	type: Optional[str]
	daily_max_amount: Optional[int]
	daily_max_impressions: Optional[int]

@dataclasses.dataclass
class AdsGroupFrequency_capTime_unit(str, Enum):
	UNSPECIFIED = 'UNSPECIFIED'
	LIFETIME = 'LIFETIME'
	MONTHS = 'MONTHS'
	WEEKS = 'WEEKS'
	DAYS = 'DAYS'
	HOURS = 'HOURS'
	MINUTES = 'MINUTES'

@dataclasses.dataclass
class PropertyAdsGroupFrequency_cap:
	is_unlimited: Optional[bool]
	time_unit: Optional[AdsGroupFrequency_capTime_unit]
	time_unit_count: Optional[int]
	max_impressions: Optional[int]
	max_views: Optional[int]

@dataclasses.dataclass
class AdsGroupDelivery_goalPeriod(str, Enum):
	DAILY = 'DAILY'
	MONTHLY = 'MONTHLY'
	TOTAL = 'TOTAL'
	LIFETIME = 'LIFETIME'

@dataclasses.dataclass
class AdsGroupDelivery_goalUnit(str, Enum):
	IMPRESSIONS = 'IMPRESSIONS'
	VIEWABLE_IMPRESSIONS = 'VIEWABLE_IMPRESSIONS'
	CLICKS = 'CLICKS'
	CONVERSIONS = 'CONVERSIONS'
	COMPLETED_VIEWS = 'COMPLETED_VIEWS'

@dataclasses.dataclass
class PropertyAdsGroupDelivery_goal:
	period: Optional[AdsGroupDelivery_goalPeriod]
	unit: Optional[AdsGroupDelivery_goalUnit]
	quantity: Optional[int]

@dataclasses.dataclass
class AdsGroup:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	"""The ad group's name"""
	name: Optional[str]
	parent_id: Optional[str]
	"""The ID of the campaign the ad group belongs to (an AdsCampaign ID)"""
	campaign_id: Optional[str]
	organization_id: Optional[str]
	insertionorder_id: Optional[str]
	status: Optional[AdsGroupStatus]
	effective_status: Optional[AdsGroupEffective_status]
	targeting: Optional[PropertyAdsGroupTargeting]
	bid_amount: Optional[int]
	"""YOUTUBE_AND_PARTNERS"""
	bid_strategy: Optional[PropertyAdsGroupBid_strategy]
	budget_amount: Optional[int]
	budget_period: Optional[AdsGroupBudget_period]
	budget_allocation_type: Optional[AdsGroupBudget_allocation_type]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	start_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	end_at: Optional[str]
	budget_unit: Optional[AdsGroupBudget_unit]
	budget_max_amount: Optional[int]
	type: Optional[AdsGroupType]
	has_eu_political_ads: Optional[bool]
	pacing: Optional[PropertyAdsGroupPacing]
	frequency_cap: Optional[PropertyAdsGroupFrequency_cap]
	creative_ids: Optional[List[List[str]]]
	"""Optimization goals for ads_group (cross-platform; platform-specific values allowed as pass-through)"""
	optimization_goal: Optional[AdsGroupOptimization_goal]
	"""Billing events for ads_group (what you pay for; cross-platform; platform-specific values allowed as pass-through)"""
	billing_event: Optional[AdsGroupBilling_event]
	currency: Optional[str]
	promoted: Optional[PropertyAdsGroupPromoted]
	"""Language + region, ISO 639-1 with region (e.g. en-US); LinkedIn locale"""
	language_locale: Optional[str]
	"""Creative rotation strategy (LinkedIn creativeSelection)"""
	creative_selection: Optional[AdsGroupCreative_selection]
	metadata: Optional[PropertyAdsGroupMetadata]

	"""Ad server line item type / delivery class (Google Ad Manager lineItemType)"""
	delivery_type: Optional[AdsGroupDelivery_type]
	"""Ad server delivery priority, lower serves first (Google Ad Manager priority, Kevel priority)"""
	priority: Optional[int]
	"""How the line item is priced (Google Ad Manager costType)"""
	cost_type: Optional[AdsGroupCost_type]
	"""Booked delivery goal (Google Ad Manager goal)"""
	delivery_goal: Optional[PropertyAdsGroupDelivery_goal]
	"""Expected creative sizes (Google Ad Manager creativePlaceholders)"""
	creative_sizes: Optional[PropertyAdsGroupCreative_sizes]
	"""Conversion trackers counted for this group (DV360 Floodlight activities, Pinterest conversion tag)"""
	conversion_tracking: Optional[PropertyAdsGroupConversion_tracking]
Are we missing anything? Let us know
Was this page helpful?